about summary refs log tree commit diff
diff options
context:
space:
mode:
authorAlex Crichton <alex@alexcrichton.com>2015-08-11 17:27:05 -0700
committerAlex Crichton <alex@alexcrichton.com>2015-08-12 14:55:17 -0700
commit8d90d3f36871a00023cc1f313f91e351c287ca15 (patch)
tree2d9b616a2468117aa3afe1f6b1f910ff3116776b
parentd07d465cf60033e35eba16b9e431471d54c712f4 (diff)
downloadrust-8d90d3f36871a00023cc1f313f91e351c287ca15.tar.gz
rust-8d90d3f36871a00023cc1f313f91e351c287ca15.zip
Remove all unstable deprecated functionality
This commit removes all unstable and deprecated functions in the standard
library. A release was recently cut (1.3) which makes this a good time for some
spring cleaning of the deprecated functions.
-rwxr-xr-xsrc/etc/unicode.py163
-rw-r--r--src/liballoc/arc.rs127
-rw-r--r--src/liballoc/boxed.rs26
-rw-r--r--src/liballoc/lib.rs2
-rw-r--r--src/liballoc/rc.rs134
-rw-r--r--src/libcollections/bit.rs2209
-rw-r--r--src/libcollections/btree/map.rs12
-rw-r--r--src/libcollections/lib.rs25
-rw-r--r--src/libcollections/slice.rs394
-rw-r--r--src/libcollections/str.rs475
-rw-r--r--src/libcollections/string.rs18
-rw-r--r--src/libcollections/vec.rs341
-rw-r--r--src/libcollections/vec_deque.rs22
-rw-r--r--src/libcollections/vec_map.rs1083
-rw-r--r--src/libcollectionstest/bit/mod.rs12
-rw-r--r--src/libcollectionstest/bit/set.rs520
-rw-r--r--src/libcollectionstest/bit/vec.rs881
-rw-r--r--src/libcollectionstest/btree/set.rs3
-rw-r--r--src/libcollectionstest/lib.rs27
-rw-r--r--src/libcollectionstest/linked_list.rs5
-rw-r--r--src/libcollectionstest/slice.rs186
-rw-r--r--src/libcollectionstest/str.rs559
-rw-r--r--src/libcollectionstest/vec.rs82
-rw-r--r--src/libcollectionstest/vec_deque.rs3
-rw-r--r--src/libcollectionstest/vec_map.rs526
-rw-r--r--src/libcore/cell.rs28
-rw-r--r--src/libcore/cmp.rs74
-rw-r--r--src/libcore/hash/mod.rs39
-rw-r--r--src/libcore/iter.rs545
-rw-r--r--src/libcore/marker.rs13
-rw-r--r--src/libcore/mem.rs30
-rw-r--r--src/libcore/num/f32.rs6
-rw-r--r--src/libcore/num/f64.rs6
-rw-r--r--src/libcore/num/mod.rs4
-rw-r--r--src/libcore/num/wrapping.rs1
-rw-r--r--src/libcore/ptr.rs21
-rw-r--r--src/libcore/result.rs34
-rw-r--r--src/libcore/slice.rs140
-rw-r--r--src/libcoretest/char.rs28
-rw-r--r--src/libcoretest/cmp.rs67
-rw-r--r--src/libcoretest/hash/mod.rs8
-rw-r--r--src/libcoretest/iter.rs186
-rw-r--r--src/libcoretest/lib.rs9
-rw-r--r--src/libgetopts/lib.rs10
-rw-r--r--src/librustc/lib.rs1
-rw-r--r--src/librustc/plugin/load.rs1
-rw-r--r--src/librustc/util/common.rs42
-rw-r--r--src/librustc_back/tempdir.rs1
-rw-r--r--src/librustc_bitflags/lib.rs13
-rw-r--r--src/librustc_lint/builtin.rs7
-rw-r--r--src/librustc_trans/save/mod.rs1
-rw-r--r--src/librustc_unicode/char.rs24
-rw-r--r--src/librustc_unicode/lib.rs4
-rw-r--r--src/librustc_unicode/normalize.rs162
-rw-r--r--src/librustc_unicode/tables.rs5963
-rw-r--r--src/librustc_unicode/u_str.rs296
-rw-r--r--src/librustdoc/lib.rs1
-rw-r--r--src/librustdoc/plugins.rs2
-rw-r--r--src/libserialize/collection_impls.rs31
-rw-r--r--src/libserialize/json.rs1
-rw-r--r--src/libserialize/lib.rs1
-rw-r--r--src/libstd/ascii.rs99
-rw-r--r--src/libstd/collections/hash/map.rs16
-rw-r--r--src/libstd/collections/mod.rs8
-rw-r--r--src/libstd/env.rs33
-rw-r--r--src/libstd/ffi/c_str.rs12
-rw-r--r--src/libstd/fs.rs55
-rw-r--r--src/libstd/io/buffered.rs149
-rw-r--r--src/libstd/io/mod.rs2
-rw-r--r--src/libstd/lib.rs2
-rw-r--r--src/libstd/net/tcp.rs20
-rw-r--r--src/libstd/net/udp.rs52
-rw-r--r--src/libstd/num/f32.rs2
-rw-r--r--src/libstd/num/f64.rs2
-rw-r--r--src/libstd/rt/mod.rs5
-rw-r--r--src/libstd/sync/future.rs231
-rw-r--r--src/libstd/sync/mod.rs4
-rw-r--r--src/libstd/sys/common/net.rs95
-rw-r--r--src/libstd/sys/common/remutex.rs22
-rw-r--r--src/libstd/sys/unix/fs.rs7
-rw-r--r--src/libstd/sys/unix/mod.rs8
-rw-r--r--src/libstd/sys/windows/fs.rs13
-rw-r--r--src/libstd/sys/windows/mod.rs10
-rw-r--r--src/libstd/sys/windows/net.rs1
-rw-r--r--src/libstd/sys/windows/os.rs9
-rw-r--r--src/libstd/thread/mod.rs110
-rw-r--r--src/libstd/thunk.rs21
-rw-r--r--src/libstd/time/duration.rs17
-rw-r--r--src/libsyntax/attr.rs24
-rw-r--r--src/libsyntax/lib.rs2
-rw-r--r--src/test/bench/core-set.rs13
-rw-r--r--src/test/bench/msgsend-ring-mutex-arcs.rs11
-rw-r--r--src/test/bench/shootout-k-nucleotide.rs21
-rw-r--r--src/test/bench/shootout-reverse-complement.rs5
-rw-r--r--src/test/bench/shootout-spectralnorm.rs5
-rw-r--r--src/test/bench/std-smallintmap.rs61
-rw-r--r--src/test/compile-fail/borrowck-move-out-of-static-item.rs5
-rw-r--r--src/test/compile-fail/borrowck-struct-update-with-dtor.rs7
-rw-r--r--src/test/compile-fail/future_not_copyable.rs17
-rw-r--r--src/test/compile-fail/issue-13352.rs10
-rw-r--r--src/test/compile-fail/issue-17718-static-move.rs6
-rw-r--r--src/test/compile-fail/marker-no-copy.rs18
-rw-r--r--src/test/compile-fail/send-is-not-static-ensures-scoping.rs14
-rw-r--r--src/test/compile-fail/static-items-cant-move.rs6
-rw-r--r--src/test/run-fail/rt-set-exit-status-panic.rs25
-rw-r--r--src/test/run-fail/rt-set-exit-status-panic2.rs44
-rw-r--r--src/test/run-fail/rt-set-exit-status.rs23
-rw-r--r--src/test/run-make/link-path-order/main.rs2
-rw-r--r--src/test/run-pass/bitv-perf-test.rs25
-rw-r--r--src/test/run-pass/deriving-hash.rs6
-rw-r--r--src/test/run-pass/dropck_legal_cycles.rs11
-rw-r--r--src/test/run-pass/fsu-moves-and-copies.rs6
-rw-r--r--src/test/run-pass/issue-11709.rs8
-rw-r--r--src/test/run-pass/issue-11736.rs35
-rw-r--r--src/test/run-pass/issue-16530.rs10
-rw-r--r--src/test/run-pass/issue-17897.rs6
-rw-r--r--src/test/run-pass/issue-18188.rs12
-rw-r--r--src/test/run-pass/issue-2190-1.rs7
-rw-r--r--src/test/run-pass/minmax-stability-issue-23687.rs10
-rw-r--r--src/test/run-pass/send-is-not-static-par-for.rs14
-rw-r--r--src/test/run-pass/sync-send-iterators-in-libcollections.rs12
-rw-r--r--src/test/run-pass/sync-send-iterators-in-libcore.rs3
-rw-r--r--src/test/run-pass/typeid-intrinsic.rs13
-rw-r--r--src/test/run-pass/ufcs-polymorphic-paths.rs40
-rw-r--r--src/test/run-pass/unfold-cross-crate.rs36
125 files changed, 1684 insertions, 15529 deletions
diff --git a/src/etc/unicode.py b/src/etc/unicode.py
index a740e837fdd..2c147419470 100755
--- a/src/etc/unicode.py
+++ b/src/etc/unicode.py
@@ -395,46 +395,6 @@ def emit_conversions_module(f, to_upper, to_lower, to_title):
         is_pub=False, t_type = t_type, pfun=pfun)
     f.write("}\n\n")
 
-def emit_grapheme_module(f, grapheme_table, grapheme_cats):
-    f.write("""pub mod grapheme {
-    use core::slice::SliceExt;
-    pub use self::GraphemeCat::*;
-    use core::result::Result::{Ok, Err};
-
-    #[allow(non_camel_case_types)]
-    #[derive(Clone, Copy)]
-    pub enum GraphemeCat {
-""")
-    for cat in grapheme_cats + ["Any"]:
-        f.write("        GC_" + cat + ",\n")
-    f.write("""    }
-
-    fn bsearch_range_value_table(c: char, r: &'static [(char, char, GraphemeCat)]) -> GraphemeCat {
-        use core::cmp::Ordering::{Equal, Less, Greater};
-        match r.binary_search_by(|&(lo, hi, _)| {
-            if lo <= c && c <= hi { Equal }
-            else if hi < c { Less }
-            else { Greater }
-        }) {
-            Ok(idx) => {
-                let (_, _, cat) = r[idx];
-                cat
-            }
-            Err(_) => GC_Any
-        }
-    }
-
-    pub fn grapheme_category(c: char) -> GraphemeCat {
-        bsearch_range_value_table(c, grapheme_cat_table)
-    }
-
-""")
-
-    emit_table(f, "grapheme_cat_table", grapheme_table, "&'static [(char, char, GraphemeCat)]",
-        pfun=lambda x: "(%s,%s,GC_%s)" % (escape_char(x[0]), escape_char(x[1]), x[2]),
-        is_pub=False)
-    f.write("}\n")
-
 def emit_charwidth_module(f, width_table):
     f.write("pub mod charwidth {\n")
     f.write("    use core::option::Option;\n")
@@ -497,79 +457,6 @@ def emit_norm_module(f, canon, compat, combine, norm_props):
     canon_comp_keys = canon_comp.keys()
     canon_comp_keys.sort()
 
-    f.write("pub mod normalization {\n")
-
-    def mkdata_fun(table):
-        def f(char):
-            data = "(%s,&[" % escape_char(char)
-            first = True
-            for d in table[char]:
-                if not first:
-                    data += ","
-                first = False
-                data += escape_char(d)
-            data += "])"
-            return data
-        return f
-
-    f.write("    // Canonical decompositions\n")
-    emit_table(f, "canonical_table", canon_keys, "&'static [(char, &'static [char])]",
-        pfun=mkdata_fun(canon))
-
-    f.write("    // Compatibility decompositions\n")
-    emit_table(f, "compatibility_table", compat_keys, "&'static [(char, &'static [char])]",
-        pfun=mkdata_fun(compat))
-
-    def comp_pfun(char):
-        data = "(%s,&[" % escape_char(char)
-        canon_comp[char].sort(lambda x, y: x[0] - y[0])
-        first = True
-        for pair in canon_comp[char]:
-            if not first:
-                data += ","
-            first = False
-            data += "(%s,%s)" % (escape_char(pair[0]), escape_char(pair[1]))
-        data += "])"
-        return data
-
-    f.write("    // Canonical compositions\n")
-    emit_table(f, "composition_table", canon_comp_keys,
-        "&'static [(char, &'static [(char, char)])]", pfun=comp_pfun)
-
-    f.write("""
-    fn bsearch_range_value_table(c: char, r: &'static [(char, char, u8)]) -> u8 {
-        use core::cmp::Ordering::{Equal, Less, Greater};
-        use core::slice::SliceExt;
-        use core::result::Result::{Ok, Err};
-        match r.binary_search_by(|&(lo, hi, _)| {
-            if lo <= c && c <= hi { Equal }
-            else if hi < c { Less }
-            else { Greater }
-        }) {
-            Ok(idx) => {
-                let (_, _, result) = r[idx];
-                result
-            }
-            Err(_) => 0
-        }
-    }\n
-""")
-
-    emit_table(f, "combining_class_table", combine, "&'static [(char, char, u8)]", is_pub=False,
-            pfun=lambda x: "(%s,%s,%s)" % (escape_char(x[0]), escape_char(x[1]), x[2]))
-
-    f.write("""    #[deprecated(reason = "use the crates.io `unicode-normalization` lib instead",
-                 since = "1.0.0")]
-    #[unstable(feature = "unicode",
-               reason = "this functionality will be moved to crates.io")]
-    pub fn canonical_combining_class(c: char) -> u8 {
-        bsearch_range_value_table(c, combining_class_table)
-    }
-
-}
-
-""")
-
 def remove_from_wtable(wtable, val):
     wtable_out = []
     while wtable:
@@ -649,53 +536,3 @@ pub const UNICODE_VERSION: (u64, u64, u64) = (%s, %s, %s);
         # normalizations and conversions module
         emit_norm_module(rf, canon_decomp, compat_decomp, combines, norm_props)
         emit_conversions_module(rf, to_upper, to_lower, to_title)
-
-        ### character width module
-        width_table = []
-        for zwcat in ["Me", "Mn", "Cf"]:
-            width_table.extend(map(lambda (lo, hi): (lo, hi, 0, 0), gencats[zwcat]))
-        width_table.append((4448, 4607, 0, 0))
-
-        # get widths, except those that are explicitly marked zero-width above
-        ea_widths = load_east_asian_width(["W", "F", "A"], ["Me", "Mn", "Cf"])
-        # these are doublewidth
-        for dwcat in ["W", "F"]:
-            width_table.extend(map(lambda (lo, hi): (lo, hi, 2, 2), ea_widths[dwcat]))
-        width_table.extend(map(lambda (lo, hi): (lo, hi, 1, 2), ea_widths["A"]))
-
-        width_table.sort(key=lambda w: w[0])
-
-        # soft hyphen is not zero width in preformatted text; it's used to indicate
-        # a hyphen inserted to facilitate a linebreak.
-        width_table = remove_from_wtable(width_table, 173)
-
-        # optimize the width table by collapsing adjacent entities when possible
-        width_table = optimize_width_table(width_table)
-        emit_charwidth_module(rf, width_table)
-
-        ### grapheme cluster module
-        # from http://www.unicode.org/reports/tr29/#Grapheme_Cluster_Break_Property_Values
-        grapheme_cats = load_properties("auxiliary/GraphemeBreakProperty.txt", [])
-
-        # Control
-        #  Note 1:
-        # This category also includes Cs (surrogate codepoints), but Rust's `char`s are
-        # Unicode Scalar Values only, and surrogates are thus invalid `char`s.
-        # Thus, we have to remove Cs from the Control category
-        #  Note 2:
-        # 0x0a and 0x0d (CR and LF) are not in the Control category for Graphemes.
-        # However, the Graphemes iterator treats these as a special case, so they
-        # should be included in grapheme_cats["Control"] for our implementation.
-        grapheme_cats["Control"] = group_cat(list(
-            (set(ungroup_cat(grapheme_cats["Control"]))
-             | set(ungroup_cat(grapheme_cats["CR"]))
-             | set(ungroup_cat(grapheme_cats["LF"])))
-            - set(ungroup_cat([surrogate_codepoints]))))
-        del(grapheme_cats["CR"])
-        del(grapheme_cats["LF"])
-
-        grapheme_table = []
-        for cat in grapheme_cats:
-            grapheme_table.extend([(x, y, cat) for (x, y) in grapheme_cats[cat]])
-        grapheme_table.sort(key=lambda w: w[0])
-        emit_grapheme_module(rf, grapheme_table, grapheme_cats.keys())
diff --git a/src/liballoc/arc.rs b/src/liballoc/arc.rs
index ccf8784e2a7..09a4f9e0a62 100644
--- a/src/liballoc/arc.rs
+++ b/src/liballoc/arc.rs
@@ -272,18 +272,6 @@ impl<T: ?Sized> Arc<T> {
     }
 }
 
-/// Get the number of weak references to this value.
-#[inline]
-#[unstable(feature = "arc_counts")]
-#[deprecated(since = "1.2.0", reason = "renamed to Arc::weak_count")]
-pub fn weak_count<T: ?Sized>(this: &Arc<T>) -> usize { Arc::weak_count(this) }
-
-/// Get the number of strong references to this value.
-#[inline]
-#[unstable(feature = "arc_counts")]
-#[deprecated(since = "1.2.0", reason = "renamed to Arc::strong_count")]
-pub fn strong_count<T: ?Sized>(this: &Arc<T>) -> usize { Arc::strong_count(this) }
-
 #[stable(feature = "rust1", since = "1.0.0")]
 impl<T: ?Sized> Clone for Arc<T> {
     /// Makes a clone of the `Arc<T>`.
@@ -484,13 +472,6 @@ impl<T: ?Sized> Arc<T> {
     }
 }
 
-#[inline]
-#[unstable(feature = "arc_unique")]
-#[deprecated(since = "1.2", reason = "use Arc::get_mut instead")]
-pub fn get_mut<T: ?Sized>(this: &mut Arc<T>) -> Option<&mut T> {
-    Arc::get_mut(this)
-}
-
 #[stable(feature = "rust1", since = "1.0.0")]
 impl<T: ?Sized> Drop for Arc<T> {
     /// Drops the `Arc<T>`.
@@ -860,7 +841,7 @@ mod tests {
     use std::sync::atomic::Ordering::{Acquire, SeqCst};
     use std::thread;
     use std::vec::Vec;
-    use super::{Arc, Weak, get_mut, weak_count, strong_count};
+    use super::{Arc, Weak};
     use std::sync::Mutex;
 
     struct Canary(*mut atomic::AtomicUsize);
@@ -898,43 +879,39 @@ mod tests {
 
     #[test]
     fn test_arc_get_mut() {
-        unsafe {
-            let mut x = Arc::new(3);
-            *get_mut(&mut x).unwrap() = 4;
-            assert_eq!(*x, 4);
-            let y = x.clone();
-            assert!(get_mut(&mut x).is_none());
-            drop(y);
-            assert!(get_mut(&mut x).is_some());
-            let _w = x.downgrade();
-            assert!(get_mut(&mut x).is_none());
-        }
+        let mut x = Arc::new(3);
+        *Arc::get_mut(&mut x).unwrap() = 4;
+        assert_eq!(*x, 4);
+        let y = x.clone();
+        assert!(Arc::get_mut(&mut x).is_none());
+        drop(y);
+        assert!(Arc::get_mut(&mut x).is_some());
+        let _w = x.downgrade();
+        assert!(Arc::get_mut(&mut x).is_none());
     }
 
     #[test]
     fn test_cowarc_clone_make_unique() {
-        unsafe {
-            let mut cow0 = Arc::new(75);
-            let mut cow1 = cow0.clone();
-            let mut cow2 = cow1.clone();
-
-            assert!(75 == *Arc::make_unique(&mut cow0));
-            assert!(75 == *Arc::make_unique(&mut cow1));
-            assert!(75 == *Arc::make_unique(&mut cow2));
-
-            *Arc::make_unique(&mut cow0) += 1;
-            *Arc::make_unique(&mut cow1) += 2;
-            *Arc::make_unique(&mut cow2) += 3;
-
-            assert!(76 == *cow0);
-            assert!(77 == *cow1);
-            assert!(78 == *cow2);
-
-            // none should point to the same backing memory
-            assert!(*cow0 != *cow1);
-            assert!(*cow0 != *cow2);
-            assert!(*cow1 != *cow2);
-        }
+        let mut cow0 = Arc::new(75);
+        let mut cow1 = cow0.clone();
+        let mut cow2 = cow1.clone();
+
+        assert!(75 == *Arc::make_unique(&mut cow0));
+        assert!(75 == *Arc::make_unique(&mut cow1));
+        assert!(75 == *Arc::make_unique(&mut cow2));
+
+        *Arc::make_unique(&mut cow0) += 1;
+        *Arc::make_unique(&mut cow1) += 2;
+        *Arc::make_unique(&mut cow2) += 3;
+
+        assert!(76 == *cow0);
+        assert!(77 == *cow1);
+        assert!(78 == *cow2);
+
+        // none should point to the same backing memory
+        assert!(*cow0 != *cow1);
+        assert!(*cow0 != *cow2);
+        assert!(*cow1 != *cow2);
     }
 
     #[test]
@@ -947,9 +924,7 @@ mod tests {
         assert!(75 == *cow1);
         assert!(75 == *cow2);
 
-        unsafe {
-            *Arc::make_unique(&mut cow0) += 1;
-        }
+        *Arc::make_unique(&mut cow0) += 1;
 
         assert!(76 == *cow0);
         assert!(75 == *cow1);
@@ -970,9 +945,7 @@ mod tests {
         assert!(75 == *cow0);
         assert!(75 == *cow1_weak.upgrade().unwrap());
 
-        unsafe {
-            *Arc::make_unique(&mut cow0) += 1;
-        }
+        *Arc::make_unique(&mut cow0) += 1;
 
         assert!(76 == *cow0);
         assert!(cow1_weak.upgrade().is_none());
@@ -1028,40 +1001,40 @@ mod tests {
     #[test]
     fn test_strong_count() {
         let a = Arc::new(0u32);
-        assert!(strong_count(&a) == 1);
+        assert!(Arc::strong_count(&a) == 1);
         let w = a.downgrade();
-        assert!(strong_count(&a) == 1);
+        assert!(Arc::strong_count(&a) == 1);
         let b = w.upgrade().expect("");
-        assert!(strong_count(&b) == 2);
-        assert!(strong_count(&a) == 2);
+        assert!(Arc::strong_count(&b) == 2);
+        assert!(Arc::strong_count(&a) == 2);
         drop(w);
         drop(a);
-        assert!(strong_count(&b) == 1);
+        assert!(Arc::strong_count(&b) == 1);
         let c = b.clone();
-        assert!(strong_count(&b) == 2);
-        assert!(strong_count(&c) == 2);
+        assert!(Arc::strong_count(&b) == 2);
+        assert!(Arc::strong_count(&c) == 2);
     }
 
     #[test]
     fn test_weak_count() {
         let a = Arc::new(0u32);
-        assert!(strong_count(&a) == 1);
-        assert!(weak_count(&a) == 0);
+        assert!(Arc::strong_count(&a) == 1);
+        assert!(Arc::weak_count(&a) == 0);
         let w = a.downgrade();
-        assert!(strong_count(&a) == 1);
-        assert!(weak_count(&a) == 1);
+        assert!(Arc::strong_count(&a) == 1);
+        assert!(Arc::weak_count(&a) == 1);
         let x = w.clone();
-        assert!(weak_count(&a) == 2);
+        assert!(Arc::weak_count(&a) == 2);
         drop(w);
         drop(x);
-        assert!(strong_count(&a) == 1);
-        assert!(weak_count(&a) == 0);
+        assert!(Arc::strong_count(&a) == 1);
+        assert!(Arc::weak_count(&a) == 0);
         let c = a.clone();
-        assert!(strong_count(&a) == 2);
-        assert!(weak_count(&a) == 0);
+        assert!(Arc::strong_count(&a) == 2);
+        assert!(Arc::weak_count(&a) == 0);
         let d = c.downgrade();
-        assert!(weak_count(&c) == 1);
-        assert!(strong_count(&c) == 2);
+        assert!(Arc::weak_count(&c) == 1);
+        assert!(Arc::strong_count(&c) == 2);
 
         drop(a);
         drop(c);
diff --git a/src/liballoc/boxed.rs b/src/liballoc/boxed.rs
index f31bb60ed97..8d357eb49a9 100644
--- a/src/liballoc/boxed.rs
+++ b/src/liballoc/boxed.rs
@@ -86,7 +86,6 @@ use core::raw::{TraitObject};
 #[lang = "exchange_heap"]
 #[unstable(feature = "box_heap",
            reason = "may be renamed; uncertain about custom allocator design")]
-#[allow(deprecated)]
 pub const HEAP: ExchangeHeapSingleton =
     ExchangeHeapSingleton { _force_singleton: () };
 
@@ -254,31 +253,6 @@ impl<T : ?Sized> Box<T> {
     }
 }
 
-/// Consumes the `Box`, returning the wrapped raw pointer.
-///
-/// After call to this function, caller is responsible for the memory
-/// previously managed by `Box`, in particular caller should properly
-/// destroy `T` and release memory. The proper way to do it is to
-/// convert pointer back to `Box` with `Box::from_raw` function, because
-/// `Box` does not specify, how memory is allocated.
-///
-/// # Examples
-/// ```
-/// #![feature(box_raw)]
-///
-/// use std::boxed;
-///
-/// let seventeen = Box::new(17u32);
-/// let raw = boxed::into_raw(seventeen);
-/// let boxed_again = unsafe { Box::from_raw(raw) };
-/// ```
-#[unstable(feature = "box_raw", reason = "may be renamed")]
-#[deprecated(since = "1.2.0", reason = "renamed to Box::into_raw")]
-#[inline]
-pub fn into_raw<T : ?Sized>(b: Box<T>) -> *mut T {
-    Box::into_raw(b)
-}
-
 #[stable(feature = "rust1", since = "1.0.0")]
 impl<T: Default> Default for Box<T> {
     #[stable(feature = "rust1", since = "1.0.0")]
diff --git a/src/liballoc/lib.rs b/src/liballoc/lib.rs
index 6551011e81d..05863c2ee5c 100644
--- a/src/liballoc/lib.rs
+++ b/src/liballoc/lib.rs
@@ -93,7 +93,7 @@
 #![feature(core_slice_ext)]
 #![feature(core_str_ext)]
 
-#![cfg_attr(test, feature(test, alloc, rustc_private, box_raw))]
+#![cfg_attr(test, feature(test, rustc_private, box_raw))]
 #![cfg_attr(all(not(feature = "external_funcs"), not(feature = "external_crate")),
             feature(libc))]
 
diff --git a/src/liballoc/rc.rs b/src/liballoc/rc.rs
index 620ceaa346b..b750e051f28 100644
--- a/src/liballoc/rc.rs
+++ b/src/liballoc/rc.rs
@@ -338,84 +338,6 @@ impl<T: ?Sized> Rc<T> {
     }
 }
 
-/// Get the number of weak references to this value.
-#[inline]
-#[unstable(feature = "rc_counts")]
-#[deprecated(since = "1.2.0", reason = "renamed to Rc::weak_count")]
-pub fn weak_count<T: ?Sized>(this: &Rc<T>) -> usize { Rc::weak_count(this) }
-
-/// Get the number of strong references to this value.
-#[inline]
-#[unstable(feature = "rc_counts")]
-#[deprecated(since = "1.2.0", reason = "renamed to Rc::strong_count")]
-pub fn strong_count<T: ?Sized>(this: &Rc<T>) -> usize { Rc::strong_count(this) }
-
-/// Returns true if there are no other `Rc` or `Weak<T>` values that share the
-/// same inner value.
-///
-/// # Examples
-///
-/// ```
-/// #![feature(rc_unique)]
-///
-/// use std::rc;
-/// use std::rc::Rc;
-///
-/// let five = Rc::new(5);
-///
-/// rc::is_unique(&five);
-/// ```
-#[inline]
-#[unstable(feature = "rc_unique")]
-#[deprecated(since = "1.2.0", reason = "renamed to Rc::is_unique")]
-pub fn is_unique<T>(rc: &Rc<T>) -> bool { Rc::is_unique(rc) }
-
-/// Unwraps the contained value if the `Rc<T>` is unique.
-///
-/// If the `Rc<T>` is not unique, an `Err` is returned with the same `Rc<T>`.
-///
-/// # Examples
-///
-/// ```
-/// #![feature(rc_unique)]
-///
-/// use std::rc::{self, Rc};
-///
-/// let x = Rc::new(3);
-/// assert_eq!(rc::try_unwrap(x), Ok(3));
-///
-/// let x = Rc::new(4);
-/// let _y = x.clone();
-/// assert_eq!(rc::try_unwrap(x), Err(Rc::new(4)));
-/// ```
-#[inline]
-#[unstable(feature = "rc_unique")]
-#[deprecated(since = "1.2.0", reason = "renamed to Rc::try_unwrap")]
-pub fn try_unwrap<T>(rc: Rc<T>) -> Result<T, Rc<T>> { Rc::try_unwrap(rc) }
-
-/// Returns a mutable reference to the contained value if the `Rc<T>` is unique.
-///
-/// Returns `None` if the `Rc<T>` is not unique.
-///
-/// # Examples
-///
-/// ```
-/// #![feature(rc_unique)]
-///
-/// use std::rc::{self, Rc};
-///
-/// let mut x = Rc::new(3);
-/// *rc::get_mut(&mut x).unwrap() = 4;
-/// assert_eq!(*x, 4);
-///
-/// let _y = x.clone();
-/// assert!(rc::get_mut(&mut x).is_none());
-/// ```
-#[inline]
-#[unstable(feature = "rc_unique")]
-#[deprecated(since = "1.2.0", reason = "renamed to Rc::get_mut")]
-pub fn get_mut<T>(rc: &mut Rc<T>) -> Option<&mut T> { Rc::get_mut(rc) }
-
 impl<T: Clone> Rc<T> {
     /// Make a mutable reference from the given `Rc<T>`.
     ///
@@ -922,7 +844,7 @@ impl<T: ?Sized> RcBoxPtr<T> for Weak<T> {
 
 #[cfg(test)]
 mod tests {
-    use super::{Rc, Weak, weak_count, strong_count};
+    use super::{Rc, Weak};
     use std::boxed::Box;
     use std::cell::RefCell;
     use std::option::Option;
@@ -990,74 +912,74 @@ mod tests {
     #[test]
     fn is_unique() {
         let x = Rc::new(3);
-        assert!(super::is_unique(&x));
+        assert!(Rc::is_unique(&x));
         let y = x.clone();
-        assert!(!super::is_unique(&x));
+        assert!(!Rc::is_unique(&x));
         drop(y);
-        assert!(super::is_unique(&x));
+        assert!(Rc::is_unique(&x));
         let w = x.downgrade();
-        assert!(!super::is_unique(&x));
+        assert!(!Rc::is_unique(&x));
         drop(w);
-        assert!(super::is_unique(&x));
+        assert!(Rc::is_unique(&x));
     }
 
     #[test]
     fn test_strong_count() {
         let a = Rc::new(0u32);
-        assert!(strong_count(&a) == 1);
+        assert!(Rc::strong_count(&a) == 1);
         let w = a.downgrade();
-        assert!(strong_count(&a) == 1);
+        assert!(Rc::strong_count(&a) == 1);
         let b = w.upgrade().expect("upgrade of live rc failed");
-        assert!(strong_count(&b) == 2);
-        assert!(strong_count(&a) == 2);
+        assert!(Rc::strong_count(&b) == 2);
+        assert!(Rc::strong_count(&a) == 2);
         drop(w);
         drop(a);
-        assert!(strong_count(&b) == 1);
+        assert!(Rc::strong_count(&b) == 1);
         let c = b.clone();
-        assert!(strong_count(&b) == 2);
-        assert!(strong_count(&c) == 2);
+        assert!(Rc::strong_count(&b) == 2);
+        assert!(Rc::strong_count(&c) == 2);
     }
 
     #[test]
     fn test_weak_count() {
         let a = Rc::new(0u32);
-        assert!(strong_count(&a) == 1);
-        assert!(weak_count(&a) == 0);
+        assert!(Rc::strong_count(&a) == 1);
+        assert!(Rc::weak_count(&a) == 0);
         let w = a.downgrade();
-        assert!(strong_count(&a) == 1);
-        assert!(weak_count(&a) == 1);
+        assert!(Rc::strong_count(&a) == 1);
+        assert!(Rc::weak_count(&a) == 1);
         drop(w);
-        assert!(strong_count(&a) == 1);
-        assert!(weak_count(&a) == 0);
+        assert!(Rc::strong_count(&a) == 1);
+        assert!(Rc::weak_count(&a) == 0);
         let c = a.clone();
-        assert!(strong_count(&a) == 2);
-        assert!(weak_count(&a) == 0);
+        assert!(Rc::strong_count(&a) == 2);
+        assert!(Rc::weak_count(&a) == 0);
         drop(c);
     }
 
     #[test]
     fn try_unwrap() {
         let x = Rc::new(3);
-        assert_eq!(super::try_unwrap(x), Ok(3));
+        assert_eq!(Rc::try_unwrap(x), Ok(3));
         let x = Rc::new(4);
         let _y = x.clone();
-        assert_eq!(super::try_unwrap(x), Err(Rc::new(4)));
+        assert_eq!(Rc::try_unwrap(x), Err(Rc::new(4)));
         let x = Rc::new(5);
         let _w = x.downgrade();
-        assert_eq!(super::try_unwrap(x), Err(Rc::new(5)));
+        assert_eq!(Rc::try_unwrap(x), Err(Rc::new(5)));
     }
 
     #[test]
     fn get_mut() {
         let mut x = Rc::new(3);
-        *super::get_mut(&mut x).unwrap() = 4;
+        *Rc::get_mut(&mut x).unwrap() = 4;
         assert_eq!(*x, 4);
         let y = x.clone();
-        assert!(super::get_mut(&mut x).is_none());
+        assert!(Rc::get_mut(&mut x).is_none());
         drop(y);
-        assert!(super::get_mut(&mut x).is_some());
+        assert!(Rc::get_mut(&mut x).is_some());
         let _w = x.downgrade();
-        assert!(super::get_mut(&mut x).is_none());
+        assert!(Rc::get_mut(&mut x).is_none());
     }
 
     #[test]
diff --git a/src/libcollections/bit.rs b/src/libcollections/bit.rs
deleted file mode 100644
index e1ae4c51e3a..00000000000
--- a/src/libcollections/bit.rs
+++ /dev/null
@@ -1,2209 +0,0 @@
-// Copyright 2012-2014 The Rust Project Developers. See the COPYRIGHT
-// file at the top-level directory of this distribution and at
-// http://rust-lang.org/COPYRIGHT.
-//
-// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
-// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
-// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
-// option. This file may not be copied, modified, or distributed
-// except according to those terms.
-
-#![deprecated(reason = "BitVec and BitSet have been migrated to cargo as bit-vec and bit-set",
-              since = "1.3.0")]
-#![unstable(feature = "collections", reason = "deprecated")]
-#![allow(deprecated)]
-
-// FIXME(Gankro): BitVec and BitSet are very tightly coupled. Ideally (for
-// maintenance), they should be in separate files/modules, with BitSet only
-// using BitVec's public API. This will be hard for performance though, because
-// `BitVec` will not want to leak its internal representation while its internal
-// representation as `u32`s must be assumed for best performance.
-
-// FIXME(tbu-): `BitVec`'s methods shouldn't be `union`, `intersection`, but
-// rather `or` and `and`.
-
-// (1) Be careful, most things can overflow here because the amount of bits in
-//     memory can overflow `usize`.
-// (2) Make sure that the underlying vector has no excess length:
-//     E. g. `nbits == 16`, `storage.len() == 2` would be excess length,
-//     because the last word isn't used at all. This is important because some
-//     methods rely on it (for *CORRECTNESS*).
-// (3) Make sure that the unused bits in the last word are zeroed out, again
-//     other methods rely on it for *CORRECTNESS*.
-// (4) `BitSet` is tightly coupled with `BitVec`, so any changes you make in
-// `BitVec` will need to be reflected in `BitSet`.
-
-//! Collections implemented with bit vectors.
-//!
-//! # Examples
-//!
-//! This is a simple example of the [Sieve of Eratosthenes][sieve]
-//! which calculates prime numbers up to a given limit.
-//!
-//! [sieve]: http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes
-//!
-//! ```
-//! #![feature(bitset, bitvec, range_inclusive, step_by)]
-//!
-//! use std::collections::{BitSet, BitVec};
-//! use std::iter;
-//!
-//! let max_prime = 10000;
-//!
-//! // Store the primes as a BitSet
-//! let primes = {
-//!     // Assume all numbers are prime to begin, and then we
-//!     // cross off non-primes progressively
-//!     let mut bv = BitVec::from_elem(max_prime, true);
-//!
-//!     // Neither 0 nor 1 are prime
-//!     bv.set(0, false);
-//!     bv.set(1, false);
-//!
-//!     for i in iter::range_inclusive(2, (max_prime as f64).sqrt() as usize) {
-//!         // if i is a prime
-//!         if bv[i] {
-//!             // Mark all multiples of i as non-prime (any multiples below i * i
-//!             // will have been marked as non-prime previously)
-//!             for j in (i * i..max_prime).step_by(i) { bv.set(j, false) }
-//!         }
-//!     }
-//!     BitSet::from_bit_vec(bv)
-//! };
-//!
-//! // Simple primality tests below our max bound
-//! let print_primes = 20;
-//! print!("The primes below {} are: ", print_primes);
-//! for x in 0..print_primes {
-//!     if primes.contains(&x) {
-//!         print!("{} ", x);
-//!     }
-//! }
-//! println!("");
-//!
-//! // We can manipulate the internal BitVec
-//! let num_primes = primes.get_ref().iter().filter(|x| *x).count();
-//! println!("There are {} primes below {}", num_primes, max_prime);
-//! ```
-
-use core::cmp::Ordering;
-use core::cmp;
-use core::fmt;
-use core::hash;
-#[allow(deprecated)]
-use core::iter::RandomAccessIterator;
-use core::iter::{Chain, Enumerate, Repeat, Skip, Take, repeat, Cloned};
-use core::iter::{self, FromIterator};
-use core::mem::swap;
-use core::ops::Index;
-use core::slice;
-use core::{u8, u32, usize};
-use bit_set; //so meta
-
-use Vec;
-
-type Blocks<'a> = Cloned<slice::Iter<'a, u32>>;
-type MutBlocks<'a> = slice::IterMut<'a, u32>;
-type MatchWords<'a> = Chain<Enumerate<Blocks<'a>>, Skip<Take<Enumerate<Repeat<u32>>>>>;
-
-fn reverse_bits(byte: u8) -> u8 {
-    let mut result = 0;
-    for i in 0..u8::BITS {
-        result |= ((byte >> i) & 1) << (u8::BITS - 1 - i);
-    }
-    result
-}
-
-// Take two BitVec's, and return iterators of their words, where the shorter one
-// has been padded with 0's
-fn match_words <'a,'b>(a: &'a BitVec, b: &'b BitVec) -> (MatchWords<'a>, MatchWords<'b>) {
-    let a_len = a.storage.len();
-    let b_len = b.storage.len();
-
-    // have to uselessly pretend to pad the longer one for type matching
-    if a_len < b_len {
-        (a.blocks().enumerate().chain(iter::repeat(0).enumerate().take(b_len).skip(a_len)),
-         b.blocks().enumerate().chain(iter::repeat(0).enumerate().take(0).skip(0)))
-    } else {
-        (a.blocks().enumerate().chain(iter::repeat(0).enumerate().take(0).skip(0)),
-         b.blocks().enumerate().chain(iter::repeat(0).enumerate().take(a_len).skip(b_len)))
-    }
-}
-
-const TRUE: &'static bool = &true;
-const FALSE: &'static bool = &false;
-
-/// The bitvector type.
-///
-/// # Examples
-///
-/// ```
-/// #![feature(bitvec)]
-///
-/// use std::collections::BitVec;
-///
-/// let mut bv = BitVec::from_elem(10, false);
-///
-/// // insert all primes less than 10
-/// bv.set(2, true);
-/// bv.set(3, true);
-/// bv.set(5, true);
-/// bv.set(7, true);
-/// println!("{:?}", bv);
-/// println!("total bits set to true: {}", bv.iter().filter(|x| *x).count());
-///
-/// // flip all values in bitvector, producing non-primes less than 10
-/// bv.negate();
-/// println!("{:?}", bv);
-/// println!("total bits set to true: {}", bv.iter().filter(|x| *x).count());
-///
-/// // reset bitvector to empty
-/// bv.clear();
-/// println!("{:?}", bv);
-/// println!("total bits set to true: {}", bv.iter().filter(|x| *x).count());
-/// ```
-#[unstable(feature = "bitvec", reason = "RFC 509")]
-pub struct BitVec {
-    /// Internal representation of the bit vector
-    storage: Vec<u32>,
-    /// The number of valid bits in the internal representation
-    nbits: usize
-}
-
-// FIXME(Gankro): NopeNopeNopeNopeNope (wait for IndexGet to be a thing)
-impl Index<usize> for BitVec {
-    type Output = bool;
-
-    #[inline]
-    fn index(&self, i: usize) -> &bool {
-        if self.get(i).expect("index out of bounds") {
-            TRUE
-        } else {
-            FALSE
-        }
-    }
-}
-
-/// Computes how many blocks are needed to store that many bits
-fn blocks_for_bits(bits: usize) -> usize {
-    // If we want 17 bits, dividing by 32 will produce 0. So we add 1 to make
-    // sure we reserve enough. But if we want exactly a multiple of 32, this
-    // will actually allocate one too many. So we need to check if that's the
-    // case. We can do that by computing if bitwise AND by `32 - 1` is 0. But
-    // LLVM should be able to optimize the semantically superior modulo operator
-    // on a power of two to this.
-    //
-    // Note that we can technically avoid this branch with the expression
-    // `(nbits + u32::BITS - 1) / 32::BITS`, but if nbits is almost usize::MAX
-    // this will overflow.
-    if bits % u32::BITS == 0 {
-        bits / u32::BITS
-    } else {
-        bits / u32::BITS + 1
-    }
-}
-
-/// Computes the bitmask for the final word of the vector
-fn mask_for_bits(bits: usize) -> u32 {
-    // Note especially that a perfect multiple of u32::BITS should mask all 1s.
-    !0 >> (u32::BITS - bits % u32::BITS) % u32::BITS
-}
-
-#[unstable(feature = "bitvec", reason = "RFC 509")]
-impl BitVec {
-    /// Applies the given operation to the blocks of self and other, and sets
-    /// self to be the result. This relies on the caller not to corrupt the
-    /// last word.
-    #[inline]
-    fn process<F>(&mut self, other: &BitVec, mut op: F) -> bool where F: FnMut(u32, u32) -> u32 {
-        assert_eq!(self.len(), other.len());
-        // This could theoretically be a `debug_assert!`.
-        assert_eq!(self.storage.len(), other.storage.len());
-        let mut changed_bits = 0;
-        for (a, b) in self.blocks_mut().zip(other.blocks()) {
-            let w = op(*a, b);
-            changed_bits |= *a ^ w;
-            *a = w;
-        }
-        changed_bits != 0
-    }
-
-    /// Iterator over mutable refs to  the underlying blocks of data.
-    fn blocks_mut(&mut self) -> MutBlocks {
-        // (2)
-        self.storage.iter_mut()
-    }
-
-    /// Iterator over the underlying blocks of data
-    fn blocks(&self) -> Blocks {
-        // (2)
-        self.storage.iter().cloned()
-    }
-
-    /// An operation might screw up the unused bits in the last block of the
-    /// `BitVec`. As per (3), it's assumed to be all 0s. This method fixes it up.
-    fn fix_last_block(&mut self) {
-        let extra_bits = self.len() % u32::BITS;
-        if extra_bits > 0 {
-            let mask = (1 << extra_bits) - 1;
-            let storage_len = self.storage.len();
-            self.storage[storage_len - 1] &= mask;
-        }
-    }
-
-    /// Creates an empty `BitVec`.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// #![feature(bitvec)]
-    ///
-    /// use std::collections::BitVec;
-    /// let mut bv = BitVec::new();
-    /// ```
-    #[stable(feature = "rust1", since = "1.0.0")]
-    pub fn new() -> BitVec {
-        BitVec { storage: Vec::new(), nbits: 0 }
-    }
-
-    /// Creates a `BitVec` that holds `nbits` elements, setting each element
-    /// to `bit`.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// #![feature(bitvec)]
-    ///
-    /// use std::collections::BitVec;
-    ///
-    /// let bv = BitVec::from_elem(10, false);
-    /// assert_eq!(bv.len(), 10);
-    /// for x in &bv {
-    ///     assert_eq!(x, false);
-    /// }
-    /// ```
-    pub fn from_elem(nbits: usize, bit: bool) -> BitVec {
-        let nblocks = blocks_for_bits(nbits);
-        let mut bit_vec = BitVec {
-            storage: vec![if bit { !0 } else { 0 }; nblocks],
-            nbits: nbits
-        };
-        bit_vec.fix_last_block();
-        bit_vec
-    }
-
-    /// Constructs a new, empty `BitVec` with the specified capacity.
-    ///
-    /// The bitvector will be able to hold at least `capacity` bits without
-    /// reallocating. If `capacity` is 0, it will not allocate.
-    ///
-    /// It is important to note that this function does not specify the
-    /// *length* of the returned bitvector, but only the *capacity*.
-    #[stable(feature = "rust1", since = "1.0.0")]
-    pub fn with_capacity(nbits: usize) -> BitVec {
-        BitVec {
-            storage: Vec::with_capacity(blocks_for_bits(nbits)),
-            nbits: 0,
-        }
-    }
-
-    /// Transforms a byte-vector into a `BitVec`. Each byte becomes eight bits,
-    /// with the most significant bits of each byte coming first. Each
-    /// bit becomes `true` if equal to 1 or `false` if equal to 0.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// #![feature(bitvec)]
-    ///
-    /// use std::collections::BitVec;
-    ///
-    /// let bv = BitVec::from_bytes(&[0b10100000, 0b00010010]);
-    /// assert!(bv.eq_vec(&[true, false, true, false,
-    ///                     false, false, false, false,
-    ///                     false, false, false, true,
-    ///                     false, false, true, false]));
-    /// ```
-    pub fn from_bytes(bytes: &[u8]) -> BitVec {
-        let len = bytes.len().checked_mul(u8::BITS).expect("capacity overflow");
-        let mut bit_vec = BitVec::with_capacity(len);
-        let complete_words = bytes.len() / 4;
-        let extra_bytes = bytes.len() % 4;
-
-        bit_vec.nbits = len;
-
-        for i in 0..complete_words {
-            bit_vec.storage.push(
-                ((reverse_bits(bytes[i * 4 + 0]) as u32) << 0) |
-                ((reverse_bits(bytes[i * 4 + 1]) as u32) << 8) |
-                ((reverse_bits(bytes[i * 4 + 2]) as u32) << 16) |
-                ((reverse_bits(bytes[i * 4 + 3]) as u32) << 24)
-            );
-        }
-
-        if extra_bytes > 0 {
-            let mut last_word = 0;
-            for (i, &byte) in bytes[complete_words*4..].iter().enumerate() {
-                last_word |= (reverse_bits(byte) as u32) << (i * 8);
-            }
-            bit_vec.storage.push(last_word);
-        }
-
-        bit_vec
-    }
-
-    /// Creates a `BitVec` of the specified length where the value at each index
-    /// is `f(index)`.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// #![feature(bitvec)]
-    ///
-    /// use std::collections::BitVec;
-    ///
-    /// let bv = BitVec::from_fn(5, |i| { i % 2 == 0 });
-    /// assert!(bv.eq_vec(&[true, false, true, false, true]));
-    /// ```
-    pub fn from_fn<F>(len: usize, mut f: F) -> BitVec where F: FnMut(usize) -> bool {
-        let mut bit_vec = BitVec::from_elem(len, false);
-        for i in 0..len {
-            bit_vec.set(i, f(i));
-        }
-        bit_vec
-    }
-
-    /// Retrieves the value at index `i`, or `None` if the index is out of bounds.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// #![feature(bitvec)]
-    ///
-    /// use std::collections::BitVec;
-    ///
-    /// let bv = BitVec::from_bytes(&[0b01100000]);
-    /// assert_eq!(bv.get(0), Some(false));
-    /// assert_eq!(bv.get(1), Some(true));
-    /// assert_eq!(bv.get(100), None);
-    ///
-    /// // Can also use array indexing
-    /// assert_eq!(bv[1], true);
-    /// ```
-    #[inline]
-    #[stable(feature = "rust1", since = "1.0.0")]
-    pub fn get(&self, i: usize) -> Option<bool> {
-        if i >= self.nbits {
-            return None;
-        }
-        let w = i / u32::BITS;
-        let b = i % u32::BITS;
-        self.storage.get(w).map(|&block|
-            (block & (1 << b)) != 0
-        )
-    }
-
-    /// Sets the value of a bit at an index `i`.
-    ///
-    /// # Panics
-    ///
-    /// Panics if `i` is out of bounds.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// #![feature(bitvec)]
-    ///
-    /// use std::collections::BitVec;
-    ///
-    /// let mut bv = BitVec::from_elem(5, false);
-    /// bv.set(3, true);
-    /// assert_eq!(bv[3], true);
-    /// ```
-    #[inline]
-    pub fn set(&mut self, i: usize, x: bool) {
-        assert!(i < self.nbits);
-        let w = i / u32::BITS;
-        let b = i % u32::BITS;
-        let flag = 1 << b;
-        let val = if x { self.storage[w] | flag }
-                  else { self.storage[w] & !flag };
-        self.storage[w] = val;
-    }
-
-    /// Sets all bits to 1.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// #![feature(bitvec)]
-    ///
-    /// use std::collections::BitVec;
-    ///
-    /// let before = 0b01100000;
-    /// let after  = 0b11111111;
-    ///
-    /// let mut bv = BitVec::from_bytes(&[before]);
-    /// bv.set_all();
-    /// assert_eq!(bv, BitVec::from_bytes(&[after]));
-    /// ```
-    #[inline]
-    pub fn set_all(&mut self) {
-        for w in &mut self.storage { *w = !0; }
-        self.fix_last_block();
-    }
-
-    /// Flips all bits.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// #![feature(bitvec)]
-    ///
-    /// use std::collections::BitVec;
-    ///
-    /// let before = 0b01100000;
-    /// let after  = 0b10011111;
-    ///
-    /// let mut bv = BitVec::from_bytes(&[before]);
-    /// bv.negate();
-    /// assert_eq!(bv, BitVec::from_bytes(&[after]));
-    /// ```
-    #[inline]
-    pub fn negate(&mut self) {
-        for w in &mut self.storage { *w = !*w; }
-        self.fix_last_block();
-    }
-
-    /// Calculates the union of two bitvectors. This acts like the bitwise `or`
-    /// function.
-    ///
-    /// Sets `self` to the union of `self` and `other`. Both bitvectors must be
-    /// the same length. Returns `true` if `self` changed.
-    ///
-    /// # Panics
-    ///
-    /// Panics if the bitvectors are of different lengths.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// #![feature(bitvec)]
-    ///
-    /// use std::collections::BitVec;
-    ///
-    /// let a   = 0b01100100;
-    /// let b   = 0b01011010;
-    /// let res = 0b01111110;
-    ///
-    /// let mut a = BitVec::from_bytes(&[a]);
-    /// let b = BitVec::from_bytes(&[b]);
-    ///
-    /// assert!(a.union(&b));
-    /// assert_eq!(a, BitVec::from_bytes(&[res]));
-    /// ```
-    #[inline]
-    pub fn union(&mut self, other: &BitVec) -> bool {
-        self.process(other, |w1, w2| w1 | w2)
-    }
-
-    /// Calculates the intersection of two bitvectors. This acts like the
-    /// bitwise `and` function.
-    ///
-    /// Sets `self` to the intersection of `self` and `other`. Both bitvectors
-    /// must be the same length. Returns `true` if `self` changed.
-    ///
-    /// # Panics
-    ///
-    /// Panics if the bitvectors are of different lengths.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// #![feature(bitvec)]
-    ///
-    /// use std::collections::BitVec;
-    ///
-    /// let a   = 0b01100100;
-    /// let b   = 0b01011010;
-    /// let res = 0b01000000;
-    ///
-    /// let mut a = BitVec::from_bytes(&[a]);
-    /// let b = BitVec::from_bytes(&[b]);
-    ///
-    /// assert!(a.intersect(&b));
-    /// assert_eq!(a, BitVec::from_bytes(&[res]));
-    /// ```
-    #[inline]
-    pub fn intersect(&mut self, other: &BitVec) -> bool {
-        self.process(other, |w1, w2| w1 & w2)
-    }
-
-    /// Calculates the difference between two bitvectors.
-    ///
-    /// Sets each element of `self` to the value of that element minus the
-    /// element of `other` at the same index. Both bitvectors must be the same
-    /// length. Returns `true` if `self` changed.
-    ///
-    /// # Panics
-    ///
-    /// Panics if the bitvectors are of different length.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// #![feature(bitvec)]
-    ///
-    /// use std::collections::BitVec;
-    ///
-    /// let a   = 0b01100100;
-    /// let b   = 0b01011010;
-    /// let a_b = 0b00100100; // a - b
-    /// let b_a = 0b00011010; // b - a
-    ///
-    /// let mut bva = BitVec::from_bytes(&[a]);
-    /// let bvb = BitVec::from_bytes(&[b]);
-    ///
-    /// assert!(bva.difference(&bvb));
-    /// assert_eq!(bva, BitVec::from_bytes(&[a_b]));
-    ///
-    /// let bva = BitVec::from_bytes(&[a]);
-    /// let mut bvb = BitVec::from_bytes(&[b]);
-    ///
-    /// assert!(bvb.difference(&bva));
-    /// assert_eq!(bvb, BitVec::from_bytes(&[b_a]));
-    /// ```
-    #[inline]
-    pub fn difference(&mut self, other: &BitVec) -> bool {
-        self.process(other, |w1, w2| w1 & !w2)
-    }
-
-    /// Returns `true` if all bits are 1.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// #![feature(bitvec)]
-    ///
-    /// use std::collections::BitVec;
-    ///
-    /// let mut bv = BitVec::from_elem(5, true);
-    /// assert_eq!(bv.all(), true);
-    ///
-    /// bv.set(1, false);
-    /// assert_eq!(bv.all(), false);
-    /// ```
-    pub fn all(&self) -> bool {
-        let mut last_word = !0;
-        // Check that every block but the last is all-ones...
-        self.blocks().all(|elem| {
-            let tmp = last_word;
-            last_word = elem;
-            tmp == !0
-        // and then check the last one has enough ones
-        }) && (last_word == mask_for_bits(self.nbits))
-    }
-
-    /// Returns an iterator over the elements of the vector in order.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// #![feature(bitvec)]
-    ///
-    /// use std::collections::BitVec;
-    ///
-    /// let bv = BitVec::from_bytes(&[0b01110100, 0b10010010]);
-    /// assert_eq!(bv.iter().filter(|x| *x).count(), 7);
-    /// ```
-    #[inline]
-    #[stable(feature = "rust1", since = "1.0.0")]
-    pub fn iter(&self) -> Iter {
-        Iter { bit_vec: self, next_idx: 0, end_idx: self.nbits }
-    }
-
-    /// Moves all bits from `other` into `Self`, leaving `other` empty.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// #![feature(bitvec, append)]
-    ///
-    /// use std::collections::BitVec;
-    ///
-    /// let mut a = BitVec::from_bytes(&[0b10000000]);
-    /// let mut b = BitVec::from_bytes(&[0b01100001]);
-    ///
-    /// a.append(&mut b);
-    ///
-    /// assert_eq!(a.len(), 16);
-    /// assert_eq!(b.len(), 0);
-    /// assert!(a.eq_vec(&[true, false, false, false, false, false, false, false,
-    ///                    false, true, true, false, false, false, false, true]));
-    /// ```
-    #[unstable(feature = "append",
-               reason = "recently added as part of collections reform 2")]
-    pub fn append(&mut self, other: &mut Self) {
-        let b = self.len() % u32::BITS;
-
-        self.nbits += other.len();
-        other.nbits = 0;
-
-        if b == 0 {
-            self.storage.append(&mut other.storage);
-        } else {
-            self.storage.reserve(other.storage.len());
-
-            for block in other.storage.drain(..) {
-                *(self.storage.last_mut().unwrap()) |= block << b;
-                self.storage.push(block >> (u32::BITS - b));
-            }
-        }
-    }
-
-    /// Splits the `BitVec` into two at the given bit,
-    /// retaining the first half in-place and returning the second one.
-    ///
-    /// # Panics
-    ///
-    /// Panics if `at` is out of bounds.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// #![feature(bitvec, split_off)]
-    ///
-    /// use std::collections::BitVec;
-    /// let mut a = BitVec::new();
-    /// a.push(true);
-    /// a.push(false);
-    /// a.push(false);
-    /// a.push(true);
-    ///
-    /// let b = a.split_off(2);
-    ///
-    /// assert_eq!(a.len(), 2);
-    /// assert_eq!(b.len(), 2);
-    /// assert!(a.eq_vec(&[true, false]));
-    /// assert!(b.eq_vec(&[false, true]));
-    /// ```
-    #[unstable(feature = "split_off",
-               reason = "recently added as part of collections reform 2")]
-    pub fn split_off(&mut self, at: usize) -> Self {
-        assert!(at <= self.len(), "`at` out of bounds");
-
-        let mut other = BitVec::new();
-
-        if at == 0 {
-            swap(self, &mut other);
-            return other;
-        } else if at == self.len() {
-            return other;
-        }
-
-        let w = at / u32::BITS;
-        let b = at % u32::BITS;
-        other.nbits = self.nbits - at;
-        self.nbits = at;
-        if b == 0 {
-            // Split at block boundary
-            other.storage = self.storage.split_off(w);
-        } else {
-            other.storage.reserve(self.storage.len() - w);
-
-            {
-                let mut iter = self.storage[w..].iter();
-                let mut last = *iter.next().unwrap();
-                for &cur in iter {
-                    other.storage.push((last >> b) | (cur << (u32::BITS - b)));
-                    last = cur;
-                }
-                other.storage.push(last >> b);
-            }
-
-            self.storage.truncate(w+1);
-            self.fix_last_block();
-        }
-
-        other
-    }
-
-    /// Returns `true` if all bits are 0.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// #![feature(bitvec)]
-    ///
-    /// use std::collections::BitVec;
-    ///
-    /// let mut bv = BitVec::from_elem(10, false);
-    /// assert_eq!(bv.none(), true);
-    ///
-    /// bv.set(3, true);
-    /// assert_eq!(bv.none(), false);
-    /// ```
-    pub fn none(&self) -> bool {
-        self.blocks().all(|w| w == 0)
-    }
-
-    /// Returns `true` if any bit is 1.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// #![feature(bitvec)]
-    ///
-    /// use std::collections::BitVec;
-    ///
-    /// let mut bv = BitVec::from_elem(10, false);
-    /// assert_eq!(bv.any(), false);
-    ///
-    /// bv.set(3, true);
-    /// assert_eq!(bv.any(), true);
-    /// ```
-    #[inline]
-    pub fn any(&self) -> bool {
-        !self.none()
-    }
-
-    /// Organises the bits into bytes, such that the first bit in the
-    /// `BitVec` becomes the high-order bit of the first byte. If the
-    /// size of the `BitVec` is not a multiple of eight then trailing bits
-    /// will be filled-in with `false`.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// #![feature(bitvec)]
-    ///
-    /// use std::collections::BitVec;
-    ///
-    /// let mut bv = BitVec::from_elem(3, true);
-    /// bv.set(1, false);
-    ///
-    /// assert_eq!(bv.to_bytes(), [0b10100000]);
-    ///
-    /// let mut bv = BitVec::from_elem(9, false);
-    /// bv.set(2, true);
-    /// bv.set(8, true);
-    ///
-    /// assert_eq!(bv.to_bytes(), [0b00100000, 0b10000000]);
-    /// ```
-    pub fn to_bytes(&self) -> Vec<u8> {
-        fn bit(bit_vec: &BitVec, byte: usize, bit: usize) -> u8 {
-            let offset = byte * 8 + bit;
-            if offset >= bit_vec.nbits {
-                0
-            } else {
-                (bit_vec[offset] as u8) << (7 - bit)
-            }
-        }
-
-        let len = self.nbits/8 +
-                  if self.nbits % 8 == 0 { 0 } else { 1 };
-        (0..len).map(|i|
-            bit(self, i, 0) |
-            bit(self, i, 1) |
-            bit(self, i, 2) |
-            bit(self, i, 3) |
-            bit(self, i, 4) |
-            bit(self, i, 5) |
-            bit(self, i, 6) |
-            bit(self, i, 7)
-        ).collect()
-    }
-
-    /// Compares a `BitVec` to a slice of `bool`s.
-    /// Both the `BitVec` and slice must have the same length.
-    ///
-    /// # Panics
-    ///
-    /// Panics if the `BitVec` and slice are of different length.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// #![feature(bitvec)]
-    ///
-    /// use std::collections::BitVec;
-    ///
-    /// let bv = BitVec::from_bytes(&[0b10100000]);
-    ///
-    /// assert!(bv.eq_vec(&[true, false, true, false,
-    ///                     false, false, false, false]));
-    /// ```
-    pub fn eq_vec(&self, v: &[bool]) -> bool {
-        assert_eq!(self.nbits, v.len());
-        iter::order::eq(self.iter(), v.iter().cloned())
-    }
-
-    /// Shortens a `BitVec`, dropping excess elements.
-    ///
-    /// If `len` is greater than the vector's current length, this has no
-    /// effect.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// #![feature(bitvec)]
-    ///
-    /// use std::collections::BitVec;
-    ///
-    /// let mut bv = BitVec::from_bytes(&[0b01001011]);
-    /// bv.truncate(2);
-    /// assert!(bv.eq_vec(&[false, true]));
-    /// ```
-    #[stable(feature = "rust1", since = "1.0.0")]
-    pub fn truncate(&mut self, len: usize) {
-        if len < self.len() {
-            self.nbits = len;
-            // This fixes (2).
-            self.storage.truncate(blocks_for_bits(len));
-            self.fix_last_block();
-        }
-    }
-
-    /// Reserves capacity for at least `additional` more bits to be inserted in the given
-    /// `BitVec`. The collection may reserve more space to avoid frequent reallocations.
-    ///
-    /// # Panics
-    ///
-    /// Panics if the new capacity overflows `usize`.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// #![feature(bitvec)]
-    ///
-    /// use std::collections::BitVec;
-    ///
-    /// let mut bv = BitVec::from_elem(3, false);
-    /// bv.reserve(10);
-    /// assert_eq!(bv.len(), 3);
-    /// assert!(bv.capacity() >= 13);
-    /// ```
-    #[stable(feature = "rust1", since = "1.0.0")]
-    pub fn reserve(&mut self, additional: usize) {
-        let desired_cap = self.len().checked_add(additional).expect("capacity overflow");
-        let storage_len = self.storage.len();
-        if desired_cap > self.capacity() {
-            self.storage.reserve(blocks_for_bits(desired_cap) - storage_len);
-        }
-    }
-
-    /// Reserves the minimum capacity for exactly `additional` more bits to be inserted in the
-    /// given `BitVec`. Does nothing if the capacity is already sufficient.
-    ///
-    /// Note that the allocator may give the collection more space than it requests. Therefore
-    /// capacity can not be relied upon to be precisely minimal. Prefer `reserve` if future
-    /// insertions are expected.
-    ///
-    /// # Panics
-    ///
-    /// Panics if the new capacity overflows `usize`.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// #![feature(bitvec)]
-    ///
-    /// use std::collections::BitVec;
-    ///
-    /// let mut bv = BitVec::from_elem(3, false);
-    /// bv.reserve(10);
-    /// assert_eq!(bv.len(), 3);
-    /// assert!(bv.capacity() >= 13);
-    /// ```
-    #[stable(feature = "rust1", since = "1.0.0")]
-    pub fn reserve_exact(&mut self, additional: usize) {
-        let desired_cap = self.len().checked_add(additional).expect("capacity overflow");
-        let storage_len = self.storage.len();
-        if desired_cap > self.capacity() {
-            self.storage.reserve_exact(blocks_for_bits(desired_cap) - storage_len);
-        }
-    }
-
-    /// Returns the capacity in bits for this bit vector. Inserting any
-    /// element less than this amount will not trigger a resizing.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// #![feature(bitvec)]
-    ///
-    /// use std::collections::BitVec;
-    ///
-    /// let mut bv = BitVec::new();
-    /// bv.reserve(10);
-    /// assert!(bv.capacity() >= 10);
-    /// ```
-    #[inline]
-    #[stable(feature = "rust1", since = "1.0.0")]
-    pub fn capacity(&self) -> usize {
-        self.storage.capacity().checked_mul(u32::BITS).unwrap_or(usize::MAX)
-    }
-
-    /// Grows the `BitVec` in-place, adding `n` copies of `value` to the `BitVec`.
-    ///
-    /// # Panics
-    ///
-    /// Panics if the new len overflows a `usize`.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// #![feature(bitvec)]
-    ///
-    /// use std::collections::BitVec;
-    ///
-    /// let mut bv = BitVec::from_bytes(&[0b01001011]);
-    /// bv.grow(2, true);
-    /// assert_eq!(bv.len(), 10);
-    /// assert_eq!(bv.to_bytes(), [0b01001011, 0b11000000]);
-    /// ```
-    pub fn grow(&mut self, n: usize, value: bool) {
-        // Note: we just bulk set all the bits in the last word in this fn in multiple places
-        // which is technically wrong if not all of these bits are to be used. However, at the end
-        // of this fn we call `fix_last_block` at the end of this fn, which should fix this.
-
-        let new_nbits = self.nbits.checked_add(n).expect("capacity overflow");
-        let new_nblocks = blocks_for_bits(new_nbits);
-        let full_value = if value { !0 } else { 0 };
-
-        // Correct the old tail word, setting or clearing formerly unused bits
-        let num_cur_blocks = blocks_for_bits(self.nbits);
-        if self.nbits % u32::BITS > 0 {
-            let mask = mask_for_bits(self.nbits);
-            if value {
-                self.storage[num_cur_blocks - 1] |= !mask;
-            } else {
-                // Extra bits are already zero by invariant.
-            }
-        }
-
-        // Fill in words after the old tail word
-        let stop_idx = cmp::min(self.storage.len(), new_nblocks);
-        for idx in num_cur_blocks..stop_idx {
-            self.storage[idx] = full_value;
-        }
-
-        // Allocate new words, if needed
-        if new_nblocks > self.storage.len() {
-            let to_add = new_nblocks - self.storage.len();
-            self.storage.extend(repeat(full_value).take(to_add));
-        }
-
-        // Adjust internal bit count
-        self.nbits = new_nbits;
-
-        self.fix_last_block();
-    }
-
-    /// Removes the last bit from the BitVec, and returns it. Returns None if the BitVec is empty.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// #![feature(bitvec)]
-    ///
-    /// use std::collections::BitVec;
-    ///
-    /// let mut bv = BitVec::from_bytes(&[0b01001001]);
-    /// assert_eq!(bv.pop(), Some(true));
-    /// assert_eq!(bv.pop(), Some(false));
-    /// assert_eq!(bv.len(), 6);
-    /// ```
-    #[stable(feature = "rust1", since = "1.0.0")]
-    pub fn pop(&mut self) -> Option<bool> {
-        if self.is_empty() {
-            None
-        } else {
-            let i = self.nbits - 1;
-            let ret = self[i];
-            // (3)
-            self.set(i, false);
-            self.nbits = i;
-            if self.nbits % u32::BITS == 0 {
-                // (2)
-                self.storage.pop();
-            }
-            Some(ret)
-        }
-    }
-
-    /// Pushes a `bool` onto the end.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// #![feature(bitvec)]
-    ///
-    /// use std::collections::BitVec;
-    ///
-    /// let mut bv = BitVec::new();
-    /// bv.push(true);
-    /// bv.push(false);
-    /// assert!(bv.eq_vec(&[true, false]));
-    /// ```
-    #[stable(feature = "rust1", since = "1.0.0")]
-    pub fn push(&mut self, elem: bool) {
-        if self.nbits % u32::BITS == 0 {
-            self.storage.push(0);
-        }
-        let insert_pos = self.nbits;
-        self.nbits = self.nbits.checked_add(1).expect("Capacity overflow");
-        self.set(insert_pos, elem);
-    }
-
-    /// Returns the total number of bits in this vector
-    #[inline]
-    #[stable(feature = "rust1", since = "1.0.0")]
-    pub fn len(&self) -> usize { self.nbits }
-
-    /// Returns true if there are no bits in this vector
-    #[inline]
-    #[stable(feature = "rust1", since = "1.0.0")]
-    pub fn is_empty(&self) -> bool { self.len() == 0 }
-
-    /// Clears all bits in this vector.
-    #[inline]
-    #[stable(feature = "rust1", since = "1.0.0")]
-    pub fn clear(&mut self) {
-        for w in &mut self.storage { *w = 0; }
-    }
-}
-
-#[stable(feature = "rust1", since = "1.0.0")]
-impl Default for BitVec {
-    #[inline]
-    fn default() -> BitVec { BitVec::new() }
-}
-
-#[stable(feature = "rust1", since = "1.0.0")]
-impl FromIterator<bool> for BitVec {
-    fn from_iter<I: IntoIterator<Item=bool>>(iter: I) -> BitVec {
-        let mut ret = BitVec::new();
-        ret.extend(iter);
-        ret
-    }
-}
-
-#[stable(feature = "rust1", since = "1.0.0")]
-impl Extend<bool> for BitVec {
-    #[inline]
-    fn extend<I: IntoIterator<Item=bool>>(&mut self, iterable: I) {
-        let iterator = iterable.into_iter();
-        let (min, _) = iterator.size_hint();
-        self.reserve(min);
-        for element in iterator {
-            self.push(element)
-        }
-    }
-}
-
-#[stable(feature = "extend_ref", since = "1.2.0")]
-impl<'a> Extend<&'a bool> for BitVec {
-    fn extend<I: IntoIterator<Item=&'a bool>>(&mut self, iter: I) {
-        self.extend(iter.into_iter().cloned());
-    }
-}
-
-#[stable(feature = "rust1", since = "1.0.0")]
-impl Clone for BitVec {
-    #[inline]
-    fn clone(&self) -> BitVec {
-        BitVec { storage: self.storage.clone(), nbits: self.nbits }
-    }
-
-    #[inline]
-    fn clone_from(&mut self, source: &BitVec) {
-        self.nbits = source.nbits;
-        self.storage.clone_from(&source.storage);
-    }
-}
-
-#[stable(feature = "rust1", since = "1.0.0")]
-impl PartialOrd for BitVec {
-    #[inline]
-    fn partial_cmp(&self, other: &BitVec) -> Option<Ordering> {
-        iter::order::partial_cmp(self.iter(), other.iter())
-    }
-}
-
-#[stable(feature = "rust1", since = "1.0.0")]
-impl Ord for BitVec {
-    #[inline]
-    fn cmp(&self, other: &BitVec) -> Ordering {
-        iter::order::cmp(self.iter(), other.iter())
-    }
-}
-
-#[stable(feature = "rust1", since = "1.0.0")]
-impl fmt::Debug for BitVec {
-    fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
-        for bit in self {
-            try!(write!(fmt, "{}", if bit { 1 } else { 0 }));
-        }
-        Ok(())
-    }
-}
-
-#[stable(feature = "rust1", since = "1.0.0")]
-impl hash::Hash for BitVec {
-    fn hash<H: hash::Hasher>(&self, state: &mut H) {
-        self.nbits.hash(state);
-        for elem in self.blocks() {
-            elem.hash(state);
-        }
-    }
-}
-
-#[stable(feature = "rust1", since = "1.0.0")]
-impl cmp::PartialEq for BitVec {
-    #[inline]
-    fn eq(&self, other: &BitVec) -> bool {
-        if self.nbits != other.nbits {
-            return false;
-        }
-        self.blocks().zip(other.blocks()).all(|(w1, w2)| w1 == w2)
-    }
-}
-
-#[stable(feature = "rust1", since = "1.0.0")]
-impl cmp::Eq for BitVec {}
-
-/// An iterator for `BitVec`.
-#[stable(feature = "rust1", since = "1.0.0")]
-#[derive(Clone)]
-pub struct Iter<'a> {
-    bit_vec: &'a BitVec,
-    next_idx: usize,
-    end_idx: usize,
-}
-
-#[stable(feature = "rust1", since = "1.0.0")]
-impl<'a> Iterator for Iter<'a> {
-    type Item = bool;
-
-    #[inline]
-    fn next(&mut self) -> Option<bool> {
-        if self.next_idx != self.end_idx {
-            let idx = self.next_idx;
-            self.next_idx += 1;
-            Some(self.bit_vec[idx])
-        } else {
-            None
-        }
-    }
-
-    fn size_hint(&self) -> (usize, Option<usize>) {
-        let rem = self.end_idx - self.next_idx;
-        (rem, Some(rem))
-    }
-}
-
-#[stable(feature = "rust1", since = "1.0.0")]
-impl<'a> DoubleEndedIterator for Iter<'a> {
-    #[inline]
-    fn next_back(&mut self) -> Option<bool> {
-        if self.next_idx != self.end_idx {
-            self.end_idx -= 1;
-            Some(self.bit_vec[self.end_idx])
-        } else {
-            None
-        }
-    }
-}
-
-#[stable(feature = "rust1", since = "1.0.0")]
-impl<'a> ExactSizeIterator for Iter<'a> {}
-
-#[stable(feature = "rust1", since = "1.0.0")]
-#[allow(deprecated)]
-impl<'a> RandomAccessIterator for Iter<'a> {
-    #[inline]
-    fn indexable(&self) -> usize {
-        self.end_idx - self.next_idx
-    }
-
-    #[inline]
-    fn idx(&mut self, index: usize) -> Option<bool> {
-        if index >= self.indexable() {
-            None
-        } else {
-            Some(self.bit_vec[index])
-        }
-    }
-}
-
-#[stable(feature = "rust1", since = "1.0.0")]
-impl<'a> IntoIterator for &'a BitVec {
-    type Item = bool;
-    type IntoIter = Iter<'a>;
-
-    fn into_iter(self) -> Iter<'a> {
-        self.iter()
-    }
-}
-
-/// An implementation of a set using a bit vector as an underlying
-/// representation for holding unsigned numerical elements.
-///
-/// It should also be noted that the amount of storage necessary for holding a
-/// set of objects is proportional to the maximum of the objects when viewed
-/// as a `usize`.
-///
-/// # Examples
-///
-/// ```
-/// #![feature(bitvec, bitset)]
-///
-/// use std::collections::{BitSet, BitVec};
-///
-/// // It's a regular set
-/// let mut s = BitSet::new();
-/// s.insert(0);
-/// s.insert(3);
-/// s.insert(7);
-///
-/// s.remove(&7);
-///
-/// if !s.contains(&7) {
-///     println!("There is no 7");
-/// }
-///
-/// // Can initialize from a `BitVec`
-/// let other = BitSet::from_bit_vec(BitVec::from_bytes(&[0b11010000]));
-///
-/// s.union_with(&other);
-///
-/// // Print 0, 1, 3 in some order
-/// for x in &s {
-///     println!("{}", x);
-/// }
-///
-/// // Can convert back to a `BitVec`
-/// let bv: BitVec = s.into_bit_vec();
-/// assert!(bv[3]);
-/// ```
-#[derive(Clone)]
-#[unstable(feature = "bitset", reason = "RFC 509")]
-pub struct BitSet {
-    bit_vec: BitVec,
-}
-
-#[stable(feature = "rust1", since = "1.0.0")]
-impl Default for BitSet {
-    #[inline]
-    fn default() -> BitSet { BitSet::new() }
-}
-
-#[stable(feature = "rust1", since = "1.0.0")]
-impl FromIterator<usize> for BitSet {
-    fn from_iter<I: IntoIterator<Item=usize>>(iter: I) -> BitSet {
-        let mut ret = BitSet::new();
-        ret.extend(iter);
-        ret
-    }
-}
-
-#[stable(feature = "rust1", since = "1.0.0")]
-impl Extend<usize> for BitSet {
-    #[inline]
-    fn extend<I: IntoIterator<Item=usize>>(&mut self, iter: I) {
-        for i in iter {
-            self.insert(i);
-        }
-    }
-}
-
-#[stable(feature = "extend_ref", since = "1.2.0")]
-impl<'a> Extend<&'a usize> for BitSet {
-    fn extend<I: IntoIterator<Item=&'a usize>>(&mut self, iter: I) {
-        self.extend(iter.into_iter().cloned());
-    }
-}
-
-#[stable(feature = "rust1", since = "1.0.0")]
-impl PartialOrd for BitSet {
-    #[inline]
-    fn partial_cmp(&self, other: &BitSet) -> Option<Ordering> {
-        let (a_iter, b_iter) = match_words(self.get_ref(), other.get_ref());
-        iter::order::partial_cmp(a_iter, b_iter)
-    }
-}
-
-#[stable(feature = "rust1", since = "1.0.0")]
-impl Ord for BitSet {
-    #[inline]
-    fn cmp(&self, other: &BitSet) -> Ordering {
-        let (a_iter, b_iter) = match_words(self.get_ref(), other.get_ref());
-        iter::order::cmp(a_iter, b_iter)
-    }
-}
-
-#[stable(feature = "rust1", since = "1.0.0")]
-impl cmp::PartialEq for BitSet {
-    #[inline]
-    fn eq(&self, other: &BitSet) -> bool {
-        let (a_iter, b_iter) = match_words(self.get_ref(), other.get_ref());
-        iter::order::eq(a_iter, b_iter)
-    }
-}
-
-#[stable(feature = "rust1", since = "1.0.0")]
-impl cmp::Eq for BitSet {}
-
-#[unstable(feature = "bitset", reason = "RFC 509")]
-impl BitSet {
-    /// Creates a new empty `BitSet`.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// #![feature(bitset)]
-    ///
-    /// use std::collections::BitSet;
-    ///
-    /// let mut s = BitSet::new();
-    /// ```
-    #[inline]
-    #[stable(feature = "rust1", since = "1.0.0")]
-    pub fn new() -> BitSet {
-        BitSet { bit_vec: BitVec::new() }
-    }
-
-    /// Creates a new `BitSet` with initially no contents, able to
-    /// hold `nbits` elements without resizing.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// #![feature(bitset)]
-    ///
-    /// use std::collections::BitSet;
-    ///
-    /// let mut s = BitSet::with_capacity(100);
-    /// assert!(s.capacity() >= 100);
-    /// ```
-    #[inline]
-    #[stable(feature = "rust1", since = "1.0.0")]
-    pub fn with_capacity(nbits: usize) -> BitSet {
-        let bit_vec = BitVec::from_elem(nbits, false);
-        BitSet::from_bit_vec(bit_vec)
-    }
-
-    /// Creates a new `BitSet` from the given bit vector.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// #![feature(bitset, bitvec)]
-    ///
-    /// use std::collections::{BitVec, BitSet};
-    ///
-    /// let bv = BitVec::from_bytes(&[0b01100000]);
-    /// let s = BitSet::from_bit_vec(bv);
-    ///
-    /// // Print 1, 2 in arbitrary order
-    /// for x in &s {
-    ///     println!("{}", x);
-    /// }
-    /// ```
-    #[inline]
-    pub fn from_bit_vec(bit_vec: BitVec) -> BitSet {
-        BitSet { bit_vec: bit_vec }
-    }
-
-    /// Returns the capacity in bits for this bit vector. Inserting any
-    /// element less than this amount will not trigger a resizing.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// #![feature(bitset)]
-    ///
-    /// use std::collections::BitSet;
-    ///
-    /// let mut s = BitSet::with_capacity(100);
-    /// assert!(s.capacity() >= 100);
-    /// ```
-    #[inline]
-    #[stable(feature = "rust1", since = "1.0.0")]
-    pub fn capacity(&self) -> usize {
-        self.bit_vec.capacity()
-    }
-
-    /// Reserves capacity for the given `BitSet` to contain `len` distinct
-    /// elements. In the case of `BitSet` this means reallocations will not
-    /// occur as long as all inserted elements are less than `len`.
-    ///
-    /// The collection may reserve more space to avoid frequent reallocations.
-    ///
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// #![feature(bitset)]
-    ///
-    /// use std::collections::BitSet;
-    ///
-    /// let mut s = BitSet::new();
-    /// s.reserve_len(10);
-    /// assert!(s.capacity() >= 10);
-    /// ```
-    #[stable(feature = "rust1", since = "1.0.0")]
-    pub fn reserve_len(&mut self, len: usize) {
-        let cur_len = self.bit_vec.len();
-        if len >= cur_len {
-            self.bit_vec.reserve(len - cur_len);
-        }
-    }
-
-    /// Reserves the minimum capacity for the given `BitSet` to contain `len`
-    /// distinct elements.  In the case of `BitSet` this means reallocations
-    /// will not occur as long as all inserted elements are less than `len`.
-    ///
-    /// Note that the allocator may give the collection more space than it
-    /// requests. Therefore capacity can not be relied upon to be precisely
-    /// minimal. Prefer `reserve_len` if future insertions are expected.
-    ///
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// #![feature(bitset)]
-    ///
-    /// use std::collections::BitSet;
-    ///
-    /// let mut s = BitSet::new();
-    /// s.reserve_len_exact(10);
-    /// assert!(s.capacity() >= 10);
-    /// ```
-    #[stable(feature = "rust1", since = "1.0.0")]
-    pub fn reserve_len_exact(&mut self, len: usize) {
-        let cur_len = self.bit_vec.len();
-        if len >= cur_len {
-            self.bit_vec.reserve_exact(len - cur_len);
-        }
-    }
-
-
-    /// Consumes this set to return the underlying bit vector.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// #![feature(bitset)]
-    ///
-    /// use std::collections::BitSet;
-    ///
-    /// let mut s = BitSet::new();
-    /// s.insert(0);
-    /// s.insert(3);
-    ///
-    /// let bv = s.into_bit_vec();
-    /// assert!(bv[0]);
-    /// assert!(bv[3]);
-    /// ```
-    #[inline]
-    pub fn into_bit_vec(self) -> BitVec {
-        self.bit_vec
-    }
-
-    /// Returns a reference to the underlying bit vector.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// #![feature(bitset)]
-    ///
-    /// use std::collections::BitSet;
-    ///
-    /// let mut s = BitSet::new();
-    /// s.insert(0);
-    ///
-    /// let bv = s.get_ref();
-    /// assert_eq!(bv[0], true);
-    /// ```
-    #[inline]
-    pub fn get_ref(&self) -> &BitVec {
-        &self.bit_vec
-    }
-
-    #[inline]
-    fn other_op<F>(&mut self, other: &BitSet, mut f: F) where F: FnMut(u32, u32) -> u32 {
-        // Unwrap BitVecs
-        let self_bit_vec = &mut self.bit_vec;
-        let other_bit_vec = &other.bit_vec;
-
-        let self_len = self_bit_vec.len();
-        let other_len = other_bit_vec.len();
-
-        // Expand the vector if necessary
-        if self_len < other_len {
-            self_bit_vec.grow(other_len - self_len, false);
-        }
-
-        // virtually pad other with 0's for equal lengths
-        let other_words = {
-            let (_, result) = match_words(self_bit_vec, other_bit_vec);
-            result
-        };
-
-        // Apply values found in other
-        for (i, w) in other_words {
-            let old = self_bit_vec.storage[i];
-            let new = f(old, w);
-            self_bit_vec.storage[i] = new;
-        }
-    }
-
-    /// Truncates the underlying vector to the least length required.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// #![feature(bitset)]
-    ///
-    /// use std::collections::BitSet;
-    ///
-    /// let mut s = BitSet::new();
-    /// s.insert(32183231);
-    /// s.remove(&32183231);
-    ///
-    /// // Internal storage will probably be bigger than necessary
-    /// println!("old capacity: {}", s.capacity());
-    ///
-    /// // Now should be smaller
-    /// s.shrink_to_fit();
-    /// println!("new capacity: {}", s.capacity());
-    /// ```
-    #[inline]
-    #[stable(feature = "rust1", since = "1.0.0")]
-    pub fn shrink_to_fit(&mut self) {
-        let bit_vec = &mut self.bit_vec;
-        // Obtain original length
-        let old_len = bit_vec.storage.len();
-        // Obtain coarse trailing zero length
-        let n = bit_vec.storage.iter().rev().take_while(|&&n| n == 0).count();
-        // Truncate
-        let trunc_len = cmp::max(old_len - n, 1);
-        bit_vec.storage.truncate(trunc_len);
-        bit_vec.nbits = trunc_len * u32::BITS;
-    }
-
-    /// Iterator over each usize stored in the `BitSet`.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// #![feature(bitset, bitvec)]
-    ///
-    /// use std::collections::{BitVec, BitSet};
-    ///
-    /// let s = BitSet::from_bit_vec(BitVec::from_bytes(&[0b01001010]));
-    ///
-    /// // Print 1, 4, 6 in arbitrary order
-    /// for x in s.iter() {
-    ///     println!("{}", x);
-    /// }
-    /// ```
-    #[inline]
-    #[stable(feature = "rust1", since = "1.0.0")]
-    pub fn iter(&self) -> bit_set::Iter {
-        SetIter(BlockIter::from_blocks(self.bit_vec.blocks()))
-    }
-
-    /// Iterator over each usize stored in `self` union `other`.
-    /// See [union_with](#method.union_with) for an efficient in-place version.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// #![feature(bitset, bitvec)]
-    ///
-    /// use std::collections::{BitVec, BitSet};
-    ///
-    /// let a = BitSet::from_bit_vec(BitVec::from_bytes(&[0b01101000]));
-    /// let b = BitSet::from_bit_vec(BitVec::from_bytes(&[0b10100000]));
-    ///
-    /// // Print 0, 1, 2, 4 in arbitrary order
-    /// for x in a.union(&b) {
-    ///     println!("{}", x);
-    /// }
-    /// ```
-    #[inline]
-    #[stable(feature = "rust1", since = "1.0.0")]
-    pub fn union<'a>(&'a self, other: &'a BitSet) -> Union<'a> {
-        fn or(w1: u32, w2: u32) -> u32 { w1 | w2 }
-
-        Union(BlockIter::from_blocks(TwoBitPositions {
-            set: self.bit_vec.blocks(),
-            other: other.bit_vec.blocks(),
-            merge: or,
-        }))
-    }
-
-    /// Iterator over each usize stored in `self` intersect `other`.
-    /// See [intersect_with](#method.intersect_with) for an efficient in-place
-    /// version.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// #![feature(bitset, bitvec)]
-    ///
-    /// use std::collections::{BitVec, BitSet};
-    ///
-    /// let a = BitSet::from_bit_vec(BitVec::from_bytes(&[0b01101000]));
-    /// let b = BitSet::from_bit_vec(BitVec::from_bytes(&[0b10100000]));
-    ///
-    /// // Print 2
-    /// for x in a.intersection(&b) {
-    ///     println!("{}", x);
-    /// }
-    /// ```
-    #[inline]
-    #[stable(feature = "rust1", since = "1.0.0")]
-    pub fn intersection<'a>(&'a self, other: &'a BitSet) -> Intersection<'a> {
-        fn bitand(w1: u32, w2: u32) -> u32 { w1 & w2 }
-        let min = cmp::min(self.bit_vec.len(), other.bit_vec.len());
-
-        Intersection(BlockIter::from_blocks(TwoBitPositions {
-            set: self.bit_vec.blocks(),
-            other: other.bit_vec.blocks(),
-            merge: bitand,
-        }).take(min))
-    }
-
-    /// Iterator over each usize stored in the `self` setminus `other`.
-    /// See [difference_with](#method.difference_with) for an efficient in-place
-    /// version.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// #![feature(bitset, bitvec)]
-    ///
-    /// use std::collections::{BitSet, BitVec};
-    ///
-    /// let a = BitSet::from_bit_vec(BitVec::from_bytes(&[0b01101000]));
-    /// let b = BitSet::from_bit_vec(BitVec::from_bytes(&[0b10100000]));
-    ///
-    /// // Print 1, 4 in arbitrary order
-    /// for x in a.difference(&b) {
-    ///     println!("{}", x);
-    /// }
-    ///
-    /// // Note that difference is not symmetric,
-    /// // and `b - a` means something else.
-    /// // This prints 0
-    /// for x in b.difference(&a) {
-    ///     println!("{}", x);
-    /// }
-    /// ```
-    #[inline]
-    #[stable(feature = "rust1", since = "1.0.0")]
-    pub fn difference<'a>(&'a self, other: &'a BitSet) -> Difference<'a> {
-        fn diff(w1: u32, w2: u32) -> u32 { w1 & !w2 }
-
-        Difference(BlockIter::from_blocks(TwoBitPositions {
-            set: self.bit_vec.blocks(),
-            other: other.bit_vec.blocks(),
-            merge: diff,
-        }))
-    }
-
-    /// Iterator over each usize stored in the symmetric difference of `self`
-    /// and `other`.  See
-    /// [symmetric_difference_with](#method.symmetric_difference_with) for an
-    /// efficient in-place version.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// #![feature(bitset, bitvec)]
-    ///
-    /// use std::collections::{BitSet, BitVec};
-    ///
-    /// let a = BitSet::from_bit_vec(BitVec::from_bytes(&[0b01101000]));
-    /// let b = BitSet::from_bit_vec(BitVec::from_bytes(&[0b10100000]));
-    ///
-    /// // Print 0, 1, 4 in arbitrary order
-    /// for x in a.symmetric_difference(&b) {
-    ///     println!("{}", x);
-    /// }
-    /// ```
-    #[inline]
-    #[stable(feature = "rust1", since = "1.0.0")]
-    pub fn symmetric_difference<'a>(&'a self, other: &'a BitSet) -> SymmetricDifference<'a> {
-        fn bitxor(w1: u32, w2: u32) -> u32 { w1 ^ w2 }
-
-        SymmetricDifference(BlockIter::from_blocks(TwoBitPositions {
-            set: self.bit_vec.blocks(),
-            other: other.bit_vec.blocks(),
-            merge: bitxor,
-        }))
-    }
-
-    /// Unions in-place with the specified other bit vector.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// #![feature(bitset, bitvec)]
-    ///
-    /// use std::collections::{BitSet, BitVec};
-    ///
-    /// let a   = 0b01101000;
-    /// let b   = 0b10100000;
-    /// let res = 0b11101000;
-    ///
-    /// let mut a = BitSet::from_bit_vec(BitVec::from_bytes(&[a]));
-    /// let b = BitSet::from_bit_vec(BitVec::from_bytes(&[b]));
-    /// let res = BitSet::from_bit_vec(BitVec::from_bytes(&[res]));
-    ///
-    /// a.union_with(&b);
-    /// assert_eq!(a, res);
-    /// ```
-    #[inline]
-    pub fn union_with(&mut self, other: &BitSet) {
-        self.other_op(other, |w1, w2| w1 | w2);
-    }
-
-    /// Intersects in-place with the specified other bit vector.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// #![feature(bitset, bitvec)]
-    ///
-    /// use std::collections::{BitSet, BitVec};
-    ///
-    /// let a   = 0b01101000;
-    /// let b   = 0b10100000;
-    /// let res = 0b00100000;
-    ///
-    /// let mut a = BitSet::from_bit_vec(BitVec::from_bytes(&[a]));
-    /// let b = BitSet::from_bit_vec(BitVec::from_bytes(&[b]));
-    /// let res = BitSet::from_bit_vec(BitVec::from_bytes(&[res]));
-    ///
-    /// a.intersect_with(&b);
-    /// assert_eq!(a, res);
-    /// ```
-    #[inline]
-    pub fn intersect_with(&mut self, other: &BitSet) {
-        self.other_op(other, |w1, w2| w1 & w2);
-    }
-
-    /// Makes this bit vector the difference with the specified other bit vector
-    /// in-place.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// #![feature(bitset, bitvec)]
-    ///
-    /// use std::collections::{BitSet, BitVec};
-    ///
-    /// let a   = 0b01101000;
-    /// let b   = 0b10100000;
-    /// let a_b = 0b01001000; // a - b
-    /// let b_a = 0b10000000; // b - a
-    ///
-    /// let mut bva = BitSet::from_bit_vec(BitVec::from_bytes(&[a]));
-    /// let bvb = BitSet::from_bit_vec(BitVec::from_bytes(&[b]));
-    /// let bva_b = BitSet::from_bit_vec(BitVec::from_bytes(&[a_b]));
-    /// let bvb_a = BitSet::from_bit_vec(BitVec::from_bytes(&[b_a]));
-    ///
-    /// bva.difference_with(&bvb);
-    /// assert_eq!(bva, bva_b);
-    ///
-    /// let bva = BitSet::from_bit_vec(BitVec::from_bytes(&[a]));
-    /// let mut bvb = BitSet::from_bit_vec(BitVec::from_bytes(&[b]));
-    ///
-    /// bvb.difference_with(&bva);
-    /// assert_eq!(bvb, bvb_a);
-    /// ```
-    #[inline]
-    pub fn difference_with(&mut self, other: &BitSet) {
-        self.other_op(other, |w1, w2| w1 & !w2);
-    }
-
-    /// Makes this bit vector the symmetric difference with the specified other
-    /// bit vector in-place.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// #![feature(bitset, bitvec)]
-    ///
-    /// use std::collections::{BitSet, BitVec};
-    ///
-    /// let a   = 0b01101000;
-    /// let b   = 0b10100000;
-    /// let res = 0b11001000;
-    ///
-    /// let mut a = BitSet::from_bit_vec(BitVec::from_bytes(&[a]));
-    /// let b = BitSet::from_bit_vec(BitVec::from_bytes(&[b]));
-    /// let res = BitSet::from_bit_vec(BitVec::from_bytes(&[res]));
-    ///
-    /// a.symmetric_difference_with(&b);
-    /// assert_eq!(a, res);
-    /// ```
-    #[inline]
-    pub fn symmetric_difference_with(&mut self, other: &BitSet) {
-        self.other_op(other, |w1, w2| w1 ^ w2);
-    }
-
-    /// Moves all elements from `other` into `Self`, leaving `other` empty.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// #![feature(bitset, bitvec, append)]
-    ///
-    /// use std::collections::{BitVec, BitSet};
-    ///
-    /// let mut a = BitSet::new();
-    /// a.insert(2);
-    /// a.insert(6);
-    ///
-    /// let mut b = BitSet::new();
-    /// b.insert(1);
-    /// b.insert(3);
-    /// b.insert(6);
-    ///
-    /// a.append(&mut b);
-    ///
-    /// assert_eq!(a.len(), 4);
-    /// assert_eq!(b.len(), 0);
-    /// assert_eq!(a, BitSet::from_bit_vec(BitVec::from_bytes(&[0b01110010])));
-    /// ```
-    #[unstable(feature = "append",
-               reason = "recently added as part of collections reform 2")]
-    pub fn append(&mut self, other: &mut Self) {
-        self.union_with(other);
-        other.clear();
-    }
-
-    /// Splits the `BitSet` into two at the given key including the key.
-    /// Retains the first part in-place while returning the second part.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// #![feature(bitset, bitvec, split_off)]
-    ///
-    /// use std::collections::{BitSet, BitVec};
-    /// let mut a = BitSet::new();
-    /// a.insert(2);
-    /// a.insert(6);
-    /// a.insert(1);
-    /// a.insert(3);
-    ///
-    /// let b = a.split_off(3);
-    ///
-    /// assert_eq!(a.len(), 2);
-    /// assert_eq!(b.len(), 2);
-    /// assert_eq!(a, BitSet::from_bit_vec(BitVec::from_bytes(&[0b01100000])));
-    /// assert_eq!(b, BitSet::from_bit_vec(BitVec::from_bytes(&[0b00010010])));
-    /// ```
-    #[unstable(feature = "split_off",
-               reason = "recently added as part of collections reform 2")]
-    pub fn split_off(&mut self, at: usize) -> Self {
-        let mut other = BitSet::new();
-
-        if at == 0 {
-            swap(self, &mut other);
-            return other;
-        } else if at >= self.bit_vec.len() {
-            return other;
-        }
-
-        // Calculate block and bit at which to split
-        let w = at / u32::BITS;
-        let b = at % u32::BITS;
-
-        // Pad `other` with `w` zero blocks,
-        // append `self`'s blocks in the range from `w` to the end to `other`
-        other.bit_vec.storage.extend(repeat(0u32).take(w)
-                                     .chain(self.bit_vec.storage[w..].iter().cloned()));
-        other.bit_vec.nbits = self.bit_vec.nbits;
-
-        if b > 0 {
-            other.bit_vec.storage[w] &= !0 << b;
-        }
-
-        // Sets `bit_vec.len()` and fixes the last block as well
-        self.bit_vec.truncate(at);
-
-        other
-    }
-
-    /// Returns the number of set bits in this set.
-    #[inline]
-    #[stable(feature = "rust1", since = "1.0.0")]
-    pub fn len(&self) -> usize  {
-        self.bit_vec.blocks().fold(0, |acc, n| acc + n.count_ones() as usize)
-    }
-
-    /// Returns whether there are no bits set in this set
-    #[inline]
-    #[stable(feature = "rust1", since = "1.0.0")]
-    pub fn is_empty(&self) -> bool {
-        self.bit_vec.none()
-    }
-
-    /// Clears all bits in this set
-    #[inline]
-    #[stable(feature = "rust1", since = "1.0.0")]
-    pub fn clear(&mut self) {
-        self.bit_vec.clear();
-    }
-
-    /// Returns `true` if this set contains the specified integer.
-    #[inline]
-    #[stable(feature = "rust1", since = "1.0.0")]
-    pub fn contains(&self, value: &usize) -> bool {
-        let bit_vec = &self.bit_vec;
-        *value < bit_vec.nbits && bit_vec[*value]
-    }
-
-    /// Returns `true` if the set has no elements in common with `other`.
-    /// This is equivalent to checking for an empty intersection.
-    #[inline]
-    #[stable(feature = "rust1", since = "1.0.0")]
-    pub fn is_disjoint(&self, other: &BitSet) -> bool {
-        self.intersection(other).next().is_none()
-    }
-
-    /// Returns `true` if the set is a subset of another.
-    #[inline]
-    #[stable(feature = "rust1", since = "1.0.0")]
-    pub fn is_subset(&self, other: &BitSet) -> bool {
-        let self_bit_vec = &self.bit_vec;
-        let other_bit_vec = &other.bit_vec;
-        let other_blocks = blocks_for_bits(other_bit_vec.len());
-
-        // Check that `self` intersect `other` is self
-        self_bit_vec.blocks().zip(other_bit_vec.blocks()).all(|(w1, w2)| w1 & w2 == w1) &&
-        // Make sure if `self` has any more blocks than `other`, they're all 0
-        self_bit_vec.blocks().skip(other_blocks).all(|w| w == 0)
-    }
-
-    /// Returns `true` if the set is a superset of another.
-    #[inline]
-    #[stable(feature = "rust1", since = "1.0.0")]
-    pub fn is_superset(&self, other: &BitSet) -> bool {
-        other.is_subset(self)
-    }
-
-    /// Adds a value to the set. Returns `true` if the value was not already
-    /// present in the set.
-    #[stable(feature = "rust1", since = "1.0.0")]
-    pub fn insert(&mut self, value: usize) -> bool {
-        if self.contains(&value) {
-            return false;
-        }
-
-        // Ensure we have enough space to hold the new element
-        let len = self.bit_vec.len();
-        if value >= len {
-            self.bit_vec.grow(value - len + 1, false)
-        }
-
-        self.bit_vec.set(value, true);
-        return true;
-    }
-
-    /// Removes a value from the set. Returns `true` if the value was
-    /// present in the set.
-    #[stable(feature = "rust1", since = "1.0.0")]
-    pub fn remove(&mut self, value: &usize) -> bool {
-        if !self.contains(value) {
-            return false;
-        }
-
-        self.bit_vec.set(*value, false);
-
-        return true;
-    }
-}
-
-#[stable(feature = "rust1", since = "1.0.0")]
-impl fmt::Debug for BitSet {
-    fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
-        try!(write!(fmt, "{{"));
-        let mut first = true;
-        for n in self {
-            if !first {
-                try!(write!(fmt, ", "));
-            }
-            try!(write!(fmt, "{:?}", n));
-            first = false;
-        }
-        write!(fmt, "}}")
-    }
-}
-
-#[stable(feature = "rust1", since = "1.0.0")]
-impl hash::Hash for BitSet {
-    fn hash<H: hash::Hasher>(&self, state: &mut H) {
-        for pos in self {
-            pos.hash(state);
-        }
-    }
-}
-
-#[derive(Clone)]
-#[stable(feature = "rust1", since = "1.0.0")]
-struct BlockIter<T> where T: Iterator<Item=u32> {
-    head: u32,
-    head_offset: usize,
-    tail: T,
-}
-
-impl<'a, T> BlockIter<T> where T: Iterator<Item=u32> {
-    fn from_blocks(mut blocks: T) -> BlockIter<T> {
-        let h = blocks.next().unwrap_or(0);
-        BlockIter {tail: blocks, head: h, head_offset: 0}
-    }
-}
-
-/// An iterator combining two `BitSet` iterators.
-#[derive(Clone)]
-struct TwoBitPositions<'a> {
-    set: Blocks<'a>,
-    other: Blocks<'a>,
-    merge: fn(u32, u32) -> u32,
-}
-
-/// An iterator for `BitSet`.
-#[derive(Clone)]
-#[stable(feature = "rust1", since = "1.0.0")]
-pub struct SetIter<'a>(BlockIter<Blocks<'a>>);
-#[derive(Clone)]
-#[stable(feature = "rust1", since = "1.0.0")]
-pub struct Union<'a>(BlockIter<TwoBitPositions<'a>>);
-#[derive(Clone)]
-#[stable(feature = "rust1", since = "1.0.0")]
-pub struct Intersection<'a>(Take<BlockIter<TwoBitPositions<'a>>>);
-#[derive(Clone)]
-#[stable(feature = "rust1", since = "1.0.0")]
-pub struct Difference<'a>(BlockIter<TwoBitPositions<'a>>);
-#[derive(Clone)]
-#[stable(feature = "rust1", since = "1.0.0")]
-pub struct SymmetricDifference<'a>(BlockIter<TwoBitPositions<'a>>);
-
-#[stable(feature = "rust1", since = "1.0.0")]
-impl<'a, T> Iterator for BlockIter<T> where T: Iterator<Item=u32> {
-    type Item = usize;
-
-    fn next(&mut self) -> Option<usize> {
-        while self.head == 0 {
-            match self.tail.next() {
-                Some(w) => self.head = w,
-                None => return None
-            }
-            self.head_offset += u32::BITS;
-        }
-
-        // from the current block, isolate the
-        // LSB and subtract 1, producing k:
-        // a block with a number of set bits
-        // equal to the index of the LSB
-        let k = (self.head & (!self.head + 1)) - 1;
-        // update block, removing the LSB
-        self.head &= self.head - 1;
-        // return offset + (index of LSB)
-        Some(self.head_offset + (u32::count_ones(k) as usize))
-    }
-
-    #[inline]
-    fn size_hint(&self) -> (usize, Option<usize>) {
-        match self.tail.size_hint() {
-            (_, Some(h)) => (0, Some(1 + h * (u32::BITS as usize))),
-            _ => (0, None)
-        }
-    }
-}
-
-#[stable(feature = "rust1", since = "1.0.0")]
-impl<'a> Iterator for TwoBitPositions<'a> {
-    type Item = u32;
-
-    fn next(&mut self) -> Option<u32> {
-        match (self.set.next(), self.other.next()) {
-            (Some(a), Some(b)) => Some((self.merge)(a, b)),
-            (Some(a), None) => Some((self.merge)(a, 0)),
-            (None, Some(b)) => Some((self.merge)(0, b)),
-            _ => return None
-        }
-    }
-
-    #[inline]
-    fn size_hint(&self) -> (usize, Option<usize>) {
-        let (a, au) = self.set.size_hint();
-        let (b, bu) = self.other.size_hint();
-
-        let upper = match (au, bu) {
-            (Some(au), Some(bu)) => Some(cmp::max(au, bu)),
-            _ => None
-        };
-
-        (cmp::max(a, b), upper)
-    }
-}
-
-#[stable(feature = "rust1", since = "1.0.0")]
-impl<'a> Iterator for SetIter<'a> {
-    type Item = usize;
-
-    #[inline] fn next(&mut self) -> Option<usize> { self.0.next() }
-    #[inline] fn size_hint(&self) -> (usize, Option<usize>) { self.0.size_hint() }
-}
-
-#[stable(feature = "rust1", since = "1.0.0")]
-impl<'a> Iterator for Union<'a> {
-    type Item = usize;
-
-    #[inline] fn next(&mut self) -> Option<usize> { self.0.next() }
-    #[inline] fn size_hint(&self) -> (usize, Option<usize>) { self.0.size_hint() }
-}
-
-#[stable(feature = "rust1", since = "1.0.0")]
-impl<'a> Iterator for Intersection<'a> {
-    type Item = usize;
-
-    #[inline] fn next(&mut self) -> Option<usize> { self.0.next() }
-    #[inline] fn size_hint(&self) -> (usize, Option<usize>) { self.0.size_hint() }
-}
-
-#[stable(feature = "rust1", since = "1.0.0")]
-impl<'a> Iterator for Difference<'a> {
-    type Item = usize;
-
-    #[inline] fn next(&mut self) -> Option<usize> { self.0.next() }
-    #[inline] fn size_hint(&self) -> (usize, Option<usize>) { self.0.size_hint() }
-}
-
-#[stable(feature = "rust1", since = "1.0.0")]
-impl<'a> Iterator for SymmetricDifference<'a> {
-    type Item = usize;
-
-    #[inline] fn next(&mut self) -> Option<usize> { self.0.next() }
-    #[inline] fn size_hint(&self) -> (usize, Option<usize>) { self.0.size_hint() }
-}
-
-#[stable(feature = "rust1", since = "1.0.0")]
-impl<'a> IntoIterator for &'a BitSet {
-    type Item = usize;
-    type IntoIter = SetIter<'a>;
-
-    fn into_iter(self) -> SetIter<'a> {
-        self.iter()
-    }
-}
diff --git a/src/libcollections/btree/map.rs b/src/libcollections/btree/map.rs
index a5c6ebaa5ae..e5d6909caa5 100644
--- a/src/libcollections/btree/map.rs
+++ b/src/libcollections/btree/map.rs
@@ -1145,18 +1145,6 @@ impl<'a, K, V> DoubleEndedIterator for RangeMut<'a, K, V> {
 }
 
 impl<'a, K: Ord, V> Entry<'a, K, V> {
-    #[unstable(feature = "entry",
-               reason = "will soon be replaced by or_insert")]
-    #[deprecated(since = "1.0",
-                reason = "replaced with more ergonomic `or_insert` and `or_insert_with`")]
-    /// Returns a mutable reference to the entry if occupied, or the VacantEntry if vacant
-    pub fn get(self) -> Result<&'a mut V, VacantEntry<'a, K, V>> {
-        match self {
-            Occupied(entry) => Ok(entry.into_mut()),
-            Vacant(entry) => Err(entry),
-        }
-    }
-
     #[stable(feature = "rust1", since = "1.0.0")]
     /// Ensures a value is in the entry by inserting the default if empty, and returns
     /// a mutable reference to the value in the entry.
diff --git a/src/libcollections/lib.rs b/src/libcollections/lib.rs
index 740fba73c17..cbafd6fc6ed 100644
--- a/src/libcollections/lib.rs
+++ b/src/libcollections/lib.rs
@@ -37,8 +37,6 @@
 #![feature(core_slice_ext)]
 #![feature(core_str_ext)]
 #![feature(heap_api)]
-#![feature(iter_cmp)]
-#![feature(iter_idx)]
 #![feature(iter_order)]
 #![feature(iter_arith)]
 #![feature(iter_arith)]
@@ -58,7 +56,6 @@
 #![feature(unsafe_no_drop_flag, filling_drop)]
 #![feature(utf8_error)]
 #![cfg_attr(test, feature(rand, test))]
-#![cfg_attr(not(test), feature(str_words))]
 
 #![feature(no_std)]
 #![no_std]
@@ -70,10 +67,6 @@ extern crate alloc;
 #[cfg(test)] extern crate test;
 
 pub use binary_heap::BinaryHeap;
-#[allow(deprecated)]
-pub use bit_vec::BitVec;
-#[allow(deprecated)]
-pub use bit_set::BitSet;
 pub use btree_map::BTreeMap;
 pub use btree_set::BTreeSet;
 pub use linked_list::LinkedList;
@@ -81,8 +74,6 @@ pub use enum_set::EnumSet;
 pub use vec_deque::VecDeque;
 pub use string::String;
 pub use vec::Vec;
-#[allow(deprecated)]
-pub use vec_map::VecMap;
 
 // Needed for the vec! macro
 pub use alloc::boxed;
@@ -91,7 +82,6 @@ pub use alloc::boxed;
 mod macros;
 
 pub mod binary_heap;
-mod bit;
 mod btree;
 pub mod borrow;
 pub mod enum_set;
@@ -103,21 +93,6 @@ pub mod str;
 pub mod string;
 pub mod vec;
 pub mod vec_deque;
-#[allow(deprecated)]
-pub mod vec_map;
-
-#[unstable(feature = "bitvec", reason = "RFC 509")]
-pub mod bit_vec {
-    #![allow(deprecated)]
-    pub use bit::{BitVec, Iter};
-}
-
-#[unstable(feature = "bitset", reason = "RFC 509")]
-pub mod bit_set {
-    #![allow(deprecated)]
-    pub use bit::{BitSet, Union, Intersection, Difference, SymmetricDifference};
-    pub use bit::SetIter as Iter;
-}
 
 #[stable(feature = "rust1", since = "1.0.0")]
 pub mod btree_map {
diff --git a/src/libcollections/slice.rs b/src/libcollections/slice.rs
index 5ccf3973c28..a15573f04f3 100644
--- a/src/libcollections/slice.rs
+++ b/src/libcollections/slice.rs
@@ -98,14 +98,13 @@ use core::option::Option::{self, Some, None};
 use core::ptr;
 use core::result::Result;
 use core::slice as core_slice;
-use self::Direction::*;
 
 use borrow::{Borrow, BorrowMut, ToOwned};
 use vec::Vec;
 
 pub use core::slice::{Chunks, Windows};
 pub use core::slice::{Iter, IterMut};
-pub use core::slice::{IntSliceExt, SplitMut, ChunksMut, Split};
+pub use core::slice::{SplitMut, ChunksMut, Split};
 pub use core::slice::{SplitN, RSplitN, SplitNMut, RSplitNMut};
 pub use core::slice::{bytes, mut_ref_slice, ref_slice};
 pub use core::slice::{from_raw_parts, from_raw_parts_mut};
@@ -141,8 +140,6 @@ mod hack {
     use string::ToString;
     use vec::Vec;
 
-    use super::{ElementSwaps, Permutations};
-
     pub fn into_vec<T>(mut b: Box<[T]>) -> Vec<T> {
         unsafe {
             let xs = Vec::from_raw_parts(b.as_mut_ptr(), b.len(), b.len());
@@ -151,76 +148,12 @@ mod hack {
         }
     }
 
-    #[allow(deprecated)]
-    pub fn permutations<T>(s: &[T]) -> Permutations<T> where T: Clone {
-        Permutations{
-            swaps: ElementSwaps::new(s.len()),
-            v: to_vec(s),
-        }
-    }
-
     #[inline]
     pub fn to_vec<T>(s: &[T]) -> Vec<T> where T: Clone {
         let mut vector = Vec::with_capacity(s.len());
         vector.push_all(s);
         vector
     }
-
-    // NB we can remove this hack if we move this test to libcollectionstest -
-    // but that can't be done right now because the test needs access to the
-    // private fields of Permutations
-    #[test]
-    fn test_permutations() {
-        {
-            let v: [i32; 0] = [];
-            let mut it = permutations(&v);
-            let (min_size, max_opt) = it.size_hint();
-            assert_eq!(min_size, 1);
-            assert_eq!(max_opt.unwrap(), 1);
-            assert_eq!(it.next(), Some(to_vec(&v)));
-            assert_eq!(it.next(), None);
-        }
-        {
-            let v = ["Hello".to_string()];
-            let mut it = permutations(&v);
-            let (min_size, max_opt) = it.size_hint();
-            assert_eq!(min_size, 1);
-            assert_eq!(max_opt.unwrap(), 1);
-            assert_eq!(it.next(), Some(to_vec(&v)));
-            assert_eq!(it.next(), None);
-        }
-        {
-            let v = [1, 2, 3];
-            let mut it = permutations(&v);
-            let (min_size, max_opt) = it.size_hint();
-            assert_eq!(min_size, 3*2);
-            assert_eq!(max_opt.unwrap(), 3*2);
-            assert_eq!(it.next().unwrap(), [1,2,3]);
-            assert_eq!(it.next().unwrap(), [1,3,2]);
-            assert_eq!(it.next().unwrap(), [3,1,2]);
-            let (min_size, max_opt) = it.size_hint();
-            assert_eq!(min_size, 3);
-            assert_eq!(max_opt.unwrap(), 3);
-            assert_eq!(it.next().unwrap(), [3,2,1]);
-            assert_eq!(it.next().unwrap(), [2,3,1]);
-            assert_eq!(it.next().unwrap(), [2,1,3]);
-            assert_eq!(it.next(), None);
-        }
-        {
-            // check that we have N! permutations
-            let v = ['A', 'B', 'C', 'D', 'E', 'F'];
-            let mut amt = 0;
-            let mut it = permutations(&v);
-            let (min_size, max_opt) = it.size_hint();
-            for _perm in it.by_ref() {
-                amt += 1;
-            }
-            assert_eq!(amt, it.swaps.swaps_made);
-            assert_eq!(amt, min_size);
-            assert_eq!(amt, 2 * 3 * 4 * 5 * 6);
-            assert_eq!(amt, max_opt.unwrap());
-        }
-    }
 }
 
 /// Allocating extension methods for slices.
@@ -280,14 +213,6 @@ impl<T> [T] {
         core_slice::SliceExt::first_mut(self)
     }
 
-    /// Returns all but the first element of a slice.
-    #[unstable(feature = "slice_extras", reason = "likely to be renamed")]
-    #[deprecated(since = "1.3.0", reason = "superseded by split_first")]
-    #[inline]
-    pub fn tail(&self) -> &[T] {
-        core_slice::SliceExt::tail(self)
-    }
-
     /// Returns the first and all the rest of the elements of a slice.
     #[unstable(feature = "slice_splits", reason = "new API")]
     #[inline]
@@ -295,14 +220,6 @@ impl<T> [T] {
         core_slice::SliceExt::split_first(self)
     }
 
-    /// Returns all but the first element of a mutable slice
-    #[unstable(feature = "slice_extras", reason = "likely to be renamed or removed")]
-    #[deprecated(since = "1.3.0", reason = "superseded by split_first_mut")]
-    #[inline]
-    pub fn tail_mut(&mut self) -> &mut [T] {
-        core_slice::SliceExt::tail_mut(self)
-    }
-
     /// Returns the first and all the rest of the elements of a slice.
     #[unstable(feature = "slice_splits", reason = "new API")]
     #[inline]
@@ -310,14 +227,6 @@ impl<T> [T] {
         core_slice::SliceExt::split_first_mut(self)
     }
 
-    /// Returns all but the last element of a slice.
-    #[unstable(feature = "slice_extras", reason = "likely to be renamed")]
-    #[deprecated(since = "1.3.0", reason = "superseded by split_last")]
-    #[inline]
-    pub fn init(&self) -> &[T] {
-        core_slice::SliceExt::init(self)
-    }
-
     /// Returns the last and all the rest of the elements of a slice.
     #[unstable(feature = "slice_splits", reason = "new API")]
     #[inline]
@@ -326,14 +235,6 @@ impl<T> [T] {
 
     }
 
-    /// Returns all but the last element of a mutable slice
-    #[unstable(feature = "slice_extras", reason = "likely to be renamed or removed")]
-    #[deprecated(since = "1.3.0", reason = "superseded by split_last_mut")]
-    #[inline]
-    pub fn init_mut(&mut self) -> &mut [T] {
-        core_slice::SliceExt::init_mut(self)
-    }
-
     /// Returns the last and all the rest of the elements of a slice.
     #[unstable(feature = "slice_splits", since = "1.3.0")]
     #[inline]
@@ -760,22 +661,6 @@ impl<T> [T] {
         core_slice::SliceExt::ends_with(self, needle)
     }
 
-    /// Find the first index containing a matching value.
-    #[unstable(feature = "slice_position_elem")]
-    #[deprecated(since = "1.3.0",
-                 reason = "less idiomatic than .iter().position()")]
-    pub fn position_elem(&self, t: &T) -> Option<usize> where T: PartialEq {
-        core_slice::SliceExt::position_elem(self, t)
-    }
-
-    /// Find the last index containing a matching value.
-    #[unstable(feature = "slice_position_elem")]
-    #[deprecated(since = "1.3.0",
-                 reason = "less idiomatic than .iter().rev().position()")]
-    pub fn rposition_elem(&self, t: &T) -> Option<usize> where T: PartialEq {
-        core_slice::SliceExt::rposition_elem(self, t)
-    }
-
     /// Binary search a sorted slice for a given element.
     ///
     /// If the value is found then `Ok` is returned, containing the
@@ -881,95 +766,6 @@ impl<T> [T] {
         merge_sort(self, compare)
     }
 
-    /// Creates an iterator that yields every possible permutation of the
-    /// vector in succession.
-    ///
-    /// # Examples
-    ///
-    /// ```rust
-    /// #![feature(permutations)]
-    ///
-    /// let v = [1, 2, 3];
-    /// let mut perms = v.permutations();
-    ///
-    /// for p in perms {
-    ///   println!("{:?}", p);
-    /// }
-    /// ```
-    ///
-    /// Iterating through permutations one by one.
-    ///
-    /// ```rust
-    /// #![feature(permutations)]
-    ///
-    /// let v = [1, 2, 3];
-    /// let mut perms = v.permutations();
-    ///
-    /// assert_eq!(Some(vec![1, 2, 3]), perms.next());
-    /// assert_eq!(Some(vec![1, 3, 2]), perms.next());
-    /// assert_eq!(Some(vec![3, 1, 2]), perms.next());
-    /// ```
-    #[allow(deprecated)]
-    #[unstable(feature = "permutations")]
-    #[deprecated(since = "1.2.0", reason = "not clear this should be in the stdlib")]
-    #[inline]
-    pub fn permutations(&self) -> Permutations<T> where T: Clone {
-        // NB see hack module in this file
-        hack::permutations(self)
-    }
-
-    /// Mutates the slice to the next lexicographic permutation.
-    ///
-    /// Returns `true` if successful and `false` if the slice is at the
-    /// last-ordered permutation.
-    ///
-    /// # Example
-    ///
-    /// ```rust
-    /// #![feature(permutations)]
-    ///
-    /// let v: &mut [_] = &mut [0, 1, 2];
-    /// v.next_permutation();
-    /// let b: &mut [_] = &mut [0, 2, 1];
-    /// assert!(v == b);
-    /// v.next_permutation();
-    /// let b: &mut [_] = &mut [1, 0, 2];
-    /// assert!(v == b);
-    /// ```
-    #[allow(deprecated)]
-    #[unstable(feature = "permutations",
-               reason = "uncertain if this merits inclusion in std")]
-    #[deprecated(since = "1.2.0", reason = "not clear this should be in the stdlib")]
-    pub fn next_permutation(&mut self) -> bool where T: Ord {
-        core_slice::SliceExt::next_permutation(self)
-    }
-
-    /// Mutates the slice to the previous lexicographic permutation.
-    ///
-    /// Returns `true` if successful and `false` if the slice is at the
-    /// first-ordered permutation.
-    ///
-    /// # Example
-    ///
-    /// ```rust
-    /// #![feature(permutations)]
-    ///
-    /// let v: &mut [_] = &mut [1, 0, 2];
-    /// v.prev_permutation();
-    /// let b: &mut [_] = &mut [0, 2, 1];
-    /// assert!(v == b);
-    /// v.prev_permutation();
-    /// let b: &mut [_] = &mut [0, 1, 2];
-    /// assert!(v == b);
-    /// ```
-    #[allow(deprecated)]
-    #[unstable(feature = "permutations",
-               reason = "uncertain if this merits inclusion in std")]
-    #[deprecated(since = "1.2.0", reason = "not clear this should be in the stdlib")]
-    pub fn prev_permutation(&mut self) -> bool where T: Ord {
-        core_slice::SliceExt::prev_permutation(self)
-    }
-
     /// Copies as many elements from `src` as it can into `self` (the
     /// shorter of `self.len()` and `src.len()`). Returns the number
     /// of elements copied.
@@ -994,41 +790,6 @@ impl<T> [T] {
         core_slice::SliceExt::clone_from_slice(self, src)
     }
 
-    /// Consumes `src` and moves as many elements as it can into `self`
-    /// from the range [start,end).
-    ///
-    /// Returns the number of elements copied (the shorter of `self.len()`
-    /// and `end - start`).
-    ///
-    /// # Arguments
-    ///
-    /// * src - A mutable vector of `T`
-    /// * start - The index into `src` to start copying from
-    /// * end - The index into `src` to stop copying from
-    ///
-    /// # Examples
-    ///
-    /// ```rust
-    /// #![feature(move_from)]
-    ///
-    /// let mut a = [1, 2, 3, 4, 5];
-    /// let b = vec![6, 7, 8];
-    /// let num_moved = a.move_from(b, 0, 3);
-    /// assert_eq!(num_moved, 3);
-    /// assert!(a == [6, 7, 8, 4, 5]);
-    /// ```
-    #[unstable(feature = "move_from",
-               reason = "uncertain about this API approach")]
-    #[deprecated(since = "1.3.0",
-                 reason = "unclear that it must belong in the standard library")]
-    #[inline]
-    pub fn move_from(&mut self, mut src: Vec<T>, start: usize, end: usize) -> usize {
-        for (a, b) in self.iter_mut().zip(&mut src[start .. end]) {
-            mem::swap(a, b);
-        }
-        cmp::min(self.len(), end-start)
-    }
-
     /// Copies `self` into a new `Vec`.
     #[stable(feature = "rust1", since = "1.0.0")]
     #[inline]
@@ -1120,45 +881,6 @@ impl<T: Clone, V: Borrow<[T]>> SliceConcatExt<T> for [V] {
     }
 }
 
-/// An iterator that yields the element swaps needed to produce
-/// a sequence of all possible permutations for an indexed sequence of
-/// elements. Each permutation is only a single swap apart.
-///
-/// The Steinhaus-Johnson-Trotter algorithm is used.
-///
-/// Generates even and odd permutations alternately.
-///
-/// The last generated swap is always (0, 1), and it returns the
-/// sequence to its initial order.
-#[allow(deprecated)]
-#[unstable(feature = "permutations")]
-#[derive(Clone)]
-#[deprecated(since = "1.2.0", reason = "not clear this should be in the stdlib")]
-pub struct ElementSwaps {
-    sdir: Vec<SizeDirection>,
-    /// If `true`, emit the last swap that returns the sequence to initial
-    /// state.
-    emit_reset: bool,
-    swaps_made : usize,
-}
-
-#[allow(deprecated)]
-impl ElementSwaps {
-    /// Creates an `ElementSwaps` iterator for a sequence of `length` elements.
-    #[unstable(feature = "permutations")]
-    #[deprecated(since = "1.2.0", reason = "not clear this should be in the stdlib")]
-    pub fn new(length: usize) -> ElementSwaps {
-        // Initialize `sdir` with a direction that position should move in
-        // (all negative at the beginning) and the `size` of the
-        // element (equal to the original index).
-        ElementSwaps{
-            emit_reset: true,
-            sdir: (0..length).map(|i| SizeDirection{ size: i, dir: Neg }).collect(),
-            swaps_made: 0
-        }
-    }
-}
-
 ////////////////////////////////////////////////////////////////////////////////
 // Standard trait implementations for slices
 ////////////////////////////////////////////////////////////////////////////////
@@ -1188,120 +910,6 @@ impl<T: Clone> ToOwned for [T] {
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-// Iterators
-////////////////////////////////////////////////////////////////////////////////
-
-#[derive(Copy, Clone)]
-enum Direction { Pos, Neg }
-
-/// An `Index` and `Direction` together.
-#[derive(Copy, Clone)]
-struct SizeDirection {
-    size: usize,
-    dir: Direction,
-}
-
-#[stable(feature = "rust1", since = "1.0.0")]
-#[allow(deprecated)]
-impl Iterator for ElementSwaps {
-    type Item = (usize, usize);
-
-    // #[inline]
-    fn next(&mut self) -> Option<(usize, usize)> {
-        fn new_pos_wrapping(i: usize, s: Direction) -> usize {
-            i.wrapping_add(match s { Pos => 1, Neg => !0 /* aka -1 */ })
-        }
-
-        fn new_pos(i: usize, s: Direction) -> usize {
-            match s { Pos => i + 1, Neg => i - 1 }
-        }
-
-        // Find the index of the largest mobile element:
-        // The direction should point into the vector, and the
-        // swap should be with a smaller `size` element.
-        let max = self.sdir.iter().cloned().enumerate()
-                           .filter(|&(i, sd)|
-                                new_pos_wrapping(i, sd.dir) < self.sdir.len() &&
-                                self.sdir[new_pos(i, sd.dir)].size < sd.size)
-                           .max_by(|&(_, sd)| sd.size);
-        match max {
-            Some((i, sd)) => {
-                let j = new_pos(i, sd.dir);
-                self.sdir.swap(i, j);
-
-                // Swap the direction of each larger SizeDirection
-                for x in &mut self.sdir {
-                    if x.size > sd.size {
-                        x.dir = match x.dir { Pos => Neg, Neg => Pos };
-                    }
-                }
-                self.swaps_made += 1;
-                Some((i, j))
-            },
-            None => if self.emit_reset {
-                self.emit_reset = false;
-                if self.sdir.len() > 1 {
-                    // The last swap
-                    self.swaps_made += 1;
-                    Some((0, 1))
-                } else {
-                    // Vector is of the form [] or [x], and the only permutation is itself
-                    self.swaps_made += 1;
-                    Some((0,0))
-                }
-            } else { None }
-        }
-    }
-
-    #[inline]
-    fn size_hint(&self) -> (usize, Option<usize>) {
-        // For a vector of size n, there are exactly n! permutations.
-        let n: usize = (2..self.sdir.len() + 1).product();
-        (n - self.swaps_made, Some(n - self.swaps_made))
-    }
-}
-
-/// An iterator that uses `ElementSwaps` to iterate through
-/// all possible permutations of a vector.
-///
-/// The first iteration yields a clone of the vector as it is,
-/// then each successive element is the vector with one
-/// swap applied.
-///
-/// Generates even and odd permutations alternately.
-#[unstable(feature = "permutations")]
-#[deprecated(since = "1.2.0", reason = "not clear this should be in the stdlib")]
-#[allow(deprecated)]
-pub struct Permutations<T> {
-    swaps: ElementSwaps,
-    v: Vec<T>,
-}
-
-#[unstable(feature = "permutations", reason = "trait is unstable")]
-#[allow(deprecated)]
-impl<T: Clone> Iterator for Permutations<T> {
-    type Item = Vec<T>;
-
-    #[inline]
-    fn next(&mut self) -> Option<Vec<T>> {
-        match self.swaps.next() {
-            None => None,
-            Some((0,0)) => Some(self.v.clone()),
-            Some((a, b)) => {
-                let elt = self.v.clone();
-                self.v.swap(a, b);
-                Some(elt)
-            }
-        }
-    }
-
-    #[inline]
-    fn size_hint(&self) -> (usize, Option<usize>) {
-        self.swaps.size_hint()
-    }
-}
-
-////////////////////////////////////////////////////////////////////////////////
 // Sorting
 ////////////////////////////////////////////////////////////////////////////////
 
diff --git a/src/libcollections/str.rs b/src/libcollections/str.rs
index 2d56e6e3c41..56a04f0398a 100644
--- a/src/libcollections/str.rs
+++ b/src/libcollections/str.rs
@@ -19,9 +19,6 @@
 // It's cleaner to just turn off the unused_imports warning than to fix them.
 #![allow(unused_imports)]
 
-use self::RecompositionState::*;
-use self::DecompositionType::*;
-
 use core::clone::Clone;
 use core::iter::{Iterator, Extend};
 use core::option::Option::{self, Some, None};
@@ -49,7 +46,7 @@ pub use core::str::{Matches, RMatches};
 pub use core::str::{MatchIndices, RMatchIndices};
 pub use core::str::{from_utf8, Chars, CharIndices, Bytes};
 pub use core::str::{from_utf8_unchecked, ParseBoolError};
-pub use rustc_unicode::str::{SplitWhitespace, Words, Graphemes, GraphemeIndices};
+pub use rustc_unicode::str::{SplitWhitespace};
 pub use core::str::pattern;
 
 impl<S: Borrow<str>> SliceConcatExt<str> for [S] {
@@ -104,230 +101,6 @@ impl<S: Borrow<str>> SliceConcatExt<str> for [S] {
     }
 }
 
-// Helper functions used for Unicode normalization
-fn canonical_sort(comb: &mut [(char, u8)]) {
-    let len = comb.len();
-    for i in 0..len {
-        let mut swapped = false;
-        for j in 1..len-i {
-            let class_a = comb[j-1].1;
-            let class_b = comb[j].1;
-            if class_a != 0 && class_b != 0 && class_a > class_b {
-                comb.swap(j-1, j);
-                swapped = true;
-            }
-        }
-        if !swapped { break; }
-    }
-}
-
-#[derive(Clone)]
-enum DecompositionType {
-    Canonical,
-    Compatible
-}
-
-/// External iterator for a string decomposition's characters.
-///
-/// For use with the `std::iter` module.
-#[allow(deprecated)]
-#[deprecated(reason = "use the crates.io `unicode-normalization` library instead",
-             since = "1.0.0")]
-#[derive(Clone)]
-#[unstable(feature = "unicode",
-           reason = "this functionality may be replaced with a more generic \
-                     unicode crate on crates.io")]
-pub struct Decompositions<'a> {
-    kind: DecompositionType,
-    iter: Chars<'a>,
-    buffer: Vec<(char, u8)>,
-    sorted: bool
-}
-
-#[allow(deprecated)]
-#[stable(feature = "rust1", since = "1.0.0")]
-impl<'a> Iterator for Decompositions<'a> {
-    type Item = char;
-
-    #[inline]
-    fn next(&mut self) -> Option<char> {
-        match self.buffer.first() {
-            Some(&(c, 0)) => {
-                self.sorted = false;
-                self.buffer.remove(0);
-                return Some(c);
-            }
-            Some(&(c, _)) if self.sorted => {
-                self.buffer.remove(0);
-                return Some(c);
-            }
-            _ => self.sorted = false
-        }
-
-        if !self.sorted {
-            for ch in self.iter.by_ref() {
-                let buffer = &mut self.buffer;
-                let sorted = &mut self.sorted;
-                {
-                    let callback = |d| {
-                        let class =
-                            rustc_unicode::char::canonical_combining_class(d);
-                        if class == 0 && !*sorted {
-                            canonical_sort(buffer);
-                            *sorted = true;
-                        }
-                        buffer.push((d, class));
-                    };
-                    match self.kind {
-                        Canonical => {
-                            rustc_unicode::char::decompose_canonical(ch, callback)
-                        }
-                        Compatible => {
-                            rustc_unicode::char::decompose_compatible(ch, callback)
-                        }
-                    }
-                }
-                if *sorted {
-                    break
-                }
-            }
-        }
-
-        if !self.sorted {
-            canonical_sort(&mut self.buffer);
-            self.sorted = true;
-        }
-
-        if self.buffer.is_empty() {
-            None
-        } else {
-            match self.buffer.remove(0) {
-                (c, 0) => {
-                    self.sorted = false;
-                    Some(c)
-                }
-                (c, _) => Some(c),
-            }
-        }
-    }
-
-    fn size_hint(&self) -> (usize, Option<usize>) {
-        let (lower, _) = self.iter.size_hint();
-        (lower, None)
-    }
-}
-
-#[derive(Clone)]
-enum RecompositionState {
-    Composing,
-    Purging,
-    Finished
-}
-
-/// External iterator for a string recomposition's characters.
-///
-/// For use with the `std::iter` module.
-#[allow(deprecated)]
-#[deprecated(reason = "use the crates.io `unicode-normalization` library instead",
-             since = "1.0.0")]
-#[derive(Clone)]
-#[unstable(feature = "unicode",
-           reason = "this functionality may be replaced with a more generic \
-                     unicode crate on crates.io")]
-pub struct Recompositions<'a> {
-    iter: Decompositions<'a>,
-    state: RecompositionState,
-    buffer: VecDeque<char>,
-    composee: Option<char>,
-    last_ccc: Option<u8>
-}
-
-#[allow(deprecated)]
-#[stable(feature = "rust1", since = "1.0.0")]
-impl<'a> Iterator for Recompositions<'a> {
-    type Item = char;
-
-    #[inline]
-    fn next(&mut self) -> Option<char> {
-        loop {
-            match self.state {
-                Composing => {
-                    for ch in self.iter.by_ref() {
-                        let ch_class = rustc_unicode::char::canonical_combining_class(ch);
-                        if self.composee.is_none() {
-                            if ch_class != 0 {
-                                return Some(ch);
-                            }
-                            self.composee = Some(ch);
-                            continue;
-                        }
-                        let k = self.composee.clone().unwrap();
-
-                        match self.last_ccc {
-                            None => {
-                                match rustc_unicode::char::compose(k, ch) {
-                                    Some(r) => {
-                                        self.composee = Some(r);
-                                        continue;
-                                    }
-                                    None => {
-                                        if ch_class == 0 {
-                                            self.composee = Some(ch);
-                                            return Some(k);
-                                        }
-                                        self.buffer.push_back(ch);
-                                        self.last_ccc = Some(ch_class);
-                                    }
-                                }
-                            }
-                            Some(l_class) => {
-                                if l_class >= ch_class {
-                                    // `ch` is blocked from `composee`
-                                    if ch_class == 0 {
-                                        self.composee = Some(ch);
-                                        self.last_ccc = None;
-                                        self.state = Purging;
-                                        return Some(k);
-                                    }
-                                    self.buffer.push_back(ch);
-                                    self.last_ccc = Some(ch_class);
-                                    continue;
-                                }
-                                match rustc_unicode::char::compose(k, ch) {
-                                    Some(r) => {
-                                        self.composee = Some(r);
-                                        continue;
-                                    }
-                                    None => {
-                                        self.buffer.push_back(ch);
-                                        self.last_ccc = Some(ch_class);
-                                    }
-                                }
-                            }
-                        }
-                    }
-                    self.state = Finished;
-                    if self.composee.is_some() {
-                        return self.composee.take();
-                    }
-                }
-                Purging => {
-                    match self.buffer.pop_front() {
-                        None => self.state = Composing,
-                        s => return s
-                    }
-                }
-                Finished => {
-                    match self.buffer.pop_front() {
-                        None => return self.composee.take(),
-                        s => return s
-                    }
-                }
-            }
-        }
-    }
-}
-
 /// External iterator for a string's UTF16 codeunits.
 ///
 /// For use with the `std::iter` module.
@@ -408,28 +181,6 @@ impl str {
         core_str::StrExt::is_empty(self)
     }
 
-    /// Returns a string's displayed width in columns.
-    ///
-    /// Control characters have zero width.
-    ///
-    /// `is_cjk` determines behavior for characters in the Ambiguous category:
-    /// if `is_cjk` is
-    /// `true`, these are 2 columns wide; otherwise, they are 1.
-    /// In CJK locales, `is_cjk` should be
-    /// `true`, else it should be `false`.
-    /// [Unicode Standard Annex #11](http://www.unicode.org/reports/tr11/)
-    /// recommends that these
-    /// characters be treated as 1 column (i.e., `is_cjk = false`) if the
-    /// locale is unknown.
-    #[deprecated(reason = "use the crates.io `unicode-width` library instead",
-                 since = "1.0.0")]
-    #[unstable(feature = "unicode",
-               reason = "this functionality may only be provided by libunicode")]
-    #[inline]
-    pub fn width(&self, is_cjk: bool) -> usize {
-        UnicodeStr::width(self, is_cjk)
-    }
-
     /// Checks that `index`-th byte lies at the start and/or end of a
     /// UTF-8 code point sequence.
     ///
@@ -530,42 +281,6 @@ impl str {
         core_str::StrExt::slice_mut_unchecked(self, begin, end)
     }
 
-    /// Returns a slice of the string from the range [`begin`..`end`) where indices
-    /// are counted in code points.
-    ///
-    /// That is, start at the `begin`-th code point of the string and continue
-    /// to the `end`-th code point. This does not detect or handle edge cases
-    /// such as leaving a combining character as the first `char` of the
-    /// string.
-    ///
-    /// Due to the design of UTF-8, this operation is `O(end)`. Use slicing
-    /// syntax if you want to use `O(1)` byte indices instead.
-    ///
-    /// # Panics
-    ///
-    /// Panics if `begin` > `end` or the either `begin` or `end` are beyond the
-    /// last character of the string.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// #![feature(slice_chars)]
-    ///
-    /// let s = "Löwe 老虎 Léopard";
-    ///
-    /// assert_eq!(s.slice_chars(0, 4), "Löwe");
-    /// assert_eq!(s.slice_chars(5, 7), "老虎");
-    /// ```
-    #[unstable(feature = "slice_chars",
-               reason = "may have yet to prove its worth")]
-    #[deprecated(since = "1.3.0",
-                 reason = "can be implemented with char_indices and \
-                           hasn't seen enough use to justify inclusion")]
-    #[inline]
-    pub fn slice_chars(&self, begin: usize, end: usize) -> &str {
-        core_str::StrExt::slice_chars(self, begin, end)
-    }
-
     /// Given a byte position, return the next code point and its index.
     ///
     /// This can be used to iterate over the Unicode code points of a string.
@@ -603,8 +318,8 @@ impl str {
     /// 6: V
     /// 7: i
     /// 8: e
-    /// 9: ̣
-    /// 11: ̂
+    /// 9:
+    /// 11:
     /// 13: t
     /// 14:
     /// 15: N
@@ -662,8 +377,8 @@ impl str {
     /// 16: N
     /// 15:
     /// 14: t
-    /// 13: ̂
-    /// 11: ̣
+    /// 13:
+    /// 11:
     /// 9: e
     /// 8: i
     /// 7: V
@@ -880,30 +595,6 @@ impl str {
         UnicodeStr::split_whitespace(self)
     }
 
-    /// An iterator over the non-empty substrings of `self` which contain no whitespace,
-    /// and which are separated by any amount of whitespace.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// #![feature(str_words)]
-    /// #![allow(deprecated)]
-    ///
-    /// let some_words = " Mary   had\ta\u{2009}little  \n\t lamb";
-    /// let v: Vec<&str> = some_words.words().collect();
-    ///
-    /// assert_eq!(v, ["Mary", "had", "a", "little", "lamb"]);
-    /// ```
-    #[deprecated(reason = "words() will be removed. Use split_whitespace() instead",
-                 since = "1.1.0")]
-    #[unstable(feature = "str_words",
-               reason = "the precise algorithm to use is unclear")]
-    #[allow(deprecated)]
-    #[inline]
-    pub fn words(&self) -> Words {
-        UnicodeStr::words(self)
-    }
-
     /// An iterator over the lines of a string, separated by `\n`.
     ///
     /// This does not include the empty string after a trailing `\n`.
@@ -959,135 +650,6 @@ impl str {
         core_str::StrExt::lines_any(self)
     }
 
-    /// Returns an iterator over the string in Unicode Normalization Form D
-    /// (canonical decomposition).
-    #[allow(deprecated)]
-    #[deprecated(reason = "use the crates.io `unicode-normalization` library instead",
-             since = "1.0.0")]
-    #[inline]
-    #[unstable(feature = "unicode",
-               reason = "this functionality may be replaced with a more generic \
-                         unicode crate on crates.io")]
-    pub fn nfd_chars(&self) -> Decompositions {
-        Decompositions {
-            iter: self[..].chars(),
-            buffer: Vec::new(),
-            sorted: false,
-            kind: Canonical
-        }
-    }
-
-    /// Returns an iterator over the string in Unicode Normalization Form KD
-    /// (compatibility decomposition).
-    #[allow(deprecated)]
-    #[deprecated(reason = "use the crates.io `unicode-normalization` library instead",
-             since = "1.0.0")]
-    #[inline]
-    #[unstable(feature = "unicode",
-               reason = "this functionality may be replaced with a more generic \
-                         unicode crate on crates.io")]
-    pub fn nfkd_chars(&self) -> Decompositions {
-        Decompositions {
-            iter: self[..].chars(),
-            buffer: Vec::new(),
-            sorted: false,
-            kind: Compatible
-        }
-    }
-
-    /// An Iterator over the string in Unicode Normalization Form C
-    /// (canonical decomposition followed by canonical composition).
-    #[allow(deprecated)]
-    #[deprecated(reason = "use the crates.io `unicode-normalization` library instead",
-             since = "1.0.0")]
-    #[inline]
-    #[unstable(feature = "unicode",
-               reason = "this functionality may be replaced with a more generic \
-                         unicode crate on crates.io")]
-    pub fn nfc_chars(&self) -> Recompositions {
-        Recompositions {
-            iter: self.nfd_chars(),
-            state: Composing,
-            buffer: VecDeque::new(),
-            composee: None,
-            last_ccc: None
-        }
-    }
-
-    /// An Iterator over the string in Unicode Normalization Form KC
-    /// (compatibility decomposition followed by canonical composition).
-    #[allow(deprecated)]
-    #[deprecated(reason = "use the crates.io `unicode-normalization` library instead",
-             since = "1.0.0")]
-    #[inline]
-    #[unstable(feature = "unicode",
-               reason = "this functionality may be replaced with a more generic \
-                         unicode crate on crates.io")]
-    pub fn nfkc_chars(&self) -> Recompositions {
-        Recompositions {
-            iter: self.nfkd_chars(),
-            state: Composing,
-            buffer: VecDeque::new(),
-            composee: None,
-            last_ccc: None
-        }
-    }
-
-    /// Returns an iterator over the [grapheme clusters][graphemes] of `self`.
-    ///
-    /// [graphemes]: http://www.unicode.org/reports/tr29/#Grapheme_Cluster_Boundaries
-    ///
-    /// If `is_extended` is true, the iterator is over the
-    /// *extended grapheme clusters*;
-    /// otherwise, the iterator is over the *legacy grapheme clusters*.
-    /// [UAX#29](http://www.unicode.org/reports/tr29/#Grapheme_Cluster_Boundaries)
-    /// recommends extended grapheme cluster boundaries for general processing.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// #![feature(unicode, core)]
-    ///
-    /// let gr1 = "a\u{310}e\u{301}o\u{308}\u{332}".graphemes(true).collect::<Vec<&str>>();
-    /// let b: &[_] = &["a\u{310}", "e\u{301}", "o\u{308}\u{332}"];
-    ///
-    /// assert_eq!(&gr1[..], b);
-    ///
-    /// let gr2 = "a\r\nb🇷🇺🇸🇹".graphemes(true).collect::<Vec<&str>>();
-    /// let b: &[_] = &["a", "\r\n", "b", "🇷🇺🇸🇹"];
-    ///
-    /// assert_eq!(&gr2[..], b);
-    /// ```
-    #[deprecated(reason = "use the crates.io `unicode-segmentation` library instead",
-             since = "1.0.0")]
-    #[unstable(feature = "unicode",
-               reason = "this functionality may only be provided by libunicode")]
-    pub fn graphemes(&self, is_extended: bool) -> Graphemes {
-        UnicodeStr::graphemes(self, is_extended)
-    }
-
-    /// Returns an iterator over the grapheme clusters of `self` and their
-    /// byte offsets. See
-    /// `graphemes()` for more information.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// #![feature(unicode, core)]
-    ///
-    /// let gr_inds = "a̐éö̲\r\n".grapheme_indices(true).collect::<Vec<(usize, &str)>>();
-    /// let b: &[_] = &[(0, "a̐"), (3, "é"), (6, "ö̲"), (11, "\r\n")];
-    ///
-    /// assert_eq!(&gr_inds[..], b);
-    /// ```
-    #[deprecated(reason = "use the crates.io `unicode-segmentation` library instead",
-             since = "1.0.0")]
-    #[unstable(feature = "unicode",
-               reason = "this functionality may only be provided by libunicode")]
-    pub fn grapheme_indices(&self, is_extended: bool) -> GraphemeIndices {
-        UnicodeStr::grapheme_indices(self, is_extended)
-    }
-
     /// Returns an iterator of `u16` over the string encoded as UTF-16.
     #[unstable(feature = "str_utf16",
                reason = "this functionality may only be provided by libunicode")]
@@ -1678,33 +1240,6 @@ impl str {
         core_str::StrExt::rmatch_indices(self, pat)
     }
 
-    /// Returns the byte offset of an inner slice relative to an enclosing
-    /// outer slice.
-    ///
-    /// # Panics
-    ///
-    /// Panics if `inner` is not a direct slice contained within self.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// #![feature(subslice_offset)]
-    ///
-    /// let string = "a\nb\nc";
-    /// let lines: Vec<&str> = string.lines().collect();
-    ///
-    /// assert!(string.subslice_offset(lines[0]) == 0); // &"a"
-    /// assert!(string.subslice_offset(lines[1]) == 2); // &"b"
-    /// assert!(string.subslice_offset(lines[2]) == 4); // &"c"
-    /// ```
-    #[unstable(feature = "subslice_offset",
-               reason = "awaiting convention about comparability of arbitrary slices")]
-    #[deprecated(since = "1.3.0",
-                 reason = "replaced with other pattern-related methods")]
-    pub fn subslice_offset(&self, inner: &str) -> usize {
-        core_str::StrExt::subslice_offset(self, inner)
-    }
-
     /// Returns a `&str` with leading and trailing whitespace removed.
     ///
     /// # Examples
diff --git a/src/libcollections/string.rs b/src/libcollections/string.rs
index aa41c57b927..e5886800748 100644
--- a/src/libcollections/string.rs
+++ b/src/libcollections/string.rs
@@ -82,24 +82,6 @@ impl String {
         }
     }
 
-    /// Creates a new string buffer from the given string.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// #![feature(collections)]
-    ///
-    /// let s = String::from("hello");
-    /// assert_eq!(&s[..], "hello");
-    /// ```
-    #[inline]
-    #[unstable(feature = "collections", reason = "use `String::from` instead")]
-    #[deprecated(since = "1.2.0", reason = "use `String::from` instead")]
-    #[cfg(not(test))]
-    pub fn from_str(string: &str) -> String {
-        String { vec: <[_]>::to_vec(string.as_bytes()) }
-    }
-
     // HACK(japaric): with cfg(test) the inherent `[T]::to_vec` method, which is
     // required for this method definition, is not available. Since we don't
     // require this method for testing purposes, I'll just stub it
diff --git a/src/libcollections/vec.rs b/src/libcollections/vec.rs
index 45b0dea493f..957c1a767a4 100644
--- a/src/libcollections/vec.rs
+++ b/src/libcollections/vec.rs
@@ -32,7 +32,8 @@
 //! let v = vec![0; 10]; // ten zeroes
 //! ```
 //!
-//! You can `push` values onto the end of a vector (which will grow the vector as needed):
+//! You can `push` values onto the end of a vector (which will grow the vector
+//! as needed):
 //!
 //! ```
 //! let mut v = vec![1, 2];
@@ -66,7 +67,6 @@ use core::fmt;
 use core::hash::{self, Hash};
 use core::intrinsics::{arith_offset, assume, drop_in_place};
 use core::iter::FromIterator;
-use core::marker::PhantomData;
 use core::mem;
 use core::ops::{Index, IndexMut, Deref};
 use core::ops;
@@ -177,12 +177,13 @@ impl<T> Vec<T> {
 
     /// Constructs a new, empty `Vec<T>` with the specified capacity.
     ///
-    /// The vector will be able to hold exactly `capacity` elements without reallocating. If
-    /// `capacity` is 0, the vector will not allocate.
+    /// The vector will be able to hold exactly `capacity` elements without
+    /// reallocating. If `capacity` is 0, the vector will not allocate.
     ///
-    /// It is important to note that this function does not specify the *length* of the returned
-    /// vector, but only the *capacity*. (For an explanation of the difference between length and
-    /// capacity, see the main `Vec<T>` docs above, 'Capacity and reallocation'.)
+    /// It is important to note that this function does not specify the *length*
+    /// of the returned vector, but only the *capacity*. (For an explanation of
+    /// the difference between length and capacity, see the main `Vec<T>` docs
+    /// above, 'Capacity and reallocation'.)
     ///
     /// # Examples
     ///
@@ -260,24 +261,6 @@ impl<T> Vec<T> {
         }
     }
 
-    /// Creates a vector by copying the elements from a raw pointer.
-    ///
-    /// This function will copy `elts` contiguous elements starting at `ptr`
-    /// into a new allocation owned by the returned `Vec<T>`. The elements of
-    /// the buffer are copied into the vector without cloning, as if
-    /// `ptr::read()` were called on them.
-    #[inline]
-    #[unstable(feature = "vec_from_raw_buf",
-               reason = "may be better expressed via composition")]
-    #[deprecated(since = "1.2.0",
-                 reason = "use slice::from_raw_parts + .to_vec() instead")]
-    pub unsafe fn from_raw_buf(ptr: *const T, elts: usize) -> Vec<T> {
-        let mut dst = Vec::with_capacity(elts);
-        dst.set_len(elts);
-        ptr::copy_nonoverlapping(ptr, dst.as_mut_ptr(), elts);
-        dst
-    }
-
     /// Returns the number of elements the vector can hold without
     /// reallocating.
     ///
@@ -597,7 +580,8 @@ impl<T> Vec<T> {
         }
     }
 
-    /// Removes the last element from a vector and returns it, or `None` if it is empty.
+    /// Removes the last element from a vector and returns it, or `None` if it
+    /// is empty.
     ///
     /// # Examples
     ///
@@ -755,210 +739,6 @@ impl<T> Vec<T> {
     #[stable(feature = "rust1", since = "1.0.0")]
     pub fn is_empty(&self) -> bool { self.len() == 0 }
 
-    /// Converts a `Vec<T>` to a `Vec<U>` where `T` and `U` have the same
-    /// size and in case they are not zero-sized the same minimal alignment.
-    ///
-    /// # Panics
-    ///
-    /// Panics if `T` and `U` have differing sizes or are not zero-sized and
-    /// have differing minimal alignments.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// #![feature(map_in_place)]
-    ///
-    /// let v = vec![0, 1, 2];
-    /// let w = v.map_in_place(|i| i + 3);
-    /// assert_eq!(&w[..], &[3, 4, 5]);
-    ///
-    /// #[derive(PartialEq, Debug)]
-    /// struct Newtype(u8);
-    /// let bytes = vec![0x11, 0x22];
-    /// let newtyped_bytes = bytes.map_in_place(|x| Newtype(x));
-    /// assert_eq!(&newtyped_bytes[..], &[Newtype(0x11), Newtype(0x22)]);
-    /// ```
-    #[unstable(feature = "map_in_place",
-               reason = "API may change to provide stronger guarantees")]
-    #[deprecated(since = "1.3.0",
-                 reason = "unclear that the API is strong enough and did \
-                           not proven itself")]
-    pub fn map_in_place<U, F>(self, mut f: F) -> Vec<U> where F: FnMut(T) -> U {
-        // FIXME: Assert statically that the types `T` and `U` have the same
-        // size.
-        assert!(mem::size_of::<T>() == mem::size_of::<U>());
-
-        let mut vec = self;
-
-        if mem::size_of::<T>() != 0 {
-            // FIXME: Assert statically that the types `T` and `U` have the
-            // same minimal alignment in case they are not zero-sized.
-
-            // These asserts are necessary because the `align_of` of the
-            // types are passed to the allocator by `Vec`.
-            assert!(mem::align_of::<T>() == mem::align_of::<U>());
-
-            // This `as isize` cast is safe, because the size of the elements of the
-            // vector is not 0, and:
-            //
-            // 1) If the size of the elements in the vector is 1, the `isize` may
-            //    overflow, but it has the correct bit pattern so that the
-            //    `.offset()` function will work.
-            //
-            //    Example:
-            //        Address space 0x0-0xF.
-            //        `u8` array at: 0x1.
-            //        Size of `u8` array: 0x8.
-            //        Calculated `offset`: -0x8.
-            //        After `array.offset(offset)`: 0x9.
-            //        (0x1 + 0x8 = 0x1 - 0x8)
-            //
-            // 2) If the size of the elements in the vector is >1, the `usize` ->
-            //    `isize` conversion can't overflow.
-            let offset = vec.len() as isize;
-            let start = vec.as_mut_ptr();
-
-            let mut pv = PartialVecNonZeroSized {
-                vec: vec,
-
-                start_t: start,
-                // This points inside the vector, as the vector has length
-                // `offset`.
-                end_t: unsafe { start.offset(offset) },
-                start_u: start as *mut U,
-                end_u: start as *mut U,
-
-                _marker: PhantomData,
-            };
-            //  start_t
-            //  start_u
-            //  |
-            // +-+-+-+-+-+-+
-            // |T|T|T|...|T|
-            // +-+-+-+-+-+-+
-            //  |           |
-            //  end_u       end_t
-
-            while pv.end_u as *mut T != pv.end_t {
-                unsafe {
-                    //  start_u start_t
-                    //  |       |
-                    // +-+-+-+-+-+-+-+-+-+
-                    // |U|...|U|T|T|...|T|
-                    // +-+-+-+-+-+-+-+-+-+
-                    //          |         |
-                    //          end_u     end_t
-
-                    let t = ptr::read(pv.start_t);
-                    //  start_u start_t
-                    //  |       |
-                    // +-+-+-+-+-+-+-+-+-+
-                    // |U|...|U|X|T|...|T|
-                    // +-+-+-+-+-+-+-+-+-+
-                    //          |         |
-                    //          end_u     end_t
-                    // We must not panic here, one cell is marked as `T`
-                    // although it is not `T`.
-
-                    pv.start_t = pv.start_t.offset(1);
-                    //  start_u   start_t
-                    //  |         |
-                    // +-+-+-+-+-+-+-+-+-+
-                    // |U|...|U|X|T|...|T|
-                    // +-+-+-+-+-+-+-+-+-+
-                    //          |         |
-                    //          end_u     end_t
-                    // We may panic again.
-
-                    // The function given by the user might panic.
-                    let u = f(t);
-
-                    ptr::write(pv.end_u, u);
-                    //  start_u   start_t
-                    //  |         |
-                    // +-+-+-+-+-+-+-+-+-+
-                    // |U|...|U|U|T|...|T|
-                    // +-+-+-+-+-+-+-+-+-+
-                    //          |         |
-                    //          end_u     end_t
-                    // We should not panic here, because that would leak the `U`
-                    // pointed to by `end_u`.
-
-                    pv.end_u = pv.end_u.offset(1);
-                    //  start_u   start_t
-                    //  |         |
-                    // +-+-+-+-+-+-+-+-+-+
-                    // |U|...|U|U|T|...|T|
-                    // +-+-+-+-+-+-+-+-+-+
-                    //            |       |
-                    //            end_u   end_t
-                    // We may panic again.
-                }
-            }
-
-            //  start_u     start_t
-            //  |           |
-            // +-+-+-+-+-+-+
-            // |U|...|U|U|U|
-            // +-+-+-+-+-+-+
-            //              |
-            //              end_t
-            //              end_u
-            // Extract `vec` and prevent the destructor of
-            // `PartialVecNonZeroSized` from running. Note that none of the
-            // function calls can panic, thus no resources can be leaked (as the
-            // `vec` member of `PartialVec` is the only one which holds
-            // allocations -- and it is returned from this function. None of
-            // this can panic.
-            unsafe {
-                let vec_len = pv.vec.len();
-                let vec_cap = pv.vec.capacity();
-                let vec_ptr = pv.vec.as_mut_ptr() as *mut U;
-                mem::forget(pv);
-                Vec::from_raw_parts(vec_ptr, vec_len, vec_cap)
-            }
-        } else {
-            // Put the `Vec` into the `PartialVecZeroSized` structure and
-            // prevent the destructor of the `Vec` from running. Since the
-            // `Vec` contained zero-sized objects, it did not allocate, so we
-            // are not leaking memory here.
-            let mut pv = PartialVecZeroSized::<T,U> {
-                num_t: vec.len(),
-                num_u: 0,
-                marker: PhantomData,
-            };
-            mem::forget(vec);
-
-            while pv.num_t != 0 {
-                unsafe {
-                    // Create a `T` out of thin air and decrement `num_t`. This
-                    // must not panic between these steps, as otherwise a
-                    // destructor of `T` which doesn't exist runs.
-                    let t = mem::uninitialized();
-                    pv.num_t -= 1;
-
-                    // The function given by the user might panic.
-                    let u = f(t);
-
-                    // Forget the `U` and increment `num_u`. This increment
-                    // cannot overflow the `usize` as we only do this for a
-                    // number of times that fits into a `usize` (and start with
-                    // `0`). Again, we should not panic between these steps.
-                    mem::forget(u);
-                    pv.num_u += 1;
-                }
-            }
-            // Create a `Vec` from our `PartialVecZeroSized` and make sure the
-            // destructor of the latter will not run. None of this can panic.
-            let mut result = Vec::new();
-            unsafe {
-                result.set_len(pv.num_u);
-                mem::forget(pv);
-            }
-            result
-        }
-    }
-
     /// Splits the collection into two at the given index.
     ///
     /// Returns a newly allocated `Self`. `self` contains elements `[0, at)`,
@@ -1081,9 +861,9 @@ impl<T: Clone> Vec<T> {
         for i in 0..other.len() {
             let len = self.len();
 
-            // Unsafe code so this can be optimised to a memcpy (or something similarly
-            // fast) when T is Copy. LLVM is easily confused, so any extra operations
-            // during the loop can prevent this optimisation.
+            // Unsafe code so this can be optimised to a memcpy (or something
+            // similarly fast) when T is Copy. LLVM is easily confused, so any
+            // extra operations during the loop can prevent this optimisation.
             unsafe {
                 ptr::write(
                     self.get_unchecked_mut(len),
@@ -1424,7 +1204,7 @@ impl<T> IntoIterator for Vec<T> {
             };
             let buf = ptr::read(&self.buf);
             mem::forget(self);
-            IntoIter { buf: buf, ptr: begin, end: end }
+            IntoIter { _buf: buf, ptr: begin, end: end }
         }
     }
 }
@@ -1608,14 +1388,12 @@ impl<'a, T> FromIterator<T> for Cow<'a, [T]> where T: Clone {
     }
 }
 
-#[allow(deprecated)]
 impl<'a, T: 'a> IntoCow<'a, [T]> for Vec<T> where T: Clone {
     fn into_cow(self) -> Cow<'a, [T]> {
         Cow::Owned(self)
     }
 }
 
-#[allow(deprecated)]
 impl<'a, T> IntoCow<'a, [T]> for &'a [T] where T: Clone {
     fn into_cow(self) -> Cow<'a, [T]> {
         Cow::Borrowed(self)
@@ -1629,7 +1407,7 @@ impl<'a, T> IntoCow<'a, [T]> for &'a [T] where T: Clone {
 /// An iterator that moves out of a vector.
 #[stable(feature = "rust1", since = "1.0.0")]
 pub struct IntoIter<T> {
-    buf: RawVec<T>,
+    _buf: RawVec<T>,
     ptr: *const T,
     end: *const T
 }
@@ -1637,21 +1415,6 @@ pub struct IntoIter<T> {
 unsafe impl<T: Send> Send for IntoIter<T> { }
 unsafe impl<T: Sync> Sync for IntoIter<T> { }
 
-impl<T> IntoIter<T> {
-    #[inline]
-    /// Drops all items that have not yet been moved and returns the empty vector.
-    #[unstable(feature = "iter_to_vec")]
-    #[deprecated(since = "1.3.0", reason = "replaced by drain()")]
-    pub fn into_inner(mut self) -> Vec<T> {
-        unsafe {
-            for _x in self.by_ref() { }
-            let buf = ptr::read(&self.buf);
-            mem::forget(self);
-            Vec { buf: buf, len: 0 }
-        }
-    }
-}
-
 #[stable(feature = "rust1", since = "1.0.0")]
 impl<T> Iterator for IntoIter<T> {
     type Item = T;
@@ -1800,77 +1563,3 @@ impl<'a, T> Drop for Drain<'a, T> {
 
 #[stable(feature = "rust1", since = "1.0.0")]
 impl<'a, T> ExactSizeIterator for Drain<'a, T> {}
-
-////////////////////////////////////////////////////////////////////////////////
-// Partial vec, used for map_in_place
-////////////////////////////////////////////////////////////////////////////////
-
-/// An owned, partially type-converted vector of elements with non-zero size.
-///
-/// `T` and `U` must have the same, non-zero size. They must also have the same
-/// alignment.
-///
-/// When the destructor of this struct runs, all `U`s from `start_u` (incl.) to
-/// `end_u` (excl.) and all `T`s from `start_t` (incl.) to `end_t` (excl.) are
-/// destructed. Additionally the underlying storage of `vec` will be freed.
-struct PartialVecNonZeroSized<T,U> {
-    vec: Vec<T>,
-
-    start_u: *mut U,
-    end_u: *mut U,
-    start_t: *mut T,
-    end_t: *mut T,
-
-    _marker: PhantomData<U>,
-}
-
-/// An owned, partially type-converted vector of zero-sized elements.
-///
-/// When the destructor of this struct runs, all `num_t` `T`s and `num_u` `U`s
-/// are destructed.
-struct PartialVecZeroSized<T,U> {
-    num_t: usize,
-    num_u: usize,
-    marker: PhantomData<::core::cell::Cell<(T,U)>>,
-}
-
-impl<T,U> Drop for PartialVecNonZeroSized<T,U> {
-    fn drop(&mut self) {
-        unsafe {
-            // `vec` hasn't been modified until now. As it has a length
-            // currently, this would run destructors of `T`s which might not be
-            // there. So at first, set `vec`s length to `0`. This must be done
-            // at first to remain memory-safe as the destructors of `U` or `T`
-            // might cause unwinding where `vec`s destructor would be executed.
-            self.vec.set_len(0);
-
-            // We have instances of `U`s and `T`s in `vec`. Destruct them.
-            while self.start_u != self.end_u {
-                let _ = ptr::read(self.start_u); // Run a `U` destructor.
-                self.start_u = self.start_u.offset(1);
-            }
-            while self.start_t != self.end_t {
-                let _ = ptr::read(self.start_t); // Run a `T` destructor.
-                self.start_t = self.start_t.offset(1);
-            }
-            // After this destructor ran, the destructor of `vec` will run,
-            // deallocating the underlying memory.
-        }
-    }
-}
-
-impl<T,U> Drop for PartialVecZeroSized<T,U> {
-    fn drop(&mut self) {
-        unsafe {
-            // Destruct the instances of `T` and `U` this struct owns.
-            while self.num_t != 0 {
-                let _: T = mem::uninitialized(); // Run a `T` destructor.
-                self.num_t -= 1;
-            }
-            while self.num_u != 0 {
-                let _: U = mem::uninitialized(); // Run a `U` destructor.
-                self.num_u -= 1;
-            }
-        }
-    }
-}
diff --git a/src/libcollections/vec_deque.rs b/src/libcollections/vec_deque.rs
index f189d7b80d9..94cce8e1b1c 100644
--- a/src/libcollections/vec_deque.rs
+++ b/src/libcollections/vec_deque.rs
@@ -20,7 +20,7 @@
 
 use core::cmp::Ordering;
 use core::fmt;
-use core::iter::{self, repeat, FromIterator, RandomAccessIterator};
+use core::iter::{self, repeat, FromIterator};
 use core::ops::{Index, IndexMut};
 use core::ptr;
 use core::slice;
@@ -1522,26 +1522,6 @@ impl<'a, T> DoubleEndedIterator for Iter<'a, T> {
 #[stable(feature = "rust1", since = "1.0.0")]
 impl<'a, T> ExactSizeIterator for Iter<'a, T> {}
 
-#[stable(feature = "rust1", since = "1.0.0")]
-#[allow(deprecated)]
-impl<'a, T> RandomAccessIterator for Iter<'a, T> {
-    #[inline]
-    fn indexable(&self) -> usize {
-        let (len, _) = self.size_hint();
-        len
-    }
-
-    #[inline]
-    fn idx(&mut self, j: usize) -> Option<&'a T> {
-        if j >= self.indexable() {
-            None
-        } else {
-            let idx = wrap_index(self.tail.wrapping_add(j), self.ring.len());
-            unsafe { Some(self.ring.get_unchecked(idx)) }
-        }
-    }
-}
-
 /// `VecDeque` mutable iterator.
 #[stable(feature = "rust1", since = "1.0.0")]
 pub struct IterMut<'a, T:'a> {
diff --git a/src/libcollections/vec_map.rs b/src/libcollections/vec_map.rs
deleted file mode 100644
index 93f8db23e56..00000000000
--- a/src/libcollections/vec_map.rs
+++ /dev/null
@@ -1,1083 +0,0 @@
-// Copyright 2012-2014 The Rust Project Developers. See the COPYRIGHT
-// file at the top-level directory of this distribution and at
-// http://rust-lang.org/COPYRIGHT.
-//
-// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
-// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
-// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
-// option. This file may not be copied, modified, or distributed
-// except according to those terms.
-
-//! A simple map based on a vector for small integer keys. Space requirements
-//! are O(highest integer key).
-
-#![deprecated(reason = "VecMap moved to crates.io as vec_map",
-              since = "1.3.0")]
-#![unstable(feature = "vecmap", reason = "deprecated")]
-#![allow(deprecated)]
-
-#![allow(missing_docs)]
-
-use self::Entry::*;
-
-use core::cmp::{max, Ordering};
-use core::fmt;
-use core::hash::{Hash, Hasher};
-use core::iter::{Enumerate, FilterMap, Map, FromIterator};
-use core::iter;
-use core::mem::{replace, swap};
-use core::ops::{Index, IndexMut};
-
-use {vec, slice};
-use vec::Vec;
-
-/// A map optimized for small integer keys.
-///
-/// # Examples
-///
-/// ```
-/// #![feature(vecmap)]
-///
-/// use std::collections::VecMap;
-///
-/// let mut months = VecMap::new();
-/// months.insert(1, "Jan");
-/// months.insert(2, "Feb");
-/// months.insert(3, "Mar");
-///
-/// if !months.contains_key(&12) {
-///     println!("The end is near!");
-/// }
-///
-/// assert_eq!(months.get(&1), Some(&"Jan"));
-///
-/// if let Some(value) = months.get_mut(&3) {
-///     *value = "Venus";
-/// }
-///
-/// assert_eq!(months.get(&3), Some(&"Venus"));
-///
-/// // Print out all months
-/// for (key, value) in &months {
-///     println!("month {} is {}", key, value);
-/// }
-///
-/// months.clear();
-/// assert!(months.is_empty());
-/// ```
-pub struct VecMap<V> {
-    v: Vec<Option<V>>,
-}
-
-/// A view into a single entry in a map, which may either be vacant or occupied.
-
-#[stable(feature = "rust1", since = "1.0.0")]
-pub enum Entry<'a, V:'a> {
-    /// A vacant Entry
-    #[stable(feature = "rust1", since = "1.0.0")]
-    Vacant(VacantEntry<'a, V>),
-
-    /// An occupied Entry
-    #[stable(feature = "rust1", since = "1.0.0")]
-    Occupied(OccupiedEntry<'a, V>),
-}
-
-/// A vacant Entry.
-
-#[stable(feature = "rust1", since = "1.0.0")]
-pub struct VacantEntry<'a, V:'a> {
-    map: &'a mut VecMap<V>,
-    index: usize,
-}
-
-/// An occupied Entry.
-#[stable(feature = "rust1", since = "1.0.0")]
-pub struct OccupiedEntry<'a, V:'a> {
-    map: &'a mut VecMap<V>,
-    index: usize,
-}
-
-#[stable(feature = "rust1", since = "1.0.0")]
-impl<V> Default for VecMap<V> {
-    #[stable(feature = "rust1", since = "1.0.0")]
-    #[inline]
-    fn default() -> VecMap<V> { VecMap::new() }
-}
-
-#[stable(feature = "rust1", since = "1.0.0")]
-impl<V:Clone> Clone for VecMap<V> {
-    #[inline]
-    fn clone(&self) -> VecMap<V> {
-        VecMap { v: self.v.clone() }
-    }
-
-    #[inline]
-    fn clone_from(&mut self, source: &VecMap<V>) {
-        self.v.clone_from(&source.v);
-    }
-}
-
-#[stable(feature = "rust1", since = "1.0.0")]
-impl<V: Hash> Hash for VecMap<V> {
-    fn hash<H: Hasher>(&self, state: &mut H) {
-        // In order to not traverse the `VecMap` twice, count the elements
-        // during iteration.
-        let mut count: usize = 0;
-        for elt in self {
-            elt.hash(state);
-            count += 1;
-        }
-        count.hash(state);
-    }
-}
-
-impl<V> VecMap<V> {
-    /// Creates an empty `VecMap`.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// #![feature(vecmap)]
-    ///
-    /// use std::collections::VecMap;
-    /// let mut map: VecMap<&str> = VecMap::new();
-    /// ```
-    #[stable(feature = "rust1", since = "1.0.0")]
-    pub fn new() -> VecMap<V> { VecMap { v: vec![] } }
-
-    /// Creates an empty `VecMap` with space for at least `capacity`
-    /// elements before resizing.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// #![feature(vecmap)]
-    ///
-    /// use std::collections::VecMap;
-    /// let mut map: VecMap<&str> = VecMap::with_capacity(10);
-    /// ```
-    #[stable(feature = "rust1", since = "1.0.0")]
-    pub fn with_capacity(capacity: usize) -> VecMap<V> {
-        VecMap { v: Vec::with_capacity(capacity) }
-    }
-
-    /// Returns the number of elements the `VecMap` can hold without
-    /// reallocating.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// #![feature(vecmap)]
-    ///
-    /// use std::collections::VecMap;
-    /// let map: VecMap<String> = VecMap::with_capacity(10);
-    /// assert!(map.capacity() >= 10);
-    /// ```
-    #[inline]
-    #[stable(feature = "rust1", since = "1.0.0")]
-    pub fn capacity(&self) -> usize {
-        self.v.capacity()
-    }
-
-    /// Reserves capacity for the given `VecMap` to contain `len` distinct keys.
-    /// In the case of `VecMap` this means reallocations will not occur as long
-    /// as all inserted keys are less than `len`.
-    ///
-    /// The collection may reserve more space to avoid frequent reallocations.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// #![feature(vecmap)]
-    ///
-    /// use std::collections::VecMap;
-    /// let mut map: VecMap<&str> = VecMap::new();
-    /// map.reserve_len(10);
-    /// assert!(map.capacity() >= 10);
-    /// ```
-    #[stable(feature = "rust1", since = "1.0.0")]
-    pub fn reserve_len(&mut self, len: usize) {
-        let cur_len = self.v.len();
-        if len >= cur_len {
-            self.v.reserve(len - cur_len);
-        }
-    }
-
-    /// Reserves the minimum capacity for the given `VecMap` to contain `len` distinct keys.
-    /// In the case of `VecMap` this means reallocations will not occur as long as all inserted
-    /// keys are less than `len`.
-    ///
-    /// Note that the allocator may give the collection more space than it requests.
-    /// Therefore capacity cannot be relied upon to be precisely minimal.  Prefer
-    /// `reserve_len` if future insertions are expected.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// #![feature(vecmap)]
-    ///
-    /// use std::collections::VecMap;
-    /// let mut map: VecMap<&str> = VecMap::new();
-    /// map.reserve_len_exact(10);
-    /// assert!(map.capacity() >= 10);
-    /// ```
-    #[stable(feature = "rust1", since = "1.0.0")]
-    pub fn reserve_len_exact(&mut self, len: usize) {
-        let cur_len = self.v.len();
-        if len >= cur_len {
-            self.v.reserve_exact(len - cur_len);
-        }
-    }
-
-    /// Returns an iterator visiting all keys in ascending order of the keys.
-    /// The iterator's element type is `usize`.
-    #[stable(feature = "rust1", since = "1.0.0")]
-    pub fn keys<'r>(&'r self) -> Keys<'r, V> {
-        fn first<A, B>((a, _): (A, B)) -> A { a }
-        let first: fn((usize, &'r V)) -> usize = first; // coerce to fn pointer
-
-        Keys { iter: self.iter().map(first) }
-    }
-
-    /// Returns an iterator visiting all values in ascending order of the keys.
-    /// The iterator's element type is `&'r V`.
-    #[stable(feature = "rust1", since = "1.0.0")]
-    pub fn values<'r>(&'r self) -> Values<'r, V> {
-        fn second<A, B>((_, b): (A, B)) -> B { b }
-        let second: fn((usize, &'r V)) -> &'r V = second; // coerce to fn pointer
-
-        Values { iter: self.iter().map(second) }
-    }
-
-    /// Returns an iterator visiting all key-value pairs in ascending order of the keys.
-    /// The iterator's element type is `(usize, &'r V)`.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// #![feature(vecmap)]
-    ///
-    /// use std::collections::VecMap;
-    ///
-    /// let mut map = VecMap::new();
-    /// map.insert(1, "a");
-    /// map.insert(3, "c");
-    /// map.insert(2, "b");
-    ///
-    /// // Print `1: a` then `2: b` then `3: c`
-    /// for (key, value) in map.iter() {
-    ///     println!("{}: {}", key, value);
-    /// }
-    /// ```
-    #[stable(feature = "rust1", since = "1.0.0")]
-    pub fn iter<'r>(&'r self) -> Iter<'r, V> {
-        Iter {
-            front: 0,
-            back: self.v.len(),
-            iter: self.v.iter()
-        }
-    }
-
-    /// Returns an iterator visiting all key-value pairs in ascending order of the keys,
-    /// with mutable references to the values.
-    /// The iterator's element type is `(usize, &'r mut V)`.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// #![feature(vecmap)]
-    ///
-    /// use std::collections::VecMap;
-    ///
-    /// let mut map = VecMap::new();
-    /// map.insert(1, "a");
-    /// map.insert(2, "b");
-    /// map.insert(3, "c");
-    ///
-    /// for (key, value) in map.iter_mut() {
-    ///     *value = "x";
-    /// }
-    ///
-    /// for (key, value) in &map {
-    ///     assert_eq!(value, &"x");
-    /// }
-    /// ```
-    #[stable(feature = "rust1", since = "1.0.0")]
-    pub fn iter_mut<'r>(&'r mut self) -> IterMut<'r, V> {
-        IterMut {
-            front: 0,
-            back: self.v.len(),
-            iter: self.v.iter_mut()
-        }
-    }
-
-    /// Moves all elements from `other` into the map while overwriting existing keys.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// #![feature(vecmap, append)]
-    ///
-    /// use std::collections::VecMap;
-    ///
-    /// let mut a = VecMap::new();
-    /// a.insert(1, "a");
-    /// a.insert(2, "b");
-    ///
-    /// let mut b = VecMap::new();
-    /// b.insert(3, "c");
-    /// b.insert(4, "d");
-    ///
-    /// a.append(&mut b);
-    ///
-    /// assert_eq!(a.len(), 4);
-    /// assert_eq!(b.len(), 0);
-    /// assert_eq!(a[1], "a");
-    /// assert_eq!(a[2], "b");
-    /// assert_eq!(a[3], "c");
-    /// assert_eq!(a[4], "d");
-    /// ```
-    #[unstable(feature = "append",
-               reason = "recently added as part of collections reform 2")]
-    pub fn append(&mut self, other: &mut Self) {
-        self.extend(other.drain());
-    }
-
-    /// Splits the collection into two at the given key.
-    ///
-    /// Returns a newly allocated `Self`. `self` contains elements `[0, at)`,
-    /// and the returned `Self` contains elements `[at, max_key)`.
-    ///
-    /// Note that the capacity of `self` does not change.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// #![feature(vecmap, split_off)]
-    ///
-    /// use std::collections::VecMap;
-    ///
-    /// let mut a = VecMap::new();
-    /// a.insert(1, "a");
-    /// a.insert(2, "b");
-    /// a.insert(3, "c");
-    /// a.insert(4, "d");
-    ///
-    /// let b = a.split_off(3);
-    ///
-    /// assert_eq!(a[1], "a");
-    /// assert_eq!(a[2], "b");
-    ///
-    /// assert_eq!(b[3], "c");
-    /// assert_eq!(b[4], "d");
-    /// ```
-    #[unstable(feature = "split_off",
-               reason = "recently added as part of collections reform 2")]
-    pub fn split_off(&mut self, at: usize) -> Self {
-        let mut other = VecMap::new();
-
-        if at == 0 {
-            // Move all elements to other
-            swap(self, &mut other);
-            return other
-        } else if at >= self.v.len() {
-            // No elements to copy
-            return other;
-        }
-
-        // Look up the index of the first non-None item
-        let first_index = self.v.iter().position(|el| el.is_some());
-        let start_index = match first_index {
-            Some(index) => max(at, index),
-            None => {
-                // self has no elements
-                return other;
-            }
-        };
-
-        // Fill the new VecMap with `None`s until `start_index`
-        other.v.extend((0..start_index).map(|_| None));
-
-        // Move elements beginning with `start_index` from `self` into `other`
-        other.v.extend(self.v[start_index..].iter_mut().map(|el| el.take()));
-
-        other
-    }
-
-    /// Returns an iterator visiting all key-value pairs in ascending order of
-    /// the keys, emptying (but not consuming) the original `VecMap`.
-    /// The iterator's element type is `(usize, &'r V)`. Keeps the allocated memory for reuse.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// #![feature(vecmap, drain)]
-    ///
-    /// use std::collections::VecMap;
-    ///
-    /// let mut map = VecMap::new();
-    /// map.insert(1, "a");
-    /// map.insert(3, "c");
-    /// map.insert(2, "b");
-    ///
-    /// let vec: Vec<(usize, &str)> = map.drain().collect();
-    ///
-    /// assert_eq!(vec, [(1, "a"), (2, "b"), (3, "c")]);
-    /// ```
-    #[unstable(feature = "drain",
-               reason = "matches collection reform specification, waiting for dust to settle")]
-    pub fn drain<'a>(&'a mut self) -> Drain<'a, V> {
-        fn filter<A>((i, v): (usize, Option<A>)) -> Option<(usize, A)> {
-            v.map(|v| (i, v))
-        }
-        let filter: fn((usize, Option<V>)) -> Option<(usize, V)> = filter; // coerce to fn ptr
-
-        Drain { iter: self.v.drain(..).enumerate().filter_map(filter) }
-    }
-
-    /// Returns the number of elements in the map.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// #![feature(vecmap)]
-    ///
-    /// use std::collections::VecMap;
-    ///
-    /// let mut a = VecMap::new();
-    /// assert_eq!(a.len(), 0);
-    /// a.insert(1, "a");
-    /// assert_eq!(a.len(), 1);
-    /// ```
-    #[stable(feature = "rust1", since = "1.0.0")]
-    pub fn len(&self) -> usize {
-        self.v.iter().filter(|elt| elt.is_some()).count()
-    }
-
-    /// Returns true if the map contains no elements.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// #![feature(vecmap)]
-    ///
-    /// use std::collections::VecMap;
-    ///
-    /// let mut a = VecMap::new();
-    /// assert!(a.is_empty());
-    /// a.insert(1, "a");
-    /// assert!(!a.is_empty());
-    /// ```
-    #[stable(feature = "rust1", since = "1.0.0")]
-    pub fn is_empty(&self) -> bool {
-        self.v.iter().all(|elt| elt.is_none())
-    }
-
-    /// Clears the map, removing all key-value pairs.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// #![feature(vecmap)]
-    ///
-    /// use std::collections::VecMap;
-    ///
-    /// let mut a = VecMap::new();
-    /// a.insert(1, "a");
-    /// a.clear();
-    /// assert!(a.is_empty());
-    /// ```
-    #[stable(feature = "rust1", since = "1.0.0")]
-    pub fn clear(&mut self) { self.v.clear() }
-
-    /// Returns a reference to the value corresponding to the key.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// #![feature(vecmap)]
-    ///
-    /// use std::collections::VecMap;
-    ///
-    /// let mut map = VecMap::new();
-    /// map.insert(1, "a");
-    /// assert_eq!(map.get(&1), Some(&"a"));
-    /// assert_eq!(map.get(&2), None);
-    /// ```
-    #[stable(feature = "rust1", since = "1.0.0")]
-    pub fn get(&self, key: &usize) -> Option<&V> {
-        if *key < self.v.len() {
-            match self.v[*key] {
-              Some(ref value) => Some(value),
-              None => None
-            }
-        } else {
-            None
-        }
-    }
-
-    /// Returns true if the map contains a value for the specified key.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// #![feature(vecmap)]
-    ///
-    /// use std::collections::VecMap;
-    ///
-    /// let mut map = VecMap::new();
-    /// map.insert(1, "a");
-    /// assert_eq!(map.contains_key(&1), true);
-    /// assert_eq!(map.contains_key(&2), false);
-    /// ```
-    #[inline]
-    #[stable(feature = "rust1", since = "1.0.0")]
-    pub fn contains_key(&self, key: &usize) -> bool {
-        self.get(key).is_some()
-    }
-
-    /// Returns a mutable reference to the value corresponding to the key.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// #![feature(vecmap)]
-    ///
-    /// use std::collections::VecMap;
-    ///
-    /// let mut map = VecMap::new();
-    /// map.insert(1, "a");
-    /// if let Some(x) = map.get_mut(&1) {
-    ///     *x = "b";
-    /// }
-    /// assert_eq!(map[1], "b");
-    /// ```
-    #[stable(feature = "rust1", since = "1.0.0")]
-    pub fn get_mut(&mut self, key: &usize) -> Option<&mut V> {
-        if *key < self.v.len() {
-            match *(&mut self.v[*key]) {
-              Some(ref mut value) => Some(value),
-              None => None
-            }
-        } else {
-            None
-        }
-    }
-
-    /// Inserts a key-value pair into the map. If the key already had a value
-    /// present in the map, that value is returned. Otherwise, `None` is returned.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// #![feature(vecmap)]
-    ///
-    /// use std::collections::VecMap;
-    ///
-    /// let mut map = VecMap::new();
-    /// assert_eq!(map.insert(37, "a"), None);
-    /// assert_eq!(map.is_empty(), false);
-    ///
-    /// map.insert(37, "b");
-    /// assert_eq!(map.insert(37, "c"), Some("b"));
-    /// assert_eq!(map[37], "c");
-    /// ```
-    #[stable(feature = "rust1", since = "1.0.0")]
-    pub fn insert(&mut self, key: usize, value: V) -> Option<V> {
-        let len = self.v.len();
-        if len <= key {
-            self.v.extend((0..key - len + 1).map(|_| None));
-        }
-        replace(&mut self.v[key], Some(value))
-    }
-
-    /// Removes a key from the map, returning the value at the key if the key
-    /// was previously in the map.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// #![feature(vecmap)]
-    ///
-    /// use std::collections::VecMap;
-    ///
-    /// let mut map = VecMap::new();
-    /// map.insert(1, "a");
-    /// assert_eq!(map.remove(&1), Some("a"));
-    /// assert_eq!(map.remove(&1), None);
-    /// ```
-    #[stable(feature = "rust1", since = "1.0.0")]
-    pub fn remove(&mut self, key: &usize) -> Option<V> {
-        if *key >= self.v.len() {
-            return None;
-        }
-        let result = &mut self.v[*key];
-        result.take()
-    }
-
-    /// Gets the given key's corresponding entry in the map for in-place manipulation.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// #![feature(vecmap, entry)]
-    ///
-    /// use std::collections::VecMap;
-    ///
-    /// let mut count: VecMap<u32> = VecMap::new();
-    ///
-    /// // count the number of occurrences of numbers in the vec
-    /// for x in vec![1, 2, 1, 2, 3, 4, 1, 2, 4] {
-    ///     *count.entry(x).or_insert(0) += 1;
-    /// }
-    ///
-    /// assert_eq!(count[1], 3);
-    /// ```
-    #[stable(feature = "rust1", since = "1.0.0")]
-    pub fn entry(&mut self, key: usize) -> Entry<V> {
-        // FIXME(Gankro): this is basically the dumbest implementation of
-        // entry possible, because weird non-lexical borrows issues make it
-        // completely insane to do any other way. That said, Entry is a border-line
-        // useless construct on VecMap, so it's hardly a big loss.
-        if self.contains_key(&key) {
-            Occupied(OccupiedEntry {
-                map: self,
-                index: key,
-            })
-        } else {
-            Vacant(VacantEntry {
-                map: self,
-                index: key,
-            })
-        }
-    }
-}
-
-
-impl<'a, V> Entry<'a, V> {
-    #[unstable(feature = "entry",
-               reason = "will soon be replaced by or_insert")]
-    #[deprecated(since = "1.0",
-                reason = "replaced with more ergonomic `or_insert` and `or_insert_with`")]
-    /// Returns a mutable reference to the entry if occupied, or the VacantEntry if vacant
-    pub fn get(self) -> Result<&'a mut V, VacantEntry<'a, V>> {
-        match self {
-            Occupied(entry) => Ok(entry.into_mut()),
-            Vacant(entry) => Err(entry),
-        }
-    }
-
-    #[stable(feature = "vecmap_entry", since = "1.2.0")]
-    /// Ensures a value is in the entry by inserting the default if empty, and
-    /// returns a mutable reference to the value in the entry.
-    pub fn or_insert(self, default: V) -> &'a mut V {
-        match self {
-            Occupied(entry) => entry.into_mut(),
-            Vacant(entry) => entry.insert(default),
-        }
-    }
-
-    #[stable(feature = "vecmap_entry", since = "1.2.0")]
-    /// Ensures a value is in the entry by inserting the result of the default
-    /// function if empty, and returns a mutable reference to the value in the
-    /// entry.
-    pub fn or_insert_with<F: FnOnce() -> V>(self, default: F) -> &'a mut V {
-        match self {
-            Occupied(entry) => entry.into_mut(),
-            Vacant(entry) => entry.insert(default()),
-        }
-    }
-}
-
-impl<'a, V> VacantEntry<'a, V> {
-    /// Sets the value of the entry with the VacantEntry's key,
-    /// and returns a mutable reference to it.
-    #[stable(feature = "rust1", since = "1.0.0")]
-    pub fn insert(self, value: V) -> &'a mut V {
-        let index = self.index;
-        self.map.insert(index, value);
-        &mut self.map[index]
-    }
-}
-
-impl<'a, V> OccupiedEntry<'a, V> {
-    /// Gets a reference to the value in the entry.
-    #[stable(feature = "rust1", since = "1.0.0")]
-    pub fn get(&self) -> &V {
-        let index = self.index;
-        &self.map[index]
-    }
-
-    /// Gets a mutable reference to the value in the entry.
-    #[stable(feature = "rust1", since = "1.0.0")]
-    pub fn get_mut(&mut self) -> &mut V {
-        let index = self.index;
-        &mut self.map[index]
-    }
-
-    /// Converts the entry into a mutable reference to its value.
-    #[stable(feature = "rust1", since = "1.0.0")]
-    pub fn into_mut(self) -> &'a mut V {
-        let index = self.index;
-        &mut self.map[index]
-    }
-
-    /// Sets the value of the entry with the OccupiedEntry's key,
-    /// and returns the entry's old value.
-    #[stable(feature = "rust1", since = "1.0.0")]
-    pub fn insert(&mut self, value: V) -> V {
-        let index = self.index;
-        self.map.insert(index, value).unwrap()
-    }
-
-    /// Takes the value of the entry out of the map, and returns it.
-    #[stable(feature = "rust1", since = "1.0.0")]
-    pub fn remove(self) -> V {
-        let index = self.index;
-        self.map.remove(&index).unwrap()
-    }
-}
-
-#[stable(feature = "rust1", since = "1.0.0")]
-impl<V: PartialEq> PartialEq for VecMap<V> {
-    fn eq(&self, other: &VecMap<V>) -> bool {
-        iter::order::eq(self.iter(), other.iter())
-    }
-}
-
-#[stable(feature = "rust1", since = "1.0.0")]
-impl<V: Eq> Eq for VecMap<V> {}
-
-#[stable(feature = "rust1", since = "1.0.0")]
-impl<V: PartialOrd> PartialOrd for VecMap<V> {
-    #[inline]
-    fn partial_cmp(&self, other: &VecMap<V>) -> Option<Ordering> {
-        iter::order::partial_cmp(self.iter(), other.iter())
-    }
-}
-
-#[stable(feature = "rust1", since = "1.0.0")]
-impl<V: Ord> Ord for VecMap<V> {
-    #[inline]
-    fn cmp(&self, other: &VecMap<V>) -> Ordering {
-        iter::order::cmp(self.iter(), other.iter())
-    }
-}
-
-#[stable(feature = "rust1", since = "1.0.0")]
-impl<V: fmt::Debug> fmt::Debug for VecMap<V> {
-    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
-        try!(write!(f, "{{"));
-
-        for (i, (k, v)) in self.iter().enumerate() {
-            if i != 0 { try!(write!(f, ", ")); }
-            try!(write!(f, "{}: {:?}", k, *v));
-        }
-
-        write!(f, "}}")
-    }
-}
-
-#[stable(feature = "rust1", since = "1.0.0")]
-impl<V> FromIterator<(usize, V)> for VecMap<V> {
-    fn from_iter<I: IntoIterator<Item=(usize, V)>>(iter: I) -> VecMap<V> {
-        let mut map = VecMap::new();
-        map.extend(iter);
-        map
-    }
-}
-
-#[stable(feature = "rust1", since = "1.0.0")]
-impl<T> IntoIterator for VecMap<T> {
-    type Item = (usize, T);
-    type IntoIter = IntoIter<T>;
-
-    /// Returns an iterator visiting all key-value pairs in ascending order of
-    /// the keys, consuming the original `VecMap`.
-    /// The iterator's element type is `(usize, &'r V)`.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// #![feature(vecmap)]
-    ///
-    /// use std::collections::VecMap;
-    ///
-    /// let mut map = VecMap::new();
-    /// map.insert(1, "a");
-    /// map.insert(3, "c");
-    /// map.insert(2, "b");
-    ///
-    /// let vec: Vec<(usize, &str)> = map.into_iter().collect();
-    ///
-    /// assert_eq!(vec, [(1, "a"), (2, "b"), (3, "c")]);
-    /// ```
-    fn into_iter(self) -> IntoIter<T> {
-        fn filter<A>((i, v): (usize, Option<A>)) -> Option<(usize, A)> {
-            v.map(|v| (i, v))
-        }
-        let filter: fn((usize, Option<T>)) -> Option<(usize, T)> = filter; // coerce to fn ptr
-
-        IntoIter { iter: self.v.into_iter().enumerate().filter_map(filter) }
-    }
-}
-
-#[stable(feature = "rust1", since = "1.0.0")]
-impl<'a, T> IntoIterator for &'a VecMap<T> {
-    type Item = (usize, &'a T);
-    type IntoIter = Iter<'a, T>;
-
-    fn into_iter(self) -> Iter<'a, T> {
-        self.iter()
-    }
-}
-
-#[stable(feature = "rust1", since = "1.0.0")]
-impl<'a, T> IntoIterator for &'a mut VecMap<T> {
-    type Item = (usize, &'a mut T);
-    type IntoIter = IterMut<'a, T>;
-
-    fn into_iter(mut self) -> IterMut<'a, T> {
-        self.iter_mut()
-    }
-}
-
-#[stable(feature = "rust1", since = "1.0.0")]
-impl<V> Extend<(usize, V)> for VecMap<V> {
-    fn extend<I: IntoIterator<Item=(usize, V)>>(&mut self, iter: I) {
-        for (k, v) in iter {
-            self.insert(k, v);
-        }
-    }
-}
-
-#[stable(feature = "extend_ref", since = "1.2.0")]
-impl<'a, V: Copy> Extend<(usize, &'a V)> for VecMap<V> {
-    fn extend<I: IntoIterator<Item=(usize, &'a V)>>(&mut self, iter: I) {
-        self.extend(iter.into_iter().map(|(key, &value)| (key, value)));
-    }
-}
-
-impl<V> Index<usize> for VecMap<V> {
-    type Output = V;
-
-    #[inline]
-    fn index<'a>(&'a self, i: usize) -> &'a V {
-        self.get(&i).expect("key not present")
-    }
-}
-
-impl<'a,V> Index<&'a usize> for VecMap<V> {
-    type Output = V;
-
-    #[inline]
-    fn index(&self, i: &usize) -> &V {
-        self.get(i).expect("key not present")
-    }
-}
-
-#[stable(feature = "rust1", since = "1.0.0")]
-impl<V> IndexMut<usize> for VecMap<V> {
-    #[inline]
-    fn index_mut(&mut self, i: usize) -> &mut V {
-        self.get_mut(&i).expect("key not present")
-    }
-}
-
-#[stable(feature = "rust1", since = "1.0.0")]
-impl<'a, V> IndexMut<&'a usize> for VecMap<V> {
-    #[inline]
-    fn index_mut(&mut self, i: &usize) -> &mut V {
-        self.get_mut(i).expect("key not present")
-    }
-}
-
-macro_rules! iterator {
-    (impl $name:ident -> $elem:ty, $($getter:ident),+) => {
-        #[stable(feature = "rust1", since = "1.0.0")]
-        impl<'a, V> Iterator for $name<'a, V> {
-            type Item = $elem;
-
-            #[inline]
-            fn next(&mut self) -> Option<$elem> {
-                while self.front < self.back {
-                    match self.iter.next() {
-                        Some(elem) => {
-                            match elem$(. $getter ())+ {
-                                Some(x) => {
-                                    let index = self.front;
-                                    self.front += 1;
-                                    return Some((index, x));
-                                },
-                                None => {},
-                            }
-                        }
-                        _ => ()
-                    }
-                    self.front += 1;
-                }
-                None
-            }
-
-            #[inline]
-            fn size_hint(&self) -> (usize, Option<usize>) {
-                (0, Some(self.back - self.front))
-            }
-        }
-    }
-}
-
-macro_rules! double_ended_iterator {
-    (impl $name:ident -> $elem:ty, $($getter:ident),+) => {
-        #[stable(feature = "rust1", since = "1.0.0")]
-        impl<'a, V> DoubleEndedIterator for $name<'a, V> {
-            #[inline]
-            fn next_back(&mut self) -> Option<$elem> {
-                while self.front < self.back {
-                    match self.iter.next_back() {
-                        Some(elem) => {
-                            match elem$(. $getter ())+ {
-                                Some(x) => {
-                                    self.back -= 1;
-                                    return Some((self.back, x));
-                                },
-                                None => {},
-                            }
-                        }
-                        _ => ()
-                    }
-                    self.back -= 1;
-                }
-                None
-            }
-        }
-    }
-}
-
-/// An iterator over the key-value pairs of a map.
-#[stable(feature = "rust1", since = "1.0.0")]
-pub struct Iter<'a, V:'a> {
-    front: usize,
-    back: usize,
-    iter: slice::Iter<'a, Option<V>>
-}
-
-// FIXME(#19839) Remove in favor of `#[derive(Clone)]`
-impl<'a, V> Clone for Iter<'a, V> {
-    fn clone(&self) -> Iter<'a, V> {
-        Iter {
-            front: self.front,
-            back: self.back,
-            iter: self.iter.clone()
-        }
-    }
-}
-
-iterator! { impl Iter -> (usize, &'a V), as_ref }
-double_ended_iterator! { impl Iter -> (usize, &'a V), as_ref }
-
-/// An iterator over the key-value pairs of a map, with the
-/// values being mutable.
-#[stable(feature = "rust1", since = "1.0.0")]
-pub struct IterMut<'a, V:'a> {
-    front: usize,
-    back: usize,
-    iter: slice::IterMut<'a, Option<V>>
-}
-
-iterator! { impl IterMut -> (usize, &'a mut V), as_mut }
-double_ended_iterator! { impl IterMut -> (usize, &'a mut V), as_mut }
-
-/// An iterator over the keys of a map.
-#[stable(feature = "rust1", since = "1.0.0")]
-pub struct Keys<'a, V: 'a> {
-    iter: Map<Iter<'a, V>, fn((usize, &'a V)) -> usize>
-}
-
-// FIXME(#19839) Remove in favor of `#[derive(Clone)]`
-impl<'a, V> Clone for Keys<'a, V> {
-    fn clone(&self) -> Keys<'a, V> {
-        Keys {
-            iter: self.iter.clone()
-        }
-    }
-}
-
-/// An iterator over the values of a map.
-#[stable(feature = "rust1", since = "1.0.0")]
-pub struct Values<'a, V: 'a> {
-    iter: Map<Iter<'a, V>, fn((usize, &'a V)) -> &'a V>
-}
-
-// FIXME(#19839) Remove in favor of `#[derive(Clone)]`
-impl<'a, V> Clone for Values<'a, V> {
-    fn clone(&self) -> Values<'a, V> {
-        Values {
-            iter: self.iter.clone()
-        }
-    }
-}
-
-/// A consuming iterator over the key-value pairs of a map.
-#[stable(feature = "rust1", since = "1.0.0")]
-pub struct IntoIter<V> {
-    iter: FilterMap<
-    Enumerate<vec::IntoIter<Option<V>>>,
-    fn((usize, Option<V>)) -> Option<(usize, V)>>
-}
-
-#[unstable(feature = "drain")]
-pub struct Drain<'a, V:'a> {
-    iter: FilterMap<
-    Enumerate<vec::Drain<'a, Option<V>>>,
-    fn((usize, Option<V>)) -> Option<(usize, V)>>
-}
-
-#[unstable(feature = "drain")]
-impl<'a, V> Iterator for Drain<'a, V> {
-    type Item = (usize, V);
-
-    fn next(&mut self) -> Option<(usize, V)> { self.iter.next() }
-    fn size_hint(&self) -> (usize, Option<usize>) { self.iter.size_hint() }
-}
-
-#[unstable(feature = "drain")]
-impl<'a, V> DoubleEndedIterator for Drain<'a, V> {
-    fn next_back(&mut self) -> Option<(usize, V)> { self.iter.next_back() }
-}
-
-#[stable(feature = "rust1", since = "1.0.0")]
-impl<'a, V> Iterator for Keys<'a, V> {
-    type Item = usize;
-
-    fn next(&mut self) -> Option<usize> { self.iter.next() }
-    fn size_hint(&self) -> (usize, Option<usize>) { self.iter.size_hint() }
-}
-#[stable(feature = "rust1", since = "1.0.0")]
-impl<'a, V> DoubleEndedIterator for Keys<'a, V> {
-    fn next_back(&mut self) -> Option<usize> { self.iter.next_back() }
-}
-
-#[stable(feature = "rust1", since = "1.0.0")]
-impl<'a, V> Iterator for Values<'a, V> {
-    type Item = &'a V;
-
-    fn next(&mut self) -> Option<(&'a V)> { self.iter.next() }
-    fn size_hint(&self) -> (usize, Option<usize>) { self.iter.size_hint() }
-}
-#[stable(feature = "rust1", since = "1.0.0")]
-impl<'a, V> DoubleEndedIterator for Values<'a, V> {
-    fn next_back(&mut self) -> Option<(&'a V)> { self.iter.next_back() }
-}
-
-#[stable(feature = "rust1", since = "1.0.0")]
-impl<V> Iterator for IntoIter<V> {
-    type Item = (usize, V);
-
-    fn next(&mut self) -> Option<(usize, V)> { self.iter.next() }
-    fn size_hint(&self) -> (usize, Option<usize>) { self.iter.size_hint() }
-}
-#[stable(feature = "rust1", since = "1.0.0")]
-impl<V> DoubleEndedIterator for IntoIter<V> {
-    fn next_back(&mut self) -> Option<(usize, V)> { self.iter.next_back() }
-}
diff --git a/src/libcollectionstest/bit/mod.rs b/src/libcollectionstest/bit/mod.rs
deleted file mode 100644
index 8e06524f2e5..00000000000
--- a/src/libcollectionstest/bit/mod.rs
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright 2012-2014 The Rust Project Developers. See the COPYRIGHT
-// file at the top-level directory of this distribution and at
-// http://rust-lang.org/COPYRIGHT.
-//
-// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
-// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
-// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
-// option. This file may not be copied, modified, or distributed
-// except according to those terms.
-
-mod set;
-mod vec;
diff --git a/src/libcollectionstest/bit/set.rs b/src/libcollectionstest/bit/set.rs
deleted file mode 100644
index 8ab3eff0f4f..00000000000
--- a/src/libcollectionstest/bit/set.rs
+++ /dev/null
@@ -1,520 +0,0 @@
-// Copyright 2012-2014 The Rust Project Developers. See the COPYRIGHT
-// file at the top-level directory of this distribution and at
-// http://rust-lang.org/COPYRIGHT.
-//
-// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
-// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
-// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
-// option. This file may not be copied, modified, or distributed
-// except according to those terms.
-
-use std::cmp::Ordering::{Equal, Greater, Less};
-use std::collections::{BitSet, BitVec};
-
-#[test]
-fn test_bit_set_show() {
-    let mut s = BitSet::new();
-    s.insert(1);
-    s.insert(10);
-    s.insert(50);
-    s.insert(2);
-    assert_eq!("{1, 2, 10, 50}", format!("{:?}", s));
-}
-
-#[test]
-fn test_bit_set_from_usizes() {
-    let usizes = vec![0, 2, 2, 3];
-    let a: BitSet = usizes.into_iter().collect();
-    let mut b = BitSet::new();
-    b.insert(0);
-    b.insert(2);
-    b.insert(3);
-    assert_eq!(a, b);
-}
-
-#[test]
-fn test_bit_set_iterator() {
-    let usizes = vec![0, 2, 2, 3];
-    let bit_vec: BitSet = usizes.into_iter().collect();
-
-    let idxs: Vec<_> = bit_vec.iter().collect();
-    assert_eq!(idxs, [0, 2, 3]);
-
-    let long: BitSet = (0..10000).filter(|&n| n % 2 == 0).collect();
-    let real: Vec<_> = (0..10000).step_by(2).collect();
-
-    let idxs: Vec<_> = long.iter().collect();
-    assert_eq!(idxs, real);
-}
-
-#[test]
-fn test_bit_set_frombit_vec_init() {
-    let bools = [true, false];
-    let lengths = [10, 64, 100];
-    for &b in &bools {
-        for &l in &lengths {
-            let bitset = BitSet::from_bit_vec(BitVec::from_elem(l, b));
-            assert_eq!(bitset.contains(&1), b);
-            assert_eq!(bitset.contains(&(l-1)), b);
-            assert!(!bitset.contains(&l));
-        }
-    }
-}
-
-#[test]
-fn test_bit_vec_masking() {
-    let b = BitVec::from_elem(140, true);
-    let mut bs = BitSet::from_bit_vec(b);
-    assert!(bs.contains(&139));
-    assert!(!bs.contains(&140));
-    assert!(bs.insert(150));
-    assert!(!bs.contains(&140));
-    assert!(!bs.contains(&149));
-    assert!(bs.contains(&150));
-    assert!(!bs.contains(&151));
-}
-
-#[test]
-fn test_bit_set_basic() {
-    let mut b = BitSet::new();
-    assert!(b.insert(3));
-    assert!(!b.insert(3));
-    assert!(b.contains(&3));
-    assert!(b.insert(4));
-    assert!(!b.insert(4));
-    assert!(b.contains(&3));
-    assert!(b.insert(400));
-    assert!(!b.insert(400));
-    assert!(b.contains(&400));
-    assert_eq!(b.len(), 3);
-}
-
-#[test]
-fn test_bit_set_intersection() {
-    let mut a = BitSet::new();
-    let mut b = BitSet::new();
-
-    assert!(a.insert(11));
-    assert!(a.insert(1));
-    assert!(a.insert(3));
-    assert!(a.insert(77));
-    assert!(a.insert(103));
-    assert!(a.insert(5));
-
-    assert!(b.insert(2));
-    assert!(b.insert(11));
-    assert!(b.insert(77));
-    assert!(b.insert(5));
-    assert!(b.insert(3));
-
-    let expected = [3, 5, 11, 77];
-    let actual: Vec<_> = a.intersection(&b).collect();
-    assert_eq!(actual, expected);
-}
-
-#[test]
-fn test_bit_set_difference() {
-    let mut a = BitSet::new();
-    let mut b = BitSet::new();
-
-    assert!(a.insert(1));
-    assert!(a.insert(3));
-    assert!(a.insert(5));
-    assert!(a.insert(200));
-    assert!(a.insert(500));
-
-    assert!(b.insert(3));
-    assert!(b.insert(200));
-
-    let expected = [1, 5, 500];
-    let actual: Vec<_> = a.difference(&b).collect();
-    assert_eq!(actual, expected);
-}
-
-#[test]
-fn test_bit_set_symmetric_difference() {
-    let mut a = BitSet::new();
-    let mut b = BitSet::new();
-
-    assert!(a.insert(1));
-    assert!(a.insert(3));
-    assert!(a.insert(5));
-    assert!(a.insert(9));
-    assert!(a.insert(11));
-
-    assert!(b.insert(3));
-    assert!(b.insert(9));
-    assert!(b.insert(14));
-    assert!(b.insert(220));
-
-    let expected = [1, 5, 11, 14, 220];
-    let actual: Vec<_> = a.symmetric_difference(&b).collect();
-    assert_eq!(actual, expected);
-}
-
-#[test]
-fn test_bit_set_union() {
-    let mut a = BitSet::new();
-    let mut b = BitSet::new();
-    assert!(a.insert(1));
-    assert!(a.insert(3));
-    assert!(a.insert(5));
-    assert!(a.insert(9));
-    assert!(a.insert(11));
-    assert!(a.insert(160));
-    assert!(a.insert(19));
-    assert!(a.insert(24));
-    assert!(a.insert(200));
-
-    assert!(b.insert(1));
-    assert!(b.insert(5));
-    assert!(b.insert(9));
-    assert!(b.insert(13));
-    assert!(b.insert(19));
-
-    let expected = [1, 3, 5, 9, 11, 13, 19, 24, 160, 200];
-    let actual: Vec<_> = a.union(&b).collect();
-    assert_eq!(actual, expected);
-}
-
-#[test]
-fn test_bit_set_subset() {
-    let mut set1 = BitSet::new();
-    let mut set2 = BitSet::new();
-
-    assert!(set1.is_subset(&set2)); //  {}  {}
-    set2.insert(100);
-    assert!(set1.is_subset(&set2)); //  {}  { 1 }
-    set2.insert(200);
-    assert!(set1.is_subset(&set2)); //  {}  { 1, 2 }
-    set1.insert(200);
-    assert!(set1.is_subset(&set2)); //  { 2 }  { 1, 2 }
-    set1.insert(300);
-    assert!(!set1.is_subset(&set2)); // { 2, 3 }  { 1, 2 }
-    set2.insert(300);
-    assert!(set1.is_subset(&set2)); // { 2, 3 }  { 1, 2, 3 }
-    set2.insert(400);
-    assert!(set1.is_subset(&set2)); // { 2, 3 }  { 1, 2, 3, 4 }
-    set2.remove(&100);
-    assert!(set1.is_subset(&set2)); // { 2, 3 }  { 2, 3, 4 }
-    set2.remove(&300);
-    assert!(!set1.is_subset(&set2)); // { 2, 3 }  { 2, 4 }
-    set1.remove(&300);
-    assert!(set1.is_subset(&set2)); // { 2 }  { 2, 4 }
-}
-
-#[test]
-fn test_bit_set_is_disjoint() {
-    let a = BitSet::from_bit_vec(BitVec::from_bytes(&[0b10100010]));
-    let b = BitSet::from_bit_vec(BitVec::from_bytes(&[0b01000000]));
-    let c = BitSet::new();
-    let d = BitSet::from_bit_vec(BitVec::from_bytes(&[0b00110000]));
-
-    assert!(!a.is_disjoint(&d));
-    assert!(!d.is_disjoint(&a));
-
-    assert!(a.is_disjoint(&b));
-    assert!(a.is_disjoint(&c));
-    assert!(b.is_disjoint(&a));
-    assert!(b.is_disjoint(&c));
-    assert!(c.is_disjoint(&a));
-    assert!(c.is_disjoint(&b));
-}
-
-#[test]
-fn test_bit_set_union_with() {
-    //a should grow to include larger elements
-    let mut a = BitSet::new();
-    a.insert(0);
-    let mut b = BitSet::new();
-    b.insert(5);
-    let expected = BitSet::from_bit_vec(BitVec::from_bytes(&[0b10000100]));
-    a.union_with(&b);
-    assert_eq!(a, expected);
-
-    // Standard
-    let mut a = BitSet::from_bit_vec(BitVec::from_bytes(&[0b10100010]));
-    let mut b = BitSet::from_bit_vec(BitVec::from_bytes(&[0b01100010]));
-    let c = a.clone();
-    a.union_with(&b);
-    b.union_with(&c);
-    assert_eq!(a.len(), 4);
-    assert_eq!(b.len(), 4);
-}
-
-#[test]
-fn test_bit_set_intersect_with() {
-    // Explicitly 0'ed bits
-    let mut a = BitSet::from_bit_vec(BitVec::from_bytes(&[0b10100010]));
-    let mut b = BitSet::from_bit_vec(BitVec::from_bytes(&[0b00000000]));
-    let c = a.clone();
-    a.intersect_with(&b);
-    b.intersect_with(&c);
-    assert!(a.is_empty());
-    assert!(b.is_empty());
-
-    // Uninitialized bits should behave like 0's
-    let mut a = BitSet::from_bit_vec(BitVec::from_bytes(&[0b10100010]));
-    let mut b = BitSet::new();
-    let c = a.clone();
-    a.intersect_with(&b);
-    b.intersect_with(&c);
-    assert!(a.is_empty());
-    assert!(b.is_empty());
-
-    // Standard
-    let mut a = BitSet::from_bit_vec(BitVec::from_bytes(&[0b10100010]));
-    let mut b = BitSet::from_bit_vec(BitVec::from_bytes(&[0b01100010]));
-    let c = a.clone();
-    a.intersect_with(&b);
-    b.intersect_with(&c);
-    assert_eq!(a.len(), 2);
-    assert_eq!(b.len(), 2);
-}
-
-#[test]
-fn test_bit_set_difference_with() {
-    // Explicitly 0'ed bits
-    let mut a = BitSet::from_bit_vec(BitVec::from_bytes(&[0b00000000]));
-    let b = BitSet::from_bit_vec(BitVec::from_bytes(&[0b10100010]));
-    a.difference_with(&b);
-    assert!(a.is_empty());
-
-    // Uninitialized bits should behave like 0's
-    let mut a = BitSet::new();
-    let b = BitSet::from_bit_vec(BitVec::from_bytes(&[0b11111111]));
-    a.difference_with(&b);
-    assert!(a.is_empty());
-
-    // Standard
-    let mut a = BitSet::from_bit_vec(BitVec::from_bytes(&[0b10100010]));
-    let mut b = BitSet::from_bit_vec(BitVec::from_bytes(&[0b01100010]));
-    let c = a.clone();
-    a.difference_with(&b);
-    b.difference_with(&c);
-    assert_eq!(a.len(), 1);
-    assert_eq!(b.len(), 1);
-}
-
-#[test]
-fn test_bit_set_symmetric_difference_with() {
-    //a should grow to include larger elements
-    let mut a = BitSet::new();
-    a.insert(0);
-    a.insert(1);
-    let mut b = BitSet::new();
-    b.insert(1);
-    b.insert(5);
-    let expected = BitSet::from_bit_vec(BitVec::from_bytes(&[0b10000100]));
-    a.symmetric_difference_with(&b);
-    assert_eq!(a, expected);
-
-    let mut a = BitSet::from_bit_vec(BitVec::from_bytes(&[0b10100010]));
-    let b = BitSet::new();
-    let c = a.clone();
-    a.symmetric_difference_with(&b);
-    assert_eq!(a, c);
-
-    // Standard
-    let mut a = BitSet::from_bit_vec(BitVec::from_bytes(&[0b11100010]));
-    let mut b = BitSet::from_bit_vec(BitVec::from_bytes(&[0b01101010]));
-    let c = a.clone();
-    a.symmetric_difference_with(&b);
-    b.symmetric_difference_with(&c);
-    assert_eq!(a.len(), 2);
-    assert_eq!(b.len(), 2);
-}
-
-#[test]
-fn test_bit_set_eq() {
-    let a = BitSet::from_bit_vec(BitVec::from_bytes(&[0b10100010]));
-    let b = BitSet::from_bit_vec(BitVec::from_bytes(&[0b00000000]));
-    let c = BitSet::new();
-
-    assert!(a == a);
-    assert!(a != b);
-    assert!(a != c);
-    assert!(b == b);
-    assert!(b == c);
-    assert!(c == c);
-}
-
-#[test]
-fn test_bit_set_cmp() {
-    let a = BitSet::from_bit_vec(BitVec::from_bytes(&[0b10100010]));
-    let b = BitSet::from_bit_vec(BitVec::from_bytes(&[0b00000000]));
-    let c = BitSet::new();
-
-    assert_eq!(a.cmp(&b), Greater);
-    assert_eq!(a.cmp(&c), Greater);
-    assert_eq!(b.cmp(&a), Less);
-    assert_eq!(b.cmp(&c), Equal);
-    assert_eq!(c.cmp(&a), Less);
-    assert_eq!(c.cmp(&b), Equal);
-}
-
-#[test]
-fn test_bit_vec_remove() {
-    let mut a = BitSet::new();
-
-    assert!(a.insert(1));
-    assert!(a.remove(&1));
-
-    assert!(a.insert(100));
-    assert!(a.remove(&100));
-
-    assert!(a.insert(1000));
-    assert!(a.remove(&1000));
-    a.shrink_to_fit();
-}
-
-#[test]
-fn test_bit_vec_clone() {
-    let mut a = BitSet::new();
-
-    assert!(a.insert(1));
-    assert!(a.insert(100));
-    assert!(a.insert(1000));
-
-    let mut b = a.clone();
-
-    assert!(a == b);
-
-    assert!(b.remove(&1));
-    assert!(a.contains(&1));
-
-    assert!(a.remove(&1000));
-    assert!(b.contains(&1000));
-}
-
-#[test]
-fn test_bit_set_append() {
-    let mut a = BitSet::new();
-    a.insert(2);
-    a.insert(6);
-
-    let mut b = BitSet::new();
-    b.insert(1);
-    b.insert(3);
-    b.insert(6);
-
-    a.append(&mut b);
-
-    assert_eq!(a.len(), 4);
-    assert_eq!(b.len(), 0);
-    assert!(b.capacity() >= 6);
-
-    assert_eq!(a, BitSet::from_bit_vec(BitVec::from_bytes(&[0b01110010])));
-}
-
-#[test]
-fn test_bit_set_split_off() {
-    // Split at 0
-    let mut a = BitSet::from_bit_vec(BitVec::from_bytes(&[0b10100000, 0b00010010, 0b10010010,
-                                                          0b00110011, 0b01101011, 0b10101101]));
-
-    let b = a.split_off(0);
-
-    assert_eq!(a.len(), 0);
-    assert_eq!(b.len(), 21);
-
-    assert_eq!(b, BitSet::from_bit_vec(BitVec::from_bytes(&[0b10100000, 0b00010010, 0b10010010,
-                                                            0b00110011, 0b01101011, 0b10101101])));
-
-    // Split behind last element
-    let mut a = BitSet::from_bit_vec(BitVec::from_bytes(&[0b10100000, 0b00010010, 0b10010010,
-                                                          0b00110011, 0b01101011, 0b10101101]));
-
-    let b = a.split_off(50);
-
-    assert_eq!(a.len(), 21);
-    assert_eq!(b.len(), 0);
-
-    assert_eq!(a, BitSet::from_bit_vec(BitVec::from_bytes(&[0b10100000, 0b00010010, 0b10010010,
-                                                            0b00110011, 0b01101011, 0b10101101])));
-
-    // Split at arbitrary element
-    let mut a = BitSet::from_bit_vec(BitVec::from_bytes(&[0b10100000, 0b00010010, 0b10010010,
-                                                          0b00110011, 0b01101011, 0b10101101]));
-
-    let b = a.split_off(34);
-
-    assert_eq!(a.len(), 12);
-    assert_eq!(b.len(), 9);
-
-    assert_eq!(a, BitSet::from_bit_vec(BitVec::from_bytes(&[0b10100000, 0b00010010, 0b10010010,
-                                                            0b00110011, 0b01000000])));
-    assert_eq!(b, BitSet::from_bit_vec(BitVec::from_bytes(&[0, 0, 0, 0,
-                                                            0b00101011, 0b10101101])));
-}
-
-#[test]
-fn test_bit_set_extend_ref() {
-    let mut a = BitSet::new();
-    a.insert(3);
-
-    a.extend(&[5, 7, 10]);
-
-    assert_eq!(a.len(), 4);
-    assert_eq!(a, BitSet::from_bit_vec(BitVec::from_bytes(&[0b00010101,0b00100000])));
-
-    let mut b = BitSet::new();
-    b.insert(11);
-    b.insert(15);
-
-    a.extend(&b);
-
-    assert_eq!(a.len(), 6);
-    assert_eq!(a, BitSet::from_bit_vec(BitVec::from_bytes(&[0b00010101,0b00110001])));
-}
-
-mod bench {
-    use std::collections::{BitSet, BitVec};
-    use std::__rand::{Rng, thread_rng, ThreadRng};
-    use std::u32;
-
-    use test::{Bencher, black_box};
-
-    const BENCH_BITS : usize = 1 << 14;
-
-    fn rng() -> ThreadRng {
-        thread_rng()
-    }
-
-    #[bench]
-    fn bench_bit_vecset_small(b: &mut Bencher) {
-        let mut r = rng();
-        let mut bit_vec = BitSet::new();
-        b.iter(|| {
-            for _ in 0..100 {
-                bit_vec.insert((r.next_u32() as usize) % u32::BITS);
-            }
-            black_box(&bit_vec);
-        });
-    }
-
-    #[bench]
-    fn bench_bit_vecset_big(b: &mut Bencher) {
-        let mut r = rng();
-        let mut bit_vec = BitSet::new();
-        b.iter(|| {
-            for _ in 0..100 {
-                bit_vec.insert((r.next_u32() as usize) % BENCH_BITS);
-            }
-            black_box(&bit_vec);
-        });
-    }
-
-    #[bench]
-    fn bench_bit_vecset_iter(b: &mut Bencher) {
-        let bit_vec = BitSet::from_bit_vec(BitVec::from_fn(BENCH_BITS,
-                                              |idx| {idx % 3 == 0}));
-        b.iter(|| {
-            let mut sum = 0;
-            for idx in &bit_vec {
-                sum += idx as usize;
-            }
-            sum
-        })
-    }
-}
diff --git a/src/libcollectionstest/bit/vec.rs b/src/libcollectionstest/bit/vec.rs
deleted file mode 100644
index 486a651e679..00000000000
--- a/src/libcollectionstest/bit/vec.rs
+++ /dev/null
@@ -1,881 +0,0 @@
-// Copyright 2012-2014 The Rust Project Developers. See the COPYRIGHT
-// file at the top-level directory of this distribution and at
-// http://rust-lang.org/COPYRIGHT.
-//
-// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
-// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
-// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
-// option. This file may not be copied, modified, or distributed
-// except according to those terms.
-
-use std::collections::BitVec;
-use std::u32;
-
-#[test]
-fn test_to_str() {
-    let zerolen = BitVec::new();
-    assert_eq!(format!("{:?}", zerolen), "");
-
-    let eightbits = BitVec::from_elem(8, false);
-    assert_eq!(format!("{:?}", eightbits), "00000000")
-}
-
-#[test]
-fn test_0_elements() {
-    let act = BitVec::new();
-    let exp = Vec::new();
-    assert!(act.eq_vec(&exp));
-    assert!(act.none() && act.all());
-}
-
-#[test]
-fn test_1_element() {
-    let mut act = BitVec::from_elem(1, false);
-    assert!(act.eq_vec(&[false]));
-    assert!(act.none() && !act.all());
-    act = BitVec::from_elem(1, true);
-    assert!(act.eq_vec(&[true]));
-    assert!(!act.none() && act.all());
-}
-
-#[test]
-fn test_2_elements() {
-    let mut b = BitVec::from_elem(2, false);
-    b.set(0, true);
-    b.set(1, false);
-    assert_eq!(format!("{:?}", b), "10");
-    assert!(!b.none() && !b.all());
-}
-
-#[test]
-fn test_10_elements() {
-    let mut act;
-    // all 0
-
-    act = BitVec::from_elem(10, false);
-    assert!((act.eq_vec(
-                &[false, false, false, false, false, false, false, false, false, false])));
-    assert!(act.none() && !act.all());
-    // all 1
-
-    act = BitVec::from_elem(10, true);
-    assert!((act.eq_vec(&[true, true, true, true, true, true, true, true, true, true])));
-    assert!(!act.none() && act.all());
-    // mixed
-
-    act = BitVec::from_elem(10, false);
-    act.set(0, true);
-    act.set(1, true);
-    act.set(2, true);
-    act.set(3, true);
-    act.set(4, true);
-    assert!((act.eq_vec(&[true, true, true, true, true, false, false, false, false, false])));
-    assert!(!act.none() && !act.all());
-    // mixed
-
-    act = BitVec::from_elem(10, false);
-    act.set(5, true);
-    act.set(6, true);
-    act.set(7, true);
-    act.set(8, true);
-    act.set(9, true);
-    assert!((act.eq_vec(&[false, false, false, false, false, true, true, true, true, true])));
-    assert!(!act.none() && !act.all());
-    // mixed
-
-    act = BitVec::from_elem(10, false);
-    act.set(0, true);
-    act.set(3, true);
-    act.set(6, true);
-    act.set(9, true);
-    assert!((act.eq_vec(&[true, false, false, true, false, false, true, false, false, true])));
-    assert!(!act.none() && !act.all());
-}
-
-#[test]
-fn test_31_elements() {
-    let mut act;
-    // all 0
-
-    act = BitVec::from_elem(31, false);
-    assert!(act.eq_vec(
-            &[false, false, false, false, false, false, false, false, false, false, false,
-              false, false, false, false, false, false, false, false, false, false, false,
-              false, false, false, false, false, false, false, false, false]));
-    assert!(act.none() && !act.all());
-    // all 1
-
-    act = BitVec::from_elem(31, true);
-    assert!(act.eq_vec(
-            &[true, true, true, true, true, true, true, true, true, true, true, true, true,
-              true, true, true, true, true, true, true, true, true, true, true, true, true,
-              true, true, true, true, true]));
-    assert!(!act.none() && act.all());
-    // mixed
-
-    act = BitVec::from_elem(31, false);
-    act.set(0, true);
-    act.set(1, true);
-    act.set(2, true);
-    act.set(3, true);
-    act.set(4, true);
-    act.set(5, true);
-    act.set(6, true);
-    act.set(7, true);
-    assert!(act.eq_vec(
-            &[true, true, true, true, true, true, true, true, false, false, false, false, false,
-              false, false, false, false, false, false, false, false, false, false, false,
-              false, false, false, false, false, false, false]));
-    assert!(!act.none() && !act.all());
-    // mixed
-
-    act = BitVec::from_elem(31, false);
-    act.set(16, true);
-    act.set(17, true);
-    act.set(18, true);
-    act.set(19, true);
-    act.set(20, true);
-    act.set(21, true);
-    act.set(22, true);
-    act.set(23, true);
-    assert!(act.eq_vec(
-            &[false, false, false, false, false, false, false, false, false, false, false,
-              false, false, false, false, false, true, true, true, true, true, true, true, true,
-              false, false, false, false, false, false, false]));
-    assert!(!act.none() && !act.all());
-    // mixed
-
-    act = BitVec::from_elem(31, false);
-    act.set(24, true);
-    act.set(25, true);
-    act.set(26, true);
-    act.set(27, true);
-    act.set(28, true);
-    act.set(29, true);
-    act.set(30, true);
-    assert!(act.eq_vec(
-            &[false, false, false, false, false, false, false, false, false, false, false,
-              false, false, false, false, false, false, false, false, false, false, false,
-              false, false, true, true, true, true, true, true, true]));
-    assert!(!act.none() && !act.all());
-    // mixed
-
-    act = BitVec::from_elem(31, false);
-    act.set(3, true);
-    act.set(17, true);
-    act.set(30, true);
-    assert!(act.eq_vec(
-            &[false, false, false, true, false, false, false, false, false, false, false, false,
-              false, false, false, false, false, true, false, false, false, false, false, false,
-              false, false, false, false, false, false, true]));
-    assert!(!act.none() && !act.all());
-}
-
-#[test]
-fn test_32_elements() {
-    let mut act;
-    // all 0
-
-    act = BitVec::from_elem(32, false);
-    assert!(act.eq_vec(
-            &[false, false, false, false, false, false, false, false, false, false, false,
-              false, false, false, false, false, false, false, false, false, false, false,
-              false, false, false, false, false, false, false, false, false, false]));
-    assert!(act.none() && !act.all());
-    // all 1
-
-    act = BitVec::from_elem(32, true);
-    assert!(act.eq_vec(
-            &[true, true, true, true, true, true, true, true, true, true, true, true, true,
-              true, true, true, true, true, true, true, true, true, true, true, true, true,
-              true, true, true, true, true, true]));
-    assert!(!act.none() && act.all());
-    // mixed
-
-    act = BitVec::from_elem(32, false);
-    act.set(0, true);
-    act.set(1, true);
-    act.set(2, true);
-    act.set(3, true);
-    act.set(4, true);
-    act.set(5, true);
-    act.set(6, true);
-    act.set(7, true);
-    assert!(act.eq_vec(
-            &[true, true, true, true, true, true, true, true, false, false, false, false, false,
-              false, false, false, false, false, false, false, false, false, false, false,
-              false, false, false, false, false, false, false, false]));
-    assert!(!act.none() && !act.all());
-    // mixed
-
-    act = BitVec::from_elem(32, false);
-    act.set(16, true);
-    act.set(17, true);
-    act.set(18, true);
-    act.set(19, true);
-    act.set(20, true);
-    act.set(21, true);
-    act.set(22, true);
-    act.set(23, true);
-    assert!(act.eq_vec(
-            &[false, false, false, false, false, false, false, false, false, false, false,
-              false, false, false, false, false, true, true, true, true, true, true, true, true,
-              false, false, false, false, false, false, false, false]));
-    assert!(!act.none() && !act.all());
-    // mixed
-
-    act = BitVec::from_elem(32, false);
-    act.set(24, true);
-    act.set(25, true);
-    act.set(26, true);
-    act.set(27, true);
-    act.set(28, true);
-    act.set(29, true);
-    act.set(30, true);
-    act.set(31, true);
-    assert!(act.eq_vec(
-            &[false, false, false, false, false, false, false, false, false, false, false,
-              false, false, false, false, false, false, false, false, false, false, false,
-              false, false, true, true, true, true, true, true, true, true]));
-    assert!(!act.none() && !act.all());
-    // mixed
-
-    act = BitVec::from_elem(32, false);
-    act.set(3, true);
-    act.set(17, true);
-    act.set(30, true);
-    act.set(31, true);
-    assert!(act.eq_vec(
-            &[false, false, false, true, false, false, false, false, false, false, false, false,
-              false, false, false, false, false, true, false, false, false, false, false, false,
-              false, false, false, false, false, false, true, true]));
-    assert!(!act.none() && !act.all());
-}
-
-#[test]
-fn test_33_elements() {
-    let mut act;
-    // all 0
-
-    act = BitVec::from_elem(33, false);
-    assert!(act.eq_vec(
-            &[false, false, false, false, false, false, false, false, false, false, false,
-              false, false, false, false, false, false, false, false, false, false, false,
-              false, false, false, false, false, false, false, false, false, false, false]));
-    assert!(act.none() && !act.all());
-    // all 1
-
-    act = BitVec::from_elem(33, true);
-    assert!(act.eq_vec(
-            &[true, true, true, true, true, true, true, true, true, true, true, true, true,
-              true, true, true, true, true, true, true, true, true, true, true, true, true,
-              true, true, true, true, true, true, true]));
-    assert!(!act.none() && act.all());
-    // mixed
-
-    act = BitVec::from_elem(33, false);
-    act.set(0, true);
-    act.set(1, true);
-    act.set(2, true);
-    act.set(3, true);
-    act.set(4, true);
-    act.set(5, true);
-    act.set(6, true);
-    act.set(7, true);
-    assert!(act.eq_vec(
-            &[true, true, true, true, true, true, true, true, false, false, false, false, false,
-              false, false, false, false, false, false, false, false, false, false, false,
-              false, false, false, false, false, false, false, false, false]));
-    assert!(!act.none() && !act.all());
-    // mixed
-
-    act = BitVec::from_elem(33, false);
-    act.set(16, true);
-    act.set(17, true);
-    act.set(18, true);
-    act.set(19, true);
-    act.set(20, true);
-    act.set(21, true);
-    act.set(22, true);
-    act.set(23, true);
-    assert!(act.eq_vec(
-            &[false, false, false, false, false, false, false, false, false, false, false,
-              false, false, false, false, false, true, true, true, true, true, true, true, true,
-              false, false, false, false, false, false, false, false, false]));
-    assert!(!act.none() && !act.all());
-    // mixed
-
-    act = BitVec::from_elem(33, false);
-    act.set(24, true);
-    act.set(25, true);
-    act.set(26, true);
-    act.set(27, true);
-    act.set(28, true);
-    act.set(29, true);
-    act.set(30, true);
-    act.set(31, true);
-    assert!(act.eq_vec(
-            &[false, false, false, false, false, false, false, false, false, false, false,
-              false, false, false, false, false, false, false, false, false, false, false,
-              false, false, true, true, true, true, true, true, true, true, false]));
-    assert!(!act.none() && !act.all());
-    // mixed
-
-    act = BitVec::from_elem(33, false);
-    act.set(3, true);
-    act.set(17, true);
-    act.set(30, true);
-    act.set(31, true);
-    act.set(32, true);
-    assert!(act.eq_vec(
-            &[false, false, false, true, false, false, false, false, false, false, false, false,
-              false, false, false, false, false, true, false, false, false, false, false, false,
-              false, false, false, false, false, false, true, true, true]));
-    assert!(!act.none() && !act.all());
-}
-
-#[test]
-fn test_equal_differing_sizes() {
-    let v0 = BitVec::from_elem(10, false);
-    let v1 = BitVec::from_elem(11, false);
-    assert!(v0 != v1);
-}
-
-#[test]
-fn test_equal_greatly_differing_sizes() {
-    let v0 = BitVec::from_elem(10, false);
-    let v1 = BitVec::from_elem(110, false);
-    assert!(v0 != v1);
-}
-
-#[test]
-fn test_equal_sneaky_small() {
-    let mut a = BitVec::from_elem(1, false);
-    a.set(0, true);
-
-    let mut b = BitVec::from_elem(1, true);
-    b.set(0, true);
-
-    assert_eq!(a, b);
-}
-
-#[test]
-fn test_equal_sneaky_big() {
-    let mut a = BitVec::from_elem(100, false);
-    for i in 0..100 {
-        a.set(i, true);
-    }
-
-    let mut b = BitVec::from_elem(100, true);
-    for i in 0..100 {
-        b.set(i, true);
-    }
-
-    assert_eq!(a, b);
-}
-
-#[test]
-fn test_from_bytes() {
-    let bit_vec = BitVec::from_bytes(&[0b10110110, 0b00000000, 0b11111111]);
-    let str = concat!("10110110", "00000000", "11111111");
-    assert_eq!(format!("{:?}", bit_vec), str);
-}
-
-#[test]
-fn test_to_bytes() {
-    let mut bv = BitVec::from_elem(3, true);
-    bv.set(1, false);
-    assert_eq!(bv.to_bytes(), [0b10100000]);
-
-    let mut bv = BitVec::from_elem(9, false);
-    bv.set(2, true);
-    bv.set(8, true);
-    assert_eq!(bv.to_bytes(), [0b00100000, 0b10000000]);
-}
-
-#[test]
-fn test_from_bools() {
-    let bools = vec![true, false, true, true];
-    let bit_vec: BitVec = bools.iter().map(|n| *n).collect();
-    assert_eq!(format!("{:?}", bit_vec), "1011");
-}
-
-#[test]
-fn test_to_bools() {
-    let bools = vec![false, false, true, false, false, true, true, false];
-    assert_eq!(BitVec::from_bytes(&[0b00100110]).iter().collect::<Vec<bool>>(), bools);
-}
-
-#[test]
-fn test_bit_vec_iterator() {
-    let bools = vec![true, false, true, true];
-    let bit_vec: BitVec = bools.iter().map(|n| *n).collect();
-
-    assert_eq!(bit_vec.iter().collect::<Vec<bool>>(), bools);
-
-    let long: Vec<_> = (0..10000).map(|i| i % 2 == 0).collect();
-    let bit_vec: BitVec = long.iter().map(|n| *n).collect();
-    assert_eq!(bit_vec.iter().collect::<Vec<bool>>(), long)
-}
-
-#[test]
-fn test_small_difference() {
-    let mut b1 = BitVec::from_elem(3, false);
-    let mut b2 = BitVec::from_elem(3, false);
-    b1.set(0, true);
-    b1.set(1, true);
-    b2.set(1, true);
-    b2.set(2, true);
-    assert!(b1.difference(&b2));
-    assert!(b1[0]);
-    assert!(!b1[1]);
-    assert!(!b1[2]);
-}
-
-#[test]
-fn test_big_difference() {
-    let mut b1 = BitVec::from_elem(100, false);
-    let mut b2 = BitVec::from_elem(100, false);
-    b1.set(0, true);
-    b1.set(40, true);
-    b2.set(40, true);
-    b2.set(80, true);
-    assert!(b1.difference(&b2));
-    assert!(b1[0]);
-    assert!(!b1[40]);
-    assert!(!b1[80]);
-}
-
-#[test]
-fn test_small_clear() {
-    let mut b = BitVec::from_elem(14, true);
-    assert!(!b.none() && b.all());
-    b.clear();
-    assert!(b.none() && !b.all());
-}
-
-#[test]
-fn test_big_clear() {
-    let mut b = BitVec::from_elem(140, true);
-    assert!(!b.none() && b.all());
-    b.clear();
-    assert!(b.none() && !b.all());
-}
-
-#[test]
-fn test_bit_vec_lt() {
-    let mut a = BitVec::from_elem(5, false);
-    let mut b = BitVec::from_elem(5, false);
-
-    assert!(!(a < b) && !(b < a));
-    b.set(2, true);
-    assert!(a < b);
-    a.set(3, true);
-    assert!(a < b);
-    a.set(2, true);
-    assert!(!(a < b) && b < a);
-    b.set(0, true);
-    assert!(a < b);
-}
-
-#[test]
-fn test_ord() {
-    let mut a = BitVec::from_elem(5, false);
-    let mut b = BitVec::from_elem(5, false);
-
-    assert!(a <= b && a >= b);
-    a.set(1, true);
-    assert!(a > b && a >= b);
-    assert!(b < a && b <= a);
-    b.set(1, true);
-    b.set(2, true);
-    assert!(b > a && b >= a);
-    assert!(a < b && a <= b);
-}
-
-
-#[test]
-fn test_small_bit_vec_tests() {
-    let v = BitVec::from_bytes(&[0]);
-    assert!(!v.all());
-    assert!(!v.any());
-    assert!(v.none());
-
-    let v = BitVec::from_bytes(&[0b00010100]);
-    assert!(!v.all());
-    assert!(v.any());
-    assert!(!v.none());
-
-    let v = BitVec::from_bytes(&[0xFF]);
-    assert!(v.all());
-    assert!(v.any());
-    assert!(!v.none());
-}
-
-#[test]
-fn test_big_bit_vec_tests() {
-    let v = BitVec::from_bytes(&[ // 88 bits
-        0, 0, 0, 0,
-        0, 0, 0, 0,
-        0, 0, 0]);
-    assert!(!v.all());
-    assert!(!v.any());
-    assert!(v.none());
-
-    let v = BitVec::from_bytes(&[ // 88 bits
-        0, 0, 0b00010100, 0,
-        0, 0, 0, 0b00110100,
-        0, 0, 0]);
-    assert!(!v.all());
-    assert!(v.any());
-    assert!(!v.none());
-
-    let v = BitVec::from_bytes(&[ // 88 bits
-        0xFF, 0xFF, 0xFF, 0xFF,
-        0xFF, 0xFF, 0xFF, 0xFF,
-        0xFF, 0xFF, 0xFF]);
-    assert!(v.all());
-    assert!(v.any());
-    assert!(!v.none());
-}
-
-#[test]
-fn test_bit_vec_push_pop() {
-    let mut s = BitVec::from_elem(5 * u32::BITS - 2, false);
-    assert_eq!(s.len(), 5 * u32::BITS - 2);
-    assert_eq!(s[5 * u32::BITS - 3], false);
-    s.push(true);
-    s.push(true);
-    assert_eq!(s[5 * u32::BITS - 2], true);
-    assert_eq!(s[5 * u32::BITS - 1], true);
-    // Here the internal vector will need to be extended
-    s.push(false);
-    assert_eq!(s[5 * u32::BITS], false);
-    s.push(false);
-    assert_eq!(s[5 * u32::BITS + 1], false);
-    assert_eq!(s.len(), 5 * u32::BITS + 2);
-    // Pop it all off
-    assert_eq!(s.pop(), Some(false));
-    assert_eq!(s.pop(), Some(false));
-    assert_eq!(s.pop(), Some(true));
-    assert_eq!(s.pop(), Some(true));
-    assert_eq!(s.len(), 5 * u32::BITS - 2);
-}
-
-#[test]
-fn test_bit_vec_truncate() {
-    let mut s = BitVec::from_elem(5 * u32::BITS, true);
-
-    assert_eq!(s, BitVec::from_elem(5 * u32::BITS, true));
-    assert_eq!(s.len(), 5 * u32::BITS);
-    s.truncate(4 * u32::BITS);
-    assert_eq!(s, BitVec::from_elem(4 * u32::BITS, true));
-    assert_eq!(s.len(), 4 * u32::BITS);
-    // Truncating to a size > s.len() should be a noop
-    s.truncate(5 * u32::BITS);
-    assert_eq!(s, BitVec::from_elem(4 * u32::BITS, true));
-    assert_eq!(s.len(), 4 * u32::BITS);
-    s.truncate(3 * u32::BITS - 10);
-    assert_eq!(s, BitVec::from_elem(3 * u32::BITS - 10, true));
-    assert_eq!(s.len(), 3 * u32::BITS - 10);
-    s.truncate(0);
-    assert_eq!(s, BitVec::from_elem(0, true));
-    assert_eq!(s.len(), 0);
-}
-
-#[test]
-fn test_bit_vec_reserve() {
-    let mut s = BitVec::from_elem(5 * u32::BITS, true);
-    // Check capacity
-    assert!(s.capacity() >= 5 * u32::BITS);
-    s.reserve(2 * u32::BITS);
-    assert!(s.capacity() >= 7 * u32::BITS);
-    s.reserve(7 * u32::BITS);
-    assert!(s.capacity() >= 12 * u32::BITS);
-    s.reserve_exact(7 * u32::BITS);
-    assert!(s.capacity() >= 12 * u32::BITS);
-    s.reserve(7 * u32::BITS + 1);
-    assert!(s.capacity() >= 12 * u32::BITS + 1);
-    // Check that length hasn't changed
-    assert_eq!(s.len(), 5 * u32::BITS);
-    s.push(true);
-    s.push(false);
-    s.push(true);
-    assert_eq!(s[5 * u32::BITS - 1], true);
-    assert_eq!(s[5 * u32::BITS - 0], true);
-    assert_eq!(s[5 * u32::BITS + 1], false);
-    assert_eq!(s[5 * u32::BITS + 2], true);
-}
-
-#[test]
-fn test_bit_vec_grow() {
-    let mut bit_vec = BitVec::from_bytes(&[0b10110110, 0b00000000, 0b10101010]);
-    bit_vec.grow(32, true);
-    assert_eq!(bit_vec, BitVec::from_bytes(&[0b10110110, 0b00000000, 0b10101010,
-                                 0xFF, 0xFF, 0xFF, 0xFF]));
-    bit_vec.grow(64, false);
-    assert_eq!(bit_vec, BitVec::from_bytes(&[0b10110110, 0b00000000, 0b10101010,
-                                 0xFF, 0xFF, 0xFF, 0xFF, 0, 0, 0, 0, 0, 0, 0, 0]));
-    bit_vec.grow(16, true);
-    assert_eq!(bit_vec, BitVec::from_bytes(&[0b10110110, 0b00000000, 0b10101010,
-                                 0xFF, 0xFF, 0xFF, 0xFF, 0, 0, 0, 0, 0, 0, 0, 0, 0xFF, 0xFF]));
-}
-
-#[test]
-fn test_bit_vec_extend() {
-    let mut bit_vec = BitVec::from_bytes(&[0b10110110, 0b00000000, 0b11111111]);
-    let ext = BitVec::from_bytes(&[0b01001001, 0b10010010, 0b10111101]);
-    bit_vec.extend(&ext);
-    assert_eq!(bit_vec, BitVec::from_bytes(&[0b10110110, 0b00000000, 0b11111111,
-                                 0b01001001, 0b10010010, 0b10111101]));
-}
-
-#[test]
-fn test_bit_vecextend_ref() {
-    let mut bv = BitVec::from_bytes(&[0b10100011]);
-    bv.extend(&[true, false, true]);
-
-    assert_eq!(bv.len(), 11);
-    assert!(bv.eq_vec(&[true, false, true, false, false, false, true, true,
-                        true, false, true]));
-
-    let bw = BitVec::from_bytes(&[0b00010001]);
-    bv.extend(&bw);
-
-    assert_eq!(bv.len(), 19);
-    assert!(bv.eq_vec(&[true, false, true, false, false, false, true, true,
-                        true, false, true, false, false, false, true, false,
-                        false, false, true]));
-}
-
-#[test]
-fn test_bit_vec_append() {
-    // Append to BitVec that holds a multiple of u32::BITS bits
-    let mut a = BitVec::from_bytes(&[0b10100000, 0b00010010, 0b10010010, 0b00110011]);
-    let mut b = BitVec::new();
-    b.push(false);
-    b.push(true);
-    b.push(true);
-
-    a.append(&mut b);
-
-    assert_eq!(a.len(), 35);
-    assert_eq!(b.len(), 0);
-    assert!(b.capacity() >= 3);
-
-    assert!(a.eq_vec(&[true, false, true, false, false, false, false, false,
-                       false, false, false, true, false, false, true, false,
-                       true, false, false, true, false, false, true, false,
-                       false, false, true, true, false, false, true, true,
-                       false, true, true]));
-
-    // Append to arbitrary BitVec
-    let mut a = BitVec::new();
-    a.push(true);
-    a.push(false);
-
-    let mut b = BitVec::from_bytes(&[0b10100000, 0b00010010, 0b10010010, 0b00110011, 0b10010101]);
-
-    a.append(&mut b);
-
-    assert_eq!(a.len(), 42);
-    assert_eq!(b.len(), 0);
-    assert!(b.capacity() >= 40);
-
-    assert!(a.eq_vec(&[true, false, true, false, true, false, false, false,
-                       false, false, false, false, false, true, false, false,
-                       true, false, true, false, false, true, false, false,
-                       true, false, false, false, true, true, false, false,
-                       true, true, true, false, false, true, false, true,
-                       false, true]));
-
-    // Append to empty BitVec
-    let mut a = BitVec::new();
-    let mut b = BitVec::from_bytes(&[0b10100000, 0b00010010, 0b10010010, 0b00110011, 0b10010101]);
-
-    a.append(&mut b);
-
-    assert_eq!(a.len(), 40);
-    assert_eq!(b.len(), 0);
-    assert!(b.capacity() >= 40);
-
-    assert!(a.eq_vec(&[true, false, true, false, false, false, false, false,
-                       false, false, false, true, false, false, true, false,
-                       true, false, false, true, false, false, true, false,
-                       false, false, true, true, false, false, true, true,
-                       true, false, false, true, false, true, false, true]));
-
-    // Append empty BitVec
-    let mut a = BitVec::from_bytes(&[0b10100000, 0b00010010, 0b10010010, 0b00110011, 0b10010101]);
-    let mut b = BitVec::new();
-
-    a.append(&mut b);
-
-    assert_eq!(a.len(), 40);
-    assert_eq!(b.len(), 0);
-
-    assert!(a.eq_vec(&[true, false, true, false, false, false, false, false,
-                       false, false, false, true, false, false, true, false,
-                       true, false, false, true, false, false, true, false,
-                       false, false, true, true, false, false, true, true,
-                       true, false, false, true, false, true, false, true]));
-}
-
-#[test]
-fn test_bit_vec_split_off() {
-    // Split at 0
-    let mut a = BitVec::new();
-    a.push(true);
-    a.push(false);
-    a.push(false);
-    a.push(true);
-
-    let b = a.split_off(0);
-
-    assert_eq!(a.len(), 0);
-    assert_eq!(b.len(), 4);
-
-    assert!(b.eq_vec(&[true, false, false, true]));
-
-    // Split at last bit
-    a.truncate(0);
-    a.push(true);
-    a.push(false);
-    a.push(false);
-    a.push(true);
-
-    let b = a.split_off(4);
-
-    assert_eq!(a.len(), 4);
-    assert_eq!(b.len(), 0);
-
-    assert!(a.eq_vec(&[true, false, false, true]));
-
-    // Split at block boundary
-    let mut a = BitVec::from_bytes(&[0b10100000, 0b00010010, 0b10010010, 0b00110011, 0b11110011]);
-
-    let b = a.split_off(32);
-
-    assert_eq!(a.len(), 32);
-    assert_eq!(b.len(), 8);
-
-    assert!(a.eq_vec(&[true, false, true, false, false, false, false, false,
-                       false, false, false, true, false, false, true, false,
-                       true, false, false, true, false, false, true, false,
-                       false, false, true, true, false, false, true, true]));
-    assert!(b.eq_vec(&[true, true, true, true, false, false, true, true]));
-
-    // Don't split at block boundary
-    let mut a = BitVec::from_bytes(&[0b10100000, 0b00010010, 0b10010010, 0b00110011,
-                                     0b01101011, 0b10101101]);
-
-    let b = a.split_off(13);
-
-    assert_eq!(a.len(), 13);
-    assert_eq!(b.len(), 35);
-
-    assert!(a.eq_vec(&[true, false, true, false, false, false, false, false,
-                       false, false, false, true, false]));
-    assert!(b.eq_vec(&[false, true, false, true, false, false, true, false,
-                       false, true, false, false, false, true, true, false,
-                       false, true, true, false, true, true, false, true,
-                       false, true, true,  true, false, true, false, true,
-                       true, false, true]));
-}
-
-mod bench {
-    use std::collections::BitVec;
-    use std::u32;
-    use std::__rand::{Rng, thread_rng, ThreadRng};
-
-    use test::{Bencher, black_box};
-
-    const BENCH_BITS : usize = 1 << 14;
-
-    fn rng() -> ThreadRng {
-        thread_rng()
-    }
-
-    #[bench]
-    fn bench_usize_small(b: &mut Bencher) {
-        let mut r = rng();
-        let mut bit_vec = 0 as usize;
-        b.iter(|| {
-            for _ in 0..100 {
-                bit_vec |= 1 << ((r.next_u32() as usize) % u32::BITS);
-            }
-            black_box(&bit_vec);
-        });
-    }
-
-    #[bench]
-    fn bench_bit_set_big_fixed(b: &mut Bencher) {
-        let mut r = rng();
-        let mut bit_vec = BitVec::from_elem(BENCH_BITS, false);
-        b.iter(|| {
-            for _ in 0..100 {
-                bit_vec.set((r.next_u32() as usize) % BENCH_BITS, true);
-            }
-            black_box(&bit_vec);
-        });
-    }
-
-    #[bench]
-    fn bench_bit_set_big_variable(b: &mut Bencher) {
-        let mut r = rng();
-        let mut bit_vec = BitVec::from_elem(BENCH_BITS, false);
-        b.iter(|| {
-            for _ in 0..100 {
-                bit_vec.set((r.next_u32() as usize) % BENCH_BITS, r.gen());
-            }
-            black_box(&bit_vec);
-        });
-    }
-
-    #[bench]
-    fn bench_bit_set_small(b: &mut Bencher) {
-        let mut r = rng();
-        let mut bit_vec = BitVec::from_elem(u32::BITS, false);
-        b.iter(|| {
-            for _ in 0..100 {
-                bit_vec.set((r.next_u32() as usize) % u32::BITS, true);
-            }
-            black_box(&bit_vec);
-        });
-    }
-
-    #[bench]
-    fn bench_bit_vec_big_union(b: &mut Bencher) {
-        let mut b1 = BitVec::from_elem(BENCH_BITS, false);
-        let b2 = BitVec::from_elem(BENCH_BITS, false);
-        b.iter(|| {
-            b1.union(&b2)
-        })
-    }
-
-    #[bench]
-    fn bench_bit_vec_small_iter(b: &mut Bencher) {
-        let bit_vec = BitVec::from_elem(u32::BITS, false);
-        b.iter(|| {
-            let mut sum = 0;
-            for _ in 0..10 {
-                for pres in &bit_vec {
-                    sum += pres as usize;
-                }
-            }
-            sum
-        })
-    }
-
-    #[bench]
-    fn bench_bit_vec_big_iter(b: &mut Bencher) {
-        let bit_vec = BitVec::from_elem(BENCH_BITS, false);
-        b.iter(|| {
-            let mut sum = 0;
-            for pres in &bit_vec {
-                sum += pres as usize;
-            }
-            sum
-        })
-    }
-}
diff --git a/src/libcollectionstest/btree/set.rs b/src/libcollectionstest/btree/set.rs
index 56257233aa5..b0d7390a49c 100644
--- a/src/libcollectionstest/btree/set.rs
+++ b/src/libcollectionstest/btree/set.rs
@@ -9,7 +9,6 @@
 // except according to those terms.
 
 use std::collections::BTreeSet;
-use std::hash::{SipHasher, self};
 
 #[test]
 fn test_clone_eq() {
@@ -34,7 +33,7 @@ fn test_hash() {
   y.insert(2);
   y.insert(1);
 
-  assert!(hash::hash::<_, SipHasher>(&x) == hash::hash::<_, SipHasher>(&y));
+  assert!(::hash(&x) == ::hash(&y));
 }
 
 struct Counter<'a, 'b> {
diff --git a/src/libcollectionstest/lib.rs b/src/libcollectionstest/lib.rs
index d161dc7a287..ca96f27d80d 100644
--- a/src/libcollectionstest/lib.rs
+++ b/src/libcollectionstest/lib.rs
@@ -10,8 +10,6 @@
 
 #![feature(ascii)]
 #![feature(append)]
-#![feature(bitset)]
-#![feature(bitvec)]
 #![feature(box_syntax)]
 #![feature(btree_range)]
 #![feature(collections)]
@@ -21,24 +19,14 @@
 #![feature(deque_extras)]
 #![feature(drain)]
 #![feature(enumset)]
-#![feature(hash_default)]
 #![feature(into_cow)]
-#![feature(iter_idx)]
-#![feature(iter_order)]
 #![feature(iter_arith)]
-#![feature(iter_to_vec)]
-#![feature(map_in_place)]
-#![feature(move_from)]
-#![feature(num_bits_bytes)]
 #![feature(pattern)]
-#![feature(permutations)]
 #![feature(rand)]
 #![feature(range_inclusive)]
 #![feature(rustc_private)]
 #![feature(slice_bytes)]
-#![feature(slice_chars)]
 #![feature(slice_splits)]
-#![feature(slice_position_elem)]
 #![feature(split_off)]
 #![feature(step_by)]
 #![feature(str_char)]
@@ -47,16 +35,11 @@
 #![feature(str_split_at)]
 #![feature(str_utf16)]
 #![feature(box_str)]
-#![feature(subslice_offset)]
 #![feature(test)]
 #![feature(unboxed_closures)]
 #![feature(unicode)]
 #![feature(vec_deque_retain)]
-#![feature(vec_from_raw_buf)]
 #![feature(vec_push_all)]
-#![feature(vecmap)]
-
-#![allow(deprecated)]
 
 #[macro_use] extern crate log;
 
@@ -64,10 +47,11 @@ extern crate collections;
 extern crate test;
 extern crate rustc_unicode;
 
+use std::hash::{Hash, Hasher, SipHasher};
+
 #[cfg(test)] #[macro_use] mod bench;
 
 mod binary_heap;
-mod bit;
 mod btree;
 mod enum_set;
 mod fmt;
@@ -76,5 +60,10 @@ mod slice;
 mod str;
 mod string;
 mod vec_deque;
-mod vec_map;
 mod vec;
+
+fn hash<T: Hash>(t: &T) -> u64 {
+    let mut s = SipHasher::new();
+    t.hash(&mut s);
+    s.finish()
+}
diff --git a/src/libcollectionstest/linked_list.rs b/src/libcollectionstest/linked_list.rs
index d04ce574ed0..7dac967d803 100644
--- a/src/libcollectionstest/linked_list.rs
+++ b/src/libcollectionstest/linked_list.rs
@@ -9,7 +9,6 @@
 // except according to those terms.
 
 use std::collections::LinkedList;
-use std::hash::{SipHasher, self};
 
 use test;
 
@@ -257,7 +256,7 @@ fn test_hash() {
   let mut x = LinkedList::new();
   let mut y = LinkedList::new();
 
-  assert!(hash::hash::<_, SipHasher>(&x) == hash::hash::<_, SipHasher>(&y));
+  assert!(::hash(&x) == ::hash(&y));
 
   x.push_back(1);
   x.push_back(2);
@@ -267,7 +266,7 @@ fn test_hash() {
   y.push_front(2);
   y.push_front(1);
 
-  assert!(hash::hash::<_, SipHasher>(&x) == hash::hash::<_, SipHasher>(&y));
+  assert!(::hash(&x) == ::hash(&y));
 }
 
 #[test]
diff --git a/src/libcollectionstest/slice.rs b/src/libcollectionstest/slice.rs
index 65706b292c6..80dcd48fbfa 100644
--- a/src/libcollectionstest/slice.rs
+++ b/src/libcollectionstest/slice.rs
@@ -10,11 +10,9 @@
 
 use std::cmp::Ordering::{Equal, Greater, Less};
 use std::default::Default;
-use std::iter::RandomAccessIterator;
 use std::mem;
 use std::__rand::{Rng, thread_rng};
 use std::rc::Rc;
-use std::slice::ElementSwaps;
 
 fn square(n: usize) -> usize { n * n }
 
@@ -367,97 +365,6 @@ fn test_retain() {
 }
 
 #[test]
-fn test_element_swaps() {
-    let mut v = [1, 2, 3];
-    for (i, (a, b)) in ElementSwaps::new(v.len()).enumerate() {
-        v.swap(a, b);
-        match i {
-            0 => assert!(v == [1, 3, 2]),
-            1 => assert!(v == [3, 1, 2]),
-            2 => assert!(v == [3, 2, 1]),
-            3 => assert!(v == [2, 3, 1]),
-            4 => assert!(v == [2, 1, 3]),
-            5 => assert!(v == [1, 2, 3]),
-            _ => panic!(),
-        }
-    }
-}
-
-#[test]
-fn test_lexicographic_permutations() {
-    let v : &mut[_] = &mut[1, 2, 3, 4, 5];
-    assert!(v.prev_permutation() == false);
-    assert!(v.next_permutation());
-    let b: &mut[_] = &mut[1, 2, 3, 5, 4];
-    assert!(v == b);
-    assert!(v.prev_permutation());
-    let b: &mut[_] = &mut[1, 2, 3, 4, 5];
-    assert!(v == b);
-    assert!(v.next_permutation());
-    assert!(v.next_permutation());
-    let b: &mut[_] = &mut[1, 2, 4, 3, 5];
-    assert!(v == b);
-    assert!(v.next_permutation());
-    let b: &mut[_] = &mut[1, 2, 4, 5, 3];
-    assert!(v == b);
-
-    let v : &mut[_] = &mut[1, 0, 0, 0];
-    assert!(v.next_permutation() == false);
-    assert!(v.prev_permutation());
-    let b: &mut[_] = &mut[0, 1, 0, 0];
-    assert!(v == b);
-    assert!(v.prev_permutation());
-    let b: &mut[_] = &mut[0, 0, 1, 0];
-    assert!(v == b);
-    assert!(v.prev_permutation());
-    let b: &mut[_] = &mut[0, 0, 0, 1];
-    assert!(v == b);
-    assert!(v.prev_permutation() == false);
-}
-
-#[test]
-fn test_lexicographic_permutations_empty_and_short() {
-    let empty : &mut[i32] = &mut[];
-    assert!(empty.next_permutation() == false);
-    let b: &mut[i32] = &mut[];
-    assert!(empty == b);
-    assert!(empty.prev_permutation() == false);
-    assert!(empty == b);
-
-    let one_elem : &mut[_] = &mut[4];
-    assert!(one_elem.prev_permutation() == false);
-    let b: &mut[_] = &mut[4];
-    assert!(one_elem == b);
-    assert!(one_elem.next_permutation() == false);
-    assert!(one_elem == b);
-
-    let two_elem : &mut[_] = &mut[1, 2];
-    assert!(two_elem.prev_permutation() == false);
-    let b : &mut[_] = &mut[1, 2];
-    let c : &mut[_] = &mut[2, 1];
-    assert!(two_elem == b);
-    assert!(two_elem.next_permutation());
-    assert!(two_elem == c);
-    assert!(two_elem.next_permutation() == false);
-    assert!(two_elem == c);
-    assert!(two_elem.prev_permutation());
-    assert!(two_elem == b);
-    assert!(two_elem.prev_permutation() == false);
-    assert!(two_elem == b);
-}
-
-#[test]
-fn test_position_elem() {
-    assert!([].position_elem(&1).is_none());
-
-    let v1 = vec![1, 2, 3, 3, 2, 5];
-    assert_eq!(v1.position_elem(&1), Some(0));
-    assert_eq!(v1.position_elem(&2), Some(1));
-    assert_eq!(v1.position_elem(&5), Some(5));
-    assert!(v1.position_elem(&4).is_none());
-}
-
-#[test]
 fn test_binary_search() {
     assert_eq!([1,2,3,4,5].binary_search(&5).ok(), Some(4));
     assert_eq!([1,2,3,4,5].binary_search(&4).ok(), Some(3));
@@ -669,21 +576,6 @@ fn test_slice_2() {
 }
 
 #[test]
-#[should_panic]
-fn test_permute_fail() {
-    let v: [(Box<_>, Rc<_>); 4] =
-        [(box 0, Rc::new(0)), (box 0, Rc::new(0)),
-         (box 0, Rc::new(0)), (box 0, Rc::new(0))];
-    let mut i = 0;
-    for _ in v.permutations() {
-        if i == 2 {
-            panic!()
-        }
-        i += 1;
-    }
-}
-
-#[test]
 fn test_total_ord() {
     let c = &[1, 2, 3];
     [1, 2, 3, 4][..].cmp(c) == Greater;
@@ -716,44 +608,6 @@ fn test_iterator() {
 }
 
 #[test]
-fn test_random_access_iterator() {
-    let xs = [1, 2, 5, 10, 11];
-    let mut it = xs.iter();
-
-    assert_eq!(it.indexable(), 5);
-    assert_eq!(it.idx(0).unwrap(), &1);
-    assert_eq!(it.idx(2).unwrap(), &5);
-    assert_eq!(it.idx(4).unwrap(), &11);
-    assert!(it.idx(5).is_none());
-
-    assert_eq!(it.next().unwrap(), &1);
-    assert_eq!(it.indexable(), 4);
-    assert_eq!(it.idx(0).unwrap(), &2);
-    assert_eq!(it.idx(3).unwrap(), &11);
-    assert!(it.idx(4).is_none());
-
-    assert_eq!(it.next().unwrap(), &2);
-    assert_eq!(it.indexable(), 3);
-    assert_eq!(it.idx(1).unwrap(), &10);
-    assert!(it.idx(3).is_none());
-
-    assert_eq!(it.next().unwrap(), &5);
-    assert_eq!(it.indexable(), 2);
-    assert_eq!(it.idx(1).unwrap(), &11);
-
-    assert_eq!(it.next().unwrap(), &10);
-    assert_eq!(it.indexable(), 1);
-    assert_eq!(it.idx(0).unwrap(), &11);
-    assert!(it.idx(1).is_none());
-
-    assert_eq!(it.next().unwrap(), &11);
-    assert_eq!(it.indexable(), 0);
-    assert!(it.idx(0).is_none());
-
-    assert!(it.next().is_none());
-}
-
-#[test]
 fn test_iter_size_hints() {
     let mut xs = [1, 2, 5, 10, 11];
     assert_eq!(xs.iter().size_hint(), (5, Some(5)));
@@ -933,15 +787,6 @@ fn test_windowsator() {
 
     let wins: &[&[_]] = &[&[3,4], &[2,3], &[1,2]];
     assert_eq!(v.windows(2).rev().collect::<Vec<&[_]>>(), wins);
-    let mut it = v.windows(2);
-    assert_eq!(it.indexable(), 3);
-    let win: &[_] = &[1,2];
-    assert_eq!(it.idx(0).unwrap(), win);
-    let win: &[_] = &[2,3];
-    assert_eq!(it.idx(1).unwrap(), win);
-    let win: &[_] = &[3,4];
-    assert_eq!(it.idx(2).unwrap(), win);
-    assert_eq!(it.idx(3), None);
 }
 
 #[test]
@@ -966,16 +811,6 @@ fn test_chunksator() {
 
     let chunks: &[&[_]] = &[&[5], &[3,4], &[1,2]];
     assert_eq!(v.chunks(2).rev().collect::<Vec<_>>(), chunks);
-    let mut it = v.chunks(2);
-    assert_eq!(it.indexable(), 3);
-
-    let chunk: &[_] = &[1,2];
-    assert_eq!(it.idx(0).unwrap(), chunk);
-    let chunk: &[_] = &[3,4];
-    assert_eq!(it.idx(1).unwrap(), chunk);
-    let chunk: &[_] = &[5];
-    assert_eq!(it.idx(2).unwrap(), chunk);
-    assert_eq!(it.idx(3), None);
 }
 
 #[test]
@@ -986,26 +821,6 @@ fn test_chunksator_0() {
 }
 
 #[test]
-fn test_move_from() {
-    let mut a = [1,2,3,4,5];
-    let b = vec![6,7,8];
-    assert_eq!(a.move_from(b, 0, 3), 3);
-    assert!(a == [6,7,8,4,5]);
-    let mut a = [7,2,8,1];
-    let b = vec![3,1,4,1,5,9];
-    assert_eq!(a.move_from(b, 0, 6), 4);
-    assert!(a == [3,1,4,1]);
-    let mut a = [1,2,3,4];
-    let b = vec![5,6,7,8,9,0];
-    assert_eq!(a.move_from(b, 2, 3), 1);
-    assert!(a == [7,2,3,4]);
-    let mut a = [1,2,3,4,5];
-    let b = vec![5,6,7,8,9,0];
-    assert_eq!(a[2..4].move_from(b,1,6), 2);
-    assert!(a == [1,2,6,7,5]);
-}
-
-#[test]
 fn test_reverse_part() {
     let mut values = [1,2,3,4,5];
     values[1..4].reverse();
@@ -1324,7 +1139,6 @@ fn test_box_slice_clone_panics() {
 }
 
 mod bench {
-    use std::iter::repeat;
     use std::{mem, ptr};
     use std::__rand::{Rng, thread_rng};
 
diff --git a/src/libcollectionstest/str.rs b/src/libcollectionstest/str.rs
index 4cccb29b41c..f890e3ca2e1 100644
--- a/src/libcollectionstest/str.rs
+++ b/src/libcollectionstest/str.rs
@@ -19,36 +19,6 @@ fn test_le() {
     assert!("foo" != "bar");
 }
 
-#[allow(deprecated)]
-#[test]
-fn test_len() {
-    assert_eq!("".len(), 0);
-    assert_eq!("hello world".len(), 11);
-    assert_eq!("\x63".len(), 1);
-    assert_eq!("\u{a2}".len(), 2);
-    assert_eq!("\u{3c0}".len(), 2);
-    assert_eq!("\u{2620}".len(), 3);
-    assert_eq!("\u{1d11e}".len(), 4);
-
-    assert_eq!("".chars().count(), 0);
-    assert_eq!("hello world".chars().count(), 11);
-    assert_eq!("\x63".chars().count(), 1);
-    assert_eq!("\u{a2}".chars().count(), 1);
-    assert_eq!("\u{3c0}".chars().count(), 1);
-    assert_eq!("\u{2620}".chars().count(), 1);
-    assert_eq!("\u{1d11e}".chars().count(), 1);
-    assert_eq!("ประเทศไทย中华Việt Nam".chars().count(), 19);
-
-    assert_eq!("hello".width(false), 10);
-    assert_eq!("hello".width(true), 10);
-    assert_eq!("\0\0\0\0\0".width(false), 0);
-    assert_eq!("\0\0\0\0\0".width(true), 0);
-    assert_eq!("".width(false), 0);
-    assert_eq!("".width(true), 0);
-    assert_eq!("\u{2081}\u{2082}\u{2083}\u{2084}".width(false), 4);
-    assert_eq!("\u{2081}\u{2082}\u{2083}\u{2084}".width(true), 8);
-}
-
 #[test]
 fn test_find() {
     assert_eq!("hello".find('l'), Some(2));
@@ -117,19 +87,6 @@ fn test_find_str() {
     assert_eq!(data[43..86].find("Nam"), Some(83 - 43));
 }
 
-#[test]
-fn test_slice_chars() {
-    fn t(a: &str, b: &str, start: usize) {
-        assert_eq!(a.slice_chars(start, start + b.chars().count()), b);
-    }
-    t("", "", 0);
-    t("hello", "llo", 2);
-    t("hello", "el", 1);
-    t("αβλ", "β", 1);
-    t("αβλ", "", 3);
-    assert_eq!("ะเทศไท", "ประเทศไทย中华Việt Nam".slice_chars(2, 8));
-}
-
 fn s(x: &str) -> String { x.to_string() }
 
 macro_rules! test_concat {
@@ -599,29 +556,6 @@ fn test_as_ptr() {
 }
 
 #[test]
-fn test_subslice_offset() {
-    let a = "kernelsprite";
-    let b = &a[7..a.len()];
-    let c = &a[0..a.len() - 6];
-    assert_eq!(a.subslice_offset(b), 7);
-    assert_eq!(a.subslice_offset(c), 0);
-
-    let string = "a\nb\nc";
-    let lines: Vec<&str> = string.lines().collect();
-    assert_eq!(string.subslice_offset(lines[0]), 0);
-    assert_eq!(string.subslice_offset(lines[1]), 2);
-    assert_eq!(string.subslice_offset(lines[2]), 4);
-}
-
-#[test]
-#[should_panic]
-fn test_subslice_offset_2() {
-    let a = "alchemiter";
-    let b = "cruxtruder";
-    a.subslice_offset(b);
-}
-
-#[test]
 fn vec_str_conversions() {
     let s1: String = String::from("All mimsy were the borogoves");
 
@@ -977,88 +911,6 @@ fn test_split_whitespace() {
     assert_eq!(words, ["Märy", "häd", "ä", "little", "lämb", "Little", "lämb"])
 }
 
-#[allow(deprecated)]
-#[test]
-fn test_nfd_chars() {
-    macro_rules! t {
-        ($input: expr, $expected: expr) => {
-            assert_eq!($input.nfd_chars().collect::<String>(), $expected);
-        }
-    }
-    t!("abc", "abc");
-    t!("\u{1e0b}\u{1c4}", "d\u{307}\u{1c4}");
-    t!("\u{2026}", "\u{2026}");
-    t!("\u{2126}", "\u{3a9}");
-    t!("\u{1e0b}\u{323}", "d\u{323}\u{307}");
-    t!("\u{1e0d}\u{307}", "d\u{323}\u{307}");
-    t!("a\u{301}", "a\u{301}");
-    t!("\u{301}a", "\u{301}a");
-    t!("\u{d4db}", "\u{1111}\u{1171}\u{11b6}");
-    t!("\u{ac1c}", "\u{1100}\u{1162}");
-}
-
-#[allow(deprecated)]
-#[test]
-fn test_nfkd_chars() {
-    macro_rules! t {
-        ($input: expr, $expected: expr) => {
-            assert_eq!($input.nfkd_chars().collect::<String>(), $expected);
-        }
-    }
-    t!("abc", "abc");
-    t!("\u{1e0b}\u{1c4}", "d\u{307}DZ\u{30c}");
-    t!("\u{2026}", "...");
-    t!("\u{2126}", "\u{3a9}");
-    t!("\u{1e0b}\u{323}", "d\u{323}\u{307}");
-    t!("\u{1e0d}\u{307}", "d\u{323}\u{307}");
-    t!("a\u{301}", "a\u{301}");
-    t!("\u{301}a", "\u{301}a");
-    t!("\u{d4db}", "\u{1111}\u{1171}\u{11b6}");
-    t!("\u{ac1c}", "\u{1100}\u{1162}");
-}
-
-#[allow(deprecated)]
-#[test]
-fn test_nfc_chars() {
-    macro_rules! t {
-        ($input: expr, $expected: expr) => {
-            assert_eq!($input.nfc_chars().collect::<String>(), $expected);
-        }
-    }
-    t!("abc", "abc");
-    t!("\u{1e0b}\u{1c4}", "\u{1e0b}\u{1c4}");
-    t!("\u{2026}", "\u{2026}");
-    t!("\u{2126}", "\u{3a9}");
-    t!("\u{1e0b}\u{323}", "\u{1e0d}\u{307}");
-    t!("\u{1e0d}\u{307}", "\u{1e0d}\u{307}");
-    t!("a\u{301}", "\u{e1}");
-    t!("\u{301}a", "\u{301}a");
-    t!("\u{d4db}", "\u{d4db}");
-    t!("\u{ac1c}", "\u{ac1c}");
-    t!("a\u{300}\u{305}\u{315}\u{5ae}b", "\u{e0}\u{5ae}\u{305}\u{315}b");
-}
-
-#[allow(deprecated)]
-#[test]
-fn test_nfkc_chars() {
-    macro_rules! t {
-        ($input: expr, $expected: expr) => {
-            assert_eq!($input.nfkc_chars().collect::<String>(), $expected);
-        }
-    }
-    t!("abc", "abc");
-    t!("\u{1e0b}\u{1c4}", "\u{1e0b}D\u{17d}");
-    t!("\u{2026}", "...");
-    t!("\u{2126}", "\u{3a9}");
-    t!("\u{1e0b}\u{323}", "\u{1e0d}\u{307}");
-    t!("\u{1e0d}\u{307}", "\u{1e0d}\u{307}");
-    t!("a\u{301}", "\u{e1}");
-    t!("\u{301}a", "\u{301}a");
-    t!("\u{d4db}", "\u{d4db}");
-    t!("\u{ac1c}", "\u{ac1c}");
-    t!("a\u{300}\u{305}\u{315}\u{5ae}b", "\u{e0}\u{5ae}\u{305}\u{315}b");
-}
-
 #[test]
 fn test_lines() {
     let data = "\nMäry häd ä little lämb\n\nLittle lämb\n";
@@ -1070,417 +922,6 @@ fn test_lines() {
     assert_eq!(lines, ["", "Märy häd ä little lämb", "", "Little lämb"]);
 }
 
-#[allow(deprecated)]
-#[test]
-fn test_graphemes() {
-    use std::iter::order;
-
-    // official Unicode test data
-    // from http://www.unicode.org/Public/UCD/latest/ucd/auxiliary/GraphemeBreakTest.txt
-    let test_same: [(_, &[_]); 325] = [
-        ("\u{20}\u{20}", &["\u{20}", "\u{20}"]),
-        ("\u{20}\u{308}\u{20}", &["\u{20}\u{308}", "\u{20}"]),
-        ("\u{20}\u{D}", &["\u{20}", "\u{D}"]),
-        ("\u{20}\u{308}\u{D}", &["\u{20}\u{308}", "\u{D}"]),
-        ("\u{20}\u{A}", &["\u{20}", "\u{A}"]),
-        ("\u{20}\u{308}\u{A}", &["\u{20}\u{308}", "\u{A}"]),
-        ("\u{20}\u{1}", &["\u{20}", "\u{1}"]),
-        ("\u{20}\u{308}\u{1}", &["\u{20}\u{308}", "\u{1}"]),
-        ("\u{20}\u{300}", &["\u{20}\u{300}"]),
-        ("\u{20}\u{308}\u{300}", &["\u{20}\u{308}\u{300}"]),
-        ("\u{20}\u{1100}", &["\u{20}", "\u{1100}"]),
-        ("\u{20}\u{308}\u{1100}", &["\u{20}\u{308}", "\u{1100}"]),
-        ("\u{20}\u{1160}", &["\u{20}", "\u{1160}"]),
-        ("\u{20}\u{308}\u{1160}", &["\u{20}\u{308}", "\u{1160}"]),
-        ("\u{20}\u{11A8}", &["\u{20}", "\u{11A8}"]),
-        ("\u{20}\u{308}\u{11A8}", &["\u{20}\u{308}", "\u{11A8}"]),
-        ("\u{20}\u{AC00}", &["\u{20}", "\u{AC00}"]),
-        ("\u{20}\u{308}\u{AC00}", &["\u{20}\u{308}", "\u{AC00}"]),
-        ("\u{20}\u{AC01}", &["\u{20}", "\u{AC01}"]),
-        ("\u{20}\u{308}\u{AC01}", &["\u{20}\u{308}", "\u{AC01}"]),
-        ("\u{20}\u{1F1E6}", &["\u{20}", "\u{1F1E6}"]),
-        ("\u{20}\u{308}\u{1F1E6}", &["\u{20}\u{308}", "\u{1F1E6}"]),
-        ("\u{20}\u{378}", &["\u{20}", "\u{378}"]),
-        ("\u{20}\u{308}\u{378}", &["\u{20}\u{308}", "\u{378}"]),
-        ("\u{D}\u{20}", &["\u{D}", "\u{20}"]),
-        ("\u{D}\u{308}\u{20}", &["\u{D}", "\u{308}", "\u{20}"]),
-        ("\u{D}\u{D}", &["\u{D}", "\u{D}"]),
-        ("\u{D}\u{308}\u{D}", &["\u{D}", "\u{308}", "\u{D}"]),
-        ("\u{D}\u{A}", &["\u{D}\u{A}"]),
-        ("\u{D}\u{308}\u{A}", &["\u{D}", "\u{308}", "\u{A}"]),
-        ("\u{D}\u{1}", &["\u{D}", "\u{1}"]),
-        ("\u{D}\u{308}\u{1}", &["\u{D}", "\u{308}", "\u{1}"]),
-        ("\u{D}\u{300}", &["\u{D}", "\u{300}"]),
-        ("\u{D}\u{308}\u{300}", &["\u{D}", "\u{308}\u{300}"]),
-        ("\u{D}\u{903}", &["\u{D}", "\u{903}"]),
-        ("\u{D}\u{1100}", &["\u{D}", "\u{1100}"]),
-        ("\u{D}\u{308}\u{1100}", &["\u{D}", "\u{308}", "\u{1100}"]),
-        ("\u{D}\u{1160}", &["\u{D}", "\u{1160}"]),
-        ("\u{D}\u{308}\u{1160}", &["\u{D}", "\u{308}", "\u{1160}"]),
-        ("\u{D}\u{11A8}", &["\u{D}", "\u{11A8}"]),
-        ("\u{D}\u{308}\u{11A8}", &["\u{D}", "\u{308}", "\u{11A8}"]),
-        ("\u{D}\u{AC00}", &["\u{D}", "\u{AC00}"]),
-        ("\u{D}\u{308}\u{AC00}", &["\u{D}", "\u{308}", "\u{AC00}"]),
-        ("\u{D}\u{AC01}", &["\u{D}", "\u{AC01}"]),
-        ("\u{D}\u{308}\u{AC01}", &["\u{D}", "\u{308}", "\u{AC01}"]),
-        ("\u{D}\u{1F1E6}", &["\u{D}", "\u{1F1E6}"]),
-        ("\u{D}\u{308}\u{1F1E6}", &["\u{D}", "\u{308}", "\u{1F1E6}"]),
-        ("\u{D}\u{378}", &["\u{D}", "\u{378}"]),
-        ("\u{D}\u{308}\u{378}", &["\u{D}", "\u{308}", "\u{378}"]),
-        ("\u{A}\u{20}", &["\u{A}", "\u{20}"]),
-        ("\u{A}\u{308}\u{20}", &["\u{A}", "\u{308}", "\u{20}"]),
-        ("\u{A}\u{D}", &["\u{A}", "\u{D}"]),
-        ("\u{A}\u{308}\u{D}", &["\u{A}", "\u{308}", "\u{D}"]),
-        ("\u{A}\u{A}", &["\u{A}", "\u{A}"]),
-        ("\u{A}\u{308}\u{A}", &["\u{A}", "\u{308}", "\u{A}"]),
-        ("\u{A}\u{1}", &["\u{A}", "\u{1}"]),
-        ("\u{A}\u{308}\u{1}", &["\u{A}", "\u{308}", "\u{1}"]),
-        ("\u{A}\u{300}", &["\u{A}", "\u{300}"]),
-        ("\u{A}\u{308}\u{300}", &["\u{A}", "\u{308}\u{300}"]),
-        ("\u{A}\u{903}", &["\u{A}", "\u{903}"]),
-        ("\u{A}\u{1100}", &["\u{A}", "\u{1100}"]),
-        ("\u{A}\u{308}\u{1100}", &["\u{A}", "\u{308}", "\u{1100}"]),
-        ("\u{A}\u{1160}", &["\u{A}", "\u{1160}"]),
-        ("\u{A}\u{308}\u{1160}", &["\u{A}", "\u{308}", "\u{1160}"]),
-        ("\u{A}\u{11A8}", &["\u{A}", "\u{11A8}"]),
-        ("\u{A}\u{308}\u{11A8}", &["\u{A}", "\u{308}", "\u{11A8}"]),
-        ("\u{A}\u{AC00}", &["\u{A}", "\u{AC00}"]),
-        ("\u{A}\u{308}\u{AC00}", &["\u{A}", "\u{308}", "\u{AC00}"]),
-        ("\u{A}\u{AC01}", &["\u{A}", "\u{AC01}"]),
-        ("\u{A}\u{308}\u{AC01}", &["\u{A}", "\u{308}", "\u{AC01}"]),
-        ("\u{A}\u{1F1E6}", &["\u{A}", "\u{1F1E6}"]),
-        ("\u{A}\u{308}\u{1F1E6}", &["\u{A}", "\u{308}", "\u{1F1E6}"]),
-        ("\u{A}\u{378}", &["\u{A}", "\u{378}"]),
-        ("\u{A}\u{308}\u{378}", &["\u{A}", "\u{308}", "\u{378}"]),
-        ("\u{1}\u{20}", &["\u{1}", "\u{20}"]),
-        ("\u{1}\u{308}\u{20}", &["\u{1}", "\u{308}", "\u{20}"]),
-        ("\u{1}\u{D}", &["\u{1}", "\u{D}"]),
-        ("\u{1}\u{308}\u{D}", &["\u{1}", "\u{308}", "\u{D}"]),
-        ("\u{1}\u{A}", &["\u{1}", "\u{A}"]),
-        ("\u{1}\u{308}\u{A}", &["\u{1}", "\u{308}", "\u{A}"]),
-        ("\u{1}\u{1}", &["\u{1}", "\u{1}"]),
-        ("\u{1}\u{308}\u{1}", &["\u{1}", "\u{308}", "\u{1}"]),
-        ("\u{1}\u{300}", &["\u{1}", "\u{300}"]),
-        ("\u{1}\u{308}\u{300}", &["\u{1}", "\u{308}\u{300}"]),
-        ("\u{1}\u{903}", &["\u{1}", "\u{903}"]),
-        ("\u{1}\u{1100}", &["\u{1}", "\u{1100}"]),
-        ("\u{1}\u{308}\u{1100}", &["\u{1}", "\u{308}", "\u{1100}"]),
-        ("\u{1}\u{1160}", &["\u{1}", "\u{1160}"]),
-        ("\u{1}\u{308}\u{1160}", &["\u{1}", "\u{308}", "\u{1160}"]),
-        ("\u{1}\u{11A8}", &["\u{1}", "\u{11A8}"]),
-        ("\u{1}\u{308}\u{11A8}", &["\u{1}", "\u{308}", "\u{11A8}"]),
-        ("\u{1}\u{AC00}", &["\u{1}", "\u{AC00}"]),
-        ("\u{1}\u{308}\u{AC00}", &["\u{1}", "\u{308}", "\u{AC00}"]),
-        ("\u{1}\u{AC01}", &["\u{1}", "\u{AC01}"]),
-        ("\u{1}\u{308}\u{AC01}", &["\u{1}", "\u{308}", "\u{AC01}"]),
-        ("\u{1}\u{1F1E6}", &["\u{1}", "\u{1F1E6}"]),
-        ("\u{1}\u{308}\u{1F1E6}", &["\u{1}", "\u{308}", "\u{1F1E6}"]),
-        ("\u{1}\u{378}", &["\u{1}", "\u{378}"]),
-        ("\u{1}\u{308}\u{378}", &["\u{1}", "\u{308}", "\u{378}"]),
-        ("\u{300}\u{20}", &["\u{300}", "\u{20}"]),
-        ("\u{300}\u{308}\u{20}", &["\u{300}\u{308}", "\u{20}"]),
-        ("\u{300}\u{D}", &["\u{300}", "\u{D}"]),
-        ("\u{300}\u{308}\u{D}", &["\u{300}\u{308}", "\u{D}"]),
-        ("\u{300}\u{A}", &["\u{300}", "\u{A}"]),
-        ("\u{300}\u{308}\u{A}", &["\u{300}\u{308}", "\u{A}"]),
-        ("\u{300}\u{1}", &["\u{300}", "\u{1}"]),
-        ("\u{300}\u{308}\u{1}", &["\u{300}\u{308}", "\u{1}"]),
-        ("\u{300}\u{300}", &["\u{300}\u{300}"]),
-        ("\u{300}\u{308}\u{300}", &["\u{300}\u{308}\u{300}"]),
-        ("\u{300}\u{1100}", &["\u{300}", "\u{1100}"]),
-        ("\u{300}\u{308}\u{1100}", &["\u{300}\u{308}", "\u{1100}"]),
-        ("\u{300}\u{1160}", &["\u{300}", "\u{1160}"]),
-        ("\u{300}\u{308}\u{1160}", &["\u{300}\u{308}", "\u{1160}"]),
-        ("\u{300}\u{11A8}", &["\u{300}", "\u{11A8}"]),
-        ("\u{300}\u{308}\u{11A8}", &["\u{300}\u{308}", "\u{11A8}"]),
-        ("\u{300}\u{AC00}", &["\u{300}", "\u{AC00}"]),
-        ("\u{300}\u{308}\u{AC00}", &["\u{300}\u{308}", "\u{AC00}"]),
-        ("\u{300}\u{AC01}", &["\u{300}", "\u{AC01}"]),
-        ("\u{300}\u{308}\u{AC01}", &["\u{300}\u{308}", "\u{AC01}"]),
-        ("\u{300}\u{1F1E6}", &["\u{300}", "\u{1F1E6}"]),
-        ("\u{300}\u{308}\u{1F1E6}", &["\u{300}\u{308}", "\u{1F1E6}"]),
-        ("\u{300}\u{378}", &["\u{300}", "\u{378}"]),
-        ("\u{300}\u{308}\u{378}", &["\u{300}\u{308}", "\u{378}"]),
-        ("\u{903}\u{20}", &["\u{903}", "\u{20}"]),
-        ("\u{903}\u{308}\u{20}", &["\u{903}\u{308}", "\u{20}"]),
-        ("\u{903}\u{D}", &["\u{903}", "\u{D}"]),
-        ("\u{903}\u{308}\u{D}", &["\u{903}\u{308}", "\u{D}"]),
-        ("\u{903}\u{A}", &["\u{903}", "\u{A}"]),
-        ("\u{903}\u{308}\u{A}", &["\u{903}\u{308}", "\u{A}"]),
-        ("\u{903}\u{1}", &["\u{903}", "\u{1}"]),
-        ("\u{903}\u{308}\u{1}", &["\u{903}\u{308}", "\u{1}"]),
-        ("\u{903}\u{300}", &["\u{903}\u{300}"]),
-        ("\u{903}\u{308}\u{300}", &["\u{903}\u{308}\u{300}"]),
-        ("\u{903}\u{1100}", &["\u{903}", "\u{1100}"]),
-        ("\u{903}\u{308}\u{1100}", &["\u{903}\u{308}", "\u{1100}"]),
-        ("\u{903}\u{1160}", &["\u{903}", "\u{1160}"]),
-        ("\u{903}\u{308}\u{1160}", &["\u{903}\u{308}", "\u{1160}"]),
-        ("\u{903}\u{11A8}", &["\u{903}", "\u{11A8}"]),
-        ("\u{903}\u{308}\u{11A8}", &["\u{903}\u{308}", "\u{11A8}"]),
-        ("\u{903}\u{AC00}", &["\u{903}", "\u{AC00}"]),
-        ("\u{903}\u{308}\u{AC00}", &["\u{903}\u{308}", "\u{AC00}"]),
-        ("\u{903}\u{AC01}", &["\u{903}", "\u{AC01}"]),
-        ("\u{903}\u{308}\u{AC01}", &["\u{903}\u{308}", "\u{AC01}"]),
-        ("\u{903}\u{1F1E6}", &["\u{903}", "\u{1F1E6}"]),
-        ("\u{903}\u{308}\u{1F1E6}", &["\u{903}\u{308}", "\u{1F1E6}"]),
-        ("\u{903}\u{378}", &["\u{903}", "\u{378}"]),
-        ("\u{903}\u{308}\u{378}", &["\u{903}\u{308}", "\u{378}"]),
-        ("\u{1100}\u{20}", &["\u{1100}", "\u{20}"]),
-        ("\u{1100}\u{308}\u{20}", &["\u{1100}\u{308}", "\u{20}"]),
-        ("\u{1100}\u{D}", &["\u{1100}", "\u{D}"]),
-        ("\u{1100}\u{308}\u{D}", &["\u{1100}\u{308}", "\u{D}"]),
-        ("\u{1100}\u{A}", &["\u{1100}", "\u{A}"]),
-        ("\u{1100}\u{308}\u{A}", &["\u{1100}\u{308}", "\u{A}"]),
-        ("\u{1100}\u{1}", &["\u{1100}", "\u{1}"]),
-        ("\u{1100}\u{308}\u{1}", &["\u{1100}\u{308}", "\u{1}"]),
-        ("\u{1100}\u{300}", &["\u{1100}\u{300}"]),
-        ("\u{1100}\u{308}\u{300}", &["\u{1100}\u{308}\u{300}"]),
-        ("\u{1100}\u{1100}", &["\u{1100}\u{1100}"]),
-        ("\u{1100}\u{308}\u{1100}", &["\u{1100}\u{308}", "\u{1100}"]),
-        ("\u{1100}\u{1160}", &["\u{1100}\u{1160}"]),
-        ("\u{1100}\u{308}\u{1160}", &["\u{1100}\u{308}", "\u{1160}"]),
-        ("\u{1100}\u{11A8}", &["\u{1100}", "\u{11A8}"]),
-        ("\u{1100}\u{308}\u{11A8}", &["\u{1100}\u{308}", "\u{11A8}"]),
-        ("\u{1100}\u{AC00}", &["\u{1100}\u{AC00}"]),
-        ("\u{1100}\u{308}\u{AC00}", &["\u{1100}\u{308}", "\u{AC00}"]),
-        ("\u{1100}\u{AC01}", &["\u{1100}\u{AC01}"]),
-        ("\u{1100}\u{308}\u{AC01}", &["\u{1100}\u{308}", "\u{AC01}"]),
-        ("\u{1100}\u{1F1E6}", &["\u{1100}", "\u{1F1E6}"]),
-        ("\u{1100}\u{308}\u{1F1E6}", &["\u{1100}\u{308}", "\u{1F1E6}"]),
-        ("\u{1100}\u{378}", &["\u{1100}", "\u{378}"]),
-        ("\u{1100}\u{308}\u{378}", &["\u{1100}\u{308}", "\u{378}"]),
-        ("\u{1160}\u{20}", &["\u{1160}", "\u{20}"]),
-        ("\u{1160}\u{308}\u{20}", &["\u{1160}\u{308}", "\u{20}"]),
-        ("\u{1160}\u{D}", &["\u{1160}", "\u{D}"]),
-        ("\u{1160}\u{308}\u{D}", &["\u{1160}\u{308}", "\u{D}"]),
-        ("\u{1160}\u{A}", &["\u{1160}", "\u{A}"]),
-        ("\u{1160}\u{308}\u{A}", &["\u{1160}\u{308}", "\u{A}"]),
-        ("\u{1160}\u{1}", &["\u{1160}", "\u{1}"]),
-        ("\u{1160}\u{308}\u{1}", &["\u{1160}\u{308}", "\u{1}"]),
-        ("\u{1160}\u{300}", &["\u{1160}\u{300}"]),
-        ("\u{1160}\u{308}\u{300}", &["\u{1160}\u{308}\u{300}"]),
-        ("\u{1160}\u{1100}", &["\u{1160}", "\u{1100}"]),
-        ("\u{1160}\u{308}\u{1100}", &["\u{1160}\u{308}", "\u{1100}"]),
-        ("\u{1160}\u{1160}", &["\u{1160}\u{1160}"]),
-        ("\u{1160}\u{308}\u{1160}", &["\u{1160}\u{308}", "\u{1160}"]),
-        ("\u{1160}\u{11A8}", &["\u{1160}\u{11A8}"]),
-        ("\u{1160}\u{308}\u{11A8}", &["\u{1160}\u{308}", "\u{11A8}"]),
-        ("\u{1160}\u{AC00}", &["\u{1160}", "\u{AC00}"]),
-        ("\u{1160}\u{308}\u{AC00}", &["\u{1160}\u{308}", "\u{AC00}"]),
-        ("\u{1160}\u{AC01}", &["\u{1160}", "\u{AC01}"]),
-        ("\u{1160}\u{308}\u{AC01}", &["\u{1160}\u{308}", "\u{AC01}"]),
-        ("\u{1160}\u{1F1E6}", &["\u{1160}", "\u{1F1E6}"]),
-        ("\u{1160}\u{308}\u{1F1E6}", &["\u{1160}\u{308}", "\u{1F1E6}"]),
-        ("\u{1160}\u{378}", &["\u{1160}", "\u{378}"]),
-        ("\u{1160}\u{308}\u{378}", &["\u{1160}\u{308}", "\u{378}"]),
-        ("\u{11A8}\u{20}", &["\u{11A8}", "\u{20}"]),
-        ("\u{11A8}\u{308}\u{20}", &["\u{11A8}\u{308}", "\u{20}"]),
-        ("\u{11A8}\u{D}", &["\u{11A8}", "\u{D}"]),
-        ("\u{11A8}\u{308}\u{D}", &["\u{11A8}\u{308}", "\u{D}"]),
-        ("\u{11A8}\u{A}", &["\u{11A8}", "\u{A}"]),
-        ("\u{11A8}\u{308}\u{A}", &["\u{11A8}\u{308}", "\u{A}"]),
-        ("\u{11A8}\u{1}", &["\u{11A8}", "\u{1}"]),
-        ("\u{11A8}\u{308}\u{1}", &["\u{11A8}\u{308}", "\u{1}"]),
-        ("\u{11A8}\u{300}", &["\u{11A8}\u{300}"]),
-        ("\u{11A8}\u{308}\u{300}", &["\u{11A8}\u{308}\u{300}"]),
-        ("\u{11A8}\u{1100}", &["\u{11A8}", "\u{1100}"]),
-        ("\u{11A8}\u{308}\u{1100}", &["\u{11A8}\u{308}", "\u{1100}"]),
-        ("\u{11A8}\u{1160}", &["\u{11A8}", "\u{1160}"]),
-        ("\u{11A8}\u{308}\u{1160}", &["\u{11A8}\u{308}", "\u{1160}"]),
-        ("\u{11A8}\u{11A8}", &["\u{11A8}\u{11A8}"]),
-        ("\u{11A8}\u{308}\u{11A8}", &["\u{11A8}\u{308}", "\u{11A8}"]),
-        ("\u{11A8}\u{AC00}", &["\u{11A8}", "\u{AC00}"]),
-        ("\u{11A8}\u{308}\u{AC00}", &["\u{11A8}\u{308}", "\u{AC00}"]),
-        ("\u{11A8}\u{AC01}", &["\u{11A8}", "\u{AC01}"]),
-        ("\u{11A8}\u{308}\u{AC01}", &["\u{11A8}\u{308}", "\u{AC01}"]),
-        ("\u{11A8}\u{1F1E6}", &["\u{11A8}", "\u{1F1E6}"]),
-        ("\u{11A8}\u{308}\u{1F1E6}", &["\u{11A8}\u{308}", "\u{1F1E6}"]),
-        ("\u{11A8}\u{378}", &["\u{11A8}", "\u{378}"]),
-        ("\u{11A8}\u{308}\u{378}", &["\u{11A8}\u{308}", "\u{378}"]),
-        ("\u{AC00}\u{20}", &["\u{AC00}", "\u{20}"]),
-        ("\u{AC00}\u{308}\u{20}", &["\u{AC00}\u{308}", "\u{20}"]),
-        ("\u{AC00}\u{D}", &["\u{AC00}", "\u{D}"]),
-        ("\u{AC00}\u{308}\u{D}", &["\u{AC00}\u{308}", "\u{D}"]),
-        ("\u{AC00}\u{A}", &["\u{AC00}", "\u{A}"]),
-        ("\u{AC00}\u{308}\u{A}", &["\u{AC00}\u{308}", "\u{A}"]),
-        ("\u{AC00}\u{1}", &["\u{AC00}", "\u{1}"]),
-        ("\u{AC00}\u{308}\u{1}", &["\u{AC00}\u{308}", "\u{1}"]),
-        ("\u{AC00}\u{300}", &["\u{AC00}\u{300}"]),
-        ("\u{AC00}\u{308}\u{300}", &["\u{AC00}\u{308}\u{300}"]),
-        ("\u{AC00}\u{1100}", &["\u{AC00}", "\u{1100}"]),
-        ("\u{AC00}\u{308}\u{1100}", &["\u{AC00}\u{308}", "\u{1100}"]),
-        ("\u{AC00}\u{1160}", &["\u{AC00}\u{1160}"]),
-        ("\u{AC00}\u{308}\u{1160}", &["\u{AC00}\u{308}", "\u{1160}"]),
-        ("\u{AC00}\u{11A8}", &["\u{AC00}\u{11A8}"]),
-        ("\u{AC00}\u{308}\u{11A8}", &["\u{AC00}\u{308}", "\u{11A8}"]),
-        ("\u{AC00}\u{AC00}", &["\u{AC00}", "\u{AC00}"]),
-        ("\u{AC00}\u{308}\u{AC00}", &["\u{AC00}\u{308}", "\u{AC00}"]),
-        ("\u{AC00}\u{AC01}", &["\u{AC00}", "\u{AC01}"]),
-        ("\u{AC00}\u{308}\u{AC01}", &["\u{AC00}\u{308}", "\u{AC01}"]),
-        ("\u{AC00}\u{1F1E6}", &["\u{AC00}", "\u{1F1E6}"]),
-        ("\u{AC00}\u{308}\u{1F1E6}", &["\u{AC00}\u{308}", "\u{1F1E6}"]),
-        ("\u{AC00}\u{378}", &["\u{AC00}", "\u{378}"]),
-        ("\u{AC00}\u{308}\u{378}", &["\u{AC00}\u{308}", "\u{378}"]),
-        ("\u{AC01}\u{20}", &["\u{AC01}", "\u{20}"]),
-        ("\u{AC01}\u{308}\u{20}", &["\u{AC01}\u{308}", "\u{20}"]),
-        ("\u{AC01}\u{D}", &["\u{AC01}", "\u{D}"]),
-        ("\u{AC01}\u{308}\u{D}", &["\u{AC01}\u{308}", "\u{D}"]),
-        ("\u{AC01}\u{A}", &["\u{AC01}", "\u{A}"]),
-        ("\u{AC01}\u{308}\u{A}", &["\u{AC01}\u{308}", "\u{A}"]),
-        ("\u{AC01}\u{1}", &["\u{AC01}", "\u{1}"]),
-        ("\u{AC01}\u{308}\u{1}", &["\u{AC01}\u{308}", "\u{1}"]),
-        ("\u{AC01}\u{300}", &["\u{AC01}\u{300}"]),
-        ("\u{AC01}\u{308}\u{300}", &["\u{AC01}\u{308}\u{300}"]),
-        ("\u{AC01}\u{1100}", &["\u{AC01}", "\u{1100}"]),
-        ("\u{AC01}\u{308}\u{1100}", &["\u{AC01}\u{308}", "\u{1100}"]),
-        ("\u{AC01}\u{1160}", &["\u{AC01}", "\u{1160}"]),
-        ("\u{AC01}\u{308}\u{1160}", &["\u{AC01}\u{308}", "\u{1160}"]),
-        ("\u{AC01}\u{11A8}", &["\u{AC01}\u{11A8}"]),
-        ("\u{AC01}\u{308}\u{11A8}", &["\u{AC01}\u{308}", "\u{11A8}"]),
-        ("\u{AC01}\u{AC00}", &["\u{AC01}", "\u{AC00}"]),
-        ("\u{AC01}\u{308}\u{AC00}", &["\u{AC01}\u{308}", "\u{AC00}"]),
-        ("\u{AC01}\u{AC01}", &["\u{AC01}", "\u{AC01}"]),
-        ("\u{AC01}\u{308}\u{AC01}", &["\u{AC01}\u{308}", "\u{AC01}"]),
-        ("\u{AC01}\u{1F1E6}", &["\u{AC01}", "\u{1F1E6}"]),
-        ("\u{AC01}\u{308}\u{1F1E6}", &["\u{AC01}\u{308}", "\u{1F1E6}"]),
-        ("\u{AC01}\u{378}", &["\u{AC01}", "\u{378}"]),
-        ("\u{AC01}\u{308}\u{378}", &["\u{AC01}\u{308}", "\u{378}"]),
-        ("\u{1F1E6}\u{20}", &["\u{1F1E6}", "\u{20}"]),
-        ("\u{1F1E6}\u{308}\u{20}", &["\u{1F1E6}\u{308}", "\u{20}"]),
-        ("\u{1F1E6}\u{D}", &["\u{1F1E6}", "\u{D}"]),
-        ("\u{1F1E6}\u{308}\u{D}", &["\u{1F1E6}\u{308}", "\u{D}"]),
-        ("\u{1F1E6}\u{A}", &["\u{1F1E6}", "\u{A}"]),
-        ("\u{1F1E6}\u{308}\u{A}", &["\u{1F1E6}\u{308}", "\u{A}"]),
-        ("\u{1F1E6}\u{1}", &["\u{1F1E6}", "\u{1}"]),
-        ("\u{1F1E6}\u{308}\u{1}", &["\u{1F1E6}\u{308}", "\u{1}"]),
-        ("\u{1F1E6}\u{300}", &["\u{1F1E6}\u{300}"]),
-        ("\u{1F1E6}\u{308}\u{300}", &["\u{1F1E6}\u{308}\u{300}"]),
-        ("\u{1F1E6}\u{1100}", &["\u{1F1E6}", "\u{1100}"]),
-        ("\u{1F1E6}\u{308}\u{1100}", &["\u{1F1E6}\u{308}", "\u{1100}"]),
-        ("\u{1F1E6}\u{1160}", &["\u{1F1E6}", "\u{1160}"]),
-        ("\u{1F1E6}\u{308}\u{1160}", &["\u{1F1E6}\u{308}", "\u{1160}"]),
-        ("\u{1F1E6}\u{11A8}", &["\u{1F1E6}", "\u{11A8}"]),
-        ("\u{1F1E6}\u{308}\u{11A8}", &["\u{1F1E6}\u{308}", "\u{11A8}"]),
-        ("\u{1F1E6}\u{AC00}", &["\u{1F1E6}", "\u{AC00}"]),
-        ("\u{1F1E6}\u{308}\u{AC00}", &["\u{1F1E6}\u{308}", "\u{AC00}"]),
-        ("\u{1F1E6}\u{AC01}", &["\u{1F1E6}", "\u{AC01}"]),
-        ("\u{1F1E6}\u{308}\u{AC01}", &["\u{1F1E6}\u{308}", "\u{AC01}"]),
-        ("\u{1F1E6}\u{1F1E6}", &["\u{1F1E6}\u{1F1E6}"]),
-        ("\u{1F1E6}\u{308}\u{1F1E6}", &["\u{1F1E6}\u{308}", "\u{1F1E6}"]),
-        ("\u{1F1E6}\u{378}", &["\u{1F1E6}", "\u{378}"]),
-        ("\u{1F1E6}\u{308}\u{378}", &["\u{1F1E6}\u{308}", "\u{378}"]),
-        ("\u{378}\u{20}", &["\u{378}", "\u{20}"]),
-        ("\u{378}\u{308}\u{20}", &["\u{378}\u{308}", "\u{20}"]),
-        ("\u{378}\u{D}", &["\u{378}", "\u{D}"]),
-        ("\u{378}\u{308}\u{D}", &["\u{378}\u{308}", "\u{D}"]),
-        ("\u{378}\u{A}", &["\u{378}", "\u{A}"]),
-        ("\u{378}\u{308}\u{A}", &["\u{378}\u{308}", "\u{A}"]),
-        ("\u{378}\u{1}", &["\u{378}", "\u{1}"]),
-        ("\u{378}\u{308}\u{1}", &["\u{378}\u{308}", "\u{1}"]),
-        ("\u{378}\u{300}", &["\u{378}\u{300}"]),
-        ("\u{378}\u{308}\u{300}", &["\u{378}\u{308}\u{300}"]),
-        ("\u{378}\u{1100}", &["\u{378}", "\u{1100}"]),
-        ("\u{378}\u{308}\u{1100}", &["\u{378}\u{308}", "\u{1100}"]),
-        ("\u{378}\u{1160}", &["\u{378}", "\u{1160}"]),
-        ("\u{378}\u{308}\u{1160}", &["\u{378}\u{308}", "\u{1160}"]),
-        ("\u{378}\u{11A8}", &["\u{378}", "\u{11A8}"]),
-        ("\u{378}\u{308}\u{11A8}", &["\u{378}\u{308}", "\u{11A8}"]),
-        ("\u{378}\u{AC00}", &["\u{378}", "\u{AC00}"]),
-        ("\u{378}\u{308}\u{AC00}", &["\u{378}\u{308}", "\u{AC00}"]),
-        ("\u{378}\u{AC01}", &["\u{378}", "\u{AC01}"]),
-        ("\u{378}\u{308}\u{AC01}", &["\u{378}\u{308}", "\u{AC01}"]),
-        ("\u{378}\u{1F1E6}", &["\u{378}", "\u{1F1E6}"]),
-        ("\u{378}\u{308}\u{1F1E6}", &["\u{378}\u{308}", "\u{1F1E6}"]),
-        ("\u{378}\u{378}", &["\u{378}", "\u{378}"]),
-        ("\u{378}\u{308}\u{378}", &["\u{378}\u{308}", "\u{378}"]),
-        ("\u{61}\u{1F1E6}\u{62}", &["\u{61}", "\u{1F1E6}", "\u{62}"]),
-        ("\u{1F1F7}\u{1F1FA}", &["\u{1F1F7}\u{1F1FA}"]),
-        ("\u{1F1F7}\u{1F1FA}\u{1F1F8}", &["\u{1F1F7}\u{1F1FA}\u{1F1F8}"]),
-        ("\u{1F1F7}\u{1F1FA}\u{1F1F8}\u{1F1EA}",
-        &["\u{1F1F7}\u{1F1FA}\u{1F1F8}\u{1F1EA}"]),
-        ("\u{1F1F7}\u{1F1FA}\u{200B}\u{1F1F8}\u{1F1EA}",
-         &["\u{1F1F7}\u{1F1FA}", "\u{200B}", "\u{1F1F8}\u{1F1EA}"]),
-        ("\u{1F1E6}\u{1F1E7}\u{1F1E8}", &["\u{1F1E6}\u{1F1E7}\u{1F1E8}"]),
-        ("\u{1F1E6}\u{200D}\u{1F1E7}\u{1F1E8}", &["\u{1F1E6}\u{200D}",
-         "\u{1F1E7}\u{1F1E8}"]),
-        ("\u{1F1E6}\u{1F1E7}\u{200D}\u{1F1E8}",
-         &["\u{1F1E6}\u{1F1E7}\u{200D}", "\u{1F1E8}"]),
-        ("\u{20}\u{200D}\u{646}", &["\u{20}\u{200D}", "\u{646}"]),
-        ("\u{646}\u{200D}\u{20}", &["\u{646}\u{200D}", "\u{20}"]),
-    ];
-
-    let test_diff: [(_, &[_], &[_]); 23] = [
-        ("\u{20}\u{903}", &["\u{20}\u{903}"], &["\u{20}", "\u{903}"]), ("\u{20}\u{308}\u{903}",
-        &["\u{20}\u{308}\u{903}"], &["\u{20}\u{308}", "\u{903}"]), ("\u{D}\u{308}\u{903}",
-        &["\u{D}", "\u{308}\u{903}"], &["\u{D}", "\u{308}", "\u{903}"]), ("\u{A}\u{308}\u{903}",
-        &["\u{A}", "\u{308}\u{903}"], &["\u{A}", "\u{308}", "\u{903}"]), ("\u{1}\u{308}\u{903}",
-        &["\u{1}", "\u{308}\u{903}"], &["\u{1}", "\u{308}", "\u{903}"]), ("\u{300}\u{903}",
-        &["\u{300}\u{903}"], &["\u{300}", "\u{903}"]), ("\u{300}\u{308}\u{903}",
-        &["\u{300}\u{308}\u{903}"], &["\u{300}\u{308}", "\u{903}"]), ("\u{903}\u{903}",
-        &["\u{903}\u{903}"], &["\u{903}", "\u{903}"]), ("\u{903}\u{308}\u{903}",
-        &["\u{903}\u{308}\u{903}"], &["\u{903}\u{308}", "\u{903}"]), ("\u{1100}\u{903}",
-        &["\u{1100}\u{903}"], &["\u{1100}", "\u{903}"]), ("\u{1100}\u{308}\u{903}",
-        &["\u{1100}\u{308}\u{903}"], &["\u{1100}\u{308}", "\u{903}"]), ("\u{1160}\u{903}",
-        &["\u{1160}\u{903}"], &["\u{1160}", "\u{903}"]), ("\u{1160}\u{308}\u{903}",
-        &["\u{1160}\u{308}\u{903}"], &["\u{1160}\u{308}", "\u{903}"]), ("\u{11A8}\u{903}",
-        &["\u{11A8}\u{903}"], &["\u{11A8}", "\u{903}"]), ("\u{11A8}\u{308}\u{903}",
-        &["\u{11A8}\u{308}\u{903}"], &["\u{11A8}\u{308}", "\u{903}"]), ("\u{AC00}\u{903}",
-        &["\u{AC00}\u{903}"], &["\u{AC00}", "\u{903}"]), ("\u{AC00}\u{308}\u{903}",
-        &["\u{AC00}\u{308}\u{903}"], &["\u{AC00}\u{308}", "\u{903}"]), ("\u{AC01}\u{903}",
-        &["\u{AC01}\u{903}"], &["\u{AC01}", "\u{903}"]), ("\u{AC01}\u{308}\u{903}",
-        &["\u{AC01}\u{308}\u{903}"], &["\u{AC01}\u{308}", "\u{903}"]), ("\u{1F1E6}\u{903}",
-        &["\u{1F1E6}\u{903}"], &["\u{1F1E6}", "\u{903}"]), ("\u{1F1E6}\u{308}\u{903}",
-        &["\u{1F1E6}\u{308}\u{903}"], &["\u{1F1E6}\u{308}", "\u{903}"]), ("\u{378}\u{903}",
-        &["\u{378}\u{903}"], &["\u{378}", "\u{903}"]), ("\u{378}\u{308}\u{903}",
-        &["\u{378}\u{308}\u{903}"], &["\u{378}\u{308}", "\u{903}"]),
-    ];
-
-    for &(s, g) in &test_same[..] {
-        // test forward iterator
-        assert!(order::equals(s.graphemes(true), g.iter().cloned()));
-        assert!(order::equals(s.graphemes(false), g.iter().cloned()));
-
-        // test reverse iterator
-        assert!(order::equals(s.graphemes(true).rev(), g.iter().rev().cloned()));
-        assert!(order::equals(s.graphemes(false).rev(), g.iter().rev().cloned()));
-    }
-
-    for &(s, gt, gf) in &test_diff {
-        // test forward iterator
-        assert!(order::equals(s.graphemes(true), gt.iter().cloned()));
-        assert!(order::equals(s.graphemes(false), gf.iter().cloned()));
-
-        // test reverse iterator
-        assert!(order::equals(s.graphemes(true).rev(), gt.iter().rev().cloned()));
-        assert!(order::equals(s.graphemes(false).rev(), gf.iter().rev().cloned()));
-    }
-
-    // test the indices iterators
-    let s = "a̐éö̲\r\n";
-    let gr_inds = s.grapheme_indices(true).collect::<Vec<(usize, &str)>>();
-    let b: &[_] = &[(0, "a̐"), (3, "é"), (6, "ö̲"), (11, "\r\n")];
-    assert_eq!(gr_inds, b);
-    let gr_inds = s.grapheme_indices(true).rev().collect::<Vec<(usize, &str)>>();
-    let b: &[_] = &[(11, "\r\n"), (6, "ö̲"), (3, "é"), (0, "a̐")];
-    assert_eq!(gr_inds, b);
-    let mut gr_inds_iter = s.grapheme_indices(true);
-    {
-        let gr_inds = gr_inds_iter.by_ref();
-        let e1 = gr_inds.size_hint();
-        assert_eq!(e1, (1, Some(13)));
-        let c = gr_inds.count();
-        assert_eq!(c, 4);
-    }
-    let e2 = gr_inds_iter.size_hint();
-    assert_eq!(e2, (0, Some(0)));
-
-    // make sure the reverse iterator does the right thing with "\n" at beginning of string
-    let s = "\n\r\n\r";
-    let gr = s.graphemes(true).rev().collect::<Vec<&str>>();
-    let b: &[_] = &["\r", "\r\n", "\n"];
-    assert_eq!(gr, b);
-}
-
 #[test]
 fn test_splitator() {
     fn t(s: &str, sep: &str, u: &[&str]) {
diff --git a/src/libcollectionstest/vec.rs b/src/libcollectionstest/vec.rs
index 7b340dc5be4..554be72e426 100644
--- a/src/libcollectionstest/vec.rs
+++ b/src/libcollectionstest/vec.rs
@@ -255,23 +255,6 @@ fn test_zip_unzip() {
 }
 
 #[test]
-fn test_unsafe_ptrs() {
-    unsafe {
-        // Test on-stack copy-from-buf.
-        let a = [1, 2, 3];
-        let ptr = a.as_ptr();
-        let b = Vec::from_raw_buf(ptr, 3);
-        assert_eq!(b, [1, 2, 3]);
-
-        // Test on-heap copy-from-buf.
-        let c = vec![1, 2, 3, 4, 5];
-        let ptr = c.as_ptr();
-        let d = Vec::from_raw_buf(ptr, 5);
-        assert_eq!(d, [1, 2, 3, 4, 5]);
-    }
-}
-
-#[test]
 fn test_vec_truncate_drop() {
     static mut drops: u32 = 0;
     struct Elem(i32);
@@ -323,7 +306,7 @@ fn test_index_out_of_bounds() {
 #[should_panic]
 fn test_slice_out_of_bounds_1() {
     let x = vec![1, 2, 3, 4, 5];
-    &x[-1..];
+    &x[!0..];
 }
 
 #[test]
@@ -337,7 +320,7 @@ fn test_slice_out_of_bounds_2() {
 #[should_panic]
 fn test_slice_out_of_bounds_3() {
     let x = vec![1, 2, 3, 4, 5];
-    &x[-1..4];
+    &x[!0..4];
 }
 
 #[test]
@@ -362,67 +345,6 @@ fn test_swap_remove_empty() {
 }
 
 #[test]
-fn test_move_iter_unwrap() {
-    let mut vec = Vec::with_capacity(7);
-    vec.push(1);
-    vec.push(2);
-    let ptr = vec.as_ptr();
-    vec = vec.into_iter().into_inner();
-    assert_eq!(vec.as_ptr(), ptr);
-    assert_eq!(vec.capacity(), 7);
-    assert_eq!(vec.len(), 0);
-}
-
-#[test]
-#[should_panic]
-fn test_map_in_place_incompatible_types_fail() {
-    let v = vec![0, 1, 2];
-    v.map_in_place(|_| ());
-}
-
-#[test]
-fn test_map_in_place() {
-    let v = vec![0, 1, 2];
-    assert_eq!(v.map_in_place(|i: u32| i as i32 - 1), [-1, 0, 1]);
-}
-
-#[test]
-fn test_map_in_place_zero_sized() {
-    let v = vec![(), ()];
-    #[derive(PartialEq, Debug)]
-    struct ZeroSized;
-    assert_eq!(v.map_in_place(|_| ZeroSized), [ZeroSized, ZeroSized]);
-}
-
-#[test]
-fn test_map_in_place_zero_drop_count() {
-    use std::sync::atomic::{AtomicUsize, Ordering};
-
-    #[derive(Clone, PartialEq, Debug)]
-    struct Nothing;
-    impl Drop for Nothing { fn drop(&mut self) { } }
-
-    #[derive(Clone, PartialEq, Debug)]
-    struct ZeroSized;
-    impl Drop for ZeroSized {
-        fn drop(&mut self) {
-            DROP_COUNTER.fetch_add(1, Ordering::Relaxed);
-        }
-    }
-    const NUM_ELEMENTS: usize = 2;
-    static DROP_COUNTER: AtomicUsize = AtomicUsize::new(0);
-
-    let v = repeat(Nothing).take(NUM_ELEMENTS).collect::<Vec<_>>();
-
-    DROP_COUNTER.store(0, Ordering::Relaxed);
-
-    let v = v.map_in_place(|_| ZeroSized);
-    assert_eq!(DROP_COUNTER.load(Ordering::Relaxed), 0);
-    drop(v);
-    assert_eq!(DROP_COUNTER.load(Ordering::Relaxed), NUM_ELEMENTS);
-}
-
-#[test]
 fn test_move_items() {
     let vec = vec![1, 2, 3];
     let mut vec2 = vec![];
diff --git a/src/libcollectionstest/vec_deque.rs b/src/libcollectionstest/vec_deque.rs
index 95368de3bf3..1931e372aeb 100644
--- a/src/libcollectionstest/vec_deque.rs
+++ b/src/libcollectionstest/vec_deque.rs
@@ -10,7 +10,6 @@
 
 use std::collections::VecDeque;
 use std::fmt::Debug;
-use std::hash::{SipHasher, self};
 
 use test;
 
@@ -603,7 +602,7 @@ fn test_hash() {
   y.push_back(2);
   y.push_back(3);
 
-  assert!(hash::hash::<_, SipHasher>(&x) == hash::hash::<_, SipHasher>(&y));
+  assert!(::hash(&x) == ::hash(&y));
 }
 
 #[test]
diff --git a/src/libcollectionstest/vec_map.rs b/src/libcollectionstest/vec_map.rs
deleted file mode 100644
index 3ab32323603..00000000000
--- a/src/libcollectionstest/vec_map.rs
+++ /dev/null
@@ -1,526 +0,0 @@
-// Copyright 2012-2014 The Rust Project Developers. See the COPYRIGHT
-// file at the top-level directory of this distribution and at
-// http://rust-lang.org/COPYRIGHT.
-//
-// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
-// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
-// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
-// option. This file may not be copied, modified, or distributed
-// except according to those terms.
-
-use std::collections::VecMap;
-use std::collections::vec_map::Entry::{Occupied, Vacant};
-use std::hash::{SipHasher, hash};
-
-#[test]
-fn test_get_mut() {
-    let mut m = VecMap::new();
-    assert!(m.insert(1, 12).is_none());
-    assert!(m.insert(2, 8).is_none());
-    assert!(m.insert(5, 14).is_none());
-    let new = 100;
-    match m.get_mut(&5) {
-        None => panic!(), Some(x) => *x = new
-    }
-    assert_eq!(m.get(&5), Some(&new));
-}
-
-#[test]
-fn test_len() {
-    let mut map = VecMap::new();
-    assert_eq!(map.len(), 0);
-    assert!(map.is_empty());
-    assert!(map.insert(5, 20).is_none());
-    assert_eq!(map.len(), 1);
-    assert!(!map.is_empty());
-    assert!(map.insert(11, 12).is_none());
-    assert_eq!(map.len(), 2);
-    assert!(!map.is_empty());
-    assert!(map.insert(14, 22).is_none());
-    assert_eq!(map.len(), 3);
-    assert!(!map.is_empty());
-}
-
-#[test]
-fn test_clear() {
-    let mut map = VecMap::new();
-    assert!(map.insert(5, 20).is_none());
-    assert!(map.insert(11, 12).is_none());
-    assert!(map.insert(14, 22).is_none());
-    map.clear();
-    assert!(map.is_empty());
-    assert!(map.get(&5).is_none());
-    assert!(map.get(&11).is_none());
-    assert!(map.get(&14).is_none());
-}
-
-#[test]
-fn test_insert() {
-    let mut m = VecMap::new();
-    assert_eq!(m.insert(1, 2), None);
-    assert_eq!(m.insert(1, 3), Some(2));
-    assert_eq!(m.insert(1, 4), Some(3));
-}
-
-#[test]
-fn test_remove() {
-    let mut m = VecMap::new();
-    m.insert(1, 2);
-    assert_eq!(m.remove(&1), Some(2));
-    assert_eq!(m.remove(&1), None);
-}
-
-#[test]
-fn test_keys() {
-    let mut map = VecMap::new();
-    map.insert(1, 'a');
-    map.insert(2, 'b');
-    map.insert(3, 'c');
-    let keys: Vec<_> = map.keys().collect();
-    assert_eq!(keys.len(), 3);
-    assert!(keys.contains(&1));
-    assert!(keys.contains(&2));
-    assert!(keys.contains(&3));
-}
-
-#[test]
-fn test_values() {
-    let mut map = VecMap::new();
-    map.insert(1, 'a');
-    map.insert(2, 'b');
-    map.insert(3, 'c');
-    let values: Vec<_> = map.values().cloned().collect();
-    assert_eq!(values.len(), 3);
-    assert!(values.contains(&'a'));
-    assert!(values.contains(&'b'));
-    assert!(values.contains(&'c'));
-}
-
-#[test]
-fn test_iterator() {
-    let mut m = VecMap::new();
-
-    assert!(m.insert(0, 1).is_none());
-    assert!(m.insert(1, 2).is_none());
-    assert!(m.insert(3, 5).is_none());
-    assert!(m.insert(6, 10).is_none());
-    assert!(m.insert(10, 11).is_none());
-
-    let mut it = m.iter();
-    assert_eq!(it.size_hint(), (0, Some(11)));
-    assert_eq!(it.next().unwrap(), (0, &1));
-    assert_eq!(it.size_hint(), (0, Some(10)));
-    assert_eq!(it.next().unwrap(), (1, &2));
-    assert_eq!(it.size_hint(), (0, Some(9)));
-    assert_eq!(it.next().unwrap(), (3, &5));
-    assert_eq!(it.size_hint(), (0, Some(7)));
-    assert_eq!(it.next().unwrap(), (6, &10));
-    assert_eq!(it.size_hint(), (0, Some(4)));
-    assert_eq!(it.next().unwrap(), (10, &11));
-    assert_eq!(it.size_hint(), (0, Some(0)));
-    assert!(it.next().is_none());
-}
-
-#[test]
-fn test_iterator_size_hints() {
-    let mut m = VecMap::new();
-
-    assert!(m.insert(0, 1).is_none());
-    assert!(m.insert(1, 2).is_none());
-    assert!(m.insert(3, 5).is_none());
-    assert!(m.insert(6, 10).is_none());
-    assert!(m.insert(10, 11).is_none());
-
-    assert_eq!(m.iter().size_hint(), (0, Some(11)));
-    assert_eq!(m.iter().rev().size_hint(), (0, Some(11)));
-    assert_eq!(m.iter_mut().size_hint(), (0, Some(11)));
-    assert_eq!(m.iter_mut().rev().size_hint(), (0, Some(11)));
-}
-
-#[test]
-fn test_mut_iterator() {
-    let mut m = VecMap::new();
-
-    assert!(m.insert(0, 1).is_none());
-    assert!(m.insert(1, 2).is_none());
-    assert!(m.insert(3, 5).is_none());
-    assert!(m.insert(6, 10).is_none());
-    assert!(m.insert(10, 11).is_none());
-
-    for (k, v) in &mut m {
-        *v += k as isize;
-    }
-
-    let mut it = m.iter();
-    assert_eq!(it.next().unwrap(), (0, &1));
-    assert_eq!(it.next().unwrap(), (1, &3));
-    assert_eq!(it.next().unwrap(), (3, &8));
-    assert_eq!(it.next().unwrap(), (6, &16));
-    assert_eq!(it.next().unwrap(), (10, &21));
-    assert!(it.next().is_none());
-}
-
-#[test]
-fn test_rev_iterator() {
-    let mut m = VecMap::new();
-
-    assert!(m.insert(0, 1).is_none());
-    assert!(m.insert(1, 2).is_none());
-    assert!(m.insert(3, 5).is_none());
-    assert!(m.insert(6, 10).is_none());
-    assert!(m.insert(10, 11).is_none());
-
-    let mut it = m.iter().rev();
-    assert_eq!(it.next().unwrap(), (10, &11));
-    assert_eq!(it.next().unwrap(), (6, &10));
-    assert_eq!(it.next().unwrap(), (3, &5));
-    assert_eq!(it.next().unwrap(), (1, &2));
-    assert_eq!(it.next().unwrap(), (0, &1));
-    assert!(it.next().is_none());
-}
-
-#[test]
-fn test_mut_rev_iterator() {
-    let mut m = VecMap::new();
-
-    assert!(m.insert(0, 1).is_none());
-    assert!(m.insert(1, 2).is_none());
-    assert!(m.insert(3, 5).is_none());
-    assert!(m.insert(6, 10).is_none());
-    assert!(m.insert(10, 11).is_none());
-
-    for (k, v) in m.iter_mut().rev() {
-        *v += k as isize;
-    }
-
-    let mut it = m.iter();
-    assert_eq!(it.next().unwrap(), (0, &1));
-    assert_eq!(it.next().unwrap(), (1, &3));
-    assert_eq!(it.next().unwrap(), (3, &8));
-    assert_eq!(it.next().unwrap(), (6, &16));
-    assert_eq!(it.next().unwrap(), (10, &21));
-    assert!(it.next().is_none());
-}
-
-#[test]
-fn test_move_iter() {
-    let mut m: VecMap<Box<_>> = VecMap::new();
-    m.insert(1, box 2);
-    let mut called = false;
-    for (k, v) in m {
-        assert!(!called);
-        called = true;
-        assert_eq!(k, 1);
-        assert_eq!(v, box 2);
-    }
-    assert!(called);
-}
-
-#[test]
-fn test_drain_iterator() {
-    let mut map = VecMap::new();
-    map.insert(1, "a");
-    map.insert(3, "c");
-    map.insert(2, "b");
-
-    let vec: Vec<_> = map.drain().collect();
-
-    assert_eq!(vec, [(1, "a"), (2, "b"), (3, "c")]);
-    assert_eq!(map.len(), 0);
-}
-
-#[test]
-fn test_append() {
-    let mut a = VecMap::new();
-    a.insert(1, "a");
-    a.insert(2, "b");
-    a.insert(3, "c");
-
-    let mut b = VecMap::new();
-    b.insert(3, "d");  // Overwrite element from a
-    b.insert(4, "e");
-    b.insert(5, "f");
-
-    a.append(&mut b);
-
-    assert_eq!(a.len(), 5);
-    assert_eq!(b.len(), 0);
-    // Capacity shouldn't change for possible reuse
-    assert!(b.capacity() >= 4);
-
-    assert_eq!(a[1], "a");
-    assert_eq!(a[2], "b");
-    assert_eq!(a[3], "d");
-    assert_eq!(a[4], "e");
-    assert_eq!(a[5], "f");
-}
-
-#[test]
-fn test_split_off() {
-    // Split within the key range
-    let mut a = VecMap::new();
-    a.insert(1, "a");
-    a.insert(2, "b");
-    a.insert(3, "c");
-    a.insert(4, "d");
-
-    let b = a.split_off(3);
-
-    assert_eq!(a.len(), 2);
-    assert_eq!(b.len(), 2);
-
-    assert_eq!(a[1], "a");
-    assert_eq!(a[2], "b");
-
-    assert_eq!(b[3], "c");
-    assert_eq!(b[4], "d");
-
-    // Split at 0
-    a.clear();
-    a.insert(1, "a");
-    a.insert(2, "b");
-    a.insert(3, "c");
-    a.insert(4, "d");
-
-    let b = a.split_off(0);
-
-    assert_eq!(a.len(), 0);
-    assert_eq!(b.len(), 4);
-    assert_eq!(b[1], "a");
-    assert_eq!(b[2], "b");
-    assert_eq!(b[3], "c");
-    assert_eq!(b[4], "d");
-
-    // Split behind max_key
-    a.clear();
-    a.insert(1, "a");
-    a.insert(2, "b");
-    a.insert(3, "c");
-    a.insert(4, "d");
-
-    let b = a.split_off(5);
-
-    assert_eq!(a.len(), 4);
-    assert_eq!(b.len(), 0);
-    assert_eq!(a[1], "a");
-    assert_eq!(a[2], "b");
-    assert_eq!(a[3], "c");
-    assert_eq!(a[4], "d");
-}
-
-#[test]
-fn test_show() {
-    let mut map = VecMap::new();
-    let empty = VecMap::<i32>::new();
-
-    map.insert(1, 2);
-    map.insert(3, 4);
-
-    let map_str = format!("{:?}", map);
-    assert!(map_str == "{1: 2, 3: 4}" || map_str == "{3: 4, 1: 2}");
-    assert_eq!(format!("{:?}", empty), "{}");
-}
-
-#[test]
-fn test_clone() {
-    let mut a = VecMap::new();
-
-    a.insert(1, 'x');
-    a.insert(4, 'y');
-    a.insert(6, 'z');
-
-    assert!(a.clone() == a);
-}
-
-#[test]
-fn test_eq() {
-    let mut a = VecMap::new();
-    let mut b = VecMap::new();
-
-    assert!(a == b);
-    assert!(a.insert(0, 5).is_none());
-    assert!(a != b);
-    assert!(b.insert(0, 4).is_none());
-    assert!(a != b);
-    assert!(a.insert(5, 19).is_none());
-    assert!(a != b);
-    assert!(!b.insert(0, 5).is_none());
-    assert!(a != b);
-    assert!(b.insert(5, 19).is_none());
-    assert!(a == b);
-
-    a = VecMap::new();
-    b = VecMap::with_capacity(1);
-    assert!(a == b);
-}
-
-#[test]
-fn test_lt() {
-    let mut a = VecMap::new();
-    let mut b = VecMap::new();
-
-    assert!(!(a < b) && !(b < a));
-    assert!(b.insert(2, 5).is_none());
-    assert!(a < b);
-    assert!(a.insert(2, 7).is_none());
-    assert!(!(a < b) && b < a);
-    assert!(b.insert(1, 0).is_none());
-    assert!(b < a);
-    assert!(a.insert(0, 6).is_none());
-    assert!(a < b);
-    assert!(a.insert(6, 2).is_none());
-    assert!(a < b && !(b < a));
-}
-
-#[test]
-fn test_ord() {
-    let mut a = VecMap::new();
-    let mut b = VecMap::new();
-
-    assert!(a <= b && a >= b);
-    assert!(a.insert(1, 1).is_none());
-    assert!(a > b && a >= b);
-    assert!(b < a && b <= a);
-    assert!(b.insert(2, 2).is_none());
-    assert!(b > a && b >= a);
-    assert!(a < b && a <= b);
-}
-
-#[test]
-fn test_hash() {
-    let mut x = VecMap::new();
-    let mut y = VecMap::new();
-
-    assert!(hash::<_, SipHasher>(&x) == hash::<_, SipHasher>(&y));
-    x.insert(1, 'a');
-    x.insert(2, 'b');
-    x.insert(3, 'c');
-
-    y.insert(3, 'c');
-    y.insert(2, 'b');
-    y.insert(1, 'a');
-
-    assert!(hash::<_, SipHasher>(&x) == hash::<_, SipHasher>(&y));
-
-    x.insert(1000, 'd');
-    x.remove(&1000);
-
-    assert!(hash::<_, SipHasher>(&x) == hash::<_, SipHasher>(&y));
-}
-
-#[test]
-fn test_from_iter() {
-    let xs = vec![(1, 'a'), (2, 'b'), (3, 'c'), (4, 'd'), (5, 'e')];
-
-    let map: VecMap<_> = xs.iter().cloned().collect();
-
-    for &(k, v) in &xs {
-        assert_eq!(map.get(&k), Some(&v));
-    }
-}
-
-#[test]
-fn test_index() {
-    let mut map = VecMap::new();
-
-    map.insert(1, 2);
-    map.insert(2, 1);
-    map.insert(3, 4);
-
-    assert_eq!(map[3], 4);
-}
-
-#[test]
-#[should_panic]
-fn test_index_nonexistent() {
-    let mut map = VecMap::new();
-
-    map.insert(1, 2);
-    map.insert(2, 1);
-    map.insert(3, 4);
-
-    map[4];
-}
-
-#[test]
-fn test_entry(){
-    let xs = [(1, 10), (2, 20), (3, 30), (4, 40), (5, 50), (6, 60)];
-
-    let mut map: VecMap<_> = xs.iter().cloned().collect();
-
-    // Existing key (insert)
-    match map.entry(1) {
-        Vacant(_) => unreachable!(),
-        Occupied(mut view) => {
-            assert_eq!(view.get(), &10);
-            assert_eq!(view.insert(100), 10);
-        }
-    }
-    assert_eq!(map.get(&1).unwrap(), &100);
-    assert_eq!(map.len(), 6);
-
-
-    // Existing key (update)
-    match map.entry(2) {
-        Vacant(_) => unreachable!(),
-        Occupied(mut view) => {
-            let v = view.get_mut();
-            *v *= 10;
-        }
-    }
-    assert_eq!(map.get(&2).unwrap(), &200);
-    assert_eq!(map.len(), 6);
-
-    // Existing key (take)
-    match map.entry(3) {
-        Vacant(_) => unreachable!(),
-        Occupied(view) => {
-            assert_eq!(view.remove(), 30);
-        }
-    }
-    assert_eq!(map.get(&3), None);
-    assert_eq!(map.len(), 5);
-
-
-    // Inexistent key (insert)
-    match map.entry(10) {
-        Occupied(_) => unreachable!(),
-        Vacant(view) => {
-            assert_eq!(*view.insert(1000), 1000);
-        }
-    }
-    assert_eq!(map.get(&10).unwrap(), &1000);
-    assert_eq!(map.len(), 6);
-}
-
-#[test]
-fn test_extend_ref() {
-    let mut a = VecMap::new();
-    a.insert(1, "one");
-    let mut b = VecMap::new();
-    b.insert(2, "two");
-    b.insert(3, "three");
-
-    a.extend(&b);
-
-    assert_eq!(a.len(), 3);
-    assert_eq!(a[&1], "one");
-    assert_eq!(a[&2], "two");
-    assert_eq!(a[&3], "three");
-}
-
-mod bench {
-    use std::collections::VecMap;
-
-    map_insert_rand_bench!{insert_rand_100,    100,    VecMap}
-    map_insert_rand_bench!{insert_rand_10_000, 10_000, VecMap}
-
-    map_insert_seq_bench!{insert_seq_100,    100,    VecMap}
-    map_insert_seq_bench!{insert_seq_10_000, 10_000, VecMap}
-
-    map_find_rand_bench!{find_rand_100,    100,    VecMap}
-    map_find_rand_bench!{find_rand_10_000, 10_000, VecMap}
-
-    map_find_seq_bench!{find_seq_100,    100,    VecMap}
-    map_find_seq_bench!{find_seq_10_000, 10_000, VecMap}
-}
diff --git a/src/libcore/cell.rs b/src/libcore/cell.rs
index c443270d5f4..8062e77d397 100644
--- a/src/libcore/cell.rs
+++ b/src/libcore/cell.rs
@@ -546,20 +546,6 @@ impl<'b, T: ?Sized> Deref for Ref<'b, T> {
     }
 }
 
-/// Copies a `Ref`.
-///
-/// The `RefCell` is already immutably borrowed, so this cannot fail.
-///
-/// A `Clone` implementation would interfere with the widespread
-/// use of `r.borrow().clone()` to clone the contents of a `RefCell`.
-#[deprecated(since = "1.2.0", reason = "moved to a `Ref::clone` associated function")]
-#[unstable(feature = "core",
-           reason = "likely to be moved to a method, pending language changes")]
-#[inline]
-pub fn clone_ref<'b, T:Clone>(orig: &Ref<'b, T>) -> Ref<'b, T> {
-    Ref::clone(orig)
-}
-
 impl<'b, T: ?Sized> Ref<'b, T> {
     /// Copies a `Ref`.
     ///
@@ -799,14 +785,7 @@ impl<'b, T: ?Sized> DerefMut for RefMut<'b, T> {
 #[lang = "unsafe_cell"]
 #[stable(feature = "rust1", since = "1.0.0")]
 pub struct UnsafeCell<T: ?Sized> {
-    /// Wrapped value
-    ///
-    /// This field should not be accessed directly, it is made public for static
-    /// initializers.
-    #[deprecated(since = "1.2.0", reason = "use `get` to access the wrapped \
-        value or `new` to initialize `UnsafeCell` in statics")]
-    #[unstable(feature = "core")]
-    pub value: T,
+    value: T,
 }
 
 impl<T: ?Sized> !Sync for UnsafeCell<T> {}
@@ -828,7 +807,6 @@ impl<T> UnsafeCell<T> {
     #[stable(feature = "rust1", since = "1.0.0")]
     #[inline]
     pub const fn new(value: T) -> UnsafeCell<T> {
-        #![allow(deprecated)]
         UnsafeCell { value: value }
     }
 
@@ -851,7 +829,6 @@ impl<T> UnsafeCell<T> {
     #[inline]
     #[stable(feature = "rust1", since = "1.0.0")]
     pub unsafe fn into_inner(self) -> T {
-        #![allow(deprecated)]
         self.value
     }
 }
@@ -871,9 +848,6 @@ impl<T: ?Sized> UnsafeCell<T> {
     #[inline]
     #[stable(feature = "rust1", since = "1.0.0")]
     pub fn get(&self) -> *mut T {
-        // FIXME(#23542) Replace with type ascription.
-        #![allow(trivial_casts)]
-        #![allow(deprecated)]
         &self.value as *const T as *mut T
     }
 }
diff --git a/src/libcore/cmp.rs b/src/libcore/cmp.rs
index da4bb41fd9c..aea5feb4be1 100644
--- a/src/libcore/cmp.rs
+++ b/src/libcore/cmp.rs
@@ -21,7 +21,7 @@ use self::Ordering::*;
 
 use mem;
 use marker::Sized;
-use option::Option::{self, Some, None};
+use option::Option::{self, Some};
 
 /// Trait for equality comparisons which are [partial equivalence
 /// relations](http://en.wikipedia.org/wiki/Partial_equivalence_relation).
@@ -381,78 +381,6 @@ pub fn max<T: Ord>(v1: T, v2: T) -> T {
     if v2 >= v1 { v2 } else { v1 }
 }
 
-/// Compare and return the minimum of two values if there is one.
-///
-/// Returns the first argument if the comparison determines them to be equal.
-///
-/// # Examples
-///
-/// ```
-/// #![feature(cmp_partial)]
-///
-/// use std::cmp;
-///
-/// assert_eq!(Some(1), cmp::partial_min(1, 2));
-/// assert_eq!(Some(2), cmp::partial_min(2, 2));
-/// ```
-///
-/// When comparison is impossible:
-///
-/// ```
-/// #![feature(cmp_partial)]
-///
-/// use std::cmp;
-///
-/// let result = cmp::partial_min(std::f64::NAN, 1.0);
-/// assert_eq!(result, None);
-/// ```
-#[inline]
-#[unstable(feature = "cmp_partial")]
-#[deprecated(since = "1.3.0", reason = "has not proven itself worthwhile")]
-pub fn partial_min<T: PartialOrd>(v1: T, v2: T) -> Option<T> {
-    match v1.partial_cmp(&v2) {
-        Some(Less) | Some(Equal) => Some(v1),
-        Some(Greater) => Some(v2),
-        None => None
-    }
-}
-
-/// Compare and return the maximum of two values if there is one.
-///
-/// Returns the second argument if the comparison determines them to be equal.
-///
-/// # Examples
-///
-/// ```
-/// #![feature(cmp_partial)]
-///
-/// use std::cmp;
-///
-/// assert_eq!(Some(2), cmp::partial_max(1, 2));
-/// assert_eq!(Some(2), cmp::partial_max(2, 2));
-/// ```
-///
-/// When comparison is impossible:
-///
-/// ```
-/// #![feature(cmp_partial)]
-///
-/// use std::cmp;
-///
-/// let result = cmp::partial_max(std::f64::NAN, 1.0);
-/// assert_eq!(result, None);
-/// ```
-#[inline]
-#[unstable(feature = "cmp_partial")]
-#[deprecated(since = "1.3.0", reason = "has not proven itself worthwhile")]
-pub fn partial_max<T: PartialOrd>(v1: T, v2: T) -> Option<T> {
-    match v1.partial_cmp(&v2) {
-        Some(Equal) | Some(Less) => Some(v2),
-        Some(Greater) => Some(v1),
-        None => None
-    }
-}
-
 // Implementation of PartialEq, Eq, PartialOrd and Ord for primitive types
 mod impls {
     use cmp::{PartialOrd, Ord, PartialEq, Eq, Ordering};
diff --git a/src/libcore/hash/mod.rs b/src/libcore/hash/mod.rs
index 34bc3b835a1..361c6d700de 100644
--- a/src/libcore/hash/mod.rs
+++ b/src/libcore/hash/mod.rs
@@ -16,9 +16,7 @@
 //! # Examples
 //!
 //! ```rust
-//! #![feature(hash_default)]
-//!
-//! use std::hash::{hash, Hash, SipHasher};
+//! use std::hash::{Hash, SipHasher, Hasher};
 //!
 //! #[derive(Hash)]
 //! struct Person {
@@ -30,16 +28,20 @@
 //! let person1 = Person { id: 5, name: "Janet".to_string(), phone: 555_666_7777 };
 //! let person2 = Person { id: 5, name: "Bob".to_string(), phone: 555_666_7777 };
 //!
-//! assert!(hash::<_, SipHasher>(&person1) != hash::<_, SipHasher>(&person2));
+//! assert!(hash(&person1) != hash(&person2));
+//!
+//! fn hash<T: Hash>(t: &T) -> u64 {
+//!     let mut s = SipHasher::new();
+//!     t.hash(&mut s);
+//!     s.finish()
+//! }
 //! ```
 //!
 //! If you need more control over how a value is hashed, you need to implement
 //! the trait `Hash`:
 //!
 //! ```rust
-//! #![feature(hash_default)]
-//!
-//! use std::hash::{hash, Hash, Hasher, SipHasher};
+//! use std::hash::{Hash, Hasher, SipHasher};
 //!
 //! struct Person {
 //!     id: u32,
@@ -57,7 +59,13 @@
 //! let person1 = Person { id: 5, name: "Janet".to_string(), phone: 555_666_7777 };
 //! let person2 = Person { id: 5, name: "Bob".to_string(), phone: 555_666_7777 };
 //!
-//! assert_eq!(hash::<_, SipHasher>(&person1), hash::<_, SipHasher>(&person2));
+//! assert_eq!(hash(&person1), hash(&person2));
+//!
+//! fn hash<T: Hash>(t: &T) -> u64 {
+//!     let mut s = SipHasher::new();
+//!     t.hash(&mut s);
+//!     s.finish()
+//! }
 //! ```
 
 #![stable(feature = "rust1", since = "1.0.0")]
@@ -165,21 +173,6 @@ pub trait Hasher {
     fn write_isize(&mut self, i: isize) { self.write_usize(i as usize) }
 }
 
-/// Hash a value with the default SipHasher algorithm (two initial keys of 0).
-///
-/// The specified value will be hashed with this hasher and then the resulting
-/// hash will be returned.
-#[unstable(feature = "hash_default",
-           reason = "not the most ergonomic interface unless `H` is defaulted \
-                     to SipHasher, but perhaps not ready to commit to that")]
-#[deprecated(since = "1.3.0",
-             reason = "has yet to prove itself useful")]
-pub fn hash<T: Hash, H: Hasher + Default>(value: &T) -> u64 {
-    let mut h: H = Default::default();
-    value.hash(&mut h);
-    h.finish()
-}
-
 //////////////////////////////////////////////////////////////////////////////
 
 mod impls {
diff --git a/src/libcore/iter.rs b/src/libcore/iter.rs
index 3382095b456..79e4a5b4286 100644
--- a/src/libcore/iter.rs
+++ b/src/libcore/iter.rs
@@ -56,9 +56,6 @@
 
 #![stable(feature = "rust1", since = "1.0.0")]
 
-#[allow(deprecated)]
-use self::MinMaxResult::*;
-
 use clone::Clone;
 use cmp;
 use cmp::{Ord, PartialOrd, PartialEq};
@@ -445,7 +442,6 @@ pub trait Iterator {
     /// ```
     #[inline]
     #[stable(feature = "rust1", since = "1.0.0")]
-    #[allow(deprecated)]
     fn scan<St, B, F>(self, initial_state: St, f: F) -> Scan<Self, St, F>
         where Self: Sized, F: FnMut(&mut St, Self::Item) -> Option<B>,
     {
@@ -806,89 +802,6 @@ pub trait Iterator {
             .map(|(_, x)| x)
     }
 
-    /// `min_max` finds the minimum and maximum elements in the iterator.
-    ///
-    /// The return type `MinMaxResult` is an enum of three variants:
-    ///
-    /// - `NoElements` if the iterator is empty.
-    /// - `OneElement(x)` if the iterator has exactly one element.
-    /// - `MinMax(x, y)` is returned otherwise, where `x <= y`. Two
-    ///    values are equal if and only if there is more than one
-    ///    element in the iterator and all elements are equal.
-    ///
-    /// On an iterator of length `n`, `min_max` does `1.5 * n` comparisons,
-    /// and so is faster than calling `min` and `max` separately which does `2 *
-    /// n` comparisons.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// #![feature(iter_min_max)]
-    ///
-    /// use std::iter::MinMaxResult::{NoElements, OneElement, MinMax};
-    ///
-    /// let a: [i32; 0] = [];
-    /// assert_eq!(a.iter().min_max(), NoElements);
-    ///
-    /// let a = [1];
-    /// assert_eq!(a.iter().min_max(), OneElement(&1));
-    ///
-    /// let a = [1, 2, 3, 4, 5];
-    /// assert_eq!(a.iter().min_max(), MinMax(&1, &5));
-    ///
-    /// let a = [1, 1, 1, 1];
-    /// assert_eq!(a.iter().min_max(), MinMax(&1, &1));
-    /// ```
-    #[unstable(feature = "iter_min_max",
-               reason = "return type may change or may wish to have a closure \
-                         based version as well")]
-    #[deprecated(since = "1.3.0", reason = "has not proven itself")]
-    #[allow(deprecated)]
-    fn min_max(mut self) -> MinMaxResult<Self::Item> where Self: Sized, Self::Item: Ord
-    {
-        let (mut min, mut max) = match self.next() {
-            None => return NoElements,
-            Some(x) => {
-                match self.next() {
-                    None => return OneElement(x),
-                    Some(y) => if x <= y {(x, y)} else {(y, x)}
-                }
-            }
-        };
-
-        loop {
-            // `first` and `second` are the two next elements we want to look
-            // at.  We first compare `first` and `second` (#1). The smaller one
-            // is then compared to current minimum (#2). The larger one is
-            // compared to current maximum (#3). This way we do 3 comparisons
-            // for 2 elements.
-            let first = match self.next() {
-                None => break,
-                Some(x) => x
-            };
-            let second = match self.next() {
-                None => {
-                    if first < min {
-                        min = first;
-                    } else if first >= max {
-                        max = first;
-                    }
-                    break;
-                }
-                Some(x) => x
-            };
-            if first <= second {
-                if first < min { min = first }
-                if second >= max { max = second }
-            } else {
-                if second < min { min = second }
-                if first >= max { max = first }
-            }
-        }
-
-        MinMax(min, max)
-    }
-
     /// Returns the element that gives the maximum value from the
     /// specified function.
     ///
@@ -1046,22 +959,6 @@ pub trait Iterator {
         Cycle{orig: self.clone(), iter: self}
     }
 
-    /// Use an iterator to reverse a container in place.
-    #[unstable(feature = "core",
-               reason = "uncertain about placement or widespread use")]
-    #[deprecated(since = "1.2.0",
-                 reason = "not performant enough to justify inclusion")]
-    fn reverse_in_place<'a, T: 'a>(&mut self) where
-        Self: Sized + Iterator<Item=&'a mut T> + DoubleEndedIterator
-    {
-        loop {
-            match (self.next(), self.next_back()) {
-                (Some(x), Some(y)) => mem::swap(x, y),
-                _ => break
-            }
-        }
-    }
-
     /// Iterates over the entire iterator, summing up all the elements
     ///
     /// # Examples
@@ -1229,29 +1126,6 @@ impl<'a, I: DoubleEndedIterator + ?Sized> DoubleEndedIterator for &'a mut I {
     fn next_back(&mut self) -> Option<I::Item> { (**self).next_back() }
 }
 
-/// An object implementing random access indexing by `usize`
-///
-/// A `RandomAccessIterator` should be either infinite or a
-/// `DoubleEndedIterator`.  Calling `next()` or `next_back()` on a
-/// `RandomAccessIterator` reduces the indexable range accordingly. That is,
-/// `it.idx(1)` will become `it.idx(0)` after `it.next()` is called.
-#[unstable(feature = "iter_idx",
-           reason = "not widely used, may be better decomposed into Index \
-                     and ExactSizeIterator")]
-#[deprecated(since = "1.2.0",
-             reason = "trait has not proven itself as a widely useful \
-                       abstraction for iterators, and more time may be needed \
-                       for iteration on the design")]
-#[allow(deprecated)]
-pub trait RandomAccessIterator: Iterator {
-    /// Returns the number of indexable elements. At most `std::usize::MAX`
-    /// elements are indexable, even if the iterator represents a longer range.
-    fn indexable(&self) -> usize;
-
-    /// Returns an element at an index, or `None` if the index is out of bounds
-    fn idx(&mut self, index: usize) -> Option<Self::Item>;
-}
-
 /// An iterator that knows its exact length
 ///
 /// This trait is a helper for iterators like the vector iterator, so that
@@ -1321,78 +1195,6 @@ impl<I> DoubleEndedIterator for Rev<I> where I: DoubleEndedIterator {
     fn next_back(&mut self) -> Option<<I as Iterator>::Item> { self.iter.next() }
 }
 
-#[unstable(feature = "iter_idx", reason = "trait is experimental")]
-#[allow(deprecated)]
-impl<I> RandomAccessIterator for Rev<I>
-    where I: DoubleEndedIterator + RandomAccessIterator
-{
-    #[inline]
-    fn indexable(&self) -> usize { self.iter.indexable() }
-    #[inline]
-    fn idx(&mut self, index: usize) -> Option<<I as Iterator>::Item> {
-        let amt = self.indexable();
-        if amt > index {
-            self.iter.idx(amt - index - 1)
-        } else {
-            None
-        }
-    }
-}
-
-/// `MinMaxResult` is an enum returned by `min_max`. See `Iterator::min_max` for
-/// more detail.
-#[derive(Clone, PartialEq, Debug)]
-#[unstable(feature = "iter_min_max",
-           reason = "unclear whether such a fine-grained result is widely useful")]
-#[deprecated(since = "1.3.0", reason = "has not proven itself")]
-#[allow(deprecated)]
-pub enum MinMaxResult<T> {
-    /// Empty iterator
-    NoElements,
-
-    /// Iterator with one element, so the minimum and maximum are the same
-    OneElement(T),
-
-    /// More than one element in the iterator, the first element is not larger
-    /// than the second
-    MinMax(T, T)
-}
-
-#[unstable(feature = "iter_min_max", reason = "type is unstable")]
-#[deprecated(since = "1.3.0", reason = "has not proven itself")]
-#[allow(deprecated)]
-impl<T: Clone> MinMaxResult<T> {
-    /// `into_option` creates an `Option` of type `(T,T)`. The returned `Option`
-    /// has variant `None` if and only if the `MinMaxResult` has variant
-    /// `NoElements`. Otherwise variant `Some(x,y)` is returned where `x <= y`.
-    /// If `MinMaxResult` has variant `OneElement(x)`, performing this operation
-    /// will make one clone of `x`.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// #![feature(iter_min_max)]
-    ///
-    /// use std::iter::MinMaxResult::{self, NoElements, OneElement, MinMax};
-    ///
-    /// let r: MinMaxResult<i32> = NoElements;
-    /// assert_eq!(r.into_option(), None);
-    ///
-    /// let r = OneElement(1);
-    /// assert_eq!(r.into_option(), Some((1, 1)));
-    ///
-    /// let r = MinMax(1, 2);
-    /// assert_eq!(r.into_option(), Some((1, 2)));
-    /// ```
-    pub fn into_option(self) -> Option<(T,T)> {
-        match self {
-            NoElements => None,
-            OneElement(x) => Some((x.clone(), x)),
-            MinMax(x, y) => Some((x, y))
-        }
-    }
-}
-
 /// An iterator that clones the elements of an underlying iterator
 #[stable(feature = "iter_cloned", since = "1.1.0")]
 #[must_use = "iterator adaptors are lazy and do nothing unless consumed"]
@@ -1430,22 +1232,6 @@ impl<'a, I, T: 'a> ExactSizeIterator for Cloned<I>
     where I: ExactSizeIterator<Item=&'a T>, T: Clone
 {}
 
-#[unstable(feature = "iter_idx", reason = "trait is experimental")]
-#[allow(deprecated)]
-impl<'a, I, T: 'a> RandomAccessIterator for Cloned<I>
-    where I: RandomAccessIterator<Item=&'a T>, T: Clone
-{
-    #[inline]
-    fn indexable(&self) -> usize {
-        self.it.indexable()
-    }
-
-    #[inline]
-    fn idx(&mut self, index: usize) -> Option<T> {
-        self.it.idx(index).cloned()
-    }
-}
-
 /// An iterator that repeats endlessly
 #[derive(Clone)]
 #[must_use = "iterator adaptors are lazy and do nothing unless consumed"]
@@ -1478,34 +1264,6 @@ impl<I> Iterator for Cycle<I> where I: Clone + Iterator {
     }
 }
 
-#[unstable(feature = "iter_idx", reason = "trait is experimental")]
-#[allow(deprecated)]
-impl<I> RandomAccessIterator for Cycle<I> where
-    I: Clone + RandomAccessIterator,
-{
-    #[inline]
-    fn indexable(&self) -> usize {
-        if self.orig.indexable() > 0 {
-            usize::MAX
-        } else {
-            0
-        }
-    }
-
-    #[inline]
-    fn idx(&mut self, index: usize) -> Option<<I as Iterator>::Item> {
-        let liter = self.iter.indexable();
-        let lorig = self.orig.indexable();
-        if lorig == 0 {
-            None
-        } else if index < liter {
-            self.iter.idx(index)
-        } else {
-            self.orig.idx((index - liter) % lorig)
-        }
-    }
-}
-
 /// An iterator that strings two iterators together
 #[derive(Clone)]
 #[must_use = "iterator adaptors are lazy and do nothing unless consumed"]
@@ -1593,29 +1351,6 @@ impl<A, B> DoubleEndedIterator for Chain<A, B> where
     }
 }
 
-#[unstable(feature = "iter_idx", reason = "trait is experimental")]
-#[allow(deprecated)]
-impl<A, B> RandomAccessIterator for Chain<A, B> where
-    A: RandomAccessIterator,
-    B: RandomAccessIterator<Item = A::Item>,
-{
-    #[inline]
-    fn indexable(&self) -> usize {
-        let (a, b) = (self.a.indexable(), self.b.indexable());
-        a.saturating_add(b)
-    }
-
-    #[inline]
-    fn idx(&mut self, index: usize) -> Option<A::Item> {
-        let len = self.a.indexable();
-        if index < len {
-            self.a.idx(index)
-        } else {
-            self.b.idx(index - len)
-        }
-    }
-}
-
 /// An iterator that iterates two other iterators simultaneously
 #[derive(Clone)]
 #[must_use = "iterator adaptors are lazy and do nothing unless consumed"]
@@ -1682,27 +1417,6 @@ impl<A, B> DoubleEndedIterator for Zip<A, B> where
     }
 }
 
-#[unstable(feature = "iter_idx", reason = "trait is experimental")]
-#[allow(deprecated)]
-impl<A, B> RandomAccessIterator for Zip<A, B> where
-    A: RandomAccessIterator,
-    B: RandomAccessIterator
-{
-    #[inline]
-    fn indexable(&self) -> usize {
-        cmp::min(self.a.indexable(), self.b.indexable())
-    }
-
-    #[inline]
-    fn idx(&mut self, index: usize) -> Option<(A::Item, B::Item)> {
-        self.a.idx(index).and_then(|x| {
-            self.b.idx(index).and_then(|y| {
-                Some((x, y))
-            })
-        })
-    }
-}
-
 /// An iterator that maps the values of `iter` with `f`
 #[must_use = "iterator adaptors are lazy and do nothing unless consumed"]
 #[stable(feature = "rust1", since = "1.0.0")]
@@ -1737,22 +1451,6 @@ impl<B, I: DoubleEndedIterator, F> DoubleEndedIterator for Map<I, F> where
     }
 }
 
-#[unstable(feature = "iter_idx", reason = "trait is experimental")]
-#[allow(deprecated)]
-impl<B, I: RandomAccessIterator, F> RandomAccessIterator for Map<I, F> where
-    F: FnMut(I::Item) -> B,
-{
-    #[inline]
-    fn indexable(&self) -> usize {
-        self.iter.indexable()
-    }
-
-    #[inline]
-    fn idx(&mut self, index: usize) -> Option<B> {
-        self.iter.idx(index).map(|a| (self.f)(a))
-    }
-}
-
 /// An iterator that filters the elements of `iter` with `predicate`
 #[must_use = "iterator adaptors are lazy and do nothing unless consumed"]
 #[stable(feature = "rust1", since = "1.0.0")]
@@ -1912,23 +1610,6 @@ impl<I> DoubleEndedIterator for Enumerate<I> where
     }
 }
 
-#[unstable(feature = "iter_idx", reason = "trait is experimental")]
-#[allow(deprecated)]
-impl<I> RandomAccessIterator for Enumerate<I> where I: RandomAccessIterator {
-    #[inline]
-    fn indexable(&self) -> usize {
-        self.iter.indexable()
-    }
-
-    #[inline]
-    fn idx(&mut self, index: usize) -> Option<(usize, <I as Iterator>::Item)> {
-        // Can safely add, `ExactSizeIterator` (ancestor of
-        // `RandomAccessIterator`) promises that the number of elements fits
-        // into a `usize`.
-        self.iter.idx(index).map(|a| (self.count + index, a))
-    }
-}
-
 /// An iterator with a `peek()` that returns an optional reference to the next element.
 #[must_use = "iterator adaptors are lazy and do nothing unless consumed"]
 #[stable(feature = "rust1", since = "1.0.0")]
@@ -2163,24 +1844,6 @@ impl<I> Iterator for Skip<I> where I: Iterator {
     }
 }
 
-#[unstable(feature = "iter_idx", reason = "trait is experimental")]
-#[allow(deprecated)]
-impl<I> RandomAccessIterator for Skip<I> where I: RandomAccessIterator{
-    #[inline]
-    fn indexable(&self) -> usize {
-        self.iter.indexable().saturating_sub(self.n)
-    }
-
-    #[inline]
-    fn idx(&mut self, index: usize) -> Option<<I as Iterator>::Item> {
-        if index >= self.indexable() {
-            None
-        } else {
-            self.iter.idx(index + self.n)
-        }
-    }
-}
-
 #[stable(feature = "rust1", since = "1.0.0")]
 impl<I> ExactSizeIterator for Skip<I> where I: ExactSizeIterator {}
 
@@ -2236,24 +1899,6 @@ impl<I> Iterator for Take<I> where I: Iterator{
     }
 }
 
-#[unstable(feature = "iter_idx", reason = "trait is experimental")]
-#[allow(deprecated)]
-impl<I> RandomAccessIterator for Take<I> where I: RandomAccessIterator{
-    #[inline]
-    fn indexable(&self) -> usize {
-        cmp::min(self.iter.indexable(), self.n)
-    }
-
-    #[inline]
-    fn idx(&mut self, index: usize) -> Option<<I as Iterator>::Item> {
-        if index >= self.n {
-            None
-        } else {
-            self.iter.idx(index)
-        }
-    }
-}
-
 #[stable(feature = "rust1", since = "1.0.0")]
 impl<I> ExactSizeIterator for Take<I> where I: ExactSizeIterator {}
 
@@ -2262,16 +1907,10 @@ impl<I> ExactSizeIterator for Take<I> where I: ExactSizeIterator {}
 #[must_use = "iterator adaptors are lazy and do nothing unless consumed"]
 #[stable(feature = "rust1", since = "1.0.0")]
 #[derive(Clone)]
-#[allow(deprecated)]
 pub struct Scan<I, St, F> {
     iter: I,
     f: F,
-
-    /// The current internal state to be passed to the closure next.
-    #[unstable(feature = "scan_state",
-               reason = "public fields are otherwise rare in the stdlib")]
-    #[deprecated(since = "1.3.0", reason = "unclear whether this is necessary")]
-    pub state: St,
+    state: St,
 }
 
 #[stable(feature = "rust1", since = "1.0.0")]
@@ -2282,7 +1921,6 @@ impl<B, I, St, F> Iterator for Scan<I, St, F> where
     type Item = B;
 
     #[inline]
-    #[allow(deprecated)]
     fn next(&mut self) -> Option<B> {
         self.iter.next().and_then(|a| (self.f)(&mut self.state, a))
     }
@@ -2440,37 +2078,9 @@ impl<I> DoubleEndedIterator for Fuse<I> where I: DoubleEndedIterator {
     }
 }
 
-// Allow RandomAccessIterators to be fused without affecting random-access behavior
-#[unstable(feature = "iter_idx", reason = "trait is experimental")]
-#[allow(deprecated)]
-impl<I> RandomAccessIterator for Fuse<I> where I: RandomAccessIterator {
-    #[inline]
-    fn indexable(&self) -> usize {
-        self.iter.indexable()
-    }
-
-    #[inline]
-    fn idx(&mut self, index: usize) -> Option<<I as Iterator>::Item> {
-        self.iter.idx(index)
-    }
-}
-
 #[stable(feature = "rust1", since = "1.0.0")]
 impl<I> ExactSizeIterator for Fuse<I> where I: ExactSizeIterator {}
 
-impl<I> Fuse<I> {
-    /// Resets the `Fuse` such that the next call to `.next()` or
-    /// `.next_back()` will call the underlying iterator again even if it
-    /// previously returned `None`.
-    #[inline]
-    #[unstable(feature = "iter_reset_fuse", reason = "seems marginal")]
-    #[deprecated(since = "1.3.0",
-                 reason = "unusual for adaptors to have one-off methods")]
-    pub fn reset_fuse(&mut self) {
-        self.done = false
-    }
-}
-
 /// An iterator that calls a function with a reference to each
 /// element before yielding it.
 #[must_use = "iterator adaptors are lazy and do nothing unless consumed"]
@@ -2519,104 +2129,6 @@ impl<I: DoubleEndedIterator, F> DoubleEndedIterator for Inspect<I, F>
     }
 }
 
-#[unstable(feature = "iter_idx", reason = "trait is experimental")]
-#[allow(deprecated)]
-impl<I: RandomAccessIterator, F> RandomAccessIterator for Inspect<I, F>
-    where F: FnMut(&I::Item),
-{
-    #[inline]
-    fn indexable(&self) -> usize {
-        self.iter.indexable()
-    }
-
-    #[inline]
-    fn idx(&mut self, index: usize) -> Option<I::Item> {
-        let element = self.iter.idx(index);
-        self.do_inspect(element)
-    }
-}
-
-/// An iterator that passes mutable state to a closure and yields the result.
-///
-/// # Examples
-///
-/// An iterator that yields sequential Fibonacci numbers, and stops on overflow.
-///
-/// ```
-/// #![feature(iter_unfold)]
-/// use std::iter::Unfold;
-///
-/// // This iterator will yield up to the last Fibonacci number before the max
-/// // value of `u32`. You can simply change `u32` to `u64` in this line if
-/// // you want higher values than that.
-/// let mut fibonacci = Unfold::new((Some(0u32), Some(1u32)),
-///                                 |&mut (ref mut x2, ref mut x1)| {
-///     // Attempt to get the next Fibonacci number
-///     // `x1` will be `None` if previously overflowed.
-///     let next = match (*x2, *x1) {
-///         (Some(x2), Some(x1)) => x2.checked_add(x1),
-///         _ => None,
-///     };
-///
-///     // Shift left: ret <- x2 <- x1 <- next
-///     let ret = *x2;
-///     *x2 = *x1;
-///     *x1 = next;
-///
-///     ret
-/// });
-///
-/// for i in fibonacci {
-///     println!("{}", i);
-/// }
-/// ```
-#[unstable(feature = "iter_unfold")]
-#[derive(Clone)]
-#[deprecated(since = "1.2.0",
-             reason = "has not gained enough traction to retain its position \
-                       in the standard library")]
-#[allow(deprecated)]
-pub struct Unfold<St, F> {
-    f: F,
-    /// Internal state that will be passed to the closure on the next iteration
-    #[unstable(feature = "iter_unfold")]
-    pub state: St,
-}
-
-#[unstable(feature = "iter_unfold")]
-#[deprecated(since = "1.2.0",
-             reason = "has not gained enough traction to retain its position \
-                       in the standard library")]
-#[allow(deprecated)]
-impl<A, St, F> Unfold<St, F> where F: FnMut(&mut St) -> Option<A> {
-    /// Creates a new iterator with the specified closure as the "iterator
-    /// function" and an initial state to eventually pass to the closure
-    #[inline]
-    pub fn new(initial_state: St, f: F) -> Unfold<St, F> {
-        Unfold {
-            f: f,
-            state: initial_state
-        }
-    }
-}
-
-#[stable(feature = "rust1", since = "1.0.0")]
-#[allow(deprecated)]
-impl<A, St, F> Iterator for Unfold<St, F> where F: FnMut(&mut St) -> Option<A> {
-    type Item = A;
-
-    #[inline]
-    fn next(&mut self) -> Option<A> {
-        (self.f)(&mut self.state)
-    }
-
-    #[inline]
-    fn size_hint(&self) -> (usize, Option<usize>) {
-        // no possible known bounds at this point
-        (0, None)
-    }
-}
-
 /// Objects that can be stepped over in both directions.
 ///
 /// The `steps_between` function provides a way to efficiently compare
@@ -2759,7 +2271,6 @@ impl<A: Step> RangeFrom<A> {
     }
 }
 
-#[allow(deprecated)]
 impl<A: Step> ops::Range<A> {
     /// Creates an iterator with the same range, but stepping by the
     /// given amount at each iteration.
@@ -2892,7 +2403,6 @@ impl<A> DoubleEndedIterator for RangeInclusive<A> where
 }
 
 #[stable(feature = "rust1", since = "1.0.0")]
-#[allow(deprecated)]
 impl<A: Step + Zero + Clone> Iterator for StepBy<A, ops::Range<A>> {
     type Item = A;
 
@@ -2937,7 +2447,6 @@ macro_rules! range_exact_iter_impl {
 }
 
 #[stable(feature = "rust1", since = "1.0.0")]
-#[allow(deprecated)]
 impl<A: Step + One> Iterator for ops::Range<A> where
     for<'a> &'a A: Add<&'a A, Output = A>
 {
@@ -2968,7 +2477,6 @@ impl<A: Step + One> Iterator for ops::Range<A> where
 range_exact_iter_impl!(usize u8 u16 u32 isize i8 i16 i32);
 
 #[stable(feature = "rust1", since = "1.0.0")]
-#[allow(deprecated)]
 impl<A: Step + One + Clone> DoubleEndedIterator for ops::Range<A> where
     for<'a> &'a A: Add<&'a A, Output = A>,
     for<'a> &'a A: Sub<&'a A, Output = A>
@@ -2985,7 +2493,6 @@ impl<A: Step + One + Clone> DoubleEndedIterator for ops::Range<A> where
 }
 
 #[stable(feature = "rust1", since = "1.0.0")]
-#[allow(deprecated)]
 impl<A: Step + One> Iterator for ops::RangeFrom<A> where
     for<'a> &'a A: Add<&'a A, Output = A>
 {
@@ -3022,56 +2529,6 @@ impl<A: Clone> DoubleEndedIterator for Repeat<A> {
     fn next_back(&mut self) -> Option<A> { Some(self.element.clone()) }
 }
 
-#[unstable(feature = "iter_idx", reason = "trait is experimental")]
-#[allow(deprecated)]
-impl<A: Clone> RandomAccessIterator for Repeat<A> {
-    #[inline]
-    fn indexable(&self) -> usize { usize::MAX }
-    #[inline]
-    fn idx(&mut self, _: usize) -> Option<A> { Some(self.element.clone()) }
-}
-
-type IterateState<T, F> = (F, Option<T>, bool);
-
-/// An iterator that repeatedly applies a given function, starting
-/// from a given seed value.
-#[unstable(feature = "iter_iterate")]
-#[deprecated(since = "1.2.0",
-             reason = "has not gained enough traction to retain its position \
-                       in the standard library")]
-#[allow(deprecated)]
-pub type Iterate<T, F> = Unfold<IterateState<T, F>, fn(&mut IterateState<T, F>) -> Option<T>>;
-
-/// Creates a new iterator that produces an infinite sequence of
-/// repeated applications of the given function `f`.
-#[unstable(feature = "iter_iterate")]
-#[deprecated(since = "1.2.0",
-             reason = "has not gained enough traction to retain its position \
-                       in the standard library")]
-#[allow(deprecated)]
-pub fn iterate<T, F>(seed: T, f: F) -> Iterate<T, F> where
-    T: Clone,
-    F: FnMut(T) -> T,
-{
-    fn next<T, F>(st: &mut IterateState<T, F>) -> Option<T> where
-        T: Clone,
-        F: FnMut(T) -> T,
-    {
-        let &mut (ref mut f, ref mut val, ref mut first) = st;
-        if *first {
-            *first = false;
-        } else if let Some(x) = val.take() {
-            *val = Some((*f)(x))
-        }
-        val.clone()
-    }
-
-    // coerce to a fn pointer
-    let next: fn(&mut IterateState<T,F>) -> Option<T> = next;
-
-    Unfold::new((f, Some(seed), true), next)
-}
-
 /// Creates a new iterator that endlessly repeats the element `elt`.
 #[inline]
 #[stable(feature = "rust1", since = "1.0.0")]
diff --git a/src/libcore/marker.rs b/src/libcore/marker.rs
index c0956753c98..e0c6bb52781 100644
--- a/src/libcore/marker.rs
+++ b/src/libcore/marker.rs
@@ -218,18 +218,6 @@ unsafe impl Sync for .. { }
 impl<T> !Sync for *const T { }
 impl<T> !Sync for *mut T { }
 
-/// A type which is considered "not POD", meaning that it is not
-/// implicitly copyable. This is typically embedded in other types to
-/// ensure that they are never copied, even if they lack a destructor.
-#[unstable(feature = "core",
-           reason = "likely to change with new variance strategy")]
-#[deprecated(since = "1.2.0",
-             reason = "structs are by default not copyable")]
-#[lang = "no_copy_bound"]
-#[allow(deprecated)]
-#[derive(Clone, PartialEq, Eq, PartialOrd, Ord)]
-pub struct NoCopy;
-
 macro_rules! impls{
     ($t: ident) => (
         impl<T:?Sized> Hash for $t<T> {
@@ -419,7 +407,6 @@ mod impls {
 #[rustc_reflect_like]
 #[unstable(feature = "reflect_marker",
            reason = "requires RFC and more experience")]
-#[allow(deprecated)]
 #[rustc_on_unimplemented = "`{Self}` does not implement `Any`; \
                             ensure all type parameters are bounded by `Any`"]
 pub trait Reflect {}
diff --git a/src/libcore/mem.rs b/src/libcore/mem.rs
index 86b331d220a..c7652390d9e 100644
--- a/src/libcore/mem.rs
+++ b/src/libcore/mem.rs
@@ -558,33 +558,3 @@ pub unsafe fn transmute_copy<T, U>(src: &T) -> U {
     #![allow(trivial_casts)]
     ptr::read(src as *const T as *const U)
 }
-
-/// Transforms lifetime of the second pointer to match the first.
-#[inline]
-#[unstable(feature = "copy_lifetime",
-           reason = "this function may be removed in the future due to its \
-                     questionable utility")]
-#[deprecated(since = "1.2.0",
-             reason = "unclear that this function buys more safety and \
-                       lifetimes are generally not handled as such in unsafe \
-                       code today")]
-pub unsafe fn copy_lifetime<'a, S: ?Sized, T: ?Sized + 'a>(_ptr: &'a S,
-                                                        ptr: &T) -> &'a T {
-    transmute(ptr)
-}
-
-/// Transforms lifetime of the second mutable pointer to match the first.
-#[inline]
-#[unstable(feature = "copy_lifetime",
-           reason = "this function may be removed in the future due to its \
-                     questionable utility")]
-#[deprecated(since = "1.2.0",
-             reason = "unclear that this function buys more safety and \
-                       lifetimes are generally not handled as such in unsafe \
-                       code today")]
-pub unsafe fn copy_mut_lifetime<'a, S: ?Sized, T: ?Sized + 'a>(_ptr: &'a S,
-                                                               ptr: &mut T)
-                                                              -> &'a mut T
-{
-    transmute(ptr)
-}
diff --git a/src/libcore/num/f32.rs b/src/libcore/num/f32.rs
index d0e6d4fa49c..6ce037f17ae 100644
--- a/src/libcore/num/f32.rs
+++ b/src/libcore/num/f32.rs
@@ -80,12 +80,6 @@ pub mod consts {
     #[stable(feature = "rust1", since = "1.0.0")]
     pub const PI: f32 = 3.14159265358979323846264338327950288_f32;
 
-    /// pi * 2.0
-    #[unstable(feature = "float_consts",
-               reason = "unclear naming convention/usefulness")]
-    #[deprecated(since = "1.2.0", reason = "unclear on usefulness")]
-    pub const PI_2: f32 = 6.28318530717958647692528676655900576_f32;
-
     /// pi/2.0
     #[stable(feature = "rust1", since = "1.0.0")]
     pub const FRAC_PI_2: f32 = 1.57079632679489661923132169163975144_f32;
diff --git a/src/libcore/num/f64.rs b/src/libcore/num/f64.rs
index bf7da04f995..b9dbc046799 100644
--- a/src/libcore/num/f64.rs
+++ b/src/libcore/num/f64.rs
@@ -80,12 +80,6 @@ pub mod consts {
     #[stable(feature = "rust1", since = "1.0.0")]
     pub const PI: f64 = 3.14159265358979323846264338327950288_f64;
 
-    /// pi * 2.0
-    #[unstable(feature = "float_consts",
-               reason = "unclear naming convention/usefulness")]
-    #[deprecated(since = "1.2.0", reason = "unclear on usefulness")]
-    pub const PI_2: f64 = 6.28318530717958647692528676655900576_f64;
-
     /// pi/2.0
     #[stable(feature = "rust1", since = "1.0.0")]
     pub const FRAC_PI_2: f64 = 1.57079632679489661923132169163975144_f64;
diff --git a/src/libcore/num/mod.rs b/src/libcore/num/mod.rs
index ad891bf8fa6..ea8a1daf926 100644
--- a/src/libcore/num/mod.rs
+++ b/src/libcore/num/mod.rs
@@ -136,7 +136,6 @@ macro_rules! int_impl {
         /// assert_eq!(u32::from_str_radix("A", 16), Ok(10));
         /// ```
         #[stable(feature = "rust1", since = "1.0.0")]
-        #[allow(deprecated)]
         pub fn from_str_radix(src: &str, radix: u32) -> Result<Self, ParseIntError> {
             from_str_radix(src, radix)
         }
@@ -691,7 +690,6 @@ macro_rules! uint_impl {
         /// `Err(ParseIntError)` if the string did not represent a valid number.
         /// Otherwise, `Ok(n)` where `n` is the integer represented by `src`.
         #[stable(feature = "rust1", since = "1.0.0")]
-        #[allow(deprecated)]
         pub fn from_str_radix(src: &str, radix: u32) -> Result<Self, ParseIntError> {
             from_str_radix(src, radix)
         }
@@ -1395,7 +1393,6 @@ macro_rules! from_str_float_impl {
             /// number.  Otherwise, `Ok(n)` where `n` is the floating-point
             /// number represented by `src`.
             #[inline]
-            #[allow(deprecated)]
             fn from_str(src: &str) -> Result<Self, ParseFloatError> {
                 Self::from_str_radix(src, 10)
             }
@@ -1408,7 +1405,6 @@ from_str_float_impl!(f64);
 macro_rules! from_str_radix_int_impl {
     ($($t:ty)*) => {$(
         #[stable(feature = "rust1", since = "1.0.0")]
-        #[allow(deprecated)]
         impl FromStr for $t {
             type Err = ParseIntError;
             fn from_str(src: &str) -> Result<Self, ParseIntError> {
diff --git a/src/libcore/num/wrapping.rs b/src/libcore/num/wrapping.rs
index 2e3b34af513..8e6ecf3c71e 100644
--- a/src/libcore/num/wrapping.rs
+++ b/src/libcore/num/wrapping.rs
@@ -9,7 +9,6 @@
 // except according to those terms.
 
 #![allow(missing_docs)]
-#![allow(deprecated)]
 #![unstable(feature = "wrapping", reason = "may be removed or relocated")]
 
 use super::Wrapping;
diff --git a/src/libcore/ptr.rs b/src/libcore/ptr.rs
index 64727242b9c..ba1fe6f48cd 100644
--- a/src/libcore/ptr.rs
+++ b/src/libcore/ptr.rs
@@ -123,27 +123,6 @@ pub unsafe fn read<T>(src: *const T) -> T {
     tmp
 }
 
-/// Reads the value from `src` and nulls it out without dropping it.
-///
-/// # Safety
-///
-/// This is unsafe for the same reasons that `read` is unsafe.
-#[inline(always)]
-#[unstable(feature = "read_and_zero",
-           reason = "may play a larger role in std::ptr future extensions")]
-#[deprecated(since = "1.3.0",
-             reason = "a \"zero value\" will soon not actually exist for all \
-                       types once dynamic drop has been implemented")]
-pub unsafe fn read_and_zero<T>(dest: *mut T) -> T {
-    // Copy the data out from `dest`:
-    let tmp = read(&*dest);
-
-    // Now zero out `dest`:
-    write_bytes(dest, 0, 1);
-
-    tmp
-}
-
 /// Variant of read_and_zero that writes the specific drop-flag byte
 /// (which may be more appropriate than zero).
 #[inline(always)]
diff --git a/src/libcore/result.rs b/src/libcore/result.rs
index 100cf0779b7..7ddb0883bf2 100644
--- a/src/libcore/result.rs
+++ b/src/libcore/result.rs
@@ -234,7 +234,7 @@ use self::Result::{Ok, Err};
 use clone::Clone;
 use fmt;
 use iter::{Iterator, DoubleEndedIterator, FromIterator, ExactSizeIterator, IntoIterator};
-use ops::{FnMut, FnOnce};
+use ops::FnOnce;
 use option::Option::{self, None, Some};
 use slice;
 
@@ -957,35 +957,3 @@ impl<A, E, V: FromIterator<A>> FromIterator<Result<A, E>> for Result<V, E> {
         }
     }
 }
-
-/////////////////////////////////////////////////////////////////////////////
-// FromIterator
-/////////////////////////////////////////////////////////////////////////////
-
-/// Performs a fold operation over the result values from an iterator.
-///
-/// If an `Err` is encountered, it is immediately returned.
-/// Otherwise, the folded value is returned.
-#[inline]
-#[unstable(feature = "result_fold",
-           reason = "unclear if this function should exist")]
-#[deprecated(since = "1.2.0",
-             reason = "has not seen enough usage to justify its position in \
-                       the standard library")]
-pub fn fold<T,
-            V,
-            E,
-            F: FnMut(V, T) -> V,
-            Iter: Iterator<Item=Result<T, E>>>(
-            iterator: Iter,
-            mut init: V,
-            mut f: F)
-            -> Result<V, E> {
-    for t in iterator {
-        match t {
-            Ok(v) => init = f(init, v),
-            Err(u) => return Err(u)
-        }
-    }
-    Ok(init)
-}
diff --git a/src/libcore/slice.rs b/src/libcore/slice.rs
index aa34b651157..b350bcc4a3d 100644
--- a/src/libcore/slice.rs
+++ b/src/libcore/slice.rs
@@ -826,27 +826,6 @@ impl<'a, T> Clone for Iter<'a, T> {
     fn clone(&self) -> Iter<'a, T> { Iter { ptr: self.ptr, end: self.end, _marker: self._marker } }
 }
 
-#[unstable(feature = "iter_idx", reason = "trait is experimental")]
-#[allow(deprecated)]
-impl<'a, T> RandomAccessIterator for Iter<'a, T> {
-    #[inline]
-    fn indexable(&self) -> usize {
-        let (exact, _) = self.size_hint();
-        exact
-    }
-
-    #[inline]
-    fn idx(&mut self, index: usize) -> Option<&'a T> {
-        unsafe {
-            if index < self.indexable() {
-                Some(slice_ref!(self.ptr.offset(index as isize)))
-            } else {
-                None
-            }
-        }
-    }
-}
-
 /// Mutable slice iterator.
 #[stable(feature = "rust1", since = "1.0.0")]
 pub struct IterMut<'a, T: 'a> {
@@ -1199,24 +1178,6 @@ impl<'a, T> DoubleEndedIterator for Windows<'a, T> {
 #[stable(feature = "rust1", since = "1.0.0")]
 impl<'a, T> ExactSizeIterator for Windows<'a, T> {}
 
-#[unstable(feature = "iter_idx", reason = "trait is experimental")]
-#[allow(deprecated)]
-impl<'a, T> RandomAccessIterator for Windows<'a, T> {
-    #[inline]
-    fn indexable(&self) -> usize {
-        self.size_hint().0
-    }
-
-    #[inline]
-    fn idx(&mut self, index: usize) -> Option<&'a [T]> {
-        if index + self.size > self.v.len() {
-            None
-        } else {
-            Some(&self.v[index .. index+self.size])
-        }
-    }
-}
-
 /// An iterator over a slice in (non-overlapping) chunks (`size` elements at a
 /// time).
 ///
@@ -1287,28 +1248,6 @@ impl<'a, T> DoubleEndedIterator for Chunks<'a, T> {
 #[stable(feature = "rust1", since = "1.0.0")]
 impl<'a, T> ExactSizeIterator for Chunks<'a, T> {}
 
-#[unstable(feature = "iter_idx", reason = "trait is experimental")]
-#[allow(deprecated)]
-impl<'a, T> RandomAccessIterator for Chunks<'a, T> {
-    #[inline]
-    fn indexable(&self) -> usize {
-        self.v.len()/self.size + if self.v.len() % self.size != 0 { 1 } else { 0 }
-    }
-
-    #[inline]
-    fn idx(&mut self, index: usize) -> Option<&'a [T]> {
-        if index < self.indexable() {
-            let lo = index * self.size;
-            let mut hi = lo + self.size;
-            if hi < lo || hi > self.v.len() { hi = self.v.len(); }
-
-            Some(&self.v[lo..hi])
-        } else {
-            None
-        }
-    }
-}
-
 /// An iterator over a slice in (non-overlapping) mutable chunks (`size`
 /// elements at a time). When the slice len is not evenly divided by the chunk
 /// size, the last slice of the iteration will be the remainder.
@@ -1439,37 +1378,6 @@ pub unsafe fn from_raw_parts_mut<'a, T>(p: *mut T, len: usize) -> &'a mut [T] {
     mem::transmute(RawSlice { data: p, len: len })
 }
 
-#[inline]
-fn check_types<T,U>() {
-    assert!(mem::size_of::<T>() == mem::size_of::<U>());
-    assert!(mem::align_of::<T>() % mem::align_of::<U>() == 0)
-}
-
-/// Reinterprets a slice of one type as a slice of another type.
-///
-/// Both types have to have the same size and the type that is converted to
-/// must have equal or less restrictive alignment.
-///
-/// # Panics
-///
-/// This functions panics if the above preconditions about the types are not
-/// met.
-#[inline]
-unsafe fn transmute<T,U>(slice: &[T]) -> &[U] {
-    check_types::<T,U>();
-    from_raw_parts(slice.as_ptr() as *const U, slice.len())
-}
-
-/// Reinterprets a mutable slice of one type as a mutable slice of another
-/// type.
-///
-/// Equivalent of `slice::transmute` for mutable slices.
-#[inline]
-unsafe fn transmute_mut<T,U>(slice: &mut [T]) -> &mut [U] {
-    check_types::<T,U>();
-    from_raw_parts_mut(slice.as_mut_ptr() as *mut U, slice.len())
-}
-
 //
 // Submodules
 //
@@ -1579,51 +1487,3 @@ impl<T: PartialOrd> PartialOrd for [T] {
         order::gt(self.iter(), other.iter())
     }
 }
-
-/// Extension methods for slices containing integers.
-#[unstable(feature = "int_slice")]
-#[deprecated(since = "1.2.0",
-             reason = "has not seen much usage and may want to live in the \
-                       standard library now that most slice methods are \
-                       on an inherent implementation block")]
-pub trait IntSliceExt<U, S> {
-    /// Converts the slice to an immutable slice of unsigned integers with the same width.
-    fn as_unsigned<'a>(&'a self) -> &'a [U];
-    /// Converts the slice to an immutable slice of signed integers with the same width.
-    fn as_signed<'a>(&'a self) -> &'a [S];
-
-    /// Converts the slice to a mutable slice of unsigned integers with the same width.
-    fn as_unsigned_mut<'a>(&'a mut self) -> &'a mut [U];
-    /// Converts the slice to a mutable slice of signed integers with the same width.
-    fn as_signed_mut<'a>(&'a mut self) -> &'a mut [S];
-}
-
-macro_rules! impl_int_slice {
-    ($u:ty, $s:ty, $t:ty) => {
-        #[unstable(feature = "int_slice")]
-        #[allow(deprecated)]
-        impl IntSliceExt<$u, $s> for [$t] {
-            #[inline]
-            fn as_unsigned(&self) -> &[$u] { unsafe { transmute(self) } }
-            #[inline]
-            fn as_signed(&self) -> &[$s] { unsafe { transmute(self) } }
-            #[inline]
-            fn as_unsigned_mut(&mut self) -> &mut [$u] { unsafe { transmute_mut(self) } }
-            #[inline]
-            fn as_signed_mut(&mut self) -> &mut [$s] { unsafe { transmute_mut(self) } }
-        }
-    }
-}
-
-macro_rules! impl_int_slices {
-    ($u:ty, $s:ty) => {
-        impl_int_slice! { $u, $s, $u }
-        impl_int_slice! { $u, $s, $s }
-    }
-}
-
-impl_int_slices! { u8,   i8  }
-impl_int_slices! { u16,  i16 }
-impl_int_slices! { u32,  i32 }
-impl_int_slices! { u64,  i64 }
-impl_int_slices! { usize, isize }
diff --git a/src/libcoretest/char.rs b/src/libcoretest/char.rs
index 35f8372a709..e077a0d8fe7 100644
--- a/src/libcoretest/char.rs
+++ b/src/libcoretest/char.rs
@@ -211,31 +211,3 @@ fn test_len_utf16() {
     assert!('\u{a66e}'.len_utf16() == 1);
     assert!('\u{1f4a9}'.len_utf16() == 2);
 }
-
-#[allow(deprecated)]
-#[test]
-fn test_width() {
-    assert_eq!('\x00'.width(false),Some(0));
-    assert_eq!('\x00'.width(true),Some(0));
-
-    assert_eq!('\x0A'.width(false),None);
-    assert_eq!('\x0A'.width(true),None);
-
-    assert_eq!('w'.width(false),Some(1));
-    assert_eq!('w'.width(true),Some(1));
-
-    assert_eq!('h'.width(false),Some(2));
-    assert_eq!('h'.width(true),Some(2));
-
-    assert_eq!('\u{AD}'.width(false),Some(1));
-    assert_eq!('\u{AD}'.width(true),Some(1));
-
-    assert_eq!('\u{1160}'.width(false),Some(0));
-    assert_eq!('\u{1160}'.width(true),Some(0));
-
-    assert_eq!('\u{a1}'.width(false),Some(1));
-    assert_eq!('\u{a1}'.width(true),Some(2));
-
-    assert_eq!('\u{300}'.width(false),Some(0));
-    assert_eq!('\u{300}'.width(true),Some(0));
-}
diff --git a/src/libcoretest/cmp.rs b/src/libcoretest/cmp.rs
index e0d396c68b4..051356cad16 100644
--- a/src/libcoretest/cmp.rs
+++ b/src/libcoretest/cmp.rs
@@ -8,7 +8,6 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-use core::cmp::{partial_min, partial_max};
 use core::cmp::Ordering::{Less, Greater, Equal};
 
 #[test]
@@ -43,72 +42,6 @@ fn test_ordering_order() {
 }
 
 #[test]
-fn test_partial_min() {
-    use core::f64::NAN;
-    let data_integer = [
-        // a, b, result
-        (0, 0, Some(0)),
-        (1, 0, Some(0)),
-        (0, 1, Some(0)),
-        (-1, 0, Some(-1)),
-        (0, -1, Some(-1))
-    ];
-
-    let data_float = [
-        // a, b, result
-        (0.0f64, 0.0f64, Some(0.0f64)),
-        (1.0f64, 0.0f64, Some(0.0f64)),
-        (0.0f64, 1.0f64, Some(0.0f64)),
-        (-1.0f64, 0.0f64, Some(-1.0f64)),
-        (0.0f64, -1.0f64, Some(-1.0f64)),
-        (NAN, NAN, None),
-        (NAN, 1.0f64, None),
-        (1.0f64, NAN, None)
-    ];
-
-    for &(a, b, result) in &data_integer {
-        assert!(partial_min(a, b) == result);
-    }
-
-    for &(a, b, result) in &data_float {
-        assert!(partial_min(a, b) == result);
-    }
-}
-
-#[test]
-fn test_partial_max() {
-    use core::f64::NAN;
-    let data_integer = [
-        // a, b, result
-        (0, 0, Some(0)),
-        (1, 0, Some(1)),
-        (0, 1, Some(1)),
-        (-1, 0, Some(0)),
-        (0, -1, Some(0))
-    ];
-
-    let data_float = [
-        // a, b, result
-        (0.0f64, 0.0f64, Some(0.0f64)),
-        (1.0f64, 0.0f64, Some(1.0f64)),
-        (0.0f64, 1.0f64, Some(1.0f64)),
-        (-1.0f64, 0.0f64, Some(0.0f64)),
-        (0.0f64, -1.0f64, Some(0.0f64)),
-        (NAN, NAN, None),
-        (NAN, 1.0f64, None),
-        (1.0f64, NAN, None)
-    ];
-
-    for &(a, b, result) in &data_integer {
-        assert!(partial_max(a, b) == result);
-    }
-
-    for &(a, b, result) in &data_float {
-        assert!(partial_max(a, b) == result);
-    }
-}
-
-#[test]
 fn test_user_defined_eq() {
     // Our type.
     struct SketchyNum {
diff --git a/src/libcoretest/hash/mod.rs b/src/libcoretest/hash/mod.rs
index 595bce68201..4ea42644ecd 100644
--- a/src/libcoretest/hash/mod.rs
+++ b/src/libcoretest/hash/mod.rs
@@ -36,7 +36,9 @@ impl Hasher for MyHasher {
 #[test]
 fn test_writer_hasher() {
     fn hash<T: Hash>(t: &T) -> u64 {
-        ::std::hash::hash::<_, MyHasher>(t)
+        let mut s = MyHasher { hash: 0 };
+        t.hash(&mut s);
+        s.finish()
     }
 
     assert_eq!(hash(&()), 0);
@@ -102,7 +104,9 @@ impl Hash for Custom {
 #[test]
 fn test_custom_state() {
     fn hash<T: Hash>(t: &T) -> u64 {
-        ::std::hash::hash::<_, CustomHasher>(t)
+        let mut c = CustomHasher { output: 0 };
+        t.hash(&mut c);
+        c.finish()
     }
 
     assert_eq!(hash(&Custom { hash: 5 }), 5);
diff --git a/src/libcoretest/iter.rs b/src/libcoretest/iter.rs
index dca899a8e9f..ea65c118e5e 100644
--- a/src/libcoretest/iter.rs
+++ b/src/libcoretest/iter.rs
@@ -10,10 +10,8 @@
 
 use core::iter::*;
 use core::iter::order::*;
-use core::iter::MinMaxResult::*;
 use core::{i8, i16, isize};
 use core::usize;
-use core::cmp;
 
 use test::Bencher;
 
@@ -452,27 +450,6 @@ fn test_inspect() {
 }
 
 #[test]
-fn test_unfoldr() {
-    fn count(st: &mut usize) -> Option<usize> {
-        if *st < 10 {
-            let ret = Some(*st);
-            *st += 1;
-            ret
-        } else {
-            None
-        }
-    }
-
-    let it = Unfold::new(0, count);
-    let mut i = 0;
-    for counted in it {
-        assert_eq!(counted, i);
-        i += 1;
-    }
-    assert_eq!(i, 10);
-}
-
-#[test]
 fn test_cycle() {
     let cycle_len = 3;
     let it = (0..).step_by(1).take(cycle_len).cycle();
@@ -781,28 +758,6 @@ fn test_rposition_panic() {
 }
 
 
-#[cfg(test)]
-fn check_randacc_iter<A, T>(a: T, len: usize) where
-    A: PartialEq,
-    T: Clone + RandomAccessIterator + Iterator<Item=A>,
-{
-    let mut b = a.clone();
-    assert_eq!(len, b.indexable());
-    let mut n = 0;
-    for (i, elt) in a.enumerate() {
-        assert!(Some(elt) == b.idx(i));
-        n += 1;
-    }
-    assert_eq!(n, len);
-    assert!(None == b.idx(n));
-    // call recursively to check after picking off an element
-    if len > 0 {
-        b.next();
-        check_randacc_iter(b, len-1);
-    }
-}
-
-
 #[test]
 fn test_double_ended_flat_map() {
     let u = [0,1];
@@ -821,101 +776,6 @@ fn test_double_ended_flat_map() {
 }
 
 #[test]
-fn test_random_access_chain() {
-    let xs = [1, 2, 3, 4, 5];
-    let ys = [7, 9, 11];
-    let mut it = xs.iter().chain(&ys);
-    assert_eq!(it.idx(0).unwrap(), &1);
-    assert_eq!(it.idx(5).unwrap(), &7);
-    assert_eq!(it.idx(7).unwrap(), &11);
-    assert!(it.idx(8).is_none());
-
-    it.next();
-    it.next();
-    it.next_back();
-
-    assert_eq!(it.idx(0).unwrap(), &3);
-    assert_eq!(it.idx(4).unwrap(), &9);
-    assert!(it.idx(6).is_none());
-
-    check_randacc_iter(it, xs.len() + ys.len() - 3);
-}
-
-#[test]
-fn test_random_access_enumerate() {
-    let xs = [1, 2, 3, 4, 5];
-    check_randacc_iter(xs.iter().enumerate(), xs.len());
-}
-
-#[test]
-fn test_random_access_rev() {
-    let xs = [1, 2, 3, 4, 5];
-    check_randacc_iter(xs.iter().rev(), xs.len());
-    let mut it = xs.iter().rev();
-    it.next();
-    it.next_back();
-    it.next();
-    check_randacc_iter(it, xs.len() - 3);
-}
-
-#[test]
-fn test_random_access_zip() {
-    let xs = [1, 2, 3, 4, 5];
-    let ys = [7, 9, 11];
-    check_randacc_iter(xs.iter().zip(&ys), cmp::min(xs.len(), ys.len()));
-}
-
-#[test]
-fn test_random_access_take() {
-    let xs = [1, 2, 3, 4, 5];
-    let empty: &[isize] = &[];
-    check_randacc_iter(xs.iter().take(3), 3);
-    check_randacc_iter(xs.iter().take(20), xs.len());
-    check_randacc_iter(xs.iter().take(0), 0);
-    check_randacc_iter(empty.iter().take(2), 0);
-}
-
-#[test]
-fn test_random_access_skip() {
-    let xs = [1, 2, 3, 4, 5];
-    let empty: &[isize] = &[];
-    check_randacc_iter(xs.iter().skip(2), xs.len() - 2);
-    check_randacc_iter(empty.iter().skip(2), 0);
-}
-
-#[test]
-fn test_random_access_inspect() {
-    let xs = [1, 2, 3, 4, 5];
-
-    // test .map and .inspect that don't implement Clone
-    let mut it = xs.iter().inspect(|_| {});
-    assert_eq!(xs.len(), it.indexable());
-    for (i, elt) in xs.iter().enumerate() {
-        assert_eq!(Some(elt), it.idx(i));
-    }
-
-}
-
-#[test]
-fn test_random_access_map() {
-    let xs = [1, 2, 3, 4, 5];
-
-    let mut it = xs.iter().cloned();
-    assert_eq!(xs.len(), it.indexable());
-    for (i, elt) in xs.iter().enumerate() {
-        assert_eq!(Some(*elt), it.idx(i));
-    }
-}
-
-#[test]
-fn test_random_access_cycle() {
-    let xs = [1, 2, 3, 4, 5];
-    let empty: &[isize] = &[];
-    check_randacc_iter(xs.iter().cycle().take(27), 27);
-    check_randacc_iter(empty.iter().cycle(), 0);
-}
-
-#[test]
 fn test_double_ended_range() {
     assert_eq!((11..14).rev().collect::<Vec<_>>(), [13, 12, 11]);
     for _ in (10..0).rev() {
@@ -985,13 +845,6 @@ fn test_range_step() {
 }
 
 #[test]
-fn test_reverse() {
-    let mut ys = [1, 2, 3, 4, 5];
-    ys.iter_mut().reverse_in_place();
-    assert!(ys == [5, 4, 3, 2, 1]);
-}
-
-#[test]
 fn test_peekable_is_empty() {
     let a = [1];
     let mut it = a.iter().peekable();
@@ -1001,45 +854,6 @@ fn test_peekable_is_empty() {
 }
 
 #[test]
-fn test_min_max() {
-    let v: [isize; 0] = [];
-    assert_eq!(v.iter().min_max(), NoElements);
-
-    let v = [1];
-    assert!(v.iter().min_max() == OneElement(&1));
-
-    let v = [1, 2, 3, 4, 5];
-    assert!(v.iter().min_max() == MinMax(&1, &5));
-
-    let v = [1, 2, 3, 4, 5, 6];
-    assert!(v.iter().min_max() == MinMax(&1, &6));
-
-    let v = [1, 1, 1, 1];
-    assert!(v.iter().min_max() == MinMax(&1, &1));
-}
-
-#[test]
-fn test_min_max_result() {
-    let r: MinMaxResult<isize> = NoElements;
-    assert_eq!(r.into_option(), None);
-
-    let r = OneElement(1);
-    assert_eq!(r.into_option(), Some((1,1)));
-
-    let r = MinMax(1,2);
-    assert_eq!(r.into_option(), Some((1,2)));
-}
-
-#[test]
-fn test_iterate() {
-    let mut it = iterate(1, |x| x * 2);
-    assert_eq!(it.next(), Some(1));
-    assert_eq!(it.next(), Some(2));
-    assert_eq!(it.next(), Some(4));
-    assert_eq!(it.next(), Some(8));
-}
-
-#[test]
 fn test_repeat() {
     let mut it = repeat(42);
     assert_eq!(it.next(), Some(42));
diff --git a/src/libcoretest/lib.rs b/src/libcoretest/lib.rs
index 08536e63204..80b74b2252c 100644
--- a/src/libcoretest/lib.rs
+++ b/src/libcoretest/lib.rs
@@ -12,7 +12,6 @@
 #![feature(borrow_state)]
 #![feature(box_syntax)]
 #![feature(cell_extras)]
-#![feature(cmp_partial)]
 #![feature(const_fn)]
 #![feature(core)]
 #![feature(core_float)]
@@ -20,18 +19,10 @@
 #![feature(float_from_str_radix)]
 #![feature(flt2dec)]
 #![feature(fmt_radix)]
-#![feature(hash_default)]
-#![feature(hasher_write)]
 #![feature(iter_arith)]
 #![feature(iter_arith)]
 #![feature(iter_cmp)]
-#![feature(iter_empty)]
-#![feature(iter_idx)]
-#![feature(iter_iterate)]
-#![feature(iter_min_max)]
-#![feature(iter_once)]
 #![feature(iter_order)]
-#![feature(iter_unfold)]
 #![feature(libc)]
 #![feature(nonzero)]
 #![feature(num_bits_bytes)]
diff --git a/src/libgetopts/lib.rs b/src/libgetopts/lib.rs
index c9bd3c04fa9..d0f6c3be8ca 100644
--- a/src/libgetopts/lib.rs
+++ b/src/libgetopts/lib.rs
@@ -539,16 +539,6 @@ pub fn opt(short_name: &str,
     }
 }
 
-impl Fail {
-    /// Convert a `Fail` enum into an error string.
-    #[unstable(feature = "rustc_private")]
-    #[deprecated(since = "1.0.0",
-                 reason = "use `fmt::Display` (`{}` format specifier)")]
-    pub fn to_err_msg(self) -> String {
-        self.to_string()
-    }
-}
-
 impl fmt::Display for Fail {
     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
         match *self {
diff --git a/src/librustc/lib.rs b/src/librustc/lib.rs
index 6b53f835be5..1916a494990 100644
--- a/src/librustc/lib.rs
+++ b/src/librustc/lib.rs
@@ -60,7 +60,6 @@
 #![feature(vec_push_all)]
 #![feature(wrapping)]
 #![feature(cell_extras)]
-#![feature(page_size)]
 #![cfg_attr(test, feature(test))]
 
 #![allow(trivial_casts)]
diff --git a/src/librustc/plugin/load.rs b/src/librustc/plugin/load.rs
index 4ea331f6898..e0cb47d6c95 100644
--- a/src/librustc/plugin/load.rs
+++ b/src/librustc/plugin/load.rs
@@ -99,7 +99,6 @@ impl<'a> PluginLoader<'a> {
     }
 
     // Dynamically link a registrar function into the compiler process.
-    #[allow(deprecated)] // until #23197
     fn dylink_registrar(&mut self,
                         span: Span,
                         path: PathBuf,
diff --git a/src/librustc/util/common.rs b/src/librustc/util/common.rs
index db0f820e11b..beb95697201 100644
--- a/src/librustc/util/common.rs
+++ b/src/librustc/util/common.rs
@@ -75,24 +75,28 @@ pub fn time<T, U, F>(do_it: bool, what: &str, u: U, f: F) -> T where
     rv
 }
 
+// Like std::macros::try!, but for Option<>.
+macro_rules! option_try(
+    ($e:expr) => (match $e { Some(e) => e, None => return None })
+);
+
 // Memory reporting
 #[cfg(unix)]
 fn get_resident() -> Option<usize> {
-    get_proc_self_statm_field(1)
-}
+    use std::fs::File;
+    use std::io::Read;
 
-#[cfg(windows)]
-fn get_resident() -> Option<usize> {
-    get_working_set_size()
+    let field = 1;
+    let mut f = option_try!(File::open("/proc/self/statm").ok());
+    let mut contents = String::new();
+    option_try!(f.read_to_string(&mut contents).ok());
+    let s = option_try!(contents.split_whitespace().nth(field));
+    let npages = option_try!(s.parse::<usize>().ok());
+    Some(npages * 4096)
 }
 
-// Like std::macros::try!, but for Option<>.
-macro_rules! option_try(
-    ($e:expr) => (match $e { Some(e) => e, None => return None })
-);
-
 #[cfg(windows)]
-fn get_working_set_size() -> Option<usize> {
+fn get_resident() -> Option<usize> {
     use libc::{BOOL, DWORD, HANDLE, SIZE_T, GetCurrentProcess};
     use std::mem;
     #[repr(C)] #[allow(non_snake_case)]
@@ -123,22 +127,6 @@ fn get_working_set_size() -> Option<usize> {
     }
 }
 
-#[cfg_attr(windows, allow(dead_code))]
-#[allow(deprecated)]
-fn get_proc_self_statm_field(field: usize) -> Option<usize> {
-    use std::fs::File;
-    use std::io::Read;
-
-    assert!(cfg!(unix));
-
-    let mut f = option_try!(File::open("/proc/self/statm").ok());
-    let mut contents = String::new();
-    option_try!(f.read_to_string(&mut contents).ok());
-    let s = option_try!(contents.split_whitespace().nth(field));
-    let npages = option_try!(s.parse::<usize>().ok());
-    Some(npages * ::std::env::page_size())
-}
-
 pub fn indent<R, F>(op: F) -> R where
     R: Debug,
     F: FnOnce() -> R,
diff --git a/src/librustc_back/tempdir.rs b/src/librustc_back/tempdir.rs
index de934cf65ac..077a0feebd4 100644
--- a/src/librustc_back/tempdir.rs
+++ b/src/librustc_back/tempdir.rs
@@ -75,7 +75,6 @@ impl TempDir {
     /// deleted once the returned wrapper is destroyed.
     ///
     /// If no directory can be created, `Err` is returned.
-    #[allow(deprecated)]
     pub fn new(prefix: &str) -> io::Result<TempDir> {
         TempDir::new_in(&env::temp_dir(), prefix)
     }
diff --git a/src/librustc_bitflags/lib.rs b/src/librustc_bitflags/lib.rs
index 59baa638bfe..dd73969a4d7 100644
--- a/src/librustc_bitflags/lib.rs
+++ b/src/librustc_bitflags/lib.rs
@@ -19,7 +19,6 @@
 #![feature(no_std)]
 #![no_std]
 #![unstable(feature = "rustc_private")]
-#![cfg_attr(test, feature(hash_default))]
 
 //! A typesafe bitmask flag generator.
 
@@ -293,7 +292,7 @@ macro_rules! bitflags {
 #[cfg(test)]
 #[allow(non_upper_case_globals)]
 mod tests {
-    use std::hash::{self, SipHasher};
+    use std::hash::{Hasher, Hash, SipHasher};
     use std::option::Option::{Some, None};
 
     bitflags! {
@@ -487,9 +486,15 @@ mod tests {
     fn test_hash() {
       let mut x = Flags::empty();
       let mut y = Flags::empty();
-      assert!(hash::hash::<Flags, SipHasher>(&x) == hash::hash::<Flags, SipHasher>(&y));
+      assert!(hash(&x) == hash(&y));
       x = Flags::all();
       y = Flags::FlagABC;
-      assert!(hash::hash::<Flags, SipHasher>(&x) == hash::hash::<Flags, SipHasher>(&y));
+      assert!(hash(&x) == hash(&y));
+    }
+
+    fn hash<T: Hash>(t: &T) -> u64 {
+        let mut s = SipHasher::new();
+        t.hash(&mut s);
+        s.finish()
     }
 }
diff --git a/src/librustc_lint/builtin.rs b/src/librustc_lint/builtin.rs
index c1e5fee2dcb..f5819316477 100644
--- a/src/librustc_lint/builtin.rs
+++ b/src/librustc_lint/builtin.rs
@@ -28,9 +28,6 @@
 //! Use the former for unit-like structs and the latter for structs with
 //! a `pub fn new()`.
 
-// BitSet
-#![allow(deprecated)]
-
 use metadata::{csearch, decoder};
 use middle::{cfg, def, infer, pat_util, stability, traits};
 use middle::subst::Substs;
@@ -41,7 +38,7 @@ use rustc::ast_map;
 use util::nodemap::{FnvHashMap, FnvHashSet, NodeSet};
 use lint::{Level, Context, LintPass, LintArray, Lint};
 
-use std::collections::{HashSet, BitSet};
+use std::collections::HashSet;
 use std::collections::hash_map::Entry::{Occupied, Vacant};
 use std::{cmp, slice};
 use std::{i8, i16, i32, i64, u8, u16, u32, u64, f32, f64};
@@ -2170,7 +2167,7 @@ impl LintPass for UnconditionalRecursion {
         let mut work_queue = vec![cfg.entry];
         let mut reached_exit_without_self_call = false;
         let mut self_call_spans = vec![];
-        let mut visited = BitSet::new();
+        let mut visited = HashSet::new();
 
         while let Some(idx) = work_queue.pop() {
             if idx == cfg.exit {
diff --git a/src/librustc_trans/save/mod.rs b/src/librustc_trans/save/mod.rs
index 5bbd8ce1549..c5ed6561a27 100644
--- a/src/librustc_trans/save/mod.rs
+++ b/src/librustc_trans/save/mod.rs
@@ -703,7 +703,6 @@ impl<'v> Visitor<'v> for PathCollector {
     }
 }
 
-#[allow(deprecated)]
 pub fn process_crate(tcx: &ty::ctxt,
                      analysis: &ty::CrateAnalysis,
                      odir: Option<&Path>) {
diff --git a/src/librustc_unicode/char.rs b/src/librustc_unicode/char.rs
index 815c1ed4fff..eceb7fdfc7b 100644
--- a/src/librustc_unicode/char.rs
+++ b/src/librustc_unicode/char.rs
@@ -32,16 +32,12 @@
 use core::char::CharExt as C;
 use core::option::Option::{self, Some, None};
 use core::iter::Iterator;
-use tables::{derived_property, property, general_category, conversions, charwidth};
+use tables::{derived_property, property, general_category, conversions};
 
 // stable reexports
 pub use core::char::{MAX, from_u32, from_u32_unchecked, from_digit, EscapeUnicode, EscapeDefault};
 
 // unstable reexports
-#[allow(deprecated)]
-pub use normalize::{decompose_canonical, decompose_compatible, compose};
-#[allow(deprecated)]
-pub use tables::normalization::canonical_combining_class;
 pub use tables::UNICODE_VERSION;
 
 /// An iterator over the lowercase mapping of a given character, returned from
@@ -502,22 +498,4 @@ impl char {
     pub fn to_uppercase(self) -> ToUppercase {
         ToUppercase(CaseMappingIter::new(conversions::to_upper(self)))
     }
-
-    /// Returns this character's displayed width in columns, or `None` if it is a
-    /// control character other than `'\x00'`.
-    ///
-    /// `is_cjk` determines behavior for characters in the Ambiguous category:
-    /// if `is_cjk` is `true`, these are 2 columns wide; otherwise, they are 1.
-    /// In CJK contexts, `is_cjk` should be `true`, else it should be `false`.
-    /// [Unicode Standard Annex #11](http://www.unicode.org/reports/tr11/)
-    /// recommends that these characters be treated as 1 column (i.e.,
-    /// `is_cjk` = `false`) if the context cannot be reliably determined.
-    #[deprecated(reason = "use the crates.io `unicode-width` library instead",
-                 since = "1.0.0")]
-    #[unstable(feature = "unicode",
-               reason = "needs expert opinion. is_cjk flag stands out as ugly")]
-    #[inline]
-    pub fn width(self, is_cjk: bool) -> Option<usize> {
-        charwidth::width(self, is_cjk)
-    }
 }
diff --git a/src/librustc_unicode/lib.rs b/src/librustc_unicode/lib.rs
index 3ff40560264..5fd77c27b64 100644
--- a/src/librustc_unicode/lib.rs
+++ b/src/librustc_unicode/lib.rs
@@ -37,18 +37,16 @@
 #![feature(core_char_ext)]
 #![feature(core_slice_ext)]
 #![feature(core_str_ext)]
-#![feature(iter_arith)]
 #![feature(lang_items)]
 #![feature(no_std)]
 #![feature(staged_api)]
 
-mod normalize;
 mod tables;
 mod u_str;
 pub mod char;
 
 pub mod str {
-    pub use u_str::{UnicodeStr, SplitWhitespace, Words, Graphemes, GraphemeIndices};
+    pub use u_str::{UnicodeStr, SplitWhitespace};
     pub use u_str::{utf8_char_width, is_utf16, Utf16Items, Utf16Item};
     pub use u_str::{utf16_items, Utf16Encoder};
 }
diff --git a/src/librustc_unicode/normalize.rs b/src/librustc_unicode/normalize.rs
deleted file mode 100644
index d5219ab28fe..00000000000
--- a/src/librustc_unicode/normalize.rs
+++ /dev/null
@@ -1,162 +0,0 @@
-// Copyright 2012-2014 The Rust Project Developers. See the COPYRIGHT
-// file at the top-level directory of this distribution and at
-// http://rust-lang.org/COPYRIGHT.
-//
-// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
-// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
-// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
-// option. This file may not be copied, modified, or distributed
-// except according to those terms.
-
-//! Functions for computing canonical and compatible decompositions for Unicode characters.
-
-use core::cmp::Ordering::{Equal, Less, Greater};
-use core::ops::FnMut;
-use core::option::Option;
-use core::option::Option::{Some, None};
-use core::slice::SliceExt;
-use core::result::Result::{Ok, Err};
-use tables::normalization::{canonical_table, compatibility_table, composition_table};
-
-fn bsearch_table<T>(c: char, r: &'static [(char, &'static [T])]) -> Option<&'static [T]> {
-    match r.binary_search_by(|&(val, _)| {
-        if c == val { Equal }
-        else if val < c { Less }
-        else { Greater }
-    }) {
-        Ok(idx) => {
-            let (_, result) = r[idx];
-            Some(result)
-        }
-        Err(_) => None
-    }
-}
-
-/// Compute canonical Unicode decomposition for character
-#[deprecated(reason = "use the crates.io `unicode-normalization` library instead",
-             since = "1.0.0")]
-#[unstable(feature = "unicode",
-           reason = "this functionality will be moved to crates.io")]
-pub fn decompose_canonical<F>(c: char, mut i: F) where F: FnMut(char) { d(c, &mut i, false); }
-
-/// Compute canonical or compatible Unicode decomposition for character
-#[deprecated(reason = "use the crates.io `unicode-normalization` library instead",
-             since = "1.0.0")]
-#[unstable(feature = "unicode",
-           reason = "this functionality will be moved to crates.io")]
-pub fn decompose_compatible<F>(c: char, mut i: F) where F: FnMut(char) { d(c, &mut i, true); }
-
-// FIXME(#19596) This is a workaround, we should use `F` instead of `&mut F`
-fn d<F>(c: char, i: &mut F, k: bool) where F: FnMut(char) {
-    // 7-bit ASCII never decomposes
-    if c <= '\x7f' { (*i)(c); return; }
-
-    // Perform decomposition for Hangul
-    if (c as u32) >= S_BASE && (c as u32) < (S_BASE + S_COUNT) {
-        decompose_hangul(c, i);
-        return;
-    }
-
-    // First check the canonical decompositions
-    match bsearch_table(c, canonical_table) {
-        Some(canon) => {
-            for x in canon {
-                d(*x, i, k);
-            }
-            return;
-        }
-        None => ()
-    }
-
-    // Bottom out if we're not doing compat.
-    if !k { (*i)(c); return; }
-
-    // Then check the compatibility decompositions
-    match bsearch_table(c, compatibility_table) {
-        Some(compat) => {
-            for x in compat {
-                d(*x, i, k);
-            }
-            return;
-        }
-        None => ()
-    }
-
-    // Finally bottom out.
-    (*i)(c);
-}
-
-#[deprecated(reason = "use the crates.io `unicode-normalization` library instead",
-             since = "1.0.0")]
-#[unstable(feature = "unicode",
-           reason = "this functionality will be moved to crates.io")]
-pub fn compose(a: char, b: char) -> Option<char> {
-    compose_hangul(a, b).or_else(|| {
-        match bsearch_table(a, composition_table) {
-            None => None,
-            Some(candidates) => {
-                match candidates.binary_search_by(|&(val, _)| {
-                    if b == val { Equal }
-                    else if val < b { Less }
-                    else { Greater }
-                }) {
-                    Ok(idx) => {
-                        let (_, result) = candidates[idx];
-                        Some(result)
-                    }
-                    Err(_) => None
-                }
-            }
-        }
-    })
-}
-
-// Constants from Unicode 6.3.0 Section 3.12 Conjoining Jamo Behavior
-const S_BASE: u32 = 0xAC00;
-const L_BASE: u32 = 0x1100;
-const V_BASE: u32 = 0x1161;
-const T_BASE: u32 = 0x11A7;
-const L_COUNT: u32 = 19;
-const V_COUNT: u32 = 21;
-const T_COUNT: u32 = 28;
-const N_COUNT: u32 = (V_COUNT * T_COUNT);
-const S_COUNT: u32 = (L_COUNT * N_COUNT);
-
-// FIXME(#19596) This is a workaround, we should use `F` instead of `&mut F`
-// Decompose a precomposed Hangul syllable
-#[inline(always)]
-fn decompose_hangul<F>(s: char, f: &mut F) where F: FnMut(char) {
-    use core::char::from_u32_unchecked;
-    let si = s as u32 - S_BASE;
-    let li = si / N_COUNT;
-    unsafe {
-        (*f)(from_u32_unchecked(L_BASE + li));
-
-        let vi = (si % N_COUNT) / T_COUNT;
-        (*f)(from_u32_unchecked(V_BASE + vi));
-
-        let ti = si % T_COUNT;
-        if ti > 0 {
-            (*f)(from_u32_unchecked(T_BASE + ti));
-        }
-    }
-}
-
-// Compose a pair of Hangul Jamo
-#[inline(always)]
-fn compose_hangul(a: char, b: char) -> Option<char> {
-    use core::char::from_u32_unchecked;
-    let l = a as u32;
-    let v = b as u32;
-    // Compose an LPart and a VPart
-    if L_BASE <= l && l < (L_BASE + L_COUNT) && V_BASE <= v && v < (V_BASE + V_COUNT) {
-        let r = S_BASE + (l - L_BASE) * N_COUNT + (v - V_BASE) * T_COUNT;
-        return unsafe { Some(from_u32_unchecked(r)) };
-    }
-    // Compose an LVPart and a TPart
-    if S_BASE <= l && l <= (S_BASE+S_COUNT-T_COUNT) && T_BASE <= v && v < (T_BASE+T_COUNT) {
-        let r = l + (v - T_BASE);
-        return unsafe { Some(from_u32_unchecked(r)) };
-    }
-    None
-}
diff --git a/src/librustc_unicode/tables.rs b/src/librustc_unicode/tables.rs
index ed1df988206..a314ffb2642 100644
--- a/src/librustc_unicode/tables.rs
+++ b/src/librustc_unicode/tables.rs
@@ -14,7 +14,7 @@
 
 /// The version of [Unicode](http://www.unicode.org/)
 /// that the unicode parts of `CharExt` and `UnicodeStrPrelude` traits are based on.
-pub const UNICODE_VERSION: (u64, u64, u64) = (7, 0, 0);
+pub const UNICODE_VERSION: (u64, u64, u64) = (8, 0, 0);
 
 fn bsearch_range_table(c: char, r: &'static [(char,char)]) -> bool {
     use core::cmp::Ordering::{Equal, Less, Greater};
@@ -53,8 +53,8 @@ pub mod general_category {
         ('\u{104a0}', '\u{104a9}'), ('\u{11066}', '\u{1106f}'), ('\u{110f0}', '\u{110f9}'),
         ('\u{11136}', '\u{1113f}'), ('\u{111d0}', '\u{111d9}'), ('\u{112f0}', '\u{112f9}'),
         ('\u{114d0}', '\u{114d9}'), ('\u{11650}', '\u{11659}'), ('\u{116c0}', '\u{116c9}'),
-        ('\u{118e0}', '\u{118e9}'), ('\u{12400}', '\u{1246e}'), ('\u{16a60}', '\u{16a69}'),
-        ('\u{16b50}', '\u{16b59}'), ('\u{1d7ce}', '\u{1d7ff}')
+        ('\u{11730}', '\u{11739}'), ('\u{118e0}', '\u{118e9}'), ('\u{12400}', '\u{1246e}'),
+        ('\u{16a60}', '\u{16a69}'), ('\u{16b50}', '\u{16b59}'), ('\u{1d7ce}', '\u{1d7ff}')
     ];
 
     pub fn N(c: char) -> bool {
@@ -79,7 +79,7 @@ pub mod derived_property {
         '\u{6e8}'), ('\u{6ed}', '\u{6ef}'), ('\u{6fa}', '\u{6fc}'), ('\u{6ff}', '\u{6ff}'),
         ('\u{710}', '\u{73f}'), ('\u{74d}', '\u{7b1}'), ('\u{7ca}', '\u{7ea}'), ('\u{7f4}',
         '\u{7f5}'), ('\u{7fa}', '\u{7fa}'), ('\u{800}', '\u{817}'), ('\u{81a}', '\u{82c}'),
-        ('\u{840}', '\u{858}'), ('\u{8a0}', '\u{8b2}'), ('\u{8e4}', '\u{8e9}'), ('\u{8f0}',
+        ('\u{840}', '\u{858}'), ('\u{8a0}', '\u{8b4}'), ('\u{8e3}', '\u{8e9}'), ('\u{8f0}',
         '\u{93b}'), ('\u{93d}', '\u{94c}'), ('\u{94e}', '\u{950}'), ('\u{955}', '\u{963}'),
         ('\u{971}', '\u{983}'), ('\u{985}', '\u{98c}'), ('\u{98f}', '\u{990}'), ('\u{993}',
         '\u{9a8}'), ('\u{9aa}', '\u{9b0}'), ('\u{9b2}', '\u{9b2}'), ('\u{9b6}', '\u{9b9}'),
@@ -93,91 +93,91 @@ pub mod derived_property {
         '\u{a8d}'), ('\u{a8f}', '\u{a91}'), ('\u{a93}', '\u{aa8}'), ('\u{aaa}', '\u{ab0}'),
         ('\u{ab2}', '\u{ab3}'), ('\u{ab5}', '\u{ab9}'), ('\u{abd}', '\u{ac5}'), ('\u{ac7}',
         '\u{ac9}'), ('\u{acb}', '\u{acc}'), ('\u{ad0}', '\u{ad0}'), ('\u{ae0}', '\u{ae3}'),
-        ('\u{b01}', '\u{b03}'), ('\u{b05}', '\u{b0c}'), ('\u{b0f}', '\u{b10}'), ('\u{b13}',
-        '\u{b28}'), ('\u{b2a}', '\u{b30}'), ('\u{b32}', '\u{b33}'), ('\u{b35}', '\u{b39}'),
-        ('\u{b3d}', '\u{b44}'), ('\u{b47}', '\u{b48}'), ('\u{b4b}', '\u{b4c}'), ('\u{b56}',
-        '\u{b57}'), ('\u{b5c}', '\u{b5d}'), ('\u{b5f}', '\u{b63}'), ('\u{b71}', '\u{b71}'),
-        ('\u{b82}', '\u{b83}'), ('\u{b85}', '\u{b8a}'), ('\u{b8e}', '\u{b90}'), ('\u{b92}',
-        '\u{b95}'), ('\u{b99}', '\u{b9a}'), ('\u{b9c}', '\u{b9c}'), ('\u{b9e}', '\u{b9f}'),
-        ('\u{ba3}', '\u{ba4}'), ('\u{ba8}', '\u{baa}'), ('\u{bae}', '\u{bb9}'), ('\u{bbe}',
-        '\u{bc2}'), ('\u{bc6}', '\u{bc8}'), ('\u{bca}', '\u{bcc}'), ('\u{bd0}', '\u{bd0}'),
-        ('\u{bd7}', '\u{bd7}'), ('\u{c00}', '\u{c03}'), ('\u{c05}', '\u{c0c}'), ('\u{c0e}',
-        '\u{c10}'), ('\u{c12}', '\u{c28}'), ('\u{c2a}', '\u{c39}'), ('\u{c3d}', '\u{c44}'),
-        ('\u{c46}', '\u{c48}'), ('\u{c4a}', '\u{c4c}'), ('\u{c55}', '\u{c56}'), ('\u{c58}',
-        '\u{c59}'), ('\u{c60}', '\u{c63}'), ('\u{c81}', '\u{c83}'), ('\u{c85}', '\u{c8c}'),
-        ('\u{c8e}', '\u{c90}'), ('\u{c92}', '\u{ca8}'), ('\u{caa}', '\u{cb3}'), ('\u{cb5}',
-        '\u{cb9}'), ('\u{cbd}', '\u{cc4}'), ('\u{cc6}', '\u{cc8}'), ('\u{cca}', '\u{ccc}'),
-        ('\u{cd5}', '\u{cd6}'), ('\u{cde}', '\u{cde}'), ('\u{ce0}', '\u{ce3}'), ('\u{cf1}',
-        '\u{cf2}'), ('\u{d01}', '\u{d03}'), ('\u{d05}', '\u{d0c}'), ('\u{d0e}', '\u{d10}'),
-        ('\u{d12}', '\u{d3a}'), ('\u{d3d}', '\u{d44}'), ('\u{d46}', '\u{d48}'), ('\u{d4a}',
-        '\u{d4c}'), ('\u{d4e}', '\u{d4e}'), ('\u{d57}', '\u{d57}'), ('\u{d60}', '\u{d63}'),
-        ('\u{d7a}', '\u{d7f}'), ('\u{d82}', '\u{d83}'), ('\u{d85}', '\u{d96}'), ('\u{d9a}',
-        '\u{db1}'), ('\u{db3}', '\u{dbb}'), ('\u{dbd}', '\u{dbd}'), ('\u{dc0}', '\u{dc6}'),
-        ('\u{dcf}', '\u{dd4}'), ('\u{dd6}', '\u{dd6}'), ('\u{dd8}', '\u{ddf}'), ('\u{df2}',
-        '\u{df3}'), ('\u{e01}', '\u{e3a}'), ('\u{e40}', '\u{e46}'), ('\u{e4d}', '\u{e4d}'),
-        ('\u{e81}', '\u{e82}'), ('\u{e84}', '\u{e84}'), ('\u{e87}', '\u{e88}'), ('\u{e8a}',
-        '\u{e8a}'), ('\u{e8d}', '\u{e8d}'), ('\u{e94}', '\u{e97}'), ('\u{e99}', '\u{e9f}'),
-        ('\u{ea1}', '\u{ea3}'), ('\u{ea5}', '\u{ea5}'), ('\u{ea7}', '\u{ea7}'), ('\u{eaa}',
-        '\u{eab}'), ('\u{ead}', '\u{eb9}'), ('\u{ebb}', '\u{ebd}'), ('\u{ec0}', '\u{ec4}'),
-        ('\u{ec6}', '\u{ec6}'), ('\u{ecd}', '\u{ecd}'), ('\u{edc}', '\u{edf}'), ('\u{f00}',
-        '\u{f00}'), ('\u{f40}', '\u{f47}'), ('\u{f49}', '\u{f6c}'), ('\u{f71}', '\u{f81}'),
-        ('\u{f88}', '\u{f97}'), ('\u{f99}', '\u{fbc}'), ('\u{1000}', '\u{1036}'), ('\u{1038}',
-        '\u{1038}'), ('\u{103b}', '\u{103f}'), ('\u{1050}', '\u{1062}'), ('\u{1065}', '\u{1068}'),
-        ('\u{106e}', '\u{1086}'), ('\u{108e}', '\u{108e}'), ('\u{109c}', '\u{109d}'), ('\u{10a0}',
-        '\u{10c5}'), ('\u{10c7}', '\u{10c7}'), ('\u{10cd}', '\u{10cd}'), ('\u{10d0}', '\u{10fa}'),
-        ('\u{10fc}', '\u{1248}'), ('\u{124a}', '\u{124d}'), ('\u{1250}', '\u{1256}'), ('\u{1258}',
-        '\u{1258}'), ('\u{125a}', '\u{125d}'), ('\u{1260}', '\u{1288}'), ('\u{128a}', '\u{128d}'),
-        ('\u{1290}', '\u{12b0}'), ('\u{12b2}', '\u{12b5}'), ('\u{12b8}', '\u{12be}'), ('\u{12c0}',
-        '\u{12c0}'), ('\u{12c2}', '\u{12c5}'), ('\u{12c8}', '\u{12d6}'), ('\u{12d8}', '\u{1310}'),
-        ('\u{1312}', '\u{1315}'), ('\u{1318}', '\u{135a}'), ('\u{135f}', '\u{135f}'), ('\u{1380}',
-        '\u{138f}'), ('\u{13a0}', '\u{13f4}'), ('\u{1401}', '\u{166c}'), ('\u{166f}', '\u{167f}'),
-        ('\u{1681}', '\u{169a}'), ('\u{16a0}', '\u{16ea}'), ('\u{16ee}', '\u{16f8}'), ('\u{1700}',
-        '\u{170c}'), ('\u{170e}', '\u{1713}'), ('\u{1720}', '\u{1733}'), ('\u{1740}', '\u{1753}'),
-        ('\u{1760}', '\u{176c}'), ('\u{176e}', '\u{1770}'), ('\u{1772}', '\u{1773}'), ('\u{1780}',
-        '\u{17b3}'), ('\u{17b6}', '\u{17c8}'), ('\u{17d7}', '\u{17d7}'), ('\u{17dc}', '\u{17dc}'),
-        ('\u{1820}', '\u{1877}'), ('\u{1880}', '\u{18aa}'), ('\u{18b0}', '\u{18f5}'), ('\u{1900}',
-        '\u{191e}'), ('\u{1920}', '\u{192b}'), ('\u{1930}', '\u{1938}'), ('\u{1950}', '\u{196d}'),
-        ('\u{1970}', '\u{1974}'), ('\u{1980}', '\u{19ab}'), ('\u{19b0}', '\u{19c9}'), ('\u{1a00}',
-        '\u{1a1b}'), ('\u{1a20}', '\u{1a5e}'), ('\u{1a61}', '\u{1a74}'), ('\u{1aa7}', '\u{1aa7}'),
-        ('\u{1b00}', '\u{1b33}'), ('\u{1b35}', '\u{1b43}'), ('\u{1b45}', '\u{1b4b}'), ('\u{1b80}',
-        '\u{1ba9}'), ('\u{1bac}', '\u{1baf}'), ('\u{1bba}', '\u{1be5}'), ('\u{1be7}', '\u{1bf1}'),
-        ('\u{1c00}', '\u{1c35}'), ('\u{1c4d}', '\u{1c4f}'), ('\u{1c5a}', '\u{1c7d}'), ('\u{1ce9}',
-        '\u{1cec}'), ('\u{1cee}', '\u{1cf3}'), ('\u{1cf5}', '\u{1cf6}'), ('\u{1d00}', '\u{1dbf}'),
-        ('\u{1de7}', '\u{1df4}'), ('\u{1e00}', '\u{1f15}'), ('\u{1f18}', '\u{1f1d}'), ('\u{1f20}',
-        '\u{1f45}'), ('\u{1f48}', '\u{1f4d}'), ('\u{1f50}', '\u{1f57}'), ('\u{1f59}', '\u{1f59}'),
-        ('\u{1f5b}', '\u{1f5b}'), ('\u{1f5d}', '\u{1f5d}'), ('\u{1f5f}', '\u{1f7d}'), ('\u{1f80}',
-        '\u{1fb4}'), ('\u{1fb6}', '\u{1fbc}'), ('\u{1fbe}', '\u{1fbe}'), ('\u{1fc2}', '\u{1fc4}'),
-        ('\u{1fc6}', '\u{1fcc}'), ('\u{1fd0}', '\u{1fd3}'), ('\u{1fd6}', '\u{1fdb}'), ('\u{1fe0}',
-        '\u{1fec}'), ('\u{1ff2}', '\u{1ff4}'), ('\u{1ff6}', '\u{1ffc}'), ('\u{2071}', '\u{2071}'),
-        ('\u{207f}', '\u{207f}'), ('\u{2090}', '\u{209c}'), ('\u{2102}', '\u{2102}'), ('\u{2107}',
-        '\u{2107}'), ('\u{210a}', '\u{2113}'), ('\u{2115}', '\u{2115}'), ('\u{2119}', '\u{211d}'),
-        ('\u{2124}', '\u{2124}'), ('\u{2126}', '\u{2126}'), ('\u{2128}', '\u{2128}'), ('\u{212a}',
-        '\u{212d}'), ('\u{212f}', '\u{2139}'), ('\u{213c}', '\u{213f}'), ('\u{2145}', '\u{2149}'),
-        ('\u{214e}', '\u{214e}'), ('\u{2160}', '\u{2188}'), ('\u{24b6}', '\u{24e9}'), ('\u{2c00}',
-        '\u{2c2e}'), ('\u{2c30}', '\u{2c5e}'), ('\u{2c60}', '\u{2ce4}'), ('\u{2ceb}', '\u{2cee}'),
-        ('\u{2cf2}', '\u{2cf3}'), ('\u{2d00}', '\u{2d25}'), ('\u{2d27}', '\u{2d27}'), ('\u{2d2d}',
-        '\u{2d2d}'), ('\u{2d30}', '\u{2d67}'), ('\u{2d6f}', '\u{2d6f}'), ('\u{2d80}', '\u{2d96}'),
-        ('\u{2da0}', '\u{2da6}'), ('\u{2da8}', '\u{2dae}'), ('\u{2db0}', '\u{2db6}'), ('\u{2db8}',
-        '\u{2dbe}'), ('\u{2dc0}', '\u{2dc6}'), ('\u{2dc8}', '\u{2dce}'), ('\u{2dd0}', '\u{2dd6}'),
-        ('\u{2dd8}', '\u{2dde}'), ('\u{2de0}', '\u{2dff}'), ('\u{2e2f}', '\u{2e2f}'), ('\u{3005}',
-        '\u{3007}'), ('\u{3021}', '\u{3029}'), ('\u{3031}', '\u{3035}'), ('\u{3038}', '\u{303c}'),
-        ('\u{3041}', '\u{3096}'), ('\u{309d}', '\u{309f}'), ('\u{30a1}', '\u{30fa}'), ('\u{30fc}',
-        '\u{30ff}'), ('\u{3105}', '\u{312d}'), ('\u{3131}', '\u{318e}'), ('\u{31a0}', '\u{31ba}'),
-        ('\u{31f0}', '\u{31ff}'), ('\u{3400}', '\u{4db5}'), ('\u{4e00}', '\u{9fcc}'), ('\u{a000}',
-        '\u{a48c}'), ('\u{a4d0}', '\u{a4fd}'), ('\u{a500}', '\u{a60c}'), ('\u{a610}', '\u{a61f}'),
-        ('\u{a62a}', '\u{a62b}'), ('\u{a640}', '\u{a66e}'), ('\u{a674}', '\u{a67b}'), ('\u{a67f}',
-        '\u{a69d}'), ('\u{a69f}', '\u{a6ef}'), ('\u{a717}', '\u{a71f}'), ('\u{a722}', '\u{a788}'),
-        ('\u{a78b}', '\u{a78e}'), ('\u{a790}', '\u{a7ad}'), ('\u{a7b0}', '\u{a7b1}'), ('\u{a7f7}',
+        ('\u{af9}', '\u{af9}'), ('\u{b01}', '\u{b03}'), ('\u{b05}', '\u{b0c}'), ('\u{b0f}',
+        '\u{b10}'), ('\u{b13}', '\u{b28}'), ('\u{b2a}', '\u{b30}'), ('\u{b32}', '\u{b33}'),
+        ('\u{b35}', '\u{b39}'), ('\u{b3d}', '\u{b44}'), ('\u{b47}', '\u{b48}'), ('\u{b4b}',
+        '\u{b4c}'), ('\u{b56}', '\u{b57}'), ('\u{b5c}', '\u{b5d}'), ('\u{b5f}', '\u{b63}'),
+        ('\u{b71}', '\u{b71}'), ('\u{b82}', '\u{b83}'), ('\u{b85}', '\u{b8a}'), ('\u{b8e}',
+        '\u{b90}'), ('\u{b92}', '\u{b95}'), ('\u{b99}', '\u{b9a}'), ('\u{b9c}', '\u{b9c}'),
+        ('\u{b9e}', '\u{b9f}'), ('\u{ba3}', '\u{ba4}'), ('\u{ba8}', '\u{baa}'), ('\u{bae}',
+        '\u{bb9}'), ('\u{bbe}', '\u{bc2}'), ('\u{bc6}', '\u{bc8}'), ('\u{bca}', '\u{bcc}'),
+        ('\u{bd0}', '\u{bd0}'), ('\u{bd7}', '\u{bd7}'), ('\u{c00}', '\u{c03}'), ('\u{c05}',
+        '\u{c0c}'), ('\u{c0e}', '\u{c10}'), ('\u{c12}', '\u{c28}'), ('\u{c2a}', '\u{c39}'),
+        ('\u{c3d}', '\u{c44}'), ('\u{c46}', '\u{c48}'), ('\u{c4a}', '\u{c4c}'), ('\u{c55}',
+        '\u{c56}'), ('\u{c58}', '\u{c5a}'), ('\u{c60}', '\u{c63}'), ('\u{c81}', '\u{c83}'),
+        ('\u{c85}', '\u{c8c}'), ('\u{c8e}', '\u{c90}'), ('\u{c92}', '\u{ca8}'), ('\u{caa}',
+        '\u{cb3}'), ('\u{cb5}', '\u{cb9}'), ('\u{cbd}', '\u{cc4}'), ('\u{cc6}', '\u{cc8}'),
+        ('\u{cca}', '\u{ccc}'), ('\u{cd5}', '\u{cd6}'), ('\u{cde}', '\u{cde}'), ('\u{ce0}',
+        '\u{ce3}'), ('\u{cf1}', '\u{cf2}'), ('\u{d01}', '\u{d03}'), ('\u{d05}', '\u{d0c}'),
+        ('\u{d0e}', '\u{d10}'), ('\u{d12}', '\u{d3a}'), ('\u{d3d}', '\u{d44}'), ('\u{d46}',
+        '\u{d48}'), ('\u{d4a}', '\u{d4c}'), ('\u{d4e}', '\u{d4e}'), ('\u{d57}', '\u{d57}'),
+        ('\u{d5f}', '\u{d63}'), ('\u{d7a}', '\u{d7f}'), ('\u{d82}', '\u{d83}'), ('\u{d85}',
+        '\u{d96}'), ('\u{d9a}', '\u{db1}'), ('\u{db3}', '\u{dbb}'), ('\u{dbd}', '\u{dbd}'),
+        ('\u{dc0}', '\u{dc6}'), ('\u{dcf}', '\u{dd4}'), ('\u{dd6}', '\u{dd6}'), ('\u{dd8}',
+        '\u{ddf}'), ('\u{df2}', '\u{df3}'), ('\u{e01}', '\u{e3a}'), ('\u{e40}', '\u{e46}'),
+        ('\u{e4d}', '\u{e4d}'), ('\u{e81}', '\u{e82}'), ('\u{e84}', '\u{e84}'), ('\u{e87}',
+        '\u{e88}'), ('\u{e8a}', '\u{e8a}'), ('\u{e8d}', '\u{e8d}'), ('\u{e94}', '\u{e97}'),
+        ('\u{e99}', '\u{e9f}'), ('\u{ea1}', '\u{ea3}'), ('\u{ea5}', '\u{ea5}'), ('\u{ea7}',
+        '\u{ea7}'), ('\u{eaa}', '\u{eab}'), ('\u{ead}', '\u{eb9}'), ('\u{ebb}', '\u{ebd}'),
+        ('\u{ec0}', '\u{ec4}'), ('\u{ec6}', '\u{ec6}'), ('\u{ecd}', '\u{ecd}'), ('\u{edc}',
+        '\u{edf}'), ('\u{f00}', '\u{f00}'), ('\u{f40}', '\u{f47}'), ('\u{f49}', '\u{f6c}'),
+        ('\u{f71}', '\u{f81}'), ('\u{f88}', '\u{f97}'), ('\u{f99}', '\u{fbc}'), ('\u{1000}',
+        '\u{1036}'), ('\u{1038}', '\u{1038}'), ('\u{103b}', '\u{103f}'), ('\u{1050}', '\u{1062}'),
+        ('\u{1065}', '\u{1068}'), ('\u{106e}', '\u{1086}'), ('\u{108e}', '\u{108e}'), ('\u{109c}',
+        '\u{109d}'), ('\u{10a0}', '\u{10c5}'), ('\u{10c7}', '\u{10c7}'), ('\u{10cd}', '\u{10cd}'),
+        ('\u{10d0}', '\u{10fa}'), ('\u{10fc}', '\u{1248}'), ('\u{124a}', '\u{124d}'), ('\u{1250}',
+        '\u{1256}'), ('\u{1258}', '\u{1258}'), ('\u{125a}', '\u{125d}'), ('\u{1260}', '\u{1288}'),
+        ('\u{128a}', '\u{128d}'), ('\u{1290}', '\u{12b0}'), ('\u{12b2}', '\u{12b5}'), ('\u{12b8}',
+        '\u{12be}'), ('\u{12c0}', '\u{12c0}'), ('\u{12c2}', '\u{12c5}'), ('\u{12c8}', '\u{12d6}'),
+        ('\u{12d8}', '\u{1310}'), ('\u{1312}', '\u{1315}'), ('\u{1318}', '\u{135a}'), ('\u{135f}',
+        '\u{135f}'), ('\u{1380}', '\u{138f}'), ('\u{13a0}', '\u{13f5}'), ('\u{13f8}', '\u{13fd}'),
+        ('\u{1401}', '\u{166c}'), ('\u{166f}', '\u{167f}'), ('\u{1681}', '\u{169a}'), ('\u{16a0}',
+        '\u{16ea}'), ('\u{16ee}', '\u{16f8}'), ('\u{1700}', '\u{170c}'), ('\u{170e}', '\u{1713}'),
+        ('\u{1720}', '\u{1733}'), ('\u{1740}', '\u{1753}'), ('\u{1760}', '\u{176c}'), ('\u{176e}',
+        '\u{1770}'), ('\u{1772}', '\u{1773}'), ('\u{1780}', '\u{17b3}'), ('\u{17b6}', '\u{17c8}'),
+        ('\u{17d7}', '\u{17d7}'), ('\u{17dc}', '\u{17dc}'), ('\u{1820}', '\u{1877}'), ('\u{1880}',
+        '\u{18aa}'), ('\u{18b0}', '\u{18f5}'), ('\u{1900}', '\u{191e}'), ('\u{1920}', '\u{192b}'),
+        ('\u{1930}', '\u{1938}'), ('\u{1950}', '\u{196d}'), ('\u{1970}', '\u{1974}'), ('\u{1980}',
+        '\u{19ab}'), ('\u{19b0}', '\u{19c9}'), ('\u{1a00}', '\u{1a1b}'), ('\u{1a20}', '\u{1a5e}'),
+        ('\u{1a61}', '\u{1a74}'), ('\u{1aa7}', '\u{1aa7}'), ('\u{1b00}', '\u{1b33}'), ('\u{1b35}',
+        '\u{1b43}'), ('\u{1b45}', '\u{1b4b}'), ('\u{1b80}', '\u{1ba9}'), ('\u{1bac}', '\u{1baf}'),
+        ('\u{1bba}', '\u{1be5}'), ('\u{1be7}', '\u{1bf1}'), ('\u{1c00}', '\u{1c35}'), ('\u{1c4d}',
+        '\u{1c4f}'), ('\u{1c5a}', '\u{1c7d}'), ('\u{1ce9}', '\u{1cec}'), ('\u{1cee}', '\u{1cf3}'),
+        ('\u{1cf5}', '\u{1cf6}'), ('\u{1d00}', '\u{1dbf}'), ('\u{1de7}', '\u{1df4}'), ('\u{1e00}',
+        '\u{1f15}'), ('\u{1f18}', '\u{1f1d}'), ('\u{1f20}', '\u{1f45}'), ('\u{1f48}', '\u{1f4d}'),
+        ('\u{1f50}', '\u{1f57}'), ('\u{1f59}', '\u{1f59}'), ('\u{1f5b}', '\u{1f5b}'), ('\u{1f5d}',
+        '\u{1f5d}'), ('\u{1f5f}', '\u{1f7d}'), ('\u{1f80}', '\u{1fb4}'), ('\u{1fb6}', '\u{1fbc}'),
+        ('\u{1fbe}', '\u{1fbe}'), ('\u{1fc2}', '\u{1fc4}'), ('\u{1fc6}', '\u{1fcc}'), ('\u{1fd0}',
+        '\u{1fd3}'), ('\u{1fd6}', '\u{1fdb}'), ('\u{1fe0}', '\u{1fec}'), ('\u{1ff2}', '\u{1ff4}'),
+        ('\u{1ff6}', '\u{1ffc}'), ('\u{2071}', '\u{2071}'), ('\u{207f}', '\u{207f}'), ('\u{2090}',
+        '\u{209c}'), ('\u{2102}', '\u{2102}'), ('\u{2107}', '\u{2107}'), ('\u{210a}', '\u{2113}'),
+        ('\u{2115}', '\u{2115}'), ('\u{2119}', '\u{211d}'), ('\u{2124}', '\u{2124}'), ('\u{2126}',
+        '\u{2126}'), ('\u{2128}', '\u{2128}'), ('\u{212a}', '\u{212d}'), ('\u{212f}', '\u{2139}'),
+        ('\u{213c}', '\u{213f}'), ('\u{2145}', '\u{2149}'), ('\u{214e}', '\u{214e}'), ('\u{2160}',
+        '\u{2188}'), ('\u{24b6}', '\u{24e9}'), ('\u{2c00}', '\u{2c2e}'), ('\u{2c30}', '\u{2c5e}'),
+        ('\u{2c60}', '\u{2ce4}'), ('\u{2ceb}', '\u{2cee}'), ('\u{2cf2}', '\u{2cf3}'), ('\u{2d00}',
+        '\u{2d25}'), ('\u{2d27}', '\u{2d27}'), ('\u{2d2d}', '\u{2d2d}'), ('\u{2d30}', '\u{2d67}'),
+        ('\u{2d6f}', '\u{2d6f}'), ('\u{2d80}', '\u{2d96}'), ('\u{2da0}', '\u{2da6}'), ('\u{2da8}',
+        '\u{2dae}'), ('\u{2db0}', '\u{2db6}'), ('\u{2db8}', '\u{2dbe}'), ('\u{2dc0}', '\u{2dc6}'),
+        ('\u{2dc8}', '\u{2dce}'), ('\u{2dd0}', '\u{2dd6}'), ('\u{2dd8}', '\u{2dde}'), ('\u{2de0}',
+        '\u{2dff}'), ('\u{2e2f}', '\u{2e2f}'), ('\u{3005}', '\u{3007}'), ('\u{3021}', '\u{3029}'),
+        ('\u{3031}', '\u{3035}'), ('\u{3038}', '\u{303c}'), ('\u{3041}', '\u{3096}'), ('\u{309d}',
+        '\u{309f}'), ('\u{30a1}', '\u{30fa}'), ('\u{30fc}', '\u{30ff}'), ('\u{3105}', '\u{312d}'),
+        ('\u{3131}', '\u{318e}'), ('\u{31a0}', '\u{31ba}'), ('\u{31f0}', '\u{31ff}'), ('\u{3400}',
+        '\u{4db5}'), ('\u{4e00}', '\u{9fd5}'), ('\u{a000}', '\u{a48c}'), ('\u{a4d0}', '\u{a4fd}'),
+        ('\u{a500}', '\u{a60c}'), ('\u{a610}', '\u{a61f}'), ('\u{a62a}', '\u{a62b}'), ('\u{a640}',
+        '\u{a66e}'), ('\u{a674}', '\u{a67b}'), ('\u{a67f}', '\u{a6ef}'), ('\u{a717}', '\u{a71f}'),
+        ('\u{a722}', '\u{a788}'), ('\u{a78b}', '\u{a7ad}'), ('\u{a7b0}', '\u{a7b7}'), ('\u{a7f7}',
         '\u{a801}'), ('\u{a803}', '\u{a805}'), ('\u{a807}', '\u{a80a}'), ('\u{a80c}', '\u{a827}'),
         ('\u{a840}', '\u{a873}'), ('\u{a880}', '\u{a8c3}'), ('\u{a8f2}', '\u{a8f7}'), ('\u{a8fb}',
-        '\u{a8fb}'), ('\u{a90a}', '\u{a92a}'), ('\u{a930}', '\u{a952}'), ('\u{a960}', '\u{a97c}'),
-        ('\u{a980}', '\u{a9b2}'), ('\u{a9b4}', '\u{a9bf}'), ('\u{a9cf}', '\u{a9cf}'), ('\u{a9e0}',
-        '\u{a9e4}'), ('\u{a9e6}', '\u{a9ef}'), ('\u{a9fa}', '\u{a9fe}'), ('\u{aa00}', '\u{aa36}'),
-        ('\u{aa40}', '\u{aa4d}'), ('\u{aa60}', '\u{aa76}'), ('\u{aa7a}', '\u{aa7a}'), ('\u{aa7e}',
-        '\u{aabe}'), ('\u{aac0}', '\u{aac0}'), ('\u{aac2}', '\u{aac2}'), ('\u{aadb}', '\u{aadd}'),
-        ('\u{aae0}', '\u{aaef}'), ('\u{aaf2}', '\u{aaf5}'), ('\u{ab01}', '\u{ab06}'), ('\u{ab09}',
-        '\u{ab0e}'), ('\u{ab11}', '\u{ab16}'), ('\u{ab20}', '\u{ab26}'), ('\u{ab28}', '\u{ab2e}'),
-        ('\u{ab30}', '\u{ab5a}'), ('\u{ab5c}', '\u{ab5f}'), ('\u{ab64}', '\u{ab65}'), ('\u{abc0}',
+        '\u{a8fb}'), ('\u{a8fd}', '\u{a8fd}'), ('\u{a90a}', '\u{a92a}'), ('\u{a930}', '\u{a952}'),
+        ('\u{a960}', '\u{a97c}'), ('\u{a980}', '\u{a9b2}'), ('\u{a9b4}', '\u{a9bf}'), ('\u{a9cf}',
+        '\u{a9cf}'), ('\u{a9e0}', '\u{a9e4}'), ('\u{a9e6}', '\u{a9ef}'), ('\u{a9fa}', '\u{a9fe}'),
+        ('\u{aa00}', '\u{aa36}'), ('\u{aa40}', '\u{aa4d}'), ('\u{aa60}', '\u{aa76}'), ('\u{aa7a}',
+        '\u{aa7a}'), ('\u{aa7e}', '\u{aabe}'), ('\u{aac0}', '\u{aac0}'), ('\u{aac2}', '\u{aac2}'),
+        ('\u{aadb}', '\u{aadd}'), ('\u{aae0}', '\u{aaef}'), ('\u{aaf2}', '\u{aaf5}'), ('\u{ab01}',
+        '\u{ab06}'), ('\u{ab09}', '\u{ab0e}'), ('\u{ab11}', '\u{ab16}'), ('\u{ab20}', '\u{ab26}'),
+        ('\u{ab28}', '\u{ab2e}'), ('\u{ab30}', '\u{ab5a}'), ('\u{ab5c}', '\u{ab65}'), ('\u{ab70}',
         '\u{abea}'), ('\u{ac00}', '\u{d7a3}'), ('\u{d7b0}', '\u{d7c6}'), ('\u{d7cb}', '\u{d7fb}'),
         ('\u{f900}', '\u{fa6d}'), ('\u{fa70}', '\u{fad9}'), ('\u{fb00}', '\u{fb06}'), ('\u{fb13}',
         '\u{fb17}'), ('\u{fb1d}', '\u{fb28}'), ('\u{fb2a}', '\u{fb36}'), ('\u{fb38}', '\u{fb3c}'),
@@ -196,55 +196,61 @@ pub mod derived_property {
         '\u{10755}'), ('\u{10760}', '\u{10767}'), ('\u{10800}', '\u{10805}'), ('\u{10808}',
         '\u{10808}'), ('\u{1080a}', '\u{10835}'), ('\u{10837}', '\u{10838}'), ('\u{1083c}',
         '\u{1083c}'), ('\u{1083f}', '\u{10855}'), ('\u{10860}', '\u{10876}'), ('\u{10880}',
-        '\u{1089e}'), ('\u{10900}', '\u{10915}'), ('\u{10920}', '\u{10939}'), ('\u{10980}',
-        '\u{109b7}'), ('\u{109be}', '\u{109bf}'), ('\u{10a00}', '\u{10a03}'), ('\u{10a05}',
-        '\u{10a06}'), ('\u{10a0c}', '\u{10a13}'), ('\u{10a15}', '\u{10a17}'), ('\u{10a19}',
-        '\u{10a33}'), ('\u{10a60}', '\u{10a7c}'), ('\u{10a80}', '\u{10a9c}'), ('\u{10ac0}',
-        '\u{10ac7}'), ('\u{10ac9}', '\u{10ae4}'), ('\u{10b00}', '\u{10b35}'), ('\u{10b40}',
-        '\u{10b55}'), ('\u{10b60}', '\u{10b72}'), ('\u{10b80}', '\u{10b91}'), ('\u{10c00}',
-        '\u{10c48}'), ('\u{11000}', '\u{11045}'), ('\u{11082}', '\u{110b8}'), ('\u{110d0}',
-        '\u{110e8}'), ('\u{11100}', '\u{11132}'), ('\u{11150}', '\u{11172}'), ('\u{11176}',
-        '\u{11176}'), ('\u{11180}', '\u{111bf}'), ('\u{111c1}', '\u{111c4}'), ('\u{111da}',
-        '\u{111da}'), ('\u{11200}', '\u{11211}'), ('\u{11213}', '\u{11234}'), ('\u{11237}',
-        '\u{11237}'), ('\u{112b0}', '\u{112e8}'), ('\u{11301}', '\u{11303}'), ('\u{11305}',
-        '\u{1130c}'), ('\u{1130f}', '\u{11310}'), ('\u{11313}', '\u{11328}'), ('\u{1132a}',
-        '\u{11330}'), ('\u{11332}', '\u{11333}'), ('\u{11335}', '\u{11339}'), ('\u{1133d}',
-        '\u{11344}'), ('\u{11347}', '\u{11348}'), ('\u{1134b}', '\u{1134c}'), ('\u{11357}',
-        '\u{11357}'), ('\u{1135d}', '\u{11363}'), ('\u{11480}', '\u{114c1}'), ('\u{114c4}',
-        '\u{114c5}'), ('\u{114c7}', '\u{114c7}'), ('\u{11580}', '\u{115b5}'), ('\u{115b8}',
-        '\u{115be}'), ('\u{11600}', '\u{1163e}'), ('\u{11640}', '\u{11640}'), ('\u{11644}',
-        '\u{11644}'), ('\u{11680}', '\u{116b5}'), ('\u{118a0}', '\u{118df}'), ('\u{118ff}',
-        '\u{118ff}'), ('\u{11ac0}', '\u{11af8}'), ('\u{12000}', '\u{12398}'), ('\u{12400}',
-        '\u{1246e}'), ('\u{13000}', '\u{1342e}'), ('\u{16800}', '\u{16a38}'), ('\u{16a40}',
-        '\u{16a5e}'), ('\u{16ad0}', '\u{16aed}'), ('\u{16b00}', '\u{16b36}'), ('\u{16b40}',
-        '\u{16b43}'), ('\u{16b63}', '\u{16b77}'), ('\u{16b7d}', '\u{16b8f}'), ('\u{16f00}',
-        '\u{16f44}'), ('\u{16f50}', '\u{16f7e}'), ('\u{16f93}', '\u{16f9f}'), ('\u{1b000}',
-        '\u{1b001}'), ('\u{1bc00}', '\u{1bc6a}'), ('\u{1bc70}', '\u{1bc7c}'), ('\u{1bc80}',
-        '\u{1bc88}'), ('\u{1bc90}', '\u{1bc99}'), ('\u{1bc9e}', '\u{1bc9e}'), ('\u{1d400}',
-        '\u{1d454}'), ('\u{1d456}', '\u{1d49c}'), ('\u{1d49e}', '\u{1d49f}'), ('\u{1d4a2}',
-        '\u{1d4a2}'), ('\u{1d4a5}', '\u{1d4a6}'), ('\u{1d4a9}', '\u{1d4ac}'), ('\u{1d4ae}',
-        '\u{1d4b9}'), ('\u{1d4bb}', '\u{1d4bb}'), ('\u{1d4bd}', '\u{1d4c3}'), ('\u{1d4c5}',
-        '\u{1d505}'), ('\u{1d507}', '\u{1d50a}'), ('\u{1d50d}', '\u{1d514}'), ('\u{1d516}',
-        '\u{1d51c}'), ('\u{1d51e}', '\u{1d539}'), ('\u{1d53b}', '\u{1d53e}'), ('\u{1d540}',
-        '\u{1d544}'), ('\u{1d546}', '\u{1d546}'), ('\u{1d54a}', '\u{1d550}'), ('\u{1d552}',
-        '\u{1d6a5}'), ('\u{1d6a8}', '\u{1d6c0}'), ('\u{1d6c2}', '\u{1d6da}'), ('\u{1d6dc}',
-        '\u{1d6fa}'), ('\u{1d6fc}', '\u{1d714}'), ('\u{1d716}', '\u{1d734}'), ('\u{1d736}',
-        '\u{1d74e}'), ('\u{1d750}', '\u{1d76e}'), ('\u{1d770}', '\u{1d788}'), ('\u{1d78a}',
-        '\u{1d7a8}'), ('\u{1d7aa}', '\u{1d7c2}'), ('\u{1d7c4}', '\u{1d7cb}'), ('\u{1e800}',
-        '\u{1e8c4}'), ('\u{1ee00}', '\u{1ee03}'), ('\u{1ee05}', '\u{1ee1f}'), ('\u{1ee21}',
-        '\u{1ee22}'), ('\u{1ee24}', '\u{1ee24}'), ('\u{1ee27}', '\u{1ee27}'), ('\u{1ee29}',
-        '\u{1ee32}'), ('\u{1ee34}', '\u{1ee37}'), ('\u{1ee39}', '\u{1ee39}'), ('\u{1ee3b}',
-        '\u{1ee3b}'), ('\u{1ee42}', '\u{1ee42}'), ('\u{1ee47}', '\u{1ee47}'), ('\u{1ee49}',
-        '\u{1ee49}'), ('\u{1ee4b}', '\u{1ee4b}'), ('\u{1ee4d}', '\u{1ee4f}'), ('\u{1ee51}',
-        '\u{1ee52}'), ('\u{1ee54}', '\u{1ee54}'), ('\u{1ee57}', '\u{1ee57}'), ('\u{1ee59}',
-        '\u{1ee59}'), ('\u{1ee5b}', '\u{1ee5b}'), ('\u{1ee5d}', '\u{1ee5d}'), ('\u{1ee5f}',
-        '\u{1ee5f}'), ('\u{1ee61}', '\u{1ee62}'), ('\u{1ee64}', '\u{1ee64}'), ('\u{1ee67}',
-        '\u{1ee6a}'), ('\u{1ee6c}', '\u{1ee72}'), ('\u{1ee74}', '\u{1ee77}'), ('\u{1ee79}',
-        '\u{1ee7c}'), ('\u{1ee7e}', '\u{1ee7e}'), ('\u{1ee80}', '\u{1ee89}'), ('\u{1ee8b}',
-        '\u{1ee9b}'), ('\u{1eea1}', '\u{1eea3}'), ('\u{1eea5}', '\u{1eea9}'), ('\u{1eeab}',
-        '\u{1eebb}'), ('\u{1f130}', '\u{1f149}'), ('\u{1f150}', '\u{1f169}'), ('\u{1f170}',
-        '\u{1f189}'), ('\u{20000}', '\u{2a6d6}'), ('\u{2a700}', '\u{2b734}'), ('\u{2b740}',
-        '\u{2b81d}'), ('\u{2f800}', '\u{2fa1d}')
+        '\u{1089e}'), ('\u{108e0}', '\u{108f2}'), ('\u{108f4}', '\u{108f5}'), ('\u{10900}',
+        '\u{10915}'), ('\u{10920}', '\u{10939}'), ('\u{10980}', '\u{109b7}'), ('\u{109be}',
+        '\u{109bf}'), ('\u{10a00}', '\u{10a03}'), ('\u{10a05}', '\u{10a06}'), ('\u{10a0c}',
+        '\u{10a13}'), ('\u{10a15}', '\u{10a17}'), ('\u{10a19}', '\u{10a33}'), ('\u{10a60}',
+        '\u{10a7c}'), ('\u{10a80}', '\u{10a9c}'), ('\u{10ac0}', '\u{10ac7}'), ('\u{10ac9}',
+        '\u{10ae4}'), ('\u{10b00}', '\u{10b35}'), ('\u{10b40}', '\u{10b55}'), ('\u{10b60}',
+        '\u{10b72}'), ('\u{10b80}', '\u{10b91}'), ('\u{10c00}', '\u{10c48}'), ('\u{10c80}',
+        '\u{10cb2}'), ('\u{10cc0}', '\u{10cf2}'), ('\u{11000}', '\u{11045}'), ('\u{11082}',
+        '\u{110b8}'), ('\u{110d0}', '\u{110e8}'), ('\u{11100}', '\u{11132}'), ('\u{11150}',
+        '\u{11172}'), ('\u{11176}', '\u{11176}'), ('\u{11180}', '\u{111bf}'), ('\u{111c1}',
+        '\u{111c4}'), ('\u{111da}', '\u{111da}'), ('\u{111dc}', '\u{111dc}'), ('\u{11200}',
+        '\u{11211}'), ('\u{11213}', '\u{11234}'), ('\u{11237}', '\u{11237}'), ('\u{11280}',
+        '\u{11286}'), ('\u{11288}', '\u{11288}'), ('\u{1128a}', '\u{1128d}'), ('\u{1128f}',
+        '\u{1129d}'), ('\u{1129f}', '\u{112a8}'), ('\u{112b0}', '\u{112e8}'), ('\u{11300}',
+        '\u{11303}'), ('\u{11305}', '\u{1130c}'), ('\u{1130f}', '\u{11310}'), ('\u{11313}',
+        '\u{11328}'), ('\u{1132a}', '\u{11330}'), ('\u{11332}', '\u{11333}'), ('\u{11335}',
+        '\u{11339}'), ('\u{1133d}', '\u{11344}'), ('\u{11347}', '\u{11348}'), ('\u{1134b}',
+        '\u{1134c}'), ('\u{11350}', '\u{11350}'), ('\u{11357}', '\u{11357}'), ('\u{1135d}',
+        '\u{11363}'), ('\u{11480}', '\u{114c1}'), ('\u{114c4}', '\u{114c5}'), ('\u{114c7}',
+        '\u{114c7}'), ('\u{11580}', '\u{115b5}'), ('\u{115b8}', '\u{115be}'), ('\u{115d8}',
+        '\u{115dd}'), ('\u{11600}', '\u{1163e}'), ('\u{11640}', '\u{11640}'), ('\u{11644}',
+        '\u{11644}'), ('\u{11680}', '\u{116b5}'), ('\u{11700}', '\u{11719}'), ('\u{1171d}',
+        '\u{1172a}'), ('\u{118a0}', '\u{118df}'), ('\u{118ff}', '\u{118ff}'), ('\u{11ac0}',
+        '\u{11af8}'), ('\u{12000}', '\u{12399}'), ('\u{12400}', '\u{1246e}'), ('\u{12480}',
+        '\u{12543}'), ('\u{13000}', '\u{1342e}'), ('\u{14400}', '\u{14646}'), ('\u{16800}',
+        '\u{16a38}'), ('\u{16a40}', '\u{16a5e}'), ('\u{16ad0}', '\u{16aed}'), ('\u{16b00}',
+        '\u{16b36}'), ('\u{16b40}', '\u{16b43}'), ('\u{16b63}', '\u{16b77}'), ('\u{16b7d}',
+        '\u{16b8f}'), ('\u{16f00}', '\u{16f44}'), ('\u{16f50}', '\u{16f7e}'), ('\u{16f93}',
+        '\u{16f9f}'), ('\u{1b000}', '\u{1b001}'), ('\u{1bc00}', '\u{1bc6a}'), ('\u{1bc70}',
+        '\u{1bc7c}'), ('\u{1bc80}', '\u{1bc88}'), ('\u{1bc90}', '\u{1bc99}'), ('\u{1bc9e}',
+        '\u{1bc9e}'), ('\u{1d400}', '\u{1d454}'), ('\u{1d456}', '\u{1d49c}'), ('\u{1d49e}',
+        '\u{1d49f}'), ('\u{1d4a2}', '\u{1d4a2}'), ('\u{1d4a5}', '\u{1d4a6}'), ('\u{1d4a9}',
+        '\u{1d4ac}'), ('\u{1d4ae}', '\u{1d4b9}'), ('\u{1d4bb}', '\u{1d4bb}'), ('\u{1d4bd}',
+        '\u{1d4c3}'), ('\u{1d4c5}', '\u{1d505}'), ('\u{1d507}', '\u{1d50a}'), ('\u{1d50d}',
+        '\u{1d514}'), ('\u{1d516}', '\u{1d51c}'), ('\u{1d51e}', '\u{1d539}'), ('\u{1d53b}',
+        '\u{1d53e}'), ('\u{1d540}', '\u{1d544}'), ('\u{1d546}', '\u{1d546}'), ('\u{1d54a}',
+        '\u{1d550}'), ('\u{1d552}', '\u{1d6a5}'), ('\u{1d6a8}', '\u{1d6c0}'), ('\u{1d6c2}',
+        '\u{1d6da}'), ('\u{1d6dc}', '\u{1d6fa}'), ('\u{1d6fc}', '\u{1d714}'), ('\u{1d716}',
+        '\u{1d734}'), ('\u{1d736}', '\u{1d74e}'), ('\u{1d750}', '\u{1d76e}'), ('\u{1d770}',
+        '\u{1d788}'), ('\u{1d78a}', '\u{1d7a8}'), ('\u{1d7aa}', '\u{1d7c2}'), ('\u{1d7c4}',
+        '\u{1d7cb}'), ('\u{1e800}', '\u{1e8c4}'), ('\u{1ee00}', '\u{1ee03}'), ('\u{1ee05}',
+        '\u{1ee1f}'), ('\u{1ee21}', '\u{1ee22}'), ('\u{1ee24}', '\u{1ee24}'), ('\u{1ee27}',
+        '\u{1ee27}'), ('\u{1ee29}', '\u{1ee32}'), ('\u{1ee34}', '\u{1ee37}'), ('\u{1ee39}',
+        '\u{1ee39}'), ('\u{1ee3b}', '\u{1ee3b}'), ('\u{1ee42}', '\u{1ee42}'), ('\u{1ee47}',
+        '\u{1ee47}'), ('\u{1ee49}', '\u{1ee49}'), ('\u{1ee4b}', '\u{1ee4b}'), ('\u{1ee4d}',
+        '\u{1ee4f}'), ('\u{1ee51}', '\u{1ee52}'), ('\u{1ee54}', '\u{1ee54}'), ('\u{1ee57}',
+        '\u{1ee57}'), ('\u{1ee59}', '\u{1ee59}'), ('\u{1ee5b}', '\u{1ee5b}'), ('\u{1ee5d}',
+        '\u{1ee5d}'), ('\u{1ee5f}', '\u{1ee5f}'), ('\u{1ee61}', '\u{1ee62}'), ('\u{1ee64}',
+        '\u{1ee64}'), ('\u{1ee67}', '\u{1ee6a}'), ('\u{1ee6c}', '\u{1ee72}'), ('\u{1ee74}',
+        '\u{1ee77}'), ('\u{1ee79}', '\u{1ee7c}'), ('\u{1ee7e}', '\u{1ee7e}'), ('\u{1ee80}',
+        '\u{1ee89}'), ('\u{1ee8b}', '\u{1ee9b}'), ('\u{1eea1}', '\u{1eea3}'), ('\u{1eea5}',
+        '\u{1eea9}'), ('\u{1eeab}', '\u{1eebb}'), ('\u{1f130}', '\u{1f149}'), ('\u{1f150}',
+        '\u{1f169}'), ('\u{1f170}', '\u{1f189}'), ('\u{20000}', '\u{2a6d6}'), ('\u{2a700}',
+        '\u{2b734}'), ('\u{2b740}', '\u{2b81d}'), ('\u{2b820}', '\u{2cea1}'), ('\u{2f800}',
+        '\u{2fa1d}')
     ];
 
     pub fn Alphabetic(c: char) -> bool {
@@ -263,7 +269,7 @@ pub mod derived_property {
         '\u{6dd}'), ('\u{6df}', '\u{6e8}'), ('\u{6ea}', '\u{6ed}'), ('\u{70f}', '\u{70f}'),
         ('\u{711}', '\u{711}'), ('\u{730}', '\u{74a}'), ('\u{7a6}', '\u{7b0}'), ('\u{7eb}',
         '\u{7f5}'), ('\u{7fa}', '\u{7fa}'), ('\u{816}', '\u{82d}'), ('\u{859}', '\u{85b}'),
-        ('\u{8e4}', '\u{902}'), ('\u{93a}', '\u{93a}'), ('\u{93c}', '\u{93c}'), ('\u{941}',
+        ('\u{8e3}', '\u{902}'), ('\u{93a}', '\u{93a}'), ('\u{93c}', '\u{93c}'), ('\u{941}',
         '\u{948}'), ('\u{94d}', '\u{94d}'), ('\u{951}', '\u{957}'), ('\u{962}', '\u{963}'),
         ('\u{971}', '\u{971}'), ('\u{981}', '\u{981}'), ('\u{9bc}', '\u{9bc}'), ('\u{9c1}',
         '\u{9c4}'), ('\u{9cd}', '\u{9cd}'), ('\u{9e2}', '\u{9e3}'), ('\u{a01}', '\u{a02}'),
@@ -313,44 +319,47 @@ pub mod derived_property {
         '\u{2e2f}'), ('\u{3005}', '\u{3005}'), ('\u{302a}', '\u{302d}'), ('\u{3031}', '\u{3035}'),
         ('\u{303b}', '\u{303b}'), ('\u{3099}', '\u{309e}'), ('\u{30fc}', '\u{30fe}'), ('\u{a015}',
         '\u{a015}'), ('\u{a4f8}', '\u{a4fd}'), ('\u{a60c}', '\u{a60c}'), ('\u{a66f}', '\u{a672}'),
-        ('\u{a674}', '\u{a67d}'), ('\u{a67f}', '\u{a67f}'), ('\u{a69c}', '\u{a69d}'), ('\u{a69f}',
-        '\u{a69f}'), ('\u{a6f0}', '\u{a6f1}'), ('\u{a700}', '\u{a721}'), ('\u{a770}', '\u{a770}'),
-        ('\u{a788}', '\u{a78a}'), ('\u{a7f8}', '\u{a7f9}'), ('\u{a802}', '\u{a802}'), ('\u{a806}',
-        '\u{a806}'), ('\u{a80b}', '\u{a80b}'), ('\u{a825}', '\u{a826}'), ('\u{a8c4}', '\u{a8c4}'),
-        ('\u{a8e0}', '\u{a8f1}'), ('\u{a926}', '\u{a92d}'), ('\u{a947}', '\u{a951}'), ('\u{a980}',
-        '\u{a982}'), ('\u{a9b3}', '\u{a9b3}'), ('\u{a9b6}', '\u{a9b9}'), ('\u{a9bc}', '\u{a9bc}'),
-        ('\u{a9cf}', '\u{a9cf}'), ('\u{a9e5}', '\u{a9e6}'), ('\u{aa29}', '\u{aa2e}'), ('\u{aa31}',
-        '\u{aa32}'), ('\u{aa35}', '\u{aa36}'), ('\u{aa43}', '\u{aa43}'), ('\u{aa4c}', '\u{aa4c}'),
-        ('\u{aa70}', '\u{aa70}'), ('\u{aa7c}', '\u{aa7c}'), ('\u{aab0}', '\u{aab0}'), ('\u{aab2}',
-        '\u{aab4}'), ('\u{aab7}', '\u{aab8}'), ('\u{aabe}', '\u{aabf}'), ('\u{aac1}', '\u{aac1}'),
-        ('\u{aadd}', '\u{aadd}'), ('\u{aaec}', '\u{aaed}'), ('\u{aaf3}', '\u{aaf4}'), ('\u{aaf6}',
-        '\u{aaf6}'), ('\u{ab5b}', '\u{ab5f}'), ('\u{abe5}', '\u{abe5}'), ('\u{abe8}', '\u{abe8}'),
-        ('\u{abed}', '\u{abed}'), ('\u{fb1e}', '\u{fb1e}'), ('\u{fbb2}', '\u{fbc1}'), ('\u{fe00}',
-        '\u{fe0f}'), ('\u{fe13}', '\u{fe13}'), ('\u{fe20}', '\u{fe2d}'), ('\u{fe52}', '\u{fe52}'),
-        ('\u{fe55}', '\u{fe55}'), ('\u{feff}', '\u{feff}'), ('\u{ff07}', '\u{ff07}'), ('\u{ff0e}',
-        '\u{ff0e}'), ('\u{ff1a}', '\u{ff1a}'), ('\u{ff3e}', '\u{ff3e}'), ('\u{ff40}', '\u{ff40}'),
-        ('\u{ff70}', '\u{ff70}'), ('\u{ff9e}', '\u{ff9f}'), ('\u{ffe3}', '\u{ffe3}'), ('\u{fff9}',
-        '\u{fffb}'), ('\u{101fd}', '\u{101fd}'), ('\u{102e0}', '\u{102e0}'), ('\u{10376}',
-        '\u{1037a}'), ('\u{10a01}', '\u{10a03}'), ('\u{10a05}', '\u{10a06}'), ('\u{10a0c}',
-        '\u{10a0f}'), ('\u{10a38}', '\u{10a3a}'), ('\u{10a3f}', '\u{10a3f}'), ('\u{10ae5}',
-        '\u{10ae6}'), ('\u{11001}', '\u{11001}'), ('\u{11038}', '\u{11046}'), ('\u{1107f}',
-        '\u{11081}'), ('\u{110b3}', '\u{110b6}'), ('\u{110b9}', '\u{110ba}'), ('\u{110bd}',
-        '\u{110bd}'), ('\u{11100}', '\u{11102}'), ('\u{11127}', '\u{1112b}'), ('\u{1112d}',
-        '\u{11134}'), ('\u{11173}', '\u{11173}'), ('\u{11180}', '\u{11181}'), ('\u{111b6}',
-        '\u{111be}'), ('\u{1122f}', '\u{11231}'), ('\u{11234}', '\u{11234}'), ('\u{11236}',
-        '\u{11237}'), ('\u{112df}', '\u{112df}'), ('\u{112e3}', '\u{112ea}'), ('\u{11301}',
+        ('\u{a674}', '\u{a67d}'), ('\u{a67f}', '\u{a67f}'), ('\u{a69c}', '\u{a69f}'), ('\u{a6f0}',
+        '\u{a6f1}'), ('\u{a700}', '\u{a721}'), ('\u{a770}', '\u{a770}'), ('\u{a788}', '\u{a78a}'),
+        ('\u{a7f8}', '\u{a7f9}'), ('\u{a802}', '\u{a802}'), ('\u{a806}', '\u{a806}'), ('\u{a80b}',
+        '\u{a80b}'), ('\u{a825}', '\u{a826}'), ('\u{a8c4}', '\u{a8c4}'), ('\u{a8e0}', '\u{a8f1}'),
+        ('\u{a926}', '\u{a92d}'), ('\u{a947}', '\u{a951}'), ('\u{a980}', '\u{a982}'), ('\u{a9b3}',
+        '\u{a9b3}'), ('\u{a9b6}', '\u{a9b9}'), ('\u{a9bc}', '\u{a9bc}'), ('\u{a9cf}', '\u{a9cf}'),
+        ('\u{a9e5}', '\u{a9e6}'), ('\u{aa29}', '\u{aa2e}'), ('\u{aa31}', '\u{aa32}'), ('\u{aa35}',
+        '\u{aa36}'), ('\u{aa43}', '\u{aa43}'), ('\u{aa4c}', '\u{aa4c}'), ('\u{aa70}', '\u{aa70}'),
+        ('\u{aa7c}', '\u{aa7c}'), ('\u{aab0}', '\u{aab0}'), ('\u{aab2}', '\u{aab4}'), ('\u{aab7}',
+        '\u{aab8}'), ('\u{aabe}', '\u{aabf}'), ('\u{aac1}', '\u{aac1}'), ('\u{aadd}', '\u{aadd}'),
+        ('\u{aaec}', '\u{aaed}'), ('\u{aaf3}', '\u{aaf4}'), ('\u{aaf6}', '\u{aaf6}'), ('\u{ab5b}',
+        '\u{ab5f}'), ('\u{abe5}', '\u{abe5}'), ('\u{abe8}', '\u{abe8}'), ('\u{abed}', '\u{abed}'),
+        ('\u{fb1e}', '\u{fb1e}'), ('\u{fbb2}', '\u{fbc1}'), ('\u{fe00}', '\u{fe0f}'), ('\u{fe13}',
+        '\u{fe13}'), ('\u{fe20}', '\u{fe2f}'), ('\u{fe52}', '\u{fe52}'), ('\u{fe55}', '\u{fe55}'),
+        ('\u{feff}', '\u{feff}'), ('\u{ff07}', '\u{ff07}'), ('\u{ff0e}', '\u{ff0e}'), ('\u{ff1a}',
+        '\u{ff1a}'), ('\u{ff3e}', '\u{ff3e}'), ('\u{ff40}', '\u{ff40}'), ('\u{ff70}', '\u{ff70}'),
+        ('\u{ff9e}', '\u{ff9f}'), ('\u{ffe3}', '\u{ffe3}'), ('\u{fff9}', '\u{fffb}'), ('\u{101fd}',
+        '\u{101fd}'), ('\u{102e0}', '\u{102e0}'), ('\u{10376}', '\u{1037a}'), ('\u{10a01}',
+        '\u{10a03}'), ('\u{10a05}', '\u{10a06}'), ('\u{10a0c}', '\u{10a0f}'), ('\u{10a38}',
+        '\u{10a3a}'), ('\u{10a3f}', '\u{10a3f}'), ('\u{10ae5}', '\u{10ae6}'), ('\u{11001}',
+        '\u{11001}'), ('\u{11038}', '\u{11046}'), ('\u{1107f}', '\u{11081}'), ('\u{110b3}',
+        '\u{110b6}'), ('\u{110b9}', '\u{110ba}'), ('\u{110bd}', '\u{110bd}'), ('\u{11100}',
+        '\u{11102}'), ('\u{11127}', '\u{1112b}'), ('\u{1112d}', '\u{11134}'), ('\u{11173}',
+        '\u{11173}'), ('\u{11180}', '\u{11181}'), ('\u{111b6}', '\u{111be}'), ('\u{111ca}',
+        '\u{111cc}'), ('\u{1122f}', '\u{11231}'), ('\u{11234}', '\u{11234}'), ('\u{11236}',
+        '\u{11237}'), ('\u{112df}', '\u{112df}'), ('\u{112e3}', '\u{112ea}'), ('\u{11300}',
         '\u{11301}'), ('\u{1133c}', '\u{1133c}'), ('\u{11340}', '\u{11340}'), ('\u{11366}',
         '\u{1136c}'), ('\u{11370}', '\u{11374}'), ('\u{114b3}', '\u{114b8}'), ('\u{114ba}',
         '\u{114ba}'), ('\u{114bf}', '\u{114c0}'), ('\u{114c2}', '\u{114c3}'), ('\u{115b2}',
-        '\u{115b5}'), ('\u{115bc}', '\u{115bd}'), ('\u{115bf}', '\u{115c0}'), ('\u{11633}',
-        '\u{1163a}'), ('\u{1163d}', '\u{1163d}'), ('\u{1163f}', '\u{11640}'), ('\u{116ab}',
-        '\u{116ab}'), ('\u{116ad}', '\u{116ad}'), ('\u{116b0}', '\u{116b5}'), ('\u{116b7}',
-        '\u{116b7}'), ('\u{16af0}', '\u{16af4}'), ('\u{16b30}', '\u{16b36}'), ('\u{16b40}',
-        '\u{16b43}'), ('\u{16f8f}', '\u{16f9f}'), ('\u{1bc9d}', '\u{1bc9e}'), ('\u{1bca0}',
-        '\u{1bca3}'), ('\u{1d167}', '\u{1d169}'), ('\u{1d173}', '\u{1d182}'), ('\u{1d185}',
-        '\u{1d18b}'), ('\u{1d1aa}', '\u{1d1ad}'), ('\u{1d242}', '\u{1d244}'), ('\u{1e8d0}',
-        '\u{1e8d6}'), ('\u{e0001}', '\u{e0001}'), ('\u{e0020}', '\u{e007f}'), ('\u{e0100}',
-        '\u{e01ef}')
+        '\u{115b5}'), ('\u{115bc}', '\u{115bd}'), ('\u{115bf}', '\u{115c0}'), ('\u{115dc}',
+        '\u{115dd}'), ('\u{11633}', '\u{1163a}'), ('\u{1163d}', '\u{1163d}'), ('\u{1163f}',
+        '\u{11640}'), ('\u{116ab}', '\u{116ab}'), ('\u{116ad}', '\u{116ad}'), ('\u{116b0}',
+        '\u{116b5}'), ('\u{116b7}', '\u{116b7}'), ('\u{1171d}', '\u{1171f}'), ('\u{11722}',
+        '\u{11725}'), ('\u{11727}', '\u{1172b}'), ('\u{16af0}', '\u{16af4}'), ('\u{16b30}',
+        '\u{16b36}'), ('\u{16b40}', '\u{16b43}'), ('\u{16f8f}', '\u{16f9f}'), ('\u{1bc9d}',
+        '\u{1bc9e}'), ('\u{1bca0}', '\u{1bca3}'), ('\u{1d167}', '\u{1d169}'), ('\u{1d173}',
+        '\u{1d182}'), ('\u{1d185}', '\u{1d18b}'), ('\u{1d1aa}', '\u{1d1ad}'), ('\u{1d242}',
+        '\u{1d244}'), ('\u{1da00}', '\u{1da36}'), ('\u{1da3b}', '\u{1da6c}'), ('\u{1da75}',
+        '\u{1da75}'), ('\u{1da84}', '\u{1da84}'), ('\u{1da9b}', '\u{1da9f}'), ('\u{1daa1}',
+        '\u{1daaf}'), ('\u{1e8d0}', '\u{1e8d6}'), ('\u{1f3fb}', '\u{1f3ff}'), ('\u{e0001}',
+        '\u{e0001}'), ('\u{e0020}', '\u{e007f}'), ('\u{e0100}', '\u{e01ef}')
     ];
 
     pub fn Case_Ignorable(c: char) -> bool {
@@ -366,36 +375,37 @@ pub mod derived_property {
         '\u{386}'), ('\u{388}', '\u{38a}'), ('\u{38c}', '\u{38c}'), ('\u{38e}', '\u{3a1}'),
         ('\u{3a3}', '\u{3f5}'), ('\u{3f7}', '\u{481}'), ('\u{48a}', '\u{52f}'), ('\u{531}',
         '\u{556}'), ('\u{561}', '\u{587}'), ('\u{10a0}', '\u{10c5}'), ('\u{10c7}', '\u{10c7}'),
-        ('\u{10cd}', '\u{10cd}'), ('\u{1d00}', '\u{1dbf}'), ('\u{1e00}', '\u{1f15}'), ('\u{1f18}',
-        '\u{1f1d}'), ('\u{1f20}', '\u{1f45}'), ('\u{1f48}', '\u{1f4d}'), ('\u{1f50}', '\u{1f57}'),
-        ('\u{1f59}', '\u{1f59}'), ('\u{1f5b}', '\u{1f5b}'), ('\u{1f5d}', '\u{1f5d}'), ('\u{1f5f}',
-        '\u{1f7d}'), ('\u{1f80}', '\u{1fb4}'), ('\u{1fb6}', '\u{1fbc}'), ('\u{1fbe}', '\u{1fbe}'),
-        ('\u{1fc2}', '\u{1fc4}'), ('\u{1fc6}', '\u{1fcc}'), ('\u{1fd0}', '\u{1fd3}'), ('\u{1fd6}',
-        '\u{1fdb}'), ('\u{1fe0}', '\u{1fec}'), ('\u{1ff2}', '\u{1ff4}'), ('\u{1ff6}', '\u{1ffc}'),
-        ('\u{2071}', '\u{2071}'), ('\u{207f}', '\u{207f}'), ('\u{2090}', '\u{209c}'), ('\u{2102}',
-        '\u{2102}'), ('\u{2107}', '\u{2107}'), ('\u{210a}', '\u{2113}'), ('\u{2115}', '\u{2115}'),
-        ('\u{2119}', '\u{211d}'), ('\u{2124}', '\u{2124}'), ('\u{2126}', '\u{2126}'), ('\u{2128}',
-        '\u{2128}'), ('\u{212a}', '\u{212d}'), ('\u{212f}', '\u{2134}'), ('\u{2139}', '\u{2139}'),
-        ('\u{213c}', '\u{213f}'), ('\u{2145}', '\u{2149}'), ('\u{214e}', '\u{214e}'), ('\u{2160}',
-        '\u{217f}'), ('\u{2183}', '\u{2184}'), ('\u{24b6}', '\u{24e9}'), ('\u{2c00}', '\u{2c2e}'),
-        ('\u{2c30}', '\u{2c5e}'), ('\u{2c60}', '\u{2ce4}'), ('\u{2ceb}', '\u{2cee}'), ('\u{2cf2}',
-        '\u{2cf3}'), ('\u{2d00}', '\u{2d25}'), ('\u{2d27}', '\u{2d27}'), ('\u{2d2d}', '\u{2d2d}'),
-        ('\u{a640}', '\u{a66d}'), ('\u{a680}', '\u{a69d}'), ('\u{a722}', '\u{a787}'), ('\u{a78b}',
-        '\u{a78e}'), ('\u{a790}', '\u{a7ad}'), ('\u{a7b0}', '\u{a7b1}'), ('\u{a7f8}', '\u{a7fa}'),
-        ('\u{ab30}', '\u{ab5a}'), ('\u{ab5c}', '\u{ab5f}'), ('\u{ab64}', '\u{ab65}'), ('\u{fb00}',
-        '\u{fb06}'), ('\u{fb13}', '\u{fb17}'), ('\u{ff21}', '\u{ff3a}'), ('\u{ff41}', '\u{ff5a}'),
-        ('\u{10400}', '\u{1044f}'), ('\u{118a0}', '\u{118df}'), ('\u{1d400}', '\u{1d454}'),
-        ('\u{1d456}', '\u{1d49c}'), ('\u{1d49e}', '\u{1d49f}'), ('\u{1d4a2}', '\u{1d4a2}'),
-        ('\u{1d4a5}', '\u{1d4a6}'), ('\u{1d4a9}', '\u{1d4ac}'), ('\u{1d4ae}', '\u{1d4b9}'),
-        ('\u{1d4bb}', '\u{1d4bb}'), ('\u{1d4bd}', '\u{1d4c3}'), ('\u{1d4c5}', '\u{1d505}'),
-        ('\u{1d507}', '\u{1d50a}'), ('\u{1d50d}', '\u{1d514}'), ('\u{1d516}', '\u{1d51c}'),
-        ('\u{1d51e}', '\u{1d539}'), ('\u{1d53b}', '\u{1d53e}'), ('\u{1d540}', '\u{1d544}'),
-        ('\u{1d546}', '\u{1d546}'), ('\u{1d54a}', '\u{1d550}'), ('\u{1d552}', '\u{1d6a5}'),
-        ('\u{1d6a8}', '\u{1d6c0}'), ('\u{1d6c2}', '\u{1d6da}'), ('\u{1d6dc}', '\u{1d6fa}'),
-        ('\u{1d6fc}', '\u{1d714}'), ('\u{1d716}', '\u{1d734}'), ('\u{1d736}', '\u{1d74e}'),
-        ('\u{1d750}', '\u{1d76e}'), ('\u{1d770}', '\u{1d788}'), ('\u{1d78a}', '\u{1d7a8}'),
-        ('\u{1d7aa}', '\u{1d7c2}'), ('\u{1d7c4}', '\u{1d7cb}'), ('\u{1f130}', '\u{1f149}'),
-        ('\u{1f150}', '\u{1f169}'), ('\u{1f170}', '\u{1f189}')
+        ('\u{10cd}', '\u{10cd}'), ('\u{13a0}', '\u{13f5}'), ('\u{13f8}', '\u{13fd}'), ('\u{1d00}',
+        '\u{1dbf}'), ('\u{1e00}', '\u{1f15}'), ('\u{1f18}', '\u{1f1d}'), ('\u{1f20}', '\u{1f45}'),
+        ('\u{1f48}', '\u{1f4d}'), ('\u{1f50}', '\u{1f57}'), ('\u{1f59}', '\u{1f59}'), ('\u{1f5b}',
+        '\u{1f5b}'), ('\u{1f5d}', '\u{1f5d}'), ('\u{1f5f}', '\u{1f7d}'), ('\u{1f80}', '\u{1fb4}'),
+        ('\u{1fb6}', '\u{1fbc}'), ('\u{1fbe}', '\u{1fbe}'), ('\u{1fc2}', '\u{1fc4}'), ('\u{1fc6}',
+        '\u{1fcc}'), ('\u{1fd0}', '\u{1fd3}'), ('\u{1fd6}', '\u{1fdb}'), ('\u{1fe0}', '\u{1fec}'),
+        ('\u{1ff2}', '\u{1ff4}'), ('\u{1ff6}', '\u{1ffc}'), ('\u{2071}', '\u{2071}'), ('\u{207f}',
+        '\u{207f}'), ('\u{2090}', '\u{209c}'), ('\u{2102}', '\u{2102}'), ('\u{2107}', '\u{2107}'),
+        ('\u{210a}', '\u{2113}'), ('\u{2115}', '\u{2115}'), ('\u{2119}', '\u{211d}'), ('\u{2124}',
+        '\u{2124}'), ('\u{2126}', '\u{2126}'), ('\u{2128}', '\u{2128}'), ('\u{212a}', '\u{212d}'),
+        ('\u{212f}', '\u{2134}'), ('\u{2139}', '\u{2139}'), ('\u{213c}', '\u{213f}'), ('\u{2145}',
+        '\u{2149}'), ('\u{214e}', '\u{214e}'), ('\u{2160}', '\u{217f}'), ('\u{2183}', '\u{2184}'),
+        ('\u{24b6}', '\u{24e9}'), ('\u{2c00}', '\u{2c2e}'), ('\u{2c30}', '\u{2c5e}'), ('\u{2c60}',
+        '\u{2ce4}'), ('\u{2ceb}', '\u{2cee}'), ('\u{2cf2}', '\u{2cf3}'), ('\u{2d00}', '\u{2d25}'),
+        ('\u{2d27}', '\u{2d27}'), ('\u{2d2d}', '\u{2d2d}'), ('\u{a640}', '\u{a66d}'), ('\u{a680}',
+        '\u{a69d}'), ('\u{a722}', '\u{a787}'), ('\u{a78b}', '\u{a78e}'), ('\u{a790}', '\u{a7ad}'),
+        ('\u{a7b0}', '\u{a7b7}'), ('\u{a7f8}', '\u{a7fa}'), ('\u{ab30}', '\u{ab5a}'), ('\u{ab5c}',
+        '\u{ab65}'), ('\u{ab70}', '\u{abbf}'), ('\u{fb00}', '\u{fb06}'), ('\u{fb13}', '\u{fb17}'),
+        ('\u{ff21}', '\u{ff3a}'), ('\u{ff41}', '\u{ff5a}'), ('\u{10400}', '\u{1044f}'),
+        ('\u{10c80}', '\u{10cb2}'), ('\u{10cc0}', '\u{10cf2}'), ('\u{118a0}', '\u{118df}'),
+        ('\u{1d400}', '\u{1d454}'), ('\u{1d456}', '\u{1d49c}'), ('\u{1d49e}', '\u{1d49f}'),
+        ('\u{1d4a2}', '\u{1d4a2}'), ('\u{1d4a5}', '\u{1d4a6}'), ('\u{1d4a9}', '\u{1d4ac}'),
+        ('\u{1d4ae}', '\u{1d4b9}'), ('\u{1d4bb}', '\u{1d4bb}'), ('\u{1d4bd}', '\u{1d4c3}'),
+        ('\u{1d4c5}', '\u{1d505}'), ('\u{1d507}', '\u{1d50a}'), ('\u{1d50d}', '\u{1d514}'),
+        ('\u{1d516}', '\u{1d51c}'), ('\u{1d51e}', '\u{1d539}'), ('\u{1d53b}', '\u{1d53e}'),
+        ('\u{1d540}', '\u{1d544}'), ('\u{1d546}', '\u{1d546}'), ('\u{1d54a}', '\u{1d550}'),
+        ('\u{1d552}', '\u{1d6a5}'), ('\u{1d6a8}', '\u{1d6c0}'), ('\u{1d6c2}', '\u{1d6da}'),
+        ('\u{1d6dc}', '\u{1d6fa}'), ('\u{1d6fc}', '\u{1d714}'), ('\u{1d716}', '\u{1d734}'),
+        ('\u{1d736}', '\u{1d74e}'), ('\u{1d750}', '\u{1d76e}'), ('\u{1d770}', '\u{1d788}'),
+        ('\u{1d78a}', '\u{1d7a8}'), ('\u{1d7aa}', '\u{1d7c2}'), ('\u{1d7c4}', '\u{1d7cb}'),
+        ('\u{1f130}', '\u{1f149}'), ('\u{1f150}', '\u{1f169}'), ('\u{1f170}', '\u{1f189}')
     ];
 
     pub fn Cased(c: char) -> bool {
@@ -481,110 +491,112 @@ pub mod derived_property {
         '\u{51b}'), ('\u{51d}', '\u{51d}'), ('\u{51f}', '\u{51f}'), ('\u{521}', '\u{521}'),
         ('\u{523}', '\u{523}'), ('\u{525}', '\u{525}'), ('\u{527}', '\u{527}'), ('\u{529}',
         '\u{529}'), ('\u{52b}', '\u{52b}'), ('\u{52d}', '\u{52d}'), ('\u{52f}', '\u{52f}'),
-        ('\u{561}', '\u{587}'), ('\u{1d00}', '\u{1dbf}'), ('\u{1e01}', '\u{1e01}'), ('\u{1e03}',
-        '\u{1e03}'), ('\u{1e05}', '\u{1e05}'), ('\u{1e07}', '\u{1e07}'), ('\u{1e09}', '\u{1e09}'),
-        ('\u{1e0b}', '\u{1e0b}'), ('\u{1e0d}', '\u{1e0d}'), ('\u{1e0f}', '\u{1e0f}'), ('\u{1e11}',
-        '\u{1e11}'), ('\u{1e13}', '\u{1e13}'), ('\u{1e15}', '\u{1e15}'), ('\u{1e17}', '\u{1e17}'),
-        ('\u{1e19}', '\u{1e19}'), ('\u{1e1b}', '\u{1e1b}'), ('\u{1e1d}', '\u{1e1d}'), ('\u{1e1f}',
-        '\u{1e1f}'), ('\u{1e21}', '\u{1e21}'), ('\u{1e23}', '\u{1e23}'), ('\u{1e25}', '\u{1e25}'),
-        ('\u{1e27}', '\u{1e27}'), ('\u{1e29}', '\u{1e29}'), ('\u{1e2b}', '\u{1e2b}'), ('\u{1e2d}',
-        '\u{1e2d}'), ('\u{1e2f}', '\u{1e2f}'), ('\u{1e31}', '\u{1e31}'), ('\u{1e33}', '\u{1e33}'),
-        ('\u{1e35}', '\u{1e35}'), ('\u{1e37}', '\u{1e37}'), ('\u{1e39}', '\u{1e39}'), ('\u{1e3b}',
-        '\u{1e3b}'), ('\u{1e3d}', '\u{1e3d}'), ('\u{1e3f}', '\u{1e3f}'), ('\u{1e41}', '\u{1e41}'),
-        ('\u{1e43}', '\u{1e43}'), ('\u{1e45}', '\u{1e45}'), ('\u{1e47}', '\u{1e47}'), ('\u{1e49}',
-        '\u{1e49}'), ('\u{1e4b}', '\u{1e4b}'), ('\u{1e4d}', '\u{1e4d}'), ('\u{1e4f}', '\u{1e4f}'),
-        ('\u{1e51}', '\u{1e51}'), ('\u{1e53}', '\u{1e53}'), ('\u{1e55}', '\u{1e55}'), ('\u{1e57}',
-        '\u{1e57}'), ('\u{1e59}', '\u{1e59}'), ('\u{1e5b}', '\u{1e5b}'), ('\u{1e5d}', '\u{1e5d}'),
-        ('\u{1e5f}', '\u{1e5f}'), ('\u{1e61}', '\u{1e61}'), ('\u{1e63}', '\u{1e63}'), ('\u{1e65}',
-        '\u{1e65}'), ('\u{1e67}', '\u{1e67}'), ('\u{1e69}', '\u{1e69}'), ('\u{1e6b}', '\u{1e6b}'),
-        ('\u{1e6d}', '\u{1e6d}'), ('\u{1e6f}', '\u{1e6f}'), ('\u{1e71}', '\u{1e71}'), ('\u{1e73}',
-        '\u{1e73}'), ('\u{1e75}', '\u{1e75}'), ('\u{1e77}', '\u{1e77}'), ('\u{1e79}', '\u{1e79}'),
-        ('\u{1e7b}', '\u{1e7b}'), ('\u{1e7d}', '\u{1e7d}'), ('\u{1e7f}', '\u{1e7f}'), ('\u{1e81}',
-        '\u{1e81}'), ('\u{1e83}', '\u{1e83}'), ('\u{1e85}', '\u{1e85}'), ('\u{1e87}', '\u{1e87}'),
-        ('\u{1e89}', '\u{1e89}'), ('\u{1e8b}', '\u{1e8b}'), ('\u{1e8d}', '\u{1e8d}'), ('\u{1e8f}',
-        '\u{1e8f}'), ('\u{1e91}', '\u{1e91}'), ('\u{1e93}', '\u{1e93}'), ('\u{1e95}', '\u{1e9d}'),
-        ('\u{1e9f}', '\u{1e9f}'), ('\u{1ea1}', '\u{1ea1}'), ('\u{1ea3}', '\u{1ea3}'), ('\u{1ea5}',
-        '\u{1ea5}'), ('\u{1ea7}', '\u{1ea7}'), ('\u{1ea9}', '\u{1ea9}'), ('\u{1eab}', '\u{1eab}'),
-        ('\u{1ead}', '\u{1ead}'), ('\u{1eaf}', '\u{1eaf}'), ('\u{1eb1}', '\u{1eb1}'), ('\u{1eb3}',
-        '\u{1eb3}'), ('\u{1eb5}', '\u{1eb5}'), ('\u{1eb7}', '\u{1eb7}'), ('\u{1eb9}', '\u{1eb9}'),
-        ('\u{1ebb}', '\u{1ebb}'), ('\u{1ebd}', '\u{1ebd}'), ('\u{1ebf}', '\u{1ebf}'), ('\u{1ec1}',
-        '\u{1ec1}'), ('\u{1ec3}', '\u{1ec3}'), ('\u{1ec5}', '\u{1ec5}'), ('\u{1ec7}', '\u{1ec7}'),
-        ('\u{1ec9}', '\u{1ec9}'), ('\u{1ecb}', '\u{1ecb}'), ('\u{1ecd}', '\u{1ecd}'), ('\u{1ecf}',
-        '\u{1ecf}'), ('\u{1ed1}', '\u{1ed1}'), ('\u{1ed3}', '\u{1ed3}'), ('\u{1ed5}', '\u{1ed5}'),
-        ('\u{1ed7}', '\u{1ed7}'), ('\u{1ed9}', '\u{1ed9}'), ('\u{1edb}', '\u{1edb}'), ('\u{1edd}',
-        '\u{1edd}'), ('\u{1edf}', '\u{1edf}'), ('\u{1ee1}', '\u{1ee1}'), ('\u{1ee3}', '\u{1ee3}'),
-        ('\u{1ee5}', '\u{1ee5}'), ('\u{1ee7}', '\u{1ee7}'), ('\u{1ee9}', '\u{1ee9}'), ('\u{1eeb}',
-        '\u{1eeb}'), ('\u{1eed}', '\u{1eed}'), ('\u{1eef}', '\u{1eef}'), ('\u{1ef1}', '\u{1ef1}'),
-        ('\u{1ef3}', '\u{1ef3}'), ('\u{1ef5}', '\u{1ef5}'), ('\u{1ef7}', '\u{1ef7}'), ('\u{1ef9}',
-        '\u{1ef9}'), ('\u{1efb}', '\u{1efb}'), ('\u{1efd}', '\u{1efd}'), ('\u{1eff}', '\u{1f07}'),
-        ('\u{1f10}', '\u{1f15}'), ('\u{1f20}', '\u{1f27}'), ('\u{1f30}', '\u{1f37}'), ('\u{1f40}',
-        '\u{1f45}'), ('\u{1f50}', '\u{1f57}'), ('\u{1f60}', '\u{1f67}'), ('\u{1f70}', '\u{1f7d}'),
-        ('\u{1f80}', '\u{1f87}'), ('\u{1f90}', '\u{1f97}'), ('\u{1fa0}', '\u{1fa7}'), ('\u{1fb0}',
-        '\u{1fb4}'), ('\u{1fb6}', '\u{1fb7}'), ('\u{1fbe}', '\u{1fbe}'), ('\u{1fc2}', '\u{1fc4}'),
-        ('\u{1fc6}', '\u{1fc7}'), ('\u{1fd0}', '\u{1fd3}'), ('\u{1fd6}', '\u{1fd7}'), ('\u{1fe0}',
-        '\u{1fe7}'), ('\u{1ff2}', '\u{1ff4}'), ('\u{1ff6}', '\u{1ff7}'), ('\u{2071}', '\u{2071}'),
-        ('\u{207f}', '\u{207f}'), ('\u{2090}', '\u{209c}'), ('\u{210a}', '\u{210a}'), ('\u{210e}',
-        '\u{210f}'), ('\u{2113}', '\u{2113}'), ('\u{212f}', '\u{212f}'), ('\u{2134}', '\u{2134}'),
-        ('\u{2139}', '\u{2139}'), ('\u{213c}', '\u{213d}'), ('\u{2146}', '\u{2149}'), ('\u{214e}',
-        '\u{214e}'), ('\u{2170}', '\u{217f}'), ('\u{2184}', '\u{2184}'), ('\u{24d0}', '\u{24e9}'),
-        ('\u{2c30}', '\u{2c5e}'), ('\u{2c61}', '\u{2c61}'), ('\u{2c65}', '\u{2c66}'), ('\u{2c68}',
-        '\u{2c68}'), ('\u{2c6a}', '\u{2c6a}'), ('\u{2c6c}', '\u{2c6c}'), ('\u{2c71}', '\u{2c71}'),
-        ('\u{2c73}', '\u{2c74}'), ('\u{2c76}', '\u{2c7d}'), ('\u{2c81}', '\u{2c81}'), ('\u{2c83}',
-        '\u{2c83}'), ('\u{2c85}', '\u{2c85}'), ('\u{2c87}', '\u{2c87}'), ('\u{2c89}', '\u{2c89}'),
-        ('\u{2c8b}', '\u{2c8b}'), ('\u{2c8d}', '\u{2c8d}'), ('\u{2c8f}', '\u{2c8f}'), ('\u{2c91}',
-        '\u{2c91}'), ('\u{2c93}', '\u{2c93}'), ('\u{2c95}', '\u{2c95}'), ('\u{2c97}', '\u{2c97}'),
-        ('\u{2c99}', '\u{2c99}'), ('\u{2c9b}', '\u{2c9b}'), ('\u{2c9d}', '\u{2c9d}'), ('\u{2c9f}',
-        '\u{2c9f}'), ('\u{2ca1}', '\u{2ca1}'), ('\u{2ca3}', '\u{2ca3}'), ('\u{2ca5}', '\u{2ca5}'),
-        ('\u{2ca7}', '\u{2ca7}'), ('\u{2ca9}', '\u{2ca9}'), ('\u{2cab}', '\u{2cab}'), ('\u{2cad}',
-        '\u{2cad}'), ('\u{2caf}', '\u{2caf}'), ('\u{2cb1}', '\u{2cb1}'), ('\u{2cb3}', '\u{2cb3}'),
-        ('\u{2cb5}', '\u{2cb5}'), ('\u{2cb7}', '\u{2cb7}'), ('\u{2cb9}', '\u{2cb9}'), ('\u{2cbb}',
-        '\u{2cbb}'), ('\u{2cbd}', '\u{2cbd}'), ('\u{2cbf}', '\u{2cbf}'), ('\u{2cc1}', '\u{2cc1}'),
-        ('\u{2cc3}', '\u{2cc3}'), ('\u{2cc5}', '\u{2cc5}'), ('\u{2cc7}', '\u{2cc7}'), ('\u{2cc9}',
-        '\u{2cc9}'), ('\u{2ccb}', '\u{2ccb}'), ('\u{2ccd}', '\u{2ccd}'), ('\u{2ccf}', '\u{2ccf}'),
-        ('\u{2cd1}', '\u{2cd1}'), ('\u{2cd3}', '\u{2cd3}'), ('\u{2cd5}', '\u{2cd5}'), ('\u{2cd7}',
-        '\u{2cd7}'), ('\u{2cd9}', '\u{2cd9}'), ('\u{2cdb}', '\u{2cdb}'), ('\u{2cdd}', '\u{2cdd}'),
-        ('\u{2cdf}', '\u{2cdf}'), ('\u{2ce1}', '\u{2ce1}'), ('\u{2ce3}', '\u{2ce4}'), ('\u{2cec}',
-        '\u{2cec}'), ('\u{2cee}', '\u{2cee}'), ('\u{2cf3}', '\u{2cf3}'), ('\u{2d00}', '\u{2d25}'),
-        ('\u{2d27}', '\u{2d27}'), ('\u{2d2d}', '\u{2d2d}'), ('\u{a641}', '\u{a641}'), ('\u{a643}',
-        '\u{a643}'), ('\u{a645}', '\u{a645}'), ('\u{a647}', '\u{a647}'), ('\u{a649}', '\u{a649}'),
-        ('\u{a64b}', '\u{a64b}'), ('\u{a64d}', '\u{a64d}'), ('\u{a64f}', '\u{a64f}'), ('\u{a651}',
-        '\u{a651}'), ('\u{a653}', '\u{a653}'), ('\u{a655}', '\u{a655}'), ('\u{a657}', '\u{a657}'),
-        ('\u{a659}', '\u{a659}'), ('\u{a65b}', '\u{a65b}'), ('\u{a65d}', '\u{a65d}'), ('\u{a65f}',
-        '\u{a65f}'), ('\u{a661}', '\u{a661}'), ('\u{a663}', '\u{a663}'), ('\u{a665}', '\u{a665}'),
-        ('\u{a667}', '\u{a667}'), ('\u{a669}', '\u{a669}'), ('\u{a66b}', '\u{a66b}'), ('\u{a66d}',
-        '\u{a66d}'), ('\u{a681}', '\u{a681}'), ('\u{a683}', '\u{a683}'), ('\u{a685}', '\u{a685}'),
-        ('\u{a687}', '\u{a687}'), ('\u{a689}', '\u{a689}'), ('\u{a68b}', '\u{a68b}'), ('\u{a68d}',
-        '\u{a68d}'), ('\u{a68f}', '\u{a68f}'), ('\u{a691}', '\u{a691}'), ('\u{a693}', '\u{a693}'),
-        ('\u{a695}', '\u{a695}'), ('\u{a697}', '\u{a697}'), ('\u{a699}', '\u{a699}'), ('\u{a69b}',
-        '\u{a69d}'), ('\u{a723}', '\u{a723}'), ('\u{a725}', '\u{a725}'), ('\u{a727}', '\u{a727}'),
-        ('\u{a729}', '\u{a729}'), ('\u{a72b}', '\u{a72b}'), ('\u{a72d}', '\u{a72d}'), ('\u{a72f}',
-        '\u{a731}'), ('\u{a733}', '\u{a733}'), ('\u{a735}', '\u{a735}'), ('\u{a737}', '\u{a737}'),
-        ('\u{a739}', '\u{a739}'), ('\u{a73b}', '\u{a73b}'), ('\u{a73d}', '\u{a73d}'), ('\u{a73f}',
-        '\u{a73f}'), ('\u{a741}', '\u{a741}'), ('\u{a743}', '\u{a743}'), ('\u{a745}', '\u{a745}'),
-        ('\u{a747}', '\u{a747}'), ('\u{a749}', '\u{a749}'), ('\u{a74b}', '\u{a74b}'), ('\u{a74d}',
-        '\u{a74d}'), ('\u{a74f}', '\u{a74f}'), ('\u{a751}', '\u{a751}'), ('\u{a753}', '\u{a753}'),
-        ('\u{a755}', '\u{a755}'), ('\u{a757}', '\u{a757}'), ('\u{a759}', '\u{a759}'), ('\u{a75b}',
-        '\u{a75b}'), ('\u{a75d}', '\u{a75d}'), ('\u{a75f}', '\u{a75f}'), ('\u{a761}', '\u{a761}'),
-        ('\u{a763}', '\u{a763}'), ('\u{a765}', '\u{a765}'), ('\u{a767}', '\u{a767}'), ('\u{a769}',
-        '\u{a769}'), ('\u{a76b}', '\u{a76b}'), ('\u{a76d}', '\u{a76d}'), ('\u{a76f}', '\u{a778}'),
-        ('\u{a77a}', '\u{a77a}'), ('\u{a77c}', '\u{a77c}'), ('\u{a77f}', '\u{a77f}'), ('\u{a781}',
-        '\u{a781}'), ('\u{a783}', '\u{a783}'), ('\u{a785}', '\u{a785}'), ('\u{a787}', '\u{a787}'),
-        ('\u{a78c}', '\u{a78c}'), ('\u{a78e}', '\u{a78e}'), ('\u{a791}', '\u{a791}'), ('\u{a793}',
-        '\u{a795}'), ('\u{a797}', '\u{a797}'), ('\u{a799}', '\u{a799}'), ('\u{a79b}', '\u{a79b}'),
-        ('\u{a79d}', '\u{a79d}'), ('\u{a79f}', '\u{a79f}'), ('\u{a7a1}', '\u{a7a1}'), ('\u{a7a3}',
-        '\u{a7a3}'), ('\u{a7a5}', '\u{a7a5}'), ('\u{a7a7}', '\u{a7a7}'), ('\u{a7a9}', '\u{a7a9}'),
-        ('\u{a7f8}', '\u{a7fa}'), ('\u{ab30}', '\u{ab5a}'), ('\u{ab5c}', '\u{ab5f}'), ('\u{ab64}',
-        '\u{ab65}'), ('\u{fb00}', '\u{fb06}'), ('\u{fb13}', '\u{fb17}'), ('\u{ff41}', '\u{ff5a}'),
-        ('\u{10428}', '\u{1044f}'), ('\u{118c0}', '\u{118df}'), ('\u{1d41a}', '\u{1d433}'),
-        ('\u{1d44e}', '\u{1d454}'), ('\u{1d456}', '\u{1d467}'), ('\u{1d482}', '\u{1d49b}'),
-        ('\u{1d4b6}', '\u{1d4b9}'), ('\u{1d4bb}', '\u{1d4bb}'), ('\u{1d4bd}', '\u{1d4c3}'),
-        ('\u{1d4c5}', '\u{1d4cf}'), ('\u{1d4ea}', '\u{1d503}'), ('\u{1d51e}', '\u{1d537}'),
-        ('\u{1d552}', '\u{1d56b}'), ('\u{1d586}', '\u{1d59f}'), ('\u{1d5ba}', '\u{1d5d3}'),
-        ('\u{1d5ee}', '\u{1d607}'), ('\u{1d622}', '\u{1d63b}'), ('\u{1d656}', '\u{1d66f}'),
-        ('\u{1d68a}', '\u{1d6a5}'), ('\u{1d6c2}', '\u{1d6da}'), ('\u{1d6dc}', '\u{1d6e1}'),
-        ('\u{1d6fc}', '\u{1d714}'), ('\u{1d716}', '\u{1d71b}'), ('\u{1d736}', '\u{1d74e}'),
-        ('\u{1d750}', '\u{1d755}'), ('\u{1d770}', '\u{1d788}'), ('\u{1d78a}', '\u{1d78f}'),
-        ('\u{1d7aa}', '\u{1d7c2}'), ('\u{1d7c4}', '\u{1d7c9}'), ('\u{1d7cb}', '\u{1d7cb}')
+        ('\u{561}', '\u{587}'), ('\u{13f8}', '\u{13fd}'), ('\u{1d00}', '\u{1dbf}'), ('\u{1e01}',
+        '\u{1e01}'), ('\u{1e03}', '\u{1e03}'), ('\u{1e05}', '\u{1e05}'), ('\u{1e07}', '\u{1e07}'),
+        ('\u{1e09}', '\u{1e09}'), ('\u{1e0b}', '\u{1e0b}'), ('\u{1e0d}', '\u{1e0d}'), ('\u{1e0f}',
+        '\u{1e0f}'), ('\u{1e11}', '\u{1e11}'), ('\u{1e13}', '\u{1e13}'), ('\u{1e15}', '\u{1e15}'),
+        ('\u{1e17}', '\u{1e17}'), ('\u{1e19}', '\u{1e19}'), ('\u{1e1b}', '\u{1e1b}'), ('\u{1e1d}',
+        '\u{1e1d}'), ('\u{1e1f}', '\u{1e1f}'), ('\u{1e21}', '\u{1e21}'), ('\u{1e23}', '\u{1e23}'),
+        ('\u{1e25}', '\u{1e25}'), ('\u{1e27}', '\u{1e27}'), ('\u{1e29}', '\u{1e29}'), ('\u{1e2b}',
+        '\u{1e2b}'), ('\u{1e2d}', '\u{1e2d}'), ('\u{1e2f}', '\u{1e2f}'), ('\u{1e31}', '\u{1e31}'),
+        ('\u{1e33}', '\u{1e33}'), ('\u{1e35}', '\u{1e35}'), ('\u{1e37}', '\u{1e37}'), ('\u{1e39}',
+        '\u{1e39}'), ('\u{1e3b}', '\u{1e3b}'), ('\u{1e3d}', '\u{1e3d}'), ('\u{1e3f}', '\u{1e3f}'),
+        ('\u{1e41}', '\u{1e41}'), ('\u{1e43}', '\u{1e43}'), ('\u{1e45}', '\u{1e45}'), ('\u{1e47}',
+        '\u{1e47}'), ('\u{1e49}', '\u{1e49}'), ('\u{1e4b}', '\u{1e4b}'), ('\u{1e4d}', '\u{1e4d}'),
+        ('\u{1e4f}', '\u{1e4f}'), ('\u{1e51}', '\u{1e51}'), ('\u{1e53}', '\u{1e53}'), ('\u{1e55}',
+        '\u{1e55}'), ('\u{1e57}', '\u{1e57}'), ('\u{1e59}', '\u{1e59}'), ('\u{1e5b}', '\u{1e5b}'),
+        ('\u{1e5d}', '\u{1e5d}'), ('\u{1e5f}', '\u{1e5f}'), ('\u{1e61}', '\u{1e61}'), ('\u{1e63}',
+        '\u{1e63}'), ('\u{1e65}', '\u{1e65}'), ('\u{1e67}', '\u{1e67}'), ('\u{1e69}', '\u{1e69}'),
+        ('\u{1e6b}', '\u{1e6b}'), ('\u{1e6d}', '\u{1e6d}'), ('\u{1e6f}', '\u{1e6f}'), ('\u{1e71}',
+        '\u{1e71}'), ('\u{1e73}', '\u{1e73}'), ('\u{1e75}', '\u{1e75}'), ('\u{1e77}', '\u{1e77}'),
+        ('\u{1e79}', '\u{1e79}'), ('\u{1e7b}', '\u{1e7b}'), ('\u{1e7d}', '\u{1e7d}'), ('\u{1e7f}',
+        '\u{1e7f}'), ('\u{1e81}', '\u{1e81}'), ('\u{1e83}', '\u{1e83}'), ('\u{1e85}', '\u{1e85}'),
+        ('\u{1e87}', '\u{1e87}'), ('\u{1e89}', '\u{1e89}'), ('\u{1e8b}', '\u{1e8b}'), ('\u{1e8d}',
+        '\u{1e8d}'), ('\u{1e8f}', '\u{1e8f}'), ('\u{1e91}', '\u{1e91}'), ('\u{1e93}', '\u{1e93}'),
+        ('\u{1e95}', '\u{1e9d}'), ('\u{1e9f}', '\u{1e9f}'), ('\u{1ea1}', '\u{1ea1}'), ('\u{1ea3}',
+        '\u{1ea3}'), ('\u{1ea5}', '\u{1ea5}'), ('\u{1ea7}', '\u{1ea7}'), ('\u{1ea9}', '\u{1ea9}'),
+        ('\u{1eab}', '\u{1eab}'), ('\u{1ead}', '\u{1ead}'), ('\u{1eaf}', '\u{1eaf}'), ('\u{1eb1}',
+        '\u{1eb1}'), ('\u{1eb3}', '\u{1eb3}'), ('\u{1eb5}', '\u{1eb5}'), ('\u{1eb7}', '\u{1eb7}'),
+        ('\u{1eb9}', '\u{1eb9}'), ('\u{1ebb}', '\u{1ebb}'), ('\u{1ebd}', '\u{1ebd}'), ('\u{1ebf}',
+        '\u{1ebf}'), ('\u{1ec1}', '\u{1ec1}'), ('\u{1ec3}', '\u{1ec3}'), ('\u{1ec5}', '\u{1ec5}'),
+        ('\u{1ec7}', '\u{1ec7}'), ('\u{1ec9}', '\u{1ec9}'), ('\u{1ecb}', '\u{1ecb}'), ('\u{1ecd}',
+        '\u{1ecd}'), ('\u{1ecf}', '\u{1ecf}'), ('\u{1ed1}', '\u{1ed1}'), ('\u{1ed3}', '\u{1ed3}'),
+        ('\u{1ed5}', '\u{1ed5}'), ('\u{1ed7}', '\u{1ed7}'), ('\u{1ed9}', '\u{1ed9}'), ('\u{1edb}',
+        '\u{1edb}'), ('\u{1edd}', '\u{1edd}'), ('\u{1edf}', '\u{1edf}'), ('\u{1ee1}', '\u{1ee1}'),
+        ('\u{1ee3}', '\u{1ee3}'), ('\u{1ee5}', '\u{1ee5}'), ('\u{1ee7}', '\u{1ee7}'), ('\u{1ee9}',
+        '\u{1ee9}'), ('\u{1eeb}', '\u{1eeb}'), ('\u{1eed}', '\u{1eed}'), ('\u{1eef}', '\u{1eef}'),
+        ('\u{1ef1}', '\u{1ef1}'), ('\u{1ef3}', '\u{1ef3}'), ('\u{1ef5}', '\u{1ef5}'), ('\u{1ef7}',
+        '\u{1ef7}'), ('\u{1ef9}', '\u{1ef9}'), ('\u{1efb}', '\u{1efb}'), ('\u{1efd}', '\u{1efd}'),
+        ('\u{1eff}', '\u{1f07}'), ('\u{1f10}', '\u{1f15}'), ('\u{1f20}', '\u{1f27}'), ('\u{1f30}',
+        '\u{1f37}'), ('\u{1f40}', '\u{1f45}'), ('\u{1f50}', '\u{1f57}'), ('\u{1f60}', '\u{1f67}'),
+        ('\u{1f70}', '\u{1f7d}'), ('\u{1f80}', '\u{1f87}'), ('\u{1f90}', '\u{1f97}'), ('\u{1fa0}',
+        '\u{1fa7}'), ('\u{1fb0}', '\u{1fb4}'), ('\u{1fb6}', '\u{1fb7}'), ('\u{1fbe}', '\u{1fbe}'),
+        ('\u{1fc2}', '\u{1fc4}'), ('\u{1fc6}', '\u{1fc7}'), ('\u{1fd0}', '\u{1fd3}'), ('\u{1fd6}',
+        '\u{1fd7}'), ('\u{1fe0}', '\u{1fe7}'), ('\u{1ff2}', '\u{1ff4}'), ('\u{1ff6}', '\u{1ff7}'),
+        ('\u{2071}', '\u{2071}'), ('\u{207f}', '\u{207f}'), ('\u{2090}', '\u{209c}'), ('\u{210a}',
+        '\u{210a}'), ('\u{210e}', '\u{210f}'), ('\u{2113}', '\u{2113}'), ('\u{212f}', '\u{212f}'),
+        ('\u{2134}', '\u{2134}'), ('\u{2139}', '\u{2139}'), ('\u{213c}', '\u{213d}'), ('\u{2146}',
+        '\u{2149}'), ('\u{214e}', '\u{214e}'), ('\u{2170}', '\u{217f}'), ('\u{2184}', '\u{2184}'),
+        ('\u{24d0}', '\u{24e9}'), ('\u{2c30}', '\u{2c5e}'), ('\u{2c61}', '\u{2c61}'), ('\u{2c65}',
+        '\u{2c66}'), ('\u{2c68}', '\u{2c68}'), ('\u{2c6a}', '\u{2c6a}'), ('\u{2c6c}', '\u{2c6c}'),
+        ('\u{2c71}', '\u{2c71}'), ('\u{2c73}', '\u{2c74}'), ('\u{2c76}', '\u{2c7d}'), ('\u{2c81}',
+        '\u{2c81}'), ('\u{2c83}', '\u{2c83}'), ('\u{2c85}', '\u{2c85}'), ('\u{2c87}', '\u{2c87}'),
+        ('\u{2c89}', '\u{2c89}'), ('\u{2c8b}', '\u{2c8b}'), ('\u{2c8d}', '\u{2c8d}'), ('\u{2c8f}',
+        '\u{2c8f}'), ('\u{2c91}', '\u{2c91}'), ('\u{2c93}', '\u{2c93}'), ('\u{2c95}', '\u{2c95}'),
+        ('\u{2c97}', '\u{2c97}'), ('\u{2c99}', '\u{2c99}'), ('\u{2c9b}', '\u{2c9b}'), ('\u{2c9d}',
+        '\u{2c9d}'), ('\u{2c9f}', '\u{2c9f}'), ('\u{2ca1}', '\u{2ca1}'), ('\u{2ca3}', '\u{2ca3}'),
+        ('\u{2ca5}', '\u{2ca5}'), ('\u{2ca7}', '\u{2ca7}'), ('\u{2ca9}', '\u{2ca9}'), ('\u{2cab}',
+        '\u{2cab}'), ('\u{2cad}', '\u{2cad}'), ('\u{2caf}', '\u{2caf}'), ('\u{2cb1}', '\u{2cb1}'),
+        ('\u{2cb3}', '\u{2cb3}'), ('\u{2cb5}', '\u{2cb5}'), ('\u{2cb7}', '\u{2cb7}'), ('\u{2cb9}',
+        '\u{2cb9}'), ('\u{2cbb}', '\u{2cbb}'), ('\u{2cbd}', '\u{2cbd}'), ('\u{2cbf}', '\u{2cbf}'),
+        ('\u{2cc1}', '\u{2cc1}'), ('\u{2cc3}', '\u{2cc3}'), ('\u{2cc5}', '\u{2cc5}'), ('\u{2cc7}',
+        '\u{2cc7}'), ('\u{2cc9}', '\u{2cc9}'), ('\u{2ccb}', '\u{2ccb}'), ('\u{2ccd}', '\u{2ccd}'),
+        ('\u{2ccf}', '\u{2ccf}'), ('\u{2cd1}', '\u{2cd1}'), ('\u{2cd3}', '\u{2cd3}'), ('\u{2cd5}',
+        '\u{2cd5}'), ('\u{2cd7}', '\u{2cd7}'), ('\u{2cd9}', '\u{2cd9}'), ('\u{2cdb}', '\u{2cdb}'),
+        ('\u{2cdd}', '\u{2cdd}'), ('\u{2cdf}', '\u{2cdf}'), ('\u{2ce1}', '\u{2ce1}'), ('\u{2ce3}',
+        '\u{2ce4}'), ('\u{2cec}', '\u{2cec}'), ('\u{2cee}', '\u{2cee}'), ('\u{2cf3}', '\u{2cf3}'),
+        ('\u{2d00}', '\u{2d25}'), ('\u{2d27}', '\u{2d27}'), ('\u{2d2d}', '\u{2d2d}'), ('\u{a641}',
+        '\u{a641}'), ('\u{a643}', '\u{a643}'), ('\u{a645}', '\u{a645}'), ('\u{a647}', '\u{a647}'),
+        ('\u{a649}', '\u{a649}'), ('\u{a64b}', '\u{a64b}'), ('\u{a64d}', '\u{a64d}'), ('\u{a64f}',
+        '\u{a64f}'), ('\u{a651}', '\u{a651}'), ('\u{a653}', '\u{a653}'), ('\u{a655}', '\u{a655}'),
+        ('\u{a657}', '\u{a657}'), ('\u{a659}', '\u{a659}'), ('\u{a65b}', '\u{a65b}'), ('\u{a65d}',
+        '\u{a65d}'), ('\u{a65f}', '\u{a65f}'), ('\u{a661}', '\u{a661}'), ('\u{a663}', '\u{a663}'),
+        ('\u{a665}', '\u{a665}'), ('\u{a667}', '\u{a667}'), ('\u{a669}', '\u{a669}'), ('\u{a66b}',
+        '\u{a66b}'), ('\u{a66d}', '\u{a66d}'), ('\u{a681}', '\u{a681}'), ('\u{a683}', '\u{a683}'),
+        ('\u{a685}', '\u{a685}'), ('\u{a687}', '\u{a687}'), ('\u{a689}', '\u{a689}'), ('\u{a68b}',
+        '\u{a68b}'), ('\u{a68d}', '\u{a68d}'), ('\u{a68f}', '\u{a68f}'), ('\u{a691}', '\u{a691}'),
+        ('\u{a693}', '\u{a693}'), ('\u{a695}', '\u{a695}'), ('\u{a697}', '\u{a697}'), ('\u{a699}',
+        '\u{a699}'), ('\u{a69b}', '\u{a69d}'), ('\u{a723}', '\u{a723}'), ('\u{a725}', '\u{a725}'),
+        ('\u{a727}', '\u{a727}'), ('\u{a729}', '\u{a729}'), ('\u{a72b}', '\u{a72b}'), ('\u{a72d}',
+        '\u{a72d}'), ('\u{a72f}', '\u{a731}'), ('\u{a733}', '\u{a733}'), ('\u{a735}', '\u{a735}'),
+        ('\u{a737}', '\u{a737}'), ('\u{a739}', '\u{a739}'), ('\u{a73b}', '\u{a73b}'), ('\u{a73d}',
+        '\u{a73d}'), ('\u{a73f}', '\u{a73f}'), ('\u{a741}', '\u{a741}'), ('\u{a743}', '\u{a743}'),
+        ('\u{a745}', '\u{a745}'), ('\u{a747}', '\u{a747}'), ('\u{a749}', '\u{a749}'), ('\u{a74b}',
+        '\u{a74b}'), ('\u{a74d}', '\u{a74d}'), ('\u{a74f}', '\u{a74f}'), ('\u{a751}', '\u{a751}'),
+        ('\u{a753}', '\u{a753}'), ('\u{a755}', '\u{a755}'), ('\u{a757}', '\u{a757}'), ('\u{a759}',
+        '\u{a759}'), ('\u{a75b}', '\u{a75b}'), ('\u{a75d}', '\u{a75d}'), ('\u{a75f}', '\u{a75f}'),
+        ('\u{a761}', '\u{a761}'), ('\u{a763}', '\u{a763}'), ('\u{a765}', '\u{a765}'), ('\u{a767}',
+        '\u{a767}'), ('\u{a769}', '\u{a769}'), ('\u{a76b}', '\u{a76b}'), ('\u{a76d}', '\u{a76d}'),
+        ('\u{a76f}', '\u{a778}'), ('\u{a77a}', '\u{a77a}'), ('\u{a77c}', '\u{a77c}'), ('\u{a77f}',
+        '\u{a77f}'), ('\u{a781}', '\u{a781}'), ('\u{a783}', '\u{a783}'), ('\u{a785}', '\u{a785}'),
+        ('\u{a787}', '\u{a787}'), ('\u{a78c}', '\u{a78c}'), ('\u{a78e}', '\u{a78e}'), ('\u{a791}',
+        '\u{a791}'), ('\u{a793}', '\u{a795}'), ('\u{a797}', '\u{a797}'), ('\u{a799}', '\u{a799}'),
+        ('\u{a79b}', '\u{a79b}'), ('\u{a79d}', '\u{a79d}'), ('\u{a79f}', '\u{a79f}'), ('\u{a7a1}',
+        '\u{a7a1}'), ('\u{a7a3}', '\u{a7a3}'), ('\u{a7a5}', '\u{a7a5}'), ('\u{a7a7}', '\u{a7a7}'),
+        ('\u{a7a9}', '\u{a7a9}'), ('\u{a7b5}', '\u{a7b5}'), ('\u{a7b7}', '\u{a7b7}'), ('\u{a7f8}',
+        '\u{a7fa}'), ('\u{ab30}', '\u{ab5a}'), ('\u{ab5c}', '\u{ab65}'), ('\u{ab70}', '\u{abbf}'),
+        ('\u{fb00}', '\u{fb06}'), ('\u{fb13}', '\u{fb17}'), ('\u{ff41}', '\u{ff5a}'), ('\u{10428}',
+        '\u{1044f}'), ('\u{10cc0}', '\u{10cf2}'), ('\u{118c0}', '\u{118df}'), ('\u{1d41a}',
+        '\u{1d433}'), ('\u{1d44e}', '\u{1d454}'), ('\u{1d456}', '\u{1d467}'), ('\u{1d482}',
+        '\u{1d49b}'), ('\u{1d4b6}', '\u{1d4b9}'), ('\u{1d4bb}', '\u{1d4bb}'), ('\u{1d4bd}',
+        '\u{1d4c3}'), ('\u{1d4c5}', '\u{1d4cf}'), ('\u{1d4ea}', '\u{1d503}'), ('\u{1d51e}',
+        '\u{1d537}'), ('\u{1d552}', '\u{1d56b}'), ('\u{1d586}', '\u{1d59f}'), ('\u{1d5ba}',
+        '\u{1d5d3}'), ('\u{1d5ee}', '\u{1d607}'), ('\u{1d622}', '\u{1d63b}'), ('\u{1d656}',
+        '\u{1d66f}'), ('\u{1d68a}', '\u{1d6a5}'), ('\u{1d6c2}', '\u{1d6da}'), ('\u{1d6dc}',
+        '\u{1d6e1}'), ('\u{1d6fc}', '\u{1d714}'), ('\u{1d716}', '\u{1d71b}'), ('\u{1d736}',
+        '\u{1d74e}'), ('\u{1d750}', '\u{1d755}'), ('\u{1d770}', '\u{1d788}'), ('\u{1d78a}',
+        '\u{1d78f}'), ('\u{1d7aa}', '\u{1d7c2}'), ('\u{1d7c4}', '\u{1d7c9}'), ('\u{1d7cb}',
+        '\u{1d7cb}')
     ];
 
     pub fn Lowercase(c: char) -> bool {
@@ -670,97 +682,98 @@ pub mod derived_property {
         ('\u{520}', '\u{520}'), ('\u{522}', '\u{522}'), ('\u{524}', '\u{524}'), ('\u{526}',
         '\u{526}'), ('\u{528}', '\u{528}'), ('\u{52a}', '\u{52a}'), ('\u{52c}', '\u{52c}'),
         ('\u{52e}', '\u{52e}'), ('\u{531}', '\u{556}'), ('\u{10a0}', '\u{10c5}'), ('\u{10c7}',
-        '\u{10c7}'), ('\u{10cd}', '\u{10cd}'), ('\u{1e00}', '\u{1e00}'), ('\u{1e02}', '\u{1e02}'),
-        ('\u{1e04}', '\u{1e04}'), ('\u{1e06}', '\u{1e06}'), ('\u{1e08}', '\u{1e08}'), ('\u{1e0a}',
-        '\u{1e0a}'), ('\u{1e0c}', '\u{1e0c}'), ('\u{1e0e}', '\u{1e0e}'), ('\u{1e10}', '\u{1e10}'),
-        ('\u{1e12}', '\u{1e12}'), ('\u{1e14}', '\u{1e14}'), ('\u{1e16}', '\u{1e16}'), ('\u{1e18}',
-        '\u{1e18}'), ('\u{1e1a}', '\u{1e1a}'), ('\u{1e1c}', '\u{1e1c}'), ('\u{1e1e}', '\u{1e1e}'),
-        ('\u{1e20}', '\u{1e20}'), ('\u{1e22}', '\u{1e22}'), ('\u{1e24}', '\u{1e24}'), ('\u{1e26}',
-        '\u{1e26}'), ('\u{1e28}', '\u{1e28}'), ('\u{1e2a}', '\u{1e2a}'), ('\u{1e2c}', '\u{1e2c}'),
-        ('\u{1e2e}', '\u{1e2e}'), ('\u{1e30}', '\u{1e30}'), ('\u{1e32}', '\u{1e32}'), ('\u{1e34}',
-        '\u{1e34}'), ('\u{1e36}', '\u{1e36}'), ('\u{1e38}', '\u{1e38}'), ('\u{1e3a}', '\u{1e3a}'),
-        ('\u{1e3c}', '\u{1e3c}'), ('\u{1e3e}', '\u{1e3e}'), ('\u{1e40}', '\u{1e40}'), ('\u{1e42}',
-        '\u{1e42}'), ('\u{1e44}', '\u{1e44}'), ('\u{1e46}', '\u{1e46}'), ('\u{1e48}', '\u{1e48}'),
-        ('\u{1e4a}', '\u{1e4a}'), ('\u{1e4c}', '\u{1e4c}'), ('\u{1e4e}', '\u{1e4e}'), ('\u{1e50}',
-        '\u{1e50}'), ('\u{1e52}', '\u{1e52}'), ('\u{1e54}', '\u{1e54}'), ('\u{1e56}', '\u{1e56}'),
-        ('\u{1e58}', '\u{1e58}'), ('\u{1e5a}', '\u{1e5a}'), ('\u{1e5c}', '\u{1e5c}'), ('\u{1e5e}',
-        '\u{1e5e}'), ('\u{1e60}', '\u{1e60}'), ('\u{1e62}', '\u{1e62}'), ('\u{1e64}', '\u{1e64}'),
-        ('\u{1e66}', '\u{1e66}'), ('\u{1e68}', '\u{1e68}'), ('\u{1e6a}', '\u{1e6a}'), ('\u{1e6c}',
-        '\u{1e6c}'), ('\u{1e6e}', '\u{1e6e}'), ('\u{1e70}', '\u{1e70}'), ('\u{1e72}', '\u{1e72}'),
-        ('\u{1e74}', '\u{1e74}'), ('\u{1e76}', '\u{1e76}'), ('\u{1e78}', '\u{1e78}'), ('\u{1e7a}',
-        '\u{1e7a}'), ('\u{1e7c}', '\u{1e7c}'), ('\u{1e7e}', '\u{1e7e}'), ('\u{1e80}', '\u{1e80}'),
-        ('\u{1e82}', '\u{1e82}'), ('\u{1e84}', '\u{1e84}'), ('\u{1e86}', '\u{1e86}'), ('\u{1e88}',
-        '\u{1e88}'), ('\u{1e8a}', '\u{1e8a}'), ('\u{1e8c}', '\u{1e8c}'), ('\u{1e8e}', '\u{1e8e}'),
-        ('\u{1e90}', '\u{1e90}'), ('\u{1e92}', '\u{1e92}'), ('\u{1e94}', '\u{1e94}'), ('\u{1e9e}',
-        '\u{1e9e}'), ('\u{1ea0}', '\u{1ea0}'), ('\u{1ea2}', '\u{1ea2}'), ('\u{1ea4}', '\u{1ea4}'),
-        ('\u{1ea6}', '\u{1ea6}'), ('\u{1ea8}', '\u{1ea8}'), ('\u{1eaa}', '\u{1eaa}'), ('\u{1eac}',
-        '\u{1eac}'), ('\u{1eae}', '\u{1eae}'), ('\u{1eb0}', '\u{1eb0}'), ('\u{1eb2}', '\u{1eb2}'),
-        ('\u{1eb4}', '\u{1eb4}'), ('\u{1eb6}', '\u{1eb6}'), ('\u{1eb8}', '\u{1eb8}'), ('\u{1eba}',
-        '\u{1eba}'), ('\u{1ebc}', '\u{1ebc}'), ('\u{1ebe}', '\u{1ebe}'), ('\u{1ec0}', '\u{1ec0}'),
-        ('\u{1ec2}', '\u{1ec2}'), ('\u{1ec4}', '\u{1ec4}'), ('\u{1ec6}', '\u{1ec6}'), ('\u{1ec8}',
-        '\u{1ec8}'), ('\u{1eca}', '\u{1eca}'), ('\u{1ecc}', '\u{1ecc}'), ('\u{1ece}', '\u{1ece}'),
-        ('\u{1ed0}', '\u{1ed0}'), ('\u{1ed2}', '\u{1ed2}'), ('\u{1ed4}', '\u{1ed4}'), ('\u{1ed6}',
-        '\u{1ed6}'), ('\u{1ed8}', '\u{1ed8}'), ('\u{1eda}', '\u{1eda}'), ('\u{1edc}', '\u{1edc}'),
-        ('\u{1ede}', '\u{1ede}'), ('\u{1ee0}', '\u{1ee0}'), ('\u{1ee2}', '\u{1ee2}'), ('\u{1ee4}',
-        '\u{1ee4}'), ('\u{1ee6}', '\u{1ee6}'), ('\u{1ee8}', '\u{1ee8}'), ('\u{1eea}', '\u{1eea}'),
-        ('\u{1eec}', '\u{1eec}'), ('\u{1eee}', '\u{1eee}'), ('\u{1ef0}', '\u{1ef0}'), ('\u{1ef2}',
-        '\u{1ef2}'), ('\u{1ef4}', '\u{1ef4}'), ('\u{1ef6}', '\u{1ef6}'), ('\u{1ef8}', '\u{1ef8}'),
-        ('\u{1efa}', '\u{1efa}'), ('\u{1efc}', '\u{1efc}'), ('\u{1efe}', '\u{1efe}'), ('\u{1f08}',
-        '\u{1f0f}'), ('\u{1f18}', '\u{1f1d}'), ('\u{1f28}', '\u{1f2f}'), ('\u{1f38}', '\u{1f3f}'),
-        ('\u{1f48}', '\u{1f4d}'), ('\u{1f59}', '\u{1f59}'), ('\u{1f5b}', '\u{1f5b}'), ('\u{1f5d}',
-        '\u{1f5d}'), ('\u{1f5f}', '\u{1f5f}'), ('\u{1f68}', '\u{1f6f}'), ('\u{1fb8}', '\u{1fbb}'),
-        ('\u{1fc8}', '\u{1fcb}'), ('\u{1fd8}', '\u{1fdb}'), ('\u{1fe8}', '\u{1fec}'), ('\u{1ff8}',
-        '\u{1ffb}'), ('\u{2102}', '\u{2102}'), ('\u{2107}', '\u{2107}'), ('\u{210b}', '\u{210d}'),
-        ('\u{2110}', '\u{2112}'), ('\u{2115}', '\u{2115}'), ('\u{2119}', '\u{211d}'), ('\u{2124}',
-        '\u{2124}'), ('\u{2126}', '\u{2126}'), ('\u{2128}', '\u{2128}'), ('\u{212a}', '\u{212d}'),
-        ('\u{2130}', '\u{2133}'), ('\u{213e}', '\u{213f}'), ('\u{2145}', '\u{2145}'), ('\u{2160}',
-        '\u{216f}'), ('\u{2183}', '\u{2183}'), ('\u{24b6}', '\u{24cf}'), ('\u{2c00}', '\u{2c2e}'),
-        ('\u{2c60}', '\u{2c60}'), ('\u{2c62}', '\u{2c64}'), ('\u{2c67}', '\u{2c67}'), ('\u{2c69}',
-        '\u{2c69}'), ('\u{2c6b}', '\u{2c6b}'), ('\u{2c6d}', '\u{2c70}'), ('\u{2c72}', '\u{2c72}'),
-        ('\u{2c75}', '\u{2c75}'), ('\u{2c7e}', '\u{2c80}'), ('\u{2c82}', '\u{2c82}'), ('\u{2c84}',
-        '\u{2c84}'), ('\u{2c86}', '\u{2c86}'), ('\u{2c88}', '\u{2c88}'), ('\u{2c8a}', '\u{2c8a}'),
-        ('\u{2c8c}', '\u{2c8c}'), ('\u{2c8e}', '\u{2c8e}'), ('\u{2c90}', '\u{2c90}'), ('\u{2c92}',
-        '\u{2c92}'), ('\u{2c94}', '\u{2c94}'), ('\u{2c96}', '\u{2c96}'), ('\u{2c98}', '\u{2c98}'),
-        ('\u{2c9a}', '\u{2c9a}'), ('\u{2c9c}', '\u{2c9c}'), ('\u{2c9e}', '\u{2c9e}'), ('\u{2ca0}',
-        '\u{2ca0}'), ('\u{2ca2}', '\u{2ca2}'), ('\u{2ca4}', '\u{2ca4}'), ('\u{2ca6}', '\u{2ca6}'),
-        ('\u{2ca8}', '\u{2ca8}'), ('\u{2caa}', '\u{2caa}'), ('\u{2cac}', '\u{2cac}'), ('\u{2cae}',
-        '\u{2cae}'), ('\u{2cb0}', '\u{2cb0}'), ('\u{2cb2}', '\u{2cb2}'), ('\u{2cb4}', '\u{2cb4}'),
-        ('\u{2cb6}', '\u{2cb6}'), ('\u{2cb8}', '\u{2cb8}'), ('\u{2cba}', '\u{2cba}'), ('\u{2cbc}',
-        '\u{2cbc}'), ('\u{2cbe}', '\u{2cbe}'), ('\u{2cc0}', '\u{2cc0}'), ('\u{2cc2}', '\u{2cc2}'),
-        ('\u{2cc4}', '\u{2cc4}'), ('\u{2cc6}', '\u{2cc6}'), ('\u{2cc8}', '\u{2cc8}'), ('\u{2cca}',
-        '\u{2cca}'), ('\u{2ccc}', '\u{2ccc}'), ('\u{2cce}', '\u{2cce}'), ('\u{2cd0}', '\u{2cd0}'),
-        ('\u{2cd2}', '\u{2cd2}'), ('\u{2cd4}', '\u{2cd4}'), ('\u{2cd6}', '\u{2cd6}'), ('\u{2cd8}',
-        '\u{2cd8}'), ('\u{2cda}', '\u{2cda}'), ('\u{2cdc}', '\u{2cdc}'), ('\u{2cde}', '\u{2cde}'),
-        ('\u{2ce0}', '\u{2ce0}'), ('\u{2ce2}', '\u{2ce2}'), ('\u{2ceb}', '\u{2ceb}'), ('\u{2ced}',
-        '\u{2ced}'), ('\u{2cf2}', '\u{2cf2}'), ('\u{a640}', '\u{a640}'), ('\u{a642}', '\u{a642}'),
-        ('\u{a644}', '\u{a644}'), ('\u{a646}', '\u{a646}'), ('\u{a648}', '\u{a648}'), ('\u{a64a}',
-        '\u{a64a}'), ('\u{a64c}', '\u{a64c}'), ('\u{a64e}', '\u{a64e}'), ('\u{a650}', '\u{a650}'),
-        ('\u{a652}', '\u{a652}'), ('\u{a654}', '\u{a654}'), ('\u{a656}', '\u{a656}'), ('\u{a658}',
-        '\u{a658}'), ('\u{a65a}', '\u{a65a}'), ('\u{a65c}', '\u{a65c}'), ('\u{a65e}', '\u{a65e}'),
-        ('\u{a660}', '\u{a660}'), ('\u{a662}', '\u{a662}'), ('\u{a664}', '\u{a664}'), ('\u{a666}',
-        '\u{a666}'), ('\u{a668}', '\u{a668}'), ('\u{a66a}', '\u{a66a}'), ('\u{a66c}', '\u{a66c}'),
-        ('\u{a680}', '\u{a680}'), ('\u{a682}', '\u{a682}'), ('\u{a684}', '\u{a684}'), ('\u{a686}',
-        '\u{a686}'), ('\u{a688}', '\u{a688}'), ('\u{a68a}', '\u{a68a}'), ('\u{a68c}', '\u{a68c}'),
-        ('\u{a68e}', '\u{a68e}'), ('\u{a690}', '\u{a690}'), ('\u{a692}', '\u{a692}'), ('\u{a694}',
-        '\u{a694}'), ('\u{a696}', '\u{a696}'), ('\u{a698}', '\u{a698}'), ('\u{a69a}', '\u{a69a}'),
-        ('\u{a722}', '\u{a722}'), ('\u{a724}', '\u{a724}'), ('\u{a726}', '\u{a726}'), ('\u{a728}',
-        '\u{a728}'), ('\u{a72a}', '\u{a72a}'), ('\u{a72c}', '\u{a72c}'), ('\u{a72e}', '\u{a72e}'),
-        ('\u{a732}', '\u{a732}'), ('\u{a734}', '\u{a734}'), ('\u{a736}', '\u{a736}'), ('\u{a738}',
-        '\u{a738}'), ('\u{a73a}', '\u{a73a}'), ('\u{a73c}', '\u{a73c}'), ('\u{a73e}', '\u{a73e}'),
-        ('\u{a740}', '\u{a740}'), ('\u{a742}', '\u{a742}'), ('\u{a744}', '\u{a744}'), ('\u{a746}',
-        '\u{a746}'), ('\u{a748}', '\u{a748}'), ('\u{a74a}', '\u{a74a}'), ('\u{a74c}', '\u{a74c}'),
-        ('\u{a74e}', '\u{a74e}'), ('\u{a750}', '\u{a750}'), ('\u{a752}', '\u{a752}'), ('\u{a754}',
-        '\u{a754}'), ('\u{a756}', '\u{a756}'), ('\u{a758}', '\u{a758}'), ('\u{a75a}', '\u{a75a}'),
-        ('\u{a75c}', '\u{a75c}'), ('\u{a75e}', '\u{a75e}'), ('\u{a760}', '\u{a760}'), ('\u{a762}',
-        '\u{a762}'), ('\u{a764}', '\u{a764}'), ('\u{a766}', '\u{a766}'), ('\u{a768}', '\u{a768}'),
-        ('\u{a76a}', '\u{a76a}'), ('\u{a76c}', '\u{a76c}'), ('\u{a76e}', '\u{a76e}'), ('\u{a779}',
-        '\u{a779}'), ('\u{a77b}', '\u{a77b}'), ('\u{a77d}', '\u{a77e}'), ('\u{a780}', '\u{a780}'),
-        ('\u{a782}', '\u{a782}'), ('\u{a784}', '\u{a784}'), ('\u{a786}', '\u{a786}'), ('\u{a78b}',
-        '\u{a78b}'), ('\u{a78d}', '\u{a78d}'), ('\u{a790}', '\u{a790}'), ('\u{a792}', '\u{a792}'),
-        ('\u{a796}', '\u{a796}'), ('\u{a798}', '\u{a798}'), ('\u{a79a}', '\u{a79a}'), ('\u{a79c}',
-        '\u{a79c}'), ('\u{a79e}', '\u{a79e}'), ('\u{a7a0}', '\u{a7a0}'), ('\u{a7a2}', '\u{a7a2}'),
-        ('\u{a7a4}', '\u{a7a4}'), ('\u{a7a6}', '\u{a7a6}'), ('\u{a7a8}', '\u{a7a8}'), ('\u{a7aa}',
-        '\u{a7ad}'), ('\u{a7b0}', '\u{a7b1}'), ('\u{ff21}', '\u{ff3a}'), ('\u{10400}', '\u{10427}'),
+        '\u{10c7}'), ('\u{10cd}', '\u{10cd}'), ('\u{13a0}', '\u{13f5}'), ('\u{1e00}', '\u{1e00}'),
+        ('\u{1e02}', '\u{1e02}'), ('\u{1e04}', '\u{1e04}'), ('\u{1e06}', '\u{1e06}'), ('\u{1e08}',
+        '\u{1e08}'), ('\u{1e0a}', '\u{1e0a}'), ('\u{1e0c}', '\u{1e0c}'), ('\u{1e0e}', '\u{1e0e}'),
+        ('\u{1e10}', '\u{1e10}'), ('\u{1e12}', '\u{1e12}'), ('\u{1e14}', '\u{1e14}'), ('\u{1e16}',
+        '\u{1e16}'), ('\u{1e18}', '\u{1e18}'), ('\u{1e1a}', '\u{1e1a}'), ('\u{1e1c}', '\u{1e1c}'),
+        ('\u{1e1e}', '\u{1e1e}'), ('\u{1e20}', '\u{1e20}'), ('\u{1e22}', '\u{1e22}'), ('\u{1e24}',
+        '\u{1e24}'), ('\u{1e26}', '\u{1e26}'), ('\u{1e28}', '\u{1e28}'), ('\u{1e2a}', '\u{1e2a}'),
+        ('\u{1e2c}', '\u{1e2c}'), ('\u{1e2e}', '\u{1e2e}'), ('\u{1e30}', '\u{1e30}'), ('\u{1e32}',
+        '\u{1e32}'), ('\u{1e34}', '\u{1e34}'), ('\u{1e36}', '\u{1e36}'), ('\u{1e38}', '\u{1e38}'),
+        ('\u{1e3a}', '\u{1e3a}'), ('\u{1e3c}', '\u{1e3c}'), ('\u{1e3e}', '\u{1e3e}'), ('\u{1e40}',
+        '\u{1e40}'), ('\u{1e42}', '\u{1e42}'), ('\u{1e44}', '\u{1e44}'), ('\u{1e46}', '\u{1e46}'),
+        ('\u{1e48}', '\u{1e48}'), ('\u{1e4a}', '\u{1e4a}'), ('\u{1e4c}', '\u{1e4c}'), ('\u{1e4e}',
+        '\u{1e4e}'), ('\u{1e50}', '\u{1e50}'), ('\u{1e52}', '\u{1e52}'), ('\u{1e54}', '\u{1e54}'),
+        ('\u{1e56}', '\u{1e56}'), ('\u{1e58}', '\u{1e58}'), ('\u{1e5a}', '\u{1e5a}'), ('\u{1e5c}',
+        '\u{1e5c}'), ('\u{1e5e}', '\u{1e5e}'), ('\u{1e60}', '\u{1e60}'), ('\u{1e62}', '\u{1e62}'),
+        ('\u{1e64}', '\u{1e64}'), ('\u{1e66}', '\u{1e66}'), ('\u{1e68}', '\u{1e68}'), ('\u{1e6a}',
+        '\u{1e6a}'), ('\u{1e6c}', '\u{1e6c}'), ('\u{1e6e}', '\u{1e6e}'), ('\u{1e70}', '\u{1e70}'),
+        ('\u{1e72}', '\u{1e72}'), ('\u{1e74}', '\u{1e74}'), ('\u{1e76}', '\u{1e76}'), ('\u{1e78}',
+        '\u{1e78}'), ('\u{1e7a}', '\u{1e7a}'), ('\u{1e7c}', '\u{1e7c}'), ('\u{1e7e}', '\u{1e7e}'),
+        ('\u{1e80}', '\u{1e80}'), ('\u{1e82}', '\u{1e82}'), ('\u{1e84}', '\u{1e84}'), ('\u{1e86}',
+        '\u{1e86}'), ('\u{1e88}', '\u{1e88}'), ('\u{1e8a}', '\u{1e8a}'), ('\u{1e8c}', '\u{1e8c}'),
+        ('\u{1e8e}', '\u{1e8e}'), ('\u{1e90}', '\u{1e90}'), ('\u{1e92}', '\u{1e92}'), ('\u{1e94}',
+        '\u{1e94}'), ('\u{1e9e}', '\u{1e9e}'), ('\u{1ea0}', '\u{1ea0}'), ('\u{1ea2}', '\u{1ea2}'),
+        ('\u{1ea4}', '\u{1ea4}'), ('\u{1ea6}', '\u{1ea6}'), ('\u{1ea8}', '\u{1ea8}'), ('\u{1eaa}',
+        '\u{1eaa}'), ('\u{1eac}', '\u{1eac}'), ('\u{1eae}', '\u{1eae}'), ('\u{1eb0}', '\u{1eb0}'),
+        ('\u{1eb2}', '\u{1eb2}'), ('\u{1eb4}', '\u{1eb4}'), ('\u{1eb6}', '\u{1eb6}'), ('\u{1eb8}',
+        '\u{1eb8}'), ('\u{1eba}', '\u{1eba}'), ('\u{1ebc}', '\u{1ebc}'), ('\u{1ebe}', '\u{1ebe}'),
+        ('\u{1ec0}', '\u{1ec0}'), ('\u{1ec2}', '\u{1ec2}'), ('\u{1ec4}', '\u{1ec4}'), ('\u{1ec6}',
+        '\u{1ec6}'), ('\u{1ec8}', '\u{1ec8}'), ('\u{1eca}', '\u{1eca}'), ('\u{1ecc}', '\u{1ecc}'),
+        ('\u{1ece}', '\u{1ece}'), ('\u{1ed0}', '\u{1ed0}'), ('\u{1ed2}', '\u{1ed2}'), ('\u{1ed4}',
+        '\u{1ed4}'), ('\u{1ed6}', '\u{1ed6}'), ('\u{1ed8}', '\u{1ed8}'), ('\u{1eda}', '\u{1eda}'),
+        ('\u{1edc}', '\u{1edc}'), ('\u{1ede}', '\u{1ede}'), ('\u{1ee0}', '\u{1ee0}'), ('\u{1ee2}',
+        '\u{1ee2}'), ('\u{1ee4}', '\u{1ee4}'), ('\u{1ee6}', '\u{1ee6}'), ('\u{1ee8}', '\u{1ee8}'),
+        ('\u{1eea}', '\u{1eea}'), ('\u{1eec}', '\u{1eec}'), ('\u{1eee}', '\u{1eee}'), ('\u{1ef0}',
+        '\u{1ef0}'), ('\u{1ef2}', '\u{1ef2}'), ('\u{1ef4}', '\u{1ef4}'), ('\u{1ef6}', '\u{1ef6}'),
+        ('\u{1ef8}', '\u{1ef8}'), ('\u{1efa}', '\u{1efa}'), ('\u{1efc}', '\u{1efc}'), ('\u{1efe}',
+        '\u{1efe}'), ('\u{1f08}', '\u{1f0f}'), ('\u{1f18}', '\u{1f1d}'), ('\u{1f28}', '\u{1f2f}'),
+        ('\u{1f38}', '\u{1f3f}'), ('\u{1f48}', '\u{1f4d}'), ('\u{1f59}', '\u{1f59}'), ('\u{1f5b}',
+        '\u{1f5b}'), ('\u{1f5d}', '\u{1f5d}'), ('\u{1f5f}', '\u{1f5f}'), ('\u{1f68}', '\u{1f6f}'),
+        ('\u{1fb8}', '\u{1fbb}'), ('\u{1fc8}', '\u{1fcb}'), ('\u{1fd8}', '\u{1fdb}'), ('\u{1fe8}',
+        '\u{1fec}'), ('\u{1ff8}', '\u{1ffb}'), ('\u{2102}', '\u{2102}'), ('\u{2107}', '\u{2107}'),
+        ('\u{210b}', '\u{210d}'), ('\u{2110}', '\u{2112}'), ('\u{2115}', '\u{2115}'), ('\u{2119}',
+        '\u{211d}'), ('\u{2124}', '\u{2124}'), ('\u{2126}', '\u{2126}'), ('\u{2128}', '\u{2128}'),
+        ('\u{212a}', '\u{212d}'), ('\u{2130}', '\u{2133}'), ('\u{213e}', '\u{213f}'), ('\u{2145}',
+        '\u{2145}'), ('\u{2160}', '\u{216f}'), ('\u{2183}', '\u{2183}'), ('\u{24b6}', '\u{24cf}'),
+        ('\u{2c00}', '\u{2c2e}'), ('\u{2c60}', '\u{2c60}'), ('\u{2c62}', '\u{2c64}'), ('\u{2c67}',
+        '\u{2c67}'), ('\u{2c69}', '\u{2c69}'), ('\u{2c6b}', '\u{2c6b}'), ('\u{2c6d}', '\u{2c70}'),
+        ('\u{2c72}', '\u{2c72}'), ('\u{2c75}', '\u{2c75}'), ('\u{2c7e}', '\u{2c80}'), ('\u{2c82}',
+        '\u{2c82}'), ('\u{2c84}', '\u{2c84}'), ('\u{2c86}', '\u{2c86}'), ('\u{2c88}', '\u{2c88}'),
+        ('\u{2c8a}', '\u{2c8a}'), ('\u{2c8c}', '\u{2c8c}'), ('\u{2c8e}', '\u{2c8e}'), ('\u{2c90}',
+        '\u{2c90}'), ('\u{2c92}', '\u{2c92}'), ('\u{2c94}', '\u{2c94}'), ('\u{2c96}', '\u{2c96}'),
+        ('\u{2c98}', '\u{2c98}'), ('\u{2c9a}', '\u{2c9a}'), ('\u{2c9c}', '\u{2c9c}'), ('\u{2c9e}',
+        '\u{2c9e}'), ('\u{2ca0}', '\u{2ca0}'), ('\u{2ca2}', '\u{2ca2}'), ('\u{2ca4}', '\u{2ca4}'),
+        ('\u{2ca6}', '\u{2ca6}'), ('\u{2ca8}', '\u{2ca8}'), ('\u{2caa}', '\u{2caa}'), ('\u{2cac}',
+        '\u{2cac}'), ('\u{2cae}', '\u{2cae}'), ('\u{2cb0}', '\u{2cb0}'), ('\u{2cb2}', '\u{2cb2}'),
+        ('\u{2cb4}', '\u{2cb4}'), ('\u{2cb6}', '\u{2cb6}'), ('\u{2cb8}', '\u{2cb8}'), ('\u{2cba}',
+        '\u{2cba}'), ('\u{2cbc}', '\u{2cbc}'), ('\u{2cbe}', '\u{2cbe}'), ('\u{2cc0}', '\u{2cc0}'),
+        ('\u{2cc2}', '\u{2cc2}'), ('\u{2cc4}', '\u{2cc4}'), ('\u{2cc6}', '\u{2cc6}'), ('\u{2cc8}',
+        '\u{2cc8}'), ('\u{2cca}', '\u{2cca}'), ('\u{2ccc}', '\u{2ccc}'), ('\u{2cce}', '\u{2cce}'),
+        ('\u{2cd0}', '\u{2cd0}'), ('\u{2cd2}', '\u{2cd2}'), ('\u{2cd4}', '\u{2cd4}'), ('\u{2cd6}',
+        '\u{2cd6}'), ('\u{2cd8}', '\u{2cd8}'), ('\u{2cda}', '\u{2cda}'), ('\u{2cdc}', '\u{2cdc}'),
+        ('\u{2cde}', '\u{2cde}'), ('\u{2ce0}', '\u{2ce0}'), ('\u{2ce2}', '\u{2ce2}'), ('\u{2ceb}',
+        '\u{2ceb}'), ('\u{2ced}', '\u{2ced}'), ('\u{2cf2}', '\u{2cf2}'), ('\u{a640}', '\u{a640}'),
+        ('\u{a642}', '\u{a642}'), ('\u{a644}', '\u{a644}'), ('\u{a646}', '\u{a646}'), ('\u{a648}',
+        '\u{a648}'), ('\u{a64a}', '\u{a64a}'), ('\u{a64c}', '\u{a64c}'), ('\u{a64e}', '\u{a64e}'),
+        ('\u{a650}', '\u{a650}'), ('\u{a652}', '\u{a652}'), ('\u{a654}', '\u{a654}'), ('\u{a656}',
+        '\u{a656}'), ('\u{a658}', '\u{a658}'), ('\u{a65a}', '\u{a65a}'), ('\u{a65c}', '\u{a65c}'),
+        ('\u{a65e}', '\u{a65e}'), ('\u{a660}', '\u{a660}'), ('\u{a662}', '\u{a662}'), ('\u{a664}',
+        '\u{a664}'), ('\u{a666}', '\u{a666}'), ('\u{a668}', '\u{a668}'), ('\u{a66a}', '\u{a66a}'),
+        ('\u{a66c}', '\u{a66c}'), ('\u{a680}', '\u{a680}'), ('\u{a682}', '\u{a682}'), ('\u{a684}',
+        '\u{a684}'), ('\u{a686}', '\u{a686}'), ('\u{a688}', '\u{a688}'), ('\u{a68a}', '\u{a68a}'),
+        ('\u{a68c}', '\u{a68c}'), ('\u{a68e}', '\u{a68e}'), ('\u{a690}', '\u{a690}'), ('\u{a692}',
+        '\u{a692}'), ('\u{a694}', '\u{a694}'), ('\u{a696}', '\u{a696}'), ('\u{a698}', '\u{a698}'),
+        ('\u{a69a}', '\u{a69a}'), ('\u{a722}', '\u{a722}'), ('\u{a724}', '\u{a724}'), ('\u{a726}',
+        '\u{a726}'), ('\u{a728}', '\u{a728}'), ('\u{a72a}', '\u{a72a}'), ('\u{a72c}', '\u{a72c}'),
+        ('\u{a72e}', '\u{a72e}'), ('\u{a732}', '\u{a732}'), ('\u{a734}', '\u{a734}'), ('\u{a736}',
+        '\u{a736}'), ('\u{a738}', '\u{a738}'), ('\u{a73a}', '\u{a73a}'), ('\u{a73c}', '\u{a73c}'),
+        ('\u{a73e}', '\u{a73e}'), ('\u{a740}', '\u{a740}'), ('\u{a742}', '\u{a742}'), ('\u{a744}',
+        '\u{a744}'), ('\u{a746}', '\u{a746}'), ('\u{a748}', '\u{a748}'), ('\u{a74a}', '\u{a74a}'),
+        ('\u{a74c}', '\u{a74c}'), ('\u{a74e}', '\u{a74e}'), ('\u{a750}', '\u{a750}'), ('\u{a752}',
+        '\u{a752}'), ('\u{a754}', '\u{a754}'), ('\u{a756}', '\u{a756}'), ('\u{a758}', '\u{a758}'),
+        ('\u{a75a}', '\u{a75a}'), ('\u{a75c}', '\u{a75c}'), ('\u{a75e}', '\u{a75e}'), ('\u{a760}',
+        '\u{a760}'), ('\u{a762}', '\u{a762}'), ('\u{a764}', '\u{a764}'), ('\u{a766}', '\u{a766}'),
+        ('\u{a768}', '\u{a768}'), ('\u{a76a}', '\u{a76a}'), ('\u{a76c}', '\u{a76c}'), ('\u{a76e}',
+        '\u{a76e}'), ('\u{a779}', '\u{a779}'), ('\u{a77b}', '\u{a77b}'), ('\u{a77d}', '\u{a77e}'),
+        ('\u{a780}', '\u{a780}'), ('\u{a782}', '\u{a782}'), ('\u{a784}', '\u{a784}'), ('\u{a786}',
+        '\u{a786}'), ('\u{a78b}', '\u{a78b}'), ('\u{a78d}', '\u{a78d}'), ('\u{a790}', '\u{a790}'),
+        ('\u{a792}', '\u{a792}'), ('\u{a796}', '\u{a796}'), ('\u{a798}', '\u{a798}'), ('\u{a79a}',
+        '\u{a79a}'), ('\u{a79c}', '\u{a79c}'), ('\u{a79e}', '\u{a79e}'), ('\u{a7a0}', '\u{a7a0}'),
+        ('\u{a7a2}', '\u{a7a2}'), ('\u{a7a4}', '\u{a7a4}'), ('\u{a7a6}', '\u{a7a6}'), ('\u{a7a8}',
+        '\u{a7a8}'), ('\u{a7aa}', '\u{a7ad}'), ('\u{a7b0}', '\u{a7b4}'), ('\u{a7b6}', '\u{a7b6}'),
+        ('\u{ff21}', '\u{ff3a}'), ('\u{10400}', '\u{10427}'), ('\u{10c80}', '\u{10cb2}'),
         ('\u{118a0}', '\u{118bf}'), ('\u{1d400}', '\u{1d419}'), ('\u{1d434}', '\u{1d44d}'),
         ('\u{1d468}', '\u{1d481}'), ('\u{1d49c}', '\u{1d49c}'), ('\u{1d49e}', '\u{1d49f}'),
         ('\u{1d4a2}', '\u{1d4a2}'), ('\u{1d4a5}', '\u{1d4a6}'), ('\u{1d4a9}', '\u{1d4ac}'),
@@ -793,7 +806,7 @@ pub mod derived_property {
         '\u{61a}'), ('\u{620}', '\u{669}'), ('\u{66e}', '\u{6d3}'), ('\u{6d5}', '\u{6dc}'),
         ('\u{6df}', '\u{6e8}'), ('\u{6ea}', '\u{6fc}'), ('\u{6ff}', '\u{6ff}'), ('\u{710}',
         '\u{74a}'), ('\u{74d}', '\u{7b1}'), ('\u{7c0}', '\u{7f5}'), ('\u{7fa}', '\u{7fa}'),
-        ('\u{800}', '\u{82d}'), ('\u{840}', '\u{85b}'), ('\u{8a0}', '\u{8b2}'), ('\u{8e4}',
+        ('\u{800}', '\u{82d}'), ('\u{840}', '\u{85b}'), ('\u{8a0}', '\u{8b4}'), ('\u{8e3}',
         '\u{963}'), ('\u{966}', '\u{96f}'), ('\u{971}', '\u{983}'), ('\u{985}', '\u{98c}'),
         ('\u{98f}', '\u{990}'), ('\u{993}', '\u{9a8}'), ('\u{9aa}', '\u{9b0}'), ('\u{9b2}',
         '\u{9b2}'), ('\u{9b6}', '\u{9b9}'), ('\u{9bc}', '\u{9c4}'), ('\u{9c7}', '\u{9c8}'),
@@ -806,100 +819,100 @@ pub mod derived_property {
         ('\u{a81}', '\u{a83}'), ('\u{a85}', '\u{a8d}'), ('\u{a8f}', '\u{a91}'), ('\u{a93}',
         '\u{aa8}'), ('\u{aaa}', '\u{ab0}'), ('\u{ab2}', '\u{ab3}'), ('\u{ab5}', '\u{ab9}'),
         ('\u{abc}', '\u{ac5}'), ('\u{ac7}', '\u{ac9}'), ('\u{acb}', '\u{acd}'), ('\u{ad0}',
-        '\u{ad0}'), ('\u{ae0}', '\u{ae3}'), ('\u{ae6}', '\u{aef}'), ('\u{b01}', '\u{b03}'),
-        ('\u{b05}', '\u{b0c}'), ('\u{b0f}', '\u{b10}'), ('\u{b13}', '\u{b28}'), ('\u{b2a}',
-        '\u{b30}'), ('\u{b32}', '\u{b33}'), ('\u{b35}', '\u{b39}'), ('\u{b3c}', '\u{b44}'),
-        ('\u{b47}', '\u{b48}'), ('\u{b4b}', '\u{b4d}'), ('\u{b56}', '\u{b57}'), ('\u{b5c}',
-        '\u{b5d}'), ('\u{b5f}', '\u{b63}'), ('\u{b66}', '\u{b6f}'), ('\u{b71}', '\u{b71}'),
-        ('\u{b82}', '\u{b83}'), ('\u{b85}', '\u{b8a}'), ('\u{b8e}', '\u{b90}'), ('\u{b92}',
-        '\u{b95}'), ('\u{b99}', '\u{b9a}'), ('\u{b9c}', '\u{b9c}'), ('\u{b9e}', '\u{b9f}'),
-        ('\u{ba3}', '\u{ba4}'), ('\u{ba8}', '\u{baa}'), ('\u{bae}', '\u{bb9}'), ('\u{bbe}',
-        '\u{bc2}'), ('\u{bc6}', '\u{bc8}'), ('\u{bca}', '\u{bcd}'), ('\u{bd0}', '\u{bd0}'),
-        ('\u{bd7}', '\u{bd7}'), ('\u{be6}', '\u{bef}'), ('\u{c00}', '\u{c03}'), ('\u{c05}',
-        '\u{c0c}'), ('\u{c0e}', '\u{c10}'), ('\u{c12}', '\u{c28}'), ('\u{c2a}', '\u{c39}'),
-        ('\u{c3d}', '\u{c44}'), ('\u{c46}', '\u{c48}'), ('\u{c4a}', '\u{c4d}'), ('\u{c55}',
-        '\u{c56}'), ('\u{c58}', '\u{c59}'), ('\u{c60}', '\u{c63}'), ('\u{c66}', '\u{c6f}'),
-        ('\u{c81}', '\u{c83}'), ('\u{c85}', '\u{c8c}'), ('\u{c8e}', '\u{c90}'), ('\u{c92}',
-        '\u{ca8}'), ('\u{caa}', '\u{cb3}'), ('\u{cb5}', '\u{cb9}'), ('\u{cbc}', '\u{cc4}'),
-        ('\u{cc6}', '\u{cc8}'), ('\u{cca}', '\u{ccd}'), ('\u{cd5}', '\u{cd6}'), ('\u{cde}',
-        '\u{cde}'), ('\u{ce0}', '\u{ce3}'), ('\u{ce6}', '\u{cef}'), ('\u{cf1}', '\u{cf2}'),
-        ('\u{d01}', '\u{d03}'), ('\u{d05}', '\u{d0c}'), ('\u{d0e}', '\u{d10}'), ('\u{d12}',
-        '\u{d3a}'), ('\u{d3d}', '\u{d44}'), ('\u{d46}', '\u{d48}'), ('\u{d4a}', '\u{d4e}'),
-        ('\u{d57}', '\u{d57}'), ('\u{d60}', '\u{d63}'), ('\u{d66}', '\u{d6f}'), ('\u{d7a}',
-        '\u{d7f}'), ('\u{d82}', '\u{d83}'), ('\u{d85}', '\u{d96}'), ('\u{d9a}', '\u{db1}'),
-        ('\u{db3}', '\u{dbb}'), ('\u{dbd}', '\u{dbd}'), ('\u{dc0}', '\u{dc6}'), ('\u{dca}',
-        '\u{dca}'), ('\u{dcf}', '\u{dd4}'), ('\u{dd6}', '\u{dd6}'), ('\u{dd8}', '\u{ddf}'),
-        ('\u{de6}', '\u{def}'), ('\u{df2}', '\u{df3}'), ('\u{e01}', '\u{e3a}'), ('\u{e40}',
-        '\u{e4e}'), ('\u{e50}', '\u{e59}'), ('\u{e81}', '\u{e82}'), ('\u{e84}', '\u{e84}'),
-        ('\u{e87}', '\u{e88}'), ('\u{e8a}', '\u{e8a}'), ('\u{e8d}', '\u{e8d}'), ('\u{e94}',
-        '\u{e97}'), ('\u{e99}', '\u{e9f}'), ('\u{ea1}', '\u{ea3}'), ('\u{ea5}', '\u{ea5}'),
-        ('\u{ea7}', '\u{ea7}'), ('\u{eaa}', '\u{eab}'), ('\u{ead}', '\u{eb9}'), ('\u{ebb}',
-        '\u{ebd}'), ('\u{ec0}', '\u{ec4}'), ('\u{ec6}', '\u{ec6}'), ('\u{ec8}', '\u{ecd}'),
-        ('\u{ed0}', '\u{ed9}'), ('\u{edc}', '\u{edf}'), ('\u{f00}', '\u{f00}'), ('\u{f18}',
-        '\u{f19}'), ('\u{f20}', '\u{f29}'), ('\u{f35}', '\u{f35}'), ('\u{f37}', '\u{f37}'),
-        ('\u{f39}', '\u{f39}'), ('\u{f3e}', '\u{f47}'), ('\u{f49}', '\u{f6c}'), ('\u{f71}',
-        '\u{f84}'), ('\u{f86}', '\u{f97}'), ('\u{f99}', '\u{fbc}'), ('\u{fc6}', '\u{fc6}'),
-        ('\u{1000}', '\u{1049}'), ('\u{1050}', '\u{109d}'), ('\u{10a0}', '\u{10c5}'), ('\u{10c7}',
-        '\u{10c7}'), ('\u{10cd}', '\u{10cd}'), ('\u{10d0}', '\u{10fa}'), ('\u{10fc}', '\u{1248}'),
-        ('\u{124a}', '\u{124d}'), ('\u{1250}', '\u{1256}'), ('\u{1258}', '\u{1258}'), ('\u{125a}',
-        '\u{125d}'), ('\u{1260}', '\u{1288}'), ('\u{128a}', '\u{128d}'), ('\u{1290}', '\u{12b0}'),
-        ('\u{12b2}', '\u{12b5}'), ('\u{12b8}', '\u{12be}'), ('\u{12c0}', '\u{12c0}'), ('\u{12c2}',
-        '\u{12c5}'), ('\u{12c8}', '\u{12d6}'), ('\u{12d8}', '\u{1310}'), ('\u{1312}', '\u{1315}'),
-        ('\u{1318}', '\u{135a}'), ('\u{135d}', '\u{135f}'), ('\u{1369}', '\u{1371}'), ('\u{1380}',
-        '\u{138f}'), ('\u{13a0}', '\u{13f4}'), ('\u{1401}', '\u{166c}'), ('\u{166f}', '\u{167f}'),
-        ('\u{1681}', '\u{169a}'), ('\u{16a0}', '\u{16ea}'), ('\u{16ee}', '\u{16f8}'), ('\u{1700}',
-        '\u{170c}'), ('\u{170e}', '\u{1714}'), ('\u{1720}', '\u{1734}'), ('\u{1740}', '\u{1753}'),
-        ('\u{1760}', '\u{176c}'), ('\u{176e}', '\u{1770}'), ('\u{1772}', '\u{1773}'), ('\u{1780}',
-        '\u{17d3}'), ('\u{17d7}', '\u{17d7}'), ('\u{17dc}', '\u{17dd}'), ('\u{17e0}', '\u{17e9}'),
-        ('\u{180b}', '\u{180d}'), ('\u{1810}', '\u{1819}'), ('\u{1820}', '\u{1877}'), ('\u{1880}',
-        '\u{18aa}'), ('\u{18b0}', '\u{18f5}'), ('\u{1900}', '\u{191e}'), ('\u{1920}', '\u{192b}'),
-        ('\u{1930}', '\u{193b}'), ('\u{1946}', '\u{196d}'), ('\u{1970}', '\u{1974}'), ('\u{1980}',
-        '\u{19ab}'), ('\u{19b0}', '\u{19c9}'), ('\u{19d0}', '\u{19da}'), ('\u{1a00}', '\u{1a1b}'),
-        ('\u{1a20}', '\u{1a5e}'), ('\u{1a60}', '\u{1a7c}'), ('\u{1a7f}', '\u{1a89}'), ('\u{1a90}',
-        '\u{1a99}'), ('\u{1aa7}', '\u{1aa7}'), ('\u{1ab0}', '\u{1abd}'), ('\u{1b00}', '\u{1b4b}'),
-        ('\u{1b50}', '\u{1b59}'), ('\u{1b6b}', '\u{1b73}'), ('\u{1b80}', '\u{1bf3}'), ('\u{1c00}',
-        '\u{1c37}'), ('\u{1c40}', '\u{1c49}'), ('\u{1c4d}', '\u{1c7d}'), ('\u{1cd0}', '\u{1cd2}'),
-        ('\u{1cd4}', '\u{1cf6}'), ('\u{1cf8}', '\u{1cf9}'), ('\u{1d00}', '\u{1df5}'), ('\u{1dfc}',
-        '\u{1f15}'), ('\u{1f18}', '\u{1f1d}'), ('\u{1f20}', '\u{1f45}'), ('\u{1f48}', '\u{1f4d}'),
-        ('\u{1f50}', '\u{1f57}'), ('\u{1f59}', '\u{1f59}'), ('\u{1f5b}', '\u{1f5b}'), ('\u{1f5d}',
-        '\u{1f5d}'), ('\u{1f5f}', '\u{1f7d}'), ('\u{1f80}', '\u{1fb4}'), ('\u{1fb6}', '\u{1fbc}'),
-        ('\u{1fbe}', '\u{1fbe}'), ('\u{1fc2}', '\u{1fc4}'), ('\u{1fc6}', '\u{1fcc}'), ('\u{1fd0}',
-        '\u{1fd3}'), ('\u{1fd6}', '\u{1fdb}'), ('\u{1fe0}', '\u{1fec}'), ('\u{1ff2}', '\u{1ff4}'),
-        ('\u{1ff6}', '\u{1ffc}'), ('\u{203f}', '\u{2040}'), ('\u{2054}', '\u{2054}'), ('\u{2071}',
-        '\u{2071}'), ('\u{207f}', '\u{207f}'), ('\u{2090}', '\u{209c}'), ('\u{20d0}', '\u{20dc}'),
-        ('\u{20e1}', '\u{20e1}'), ('\u{20e5}', '\u{20f0}'), ('\u{2102}', '\u{2102}'), ('\u{2107}',
-        '\u{2107}'), ('\u{210a}', '\u{2113}'), ('\u{2115}', '\u{2115}'), ('\u{2118}', '\u{211d}'),
-        ('\u{2124}', '\u{2124}'), ('\u{2126}', '\u{2126}'), ('\u{2128}', '\u{2128}'), ('\u{212a}',
-        '\u{2139}'), ('\u{213c}', '\u{213f}'), ('\u{2145}', '\u{2149}'), ('\u{214e}', '\u{214e}'),
-        ('\u{2160}', '\u{2188}'), ('\u{2c00}', '\u{2c2e}'), ('\u{2c30}', '\u{2c5e}'), ('\u{2c60}',
-        '\u{2ce4}'), ('\u{2ceb}', '\u{2cf3}'), ('\u{2d00}', '\u{2d25}'), ('\u{2d27}', '\u{2d27}'),
-        ('\u{2d2d}', '\u{2d2d}'), ('\u{2d30}', '\u{2d67}'), ('\u{2d6f}', '\u{2d6f}'), ('\u{2d7f}',
-        '\u{2d96}'), ('\u{2da0}', '\u{2da6}'), ('\u{2da8}', '\u{2dae}'), ('\u{2db0}', '\u{2db6}'),
-        ('\u{2db8}', '\u{2dbe}'), ('\u{2dc0}', '\u{2dc6}'), ('\u{2dc8}', '\u{2dce}'), ('\u{2dd0}',
-        '\u{2dd6}'), ('\u{2dd8}', '\u{2dde}'), ('\u{2de0}', '\u{2dff}'), ('\u{3005}', '\u{3007}'),
-        ('\u{3021}', '\u{302f}'), ('\u{3031}', '\u{3035}'), ('\u{3038}', '\u{303c}'), ('\u{3041}',
-        '\u{3096}'), ('\u{3099}', '\u{309a}'), ('\u{309d}', '\u{309f}'), ('\u{30a1}', '\u{30fa}'),
-        ('\u{30fc}', '\u{30ff}'), ('\u{3105}', '\u{312d}'), ('\u{3131}', '\u{318e}'), ('\u{31a0}',
-        '\u{31ba}'), ('\u{31f0}', '\u{31ff}'), ('\u{3400}', '\u{4db5}'), ('\u{4e00}', '\u{9fcc}'),
-        ('\u{a000}', '\u{a48c}'), ('\u{a4d0}', '\u{a4fd}'), ('\u{a500}', '\u{a60c}'), ('\u{a610}',
-        '\u{a62b}'), ('\u{a640}', '\u{a66f}'), ('\u{a674}', '\u{a67d}'), ('\u{a67f}', '\u{a69d}'),
-        ('\u{a69f}', '\u{a6f1}'), ('\u{a717}', '\u{a71f}'), ('\u{a722}', '\u{a788}'), ('\u{a78b}',
-        '\u{a78e}'), ('\u{a790}', '\u{a7ad}'), ('\u{a7b0}', '\u{a7b1}'), ('\u{a7f7}', '\u{a827}'),
+        '\u{ad0}'), ('\u{ae0}', '\u{ae3}'), ('\u{ae6}', '\u{aef}'), ('\u{af9}', '\u{af9}'),
+        ('\u{b01}', '\u{b03}'), ('\u{b05}', '\u{b0c}'), ('\u{b0f}', '\u{b10}'), ('\u{b13}',
+        '\u{b28}'), ('\u{b2a}', '\u{b30}'), ('\u{b32}', '\u{b33}'), ('\u{b35}', '\u{b39}'),
+        ('\u{b3c}', '\u{b44}'), ('\u{b47}', '\u{b48}'), ('\u{b4b}', '\u{b4d}'), ('\u{b56}',
+        '\u{b57}'), ('\u{b5c}', '\u{b5d}'), ('\u{b5f}', '\u{b63}'), ('\u{b66}', '\u{b6f}'),
+        ('\u{b71}', '\u{b71}'), ('\u{b82}', '\u{b83}'), ('\u{b85}', '\u{b8a}'), ('\u{b8e}',
+        '\u{b90}'), ('\u{b92}', '\u{b95}'), ('\u{b99}', '\u{b9a}'), ('\u{b9c}', '\u{b9c}'),
+        ('\u{b9e}', '\u{b9f}'), ('\u{ba3}', '\u{ba4}'), ('\u{ba8}', '\u{baa}'), ('\u{bae}',
+        '\u{bb9}'), ('\u{bbe}', '\u{bc2}'), ('\u{bc6}', '\u{bc8}'), ('\u{bca}', '\u{bcd}'),
+        ('\u{bd0}', '\u{bd0}'), ('\u{bd7}', '\u{bd7}'), ('\u{be6}', '\u{bef}'), ('\u{c00}',
+        '\u{c03}'), ('\u{c05}', '\u{c0c}'), ('\u{c0e}', '\u{c10}'), ('\u{c12}', '\u{c28}'),
+        ('\u{c2a}', '\u{c39}'), ('\u{c3d}', '\u{c44}'), ('\u{c46}', '\u{c48}'), ('\u{c4a}',
+        '\u{c4d}'), ('\u{c55}', '\u{c56}'), ('\u{c58}', '\u{c5a}'), ('\u{c60}', '\u{c63}'),
+        ('\u{c66}', '\u{c6f}'), ('\u{c81}', '\u{c83}'), ('\u{c85}', '\u{c8c}'), ('\u{c8e}',
+        '\u{c90}'), ('\u{c92}', '\u{ca8}'), ('\u{caa}', '\u{cb3}'), ('\u{cb5}', '\u{cb9}'),
+        ('\u{cbc}', '\u{cc4}'), ('\u{cc6}', '\u{cc8}'), ('\u{cca}', '\u{ccd}'), ('\u{cd5}',
+        '\u{cd6}'), ('\u{cde}', '\u{cde}'), ('\u{ce0}', '\u{ce3}'), ('\u{ce6}', '\u{cef}'),
+        ('\u{cf1}', '\u{cf2}'), ('\u{d01}', '\u{d03}'), ('\u{d05}', '\u{d0c}'), ('\u{d0e}',
+        '\u{d10}'), ('\u{d12}', '\u{d3a}'), ('\u{d3d}', '\u{d44}'), ('\u{d46}', '\u{d48}'),
+        ('\u{d4a}', '\u{d4e}'), ('\u{d57}', '\u{d57}'), ('\u{d5f}', '\u{d63}'), ('\u{d66}',
+        '\u{d6f}'), ('\u{d7a}', '\u{d7f}'), ('\u{d82}', '\u{d83}'), ('\u{d85}', '\u{d96}'),
+        ('\u{d9a}', '\u{db1}'), ('\u{db3}', '\u{dbb}'), ('\u{dbd}', '\u{dbd}'), ('\u{dc0}',
+        '\u{dc6}'), ('\u{dca}', '\u{dca}'), ('\u{dcf}', '\u{dd4}'), ('\u{dd6}', '\u{dd6}'),
+        ('\u{dd8}', '\u{ddf}'), ('\u{de6}', '\u{def}'), ('\u{df2}', '\u{df3}'), ('\u{e01}',
+        '\u{e3a}'), ('\u{e40}', '\u{e4e}'), ('\u{e50}', '\u{e59}'), ('\u{e81}', '\u{e82}'),
+        ('\u{e84}', '\u{e84}'), ('\u{e87}', '\u{e88}'), ('\u{e8a}', '\u{e8a}'), ('\u{e8d}',
+        '\u{e8d}'), ('\u{e94}', '\u{e97}'), ('\u{e99}', '\u{e9f}'), ('\u{ea1}', '\u{ea3}'),
+        ('\u{ea5}', '\u{ea5}'), ('\u{ea7}', '\u{ea7}'), ('\u{eaa}', '\u{eab}'), ('\u{ead}',
+        '\u{eb9}'), ('\u{ebb}', '\u{ebd}'), ('\u{ec0}', '\u{ec4}'), ('\u{ec6}', '\u{ec6}'),
+        ('\u{ec8}', '\u{ecd}'), ('\u{ed0}', '\u{ed9}'), ('\u{edc}', '\u{edf}'), ('\u{f00}',
+        '\u{f00}'), ('\u{f18}', '\u{f19}'), ('\u{f20}', '\u{f29}'), ('\u{f35}', '\u{f35}'),
+        ('\u{f37}', '\u{f37}'), ('\u{f39}', '\u{f39}'), ('\u{f3e}', '\u{f47}'), ('\u{f49}',
+        '\u{f6c}'), ('\u{f71}', '\u{f84}'), ('\u{f86}', '\u{f97}'), ('\u{f99}', '\u{fbc}'),
+        ('\u{fc6}', '\u{fc6}'), ('\u{1000}', '\u{1049}'), ('\u{1050}', '\u{109d}'), ('\u{10a0}',
+        '\u{10c5}'), ('\u{10c7}', '\u{10c7}'), ('\u{10cd}', '\u{10cd}'), ('\u{10d0}', '\u{10fa}'),
+        ('\u{10fc}', '\u{1248}'), ('\u{124a}', '\u{124d}'), ('\u{1250}', '\u{1256}'), ('\u{1258}',
+        '\u{1258}'), ('\u{125a}', '\u{125d}'), ('\u{1260}', '\u{1288}'), ('\u{128a}', '\u{128d}'),
+        ('\u{1290}', '\u{12b0}'), ('\u{12b2}', '\u{12b5}'), ('\u{12b8}', '\u{12be}'), ('\u{12c0}',
+        '\u{12c0}'), ('\u{12c2}', '\u{12c5}'), ('\u{12c8}', '\u{12d6}'), ('\u{12d8}', '\u{1310}'),
+        ('\u{1312}', '\u{1315}'), ('\u{1318}', '\u{135a}'), ('\u{135d}', '\u{135f}'), ('\u{1369}',
+        '\u{1371}'), ('\u{1380}', '\u{138f}'), ('\u{13a0}', '\u{13f5}'), ('\u{13f8}', '\u{13fd}'),
+        ('\u{1401}', '\u{166c}'), ('\u{166f}', '\u{167f}'), ('\u{1681}', '\u{169a}'), ('\u{16a0}',
+        '\u{16ea}'), ('\u{16ee}', '\u{16f8}'), ('\u{1700}', '\u{170c}'), ('\u{170e}', '\u{1714}'),
+        ('\u{1720}', '\u{1734}'), ('\u{1740}', '\u{1753}'), ('\u{1760}', '\u{176c}'), ('\u{176e}',
+        '\u{1770}'), ('\u{1772}', '\u{1773}'), ('\u{1780}', '\u{17d3}'), ('\u{17d7}', '\u{17d7}'),
+        ('\u{17dc}', '\u{17dd}'), ('\u{17e0}', '\u{17e9}'), ('\u{180b}', '\u{180d}'), ('\u{1810}',
+        '\u{1819}'), ('\u{1820}', '\u{1877}'), ('\u{1880}', '\u{18aa}'), ('\u{18b0}', '\u{18f5}'),
+        ('\u{1900}', '\u{191e}'), ('\u{1920}', '\u{192b}'), ('\u{1930}', '\u{193b}'), ('\u{1946}',
+        '\u{196d}'), ('\u{1970}', '\u{1974}'), ('\u{1980}', '\u{19ab}'), ('\u{19b0}', '\u{19c9}'),
+        ('\u{19d0}', '\u{19da}'), ('\u{1a00}', '\u{1a1b}'), ('\u{1a20}', '\u{1a5e}'), ('\u{1a60}',
+        '\u{1a7c}'), ('\u{1a7f}', '\u{1a89}'), ('\u{1a90}', '\u{1a99}'), ('\u{1aa7}', '\u{1aa7}'),
+        ('\u{1ab0}', '\u{1abd}'), ('\u{1b00}', '\u{1b4b}'), ('\u{1b50}', '\u{1b59}'), ('\u{1b6b}',
+        '\u{1b73}'), ('\u{1b80}', '\u{1bf3}'), ('\u{1c00}', '\u{1c37}'), ('\u{1c40}', '\u{1c49}'),
+        ('\u{1c4d}', '\u{1c7d}'), ('\u{1cd0}', '\u{1cd2}'), ('\u{1cd4}', '\u{1cf6}'), ('\u{1cf8}',
+        '\u{1cf9}'), ('\u{1d00}', '\u{1df5}'), ('\u{1dfc}', '\u{1f15}'), ('\u{1f18}', '\u{1f1d}'),
+        ('\u{1f20}', '\u{1f45}'), ('\u{1f48}', '\u{1f4d}'), ('\u{1f50}', '\u{1f57}'), ('\u{1f59}',
+        '\u{1f59}'), ('\u{1f5b}', '\u{1f5b}'), ('\u{1f5d}', '\u{1f5d}'), ('\u{1f5f}', '\u{1f7d}'),
+        ('\u{1f80}', '\u{1fb4}'), ('\u{1fb6}', '\u{1fbc}'), ('\u{1fbe}', '\u{1fbe}'), ('\u{1fc2}',
+        '\u{1fc4}'), ('\u{1fc6}', '\u{1fcc}'), ('\u{1fd0}', '\u{1fd3}'), ('\u{1fd6}', '\u{1fdb}'),
+        ('\u{1fe0}', '\u{1fec}'), ('\u{1ff2}', '\u{1ff4}'), ('\u{1ff6}', '\u{1ffc}'), ('\u{203f}',
+        '\u{2040}'), ('\u{2054}', '\u{2054}'), ('\u{2071}', '\u{2071}'), ('\u{207f}', '\u{207f}'),
+        ('\u{2090}', '\u{209c}'), ('\u{20d0}', '\u{20dc}'), ('\u{20e1}', '\u{20e1}'), ('\u{20e5}',
+        '\u{20f0}'), ('\u{2102}', '\u{2102}'), ('\u{2107}', '\u{2107}'), ('\u{210a}', '\u{2113}'),
+        ('\u{2115}', '\u{2115}'), ('\u{2118}', '\u{211d}'), ('\u{2124}', '\u{2124}'), ('\u{2126}',
+        '\u{2126}'), ('\u{2128}', '\u{2128}'), ('\u{212a}', '\u{2139}'), ('\u{213c}', '\u{213f}'),
+        ('\u{2145}', '\u{2149}'), ('\u{214e}', '\u{214e}'), ('\u{2160}', '\u{2188}'), ('\u{2c00}',
+        '\u{2c2e}'), ('\u{2c30}', '\u{2c5e}'), ('\u{2c60}', '\u{2ce4}'), ('\u{2ceb}', '\u{2cf3}'),
+        ('\u{2d00}', '\u{2d25}'), ('\u{2d27}', '\u{2d27}'), ('\u{2d2d}', '\u{2d2d}'), ('\u{2d30}',
+        '\u{2d67}'), ('\u{2d6f}', '\u{2d6f}'), ('\u{2d7f}', '\u{2d96}'), ('\u{2da0}', '\u{2da6}'),
+        ('\u{2da8}', '\u{2dae}'), ('\u{2db0}', '\u{2db6}'), ('\u{2db8}', '\u{2dbe}'), ('\u{2dc0}',
+        '\u{2dc6}'), ('\u{2dc8}', '\u{2dce}'), ('\u{2dd0}', '\u{2dd6}'), ('\u{2dd8}', '\u{2dde}'),
+        ('\u{2de0}', '\u{2dff}'), ('\u{3005}', '\u{3007}'), ('\u{3021}', '\u{302f}'), ('\u{3031}',
+        '\u{3035}'), ('\u{3038}', '\u{303c}'), ('\u{3041}', '\u{3096}'), ('\u{3099}', '\u{309a}'),
+        ('\u{309d}', '\u{309f}'), ('\u{30a1}', '\u{30fa}'), ('\u{30fc}', '\u{30ff}'), ('\u{3105}',
+        '\u{312d}'), ('\u{3131}', '\u{318e}'), ('\u{31a0}', '\u{31ba}'), ('\u{31f0}', '\u{31ff}'),
+        ('\u{3400}', '\u{4db5}'), ('\u{4e00}', '\u{9fd5}'), ('\u{a000}', '\u{a48c}'), ('\u{a4d0}',
+        '\u{a4fd}'), ('\u{a500}', '\u{a60c}'), ('\u{a610}', '\u{a62b}'), ('\u{a640}', '\u{a66f}'),
+        ('\u{a674}', '\u{a67d}'), ('\u{a67f}', '\u{a6f1}'), ('\u{a717}', '\u{a71f}'), ('\u{a722}',
+        '\u{a788}'), ('\u{a78b}', '\u{a7ad}'), ('\u{a7b0}', '\u{a7b7}'), ('\u{a7f7}', '\u{a827}'),
         ('\u{a840}', '\u{a873}'), ('\u{a880}', '\u{a8c4}'), ('\u{a8d0}', '\u{a8d9}'), ('\u{a8e0}',
-        '\u{a8f7}'), ('\u{a8fb}', '\u{a8fb}'), ('\u{a900}', '\u{a92d}'), ('\u{a930}', '\u{a953}'),
-        ('\u{a960}', '\u{a97c}'), ('\u{a980}', '\u{a9c0}'), ('\u{a9cf}', '\u{a9d9}'), ('\u{a9e0}',
-        '\u{a9fe}'), ('\u{aa00}', '\u{aa36}'), ('\u{aa40}', '\u{aa4d}'), ('\u{aa50}', '\u{aa59}'),
-        ('\u{aa60}', '\u{aa76}'), ('\u{aa7a}', '\u{aac2}'), ('\u{aadb}', '\u{aadd}'), ('\u{aae0}',
-        '\u{aaef}'), ('\u{aaf2}', '\u{aaf6}'), ('\u{ab01}', '\u{ab06}'), ('\u{ab09}', '\u{ab0e}'),
-        ('\u{ab11}', '\u{ab16}'), ('\u{ab20}', '\u{ab26}'), ('\u{ab28}', '\u{ab2e}'), ('\u{ab30}',
-        '\u{ab5a}'), ('\u{ab5c}', '\u{ab5f}'), ('\u{ab64}', '\u{ab65}'), ('\u{abc0}', '\u{abea}'),
+        '\u{a8f7}'), ('\u{a8fb}', '\u{a8fb}'), ('\u{a8fd}', '\u{a8fd}'), ('\u{a900}', '\u{a92d}'),
+        ('\u{a930}', '\u{a953}'), ('\u{a960}', '\u{a97c}'), ('\u{a980}', '\u{a9c0}'), ('\u{a9cf}',
+        '\u{a9d9}'), ('\u{a9e0}', '\u{a9fe}'), ('\u{aa00}', '\u{aa36}'), ('\u{aa40}', '\u{aa4d}'),
+        ('\u{aa50}', '\u{aa59}'), ('\u{aa60}', '\u{aa76}'), ('\u{aa7a}', '\u{aac2}'), ('\u{aadb}',
+        '\u{aadd}'), ('\u{aae0}', '\u{aaef}'), ('\u{aaf2}', '\u{aaf6}'), ('\u{ab01}', '\u{ab06}'),
+        ('\u{ab09}', '\u{ab0e}'), ('\u{ab11}', '\u{ab16}'), ('\u{ab20}', '\u{ab26}'), ('\u{ab28}',
+        '\u{ab2e}'), ('\u{ab30}', '\u{ab5a}'), ('\u{ab5c}', '\u{ab65}'), ('\u{ab70}', '\u{abea}'),
         ('\u{abec}', '\u{abed}'), ('\u{abf0}', '\u{abf9}'), ('\u{ac00}', '\u{d7a3}'), ('\u{d7b0}',
         '\u{d7c6}'), ('\u{d7cb}', '\u{d7fb}'), ('\u{f900}', '\u{fa6d}'), ('\u{fa70}', '\u{fad9}'),
         ('\u{fb00}', '\u{fb06}'), ('\u{fb13}', '\u{fb17}'), ('\u{fb1d}', '\u{fb28}'), ('\u{fb2a}',
         '\u{fb36}'), ('\u{fb38}', '\u{fb3c}'), ('\u{fb3e}', '\u{fb3e}'), ('\u{fb40}', '\u{fb41}'),
         ('\u{fb43}', '\u{fb44}'), ('\u{fb46}', '\u{fbb1}'), ('\u{fbd3}', '\u{fc5d}'), ('\u{fc64}',
         '\u{fd3d}'), ('\u{fd50}', '\u{fd8f}'), ('\u{fd92}', '\u{fdc7}'), ('\u{fdf0}', '\u{fdf9}'),
-        ('\u{fe00}', '\u{fe0f}'), ('\u{fe20}', '\u{fe2d}'), ('\u{fe33}', '\u{fe34}'), ('\u{fe4d}',
+        ('\u{fe00}', '\u{fe0f}'), ('\u{fe20}', '\u{fe2f}'), ('\u{fe33}', '\u{fe34}'), ('\u{fe4d}',
         '\u{fe4f}'), ('\u{fe71}', '\u{fe71}'), ('\u{fe73}', '\u{fe73}'), ('\u{fe77}', '\u{fe77}'),
         ('\u{fe79}', '\u{fe79}'), ('\u{fe7b}', '\u{fe7b}'), ('\u{fe7d}', '\u{fe7d}'), ('\u{fe7f}',
         '\u{fefc}'), ('\u{ff10}', '\u{ff19}'), ('\u{ff21}', '\u{ff3a}'), ('\u{ff3f}', '\u{ff3f}'),
@@ -916,28 +929,34 @@ pub mod derived_property {
         ('\u{10760}', '\u{10767}'), ('\u{10800}', '\u{10805}'), ('\u{10808}', '\u{10808}'),
         ('\u{1080a}', '\u{10835}'), ('\u{10837}', '\u{10838}'), ('\u{1083c}', '\u{1083c}'),
         ('\u{1083f}', '\u{10855}'), ('\u{10860}', '\u{10876}'), ('\u{10880}', '\u{1089e}'),
-        ('\u{10900}', '\u{10915}'), ('\u{10920}', '\u{10939}'), ('\u{10980}', '\u{109b7}'),
-        ('\u{109be}', '\u{109bf}'), ('\u{10a00}', '\u{10a03}'), ('\u{10a05}', '\u{10a06}'),
-        ('\u{10a0c}', '\u{10a13}'), ('\u{10a15}', '\u{10a17}'), ('\u{10a19}', '\u{10a33}'),
-        ('\u{10a38}', '\u{10a3a}'), ('\u{10a3f}', '\u{10a3f}'), ('\u{10a60}', '\u{10a7c}'),
-        ('\u{10a80}', '\u{10a9c}'), ('\u{10ac0}', '\u{10ac7}'), ('\u{10ac9}', '\u{10ae6}'),
-        ('\u{10b00}', '\u{10b35}'), ('\u{10b40}', '\u{10b55}'), ('\u{10b60}', '\u{10b72}'),
-        ('\u{10b80}', '\u{10b91}'), ('\u{10c00}', '\u{10c48}'), ('\u{11000}', '\u{11046}'),
-        ('\u{11066}', '\u{1106f}'), ('\u{1107f}', '\u{110ba}'), ('\u{110d0}', '\u{110e8}'),
-        ('\u{110f0}', '\u{110f9}'), ('\u{11100}', '\u{11134}'), ('\u{11136}', '\u{1113f}'),
-        ('\u{11150}', '\u{11173}'), ('\u{11176}', '\u{11176}'), ('\u{11180}', '\u{111c4}'),
-        ('\u{111d0}', '\u{111da}'), ('\u{11200}', '\u{11211}'), ('\u{11213}', '\u{11237}'),
-        ('\u{112b0}', '\u{112ea}'), ('\u{112f0}', '\u{112f9}'), ('\u{11301}', '\u{11303}'),
-        ('\u{11305}', '\u{1130c}'), ('\u{1130f}', '\u{11310}'), ('\u{11313}', '\u{11328}'),
-        ('\u{1132a}', '\u{11330}'), ('\u{11332}', '\u{11333}'), ('\u{11335}', '\u{11339}'),
-        ('\u{1133c}', '\u{11344}'), ('\u{11347}', '\u{11348}'), ('\u{1134b}', '\u{1134d}'),
+        ('\u{108e0}', '\u{108f2}'), ('\u{108f4}', '\u{108f5}'), ('\u{10900}', '\u{10915}'),
+        ('\u{10920}', '\u{10939}'), ('\u{10980}', '\u{109b7}'), ('\u{109be}', '\u{109bf}'),
+        ('\u{10a00}', '\u{10a03}'), ('\u{10a05}', '\u{10a06}'), ('\u{10a0c}', '\u{10a13}'),
+        ('\u{10a15}', '\u{10a17}'), ('\u{10a19}', '\u{10a33}'), ('\u{10a38}', '\u{10a3a}'),
+        ('\u{10a3f}', '\u{10a3f}'), ('\u{10a60}', '\u{10a7c}'), ('\u{10a80}', '\u{10a9c}'),
+        ('\u{10ac0}', '\u{10ac7}'), ('\u{10ac9}', '\u{10ae6}'), ('\u{10b00}', '\u{10b35}'),
+        ('\u{10b40}', '\u{10b55}'), ('\u{10b60}', '\u{10b72}'), ('\u{10b80}', '\u{10b91}'),
+        ('\u{10c00}', '\u{10c48}'), ('\u{10c80}', '\u{10cb2}'), ('\u{10cc0}', '\u{10cf2}'),
+        ('\u{11000}', '\u{11046}'), ('\u{11066}', '\u{1106f}'), ('\u{1107f}', '\u{110ba}'),
+        ('\u{110d0}', '\u{110e8}'), ('\u{110f0}', '\u{110f9}'), ('\u{11100}', '\u{11134}'),
+        ('\u{11136}', '\u{1113f}'), ('\u{11150}', '\u{11173}'), ('\u{11176}', '\u{11176}'),
+        ('\u{11180}', '\u{111c4}'), ('\u{111ca}', '\u{111cc}'), ('\u{111d0}', '\u{111da}'),
+        ('\u{111dc}', '\u{111dc}'), ('\u{11200}', '\u{11211}'), ('\u{11213}', '\u{11237}'),
+        ('\u{11280}', '\u{11286}'), ('\u{11288}', '\u{11288}'), ('\u{1128a}', '\u{1128d}'),
+        ('\u{1128f}', '\u{1129d}'), ('\u{1129f}', '\u{112a8}'), ('\u{112b0}', '\u{112ea}'),
+        ('\u{112f0}', '\u{112f9}'), ('\u{11300}', '\u{11303}'), ('\u{11305}', '\u{1130c}'),
+        ('\u{1130f}', '\u{11310}'), ('\u{11313}', '\u{11328}'), ('\u{1132a}', '\u{11330}'),
+        ('\u{11332}', '\u{11333}'), ('\u{11335}', '\u{11339}'), ('\u{1133c}', '\u{11344}'),
+        ('\u{11347}', '\u{11348}'), ('\u{1134b}', '\u{1134d}'), ('\u{11350}', '\u{11350}'),
         ('\u{11357}', '\u{11357}'), ('\u{1135d}', '\u{11363}'), ('\u{11366}', '\u{1136c}'),
         ('\u{11370}', '\u{11374}'), ('\u{11480}', '\u{114c5}'), ('\u{114c7}', '\u{114c7}'),
         ('\u{114d0}', '\u{114d9}'), ('\u{11580}', '\u{115b5}'), ('\u{115b8}', '\u{115c0}'),
-        ('\u{11600}', '\u{11640}'), ('\u{11644}', '\u{11644}'), ('\u{11650}', '\u{11659}'),
-        ('\u{11680}', '\u{116b7}'), ('\u{116c0}', '\u{116c9}'), ('\u{118a0}', '\u{118e9}'),
-        ('\u{118ff}', '\u{118ff}'), ('\u{11ac0}', '\u{11af8}'), ('\u{12000}', '\u{12398}'),
-        ('\u{12400}', '\u{1246e}'), ('\u{13000}', '\u{1342e}'), ('\u{16800}', '\u{16a38}'),
+        ('\u{115d8}', '\u{115dd}'), ('\u{11600}', '\u{11640}'), ('\u{11644}', '\u{11644}'),
+        ('\u{11650}', '\u{11659}'), ('\u{11680}', '\u{116b7}'), ('\u{116c0}', '\u{116c9}'),
+        ('\u{11700}', '\u{11719}'), ('\u{1171d}', '\u{1172b}'), ('\u{11730}', '\u{11739}'),
+        ('\u{118a0}', '\u{118e9}'), ('\u{118ff}', '\u{118ff}'), ('\u{11ac0}', '\u{11af8}'),
+        ('\u{12000}', '\u{12399}'), ('\u{12400}', '\u{1246e}'), ('\u{12480}', '\u{12543}'),
+        ('\u{13000}', '\u{1342e}'), ('\u{14400}', '\u{14646}'), ('\u{16800}', '\u{16a38}'),
         ('\u{16a40}', '\u{16a5e}'), ('\u{16a60}', '\u{16a69}'), ('\u{16ad0}', '\u{16aed}'),
         ('\u{16af0}', '\u{16af4}'), ('\u{16b00}', '\u{16b36}'), ('\u{16b40}', '\u{16b43}'),
         ('\u{16b50}', '\u{16b59}'), ('\u{16b63}', '\u{16b77}'), ('\u{16b7d}', '\u{16b8f}'),
@@ -956,7 +975,9 @@ pub mod derived_property {
         ('\u{1d6dc}', '\u{1d6fa}'), ('\u{1d6fc}', '\u{1d714}'), ('\u{1d716}', '\u{1d734}'),
         ('\u{1d736}', '\u{1d74e}'), ('\u{1d750}', '\u{1d76e}'), ('\u{1d770}', '\u{1d788}'),
         ('\u{1d78a}', '\u{1d7a8}'), ('\u{1d7aa}', '\u{1d7c2}'), ('\u{1d7c4}', '\u{1d7cb}'),
-        ('\u{1d7ce}', '\u{1d7ff}'), ('\u{1e800}', '\u{1e8c4}'), ('\u{1e8d0}', '\u{1e8d6}'),
+        ('\u{1d7ce}', '\u{1d7ff}'), ('\u{1da00}', '\u{1da36}'), ('\u{1da3b}', '\u{1da6c}'),
+        ('\u{1da75}', '\u{1da75}'), ('\u{1da84}', '\u{1da84}'), ('\u{1da9b}', '\u{1da9f}'),
+        ('\u{1daa1}', '\u{1daaf}'), ('\u{1e800}', '\u{1e8c4}'), ('\u{1e8d0}', '\u{1e8d6}'),
         ('\u{1ee00}', '\u{1ee03}'), ('\u{1ee05}', '\u{1ee1f}'), ('\u{1ee21}', '\u{1ee22}'),
         ('\u{1ee24}', '\u{1ee24}'), ('\u{1ee27}', '\u{1ee27}'), ('\u{1ee29}', '\u{1ee32}'),
         ('\u{1ee34}', '\u{1ee37}'), ('\u{1ee39}', '\u{1ee39}'), ('\u{1ee3b}', '\u{1ee3b}'),
@@ -969,7 +990,7 @@ pub mod derived_property {
         ('\u{1ee7e}', '\u{1ee7e}'), ('\u{1ee80}', '\u{1ee89}'), ('\u{1ee8b}', '\u{1ee9b}'),
         ('\u{1eea1}', '\u{1eea3}'), ('\u{1eea5}', '\u{1eea9}'), ('\u{1eeab}', '\u{1eebb}'),
         ('\u{20000}', '\u{2a6d6}'), ('\u{2a700}', '\u{2b734}'), ('\u{2b740}', '\u{2b81d}'),
-        ('\u{2f800}', '\u{2fa1d}'), ('\u{e0100}', '\u{e01ef}')
+        ('\u{2b820}', '\u{2cea1}'), ('\u{2f800}', '\u{2fa1d}'), ('\u{e0100}', '\u{e01ef}')
     ];
 
     pub fn XID_Continue(c: char) -> bool {
@@ -990,7 +1011,7 @@ pub mod derived_property {
         ('\u{710}', '\u{710}'), ('\u{712}', '\u{72f}'), ('\u{74d}', '\u{7a5}'), ('\u{7b1}',
         '\u{7b1}'), ('\u{7ca}', '\u{7ea}'), ('\u{7f4}', '\u{7f5}'), ('\u{7fa}', '\u{7fa}'),
         ('\u{800}', '\u{815}'), ('\u{81a}', '\u{81a}'), ('\u{824}', '\u{824}'), ('\u{828}',
-        '\u{828}'), ('\u{840}', '\u{858}'), ('\u{8a0}', '\u{8b2}'), ('\u{904}', '\u{939}'),
+        '\u{828}'), ('\u{840}', '\u{858}'), ('\u{8a0}', '\u{8b4}'), ('\u{904}', '\u{939}'),
         ('\u{93d}', '\u{93d}'), ('\u{950}', '\u{950}'), ('\u{958}', '\u{961}'), ('\u{971}',
         '\u{980}'), ('\u{985}', '\u{98c}'), ('\u{98f}', '\u{990}'), ('\u{993}', '\u{9a8}'),
         ('\u{9aa}', '\u{9b0}'), ('\u{9b2}', '\u{9b2}'), ('\u{9b6}', '\u{9b9}'), ('\u{9bd}',
@@ -1000,147 +1021,152 @@ pub mod derived_property {
         ('\u{a38}', '\u{a39}'), ('\u{a59}', '\u{a5c}'), ('\u{a5e}', '\u{a5e}'), ('\u{a72}',
         '\u{a74}'), ('\u{a85}', '\u{a8d}'), ('\u{a8f}', '\u{a91}'), ('\u{a93}', '\u{aa8}'),
         ('\u{aaa}', '\u{ab0}'), ('\u{ab2}', '\u{ab3}'), ('\u{ab5}', '\u{ab9}'), ('\u{abd}',
-        '\u{abd}'), ('\u{ad0}', '\u{ad0}'), ('\u{ae0}', '\u{ae1}'), ('\u{b05}', '\u{b0c}'),
-        ('\u{b0f}', '\u{b10}'), ('\u{b13}', '\u{b28}'), ('\u{b2a}', '\u{b30}'), ('\u{b32}',
-        '\u{b33}'), ('\u{b35}', '\u{b39}'), ('\u{b3d}', '\u{b3d}'), ('\u{b5c}', '\u{b5d}'),
-        ('\u{b5f}', '\u{b61}'), ('\u{b71}', '\u{b71}'), ('\u{b83}', '\u{b83}'), ('\u{b85}',
-        '\u{b8a}'), ('\u{b8e}', '\u{b90}'), ('\u{b92}', '\u{b95}'), ('\u{b99}', '\u{b9a}'),
-        ('\u{b9c}', '\u{b9c}'), ('\u{b9e}', '\u{b9f}'), ('\u{ba3}', '\u{ba4}'), ('\u{ba8}',
-        '\u{baa}'), ('\u{bae}', '\u{bb9}'), ('\u{bd0}', '\u{bd0}'), ('\u{c05}', '\u{c0c}'),
-        ('\u{c0e}', '\u{c10}'), ('\u{c12}', '\u{c28}'), ('\u{c2a}', '\u{c39}'), ('\u{c3d}',
-        '\u{c3d}'), ('\u{c58}', '\u{c59}'), ('\u{c60}', '\u{c61}'), ('\u{c85}', '\u{c8c}'),
-        ('\u{c8e}', '\u{c90}'), ('\u{c92}', '\u{ca8}'), ('\u{caa}', '\u{cb3}'), ('\u{cb5}',
-        '\u{cb9}'), ('\u{cbd}', '\u{cbd}'), ('\u{cde}', '\u{cde}'), ('\u{ce0}', '\u{ce1}'),
-        ('\u{cf1}', '\u{cf2}'), ('\u{d05}', '\u{d0c}'), ('\u{d0e}', '\u{d10}'), ('\u{d12}',
-        '\u{d3a}'), ('\u{d3d}', '\u{d3d}'), ('\u{d4e}', '\u{d4e}'), ('\u{d60}', '\u{d61}'),
-        ('\u{d7a}', '\u{d7f}'), ('\u{d85}', '\u{d96}'), ('\u{d9a}', '\u{db1}'), ('\u{db3}',
-        '\u{dbb}'), ('\u{dbd}', '\u{dbd}'), ('\u{dc0}', '\u{dc6}'), ('\u{e01}', '\u{e30}'),
-        ('\u{e32}', '\u{e32}'), ('\u{e40}', '\u{e46}'), ('\u{e81}', '\u{e82}'), ('\u{e84}',
-        '\u{e84}'), ('\u{e87}', '\u{e88}'), ('\u{e8a}', '\u{e8a}'), ('\u{e8d}', '\u{e8d}'),
-        ('\u{e94}', '\u{e97}'), ('\u{e99}', '\u{e9f}'), ('\u{ea1}', '\u{ea3}'), ('\u{ea5}',
-        '\u{ea5}'), ('\u{ea7}', '\u{ea7}'), ('\u{eaa}', '\u{eab}'), ('\u{ead}', '\u{eb0}'),
-        ('\u{eb2}', '\u{eb2}'), ('\u{ebd}', '\u{ebd}'), ('\u{ec0}', '\u{ec4}'), ('\u{ec6}',
-        '\u{ec6}'), ('\u{edc}', '\u{edf}'), ('\u{f00}', '\u{f00}'), ('\u{f40}', '\u{f47}'),
-        ('\u{f49}', '\u{f6c}'), ('\u{f88}', '\u{f8c}'), ('\u{1000}', '\u{102a}'), ('\u{103f}',
-        '\u{103f}'), ('\u{1050}', '\u{1055}'), ('\u{105a}', '\u{105d}'), ('\u{1061}', '\u{1061}'),
-        ('\u{1065}', '\u{1066}'), ('\u{106e}', '\u{1070}'), ('\u{1075}', '\u{1081}'), ('\u{108e}',
-        '\u{108e}'), ('\u{10a0}', '\u{10c5}'), ('\u{10c7}', '\u{10c7}'), ('\u{10cd}', '\u{10cd}'),
-        ('\u{10d0}', '\u{10fa}'), ('\u{10fc}', '\u{1248}'), ('\u{124a}', '\u{124d}'), ('\u{1250}',
-        '\u{1256}'), ('\u{1258}', '\u{1258}'), ('\u{125a}', '\u{125d}'), ('\u{1260}', '\u{1288}'),
-        ('\u{128a}', '\u{128d}'), ('\u{1290}', '\u{12b0}'), ('\u{12b2}', '\u{12b5}'), ('\u{12b8}',
-        '\u{12be}'), ('\u{12c0}', '\u{12c0}'), ('\u{12c2}', '\u{12c5}'), ('\u{12c8}', '\u{12d6}'),
-        ('\u{12d8}', '\u{1310}'), ('\u{1312}', '\u{1315}'), ('\u{1318}', '\u{135a}'), ('\u{1380}',
-        '\u{138f}'), ('\u{13a0}', '\u{13f4}'), ('\u{1401}', '\u{166c}'), ('\u{166f}', '\u{167f}'),
-        ('\u{1681}', '\u{169a}'), ('\u{16a0}', '\u{16ea}'), ('\u{16ee}', '\u{16f8}'), ('\u{1700}',
-        '\u{170c}'), ('\u{170e}', '\u{1711}'), ('\u{1720}', '\u{1731}'), ('\u{1740}', '\u{1751}'),
-        ('\u{1760}', '\u{176c}'), ('\u{176e}', '\u{1770}'), ('\u{1780}', '\u{17b3}'), ('\u{17d7}',
-        '\u{17d7}'), ('\u{17dc}', '\u{17dc}'), ('\u{1820}', '\u{1877}'), ('\u{1880}', '\u{18a8}'),
-        ('\u{18aa}', '\u{18aa}'), ('\u{18b0}', '\u{18f5}'), ('\u{1900}', '\u{191e}'), ('\u{1950}',
-        '\u{196d}'), ('\u{1970}', '\u{1974}'), ('\u{1980}', '\u{19ab}'), ('\u{19c1}', '\u{19c7}'),
-        ('\u{1a00}', '\u{1a16}'), ('\u{1a20}', '\u{1a54}'), ('\u{1aa7}', '\u{1aa7}'), ('\u{1b05}',
-        '\u{1b33}'), ('\u{1b45}', '\u{1b4b}'), ('\u{1b83}', '\u{1ba0}'), ('\u{1bae}', '\u{1baf}'),
-        ('\u{1bba}', '\u{1be5}'), ('\u{1c00}', '\u{1c23}'), ('\u{1c4d}', '\u{1c4f}'), ('\u{1c5a}',
-        '\u{1c7d}'), ('\u{1ce9}', '\u{1cec}'), ('\u{1cee}', '\u{1cf1}'), ('\u{1cf5}', '\u{1cf6}'),
-        ('\u{1d00}', '\u{1dbf}'), ('\u{1e00}', '\u{1f15}'), ('\u{1f18}', '\u{1f1d}'), ('\u{1f20}',
-        '\u{1f45}'), ('\u{1f48}', '\u{1f4d}'), ('\u{1f50}', '\u{1f57}'), ('\u{1f59}', '\u{1f59}'),
-        ('\u{1f5b}', '\u{1f5b}'), ('\u{1f5d}', '\u{1f5d}'), ('\u{1f5f}', '\u{1f7d}'), ('\u{1f80}',
-        '\u{1fb4}'), ('\u{1fb6}', '\u{1fbc}'), ('\u{1fbe}', '\u{1fbe}'), ('\u{1fc2}', '\u{1fc4}'),
-        ('\u{1fc6}', '\u{1fcc}'), ('\u{1fd0}', '\u{1fd3}'), ('\u{1fd6}', '\u{1fdb}'), ('\u{1fe0}',
-        '\u{1fec}'), ('\u{1ff2}', '\u{1ff4}'), ('\u{1ff6}', '\u{1ffc}'), ('\u{2071}', '\u{2071}'),
-        ('\u{207f}', '\u{207f}'), ('\u{2090}', '\u{209c}'), ('\u{2102}', '\u{2102}'), ('\u{2107}',
-        '\u{2107}'), ('\u{210a}', '\u{2113}'), ('\u{2115}', '\u{2115}'), ('\u{2118}', '\u{211d}'),
-        ('\u{2124}', '\u{2124}'), ('\u{2126}', '\u{2126}'), ('\u{2128}', '\u{2128}'), ('\u{212a}',
-        '\u{2139}'), ('\u{213c}', '\u{213f}'), ('\u{2145}', '\u{2149}'), ('\u{214e}', '\u{214e}'),
-        ('\u{2160}', '\u{2188}'), ('\u{2c00}', '\u{2c2e}'), ('\u{2c30}', '\u{2c5e}'), ('\u{2c60}',
-        '\u{2ce4}'), ('\u{2ceb}', '\u{2cee}'), ('\u{2cf2}', '\u{2cf3}'), ('\u{2d00}', '\u{2d25}'),
-        ('\u{2d27}', '\u{2d27}'), ('\u{2d2d}', '\u{2d2d}'), ('\u{2d30}', '\u{2d67}'), ('\u{2d6f}',
-        '\u{2d6f}'), ('\u{2d80}', '\u{2d96}'), ('\u{2da0}', '\u{2da6}'), ('\u{2da8}', '\u{2dae}'),
-        ('\u{2db0}', '\u{2db6}'), ('\u{2db8}', '\u{2dbe}'), ('\u{2dc0}', '\u{2dc6}'), ('\u{2dc8}',
-        '\u{2dce}'), ('\u{2dd0}', '\u{2dd6}'), ('\u{2dd8}', '\u{2dde}'), ('\u{3005}', '\u{3007}'),
-        ('\u{3021}', '\u{3029}'), ('\u{3031}', '\u{3035}'), ('\u{3038}', '\u{303c}'), ('\u{3041}',
-        '\u{3096}'), ('\u{309d}', '\u{309f}'), ('\u{30a1}', '\u{30fa}'), ('\u{30fc}', '\u{30ff}'),
-        ('\u{3105}', '\u{312d}'), ('\u{3131}', '\u{318e}'), ('\u{31a0}', '\u{31ba}'), ('\u{31f0}',
-        '\u{31ff}'), ('\u{3400}', '\u{4db5}'), ('\u{4e00}', '\u{9fcc}'), ('\u{a000}', '\u{a48c}'),
-        ('\u{a4d0}', '\u{a4fd}'), ('\u{a500}', '\u{a60c}'), ('\u{a610}', '\u{a61f}'), ('\u{a62a}',
-        '\u{a62b}'), ('\u{a640}', '\u{a66e}'), ('\u{a67f}', '\u{a69d}'), ('\u{a6a0}', '\u{a6ef}'),
-        ('\u{a717}', '\u{a71f}'), ('\u{a722}', '\u{a788}'), ('\u{a78b}', '\u{a78e}'), ('\u{a790}',
-        '\u{a7ad}'), ('\u{a7b0}', '\u{a7b1}'), ('\u{a7f7}', '\u{a801}'), ('\u{a803}', '\u{a805}'),
-        ('\u{a807}', '\u{a80a}'), ('\u{a80c}', '\u{a822}'), ('\u{a840}', '\u{a873}'), ('\u{a882}',
-        '\u{a8b3}'), ('\u{a8f2}', '\u{a8f7}'), ('\u{a8fb}', '\u{a8fb}'), ('\u{a90a}', '\u{a925}'),
-        ('\u{a930}', '\u{a946}'), ('\u{a960}', '\u{a97c}'), ('\u{a984}', '\u{a9b2}'), ('\u{a9cf}',
-        '\u{a9cf}'), ('\u{a9e0}', '\u{a9e4}'), ('\u{a9e6}', '\u{a9ef}'), ('\u{a9fa}', '\u{a9fe}'),
-        ('\u{aa00}', '\u{aa28}'), ('\u{aa40}', '\u{aa42}'), ('\u{aa44}', '\u{aa4b}'), ('\u{aa60}',
-        '\u{aa76}'), ('\u{aa7a}', '\u{aa7a}'), ('\u{aa7e}', '\u{aaaf}'), ('\u{aab1}', '\u{aab1}'),
-        ('\u{aab5}', '\u{aab6}'), ('\u{aab9}', '\u{aabd}'), ('\u{aac0}', '\u{aac0}'), ('\u{aac2}',
-        '\u{aac2}'), ('\u{aadb}', '\u{aadd}'), ('\u{aae0}', '\u{aaea}'), ('\u{aaf2}', '\u{aaf4}'),
-        ('\u{ab01}', '\u{ab06}'), ('\u{ab09}', '\u{ab0e}'), ('\u{ab11}', '\u{ab16}'), ('\u{ab20}',
-        '\u{ab26}'), ('\u{ab28}', '\u{ab2e}'), ('\u{ab30}', '\u{ab5a}'), ('\u{ab5c}', '\u{ab5f}'),
-        ('\u{ab64}', '\u{ab65}'), ('\u{abc0}', '\u{abe2}'), ('\u{ac00}', '\u{d7a3}'), ('\u{d7b0}',
-        '\u{d7c6}'), ('\u{d7cb}', '\u{d7fb}'), ('\u{f900}', '\u{fa6d}'), ('\u{fa70}', '\u{fad9}'),
-        ('\u{fb00}', '\u{fb06}'), ('\u{fb13}', '\u{fb17}'), ('\u{fb1d}', '\u{fb1d}'), ('\u{fb1f}',
-        '\u{fb28}'), ('\u{fb2a}', '\u{fb36}'), ('\u{fb38}', '\u{fb3c}'), ('\u{fb3e}', '\u{fb3e}'),
-        ('\u{fb40}', '\u{fb41}'), ('\u{fb43}', '\u{fb44}'), ('\u{fb46}', '\u{fbb1}'), ('\u{fbd3}',
-        '\u{fc5d}'), ('\u{fc64}', '\u{fd3d}'), ('\u{fd50}', '\u{fd8f}'), ('\u{fd92}', '\u{fdc7}'),
-        ('\u{fdf0}', '\u{fdf9}'), ('\u{fe71}', '\u{fe71}'), ('\u{fe73}', '\u{fe73}'), ('\u{fe77}',
-        '\u{fe77}'), ('\u{fe79}', '\u{fe79}'), ('\u{fe7b}', '\u{fe7b}'), ('\u{fe7d}', '\u{fe7d}'),
-        ('\u{fe7f}', '\u{fefc}'), ('\u{ff21}', '\u{ff3a}'), ('\u{ff41}', '\u{ff5a}'), ('\u{ff66}',
-        '\u{ff9d}'), ('\u{ffa0}', '\u{ffbe}'), ('\u{ffc2}', '\u{ffc7}'), ('\u{ffca}', '\u{ffcf}'),
-        ('\u{ffd2}', '\u{ffd7}'), ('\u{ffda}', '\u{ffdc}'), ('\u{10000}', '\u{1000b}'),
-        ('\u{1000d}', '\u{10026}'), ('\u{10028}', '\u{1003a}'), ('\u{1003c}', '\u{1003d}'),
-        ('\u{1003f}', '\u{1004d}'), ('\u{10050}', '\u{1005d}'), ('\u{10080}', '\u{100fa}'),
-        ('\u{10140}', '\u{10174}'), ('\u{10280}', '\u{1029c}'), ('\u{102a0}', '\u{102d0}'),
-        ('\u{10300}', '\u{1031f}'), ('\u{10330}', '\u{1034a}'), ('\u{10350}', '\u{10375}'),
-        ('\u{10380}', '\u{1039d}'), ('\u{103a0}', '\u{103c3}'), ('\u{103c8}', '\u{103cf}'),
-        ('\u{103d1}', '\u{103d5}'), ('\u{10400}', '\u{1049d}'), ('\u{10500}', '\u{10527}'),
-        ('\u{10530}', '\u{10563}'), ('\u{10600}', '\u{10736}'), ('\u{10740}', '\u{10755}'),
-        ('\u{10760}', '\u{10767}'), ('\u{10800}', '\u{10805}'), ('\u{10808}', '\u{10808}'),
-        ('\u{1080a}', '\u{10835}'), ('\u{10837}', '\u{10838}'), ('\u{1083c}', '\u{1083c}'),
-        ('\u{1083f}', '\u{10855}'), ('\u{10860}', '\u{10876}'), ('\u{10880}', '\u{1089e}'),
-        ('\u{10900}', '\u{10915}'), ('\u{10920}', '\u{10939}'), ('\u{10980}', '\u{109b7}'),
-        ('\u{109be}', '\u{109bf}'), ('\u{10a00}', '\u{10a00}'), ('\u{10a10}', '\u{10a13}'),
-        ('\u{10a15}', '\u{10a17}'), ('\u{10a19}', '\u{10a33}'), ('\u{10a60}', '\u{10a7c}'),
-        ('\u{10a80}', '\u{10a9c}'), ('\u{10ac0}', '\u{10ac7}'), ('\u{10ac9}', '\u{10ae4}'),
-        ('\u{10b00}', '\u{10b35}'), ('\u{10b40}', '\u{10b55}'), ('\u{10b60}', '\u{10b72}'),
-        ('\u{10b80}', '\u{10b91}'), ('\u{10c00}', '\u{10c48}'), ('\u{11003}', '\u{11037}'),
-        ('\u{11083}', '\u{110af}'), ('\u{110d0}', '\u{110e8}'), ('\u{11103}', '\u{11126}'),
-        ('\u{11150}', '\u{11172}'), ('\u{11176}', '\u{11176}'), ('\u{11183}', '\u{111b2}'),
-        ('\u{111c1}', '\u{111c4}'), ('\u{111da}', '\u{111da}'), ('\u{11200}', '\u{11211}'),
-        ('\u{11213}', '\u{1122b}'), ('\u{112b0}', '\u{112de}'), ('\u{11305}', '\u{1130c}'),
-        ('\u{1130f}', '\u{11310}'), ('\u{11313}', '\u{11328}'), ('\u{1132a}', '\u{11330}'),
-        ('\u{11332}', '\u{11333}'), ('\u{11335}', '\u{11339}'), ('\u{1133d}', '\u{1133d}'),
-        ('\u{1135d}', '\u{11361}'), ('\u{11480}', '\u{114af}'), ('\u{114c4}', '\u{114c5}'),
-        ('\u{114c7}', '\u{114c7}'), ('\u{11580}', '\u{115ae}'), ('\u{11600}', '\u{1162f}'),
-        ('\u{11644}', '\u{11644}'), ('\u{11680}', '\u{116aa}'), ('\u{118a0}', '\u{118df}'),
-        ('\u{118ff}', '\u{118ff}'), ('\u{11ac0}', '\u{11af8}'), ('\u{12000}', '\u{12398}'),
-        ('\u{12400}', '\u{1246e}'), ('\u{13000}', '\u{1342e}'), ('\u{16800}', '\u{16a38}'),
-        ('\u{16a40}', '\u{16a5e}'), ('\u{16ad0}', '\u{16aed}'), ('\u{16b00}', '\u{16b2f}'),
-        ('\u{16b40}', '\u{16b43}'), ('\u{16b63}', '\u{16b77}'), ('\u{16b7d}', '\u{16b8f}'),
-        ('\u{16f00}', '\u{16f44}'), ('\u{16f50}', '\u{16f50}'), ('\u{16f93}', '\u{16f9f}'),
-        ('\u{1b000}', '\u{1b001}'), ('\u{1bc00}', '\u{1bc6a}'), ('\u{1bc70}', '\u{1bc7c}'),
-        ('\u{1bc80}', '\u{1bc88}'), ('\u{1bc90}', '\u{1bc99}'), ('\u{1d400}', '\u{1d454}'),
-        ('\u{1d456}', '\u{1d49c}'), ('\u{1d49e}', '\u{1d49f}'), ('\u{1d4a2}', '\u{1d4a2}'),
-        ('\u{1d4a5}', '\u{1d4a6}'), ('\u{1d4a9}', '\u{1d4ac}'), ('\u{1d4ae}', '\u{1d4b9}'),
-        ('\u{1d4bb}', '\u{1d4bb}'), ('\u{1d4bd}', '\u{1d4c3}'), ('\u{1d4c5}', '\u{1d505}'),
-        ('\u{1d507}', '\u{1d50a}'), ('\u{1d50d}', '\u{1d514}'), ('\u{1d516}', '\u{1d51c}'),
-        ('\u{1d51e}', '\u{1d539}'), ('\u{1d53b}', '\u{1d53e}'), ('\u{1d540}', '\u{1d544}'),
-        ('\u{1d546}', '\u{1d546}'), ('\u{1d54a}', '\u{1d550}'), ('\u{1d552}', '\u{1d6a5}'),
-        ('\u{1d6a8}', '\u{1d6c0}'), ('\u{1d6c2}', '\u{1d6da}'), ('\u{1d6dc}', '\u{1d6fa}'),
-        ('\u{1d6fc}', '\u{1d714}'), ('\u{1d716}', '\u{1d734}'), ('\u{1d736}', '\u{1d74e}'),
-        ('\u{1d750}', '\u{1d76e}'), ('\u{1d770}', '\u{1d788}'), ('\u{1d78a}', '\u{1d7a8}'),
-        ('\u{1d7aa}', '\u{1d7c2}'), ('\u{1d7c4}', '\u{1d7cb}'), ('\u{1e800}', '\u{1e8c4}'),
-        ('\u{1ee00}', '\u{1ee03}'), ('\u{1ee05}', '\u{1ee1f}'), ('\u{1ee21}', '\u{1ee22}'),
-        ('\u{1ee24}', '\u{1ee24}'), ('\u{1ee27}', '\u{1ee27}'), ('\u{1ee29}', '\u{1ee32}'),
-        ('\u{1ee34}', '\u{1ee37}'), ('\u{1ee39}', '\u{1ee39}'), ('\u{1ee3b}', '\u{1ee3b}'),
-        ('\u{1ee42}', '\u{1ee42}'), ('\u{1ee47}', '\u{1ee47}'), ('\u{1ee49}', '\u{1ee49}'),
-        ('\u{1ee4b}', '\u{1ee4b}'), ('\u{1ee4d}', '\u{1ee4f}'), ('\u{1ee51}', '\u{1ee52}'),
-        ('\u{1ee54}', '\u{1ee54}'), ('\u{1ee57}', '\u{1ee57}'), ('\u{1ee59}', '\u{1ee59}'),
-        ('\u{1ee5b}', '\u{1ee5b}'), ('\u{1ee5d}', '\u{1ee5d}'), ('\u{1ee5f}', '\u{1ee5f}'),
-        ('\u{1ee61}', '\u{1ee62}'), ('\u{1ee64}', '\u{1ee64}'), ('\u{1ee67}', '\u{1ee6a}'),
-        ('\u{1ee6c}', '\u{1ee72}'), ('\u{1ee74}', '\u{1ee77}'), ('\u{1ee79}', '\u{1ee7c}'),
-        ('\u{1ee7e}', '\u{1ee7e}'), ('\u{1ee80}', '\u{1ee89}'), ('\u{1ee8b}', '\u{1ee9b}'),
-        ('\u{1eea1}', '\u{1eea3}'), ('\u{1eea5}', '\u{1eea9}'), ('\u{1eeab}', '\u{1eebb}'),
-        ('\u{20000}', '\u{2a6d6}'), ('\u{2a700}', '\u{2b734}'), ('\u{2b740}', '\u{2b81d}'),
-        ('\u{2f800}', '\u{2fa1d}')
+        '\u{abd}'), ('\u{ad0}', '\u{ad0}'), ('\u{ae0}', '\u{ae1}'), ('\u{af9}', '\u{af9}'),
+        ('\u{b05}', '\u{b0c}'), ('\u{b0f}', '\u{b10}'), ('\u{b13}', '\u{b28}'), ('\u{b2a}',
+        '\u{b30}'), ('\u{b32}', '\u{b33}'), ('\u{b35}', '\u{b39}'), ('\u{b3d}', '\u{b3d}'),
+        ('\u{b5c}', '\u{b5d}'), ('\u{b5f}', '\u{b61}'), ('\u{b71}', '\u{b71}'), ('\u{b83}',
+        '\u{b83}'), ('\u{b85}', '\u{b8a}'), ('\u{b8e}', '\u{b90}'), ('\u{b92}', '\u{b95}'),
+        ('\u{b99}', '\u{b9a}'), ('\u{b9c}', '\u{b9c}'), ('\u{b9e}', '\u{b9f}'), ('\u{ba3}',
+        '\u{ba4}'), ('\u{ba8}', '\u{baa}'), ('\u{bae}', '\u{bb9}'), ('\u{bd0}', '\u{bd0}'),
+        ('\u{c05}', '\u{c0c}'), ('\u{c0e}', '\u{c10}'), ('\u{c12}', '\u{c28}'), ('\u{c2a}',
+        '\u{c39}'), ('\u{c3d}', '\u{c3d}'), ('\u{c58}', '\u{c5a}'), ('\u{c60}', '\u{c61}'),
+        ('\u{c85}', '\u{c8c}'), ('\u{c8e}', '\u{c90}'), ('\u{c92}', '\u{ca8}'), ('\u{caa}',
+        '\u{cb3}'), ('\u{cb5}', '\u{cb9}'), ('\u{cbd}', '\u{cbd}'), ('\u{cde}', '\u{cde}'),
+        ('\u{ce0}', '\u{ce1}'), ('\u{cf1}', '\u{cf2}'), ('\u{d05}', '\u{d0c}'), ('\u{d0e}',
+        '\u{d10}'), ('\u{d12}', '\u{d3a}'), ('\u{d3d}', '\u{d3d}'), ('\u{d4e}', '\u{d4e}'),
+        ('\u{d5f}', '\u{d61}'), ('\u{d7a}', '\u{d7f}'), ('\u{d85}', '\u{d96}'), ('\u{d9a}',
+        '\u{db1}'), ('\u{db3}', '\u{dbb}'), ('\u{dbd}', '\u{dbd}'), ('\u{dc0}', '\u{dc6}'),
+        ('\u{e01}', '\u{e30}'), ('\u{e32}', '\u{e32}'), ('\u{e40}', '\u{e46}'), ('\u{e81}',
+        '\u{e82}'), ('\u{e84}', '\u{e84}'), ('\u{e87}', '\u{e88}'), ('\u{e8a}', '\u{e8a}'),
+        ('\u{e8d}', '\u{e8d}'), ('\u{e94}', '\u{e97}'), ('\u{e99}', '\u{e9f}'), ('\u{ea1}',
+        '\u{ea3}'), ('\u{ea5}', '\u{ea5}'), ('\u{ea7}', '\u{ea7}'), ('\u{eaa}', '\u{eab}'),
+        ('\u{ead}', '\u{eb0}'), ('\u{eb2}', '\u{eb2}'), ('\u{ebd}', '\u{ebd}'), ('\u{ec0}',
+        '\u{ec4}'), ('\u{ec6}', '\u{ec6}'), ('\u{edc}', '\u{edf}'), ('\u{f00}', '\u{f00}'),
+        ('\u{f40}', '\u{f47}'), ('\u{f49}', '\u{f6c}'), ('\u{f88}', '\u{f8c}'), ('\u{1000}',
+        '\u{102a}'), ('\u{103f}', '\u{103f}'), ('\u{1050}', '\u{1055}'), ('\u{105a}', '\u{105d}'),
+        ('\u{1061}', '\u{1061}'), ('\u{1065}', '\u{1066}'), ('\u{106e}', '\u{1070}'), ('\u{1075}',
+        '\u{1081}'), ('\u{108e}', '\u{108e}'), ('\u{10a0}', '\u{10c5}'), ('\u{10c7}', '\u{10c7}'),
+        ('\u{10cd}', '\u{10cd}'), ('\u{10d0}', '\u{10fa}'), ('\u{10fc}', '\u{1248}'), ('\u{124a}',
+        '\u{124d}'), ('\u{1250}', '\u{1256}'), ('\u{1258}', '\u{1258}'), ('\u{125a}', '\u{125d}'),
+        ('\u{1260}', '\u{1288}'), ('\u{128a}', '\u{128d}'), ('\u{1290}', '\u{12b0}'), ('\u{12b2}',
+        '\u{12b5}'), ('\u{12b8}', '\u{12be}'), ('\u{12c0}', '\u{12c0}'), ('\u{12c2}', '\u{12c5}'),
+        ('\u{12c8}', '\u{12d6}'), ('\u{12d8}', '\u{1310}'), ('\u{1312}', '\u{1315}'), ('\u{1318}',
+        '\u{135a}'), ('\u{1380}', '\u{138f}'), ('\u{13a0}', '\u{13f5}'), ('\u{13f8}', '\u{13fd}'),
+        ('\u{1401}', '\u{166c}'), ('\u{166f}', '\u{167f}'), ('\u{1681}', '\u{169a}'), ('\u{16a0}',
+        '\u{16ea}'), ('\u{16ee}', '\u{16f8}'), ('\u{1700}', '\u{170c}'), ('\u{170e}', '\u{1711}'),
+        ('\u{1720}', '\u{1731}'), ('\u{1740}', '\u{1751}'), ('\u{1760}', '\u{176c}'), ('\u{176e}',
+        '\u{1770}'), ('\u{1780}', '\u{17b3}'), ('\u{17d7}', '\u{17d7}'), ('\u{17dc}', '\u{17dc}'),
+        ('\u{1820}', '\u{1877}'), ('\u{1880}', '\u{18a8}'), ('\u{18aa}', '\u{18aa}'), ('\u{18b0}',
+        '\u{18f5}'), ('\u{1900}', '\u{191e}'), ('\u{1950}', '\u{196d}'), ('\u{1970}', '\u{1974}'),
+        ('\u{1980}', '\u{19ab}'), ('\u{19b0}', '\u{19c9}'), ('\u{1a00}', '\u{1a16}'), ('\u{1a20}',
+        '\u{1a54}'), ('\u{1aa7}', '\u{1aa7}'), ('\u{1b05}', '\u{1b33}'), ('\u{1b45}', '\u{1b4b}'),
+        ('\u{1b83}', '\u{1ba0}'), ('\u{1bae}', '\u{1baf}'), ('\u{1bba}', '\u{1be5}'), ('\u{1c00}',
+        '\u{1c23}'), ('\u{1c4d}', '\u{1c4f}'), ('\u{1c5a}', '\u{1c7d}'), ('\u{1ce9}', '\u{1cec}'),
+        ('\u{1cee}', '\u{1cf1}'), ('\u{1cf5}', '\u{1cf6}'), ('\u{1d00}', '\u{1dbf}'), ('\u{1e00}',
+        '\u{1f15}'), ('\u{1f18}', '\u{1f1d}'), ('\u{1f20}', '\u{1f45}'), ('\u{1f48}', '\u{1f4d}'),
+        ('\u{1f50}', '\u{1f57}'), ('\u{1f59}', '\u{1f59}'), ('\u{1f5b}', '\u{1f5b}'), ('\u{1f5d}',
+        '\u{1f5d}'), ('\u{1f5f}', '\u{1f7d}'), ('\u{1f80}', '\u{1fb4}'), ('\u{1fb6}', '\u{1fbc}'),
+        ('\u{1fbe}', '\u{1fbe}'), ('\u{1fc2}', '\u{1fc4}'), ('\u{1fc6}', '\u{1fcc}'), ('\u{1fd0}',
+        '\u{1fd3}'), ('\u{1fd6}', '\u{1fdb}'), ('\u{1fe0}', '\u{1fec}'), ('\u{1ff2}', '\u{1ff4}'),
+        ('\u{1ff6}', '\u{1ffc}'), ('\u{2071}', '\u{2071}'), ('\u{207f}', '\u{207f}'), ('\u{2090}',
+        '\u{209c}'), ('\u{2102}', '\u{2102}'), ('\u{2107}', '\u{2107}'), ('\u{210a}', '\u{2113}'),
+        ('\u{2115}', '\u{2115}'), ('\u{2118}', '\u{211d}'), ('\u{2124}', '\u{2124}'), ('\u{2126}',
+        '\u{2126}'), ('\u{2128}', '\u{2128}'), ('\u{212a}', '\u{2139}'), ('\u{213c}', '\u{213f}'),
+        ('\u{2145}', '\u{2149}'), ('\u{214e}', '\u{214e}'), ('\u{2160}', '\u{2188}'), ('\u{2c00}',
+        '\u{2c2e}'), ('\u{2c30}', '\u{2c5e}'), ('\u{2c60}', '\u{2ce4}'), ('\u{2ceb}', '\u{2cee}'),
+        ('\u{2cf2}', '\u{2cf3}'), ('\u{2d00}', '\u{2d25}'), ('\u{2d27}', '\u{2d27}'), ('\u{2d2d}',
+        '\u{2d2d}'), ('\u{2d30}', '\u{2d67}'), ('\u{2d6f}', '\u{2d6f}'), ('\u{2d80}', '\u{2d96}'),
+        ('\u{2da0}', '\u{2da6}'), ('\u{2da8}', '\u{2dae}'), ('\u{2db0}', '\u{2db6}'), ('\u{2db8}',
+        '\u{2dbe}'), ('\u{2dc0}', '\u{2dc6}'), ('\u{2dc8}', '\u{2dce}'), ('\u{2dd0}', '\u{2dd6}'),
+        ('\u{2dd8}', '\u{2dde}'), ('\u{3005}', '\u{3007}'), ('\u{3021}', '\u{3029}'), ('\u{3031}',
+        '\u{3035}'), ('\u{3038}', '\u{303c}'), ('\u{3041}', '\u{3096}'), ('\u{309d}', '\u{309f}'),
+        ('\u{30a1}', '\u{30fa}'), ('\u{30fc}', '\u{30ff}'), ('\u{3105}', '\u{312d}'), ('\u{3131}',
+        '\u{318e}'), ('\u{31a0}', '\u{31ba}'), ('\u{31f0}', '\u{31ff}'), ('\u{3400}', '\u{4db5}'),
+        ('\u{4e00}', '\u{9fd5}'), ('\u{a000}', '\u{a48c}'), ('\u{a4d0}', '\u{a4fd}'), ('\u{a500}',
+        '\u{a60c}'), ('\u{a610}', '\u{a61f}'), ('\u{a62a}', '\u{a62b}'), ('\u{a640}', '\u{a66e}'),
+        ('\u{a67f}', '\u{a69d}'), ('\u{a6a0}', '\u{a6ef}'), ('\u{a717}', '\u{a71f}'), ('\u{a722}',
+        '\u{a788}'), ('\u{a78b}', '\u{a7ad}'), ('\u{a7b0}', '\u{a7b7}'), ('\u{a7f7}', '\u{a801}'),
+        ('\u{a803}', '\u{a805}'), ('\u{a807}', '\u{a80a}'), ('\u{a80c}', '\u{a822}'), ('\u{a840}',
+        '\u{a873}'), ('\u{a882}', '\u{a8b3}'), ('\u{a8f2}', '\u{a8f7}'), ('\u{a8fb}', '\u{a8fb}'),
+        ('\u{a8fd}', '\u{a8fd}'), ('\u{a90a}', '\u{a925}'), ('\u{a930}', '\u{a946}'), ('\u{a960}',
+        '\u{a97c}'), ('\u{a984}', '\u{a9b2}'), ('\u{a9cf}', '\u{a9cf}'), ('\u{a9e0}', '\u{a9e4}'),
+        ('\u{a9e6}', '\u{a9ef}'), ('\u{a9fa}', '\u{a9fe}'), ('\u{aa00}', '\u{aa28}'), ('\u{aa40}',
+        '\u{aa42}'), ('\u{aa44}', '\u{aa4b}'), ('\u{aa60}', '\u{aa76}'), ('\u{aa7a}', '\u{aa7a}'),
+        ('\u{aa7e}', '\u{aaaf}'), ('\u{aab1}', '\u{aab1}'), ('\u{aab5}', '\u{aab6}'), ('\u{aab9}',
+        '\u{aabd}'), ('\u{aac0}', '\u{aac0}'), ('\u{aac2}', '\u{aac2}'), ('\u{aadb}', '\u{aadd}'),
+        ('\u{aae0}', '\u{aaea}'), ('\u{aaf2}', '\u{aaf4}'), ('\u{ab01}', '\u{ab06}'), ('\u{ab09}',
+        '\u{ab0e}'), ('\u{ab11}', '\u{ab16}'), ('\u{ab20}', '\u{ab26}'), ('\u{ab28}', '\u{ab2e}'),
+        ('\u{ab30}', '\u{ab5a}'), ('\u{ab5c}', '\u{ab65}'), ('\u{ab70}', '\u{abe2}'), ('\u{ac00}',
+        '\u{d7a3}'), ('\u{d7b0}', '\u{d7c6}'), ('\u{d7cb}', '\u{d7fb}'), ('\u{f900}', '\u{fa6d}'),
+        ('\u{fa70}', '\u{fad9}'), ('\u{fb00}', '\u{fb06}'), ('\u{fb13}', '\u{fb17}'), ('\u{fb1d}',
+        '\u{fb1d}'), ('\u{fb1f}', '\u{fb28}'), ('\u{fb2a}', '\u{fb36}'), ('\u{fb38}', '\u{fb3c}'),
+        ('\u{fb3e}', '\u{fb3e}'), ('\u{fb40}', '\u{fb41}'), ('\u{fb43}', '\u{fb44}'), ('\u{fb46}',
+        '\u{fbb1}'), ('\u{fbd3}', '\u{fc5d}'), ('\u{fc64}', '\u{fd3d}'), ('\u{fd50}', '\u{fd8f}'),
+        ('\u{fd92}', '\u{fdc7}'), ('\u{fdf0}', '\u{fdf9}'), ('\u{fe71}', '\u{fe71}'), ('\u{fe73}',
+        '\u{fe73}'), ('\u{fe77}', '\u{fe77}'), ('\u{fe79}', '\u{fe79}'), ('\u{fe7b}', '\u{fe7b}'),
+        ('\u{fe7d}', '\u{fe7d}'), ('\u{fe7f}', '\u{fefc}'), ('\u{ff21}', '\u{ff3a}'), ('\u{ff41}',
+        '\u{ff5a}'), ('\u{ff66}', '\u{ff9d}'), ('\u{ffa0}', '\u{ffbe}'), ('\u{ffc2}', '\u{ffc7}'),
+        ('\u{ffca}', '\u{ffcf}'), ('\u{ffd2}', '\u{ffd7}'), ('\u{ffda}', '\u{ffdc}'), ('\u{10000}',
+        '\u{1000b}'), ('\u{1000d}', '\u{10026}'), ('\u{10028}', '\u{1003a}'), ('\u{1003c}',
+        '\u{1003d}'), ('\u{1003f}', '\u{1004d}'), ('\u{10050}', '\u{1005d}'), ('\u{10080}',
+        '\u{100fa}'), ('\u{10140}', '\u{10174}'), ('\u{10280}', '\u{1029c}'), ('\u{102a0}',
+        '\u{102d0}'), ('\u{10300}', '\u{1031f}'), ('\u{10330}', '\u{1034a}'), ('\u{10350}',
+        '\u{10375}'), ('\u{10380}', '\u{1039d}'), ('\u{103a0}', '\u{103c3}'), ('\u{103c8}',
+        '\u{103cf}'), ('\u{103d1}', '\u{103d5}'), ('\u{10400}', '\u{1049d}'), ('\u{10500}',
+        '\u{10527}'), ('\u{10530}', '\u{10563}'), ('\u{10600}', '\u{10736}'), ('\u{10740}',
+        '\u{10755}'), ('\u{10760}', '\u{10767}'), ('\u{10800}', '\u{10805}'), ('\u{10808}',
+        '\u{10808}'), ('\u{1080a}', '\u{10835}'), ('\u{10837}', '\u{10838}'), ('\u{1083c}',
+        '\u{1083c}'), ('\u{1083f}', '\u{10855}'), ('\u{10860}', '\u{10876}'), ('\u{10880}',
+        '\u{1089e}'), ('\u{108e0}', '\u{108f2}'), ('\u{108f4}', '\u{108f5}'), ('\u{10900}',
+        '\u{10915}'), ('\u{10920}', '\u{10939}'), ('\u{10980}', '\u{109b7}'), ('\u{109be}',
+        '\u{109bf}'), ('\u{10a00}', '\u{10a00}'), ('\u{10a10}', '\u{10a13}'), ('\u{10a15}',
+        '\u{10a17}'), ('\u{10a19}', '\u{10a33}'), ('\u{10a60}', '\u{10a7c}'), ('\u{10a80}',
+        '\u{10a9c}'), ('\u{10ac0}', '\u{10ac7}'), ('\u{10ac9}', '\u{10ae4}'), ('\u{10b00}',
+        '\u{10b35}'), ('\u{10b40}', '\u{10b55}'), ('\u{10b60}', '\u{10b72}'), ('\u{10b80}',
+        '\u{10b91}'), ('\u{10c00}', '\u{10c48}'), ('\u{10c80}', '\u{10cb2}'), ('\u{10cc0}',
+        '\u{10cf2}'), ('\u{11003}', '\u{11037}'), ('\u{11083}', '\u{110af}'), ('\u{110d0}',
+        '\u{110e8}'), ('\u{11103}', '\u{11126}'), ('\u{11150}', '\u{11172}'), ('\u{11176}',
+        '\u{11176}'), ('\u{11183}', '\u{111b2}'), ('\u{111c1}', '\u{111c4}'), ('\u{111da}',
+        '\u{111da}'), ('\u{111dc}', '\u{111dc}'), ('\u{11200}', '\u{11211}'), ('\u{11213}',
+        '\u{1122b}'), ('\u{11280}', '\u{11286}'), ('\u{11288}', '\u{11288}'), ('\u{1128a}',
+        '\u{1128d}'), ('\u{1128f}', '\u{1129d}'), ('\u{1129f}', '\u{112a8}'), ('\u{112b0}',
+        '\u{112de}'), ('\u{11305}', '\u{1130c}'), ('\u{1130f}', '\u{11310}'), ('\u{11313}',
+        '\u{11328}'), ('\u{1132a}', '\u{11330}'), ('\u{11332}', '\u{11333}'), ('\u{11335}',
+        '\u{11339}'), ('\u{1133d}', '\u{1133d}'), ('\u{11350}', '\u{11350}'), ('\u{1135d}',
+        '\u{11361}'), ('\u{11480}', '\u{114af}'), ('\u{114c4}', '\u{114c5}'), ('\u{114c7}',
+        '\u{114c7}'), ('\u{11580}', '\u{115ae}'), ('\u{115d8}', '\u{115db}'), ('\u{11600}',
+        '\u{1162f}'), ('\u{11644}', '\u{11644}'), ('\u{11680}', '\u{116aa}'), ('\u{11700}',
+        '\u{11719}'), ('\u{118a0}', '\u{118df}'), ('\u{118ff}', '\u{118ff}'), ('\u{11ac0}',
+        '\u{11af8}'), ('\u{12000}', '\u{12399}'), ('\u{12400}', '\u{1246e}'), ('\u{12480}',
+        '\u{12543}'), ('\u{13000}', '\u{1342e}'), ('\u{14400}', '\u{14646}'), ('\u{16800}',
+        '\u{16a38}'), ('\u{16a40}', '\u{16a5e}'), ('\u{16ad0}', '\u{16aed}'), ('\u{16b00}',
+        '\u{16b2f}'), ('\u{16b40}', '\u{16b43}'), ('\u{16b63}', '\u{16b77}'), ('\u{16b7d}',
+        '\u{16b8f}'), ('\u{16f00}', '\u{16f44}'), ('\u{16f50}', '\u{16f50}'), ('\u{16f93}',
+        '\u{16f9f}'), ('\u{1b000}', '\u{1b001}'), ('\u{1bc00}', '\u{1bc6a}'), ('\u{1bc70}',
+        '\u{1bc7c}'), ('\u{1bc80}', '\u{1bc88}'), ('\u{1bc90}', '\u{1bc99}'), ('\u{1d400}',
+        '\u{1d454}'), ('\u{1d456}', '\u{1d49c}'), ('\u{1d49e}', '\u{1d49f}'), ('\u{1d4a2}',
+        '\u{1d4a2}'), ('\u{1d4a5}', '\u{1d4a6}'), ('\u{1d4a9}', '\u{1d4ac}'), ('\u{1d4ae}',
+        '\u{1d4b9}'), ('\u{1d4bb}', '\u{1d4bb}'), ('\u{1d4bd}', '\u{1d4c3}'), ('\u{1d4c5}',
+        '\u{1d505}'), ('\u{1d507}', '\u{1d50a}'), ('\u{1d50d}', '\u{1d514}'), ('\u{1d516}',
+        '\u{1d51c}'), ('\u{1d51e}', '\u{1d539}'), ('\u{1d53b}', '\u{1d53e}'), ('\u{1d540}',
+        '\u{1d544}'), ('\u{1d546}', '\u{1d546}'), ('\u{1d54a}', '\u{1d550}'), ('\u{1d552}',
+        '\u{1d6a5}'), ('\u{1d6a8}', '\u{1d6c0}'), ('\u{1d6c2}', '\u{1d6da}'), ('\u{1d6dc}',
+        '\u{1d6fa}'), ('\u{1d6fc}', '\u{1d714}'), ('\u{1d716}', '\u{1d734}'), ('\u{1d736}',
+        '\u{1d74e}'), ('\u{1d750}', '\u{1d76e}'), ('\u{1d770}', '\u{1d788}'), ('\u{1d78a}',
+        '\u{1d7a8}'), ('\u{1d7aa}', '\u{1d7c2}'), ('\u{1d7c4}', '\u{1d7cb}'), ('\u{1e800}',
+        '\u{1e8c4}'), ('\u{1ee00}', '\u{1ee03}'), ('\u{1ee05}', '\u{1ee1f}'), ('\u{1ee21}',
+        '\u{1ee22}'), ('\u{1ee24}', '\u{1ee24}'), ('\u{1ee27}', '\u{1ee27}'), ('\u{1ee29}',
+        '\u{1ee32}'), ('\u{1ee34}', '\u{1ee37}'), ('\u{1ee39}', '\u{1ee39}'), ('\u{1ee3b}',
+        '\u{1ee3b}'), ('\u{1ee42}', '\u{1ee42}'), ('\u{1ee47}', '\u{1ee47}'), ('\u{1ee49}',
+        '\u{1ee49}'), ('\u{1ee4b}', '\u{1ee4b}'), ('\u{1ee4d}', '\u{1ee4f}'), ('\u{1ee51}',
+        '\u{1ee52}'), ('\u{1ee54}', '\u{1ee54}'), ('\u{1ee57}', '\u{1ee57}'), ('\u{1ee59}',
+        '\u{1ee59}'), ('\u{1ee5b}', '\u{1ee5b}'), ('\u{1ee5d}', '\u{1ee5d}'), ('\u{1ee5f}',
+        '\u{1ee5f}'), ('\u{1ee61}', '\u{1ee62}'), ('\u{1ee64}', '\u{1ee64}'), ('\u{1ee67}',
+        '\u{1ee6a}'), ('\u{1ee6c}', '\u{1ee72}'), ('\u{1ee74}', '\u{1ee77}'), ('\u{1ee79}',
+        '\u{1ee7c}'), ('\u{1ee7e}', '\u{1ee7e}'), ('\u{1ee80}', '\u{1ee89}'), ('\u{1ee8b}',
+        '\u{1ee9b}'), ('\u{1eea1}', '\u{1eea3}'), ('\u{1eea5}', '\u{1eea9}'), ('\u{1eeab}',
+        '\u{1eebb}'), ('\u{20000}', '\u{2a6d6}'), ('\u{2a700}', '\u{2b734}'), ('\u{2b740}',
+        '\u{2b81d}'), ('\u{2b820}', '\u{2cea1}'), ('\u{2f800}', '\u{2fa1d}')
     ];
 
     pub fn XID_Start(c: char) -> bool {
@@ -1162,2714 +1188,6 @@ pub mod property {
 
 }
 
-pub mod normalization {
-    // Canonical decompositions
-    pub const canonical_table: &'static [(char, &'static [char])] = &[
-        ('\u{c0}', &['\u{41}', '\u{300}']), ('\u{c1}', &['\u{41}', '\u{301}']), ('\u{c2}',
-        &['\u{41}', '\u{302}']), ('\u{c3}', &['\u{41}', '\u{303}']), ('\u{c4}', &['\u{41}',
-        '\u{308}']), ('\u{c5}', &['\u{41}', '\u{30a}']), ('\u{c7}', &['\u{43}', '\u{327}']),
-        ('\u{c8}', &['\u{45}', '\u{300}']), ('\u{c9}', &['\u{45}', '\u{301}']), ('\u{ca}',
-        &['\u{45}', '\u{302}']), ('\u{cb}', &['\u{45}', '\u{308}']), ('\u{cc}', &['\u{49}',
-        '\u{300}']), ('\u{cd}', &['\u{49}', '\u{301}']), ('\u{ce}', &['\u{49}', '\u{302}']),
-        ('\u{cf}', &['\u{49}', '\u{308}']), ('\u{d1}', &['\u{4e}', '\u{303}']), ('\u{d2}',
-        &['\u{4f}', '\u{300}']), ('\u{d3}', &['\u{4f}', '\u{301}']), ('\u{d4}', &['\u{4f}',
-        '\u{302}']), ('\u{d5}', &['\u{4f}', '\u{303}']), ('\u{d6}', &['\u{4f}', '\u{308}']),
-        ('\u{d9}', &['\u{55}', '\u{300}']), ('\u{da}', &['\u{55}', '\u{301}']), ('\u{db}',
-        &['\u{55}', '\u{302}']), ('\u{dc}', &['\u{55}', '\u{308}']), ('\u{dd}', &['\u{59}',
-        '\u{301}']), ('\u{e0}', &['\u{61}', '\u{300}']), ('\u{e1}', &['\u{61}', '\u{301}']),
-        ('\u{e2}', &['\u{61}', '\u{302}']), ('\u{e3}', &['\u{61}', '\u{303}']), ('\u{e4}',
-        &['\u{61}', '\u{308}']), ('\u{e5}', &['\u{61}', '\u{30a}']), ('\u{e7}', &['\u{63}',
-        '\u{327}']), ('\u{e8}', &['\u{65}', '\u{300}']), ('\u{e9}', &['\u{65}', '\u{301}']),
-        ('\u{ea}', &['\u{65}', '\u{302}']), ('\u{eb}', &['\u{65}', '\u{308}']), ('\u{ec}',
-        &['\u{69}', '\u{300}']), ('\u{ed}', &['\u{69}', '\u{301}']), ('\u{ee}', &['\u{69}',
-        '\u{302}']), ('\u{ef}', &['\u{69}', '\u{308}']), ('\u{f1}', &['\u{6e}', '\u{303}']),
-        ('\u{f2}', &['\u{6f}', '\u{300}']), ('\u{f3}', &['\u{6f}', '\u{301}']), ('\u{f4}',
-        &['\u{6f}', '\u{302}']), ('\u{f5}', &['\u{6f}', '\u{303}']), ('\u{f6}', &['\u{6f}',
-        '\u{308}']), ('\u{f9}', &['\u{75}', '\u{300}']), ('\u{fa}', &['\u{75}', '\u{301}']),
-        ('\u{fb}', &['\u{75}', '\u{302}']), ('\u{fc}', &['\u{75}', '\u{308}']), ('\u{fd}',
-        &['\u{79}', '\u{301}']), ('\u{ff}', &['\u{79}', '\u{308}']), ('\u{100}', &['\u{41}',
-        '\u{304}']), ('\u{101}', &['\u{61}', '\u{304}']), ('\u{102}', &['\u{41}', '\u{306}']),
-        ('\u{103}', &['\u{61}', '\u{306}']), ('\u{104}', &['\u{41}', '\u{328}']), ('\u{105}',
-        &['\u{61}', '\u{328}']), ('\u{106}', &['\u{43}', '\u{301}']), ('\u{107}', &['\u{63}',
-        '\u{301}']), ('\u{108}', &['\u{43}', '\u{302}']), ('\u{109}', &['\u{63}', '\u{302}']),
-        ('\u{10a}', &['\u{43}', '\u{307}']), ('\u{10b}', &['\u{63}', '\u{307}']), ('\u{10c}',
-        &['\u{43}', '\u{30c}']), ('\u{10d}', &['\u{63}', '\u{30c}']), ('\u{10e}', &['\u{44}',
-        '\u{30c}']), ('\u{10f}', &['\u{64}', '\u{30c}']), ('\u{112}', &['\u{45}', '\u{304}']),
-        ('\u{113}', &['\u{65}', '\u{304}']), ('\u{114}', &['\u{45}', '\u{306}']), ('\u{115}',
-        &['\u{65}', '\u{306}']), ('\u{116}', &['\u{45}', '\u{307}']), ('\u{117}', &['\u{65}',
-        '\u{307}']), ('\u{118}', &['\u{45}', '\u{328}']), ('\u{119}', &['\u{65}', '\u{328}']),
-        ('\u{11a}', &['\u{45}', '\u{30c}']), ('\u{11b}', &['\u{65}', '\u{30c}']), ('\u{11c}',
-        &['\u{47}', '\u{302}']), ('\u{11d}', &['\u{67}', '\u{302}']), ('\u{11e}', &['\u{47}',
-        '\u{306}']), ('\u{11f}', &['\u{67}', '\u{306}']), ('\u{120}', &['\u{47}', '\u{307}']),
-        ('\u{121}', &['\u{67}', '\u{307}']), ('\u{122}', &['\u{47}', '\u{327}']), ('\u{123}',
-        &['\u{67}', '\u{327}']), ('\u{124}', &['\u{48}', '\u{302}']), ('\u{125}', &['\u{68}',
-        '\u{302}']), ('\u{128}', &['\u{49}', '\u{303}']), ('\u{129}', &['\u{69}', '\u{303}']),
-        ('\u{12a}', &['\u{49}', '\u{304}']), ('\u{12b}', &['\u{69}', '\u{304}']), ('\u{12c}',
-        &['\u{49}', '\u{306}']), ('\u{12d}', &['\u{69}', '\u{306}']), ('\u{12e}', &['\u{49}',
-        '\u{328}']), ('\u{12f}', &['\u{69}', '\u{328}']), ('\u{130}', &['\u{49}', '\u{307}']),
-        ('\u{134}', &['\u{4a}', '\u{302}']), ('\u{135}', &['\u{6a}', '\u{302}']), ('\u{136}',
-        &['\u{4b}', '\u{327}']), ('\u{137}', &['\u{6b}', '\u{327}']), ('\u{139}', &['\u{4c}',
-        '\u{301}']), ('\u{13a}', &['\u{6c}', '\u{301}']), ('\u{13b}', &['\u{4c}', '\u{327}']),
-        ('\u{13c}', &['\u{6c}', '\u{327}']), ('\u{13d}', &['\u{4c}', '\u{30c}']), ('\u{13e}',
-        &['\u{6c}', '\u{30c}']), ('\u{143}', &['\u{4e}', '\u{301}']), ('\u{144}', &['\u{6e}',
-        '\u{301}']), ('\u{145}', &['\u{4e}', '\u{327}']), ('\u{146}', &['\u{6e}', '\u{327}']),
-        ('\u{147}', &['\u{4e}', '\u{30c}']), ('\u{148}', &['\u{6e}', '\u{30c}']), ('\u{14c}',
-        &['\u{4f}', '\u{304}']), ('\u{14d}', &['\u{6f}', '\u{304}']), ('\u{14e}', &['\u{4f}',
-        '\u{306}']), ('\u{14f}', &['\u{6f}', '\u{306}']), ('\u{150}', &['\u{4f}', '\u{30b}']),
-        ('\u{151}', &['\u{6f}', '\u{30b}']), ('\u{154}', &['\u{52}', '\u{301}']), ('\u{155}',
-        &['\u{72}', '\u{301}']), ('\u{156}', &['\u{52}', '\u{327}']), ('\u{157}', &['\u{72}',
-        '\u{327}']), ('\u{158}', &['\u{52}', '\u{30c}']), ('\u{159}', &['\u{72}', '\u{30c}']),
-        ('\u{15a}', &['\u{53}', '\u{301}']), ('\u{15b}', &['\u{73}', '\u{301}']), ('\u{15c}',
-        &['\u{53}', '\u{302}']), ('\u{15d}', &['\u{73}', '\u{302}']), ('\u{15e}', &['\u{53}',
-        '\u{327}']), ('\u{15f}', &['\u{73}', '\u{327}']), ('\u{160}', &['\u{53}', '\u{30c}']),
-        ('\u{161}', &['\u{73}', '\u{30c}']), ('\u{162}', &['\u{54}', '\u{327}']), ('\u{163}',
-        &['\u{74}', '\u{327}']), ('\u{164}', &['\u{54}', '\u{30c}']), ('\u{165}', &['\u{74}',
-        '\u{30c}']), ('\u{168}', &['\u{55}', '\u{303}']), ('\u{169}', &['\u{75}', '\u{303}']),
-        ('\u{16a}', &['\u{55}', '\u{304}']), ('\u{16b}', &['\u{75}', '\u{304}']), ('\u{16c}',
-        &['\u{55}', '\u{306}']), ('\u{16d}', &['\u{75}', '\u{306}']), ('\u{16e}', &['\u{55}',
-        '\u{30a}']), ('\u{16f}', &['\u{75}', '\u{30a}']), ('\u{170}', &['\u{55}', '\u{30b}']),
-        ('\u{171}', &['\u{75}', '\u{30b}']), ('\u{172}', &['\u{55}', '\u{328}']), ('\u{173}',
-        &['\u{75}', '\u{328}']), ('\u{174}', &['\u{57}', '\u{302}']), ('\u{175}', &['\u{77}',
-        '\u{302}']), ('\u{176}', &['\u{59}', '\u{302}']), ('\u{177}', &['\u{79}', '\u{302}']),
-        ('\u{178}', &['\u{59}', '\u{308}']), ('\u{179}', &['\u{5a}', '\u{301}']), ('\u{17a}',
-        &['\u{7a}', '\u{301}']), ('\u{17b}', &['\u{5a}', '\u{307}']), ('\u{17c}', &['\u{7a}',
-        '\u{307}']), ('\u{17d}', &['\u{5a}', '\u{30c}']), ('\u{17e}', &['\u{7a}', '\u{30c}']),
-        ('\u{1a0}', &['\u{4f}', '\u{31b}']), ('\u{1a1}', &['\u{6f}', '\u{31b}']), ('\u{1af}',
-        &['\u{55}', '\u{31b}']), ('\u{1b0}', &['\u{75}', '\u{31b}']), ('\u{1cd}', &['\u{41}',
-        '\u{30c}']), ('\u{1ce}', &['\u{61}', '\u{30c}']), ('\u{1cf}', &['\u{49}', '\u{30c}']),
-        ('\u{1d0}', &['\u{69}', '\u{30c}']), ('\u{1d1}', &['\u{4f}', '\u{30c}']), ('\u{1d2}',
-        &['\u{6f}', '\u{30c}']), ('\u{1d3}', &['\u{55}', '\u{30c}']), ('\u{1d4}', &['\u{75}',
-        '\u{30c}']), ('\u{1d5}', &['\u{dc}', '\u{304}']), ('\u{1d6}', &['\u{fc}', '\u{304}']),
-        ('\u{1d7}', &['\u{dc}', '\u{301}']), ('\u{1d8}', &['\u{fc}', '\u{301}']), ('\u{1d9}',
-        &['\u{dc}', '\u{30c}']), ('\u{1da}', &['\u{fc}', '\u{30c}']), ('\u{1db}', &['\u{dc}',
-        '\u{300}']), ('\u{1dc}', &['\u{fc}', '\u{300}']), ('\u{1de}', &['\u{c4}', '\u{304}']),
-        ('\u{1df}', &['\u{e4}', '\u{304}']), ('\u{1e0}', &['\u{226}', '\u{304}']), ('\u{1e1}',
-        &['\u{227}', '\u{304}']), ('\u{1e2}', &['\u{c6}', '\u{304}']), ('\u{1e3}', &['\u{e6}',
-        '\u{304}']), ('\u{1e6}', &['\u{47}', '\u{30c}']), ('\u{1e7}', &['\u{67}', '\u{30c}']),
-        ('\u{1e8}', &['\u{4b}', '\u{30c}']), ('\u{1e9}', &['\u{6b}', '\u{30c}']), ('\u{1ea}',
-        &['\u{4f}', '\u{328}']), ('\u{1eb}', &['\u{6f}', '\u{328}']), ('\u{1ec}', &['\u{1ea}',
-        '\u{304}']), ('\u{1ed}', &['\u{1eb}', '\u{304}']), ('\u{1ee}', &['\u{1b7}', '\u{30c}']),
-        ('\u{1ef}', &['\u{292}', '\u{30c}']), ('\u{1f0}', &['\u{6a}', '\u{30c}']), ('\u{1f4}',
-        &['\u{47}', '\u{301}']), ('\u{1f5}', &['\u{67}', '\u{301}']), ('\u{1f8}', &['\u{4e}',
-        '\u{300}']), ('\u{1f9}', &['\u{6e}', '\u{300}']), ('\u{1fa}', &['\u{c5}', '\u{301}']),
-        ('\u{1fb}', &['\u{e5}', '\u{301}']), ('\u{1fc}', &['\u{c6}', '\u{301}']), ('\u{1fd}',
-        &['\u{e6}', '\u{301}']), ('\u{1fe}', &['\u{d8}', '\u{301}']), ('\u{1ff}', &['\u{f8}',
-        '\u{301}']), ('\u{200}', &['\u{41}', '\u{30f}']), ('\u{201}', &['\u{61}', '\u{30f}']),
-        ('\u{202}', &['\u{41}', '\u{311}']), ('\u{203}', &['\u{61}', '\u{311}']), ('\u{204}',
-        &['\u{45}', '\u{30f}']), ('\u{205}', &['\u{65}', '\u{30f}']), ('\u{206}', &['\u{45}',
-        '\u{311}']), ('\u{207}', &['\u{65}', '\u{311}']), ('\u{208}', &['\u{49}', '\u{30f}']),
-        ('\u{209}', &['\u{69}', '\u{30f}']), ('\u{20a}', &['\u{49}', '\u{311}']), ('\u{20b}',
-        &['\u{69}', '\u{311}']), ('\u{20c}', &['\u{4f}', '\u{30f}']), ('\u{20d}', &['\u{6f}',
-        '\u{30f}']), ('\u{20e}', &['\u{4f}', '\u{311}']), ('\u{20f}', &['\u{6f}', '\u{311}']),
-        ('\u{210}', &['\u{52}', '\u{30f}']), ('\u{211}', &['\u{72}', '\u{30f}']), ('\u{212}',
-        &['\u{52}', '\u{311}']), ('\u{213}', &['\u{72}', '\u{311}']), ('\u{214}', &['\u{55}',
-        '\u{30f}']), ('\u{215}', &['\u{75}', '\u{30f}']), ('\u{216}', &['\u{55}', '\u{311}']),
-        ('\u{217}', &['\u{75}', '\u{311}']), ('\u{218}', &['\u{53}', '\u{326}']), ('\u{219}',
-        &['\u{73}', '\u{326}']), ('\u{21a}', &['\u{54}', '\u{326}']), ('\u{21b}', &['\u{74}',
-        '\u{326}']), ('\u{21e}', &['\u{48}', '\u{30c}']), ('\u{21f}', &['\u{68}', '\u{30c}']),
-        ('\u{226}', &['\u{41}', '\u{307}']), ('\u{227}', &['\u{61}', '\u{307}']), ('\u{228}',
-        &['\u{45}', '\u{327}']), ('\u{229}', &['\u{65}', '\u{327}']), ('\u{22a}', &['\u{d6}',
-        '\u{304}']), ('\u{22b}', &['\u{f6}', '\u{304}']), ('\u{22c}', &['\u{d5}', '\u{304}']),
-        ('\u{22d}', &['\u{f5}', '\u{304}']), ('\u{22e}', &['\u{4f}', '\u{307}']), ('\u{22f}',
-        &['\u{6f}', '\u{307}']), ('\u{230}', &['\u{22e}', '\u{304}']), ('\u{231}', &['\u{22f}',
-        '\u{304}']), ('\u{232}', &['\u{59}', '\u{304}']), ('\u{233}', &['\u{79}', '\u{304}']),
-        ('\u{340}', &['\u{300}']), ('\u{341}', &['\u{301}']), ('\u{343}', &['\u{313}']), ('\u{344}',
-        &['\u{308}', '\u{301}']), ('\u{374}', &['\u{2b9}']), ('\u{37e}', &['\u{3b}']), ('\u{385}',
-        &['\u{a8}', '\u{301}']), ('\u{386}', &['\u{391}', '\u{301}']), ('\u{387}', &['\u{b7}']),
-        ('\u{388}', &['\u{395}', '\u{301}']), ('\u{389}', &['\u{397}', '\u{301}']), ('\u{38a}',
-        &['\u{399}', '\u{301}']), ('\u{38c}', &['\u{39f}', '\u{301}']), ('\u{38e}', &['\u{3a5}',
-        '\u{301}']), ('\u{38f}', &['\u{3a9}', '\u{301}']), ('\u{390}', &['\u{3ca}', '\u{301}']),
-        ('\u{3aa}', &['\u{399}', '\u{308}']), ('\u{3ab}', &['\u{3a5}', '\u{308}']), ('\u{3ac}',
-        &['\u{3b1}', '\u{301}']), ('\u{3ad}', &['\u{3b5}', '\u{301}']), ('\u{3ae}', &['\u{3b7}',
-        '\u{301}']), ('\u{3af}', &['\u{3b9}', '\u{301}']), ('\u{3b0}', &['\u{3cb}', '\u{301}']),
-        ('\u{3ca}', &['\u{3b9}', '\u{308}']), ('\u{3cb}', &['\u{3c5}', '\u{308}']), ('\u{3cc}',
-        &['\u{3bf}', '\u{301}']), ('\u{3cd}', &['\u{3c5}', '\u{301}']), ('\u{3ce}', &['\u{3c9}',
-        '\u{301}']), ('\u{3d3}', &['\u{3d2}', '\u{301}']), ('\u{3d4}', &['\u{3d2}', '\u{308}']),
-        ('\u{400}', &['\u{415}', '\u{300}']), ('\u{401}', &['\u{415}', '\u{308}']), ('\u{403}',
-        &['\u{413}', '\u{301}']), ('\u{407}', &['\u{406}', '\u{308}']), ('\u{40c}', &['\u{41a}',
-        '\u{301}']), ('\u{40d}', &['\u{418}', '\u{300}']), ('\u{40e}', &['\u{423}', '\u{306}']),
-        ('\u{419}', &['\u{418}', '\u{306}']), ('\u{439}', &['\u{438}', '\u{306}']), ('\u{450}',
-        &['\u{435}', '\u{300}']), ('\u{451}', &['\u{435}', '\u{308}']), ('\u{453}', &['\u{433}',
-        '\u{301}']), ('\u{457}', &['\u{456}', '\u{308}']), ('\u{45c}', &['\u{43a}', '\u{301}']),
-        ('\u{45d}', &['\u{438}', '\u{300}']), ('\u{45e}', &['\u{443}', '\u{306}']), ('\u{476}',
-        &['\u{474}', '\u{30f}']), ('\u{477}', &['\u{475}', '\u{30f}']), ('\u{4c1}', &['\u{416}',
-        '\u{306}']), ('\u{4c2}', &['\u{436}', '\u{306}']), ('\u{4d0}', &['\u{410}', '\u{306}']),
-        ('\u{4d1}', &['\u{430}', '\u{306}']), ('\u{4d2}', &['\u{410}', '\u{308}']), ('\u{4d3}',
-        &['\u{430}', '\u{308}']), ('\u{4d6}', &['\u{415}', '\u{306}']), ('\u{4d7}', &['\u{435}',
-        '\u{306}']), ('\u{4da}', &['\u{4d8}', '\u{308}']), ('\u{4db}', &['\u{4d9}', '\u{308}']),
-        ('\u{4dc}', &['\u{416}', '\u{308}']), ('\u{4dd}', &['\u{436}', '\u{308}']), ('\u{4de}',
-        &['\u{417}', '\u{308}']), ('\u{4df}', &['\u{437}', '\u{308}']), ('\u{4e2}', &['\u{418}',
-        '\u{304}']), ('\u{4e3}', &['\u{438}', '\u{304}']), ('\u{4e4}', &['\u{418}', '\u{308}']),
-        ('\u{4e5}', &['\u{438}', '\u{308}']), ('\u{4e6}', &['\u{41e}', '\u{308}']), ('\u{4e7}',
-        &['\u{43e}', '\u{308}']), ('\u{4ea}', &['\u{4e8}', '\u{308}']), ('\u{4eb}', &['\u{4e9}',
-        '\u{308}']), ('\u{4ec}', &['\u{42d}', '\u{308}']), ('\u{4ed}', &['\u{44d}', '\u{308}']),
-        ('\u{4ee}', &['\u{423}', '\u{304}']), ('\u{4ef}', &['\u{443}', '\u{304}']), ('\u{4f0}',
-        &['\u{423}', '\u{308}']), ('\u{4f1}', &['\u{443}', '\u{308}']), ('\u{4f2}', &['\u{423}',
-        '\u{30b}']), ('\u{4f3}', &['\u{443}', '\u{30b}']), ('\u{4f4}', &['\u{427}', '\u{308}']),
-        ('\u{4f5}', &['\u{447}', '\u{308}']), ('\u{4f8}', &['\u{42b}', '\u{308}']), ('\u{4f9}',
-        &['\u{44b}', '\u{308}']), ('\u{622}', &['\u{627}', '\u{653}']), ('\u{623}', &['\u{627}',
-        '\u{654}']), ('\u{624}', &['\u{648}', '\u{654}']), ('\u{625}', &['\u{627}', '\u{655}']),
-        ('\u{626}', &['\u{64a}', '\u{654}']), ('\u{6c0}', &['\u{6d5}', '\u{654}']), ('\u{6c2}',
-        &['\u{6c1}', '\u{654}']), ('\u{6d3}', &['\u{6d2}', '\u{654}']), ('\u{929}', &['\u{928}',
-        '\u{93c}']), ('\u{931}', &['\u{930}', '\u{93c}']), ('\u{934}', &['\u{933}', '\u{93c}']),
-        ('\u{958}', &['\u{915}', '\u{93c}']), ('\u{959}', &['\u{916}', '\u{93c}']), ('\u{95a}',
-        &['\u{917}', '\u{93c}']), ('\u{95b}', &['\u{91c}', '\u{93c}']), ('\u{95c}', &['\u{921}',
-        '\u{93c}']), ('\u{95d}', &['\u{922}', '\u{93c}']), ('\u{95e}', &['\u{92b}', '\u{93c}']),
-        ('\u{95f}', &['\u{92f}', '\u{93c}']), ('\u{9cb}', &['\u{9c7}', '\u{9be}']), ('\u{9cc}',
-        &['\u{9c7}', '\u{9d7}']), ('\u{9dc}', &['\u{9a1}', '\u{9bc}']), ('\u{9dd}', &['\u{9a2}',
-        '\u{9bc}']), ('\u{9df}', &['\u{9af}', '\u{9bc}']), ('\u{a33}', &['\u{a32}', '\u{a3c}']),
-        ('\u{a36}', &['\u{a38}', '\u{a3c}']), ('\u{a59}', &['\u{a16}', '\u{a3c}']), ('\u{a5a}',
-        &['\u{a17}', '\u{a3c}']), ('\u{a5b}', &['\u{a1c}', '\u{a3c}']), ('\u{a5e}', &['\u{a2b}',
-        '\u{a3c}']), ('\u{b48}', &['\u{b47}', '\u{b56}']), ('\u{b4b}', &['\u{b47}', '\u{b3e}']),
-        ('\u{b4c}', &['\u{b47}', '\u{b57}']), ('\u{b5c}', &['\u{b21}', '\u{b3c}']), ('\u{b5d}',
-        &['\u{b22}', '\u{b3c}']), ('\u{b94}', &['\u{b92}', '\u{bd7}']), ('\u{bca}', &['\u{bc6}',
-        '\u{bbe}']), ('\u{bcb}', &['\u{bc7}', '\u{bbe}']), ('\u{bcc}', &['\u{bc6}', '\u{bd7}']),
-        ('\u{c48}', &['\u{c46}', '\u{c56}']), ('\u{cc0}', &['\u{cbf}', '\u{cd5}']), ('\u{cc7}',
-        &['\u{cc6}', '\u{cd5}']), ('\u{cc8}', &['\u{cc6}', '\u{cd6}']), ('\u{cca}', &['\u{cc6}',
-        '\u{cc2}']), ('\u{ccb}', &['\u{cca}', '\u{cd5}']), ('\u{d4a}', &['\u{d46}', '\u{d3e}']),
-        ('\u{d4b}', &['\u{d47}', '\u{d3e}']), ('\u{d4c}', &['\u{d46}', '\u{d57}']), ('\u{dda}',
-        &['\u{dd9}', '\u{dca}']), ('\u{ddc}', &['\u{dd9}', '\u{dcf}']), ('\u{ddd}', &['\u{ddc}',
-        '\u{dca}']), ('\u{dde}', &['\u{dd9}', '\u{ddf}']), ('\u{f43}', &['\u{f42}', '\u{fb7}']),
-        ('\u{f4d}', &['\u{f4c}', '\u{fb7}']), ('\u{f52}', &['\u{f51}', '\u{fb7}']), ('\u{f57}',
-        &['\u{f56}', '\u{fb7}']), ('\u{f5c}', &['\u{f5b}', '\u{fb7}']), ('\u{f69}', &['\u{f40}',
-        '\u{fb5}']), ('\u{f73}', &['\u{f71}', '\u{f72}']), ('\u{f75}', &['\u{f71}', '\u{f74}']),
-        ('\u{f76}', &['\u{fb2}', '\u{f80}']), ('\u{f78}', &['\u{fb3}', '\u{f80}']), ('\u{f81}',
-        &['\u{f71}', '\u{f80}']), ('\u{f93}', &['\u{f92}', '\u{fb7}']), ('\u{f9d}', &['\u{f9c}',
-        '\u{fb7}']), ('\u{fa2}', &['\u{fa1}', '\u{fb7}']), ('\u{fa7}', &['\u{fa6}', '\u{fb7}']),
-        ('\u{fac}', &['\u{fab}', '\u{fb7}']), ('\u{fb9}', &['\u{f90}', '\u{fb5}']), ('\u{1026}',
-        &['\u{1025}', '\u{102e}']), ('\u{1b06}', &['\u{1b05}', '\u{1b35}']), ('\u{1b08}',
-        &['\u{1b07}', '\u{1b35}']), ('\u{1b0a}', &['\u{1b09}', '\u{1b35}']), ('\u{1b0c}',
-        &['\u{1b0b}', '\u{1b35}']), ('\u{1b0e}', &['\u{1b0d}', '\u{1b35}']), ('\u{1b12}',
-        &['\u{1b11}', '\u{1b35}']), ('\u{1b3b}', &['\u{1b3a}', '\u{1b35}']), ('\u{1b3d}',
-        &['\u{1b3c}', '\u{1b35}']), ('\u{1b40}', &['\u{1b3e}', '\u{1b35}']), ('\u{1b41}',
-        &['\u{1b3f}', '\u{1b35}']), ('\u{1b43}', &['\u{1b42}', '\u{1b35}']), ('\u{1e00}',
-        &['\u{41}', '\u{325}']), ('\u{1e01}', &['\u{61}', '\u{325}']), ('\u{1e02}', &['\u{42}',
-        '\u{307}']), ('\u{1e03}', &['\u{62}', '\u{307}']), ('\u{1e04}', &['\u{42}', '\u{323}']),
-        ('\u{1e05}', &['\u{62}', '\u{323}']), ('\u{1e06}', &['\u{42}', '\u{331}']), ('\u{1e07}',
-        &['\u{62}', '\u{331}']), ('\u{1e08}', &['\u{c7}', '\u{301}']), ('\u{1e09}', &['\u{e7}',
-        '\u{301}']), ('\u{1e0a}', &['\u{44}', '\u{307}']), ('\u{1e0b}', &['\u{64}', '\u{307}']),
-        ('\u{1e0c}', &['\u{44}', '\u{323}']), ('\u{1e0d}', &['\u{64}', '\u{323}']), ('\u{1e0e}',
-        &['\u{44}', '\u{331}']), ('\u{1e0f}', &['\u{64}', '\u{331}']), ('\u{1e10}', &['\u{44}',
-        '\u{327}']), ('\u{1e11}', &['\u{64}', '\u{327}']), ('\u{1e12}', &['\u{44}', '\u{32d}']),
-        ('\u{1e13}', &['\u{64}', '\u{32d}']), ('\u{1e14}', &['\u{112}', '\u{300}']), ('\u{1e15}',
-        &['\u{113}', '\u{300}']), ('\u{1e16}', &['\u{112}', '\u{301}']), ('\u{1e17}', &['\u{113}',
-        '\u{301}']), ('\u{1e18}', &['\u{45}', '\u{32d}']), ('\u{1e19}', &['\u{65}', '\u{32d}']),
-        ('\u{1e1a}', &['\u{45}', '\u{330}']), ('\u{1e1b}', &['\u{65}', '\u{330}']), ('\u{1e1c}',
-        &['\u{228}', '\u{306}']), ('\u{1e1d}', &['\u{229}', '\u{306}']), ('\u{1e1e}', &['\u{46}',
-        '\u{307}']), ('\u{1e1f}', &['\u{66}', '\u{307}']), ('\u{1e20}', &['\u{47}', '\u{304}']),
-        ('\u{1e21}', &['\u{67}', '\u{304}']), ('\u{1e22}', &['\u{48}', '\u{307}']), ('\u{1e23}',
-        &['\u{68}', '\u{307}']), ('\u{1e24}', &['\u{48}', '\u{323}']), ('\u{1e25}', &['\u{68}',
-        '\u{323}']), ('\u{1e26}', &['\u{48}', '\u{308}']), ('\u{1e27}', &['\u{68}', '\u{308}']),
-        ('\u{1e28}', &['\u{48}', '\u{327}']), ('\u{1e29}', &['\u{68}', '\u{327}']), ('\u{1e2a}',
-        &['\u{48}', '\u{32e}']), ('\u{1e2b}', &['\u{68}', '\u{32e}']), ('\u{1e2c}', &['\u{49}',
-        '\u{330}']), ('\u{1e2d}', &['\u{69}', '\u{330}']), ('\u{1e2e}', &['\u{cf}', '\u{301}']),
-        ('\u{1e2f}', &['\u{ef}', '\u{301}']), ('\u{1e30}', &['\u{4b}', '\u{301}']), ('\u{1e31}',
-        &['\u{6b}', '\u{301}']), ('\u{1e32}', &['\u{4b}', '\u{323}']), ('\u{1e33}', &['\u{6b}',
-        '\u{323}']), ('\u{1e34}', &['\u{4b}', '\u{331}']), ('\u{1e35}', &['\u{6b}', '\u{331}']),
-        ('\u{1e36}', &['\u{4c}', '\u{323}']), ('\u{1e37}', &['\u{6c}', '\u{323}']), ('\u{1e38}',
-        &['\u{1e36}', '\u{304}']), ('\u{1e39}', &['\u{1e37}', '\u{304}']), ('\u{1e3a}', &['\u{4c}',
-        '\u{331}']), ('\u{1e3b}', &['\u{6c}', '\u{331}']), ('\u{1e3c}', &['\u{4c}', '\u{32d}']),
-        ('\u{1e3d}', &['\u{6c}', '\u{32d}']), ('\u{1e3e}', &['\u{4d}', '\u{301}']), ('\u{1e3f}',
-        &['\u{6d}', '\u{301}']), ('\u{1e40}', &['\u{4d}', '\u{307}']), ('\u{1e41}', &['\u{6d}',
-        '\u{307}']), ('\u{1e42}', &['\u{4d}', '\u{323}']), ('\u{1e43}', &['\u{6d}', '\u{323}']),
-        ('\u{1e44}', &['\u{4e}', '\u{307}']), ('\u{1e45}', &['\u{6e}', '\u{307}']), ('\u{1e46}',
-        &['\u{4e}', '\u{323}']), ('\u{1e47}', &['\u{6e}', '\u{323}']), ('\u{1e48}', &['\u{4e}',
-        '\u{331}']), ('\u{1e49}', &['\u{6e}', '\u{331}']), ('\u{1e4a}', &['\u{4e}', '\u{32d}']),
-        ('\u{1e4b}', &['\u{6e}', '\u{32d}']), ('\u{1e4c}', &['\u{d5}', '\u{301}']), ('\u{1e4d}',
-        &['\u{f5}', '\u{301}']), ('\u{1e4e}', &['\u{d5}', '\u{308}']), ('\u{1e4f}', &['\u{f5}',
-        '\u{308}']), ('\u{1e50}', &['\u{14c}', '\u{300}']), ('\u{1e51}', &['\u{14d}', '\u{300}']),
-        ('\u{1e52}', &['\u{14c}', '\u{301}']), ('\u{1e53}', &['\u{14d}', '\u{301}']), ('\u{1e54}',
-        &['\u{50}', '\u{301}']), ('\u{1e55}', &['\u{70}', '\u{301}']), ('\u{1e56}', &['\u{50}',
-        '\u{307}']), ('\u{1e57}', &['\u{70}', '\u{307}']), ('\u{1e58}', &['\u{52}', '\u{307}']),
-        ('\u{1e59}', &['\u{72}', '\u{307}']), ('\u{1e5a}', &['\u{52}', '\u{323}']), ('\u{1e5b}',
-        &['\u{72}', '\u{323}']), ('\u{1e5c}', &['\u{1e5a}', '\u{304}']), ('\u{1e5d}', &['\u{1e5b}',
-        '\u{304}']), ('\u{1e5e}', &['\u{52}', '\u{331}']), ('\u{1e5f}', &['\u{72}', '\u{331}']),
-        ('\u{1e60}', &['\u{53}', '\u{307}']), ('\u{1e61}', &['\u{73}', '\u{307}']), ('\u{1e62}',
-        &['\u{53}', '\u{323}']), ('\u{1e63}', &['\u{73}', '\u{323}']), ('\u{1e64}', &['\u{15a}',
-        '\u{307}']), ('\u{1e65}', &['\u{15b}', '\u{307}']), ('\u{1e66}', &['\u{160}', '\u{307}']),
-        ('\u{1e67}', &['\u{161}', '\u{307}']), ('\u{1e68}', &['\u{1e62}', '\u{307}']), ('\u{1e69}',
-        &['\u{1e63}', '\u{307}']), ('\u{1e6a}', &['\u{54}', '\u{307}']), ('\u{1e6b}', &['\u{74}',
-        '\u{307}']), ('\u{1e6c}', &['\u{54}', '\u{323}']), ('\u{1e6d}', &['\u{74}', '\u{323}']),
-        ('\u{1e6e}', &['\u{54}', '\u{331}']), ('\u{1e6f}', &['\u{74}', '\u{331}']), ('\u{1e70}',
-        &['\u{54}', '\u{32d}']), ('\u{1e71}', &['\u{74}', '\u{32d}']), ('\u{1e72}', &['\u{55}',
-        '\u{324}']), ('\u{1e73}', &['\u{75}', '\u{324}']), ('\u{1e74}', &['\u{55}', '\u{330}']),
-        ('\u{1e75}', &['\u{75}', '\u{330}']), ('\u{1e76}', &['\u{55}', '\u{32d}']), ('\u{1e77}',
-        &['\u{75}', '\u{32d}']), ('\u{1e78}', &['\u{168}', '\u{301}']), ('\u{1e79}', &['\u{169}',
-        '\u{301}']), ('\u{1e7a}', &['\u{16a}', '\u{308}']), ('\u{1e7b}', &['\u{16b}', '\u{308}']),
-        ('\u{1e7c}', &['\u{56}', '\u{303}']), ('\u{1e7d}', &['\u{76}', '\u{303}']), ('\u{1e7e}',
-        &['\u{56}', '\u{323}']), ('\u{1e7f}', &['\u{76}', '\u{323}']), ('\u{1e80}', &['\u{57}',
-        '\u{300}']), ('\u{1e81}', &['\u{77}', '\u{300}']), ('\u{1e82}', &['\u{57}', '\u{301}']),
-        ('\u{1e83}', &['\u{77}', '\u{301}']), ('\u{1e84}', &['\u{57}', '\u{308}']), ('\u{1e85}',
-        &['\u{77}', '\u{308}']), ('\u{1e86}', &['\u{57}', '\u{307}']), ('\u{1e87}', &['\u{77}',
-        '\u{307}']), ('\u{1e88}', &['\u{57}', '\u{323}']), ('\u{1e89}', &['\u{77}', '\u{323}']),
-        ('\u{1e8a}', &['\u{58}', '\u{307}']), ('\u{1e8b}', &['\u{78}', '\u{307}']), ('\u{1e8c}',
-        &['\u{58}', '\u{308}']), ('\u{1e8d}', &['\u{78}', '\u{308}']), ('\u{1e8e}', &['\u{59}',
-        '\u{307}']), ('\u{1e8f}', &['\u{79}', '\u{307}']), ('\u{1e90}', &['\u{5a}', '\u{302}']),
-        ('\u{1e91}', &['\u{7a}', '\u{302}']), ('\u{1e92}', &['\u{5a}', '\u{323}']), ('\u{1e93}',
-        &['\u{7a}', '\u{323}']), ('\u{1e94}', &['\u{5a}', '\u{331}']), ('\u{1e95}', &['\u{7a}',
-        '\u{331}']), ('\u{1e96}', &['\u{68}', '\u{331}']), ('\u{1e97}', &['\u{74}', '\u{308}']),
-        ('\u{1e98}', &['\u{77}', '\u{30a}']), ('\u{1e99}', &['\u{79}', '\u{30a}']), ('\u{1e9b}',
-        &['\u{17f}', '\u{307}']), ('\u{1ea0}', &['\u{41}', '\u{323}']), ('\u{1ea1}', &['\u{61}',
-        '\u{323}']), ('\u{1ea2}', &['\u{41}', '\u{309}']), ('\u{1ea3}', &['\u{61}', '\u{309}']),
-        ('\u{1ea4}', &['\u{c2}', '\u{301}']), ('\u{1ea5}', &['\u{e2}', '\u{301}']), ('\u{1ea6}',
-        &['\u{c2}', '\u{300}']), ('\u{1ea7}', &['\u{e2}', '\u{300}']), ('\u{1ea8}', &['\u{c2}',
-        '\u{309}']), ('\u{1ea9}', &['\u{e2}', '\u{309}']), ('\u{1eaa}', &['\u{c2}', '\u{303}']),
-        ('\u{1eab}', &['\u{e2}', '\u{303}']), ('\u{1eac}', &['\u{1ea0}', '\u{302}']), ('\u{1ead}',
-        &['\u{1ea1}', '\u{302}']), ('\u{1eae}', &['\u{102}', '\u{301}']), ('\u{1eaf}', &['\u{103}',
-        '\u{301}']), ('\u{1eb0}', &['\u{102}', '\u{300}']), ('\u{1eb1}', &['\u{103}', '\u{300}']),
-        ('\u{1eb2}', &['\u{102}', '\u{309}']), ('\u{1eb3}', &['\u{103}', '\u{309}']), ('\u{1eb4}',
-        &['\u{102}', '\u{303}']), ('\u{1eb5}', &['\u{103}', '\u{303}']), ('\u{1eb6}', &['\u{1ea0}',
-        '\u{306}']), ('\u{1eb7}', &['\u{1ea1}', '\u{306}']), ('\u{1eb8}', &['\u{45}', '\u{323}']),
-        ('\u{1eb9}', &['\u{65}', '\u{323}']), ('\u{1eba}', &['\u{45}', '\u{309}']), ('\u{1ebb}',
-        &['\u{65}', '\u{309}']), ('\u{1ebc}', &['\u{45}', '\u{303}']), ('\u{1ebd}', &['\u{65}',
-        '\u{303}']), ('\u{1ebe}', &['\u{ca}', '\u{301}']), ('\u{1ebf}', &['\u{ea}', '\u{301}']),
-        ('\u{1ec0}', &['\u{ca}', '\u{300}']), ('\u{1ec1}', &['\u{ea}', '\u{300}']), ('\u{1ec2}',
-        &['\u{ca}', '\u{309}']), ('\u{1ec3}', &['\u{ea}', '\u{309}']), ('\u{1ec4}', &['\u{ca}',
-        '\u{303}']), ('\u{1ec5}', &['\u{ea}', '\u{303}']), ('\u{1ec6}', &['\u{1eb8}', '\u{302}']),
-        ('\u{1ec7}', &['\u{1eb9}', '\u{302}']), ('\u{1ec8}', &['\u{49}', '\u{309}']), ('\u{1ec9}',
-        &['\u{69}', '\u{309}']), ('\u{1eca}', &['\u{49}', '\u{323}']), ('\u{1ecb}', &['\u{69}',
-        '\u{323}']), ('\u{1ecc}', &['\u{4f}', '\u{323}']), ('\u{1ecd}', &['\u{6f}', '\u{323}']),
-        ('\u{1ece}', &['\u{4f}', '\u{309}']), ('\u{1ecf}', &['\u{6f}', '\u{309}']), ('\u{1ed0}',
-        &['\u{d4}', '\u{301}']), ('\u{1ed1}', &['\u{f4}', '\u{301}']), ('\u{1ed2}', &['\u{d4}',
-        '\u{300}']), ('\u{1ed3}', &['\u{f4}', '\u{300}']), ('\u{1ed4}', &['\u{d4}', '\u{309}']),
-        ('\u{1ed5}', &['\u{f4}', '\u{309}']), ('\u{1ed6}', &['\u{d4}', '\u{303}']), ('\u{1ed7}',
-        &['\u{f4}', '\u{303}']), ('\u{1ed8}', &['\u{1ecc}', '\u{302}']), ('\u{1ed9}', &['\u{1ecd}',
-        '\u{302}']), ('\u{1eda}', &['\u{1a0}', '\u{301}']), ('\u{1edb}', &['\u{1a1}', '\u{301}']),
-        ('\u{1edc}', &['\u{1a0}', '\u{300}']), ('\u{1edd}', &['\u{1a1}', '\u{300}']), ('\u{1ede}',
-        &['\u{1a0}', '\u{309}']), ('\u{1edf}', &['\u{1a1}', '\u{309}']), ('\u{1ee0}', &['\u{1a0}',
-        '\u{303}']), ('\u{1ee1}', &['\u{1a1}', '\u{303}']), ('\u{1ee2}', &['\u{1a0}', '\u{323}']),
-        ('\u{1ee3}', &['\u{1a1}', '\u{323}']), ('\u{1ee4}', &['\u{55}', '\u{323}']), ('\u{1ee5}',
-        &['\u{75}', '\u{323}']), ('\u{1ee6}', &['\u{55}', '\u{309}']), ('\u{1ee7}', &['\u{75}',
-        '\u{309}']), ('\u{1ee8}', &['\u{1af}', '\u{301}']), ('\u{1ee9}', &['\u{1b0}', '\u{301}']),
-        ('\u{1eea}', &['\u{1af}', '\u{300}']), ('\u{1eeb}', &['\u{1b0}', '\u{300}']), ('\u{1eec}',
-        &['\u{1af}', '\u{309}']), ('\u{1eed}', &['\u{1b0}', '\u{309}']), ('\u{1eee}', &['\u{1af}',
-        '\u{303}']), ('\u{1eef}', &['\u{1b0}', '\u{303}']), ('\u{1ef0}', &['\u{1af}', '\u{323}']),
-        ('\u{1ef1}', &['\u{1b0}', '\u{323}']), ('\u{1ef2}', &['\u{59}', '\u{300}']), ('\u{1ef3}',
-        &['\u{79}', '\u{300}']), ('\u{1ef4}', &['\u{59}', '\u{323}']), ('\u{1ef5}', &['\u{79}',
-        '\u{323}']), ('\u{1ef6}', &['\u{59}', '\u{309}']), ('\u{1ef7}', &['\u{79}', '\u{309}']),
-        ('\u{1ef8}', &['\u{59}', '\u{303}']), ('\u{1ef9}', &['\u{79}', '\u{303}']), ('\u{1f00}',
-        &['\u{3b1}', '\u{313}']), ('\u{1f01}', &['\u{3b1}', '\u{314}']), ('\u{1f02}', &['\u{1f00}',
-        '\u{300}']), ('\u{1f03}', &['\u{1f01}', '\u{300}']), ('\u{1f04}', &['\u{1f00}', '\u{301}']),
-        ('\u{1f05}', &['\u{1f01}', '\u{301}']), ('\u{1f06}', &['\u{1f00}', '\u{342}']), ('\u{1f07}',
-        &['\u{1f01}', '\u{342}']), ('\u{1f08}', &['\u{391}', '\u{313}']), ('\u{1f09}', &['\u{391}',
-        '\u{314}']), ('\u{1f0a}', &['\u{1f08}', '\u{300}']), ('\u{1f0b}', &['\u{1f09}', '\u{300}']),
-        ('\u{1f0c}', &['\u{1f08}', '\u{301}']), ('\u{1f0d}', &['\u{1f09}', '\u{301}']), ('\u{1f0e}',
-        &['\u{1f08}', '\u{342}']), ('\u{1f0f}', &['\u{1f09}', '\u{342}']), ('\u{1f10}', &['\u{3b5}',
-        '\u{313}']), ('\u{1f11}', &['\u{3b5}', '\u{314}']), ('\u{1f12}', &['\u{1f10}', '\u{300}']),
-        ('\u{1f13}', &['\u{1f11}', '\u{300}']), ('\u{1f14}', &['\u{1f10}', '\u{301}']), ('\u{1f15}',
-        &['\u{1f11}', '\u{301}']), ('\u{1f18}', &['\u{395}', '\u{313}']), ('\u{1f19}', &['\u{395}',
-        '\u{314}']), ('\u{1f1a}', &['\u{1f18}', '\u{300}']), ('\u{1f1b}', &['\u{1f19}', '\u{300}']),
-        ('\u{1f1c}', &['\u{1f18}', '\u{301}']), ('\u{1f1d}', &['\u{1f19}', '\u{301}']), ('\u{1f20}',
-        &['\u{3b7}', '\u{313}']), ('\u{1f21}', &['\u{3b7}', '\u{314}']), ('\u{1f22}', &['\u{1f20}',
-        '\u{300}']), ('\u{1f23}', &['\u{1f21}', '\u{300}']), ('\u{1f24}', &['\u{1f20}', '\u{301}']),
-        ('\u{1f25}', &['\u{1f21}', '\u{301}']), ('\u{1f26}', &['\u{1f20}', '\u{342}']), ('\u{1f27}',
-        &['\u{1f21}', '\u{342}']), ('\u{1f28}', &['\u{397}', '\u{313}']), ('\u{1f29}', &['\u{397}',
-        '\u{314}']), ('\u{1f2a}', &['\u{1f28}', '\u{300}']), ('\u{1f2b}', &['\u{1f29}', '\u{300}']),
-        ('\u{1f2c}', &['\u{1f28}', '\u{301}']), ('\u{1f2d}', &['\u{1f29}', '\u{301}']), ('\u{1f2e}',
-        &['\u{1f28}', '\u{342}']), ('\u{1f2f}', &['\u{1f29}', '\u{342}']), ('\u{1f30}', &['\u{3b9}',
-        '\u{313}']), ('\u{1f31}', &['\u{3b9}', '\u{314}']), ('\u{1f32}', &['\u{1f30}', '\u{300}']),
-        ('\u{1f33}', &['\u{1f31}', '\u{300}']), ('\u{1f34}', &['\u{1f30}', '\u{301}']), ('\u{1f35}',
-        &['\u{1f31}', '\u{301}']), ('\u{1f36}', &['\u{1f30}', '\u{342}']), ('\u{1f37}',
-        &['\u{1f31}', '\u{342}']), ('\u{1f38}', &['\u{399}', '\u{313}']), ('\u{1f39}', &['\u{399}',
-        '\u{314}']), ('\u{1f3a}', &['\u{1f38}', '\u{300}']), ('\u{1f3b}', &['\u{1f39}', '\u{300}']),
-        ('\u{1f3c}', &['\u{1f38}', '\u{301}']), ('\u{1f3d}', &['\u{1f39}', '\u{301}']), ('\u{1f3e}',
-        &['\u{1f38}', '\u{342}']), ('\u{1f3f}', &['\u{1f39}', '\u{342}']), ('\u{1f40}', &['\u{3bf}',
-        '\u{313}']), ('\u{1f41}', &['\u{3bf}', '\u{314}']), ('\u{1f42}', &['\u{1f40}', '\u{300}']),
-        ('\u{1f43}', &['\u{1f41}', '\u{300}']), ('\u{1f44}', &['\u{1f40}', '\u{301}']), ('\u{1f45}',
-        &['\u{1f41}', '\u{301}']), ('\u{1f48}', &['\u{39f}', '\u{313}']), ('\u{1f49}', &['\u{39f}',
-        '\u{314}']), ('\u{1f4a}', &['\u{1f48}', '\u{300}']), ('\u{1f4b}', &['\u{1f49}', '\u{300}']),
-        ('\u{1f4c}', &['\u{1f48}', '\u{301}']), ('\u{1f4d}', &['\u{1f49}', '\u{301}']), ('\u{1f50}',
-        &['\u{3c5}', '\u{313}']), ('\u{1f51}', &['\u{3c5}', '\u{314}']), ('\u{1f52}', &['\u{1f50}',
-        '\u{300}']), ('\u{1f53}', &['\u{1f51}', '\u{300}']), ('\u{1f54}', &['\u{1f50}', '\u{301}']),
-        ('\u{1f55}', &['\u{1f51}', '\u{301}']), ('\u{1f56}', &['\u{1f50}', '\u{342}']), ('\u{1f57}',
-        &['\u{1f51}', '\u{342}']), ('\u{1f59}', &['\u{3a5}', '\u{314}']), ('\u{1f5b}', &['\u{1f59}',
-        '\u{300}']), ('\u{1f5d}', &['\u{1f59}', '\u{301}']), ('\u{1f5f}', &['\u{1f59}', '\u{342}']),
-        ('\u{1f60}', &['\u{3c9}', '\u{313}']), ('\u{1f61}', &['\u{3c9}', '\u{314}']), ('\u{1f62}',
-        &['\u{1f60}', '\u{300}']), ('\u{1f63}', &['\u{1f61}', '\u{300}']), ('\u{1f64}',
-        &['\u{1f60}', '\u{301}']), ('\u{1f65}', &['\u{1f61}', '\u{301}']), ('\u{1f66}',
-        &['\u{1f60}', '\u{342}']), ('\u{1f67}', &['\u{1f61}', '\u{342}']), ('\u{1f68}', &['\u{3a9}',
-        '\u{313}']), ('\u{1f69}', &['\u{3a9}', '\u{314}']), ('\u{1f6a}', &['\u{1f68}', '\u{300}']),
-        ('\u{1f6b}', &['\u{1f69}', '\u{300}']), ('\u{1f6c}', &['\u{1f68}', '\u{301}']), ('\u{1f6d}',
-        &['\u{1f69}', '\u{301}']), ('\u{1f6e}', &['\u{1f68}', '\u{342}']), ('\u{1f6f}',
-        &['\u{1f69}', '\u{342}']), ('\u{1f70}', &['\u{3b1}', '\u{300}']), ('\u{1f71}',
-        &['\u{3ac}']), ('\u{1f72}', &['\u{3b5}', '\u{300}']), ('\u{1f73}', &['\u{3ad}']),
-        ('\u{1f74}', &['\u{3b7}', '\u{300}']), ('\u{1f75}', &['\u{3ae}']), ('\u{1f76}', &['\u{3b9}',
-        '\u{300}']), ('\u{1f77}', &['\u{3af}']), ('\u{1f78}', &['\u{3bf}', '\u{300}']), ('\u{1f79}',
-        &['\u{3cc}']), ('\u{1f7a}', &['\u{3c5}', '\u{300}']), ('\u{1f7b}', &['\u{3cd}']),
-        ('\u{1f7c}', &['\u{3c9}', '\u{300}']), ('\u{1f7d}', &['\u{3ce}']), ('\u{1f80}',
-        &['\u{1f00}', '\u{345}']), ('\u{1f81}', &['\u{1f01}', '\u{345}']), ('\u{1f82}',
-        &['\u{1f02}', '\u{345}']), ('\u{1f83}', &['\u{1f03}', '\u{345}']), ('\u{1f84}',
-        &['\u{1f04}', '\u{345}']), ('\u{1f85}', &['\u{1f05}', '\u{345}']), ('\u{1f86}',
-        &['\u{1f06}', '\u{345}']), ('\u{1f87}', &['\u{1f07}', '\u{345}']), ('\u{1f88}',
-        &['\u{1f08}', '\u{345}']), ('\u{1f89}', &['\u{1f09}', '\u{345}']), ('\u{1f8a}',
-        &['\u{1f0a}', '\u{345}']), ('\u{1f8b}', &['\u{1f0b}', '\u{345}']), ('\u{1f8c}',
-        &['\u{1f0c}', '\u{345}']), ('\u{1f8d}', &['\u{1f0d}', '\u{345}']), ('\u{1f8e}',
-        &['\u{1f0e}', '\u{345}']), ('\u{1f8f}', &['\u{1f0f}', '\u{345}']), ('\u{1f90}',
-        &['\u{1f20}', '\u{345}']), ('\u{1f91}', &['\u{1f21}', '\u{345}']), ('\u{1f92}',
-        &['\u{1f22}', '\u{345}']), ('\u{1f93}', &['\u{1f23}', '\u{345}']), ('\u{1f94}',
-        &['\u{1f24}', '\u{345}']), ('\u{1f95}', &['\u{1f25}', '\u{345}']), ('\u{1f96}',
-        &['\u{1f26}', '\u{345}']), ('\u{1f97}', &['\u{1f27}', '\u{345}']), ('\u{1f98}',
-        &['\u{1f28}', '\u{345}']), ('\u{1f99}', &['\u{1f29}', '\u{345}']), ('\u{1f9a}',
-        &['\u{1f2a}', '\u{345}']), ('\u{1f9b}', &['\u{1f2b}', '\u{345}']), ('\u{1f9c}',
-        &['\u{1f2c}', '\u{345}']), ('\u{1f9d}', &['\u{1f2d}', '\u{345}']), ('\u{1f9e}',
-        &['\u{1f2e}', '\u{345}']), ('\u{1f9f}', &['\u{1f2f}', '\u{345}']), ('\u{1fa0}',
-        &['\u{1f60}', '\u{345}']), ('\u{1fa1}', &['\u{1f61}', '\u{345}']), ('\u{1fa2}',
-        &['\u{1f62}', '\u{345}']), ('\u{1fa3}', &['\u{1f63}', '\u{345}']), ('\u{1fa4}',
-        &['\u{1f64}', '\u{345}']), ('\u{1fa5}', &['\u{1f65}', '\u{345}']), ('\u{1fa6}',
-        &['\u{1f66}', '\u{345}']), ('\u{1fa7}', &['\u{1f67}', '\u{345}']), ('\u{1fa8}',
-        &['\u{1f68}', '\u{345}']), ('\u{1fa9}', &['\u{1f69}', '\u{345}']), ('\u{1faa}',
-        &['\u{1f6a}', '\u{345}']), ('\u{1fab}', &['\u{1f6b}', '\u{345}']), ('\u{1fac}',
-        &['\u{1f6c}', '\u{345}']), ('\u{1fad}', &['\u{1f6d}', '\u{345}']), ('\u{1fae}',
-        &['\u{1f6e}', '\u{345}']), ('\u{1faf}', &['\u{1f6f}', '\u{345}']), ('\u{1fb0}', &['\u{3b1}',
-        '\u{306}']), ('\u{1fb1}', &['\u{3b1}', '\u{304}']), ('\u{1fb2}', &['\u{1f70}', '\u{345}']),
-        ('\u{1fb3}', &['\u{3b1}', '\u{345}']), ('\u{1fb4}', &['\u{3ac}', '\u{345}']), ('\u{1fb6}',
-        &['\u{3b1}', '\u{342}']), ('\u{1fb7}', &['\u{1fb6}', '\u{345}']), ('\u{1fb8}', &['\u{391}',
-        '\u{306}']), ('\u{1fb9}', &['\u{391}', '\u{304}']), ('\u{1fba}', &['\u{391}', '\u{300}']),
-        ('\u{1fbb}', &['\u{386}']), ('\u{1fbc}', &['\u{391}', '\u{345}']), ('\u{1fbe}',
-        &['\u{3b9}']), ('\u{1fc1}', &['\u{a8}', '\u{342}']), ('\u{1fc2}', &['\u{1f74}', '\u{345}']),
-        ('\u{1fc3}', &['\u{3b7}', '\u{345}']), ('\u{1fc4}', &['\u{3ae}', '\u{345}']), ('\u{1fc6}',
-        &['\u{3b7}', '\u{342}']), ('\u{1fc7}', &['\u{1fc6}', '\u{345}']), ('\u{1fc8}', &['\u{395}',
-        '\u{300}']), ('\u{1fc9}', &['\u{388}']), ('\u{1fca}', &['\u{397}', '\u{300}']), ('\u{1fcb}',
-        &['\u{389}']), ('\u{1fcc}', &['\u{397}', '\u{345}']), ('\u{1fcd}', &['\u{1fbf}',
-        '\u{300}']), ('\u{1fce}', &['\u{1fbf}', '\u{301}']), ('\u{1fcf}', &['\u{1fbf}', '\u{342}']),
-        ('\u{1fd0}', &['\u{3b9}', '\u{306}']), ('\u{1fd1}', &['\u{3b9}', '\u{304}']), ('\u{1fd2}',
-        &['\u{3ca}', '\u{300}']), ('\u{1fd3}', &['\u{390}']), ('\u{1fd6}', &['\u{3b9}', '\u{342}']),
-        ('\u{1fd7}', &['\u{3ca}', '\u{342}']), ('\u{1fd8}', &['\u{399}', '\u{306}']), ('\u{1fd9}',
-        &['\u{399}', '\u{304}']), ('\u{1fda}', &['\u{399}', '\u{300}']), ('\u{1fdb}', &['\u{38a}']),
-        ('\u{1fdd}', &['\u{1ffe}', '\u{300}']), ('\u{1fde}', &['\u{1ffe}', '\u{301}']), ('\u{1fdf}',
-        &['\u{1ffe}', '\u{342}']), ('\u{1fe0}', &['\u{3c5}', '\u{306}']), ('\u{1fe1}', &['\u{3c5}',
-        '\u{304}']), ('\u{1fe2}', &['\u{3cb}', '\u{300}']), ('\u{1fe3}', &['\u{3b0}']), ('\u{1fe4}',
-        &['\u{3c1}', '\u{313}']), ('\u{1fe5}', &['\u{3c1}', '\u{314}']), ('\u{1fe6}', &['\u{3c5}',
-        '\u{342}']), ('\u{1fe7}', &['\u{3cb}', '\u{342}']), ('\u{1fe8}', &['\u{3a5}', '\u{306}']),
-        ('\u{1fe9}', &['\u{3a5}', '\u{304}']), ('\u{1fea}', &['\u{3a5}', '\u{300}']), ('\u{1feb}',
-        &['\u{38e}']), ('\u{1fec}', &['\u{3a1}', '\u{314}']), ('\u{1fed}', &['\u{a8}', '\u{300}']),
-        ('\u{1fee}', &['\u{385}']), ('\u{1fef}', &['\u{60}']), ('\u{1ff2}', &['\u{1f7c}',
-        '\u{345}']), ('\u{1ff3}', &['\u{3c9}', '\u{345}']), ('\u{1ff4}', &['\u{3ce}', '\u{345}']),
-        ('\u{1ff6}', &['\u{3c9}', '\u{342}']), ('\u{1ff7}', &['\u{1ff6}', '\u{345}']), ('\u{1ff8}',
-        &['\u{39f}', '\u{300}']), ('\u{1ff9}', &['\u{38c}']), ('\u{1ffa}', &['\u{3a9}', '\u{300}']),
-        ('\u{1ffb}', &['\u{38f}']), ('\u{1ffc}', &['\u{3a9}', '\u{345}']), ('\u{1ffd}',
-        &['\u{b4}']), ('\u{2000}', &['\u{2002}']), ('\u{2001}', &['\u{2003}']), ('\u{2126}',
-        &['\u{3a9}']), ('\u{212a}', &['\u{4b}']), ('\u{212b}', &['\u{c5}']), ('\u{219a}',
-        &['\u{2190}', '\u{338}']), ('\u{219b}', &['\u{2192}', '\u{338}']), ('\u{21ae}',
-        &['\u{2194}', '\u{338}']), ('\u{21cd}', &['\u{21d0}', '\u{338}']), ('\u{21ce}',
-        &['\u{21d4}', '\u{338}']), ('\u{21cf}', &['\u{21d2}', '\u{338}']), ('\u{2204}',
-        &['\u{2203}', '\u{338}']), ('\u{2209}', &['\u{2208}', '\u{338}']), ('\u{220c}',
-        &['\u{220b}', '\u{338}']), ('\u{2224}', &['\u{2223}', '\u{338}']), ('\u{2226}',
-        &['\u{2225}', '\u{338}']), ('\u{2241}', &['\u{223c}', '\u{338}']), ('\u{2244}',
-        &['\u{2243}', '\u{338}']), ('\u{2247}', &['\u{2245}', '\u{338}']), ('\u{2249}',
-        &['\u{2248}', '\u{338}']), ('\u{2260}', &['\u{3d}', '\u{338}']), ('\u{2262}', &['\u{2261}',
-        '\u{338}']), ('\u{226d}', &['\u{224d}', '\u{338}']), ('\u{226e}', &['\u{3c}', '\u{338}']),
-        ('\u{226f}', &['\u{3e}', '\u{338}']), ('\u{2270}', &['\u{2264}', '\u{338}']), ('\u{2271}',
-        &['\u{2265}', '\u{338}']), ('\u{2274}', &['\u{2272}', '\u{338}']), ('\u{2275}',
-        &['\u{2273}', '\u{338}']), ('\u{2278}', &['\u{2276}', '\u{338}']), ('\u{2279}',
-        &['\u{2277}', '\u{338}']), ('\u{2280}', &['\u{227a}', '\u{338}']), ('\u{2281}',
-        &['\u{227b}', '\u{338}']), ('\u{2284}', &['\u{2282}', '\u{338}']), ('\u{2285}',
-        &['\u{2283}', '\u{338}']), ('\u{2288}', &['\u{2286}', '\u{338}']), ('\u{2289}',
-        &['\u{2287}', '\u{338}']), ('\u{22ac}', &['\u{22a2}', '\u{338}']), ('\u{22ad}',
-        &['\u{22a8}', '\u{338}']), ('\u{22ae}', &['\u{22a9}', '\u{338}']), ('\u{22af}',
-        &['\u{22ab}', '\u{338}']), ('\u{22e0}', &['\u{227c}', '\u{338}']), ('\u{22e1}',
-        &['\u{227d}', '\u{338}']), ('\u{22e2}', &['\u{2291}', '\u{338}']), ('\u{22e3}',
-        &['\u{2292}', '\u{338}']), ('\u{22ea}', &['\u{22b2}', '\u{338}']), ('\u{22eb}',
-        &['\u{22b3}', '\u{338}']), ('\u{22ec}', &['\u{22b4}', '\u{338}']), ('\u{22ed}',
-        &['\u{22b5}', '\u{338}']), ('\u{2329}', &['\u{3008}']), ('\u{232a}', &['\u{3009}']),
-        ('\u{2adc}', &['\u{2add}', '\u{338}']), ('\u{304c}', &['\u{304b}', '\u{3099}']),
-        ('\u{304e}', &['\u{304d}', '\u{3099}']), ('\u{3050}', &['\u{304f}', '\u{3099}']),
-        ('\u{3052}', &['\u{3051}', '\u{3099}']), ('\u{3054}', &['\u{3053}', '\u{3099}']),
-        ('\u{3056}', &['\u{3055}', '\u{3099}']), ('\u{3058}', &['\u{3057}', '\u{3099}']),
-        ('\u{305a}', &['\u{3059}', '\u{3099}']), ('\u{305c}', &['\u{305b}', '\u{3099}']),
-        ('\u{305e}', &['\u{305d}', '\u{3099}']), ('\u{3060}', &['\u{305f}', '\u{3099}']),
-        ('\u{3062}', &['\u{3061}', '\u{3099}']), ('\u{3065}', &['\u{3064}', '\u{3099}']),
-        ('\u{3067}', &['\u{3066}', '\u{3099}']), ('\u{3069}', &['\u{3068}', '\u{3099}']),
-        ('\u{3070}', &['\u{306f}', '\u{3099}']), ('\u{3071}', &['\u{306f}', '\u{309a}']),
-        ('\u{3073}', &['\u{3072}', '\u{3099}']), ('\u{3074}', &['\u{3072}', '\u{309a}']),
-        ('\u{3076}', &['\u{3075}', '\u{3099}']), ('\u{3077}', &['\u{3075}', '\u{309a}']),
-        ('\u{3079}', &['\u{3078}', '\u{3099}']), ('\u{307a}', &['\u{3078}', '\u{309a}']),
-        ('\u{307c}', &['\u{307b}', '\u{3099}']), ('\u{307d}', &['\u{307b}', '\u{309a}']),
-        ('\u{3094}', &['\u{3046}', '\u{3099}']), ('\u{309e}', &['\u{309d}', '\u{3099}']),
-        ('\u{30ac}', &['\u{30ab}', '\u{3099}']), ('\u{30ae}', &['\u{30ad}', '\u{3099}']),
-        ('\u{30b0}', &['\u{30af}', '\u{3099}']), ('\u{30b2}', &['\u{30b1}', '\u{3099}']),
-        ('\u{30b4}', &['\u{30b3}', '\u{3099}']), ('\u{30b6}', &['\u{30b5}', '\u{3099}']),
-        ('\u{30b8}', &['\u{30b7}', '\u{3099}']), ('\u{30ba}', &['\u{30b9}', '\u{3099}']),
-        ('\u{30bc}', &['\u{30bb}', '\u{3099}']), ('\u{30be}', &['\u{30bd}', '\u{3099}']),
-        ('\u{30c0}', &['\u{30bf}', '\u{3099}']), ('\u{30c2}', &['\u{30c1}', '\u{3099}']),
-        ('\u{30c5}', &['\u{30c4}', '\u{3099}']), ('\u{30c7}', &['\u{30c6}', '\u{3099}']),
-        ('\u{30c9}', &['\u{30c8}', '\u{3099}']), ('\u{30d0}', &['\u{30cf}', '\u{3099}']),
-        ('\u{30d1}', &['\u{30cf}', '\u{309a}']), ('\u{30d3}', &['\u{30d2}', '\u{3099}']),
-        ('\u{30d4}', &['\u{30d2}', '\u{309a}']), ('\u{30d6}', &['\u{30d5}', '\u{3099}']),
-        ('\u{30d7}', &['\u{30d5}', '\u{309a}']), ('\u{30d9}', &['\u{30d8}', '\u{3099}']),
-        ('\u{30da}', &['\u{30d8}', '\u{309a}']), ('\u{30dc}', &['\u{30db}', '\u{3099}']),
-        ('\u{30dd}', &['\u{30db}', '\u{309a}']), ('\u{30f4}', &['\u{30a6}', '\u{3099}']),
-        ('\u{30f7}', &['\u{30ef}', '\u{3099}']), ('\u{30f8}', &['\u{30f0}', '\u{3099}']),
-        ('\u{30f9}', &['\u{30f1}', '\u{3099}']), ('\u{30fa}', &['\u{30f2}', '\u{3099}']),
-        ('\u{30fe}', &['\u{30fd}', '\u{3099}']), ('\u{f900}', &['\u{8c48}']), ('\u{f901}',
-        &['\u{66f4}']), ('\u{f902}', &['\u{8eca}']), ('\u{f903}', &['\u{8cc8}']), ('\u{f904}',
-        &['\u{6ed1}']), ('\u{f905}', &['\u{4e32}']), ('\u{f906}', &['\u{53e5}']), ('\u{f907}',
-        &['\u{9f9c}']), ('\u{f908}', &['\u{9f9c}']), ('\u{f909}', &['\u{5951}']), ('\u{f90a}',
-        &['\u{91d1}']), ('\u{f90b}', &['\u{5587}']), ('\u{f90c}', &['\u{5948}']), ('\u{f90d}',
-        &['\u{61f6}']), ('\u{f90e}', &['\u{7669}']), ('\u{f90f}', &['\u{7f85}']), ('\u{f910}',
-        &['\u{863f}']), ('\u{f911}', &['\u{87ba}']), ('\u{f912}', &['\u{88f8}']), ('\u{f913}',
-        &['\u{908f}']), ('\u{f914}', &['\u{6a02}']), ('\u{f915}', &['\u{6d1b}']), ('\u{f916}',
-        &['\u{70d9}']), ('\u{f917}', &['\u{73de}']), ('\u{f918}', &['\u{843d}']), ('\u{f919}',
-        &['\u{916a}']), ('\u{f91a}', &['\u{99f1}']), ('\u{f91b}', &['\u{4e82}']), ('\u{f91c}',
-        &['\u{5375}']), ('\u{f91d}', &['\u{6b04}']), ('\u{f91e}', &['\u{721b}']), ('\u{f91f}',
-        &['\u{862d}']), ('\u{f920}', &['\u{9e1e}']), ('\u{f921}', &['\u{5d50}']), ('\u{f922}',
-        &['\u{6feb}']), ('\u{f923}', &['\u{85cd}']), ('\u{f924}', &['\u{8964}']), ('\u{f925}',
-        &['\u{62c9}']), ('\u{f926}', &['\u{81d8}']), ('\u{f927}', &['\u{881f}']), ('\u{f928}',
-        &['\u{5eca}']), ('\u{f929}', &['\u{6717}']), ('\u{f92a}', &['\u{6d6a}']), ('\u{f92b}',
-        &['\u{72fc}']), ('\u{f92c}', &['\u{90ce}']), ('\u{f92d}', &['\u{4f86}']), ('\u{f92e}',
-        &['\u{51b7}']), ('\u{f92f}', &['\u{52de}']), ('\u{f930}', &['\u{64c4}']), ('\u{f931}',
-        &['\u{6ad3}']), ('\u{f932}', &['\u{7210}']), ('\u{f933}', &['\u{76e7}']), ('\u{f934}',
-        &['\u{8001}']), ('\u{f935}', &['\u{8606}']), ('\u{f936}', &['\u{865c}']), ('\u{f937}',
-        &['\u{8def}']), ('\u{f938}', &['\u{9732}']), ('\u{f939}', &['\u{9b6f}']), ('\u{f93a}',
-        &['\u{9dfa}']), ('\u{f93b}', &['\u{788c}']), ('\u{f93c}', &['\u{797f}']), ('\u{f93d}',
-        &['\u{7da0}']), ('\u{f93e}', &['\u{83c9}']), ('\u{f93f}', &['\u{9304}']), ('\u{f940}',
-        &['\u{9e7f}']), ('\u{f941}', &['\u{8ad6}']), ('\u{f942}', &['\u{58df}']), ('\u{f943}',
-        &['\u{5f04}']), ('\u{f944}', &['\u{7c60}']), ('\u{f945}', &['\u{807e}']), ('\u{f946}',
-        &['\u{7262}']), ('\u{f947}', &['\u{78ca}']), ('\u{f948}', &['\u{8cc2}']), ('\u{f949}',
-        &['\u{96f7}']), ('\u{f94a}', &['\u{58d8}']), ('\u{f94b}', &['\u{5c62}']), ('\u{f94c}',
-        &['\u{6a13}']), ('\u{f94d}', &['\u{6dda}']), ('\u{f94e}', &['\u{6f0f}']), ('\u{f94f}',
-        &['\u{7d2f}']), ('\u{f950}', &['\u{7e37}']), ('\u{f951}', &['\u{964b}']), ('\u{f952}',
-        &['\u{52d2}']), ('\u{f953}', &['\u{808b}']), ('\u{f954}', &['\u{51dc}']), ('\u{f955}',
-        &['\u{51cc}']), ('\u{f956}', &['\u{7a1c}']), ('\u{f957}', &['\u{7dbe}']), ('\u{f958}',
-        &['\u{83f1}']), ('\u{f959}', &['\u{9675}']), ('\u{f95a}', &['\u{8b80}']), ('\u{f95b}',
-        &['\u{62cf}']), ('\u{f95c}', &['\u{6a02}']), ('\u{f95d}', &['\u{8afe}']), ('\u{f95e}',
-        &['\u{4e39}']), ('\u{f95f}', &['\u{5be7}']), ('\u{f960}', &['\u{6012}']), ('\u{f961}',
-        &['\u{7387}']), ('\u{f962}', &['\u{7570}']), ('\u{f963}', &['\u{5317}']), ('\u{f964}',
-        &['\u{78fb}']), ('\u{f965}', &['\u{4fbf}']), ('\u{f966}', &['\u{5fa9}']), ('\u{f967}',
-        &['\u{4e0d}']), ('\u{f968}', &['\u{6ccc}']), ('\u{f969}', &['\u{6578}']), ('\u{f96a}',
-        &['\u{7d22}']), ('\u{f96b}', &['\u{53c3}']), ('\u{f96c}', &['\u{585e}']), ('\u{f96d}',
-        &['\u{7701}']), ('\u{f96e}', &['\u{8449}']), ('\u{f96f}', &['\u{8aaa}']), ('\u{f970}',
-        &['\u{6bba}']), ('\u{f971}', &['\u{8fb0}']), ('\u{f972}', &['\u{6c88}']), ('\u{f973}',
-        &['\u{62fe}']), ('\u{f974}', &['\u{82e5}']), ('\u{f975}', &['\u{63a0}']), ('\u{f976}',
-        &['\u{7565}']), ('\u{f977}', &['\u{4eae}']), ('\u{f978}', &['\u{5169}']), ('\u{f979}',
-        &['\u{51c9}']), ('\u{f97a}', &['\u{6881}']), ('\u{f97b}', &['\u{7ce7}']), ('\u{f97c}',
-        &['\u{826f}']), ('\u{f97d}', &['\u{8ad2}']), ('\u{f97e}', &['\u{91cf}']), ('\u{f97f}',
-        &['\u{52f5}']), ('\u{f980}', &['\u{5442}']), ('\u{f981}', &['\u{5973}']), ('\u{f982}',
-        &['\u{5eec}']), ('\u{f983}', &['\u{65c5}']), ('\u{f984}', &['\u{6ffe}']), ('\u{f985}',
-        &['\u{792a}']), ('\u{f986}', &['\u{95ad}']), ('\u{f987}', &['\u{9a6a}']), ('\u{f988}',
-        &['\u{9e97}']), ('\u{f989}', &['\u{9ece}']), ('\u{f98a}', &['\u{529b}']), ('\u{f98b}',
-        &['\u{66c6}']), ('\u{f98c}', &['\u{6b77}']), ('\u{f98d}', &['\u{8f62}']), ('\u{f98e}',
-        &['\u{5e74}']), ('\u{f98f}', &['\u{6190}']), ('\u{f990}', &['\u{6200}']), ('\u{f991}',
-        &['\u{649a}']), ('\u{f992}', &['\u{6f23}']), ('\u{f993}', &['\u{7149}']), ('\u{f994}',
-        &['\u{7489}']), ('\u{f995}', &['\u{79ca}']), ('\u{f996}', &['\u{7df4}']), ('\u{f997}',
-        &['\u{806f}']), ('\u{f998}', &['\u{8f26}']), ('\u{f999}', &['\u{84ee}']), ('\u{f99a}',
-        &['\u{9023}']), ('\u{f99b}', &['\u{934a}']), ('\u{f99c}', &['\u{5217}']), ('\u{f99d}',
-        &['\u{52a3}']), ('\u{f99e}', &['\u{54bd}']), ('\u{f99f}', &['\u{70c8}']), ('\u{f9a0}',
-        &['\u{88c2}']), ('\u{f9a1}', &['\u{8aaa}']), ('\u{f9a2}', &['\u{5ec9}']), ('\u{f9a3}',
-        &['\u{5ff5}']), ('\u{f9a4}', &['\u{637b}']), ('\u{f9a5}', &['\u{6bae}']), ('\u{f9a6}',
-        &['\u{7c3e}']), ('\u{f9a7}', &['\u{7375}']), ('\u{f9a8}', &['\u{4ee4}']), ('\u{f9a9}',
-        &['\u{56f9}']), ('\u{f9aa}', &['\u{5be7}']), ('\u{f9ab}', &['\u{5dba}']), ('\u{f9ac}',
-        &['\u{601c}']), ('\u{f9ad}', &['\u{73b2}']), ('\u{f9ae}', &['\u{7469}']), ('\u{f9af}',
-        &['\u{7f9a}']), ('\u{f9b0}', &['\u{8046}']), ('\u{f9b1}', &['\u{9234}']), ('\u{f9b2}',
-        &['\u{96f6}']), ('\u{f9b3}', &['\u{9748}']), ('\u{f9b4}', &['\u{9818}']), ('\u{f9b5}',
-        &['\u{4f8b}']), ('\u{f9b6}', &['\u{79ae}']), ('\u{f9b7}', &['\u{91b4}']), ('\u{f9b8}',
-        &['\u{96b8}']), ('\u{f9b9}', &['\u{60e1}']), ('\u{f9ba}', &['\u{4e86}']), ('\u{f9bb}',
-        &['\u{50da}']), ('\u{f9bc}', &['\u{5bee}']), ('\u{f9bd}', &['\u{5c3f}']), ('\u{f9be}',
-        &['\u{6599}']), ('\u{f9bf}', &['\u{6a02}']), ('\u{f9c0}', &['\u{71ce}']), ('\u{f9c1}',
-        &['\u{7642}']), ('\u{f9c2}', &['\u{84fc}']), ('\u{f9c3}', &['\u{907c}']), ('\u{f9c4}',
-        &['\u{9f8d}']), ('\u{f9c5}', &['\u{6688}']), ('\u{f9c6}', &['\u{962e}']), ('\u{f9c7}',
-        &['\u{5289}']), ('\u{f9c8}', &['\u{677b}']), ('\u{f9c9}', &['\u{67f3}']), ('\u{f9ca}',
-        &['\u{6d41}']), ('\u{f9cb}', &['\u{6e9c}']), ('\u{f9cc}', &['\u{7409}']), ('\u{f9cd}',
-        &['\u{7559}']), ('\u{f9ce}', &['\u{786b}']), ('\u{f9cf}', &['\u{7d10}']), ('\u{f9d0}',
-        &['\u{985e}']), ('\u{f9d1}', &['\u{516d}']), ('\u{f9d2}', &['\u{622e}']), ('\u{f9d3}',
-        &['\u{9678}']), ('\u{f9d4}', &['\u{502b}']), ('\u{f9d5}', &['\u{5d19}']), ('\u{f9d6}',
-        &['\u{6dea}']), ('\u{f9d7}', &['\u{8f2a}']), ('\u{f9d8}', &['\u{5f8b}']), ('\u{f9d9}',
-        &['\u{6144}']), ('\u{f9da}', &['\u{6817}']), ('\u{f9db}', &['\u{7387}']), ('\u{f9dc}',
-        &['\u{9686}']), ('\u{f9dd}', &['\u{5229}']), ('\u{f9de}', &['\u{540f}']), ('\u{f9df}',
-        &['\u{5c65}']), ('\u{f9e0}', &['\u{6613}']), ('\u{f9e1}', &['\u{674e}']), ('\u{f9e2}',
-        &['\u{68a8}']), ('\u{f9e3}', &['\u{6ce5}']), ('\u{f9e4}', &['\u{7406}']), ('\u{f9e5}',
-        &['\u{75e2}']), ('\u{f9e6}', &['\u{7f79}']), ('\u{f9e7}', &['\u{88cf}']), ('\u{f9e8}',
-        &['\u{88e1}']), ('\u{f9e9}', &['\u{91cc}']), ('\u{f9ea}', &['\u{96e2}']), ('\u{f9eb}',
-        &['\u{533f}']), ('\u{f9ec}', &['\u{6eba}']), ('\u{f9ed}', &['\u{541d}']), ('\u{f9ee}',
-        &['\u{71d0}']), ('\u{f9ef}', &['\u{7498}']), ('\u{f9f0}', &['\u{85fa}']), ('\u{f9f1}',
-        &['\u{96a3}']), ('\u{f9f2}', &['\u{9c57}']), ('\u{f9f3}', &['\u{9e9f}']), ('\u{f9f4}',
-        &['\u{6797}']), ('\u{f9f5}', &['\u{6dcb}']), ('\u{f9f6}', &['\u{81e8}']), ('\u{f9f7}',
-        &['\u{7acb}']), ('\u{f9f8}', &['\u{7b20}']), ('\u{f9f9}', &['\u{7c92}']), ('\u{f9fa}',
-        &['\u{72c0}']), ('\u{f9fb}', &['\u{7099}']), ('\u{f9fc}', &['\u{8b58}']), ('\u{f9fd}',
-        &['\u{4ec0}']), ('\u{f9fe}', &['\u{8336}']), ('\u{f9ff}', &['\u{523a}']), ('\u{fa00}',
-        &['\u{5207}']), ('\u{fa01}', &['\u{5ea6}']), ('\u{fa02}', &['\u{62d3}']), ('\u{fa03}',
-        &['\u{7cd6}']), ('\u{fa04}', &['\u{5b85}']), ('\u{fa05}', &['\u{6d1e}']), ('\u{fa06}',
-        &['\u{66b4}']), ('\u{fa07}', &['\u{8f3b}']), ('\u{fa08}', &['\u{884c}']), ('\u{fa09}',
-        &['\u{964d}']), ('\u{fa0a}', &['\u{898b}']), ('\u{fa0b}', &['\u{5ed3}']), ('\u{fa0c}',
-        &['\u{5140}']), ('\u{fa0d}', &['\u{55c0}']), ('\u{fa10}', &['\u{585a}']), ('\u{fa12}',
-        &['\u{6674}']), ('\u{fa15}', &['\u{51de}']), ('\u{fa16}', &['\u{732a}']), ('\u{fa17}',
-        &['\u{76ca}']), ('\u{fa18}', &['\u{793c}']), ('\u{fa19}', &['\u{795e}']), ('\u{fa1a}',
-        &['\u{7965}']), ('\u{fa1b}', &['\u{798f}']), ('\u{fa1c}', &['\u{9756}']), ('\u{fa1d}',
-        &['\u{7cbe}']), ('\u{fa1e}', &['\u{7fbd}']), ('\u{fa20}', &['\u{8612}']), ('\u{fa22}',
-        &['\u{8af8}']), ('\u{fa25}', &['\u{9038}']), ('\u{fa26}', &['\u{90fd}']), ('\u{fa2a}',
-        &['\u{98ef}']), ('\u{fa2b}', &['\u{98fc}']), ('\u{fa2c}', &['\u{9928}']), ('\u{fa2d}',
-        &['\u{9db4}']), ('\u{fa2e}', &['\u{90de}']), ('\u{fa2f}', &['\u{96b7}']), ('\u{fa30}',
-        &['\u{4fae}']), ('\u{fa31}', &['\u{50e7}']), ('\u{fa32}', &['\u{514d}']), ('\u{fa33}',
-        &['\u{52c9}']), ('\u{fa34}', &['\u{52e4}']), ('\u{fa35}', &['\u{5351}']), ('\u{fa36}',
-        &['\u{559d}']), ('\u{fa37}', &['\u{5606}']), ('\u{fa38}', &['\u{5668}']), ('\u{fa39}',
-        &['\u{5840}']), ('\u{fa3a}', &['\u{58a8}']), ('\u{fa3b}', &['\u{5c64}']), ('\u{fa3c}',
-        &['\u{5c6e}']), ('\u{fa3d}', &['\u{6094}']), ('\u{fa3e}', &['\u{6168}']), ('\u{fa3f}',
-        &['\u{618e}']), ('\u{fa40}', &['\u{61f2}']), ('\u{fa41}', &['\u{654f}']), ('\u{fa42}',
-        &['\u{65e2}']), ('\u{fa43}', &['\u{6691}']), ('\u{fa44}', &['\u{6885}']), ('\u{fa45}',
-        &['\u{6d77}']), ('\u{fa46}', &['\u{6e1a}']), ('\u{fa47}', &['\u{6f22}']), ('\u{fa48}',
-        &['\u{716e}']), ('\u{fa49}', &['\u{722b}']), ('\u{fa4a}', &['\u{7422}']), ('\u{fa4b}',
-        &['\u{7891}']), ('\u{fa4c}', &['\u{793e}']), ('\u{fa4d}', &['\u{7949}']), ('\u{fa4e}',
-        &['\u{7948}']), ('\u{fa4f}', &['\u{7950}']), ('\u{fa50}', &['\u{7956}']), ('\u{fa51}',
-        &['\u{795d}']), ('\u{fa52}', &['\u{798d}']), ('\u{fa53}', &['\u{798e}']), ('\u{fa54}',
-        &['\u{7a40}']), ('\u{fa55}', &['\u{7a81}']), ('\u{fa56}', &['\u{7bc0}']), ('\u{fa57}',
-        &['\u{7df4}']), ('\u{fa58}', &['\u{7e09}']), ('\u{fa59}', &['\u{7e41}']), ('\u{fa5a}',
-        &['\u{7f72}']), ('\u{fa5b}', &['\u{8005}']), ('\u{fa5c}', &['\u{81ed}']), ('\u{fa5d}',
-        &['\u{8279}']), ('\u{fa5e}', &['\u{8279}']), ('\u{fa5f}', &['\u{8457}']), ('\u{fa60}',
-        &['\u{8910}']), ('\u{fa61}', &['\u{8996}']), ('\u{fa62}', &['\u{8b01}']), ('\u{fa63}',
-        &['\u{8b39}']), ('\u{fa64}', &['\u{8cd3}']), ('\u{fa65}', &['\u{8d08}']), ('\u{fa66}',
-        &['\u{8fb6}']), ('\u{fa67}', &['\u{9038}']), ('\u{fa68}', &['\u{96e3}']), ('\u{fa69}',
-        &['\u{97ff}']), ('\u{fa6a}', &['\u{983b}']), ('\u{fa6b}', &['\u{6075}']), ('\u{fa6c}',
-        &['\u{242ee}']), ('\u{fa6d}', &['\u{8218}']), ('\u{fa70}', &['\u{4e26}']), ('\u{fa71}',
-        &['\u{51b5}']), ('\u{fa72}', &['\u{5168}']), ('\u{fa73}', &['\u{4f80}']), ('\u{fa74}',
-        &['\u{5145}']), ('\u{fa75}', &['\u{5180}']), ('\u{fa76}', &['\u{52c7}']), ('\u{fa77}',
-        &['\u{52fa}']), ('\u{fa78}', &['\u{559d}']), ('\u{fa79}', &['\u{5555}']), ('\u{fa7a}',
-        &['\u{5599}']), ('\u{fa7b}', &['\u{55e2}']), ('\u{fa7c}', &['\u{585a}']), ('\u{fa7d}',
-        &['\u{58b3}']), ('\u{fa7e}', &['\u{5944}']), ('\u{fa7f}', &['\u{5954}']), ('\u{fa80}',
-        &['\u{5a62}']), ('\u{fa81}', &['\u{5b28}']), ('\u{fa82}', &['\u{5ed2}']), ('\u{fa83}',
-        &['\u{5ed9}']), ('\u{fa84}', &['\u{5f69}']), ('\u{fa85}', &['\u{5fad}']), ('\u{fa86}',
-        &['\u{60d8}']), ('\u{fa87}', &['\u{614e}']), ('\u{fa88}', &['\u{6108}']), ('\u{fa89}',
-        &['\u{618e}']), ('\u{fa8a}', &['\u{6160}']), ('\u{fa8b}', &['\u{61f2}']), ('\u{fa8c}',
-        &['\u{6234}']), ('\u{fa8d}', &['\u{63c4}']), ('\u{fa8e}', &['\u{641c}']), ('\u{fa8f}',
-        &['\u{6452}']), ('\u{fa90}', &['\u{6556}']), ('\u{fa91}', &['\u{6674}']), ('\u{fa92}',
-        &['\u{6717}']), ('\u{fa93}', &['\u{671b}']), ('\u{fa94}', &['\u{6756}']), ('\u{fa95}',
-        &['\u{6b79}']), ('\u{fa96}', &['\u{6bba}']), ('\u{fa97}', &['\u{6d41}']), ('\u{fa98}',
-        &['\u{6edb}']), ('\u{fa99}', &['\u{6ecb}']), ('\u{fa9a}', &['\u{6f22}']), ('\u{fa9b}',
-        &['\u{701e}']), ('\u{fa9c}', &['\u{716e}']), ('\u{fa9d}', &['\u{77a7}']), ('\u{fa9e}',
-        &['\u{7235}']), ('\u{fa9f}', &['\u{72af}']), ('\u{faa0}', &['\u{732a}']), ('\u{faa1}',
-        &['\u{7471}']), ('\u{faa2}', &['\u{7506}']), ('\u{faa3}', &['\u{753b}']), ('\u{faa4}',
-        &['\u{761d}']), ('\u{faa5}', &['\u{761f}']), ('\u{faa6}', &['\u{76ca}']), ('\u{faa7}',
-        &['\u{76db}']), ('\u{faa8}', &['\u{76f4}']), ('\u{faa9}', &['\u{774a}']), ('\u{faaa}',
-        &['\u{7740}']), ('\u{faab}', &['\u{78cc}']), ('\u{faac}', &['\u{7ab1}']), ('\u{faad}',
-        &['\u{7bc0}']), ('\u{faae}', &['\u{7c7b}']), ('\u{faaf}', &['\u{7d5b}']), ('\u{fab0}',
-        &['\u{7df4}']), ('\u{fab1}', &['\u{7f3e}']), ('\u{fab2}', &['\u{8005}']), ('\u{fab3}',
-        &['\u{8352}']), ('\u{fab4}', &['\u{83ef}']), ('\u{fab5}', &['\u{8779}']), ('\u{fab6}',
-        &['\u{8941}']), ('\u{fab7}', &['\u{8986}']), ('\u{fab8}', &['\u{8996}']), ('\u{fab9}',
-        &['\u{8abf}']), ('\u{faba}', &['\u{8af8}']), ('\u{fabb}', &['\u{8acb}']), ('\u{fabc}',
-        &['\u{8b01}']), ('\u{fabd}', &['\u{8afe}']), ('\u{fabe}', &['\u{8aed}']), ('\u{fabf}',
-        &['\u{8b39}']), ('\u{fac0}', &['\u{8b8a}']), ('\u{fac1}', &['\u{8d08}']), ('\u{fac2}',
-        &['\u{8f38}']), ('\u{fac3}', &['\u{9072}']), ('\u{fac4}', &['\u{9199}']), ('\u{fac5}',
-        &['\u{9276}']), ('\u{fac6}', &['\u{967c}']), ('\u{fac7}', &['\u{96e3}']), ('\u{fac8}',
-        &['\u{9756}']), ('\u{fac9}', &['\u{97db}']), ('\u{faca}', &['\u{97ff}']), ('\u{facb}',
-        &['\u{980b}']), ('\u{facc}', &['\u{983b}']), ('\u{facd}', &['\u{9b12}']), ('\u{face}',
-        &['\u{9f9c}']), ('\u{facf}', &['\u{2284a}']), ('\u{fad0}', &['\u{22844}']), ('\u{fad1}',
-        &['\u{233d5}']), ('\u{fad2}', &['\u{3b9d}']), ('\u{fad3}', &['\u{4018}']), ('\u{fad4}',
-        &['\u{4039}']), ('\u{fad5}', &['\u{25249}']), ('\u{fad6}', &['\u{25cd0}']), ('\u{fad7}',
-        &['\u{27ed3}']), ('\u{fad8}', &['\u{9f43}']), ('\u{fad9}', &['\u{9f8e}']), ('\u{fb1d}',
-        &['\u{5d9}', '\u{5b4}']), ('\u{fb1f}', &['\u{5f2}', '\u{5b7}']), ('\u{fb2a}', &['\u{5e9}',
-        '\u{5c1}']), ('\u{fb2b}', &['\u{5e9}', '\u{5c2}']), ('\u{fb2c}', &['\u{fb49}', '\u{5c1}']),
-        ('\u{fb2d}', &['\u{fb49}', '\u{5c2}']), ('\u{fb2e}', &['\u{5d0}', '\u{5b7}']), ('\u{fb2f}',
-        &['\u{5d0}', '\u{5b8}']), ('\u{fb30}', &['\u{5d0}', '\u{5bc}']), ('\u{fb31}', &['\u{5d1}',
-        '\u{5bc}']), ('\u{fb32}', &['\u{5d2}', '\u{5bc}']), ('\u{fb33}', &['\u{5d3}', '\u{5bc}']),
-        ('\u{fb34}', &['\u{5d4}', '\u{5bc}']), ('\u{fb35}', &['\u{5d5}', '\u{5bc}']), ('\u{fb36}',
-        &['\u{5d6}', '\u{5bc}']), ('\u{fb38}', &['\u{5d8}', '\u{5bc}']), ('\u{fb39}', &['\u{5d9}',
-        '\u{5bc}']), ('\u{fb3a}', &['\u{5da}', '\u{5bc}']), ('\u{fb3b}', &['\u{5db}', '\u{5bc}']),
-        ('\u{fb3c}', &['\u{5dc}', '\u{5bc}']), ('\u{fb3e}', &['\u{5de}', '\u{5bc}']), ('\u{fb40}',
-        &['\u{5e0}', '\u{5bc}']), ('\u{fb41}', &['\u{5e1}', '\u{5bc}']), ('\u{fb43}', &['\u{5e3}',
-        '\u{5bc}']), ('\u{fb44}', &['\u{5e4}', '\u{5bc}']), ('\u{fb46}', &['\u{5e6}', '\u{5bc}']),
-        ('\u{fb47}', &['\u{5e7}', '\u{5bc}']), ('\u{fb48}', &['\u{5e8}', '\u{5bc}']), ('\u{fb49}',
-        &['\u{5e9}', '\u{5bc}']), ('\u{fb4a}', &['\u{5ea}', '\u{5bc}']), ('\u{fb4b}', &['\u{5d5}',
-        '\u{5b9}']), ('\u{fb4c}', &['\u{5d1}', '\u{5bf}']), ('\u{fb4d}', &['\u{5db}', '\u{5bf}']),
-        ('\u{fb4e}', &['\u{5e4}', '\u{5bf}']), ('\u{1109a}', &['\u{11099}', '\u{110ba}']),
-        ('\u{1109c}', &['\u{1109b}', '\u{110ba}']), ('\u{110ab}', &['\u{110a5}', '\u{110ba}']),
-        ('\u{1112e}', &['\u{11131}', '\u{11127}']), ('\u{1112f}', &['\u{11132}', '\u{11127}']),
-        ('\u{1134b}', &['\u{11347}', '\u{1133e}']), ('\u{1134c}', &['\u{11347}', '\u{11357}']),
-        ('\u{114bb}', &['\u{114b9}', '\u{114ba}']), ('\u{114bc}', &['\u{114b9}', '\u{114b0}']),
-        ('\u{114be}', &['\u{114b9}', '\u{114bd}']), ('\u{115ba}', &['\u{115b8}', '\u{115af}']),
-        ('\u{115bb}', &['\u{115b9}', '\u{115af}']), ('\u{1d15e}', &['\u{1d157}', '\u{1d165}']),
-        ('\u{1d15f}', &['\u{1d158}', '\u{1d165}']), ('\u{1d160}', &['\u{1d15f}', '\u{1d16e}']),
-        ('\u{1d161}', &['\u{1d15f}', '\u{1d16f}']), ('\u{1d162}', &['\u{1d15f}', '\u{1d170}']),
-        ('\u{1d163}', &['\u{1d15f}', '\u{1d171}']), ('\u{1d164}', &['\u{1d15f}', '\u{1d172}']),
-        ('\u{1d1bb}', &['\u{1d1b9}', '\u{1d165}']), ('\u{1d1bc}', &['\u{1d1ba}', '\u{1d165}']),
-        ('\u{1d1bd}', &['\u{1d1bb}', '\u{1d16e}']), ('\u{1d1be}', &['\u{1d1bc}', '\u{1d16e}']),
-        ('\u{1d1bf}', &['\u{1d1bb}', '\u{1d16f}']), ('\u{1d1c0}', &['\u{1d1bc}', '\u{1d16f}']),
-        ('\u{2f800}', &['\u{4e3d}']), ('\u{2f801}', &['\u{4e38}']), ('\u{2f802}', &['\u{4e41}']),
-        ('\u{2f803}', &['\u{20122}']), ('\u{2f804}', &['\u{4f60}']), ('\u{2f805}', &['\u{4fae}']),
-        ('\u{2f806}', &['\u{4fbb}']), ('\u{2f807}', &['\u{5002}']), ('\u{2f808}', &['\u{507a}']),
-        ('\u{2f809}', &['\u{5099}']), ('\u{2f80a}', &['\u{50e7}']), ('\u{2f80b}', &['\u{50cf}']),
-        ('\u{2f80c}', &['\u{349e}']), ('\u{2f80d}', &['\u{2063a}']), ('\u{2f80e}', &['\u{514d}']),
-        ('\u{2f80f}', &['\u{5154}']), ('\u{2f810}', &['\u{5164}']), ('\u{2f811}', &['\u{5177}']),
-        ('\u{2f812}', &['\u{2051c}']), ('\u{2f813}', &['\u{34b9}']), ('\u{2f814}', &['\u{5167}']),
-        ('\u{2f815}', &['\u{518d}']), ('\u{2f816}', &['\u{2054b}']), ('\u{2f817}', &['\u{5197}']),
-        ('\u{2f818}', &['\u{51a4}']), ('\u{2f819}', &['\u{4ecc}']), ('\u{2f81a}', &['\u{51ac}']),
-        ('\u{2f81b}', &['\u{51b5}']), ('\u{2f81c}', &['\u{291df}']), ('\u{2f81d}', &['\u{51f5}']),
-        ('\u{2f81e}', &['\u{5203}']), ('\u{2f81f}', &['\u{34df}']), ('\u{2f820}', &['\u{523b}']),
-        ('\u{2f821}', &['\u{5246}']), ('\u{2f822}', &['\u{5272}']), ('\u{2f823}', &['\u{5277}']),
-        ('\u{2f824}', &['\u{3515}']), ('\u{2f825}', &['\u{52c7}']), ('\u{2f826}', &['\u{52c9}']),
-        ('\u{2f827}', &['\u{52e4}']), ('\u{2f828}', &['\u{52fa}']), ('\u{2f829}', &['\u{5305}']),
-        ('\u{2f82a}', &['\u{5306}']), ('\u{2f82b}', &['\u{5317}']), ('\u{2f82c}', &['\u{5349}']),
-        ('\u{2f82d}', &['\u{5351}']), ('\u{2f82e}', &['\u{535a}']), ('\u{2f82f}', &['\u{5373}']),
-        ('\u{2f830}', &['\u{537d}']), ('\u{2f831}', &['\u{537f}']), ('\u{2f832}', &['\u{537f}']),
-        ('\u{2f833}', &['\u{537f}']), ('\u{2f834}', &['\u{20a2c}']), ('\u{2f835}', &['\u{7070}']),
-        ('\u{2f836}', &['\u{53ca}']), ('\u{2f837}', &['\u{53df}']), ('\u{2f838}', &['\u{20b63}']),
-        ('\u{2f839}', &['\u{53eb}']), ('\u{2f83a}', &['\u{53f1}']), ('\u{2f83b}', &['\u{5406}']),
-        ('\u{2f83c}', &['\u{549e}']), ('\u{2f83d}', &['\u{5438}']), ('\u{2f83e}', &['\u{5448}']),
-        ('\u{2f83f}', &['\u{5468}']), ('\u{2f840}', &['\u{54a2}']), ('\u{2f841}', &['\u{54f6}']),
-        ('\u{2f842}', &['\u{5510}']), ('\u{2f843}', &['\u{5553}']), ('\u{2f844}', &['\u{5563}']),
-        ('\u{2f845}', &['\u{5584}']), ('\u{2f846}', &['\u{5584}']), ('\u{2f847}', &['\u{5599}']),
-        ('\u{2f848}', &['\u{55ab}']), ('\u{2f849}', &['\u{55b3}']), ('\u{2f84a}', &['\u{55c2}']),
-        ('\u{2f84b}', &['\u{5716}']), ('\u{2f84c}', &['\u{5606}']), ('\u{2f84d}', &['\u{5717}']),
-        ('\u{2f84e}', &['\u{5651}']), ('\u{2f84f}', &['\u{5674}']), ('\u{2f850}', &['\u{5207}']),
-        ('\u{2f851}', &['\u{58ee}']), ('\u{2f852}', &['\u{57ce}']), ('\u{2f853}', &['\u{57f4}']),
-        ('\u{2f854}', &['\u{580d}']), ('\u{2f855}', &['\u{578b}']), ('\u{2f856}', &['\u{5832}']),
-        ('\u{2f857}', &['\u{5831}']), ('\u{2f858}', &['\u{58ac}']), ('\u{2f859}', &['\u{214e4}']),
-        ('\u{2f85a}', &['\u{58f2}']), ('\u{2f85b}', &['\u{58f7}']), ('\u{2f85c}', &['\u{5906}']),
-        ('\u{2f85d}', &['\u{591a}']), ('\u{2f85e}', &['\u{5922}']), ('\u{2f85f}', &['\u{5962}']),
-        ('\u{2f860}', &['\u{216a8}']), ('\u{2f861}', &['\u{216ea}']), ('\u{2f862}', &['\u{59ec}']),
-        ('\u{2f863}', &['\u{5a1b}']), ('\u{2f864}', &['\u{5a27}']), ('\u{2f865}', &['\u{59d8}']),
-        ('\u{2f866}', &['\u{5a66}']), ('\u{2f867}', &['\u{36ee}']), ('\u{2f868}', &['\u{36fc}']),
-        ('\u{2f869}', &['\u{5b08}']), ('\u{2f86a}', &['\u{5b3e}']), ('\u{2f86b}', &['\u{5b3e}']),
-        ('\u{2f86c}', &['\u{219c8}']), ('\u{2f86d}', &['\u{5bc3}']), ('\u{2f86e}', &['\u{5bd8}']),
-        ('\u{2f86f}', &['\u{5be7}']), ('\u{2f870}', &['\u{5bf3}']), ('\u{2f871}', &['\u{21b18}']),
-        ('\u{2f872}', &['\u{5bff}']), ('\u{2f873}', &['\u{5c06}']), ('\u{2f874}', &['\u{5f53}']),
-        ('\u{2f875}', &['\u{5c22}']), ('\u{2f876}', &['\u{3781}']), ('\u{2f877}', &['\u{5c60}']),
-        ('\u{2f878}', &['\u{5c6e}']), ('\u{2f879}', &['\u{5cc0}']), ('\u{2f87a}', &['\u{5c8d}']),
-        ('\u{2f87b}', &['\u{21de4}']), ('\u{2f87c}', &['\u{5d43}']), ('\u{2f87d}', &['\u{21de6}']),
-        ('\u{2f87e}', &['\u{5d6e}']), ('\u{2f87f}', &['\u{5d6b}']), ('\u{2f880}', &['\u{5d7c}']),
-        ('\u{2f881}', &['\u{5de1}']), ('\u{2f882}', &['\u{5de2}']), ('\u{2f883}', &['\u{382f}']),
-        ('\u{2f884}', &['\u{5dfd}']), ('\u{2f885}', &['\u{5e28}']), ('\u{2f886}', &['\u{5e3d}']),
-        ('\u{2f887}', &['\u{5e69}']), ('\u{2f888}', &['\u{3862}']), ('\u{2f889}', &['\u{22183}']),
-        ('\u{2f88a}', &['\u{387c}']), ('\u{2f88b}', &['\u{5eb0}']), ('\u{2f88c}', &['\u{5eb3}']),
-        ('\u{2f88d}', &['\u{5eb6}']), ('\u{2f88e}', &['\u{5eca}']), ('\u{2f88f}', &['\u{2a392}']),
-        ('\u{2f890}', &['\u{5efe}']), ('\u{2f891}', &['\u{22331}']), ('\u{2f892}', &['\u{22331}']),
-        ('\u{2f893}', &['\u{8201}']), ('\u{2f894}', &['\u{5f22}']), ('\u{2f895}', &['\u{5f22}']),
-        ('\u{2f896}', &['\u{38c7}']), ('\u{2f897}', &['\u{232b8}']), ('\u{2f898}', &['\u{261da}']),
-        ('\u{2f899}', &['\u{5f62}']), ('\u{2f89a}', &['\u{5f6b}']), ('\u{2f89b}', &['\u{38e3}']),
-        ('\u{2f89c}', &['\u{5f9a}']), ('\u{2f89d}', &['\u{5fcd}']), ('\u{2f89e}', &['\u{5fd7}']),
-        ('\u{2f89f}', &['\u{5ff9}']), ('\u{2f8a0}', &['\u{6081}']), ('\u{2f8a1}', &['\u{393a}']),
-        ('\u{2f8a2}', &['\u{391c}']), ('\u{2f8a3}', &['\u{6094}']), ('\u{2f8a4}', &['\u{226d4}']),
-        ('\u{2f8a5}', &['\u{60c7}']), ('\u{2f8a6}', &['\u{6148}']), ('\u{2f8a7}', &['\u{614c}']),
-        ('\u{2f8a8}', &['\u{614e}']), ('\u{2f8a9}', &['\u{614c}']), ('\u{2f8aa}', &['\u{617a}']),
-        ('\u{2f8ab}', &['\u{618e}']), ('\u{2f8ac}', &['\u{61b2}']), ('\u{2f8ad}', &['\u{61a4}']),
-        ('\u{2f8ae}', &['\u{61af}']), ('\u{2f8af}', &['\u{61de}']), ('\u{2f8b0}', &['\u{61f2}']),
-        ('\u{2f8b1}', &['\u{61f6}']), ('\u{2f8b2}', &['\u{6210}']), ('\u{2f8b3}', &['\u{621b}']),
-        ('\u{2f8b4}', &['\u{625d}']), ('\u{2f8b5}', &['\u{62b1}']), ('\u{2f8b6}', &['\u{62d4}']),
-        ('\u{2f8b7}', &['\u{6350}']), ('\u{2f8b8}', &['\u{22b0c}']), ('\u{2f8b9}', &['\u{633d}']),
-        ('\u{2f8ba}', &['\u{62fc}']), ('\u{2f8bb}', &['\u{6368}']), ('\u{2f8bc}', &['\u{6383}']),
-        ('\u{2f8bd}', &['\u{63e4}']), ('\u{2f8be}', &['\u{22bf1}']), ('\u{2f8bf}', &['\u{6422}']),
-        ('\u{2f8c0}', &['\u{63c5}']), ('\u{2f8c1}', &['\u{63a9}']), ('\u{2f8c2}', &['\u{3a2e}']),
-        ('\u{2f8c3}', &['\u{6469}']), ('\u{2f8c4}', &['\u{647e}']), ('\u{2f8c5}', &['\u{649d}']),
-        ('\u{2f8c6}', &['\u{6477}']), ('\u{2f8c7}', &['\u{3a6c}']), ('\u{2f8c8}', &['\u{654f}']),
-        ('\u{2f8c9}', &['\u{656c}']), ('\u{2f8ca}', &['\u{2300a}']), ('\u{2f8cb}', &['\u{65e3}']),
-        ('\u{2f8cc}', &['\u{66f8}']), ('\u{2f8cd}', &['\u{6649}']), ('\u{2f8ce}', &['\u{3b19}']),
-        ('\u{2f8cf}', &['\u{6691}']), ('\u{2f8d0}', &['\u{3b08}']), ('\u{2f8d1}', &['\u{3ae4}']),
-        ('\u{2f8d2}', &['\u{5192}']), ('\u{2f8d3}', &['\u{5195}']), ('\u{2f8d4}', &['\u{6700}']),
-        ('\u{2f8d5}', &['\u{669c}']), ('\u{2f8d6}', &['\u{80ad}']), ('\u{2f8d7}', &['\u{43d9}']),
-        ('\u{2f8d8}', &['\u{6717}']), ('\u{2f8d9}', &['\u{671b}']), ('\u{2f8da}', &['\u{6721}']),
-        ('\u{2f8db}', &['\u{675e}']), ('\u{2f8dc}', &['\u{6753}']), ('\u{2f8dd}', &['\u{233c3}']),
-        ('\u{2f8de}', &['\u{3b49}']), ('\u{2f8df}', &['\u{67fa}']), ('\u{2f8e0}', &['\u{6785}']),
-        ('\u{2f8e1}', &['\u{6852}']), ('\u{2f8e2}', &['\u{6885}']), ('\u{2f8e3}', &['\u{2346d}']),
-        ('\u{2f8e4}', &['\u{688e}']), ('\u{2f8e5}', &['\u{681f}']), ('\u{2f8e6}', &['\u{6914}']),
-        ('\u{2f8e7}', &['\u{3b9d}']), ('\u{2f8e8}', &['\u{6942}']), ('\u{2f8e9}', &['\u{69a3}']),
-        ('\u{2f8ea}', &['\u{69ea}']), ('\u{2f8eb}', &['\u{6aa8}']), ('\u{2f8ec}', &['\u{236a3}']),
-        ('\u{2f8ed}', &['\u{6adb}']), ('\u{2f8ee}', &['\u{3c18}']), ('\u{2f8ef}', &['\u{6b21}']),
-        ('\u{2f8f0}', &['\u{238a7}']), ('\u{2f8f1}', &['\u{6b54}']), ('\u{2f8f2}', &['\u{3c4e}']),
-        ('\u{2f8f3}', &['\u{6b72}']), ('\u{2f8f4}', &['\u{6b9f}']), ('\u{2f8f5}', &['\u{6bba}']),
-        ('\u{2f8f6}', &['\u{6bbb}']), ('\u{2f8f7}', &['\u{23a8d}']), ('\u{2f8f8}', &['\u{21d0b}']),
-        ('\u{2f8f9}', &['\u{23afa}']), ('\u{2f8fa}', &['\u{6c4e}']), ('\u{2f8fb}', &['\u{23cbc}']),
-        ('\u{2f8fc}', &['\u{6cbf}']), ('\u{2f8fd}', &['\u{6ccd}']), ('\u{2f8fe}', &['\u{6c67}']),
-        ('\u{2f8ff}', &['\u{6d16}']), ('\u{2f900}', &['\u{6d3e}']), ('\u{2f901}', &['\u{6d77}']),
-        ('\u{2f902}', &['\u{6d41}']), ('\u{2f903}', &['\u{6d69}']), ('\u{2f904}', &['\u{6d78}']),
-        ('\u{2f905}', &['\u{6d85}']), ('\u{2f906}', &['\u{23d1e}']), ('\u{2f907}', &['\u{6d34}']),
-        ('\u{2f908}', &['\u{6e2f}']), ('\u{2f909}', &['\u{6e6e}']), ('\u{2f90a}', &['\u{3d33}']),
-        ('\u{2f90b}', &['\u{6ecb}']), ('\u{2f90c}', &['\u{6ec7}']), ('\u{2f90d}', &['\u{23ed1}']),
-        ('\u{2f90e}', &['\u{6df9}']), ('\u{2f90f}', &['\u{6f6e}']), ('\u{2f910}', &['\u{23f5e}']),
-        ('\u{2f911}', &['\u{23f8e}']), ('\u{2f912}', &['\u{6fc6}']), ('\u{2f913}', &['\u{7039}']),
-        ('\u{2f914}', &['\u{701e}']), ('\u{2f915}', &['\u{701b}']), ('\u{2f916}', &['\u{3d96}']),
-        ('\u{2f917}', &['\u{704a}']), ('\u{2f918}', &['\u{707d}']), ('\u{2f919}', &['\u{7077}']),
-        ('\u{2f91a}', &['\u{70ad}']), ('\u{2f91b}', &['\u{20525}']), ('\u{2f91c}', &['\u{7145}']),
-        ('\u{2f91d}', &['\u{24263}']), ('\u{2f91e}', &['\u{719c}']), ('\u{2f91f}', &['\u{243ab}']),
-        ('\u{2f920}', &['\u{7228}']), ('\u{2f921}', &['\u{7235}']), ('\u{2f922}', &['\u{7250}']),
-        ('\u{2f923}', &['\u{24608}']), ('\u{2f924}', &['\u{7280}']), ('\u{2f925}', &['\u{7295}']),
-        ('\u{2f926}', &['\u{24735}']), ('\u{2f927}', &['\u{24814}']), ('\u{2f928}', &['\u{737a}']),
-        ('\u{2f929}', &['\u{738b}']), ('\u{2f92a}', &['\u{3eac}']), ('\u{2f92b}', &['\u{73a5}']),
-        ('\u{2f92c}', &['\u{3eb8}']), ('\u{2f92d}', &['\u{3eb8}']), ('\u{2f92e}', &['\u{7447}']),
-        ('\u{2f92f}', &['\u{745c}']), ('\u{2f930}', &['\u{7471}']), ('\u{2f931}', &['\u{7485}']),
-        ('\u{2f932}', &['\u{74ca}']), ('\u{2f933}', &['\u{3f1b}']), ('\u{2f934}', &['\u{7524}']),
-        ('\u{2f935}', &['\u{24c36}']), ('\u{2f936}', &['\u{753e}']), ('\u{2f937}', &['\u{24c92}']),
-        ('\u{2f938}', &['\u{7570}']), ('\u{2f939}', &['\u{2219f}']), ('\u{2f93a}', &['\u{7610}']),
-        ('\u{2f93b}', &['\u{24fa1}']), ('\u{2f93c}', &['\u{24fb8}']), ('\u{2f93d}', &['\u{25044}']),
-        ('\u{2f93e}', &['\u{3ffc}']), ('\u{2f93f}', &['\u{4008}']), ('\u{2f940}', &['\u{76f4}']),
-        ('\u{2f941}', &['\u{250f3}']), ('\u{2f942}', &['\u{250f2}']), ('\u{2f943}', &['\u{25119}']),
-        ('\u{2f944}', &['\u{25133}']), ('\u{2f945}', &['\u{771e}']), ('\u{2f946}', &['\u{771f}']),
-        ('\u{2f947}', &['\u{771f}']), ('\u{2f948}', &['\u{774a}']), ('\u{2f949}', &['\u{4039}']),
-        ('\u{2f94a}', &['\u{778b}']), ('\u{2f94b}', &['\u{4046}']), ('\u{2f94c}', &['\u{4096}']),
-        ('\u{2f94d}', &['\u{2541d}']), ('\u{2f94e}', &['\u{784e}']), ('\u{2f94f}', &['\u{788c}']),
-        ('\u{2f950}', &['\u{78cc}']), ('\u{2f951}', &['\u{40e3}']), ('\u{2f952}', &['\u{25626}']),
-        ('\u{2f953}', &['\u{7956}']), ('\u{2f954}', &['\u{2569a}']), ('\u{2f955}', &['\u{256c5}']),
-        ('\u{2f956}', &['\u{798f}']), ('\u{2f957}', &['\u{79eb}']), ('\u{2f958}', &['\u{412f}']),
-        ('\u{2f959}', &['\u{7a40}']), ('\u{2f95a}', &['\u{7a4a}']), ('\u{2f95b}', &['\u{7a4f}']),
-        ('\u{2f95c}', &['\u{2597c}']), ('\u{2f95d}', &['\u{25aa7}']), ('\u{2f95e}', &['\u{25aa7}']),
-        ('\u{2f95f}', &['\u{7aee}']), ('\u{2f960}', &['\u{4202}']), ('\u{2f961}', &['\u{25bab}']),
-        ('\u{2f962}', &['\u{7bc6}']), ('\u{2f963}', &['\u{7bc9}']), ('\u{2f964}', &['\u{4227}']),
-        ('\u{2f965}', &['\u{25c80}']), ('\u{2f966}', &['\u{7cd2}']), ('\u{2f967}', &['\u{42a0}']),
-        ('\u{2f968}', &['\u{7ce8}']), ('\u{2f969}', &['\u{7ce3}']), ('\u{2f96a}', &['\u{7d00}']),
-        ('\u{2f96b}', &['\u{25f86}']), ('\u{2f96c}', &['\u{7d63}']), ('\u{2f96d}', &['\u{4301}']),
-        ('\u{2f96e}', &['\u{7dc7}']), ('\u{2f96f}', &['\u{7e02}']), ('\u{2f970}', &['\u{7e45}']),
-        ('\u{2f971}', &['\u{4334}']), ('\u{2f972}', &['\u{26228}']), ('\u{2f973}', &['\u{26247}']),
-        ('\u{2f974}', &['\u{4359}']), ('\u{2f975}', &['\u{262d9}']), ('\u{2f976}', &['\u{7f7a}']),
-        ('\u{2f977}', &['\u{2633e}']), ('\u{2f978}', &['\u{7f95}']), ('\u{2f979}', &['\u{7ffa}']),
-        ('\u{2f97a}', &['\u{8005}']), ('\u{2f97b}', &['\u{264da}']), ('\u{2f97c}', &['\u{26523}']),
-        ('\u{2f97d}', &['\u{8060}']), ('\u{2f97e}', &['\u{265a8}']), ('\u{2f97f}', &['\u{8070}']),
-        ('\u{2f980}', &['\u{2335f}']), ('\u{2f981}', &['\u{43d5}']), ('\u{2f982}', &['\u{80b2}']),
-        ('\u{2f983}', &['\u{8103}']), ('\u{2f984}', &['\u{440b}']), ('\u{2f985}', &['\u{813e}']),
-        ('\u{2f986}', &['\u{5ab5}']), ('\u{2f987}', &['\u{267a7}']), ('\u{2f988}', &['\u{267b5}']),
-        ('\u{2f989}', &['\u{23393}']), ('\u{2f98a}', &['\u{2339c}']), ('\u{2f98b}', &['\u{8201}']),
-        ('\u{2f98c}', &['\u{8204}']), ('\u{2f98d}', &['\u{8f9e}']), ('\u{2f98e}', &['\u{446b}']),
-        ('\u{2f98f}', &['\u{8291}']), ('\u{2f990}', &['\u{828b}']), ('\u{2f991}', &['\u{829d}']),
-        ('\u{2f992}', &['\u{52b3}']), ('\u{2f993}', &['\u{82b1}']), ('\u{2f994}', &['\u{82b3}']),
-        ('\u{2f995}', &['\u{82bd}']), ('\u{2f996}', &['\u{82e6}']), ('\u{2f997}', &['\u{26b3c}']),
-        ('\u{2f998}', &['\u{82e5}']), ('\u{2f999}', &['\u{831d}']), ('\u{2f99a}', &['\u{8363}']),
-        ('\u{2f99b}', &['\u{83ad}']), ('\u{2f99c}', &['\u{8323}']), ('\u{2f99d}', &['\u{83bd}']),
-        ('\u{2f99e}', &['\u{83e7}']), ('\u{2f99f}', &['\u{8457}']), ('\u{2f9a0}', &['\u{8353}']),
-        ('\u{2f9a1}', &['\u{83ca}']), ('\u{2f9a2}', &['\u{83cc}']), ('\u{2f9a3}', &['\u{83dc}']),
-        ('\u{2f9a4}', &['\u{26c36}']), ('\u{2f9a5}', &['\u{26d6b}']), ('\u{2f9a6}', &['\u{26cd5}']),
-        ('\u{2f9a7}', &['\u{452b}']), ('\u{2f9a8}', &['\u{84f1}']), ('\u{2f9a9}', &['\u{84f3}']),
-        ('\u{2f9aa}', &['\u{8516}']), ('\u{2f9ab}', &['\u{273ca}']), ('\u{2f9ac}', &['\u{8564}']),
-        ('\u{2f9ad}', &['\u{26f2c}']), ('\u{2f9ae}', &['\u{455d}']), ('\u{2f9af}', &['\u{4561}']),
-        ('\u{2f9b0}', &['\u{26fb1}']), ('\u{2f9b1}', &['\u{270d2}']), ('\u{2f9b2}', &['\u{456b}']),
-        ('\u{2f9b3}', &['\u{8650}']), ('\u{2f9b4}', &['\u{865c}']), ('\u{2f9b5}', &['\u{8667}']),
-        ('\u{2f9b6}', &['\u{8669}']), ('\u{2f9b7}', &['\u{86a9}']), ('\u{2f9b8}', &['\u{8688}']),
-        ('\u{2f9b9}', &['\u{870e}']), ('\u{2f9ba}', &['\u{86e2}']), ('\u{2f9bb}', &['\u{8779}']),
-        ('\u{2f9bc}', &['\u{8728}']), ('\u{2f9bd}', &['\u{876b}']), ('\u{2f9be}', &['\u{8786}']),
-        ('\u{2f9bf}', &['\u{45d7}']), ('\u{2f9c0}', &['\u{87e1}']), ('\u{2f9c1}', &['\u{8801}']),
-        ('\u{2f9c2}', &['\u{45f9}']), ('\u{2f9c3}', &['\u{8860}']), ('\u{2f9c4}', &['\u{8863}']),
-        ('\u{2f9c5}', &['\u{27667}']), ('\u{2f9c6}', &['\u{88d7}']), ('\u{2f9c7}', &['\u{88de}']),
-        ('\u{2f9c8}', &['\u{4635}']), ('\u{2f9c9}', &['\u{88fa}']), ('\u{2f9ca}', &['\u{34bb}']),
-        ('\u{2f9cb}', &['\u{278ae}']), ('\u{2f9cc}', &['\u{27966}']), ('\u{2f9cd}', &['\u{46be}']),
-        ('\u{2f9ce}', &['\u{46c7}']), ('\u{2f9cf}', &['\u{8aa0}']), ('\u{2f9d0}', &['\u{8aed}']),
-        ('\u{2f9d1}', &['\u{8b8a}']), ('\u{2f9d2}', &['\u{8c55}']), ('\u{2f9d3}', &['\u{27ca8}']),
-        ('\u{2f9d4}', &['\u{8cab}']), ('\u{2f9d5}', &['\u{8cc1}']), ('\u{2f9d6}', &['\u{8d1b}']),
-        ('\u{2f9d7}', &['\u{8d77}']), ('\u{2f9d8}', &['\u{27f2f}']), ('\u{2f9d9}', &['\u{20804}']),
-        ('\u{2f9da}', &['\u{8dcb}']), ('\u{2f9db}', &['\u{8dbc}']), ('\u{2f9dc}', &['\u{8df0}']),
-        ('\u{2f9dd}', &['\u{208de}']), ('\u{2f9de}', &['\u{8ed4}']), ('\u{2f9df}', &['\u{8f38}']),
-        ('\u{2f9e0}', &['\u{285d2}']), ('\u{2f9e1}', &['\u{285ed}']), ('\u{2f9e2}', &['\u{9094}']),
-        ('\u{2f9e3}', &['\u{90f1}']), ('\u{2f9e4}', &['\u{9111}']), ('\u{2f9e5}', &['\u{2872e}']),
-        ('\u{2f9e6}', &['\u{911b}']), ('\u{2f9e7}', &['\u{9238}']), ('\u{2f9e8}', &['\u{92d7}']),
-        ('\u{2f9e9}', &['\u{92d8}']), ('\u{2f9ea}', &['\u{927c}']), ('\u{2f9eb}', &['\u{93f9}']),
-        ('\u{2f9ec}', &['\u{9415}']), ('\u{2f9ed}', &['\u{28bfa}']), ('\u{2f9ee}', &['\u{958b}']),
-        ('\u{2f9ef}', &['\u{4995}']), ('\u{2f9f0}', &['\u{95b7}']), ('\u{2f9f1}', &['\u{28d77}']),
-        ('\u{2f9f2}', &['\u{49e6}']), ('\u{2f9f3}', &['\u{96c3}']), ('\u{2f9f4}', &['\u{5db2}']),
-        ('\u{2f9f5}', &['\u{9723}']), ('\u{2f9f6}', &['\u{29145}']), ('\u{2f9f7}', &['\u{2921a}']),
-        ('\u{2f9f8}', &['\u{4a6e}']), ('\u{2f9f9}', &['\u{4a76}']), ('\u{2f9fa}', &['\u{97e0}']),
-        ('\u{2f9fb}', &['\u{2940a}']), ('\u{2f9fc}', &['\u{4ab2}']), ('\u{2f9fd}', &['\u{29496}']),
-        ('\u{2f9fe}', &['\u{980b}']), ('\u{2f9ff}', &['\u{980b}']), ('\u{2fa00}', &['\u{9829}']),
-        ('\u{2fa01}', &['\u{295b6}']), ('\u{2fa02}', &['\u{98e2}']), ('\u{2fa03}', &['\u{4b33}']),
-        ('\u{2fa04}', &['\u{9929}']), ('\u{2fa05}', &['\u{99a7}']), ('\u{2fa06}', &['\u{99c2}']),
-        ('\u{2fa07}', &['\u{99fe}']), ('\u{2fa08}', &['\u{4bce}']), ('\u{2fa09}', &['\u{29b30}']),
-        ('\u{2fa0a}', &['\u{9b12}']), ('\u{2fa0b}', &['\u{9c40}']), ('\u{2fa0c}', &['\u{9cfd}']),
-        ('\u{2fa0d}', &['\u{4cce}']), ('\u{2fa0e}', &['\u{4ced}']), ('\u{2fa0f}', &['\u{9d67}']),
-        ('\u{2fa10}', &['\u{2a0ce}']), ('\u{2fa11}', &['\u{4cf8}']), ('\u{2fa12}', &['\u{2a105}']),
-        ('\u{2fa13}', &['\u{2a20e}']), ('\u{2fa14}', &['\u{2a291}']), ('\u{2fa15}', &['\u{9ebb}']),
-        ('\u{2fa16}', &['\u{4d56}']), ('\u{2fa17}', &['\u{9ef9}']), ('\u{2fa18}', &['\u{9efe}']),
-        ('\u{2fa19}', &['\u{9f05}']), ('\u{2fa1a}', &['\u{9f0f}']), ('\u{2fa1b}', &['\u{9f16}']),
-        ('\u{2fa1c}', &['\u{9f3b}']), ('\u{2fa1d}', &['\u{2a600}'])
-    ];
-
-    // Compatibility decompositions
-    pub const compatibility_table: &'static [(char, &'static [char])] = &[
-        ('\u{a0}', &['\u{20}']), ('\u{a8}', &['\u{20}', '\u{308}']), ('\u{aa}', &['\u{61}']),
-        ('\u{af}', &['\u{20}', '\u{304}']), ('\u{b2}', &['\u{32}']), ('\u{b3}', &['\u{33}']),
-        ('\u{b4}', &['\u{20}', '\u{301}']), ('\u{b5}', &['\u{3bc}']), ('\u{b8}', &['\u{20}',
-        '\u{327}']), ('\u{b9}', &['\u{31}']), ('\u{ba}', &['\u{6f}']), ('\u{bc}', &['\u{31}',
-        '\u{2044}', '\u{34}']), ('\u{bd}', &['\u{31}', '\u{2044}', '\u{32}']), ('\u{be}',
-        &['\u{33}', '\u{2044}', '\u{34}']), ('\u{132}', &['\u{49}', '\u{4a}']), ('\u{133}',
-        &['\u{69}', '\u{6a}']), ('\u{13f}', &['\u{4c}', '\u{b7}']), ('\u{140}', &['\u{6c}',
-        '\u{b7}']), ('\u{149}', &['\u{2bc}', '\u{6e}']), ('\u{17f}', &['\u{73}']), ('\u{1c4}',
-        &['\u{44}', '\u{17d}']), ('\u{1c5}', &['\u{44}', '\u{17e}']), ('\u{1c6}', &['\u{64}',
-        '\u{17e}']), ('\u{1c7}', &['\u{4c}', '\u{4a}']), ('\u{1c8}', &['\u{4c}', '\u{6a}']),
-        ('\u{1c9}', &['\u{6c}', '\u{6a}']), ('\u{1ca}', &['\u{4e}', '\u{4a}']), ('\u{1cb}',
-        &['\u{4e}', '\u{6a}']), ('\u{1cc}', &['\u{6e}', '\u{6a}']), ('\u{1f1}', &['\u{44}',
-        '\u{5a}']), ('\u{1f2}', &['\u{44}', '\u{7a}']), ('\u{1f3}', &['\u{64}', '\u{7a}']),
-        ('\u{2b0}', &['\u{68}']), ('\u{2b1}', &['\u{266}']), ('\u{2b2}', &['\u{6a}']), ('\u{2b3}',
-        &['\u{72}']), ('\u{2b4}', &['\u{279}']), ('\u{2b5}', &['\u{27b}']), ('\u{2b6}',
-        &['\u{281}']), ('\u{2b7}', &['\u{77}']), ('\u{2b8}', &['\u{79}']), ('\u{2d8}', &['\u{20}',
-        '\u{306}']), ('\u{2d9}', &['\u{20}', '\u{307}']), ('\u{2da}', &['\u{20}', '\u{30a}']),
-        ('\u{2db}', &['\u{20}', '\u{328}']), ('\u{2dc}', &['\u{20}', '\u{303}']), ('\u{2dd}',
-        &['\u{20}', '\u{30b}']), ('\u{2e0}', &['\u{263}']), ('\u{2e1}', &['\u{6c}']), ('\u{2e2}',
-        &['\u{73}']), ('\u{2e3}', &['\u{78}']), ('\u{2e4}', &['\u{295}']), ('\u{37a}', &['\u{20}',
-        '\u{345}']), ('\u{384}', &['\u{20}', '\u{301}']), ('\u{3d0}', &['\u{3b2}']), ('\u{3d1}',
-        &['\u{3b8}']), ('\u{3d2}', &['\u{3a5}']), ('\u{3d5}', &['\u{3c6}']), ('\u{3d6}',
-        &['\u{3c0}']), ('\u{3f0}', &['\u{3ba}']), ('\u{3f1}', &['\u{3c1}']), ('\u{3f2}',
-        &['\u{3c2}']), ('\u{3f4}', &['\u{398}']), ('\u{3f5}', &['\u{3b5}']), ('\u{3f9}',
-        &['\u{3a3}']), ('\u{587}', &['\u{565}', '\u{582}']), ('\u{675}', &['\u{627}', '\u{674}']),
-        ('\u{676}', &['\u{648}', '\u{674}']), ('\u{677}', &['\u{6c7}', '\u{674}']), ('\u{678}',
-        &['\u{64a}', '\u{674}']), ('\u{e33}', &['\u{e4d}', '\u{e32}']), ('\u{eb3}', &['\u{ecd}',
-        '\u{eb2}']), ('\u{edc}', &['\u{eab}', '\u{e99}']), ('\u{edd}', &['\u{eab}', '\u{ea1}']),
-        ('\u{f0c}', &['\u{f0b}']), ('\u{f77}', &['\u{fb2}', '\u{f81}']), ('\u{f79}', &['\u{fb3}',
-        '\u{f81}']), ('\u{10fc}', &['\u{10dc}']), ('\u{1d2c}', &['\u{41}']), ('\u{1d2d}',
-        &['\u{c6}']), ('\u{1d2e}', &['\u{42}']), ('\u{1d30}', &['\u{44}']), ('\u{1d31}',
-        &['\u{45}']), ('\u{1d32}', &['\u{18e}']), ('\u{1d33}', &['\u{47}']), ('\u{1d34}',
-        &['\u{48}']), ('\u{1d35}', &['\u{49}']), ('\u{1d36}', &['\u{4a}']), ('\u{1d37}',
-        &['\u{4b}']), ('\u{1d38}', &['\u{4c}']), ('\u{1d39}', &['\u{4d}']), ('\u{1d3a}',
-        &['\u{4e}']), ('\u{1d3c}', &['\u{4f}']), ('\u{1d3d}', &['\u{222}']), ('\u{1d3e}',
-        &['\u{50}']), ('\u{1d3f}', &['\u{52}']), ('\u{1d40}', &['\u{54}']), ('\u{1d41}',
-        &['\u{55}']), ('\u{1d42}', &['\u{57}']), ('\u{1d43}', &['\u{61}']), ('\u{1d44}',
-        &['\u{250}']), ('\u{1d45}', &['\u{251}']), ('\u{1d46}', &['\u{1d02}']), ('\u{1d47}',
-        &['\u{62}']), ('\u{1d48}', &['\u{64}']), ('\u{1d49}', &['\u{65}']), ('\u{1d4a}',
-        &['\u{259}']), ('\u{1d4b}', &['\u{25b}']), ('\u{1d4c}', &['\u{25c}']), ('\u{1d4d}',
-        &['\u{67}']), ('\u{1d4f}', &['\u{6b}']), ('\u{1d50}', &['\u{6d}']), ('\u{1d51}',
-        &['\u{14b}']), ('\u{1d52}', &['\u{6f}']), ('\u{1d53}', &['\u{254}']), ('\u{1d54}',
-        &['\u{1d16}']), ('\u{1d55}', &['\u{1d17}']), ('\u{1d56}', &['\u{70}']), ('\u{1d57}',
-        &['\u{74}']), ('\u{1d58}', &['\u{75}']), ('\u{1d59}', &['\u{1d1d}']), ('\u{1d5a}',
-        &['\u{26f}']), ('\u{1d5b}', &['\u{76}']), ('\u{1d5c}', &['\u{1d25}']), ('\u{1d5d}',
-        &['\u{3b2}']), ('\u{1d5e}', &['\u{3b3}']), ('\u{1d5f}', &['\u{3b4}']), ('\u{1d60}',
-        &['\u{3c6}']), ('\u{1d61}', &['\u{3c7}']), ('\u{1d62}', &['\u{69}']), ('\u{1d63}',
-        &['\u{72}']), ('\u{1d64}', &['\u{75}']), ('\u{1d65}', &['\u{76}']), ('\u{1d66}',
-        &['\u{3b2}']), ('\u{1d67}', &['\u{3b3}']), ('\u{1d68}', &['\u{3c1}']), ('\u{1d69}',
-        &['\u{3c6}']), ('\u{1d6a}', &['\u{3c7}']), ('\u{1d78}', &['\u{43d}']), ('\u{1d9b}',
-        &['\u{252}']), ('\u{1d9c}', &['\u{63}']), ('\u{1d9d}', &['\u{255}']), ('\u{1d9e}',
-        &['\u{f0}']), ('\u{1d9f}', &['\u{25c}']), ('\u{1da0}', &['\u{66}']), ('\u{1da1}',
-        &['\u{25f}']), ('\u{1da2}', &['\u{261}']), ('\u{1da3}', &['\u{265}']), ('\u{1da4}',
-        &['\u{268}']), ('\u{1da5}', &['\u{269}']), ('\u{1da6}', &['\u{26a}']), ('\u{1da7}',
-        &['\u{1d7b}']), ('\u{1da8}', &['\u{29d}']), ('\u{1da9}', &['\u{26d}']), ('\u{1daa}',
-        &['\u{1d85}']), ('\u{1dab}', &['\u{29f}']), ('\u{1dac}', &['\u{271}']), ('\u{1dad}',
-        &['\u{270}']), ('\u{1dae}', &['\u{272}']), ('\u{1daf}', &['\u{273}']), ('\u{1db0}',
-        &['\u{274}']), ('\u{1db1}', &['\u{275}']), ('\u{1db2}', &['\u{278}']), ('\u{1db3}',
-        &['\u{282}']), ('\u{1db4}', &['\u{283}']), ('\u{1db5}', &['\u{1ab}']), ('\u{1db6}',
-        &['\u{289}']), ('\u{1db7}', &['\u{28a}']), ('\u{1db8}', &['\u{1d1c}']), ('\u{1db9}',
-        &['\u{28b}']), ('\u{1dba}', &['\u{28c}']), ('\u{1dbb}', &['\u{7a}']), ('\u{1dbc}',
-        &['\u{290}']), ('\u{1dbd}', &['\u{291}']), ('\u{1dbe}', &['\u{292}']), ('\u{1dbf}',
-        &['\u{3b8}']), ('\u{1e9a}', &['\u{61}', '\u{2be}']), ('\u{1fbd}', &['\u{20}', '\u{313}']),
-        ('\u{1fbf}', &['\u{20}', '\u{313}']), ('\u{1fc0}', &['\u{20}', '\u{342}']), ('\u{1ffe}',
-        &['\u{20}', '\u{314}']), ('\u{2002}', &['\u{20}']), ('\u{2003}', &['\u{20}']), ('\u{2004}',
-        &['\u{20}']), ('\u{2005}', &['\u{20}']), ('\u{2006}', &['\u{20}']), ('\u{2007}',
-        &['\u{20}']), ('\u{2008}', &['\u{20}']), ('\u{2009}', &['\u{20}']), ('\u{200a}',
-        &['\u{20}']), ('\u{2011}', &['\u{2010}']), ('\u{2017}', &['\u{20}', '\u{333}']),
-        ('\u{2024}', &['\u{2e}']), ('\u{2025}', &['\u{2e}', '\u{2e}']), ('\u{2026}', &['\u{2e}',
-        '\u{2e}', '\u{2e}']), ('\u{202f}', &['\u{20}']), ('\u{2033}', &['\u{2032}', '\u{2032}']),
-        ('\u{2034}', &['\u{2032}', '\u{2032}', '\u{2032}']), ('\u{2036}', &['\u{2035}',
-        '\u{2035}']), ('\u{2037}', &['\u{2035}', '\u{2035}', '\u{2035}']), ('\u{203c}', &['\u{21}',
-        '\u{21}']), ('\u{203e}', &['\u{20}', '\u{305}']), ('\u{2047}', &['\u{3f}', '\u{3f}']),
-        ('\u{2048}', &['\u{3f}', '\u{21}']), ('\u{2049}', &['\u{21}', '\u{3f}']), ('\u{2057}',
-        &['\u{2032}', '\u{2032}', '\u{2032}', '\u{2032}']), ('\u{205f}', &['\u{20}']), ('\u{2070}',
-        &['\u{30}']), ('\u{2071}', &['\u{69}']), ('\u{2074}', &['\u{34}']), ('\u{2075}',
-        &['\u{35}']), ('\u{2076}', &['\u{36}']), ('\u{2077}', &['\u{37}']), ('\u{2078}',
-        &['\u{38}']), ('\u{2079}', &['\u{39}']), ('\u{207a}', &['\u{2b}']), ('\u{207b}',
-        &['\u{2212}']), ('\u{207c}', &['\u{3d}']), ('\u{207d}', &['\u{28}']), ('\u{207e}',
-        &['\u{29}']), ('\u{207f}', &['\u{6e}']), ('\u{2080}', &['\u{30}']), ('\u{2081}',
-        &['\u{31}']), ('\u{2082}', &['\u{32}']), ('\u{2083}', &['\u{33}']), ('\u{2084}',
-        &['\u{34}']), ('\u{2085}', &['\u{35}']), ('\u{2086}', &['\u{36}']), ('\u{2087}',
-        &['\u{37}']), ('\u{2088}', &['\u{38}']), ('\u{2089}', &['\u{39}']), ('\u{208a}',
-        &['\u{2b}']), ('\u{208b}', &['\u{2212}']), ('\u{208c}', &['\u{3d}']), ('\u{208d}',
-        &['\u{28}']), ('\u{208e}', &['\u{29}']), ('\u{2090}', &['\u{61}']), ('\u{2091}',
-        &['\u{65}']), ('\u{2092}', &['\u{6f}']), ('\u{2093}', &['\u{78}']), ('\u{2094}',
-        &['\u{259}']), ('\u{2095}', &['\u{68}']), ('\u{2096}', &['\u{6b}']), ('\u{2097}',
-        &['\u{6c}']), ('\u{2098}', &['\u{6d}']), ('\u{2099}', &['\u{6e}']), ('\u{209a}',
-        &['\u{70}']), ('\u{209b}', &['\u{73}']), ('\u{209c}', &['\u{74}']), ('\u{20a8}', &['\u{52}',
-        '\u{73}']), ('\u{2100}', &['\u{61}', '\u{2f}', '\u{63}']), ('\u{2101}', &['\u{61}',
-        '\u{2f}', '\u{73}']), ('\u{2102}', &['\u{43}']), ('\u{2103}', &['\u{b0}', '\u{43}']),
-        ('\u{2105}', &['\u{63}', '\u{2f}', '\u{6f}']), ('\u{2106}', &['\u{63}', '\u{2f}',
-        '\u{75}']), ('\u{2107}', &['\u{190}']), ('\u{2109}', &['\u{b0}', '\u{46}']), ('\u{210a}',
-        &['\u{67}']), ('\u{210b}', &['\u{48}']), ('\u{210c}', &['\u{48}']), ('\u{210d}',
-        &['\u{48}']), ('\u{210e}', &['\u{68}']), ('\u{210f}', &['\u{127}']), ('\u{2110}',
-        &['\u{49}']), ('\u{2111}', &['\u{49}']), ('\u{2112}', &['\u{4c}']), ('\u{2113}',
-        &['\u{6c}']), ('\u{2115}', &['\u{4e}']), ('\u{2116}', &['\u{4e}', '\u{6f}']), ('\u{2119}',
-        &['\u{50}']), ('\u{211a}', &['\u{51}']), ('\u{211b}', &['\u{52}']), ('\u{211c}',
-        &['\u{52}']), ('\u{211d}', &['\u{52}']), ('\u{2120}', &['\u{53}', '\u{4d}']), ('\u{2121}',
-        &['\u{54}', '\u{45}', '\u{4c}']), ('\u{2122}', &['\u{54}', '\u{4d}']), ('\u{2124}',
-        &['\u{5a}']), ('\u{2128}', &['\u{5a}']), ('\u{212c}', &['\u{42}']), ('\u{212d}',
-        &['\u{43}']), ('\u{212f}', &['\u{65}']), ('\u{2130}', &['\u{45}']), ('\u{2131}',
-        &['\u{46}']), ('\u{2133}', &['\u{4d}']), ('\u{2134}', &['\u{6f}']), ('\u{2135}',
-        &['\u{5d0}']), ('\u{2136}', &['\u{5d1}']), ('\u{2137}', &['\u{5d2}']), ('\u{2138}',
-        &['\u{5d3}']), ('\u{2139}', &['\u{69}']), ('\u{213b}', &['\u{46}', '\u{41}', '\u{58}']),
-        ('\u{213c}', &['\u{3c0}']), ('\u{213d}', &['\u{3b3}']), ('\u{213e}', &['\u{393}']),
-        ('\u{213f}', &['\u{3a0}']), ('\u{2140}', &['\u{2211}']), ('\u{2145}', &['\u{44}']),
-        ('\u{2146}', &['\u{64}']), ('\u{2147}', &['\u{65}']), ('\u{2148}', &['\u{69}']),
-        ('\u{2149}', &['\u{6a}']), ('\u{2150}', &['\u{31}', '\u{2044}', '\u{37}']), ('\u{2151}',
-        &['\u{31}', '\u{2044}', '\u{39}']), ('\u{2152}', &['\u{31}', '\u{2044}', '\u{31}',
-        '\u{30}']), ('\u{2153}', &['\u{31}', '\u{2044}', '\u{33}']), ('\u{2154}', &['\u{32}',
-        '\u{2044}', '\u{33}']), ('\u{2155}', &['\u{31}', '\u{2044}', '\u{35}']), ('\u{2156}',
-        &['\u{32}', '\u{2044}', '\u{35}']), ('\u{2157}', &['\u{33}', '\u{2044}', '\u{35}']),
-        ('\u{2158}', &['\u{34}', '\u{2044}', '\u{35}']), ('\u{2159}', &['\u{31}', '\u{2044}',
-        '\u{36}']), ('\u{215a}', &['\u{35}', '\u{2044}', '\u{36}']), ('\u{215b}', &['\u{31}',
-        '\u{2044}', '\u{38}']), ('\u{215c}', &['\u{33}', '\u{2044}', '\u{38}']), ('\u{215d}',
-        &['\u{35}', '\u{2044}', '\u{38}']), ('\u{215e}', &['\u{37}', '\u{2044}', '\u{38}']),
-        ('\u{215f}', &['\u{31}', '\u{2044}']), ('\u{2160}', &['\u{49}']), ('\u{2161}', &['\u{49}',
-        '\u{49}']), ('\u{2162}', &['\u{49}', '\u{49}', '\u{49}']), ('\u{2163}', &['\u{49}',
-        '\u{56}']), ('\u{2164}', &['\u{56}']), ('\u{2165}', &['\u{56}', '\u{49}']), ('\u{2166}',
-        &['\u{56}', '\u{49}', '\u{49}']), ('\u{2167}', &['\u{56}', '\u{49}', '\u{49}', '\u{49}']),
-        ('\u{2168}', &['\u{49}', '\u{58}']), ('\u{2169}', &['\u{58}']), ('\u{216a}', &['\u{58}',
-        '\u{49}']), ('\u{216b}', &['\u{58}', '\u{49}', '\u{49}']), ('\u{216c}', &['\u{4c}']),
-        ('\u{216d}', &['\u{43}']), ('\u{216e}', &['\u{44}']), ('\u{216f}', &['\u{4d}']),
-        ('\u{2170}', &['\u{69}']), ('\u{2171}', &['\u{69}', '\u{69}']), ('\u{2172}', &['\u{69}',
-        '\u{69}', '\u{69}']), ('\u{2173}', &['\u{69}', '\u{76}']), ('\u{2174}', &['\u{76}']),
-        ('\u{2175}', &['\u{76}', '\u{69}']), ('\u{2176}', &['\u{76}', '\u{69}', '\u{69}']),
-        ('\u{2177}', &['\u{76}', '\u{69}', '\u{69}', '\u{69}']), ('\u{2178}', &['\u{69}',
-        '\u{78}']), ('\u{2179}', &['\u{78}']), ('\u{217a}', &['\u{78}', '\u{69}']), ('\u{217b}',
-        &['\u{78}', '\u{69}', '\u{69}']), ('\u{217c}', &['\u{6c}']), ('\u{217d}', &['\u{63}']),
-        ('\u{217e}', &['\u{64}']), ('\u{217f}', &['\u{6d}']), ('\u{2189}', &['\u{30}', '\u{2044}',
-        '\u{33}']), ('\u{222c}', &['\u{222b}', '\u{222b}']), ('\u{222d}', &['\u{222b}', '\u{222b}',
-        '\u{222b}']), ('\u{222f}', &['\u{222e}', '\u{222e}']), ('\u{2230}', &['\u{222e}',
-        '\u{222e}', '\u{222e}']), ('\u{2460}', &['\u{31}']), ('\u{2461}', &['\u{32}']), ('\u{2462}',
-        &['\u{33}']), ('\u{2463}', &['\u{34}']), ('\u{2464}', &['\u{35}']), ('\u{2465}',
-        &['\u{36}']), ('\u{2466}', &['\u{37}']), ('\u{2467}', &['\u{38}']), ('\u{2468}',
-        &['\u{39}']), ('\u{2469}', &['\u{31}', '\u{30}']), ('\u{246a}', &['\u{31}', '\u{31}']),
-        ('\u{246b}', &['\u{31}', '\u{32}']), ('\u{246c}', &['\u{31}', '\u{33}']), ('\u{246d}',
-        &['\u{31}', '\u{34}']), ('\u{246e}', &['\u{31}', '\u{35}']), ('\u{246f}', &['\u{31}',
-        '\u{36}']), ('\u{2470}', &['\u{31}', '\u{37}']), ('\u{2471}', &['\u{31}', '\u{38}']),
-        ('\u{2472}', &['\u{31}', '\u{39}']), ('\u{2473}', &['\u{32}', '\u{30}']), ('\u{2474}',
-        &['\u{28}', '\u{31}', '\u{29}']), ('\u{2475}', &['\u{28}', '\u{32}', '\u{29}']),
-        ('\u{2476}', &['\u{28}', '\u{33}', '\u{29}']), ('\u{2477}', &['\u{28}', '\u{34}',
-        '\u{29}']), ('\u{2478}', &['\u{28}', '\u{35}', '\u{29}']), ('\u{2479}', &['\u{28}',
-        '\u{36}', '\u{29}']), ('\u{247a}', &['\u{28}', '\u{37}', '\u{29}']), ('\u{247b}',
-        &['\u{28}', '\u{38}', '\u{29}']), ('\u{247c}', &['\u{28}', '\u{39}', '\u{29}']),
-        ('\u{247d}', &['\u{28}', '\u{31}', '\u{30}', '\u{29}']), ('\u{247e}', &['\u{28}', '\u{31}',
-        '\u{31}', '\u{29}']), ('\u{247f}', &['\u{28}', '\u{31}', '\u{32}', '\u{29}']), ('\u{2480}',
-        &['\u{28}', '\u{31}', '\u{33}', '\u{29}']), ('\u{2481}', &['\u{28}', '\u{31}', '\u{34}',
-        '\u{29}']), ('\u{2482}', &['\u{28}', '\u{31}', '\u{35}', '\u{29}']), ('\u{2483}',
-        &['\u{28}', '\u{31}', '\u{36}', '\u{29}']), ('\u{2484}', &['\u{28}', '\u{31}', '\u{37}',
-        '\u{29}']), ('\u{2485}', &['\u{28}', '\u{31}', '\u{38}', '\u{29}']), ('\u{2486}',
-        &['\u{28}', '\u{31}', '\u{39}', '\u{29}']), ('\u{2487}', &['\u{28}', '\u{32}', '\u{30}',
-        '\u{29}']), ('\u{2488}', &['\u{31}', '\u{2e}']), ('\u{2489}', &['\u{32}', '\u{2e}']),
-        ('\u{248a}', &['\u{33}', '\u{2e}']), ('\u{248b}', &['\u{34}', '\u{2e}']), ('\u{248c}',
-        &['\u{35}', '\u{2e}']), ('\u{248d}', &['\u{36}', '\u{2e}']), ('\u{248e}', &['\u{37}',
-        '\u{2e}']), ('\u{248f}', &['\u{38}', '\u{2e}']), ('\u{2490}', &['\u{39}', '\u{2e}']),
-        ('\u{2491}', &['\u{31}', '\u{30}', '\u{2e}']), ('\u{2492}', &['\u{31}', '\u{31}',
-        '\u{2e}']), ('\u{2493}', &['\u{31}', '\u{32}', '\u{2e}']), ('\u{2494}', &['\u{31}',
-        '\u{33}', '\u{2e}']), ('\u{2495}', &['\u{31}', '\u{34}', '\u{2e}']), ('\u{2496}',
-        &['\u{31}', '\u{35}', '\u{2e}']), ('\u{2497}', &['\u{31}', '\u{36}', '\u{2e}']),
-        ('\u{2498}', &['\u{31}', '\u{37}', '\u{2e}']), ('\u{2499}', &['\u{31}', '\u{38}',
-        '\u{2e}']), ('\u{249a}', &['\u{31}', '\u{39}', '\u{2e}']), ('\u{249b}', &['\u{32}',
-        '\u{30}', '\u{2e}']), ('\u{249c}', &['\u{28}', '\u{61}', '\u{29}']), ('\u{249d}',
-        &['\u{28}', '\u{62}', '\u{29}']), ('\u{249e}', &['\u{28}', '\u{63}', '\u{29}']),
-        ('\u{249f}', &['\u{28}', '\u{64}', '\u{29}']), ('\u{24a0}', &['\u{28}', '\u{65}',
-        '\u{29}']), ('\u{24a1}', &['\u{28}', '\u{66}', '\u{29}']), ('\u{24a2}', &['\u{28}',
-        '\u{67}', '\u{29}']), ('\u{24a3}', &['\u{28}', '\u{68}', '\u{29}']), ('\u{24a4}',
-        &['\u{28}', '\u{69}', '\u{29}']), ('\u{24a5}', &['\u{28}', '\u{6a}', '\u{29}']),
-        ('\u{24a6}', &['\u{28}', '\u{6b}', '\u{29}']), ('\u{24a7}', &['\u{28}', '\u{6c}',
-        '\u{29}']), ('\u{24a8}', &['\u{28}', '\u{6d}', '\u{29}']), ('\u{24a9}', &['\u{28}',
-        '\u{6e}', '\u{29}']), ('\u{24aa}', &['\u{28}', '\u{6f}', '\u{29}']), ('\u{24ab}',
-        &['\u{28}', '\u{70}', '\u{29}']), ('\u{24ac}', &['\u{28}', '\u{71}', '\u{29}']),
-        ('\u{24ad}', &['\u{28}', '\u{72}', '\u{29}']), ('\u{24ae}', &['\u{28}', '\u{73}',
-        '\u{29}']), ('\u{24af}', &['\u{28}', '\u{74}', '\u{29}']), ('\u{24b0}', &['\u{28}',
-        '\u{75}', '\u{29}']), ('\u{24b1}', &['\u{28}', '\u{76}', '\u{29}']), ('\u{24b2}',
-        &['\u{28}', '\u{77}', '\u{29}']), ('\u{24b3}', &['\u{28}', '\u{78}', '\u{29}']),
-        ('\u{24b4}', &['\u{28}', '\u{79}', '\u{29}']), ('\u{24b5}', &['\u{28}', '\u{7a}',
-        '\u{29}']), ('\u{24b6}', &['\u{41}']), ('\u{24b7}', &['\u{42}']), ('\u{24b8}', &['\u{43}']),
-        ('\u{24b9}', &['\u{44}']), ('\u{24ba}', &['\u{45}']), ('\u{24bb}', &['\u{46}']),
-        ('\u{24bc}', &['\u{47}']), ('\u{24bd}', &['\u{48}']), ('\u{24be}', &['\u{49}']),
-        ('\u{24bf}', &['\u{4a}']), ('\u{24c0}', &['\u{4b}']), ('\u{24c1}', &['\u{4c}']),
-        ('\u{24c2}', &['\u{4d}']), ('\u{24c3}', &['\u{4e}']), ('\u{24c4}', &['\u{4f}']),
-        ('\u{24c5}', &['\u{50}']), ('\u{24c6}', &['\u{51}']), ('\u{24c7}', &['\u{52}']),
-        ('\u{24c8}', &['\u{53}']), ('\u{24c9}', &['\u{54}']), ('\u{24ca}', &['\u{55}']),
-        ('\u{24cb}', &['\u{56}']), ('\u{24cc}', &['\u{57}']), ('\u{24cd}', &['\u{58}']),
-        ('\u{24ce}', &['\u{59}']), ('\u{24cf}', &['\u{5a}']), ('\u{24d0}', &['\u{61}']),
-        ('\u{24d1}', &['\u{62}']), ('\u{24d2}', &['\u{63}']), ('\u{24d3}', &['\u{64}']),
-        ('\u{24d4}', &['\u{65}']), ('\u{24d5}', &['\u{66}']), ('\u{24d6}', &['\u{67}']),
-        ('\u{24d7}', &['\u{68}']), ('\u{24d8}', &['\u{69}']), ('\u{24d9}', &['\u{6a}']),
-        ('\u{24da}', &['\u{6b}']), ('\u{24db}', &['\u{6c}']), ('\u{24dc}', &['\u{6d}']),
-        ('\u{24dd}', &['\u{6e}']), ('\u{24de}', &['\u{6f}']), ('\u{24df}', &['\u{70}']),
-        ('\u{24e0}', &['\u{71}']), ('\u{24e1}', &['\u{72}']), ('\u{24e2}', &['\u{73}']),
-        ('\u{24e3}', &['\u{74}']), ('\u{24e4}', &['\u{75}']), ('\u{24e5}', &['\u{76}']),
-        ('\u{24e6}', &['\u{77}']), ('\u{24e7}', &['\u{78}']), ('\u{24e8}', &['\u{79}']),
-        ('\u{24e9}', &['\u{7a}']), ('\u{24ea}', &['\u{30}']), ('\u{2a0c}', &['\u{222b}', '\u{222b}',
-        '\u{222b}', '\u{222b}']), ('\u{2a74}', &['\u{3a}', '\u{3a}', '\u{3d}']), ('\u{2a75}',
-        &['\u{3d}', '\u{3d}']), ('\u{2a76}', &['\u{3d}', '\u{3d}', '\u{3d}']), ('\u{2c7c}',
-        &['\u{6a}']), ('\u{2c7d}', &['\u{56}']), ('\u{2d6f}', &['\u{2d61}']), ('\u{2e9f}',
-        &['\u{6bcd}']), ('\u{2ef3}', &['\u{9f9f}']), ('\u{2f00}', &['\u{4e00}']), ('\u{2f01}',
-        &['\u{4e28}']), ('\u{2f02}', &['\u{4e36}']), ('\u{2f03}', &['\u{4e3f}']), ('\u{2f04}',
-        &['\u{4e59}']), ('\u{2f05}', &['\u{4e85}']), ('\u{2f06}', &['\u{4e8c}']), ('\u{2f07}',
-        &['\u{4ea0}']), ('\u{2f08}', &['\u{4eba}']), ('\u{2f09}', &['\u{513f}']), ('\u{2f0a}',
-        &['\u{5165}']), ('\u{2f0b}', &['\u{516b}']), ('\u{2f0c}', &['\u{5182}']), ('\u{2f0d}',
-        &['\u{5196}']), ('\u{2f0e}', &['\u{51ab}']), ('\u{2f0f}', &['\u{51e0}']), ('\u{2f10}',
-        &['\u{51f5}']), ('\u{2f11}', &['\u{5200}']), ('\u{2f12}', &['\u{529b}']), ('\u{2f13}',
-        &['\u{52f9}']), ('\u{2f14}', &['\u{5315}']), ('\u{2f15}', &['\u{531a}']), ('\u{2f16}',
-        &['\u{5338}']), ('\u{2f17}', &['\u{5341}']), ('\u{2f18}', &['\u{535c}']), ('\u{2f19}',
-        &['\u{5369}']), ('\u{2f1a}', &['\u{5382}']), ('\u{2f1b}', &['\u{53b6}']), ('\u{2f1c}',
-        &['\u{53c8}']), ('\u{2f1d}', &['\u{53e3}']), ('\u{2f1e}', &['\u{56d7}']), ('\u{2f1f}',
-        &['\u{571f}']), ('\u{2f20}', &['\u{58eb}']), ('\u{2f21}', &['\u{5902}']), ('\u{2f22}',
-        &['\u{590a}']), ('\u{2f23}', &['\u{5915}']), ('\u{2f24}', &['\u{5927}']), ('\u{2f25}',
-        &['\u{5973}']), ('\u{2f26}', &['\u{5b50}']), ('\u{2f27}', &['\u{5b80}']), ('\u{2f28}',
-        &['\u{5bf8}']), ('\u{2f29}', &['\u{5c0f}']), ('\u{2f2a}', &['\u{5c22}']), ('\u{2f2b}',
-        &['\u{5c38}']), ('\u{2f2c}', &['\u{5c6e}']), ('\u{2f2d}', &['\u{5c71}']), ('\u{2f2e}',
-        &['\u{5ddb}']), ('\u{2f2f}', &['\u{5de5}']), ('\u{2f30}', &['\u{5df1}']), ('\u{2f31}',
-        &['\u{5dfe}']), ('\u{2f32}', &['\u{5e72}']), ('\u{2f33}', &['\u{5e7a}']), ('\u{2f34}',
-        &['\u{5e7f}']), ('\u{2f35}', &['\u{5ef4}']), ('\u{2f36}', &['\u{5efe}']), ('\u{2f37}',
-        &['\u{5f0b}']), ('\u{2f38}', &['\u{5f13}']), ('\u{2f39}', &['\u{5f50}']), ('\u{2f3a}',
-        &['\u{5f61}']), ('\u{2f3b}', &['\u{5f73}']), ('\u{2f3c}', &['\u{5fc3}']), ('\u{2f3d}',
-        &['\u{6208}']), ('\u{2f3e}', &['\u{6236}']), ('\u{2f3f}', &['\u{624b}']), ('\u{2f40}',
-        &['\u{652f}']), ('\u{2f41}', &['\u{6534}']), ('\u{2f42}', &['\u{6587}']), ('\u{2f43}',
-        &['\u{6597}']), ('\u{2f44}', &['\u{65a4}']), ('\u{2f45}', &['\u{65b9}']), ('\u{2f46}',
-        &['\u{65e0}']), ('\u{2f47}', &['\u{65e5}']), ('\u{2f48}', &['\u{66f0}']), ('\u{2f49}',
-        &['\u{6708}']), ('\u{2f4a}', &['\u{6728}']), ('\u{2f4b}', &['\u{6b20}']), ('\u{2f4c}',
-        &['\u{6b62}']), ('\u{2f4d}', &['\u{6b79}']), ('\u{2f4e}', &['\u{6bb3}']), ('\u{2f4f}',
-        &['\u{6bcb}']), ('\u{2f50}', &['\u{6bd4}']), ('\u{2f51}', &['\u{6bdb}']), ('\u{2f52}',
-        &['\u{6c0f}']), ('\u{2f53}', &['\u{6c14}']), ('\u{2f54}', &['\u{6c34}']), ('\u{2f55}',
-        &['\u{706b}']), ('\u{2f56}', &['\u{722a}']), ('\u{2f57}', &['\u{7236}']), ('\u{2f58}',
-        &['\u{723b}']), ('\u{2f59}', &['\u{723f}']), ('\u{2f5a}', &['\u{7247}']), ('\u{2f5b}',
-        &['\u{7259}']), ('\u{2f5c}', &['\u{725b}']), ('\u{2f5d}', &['\u{72ac}']), ('\u{2f5e}',
-        &['\u{7384}']), ('\u{2f5f}', &['\u{7389}']), ('\u{2f60}', &['\u{74dc}']), ('\u{2f61}',
-        &['\u{74e6}']), ('\u{2f62}', &['\u{7518}']), ('\u{2f63}', &['\u{751f}']), ('\u{2f64}',
-        &['\u{7528}']), ('\u{2f65}', &['\u{7530}']), ('\u{2f66}', &['\u{758b}']), ('\u{2f67}',
-        &['\u{7592}']), ('\u{2f68}', &['\u{7676}']), ('\u{2f69}', &['\u{767d}']), ('\u{2f6a}',
-        &['\u{76ae}']), ('\u{2f6b}', &['\u{76bf}']), ('\u{2f6c}', &['\u{76ee}']), ('\u{2f6d}',
-        &['\u{77db}']), ('\u{2f6e}', &['\u{77e2}']), ('\u{2f6f}', &['\u{77f3}']), ('\u{2f70}',
-        &['\u{793a}']), ('\u{2f71}', &['\u{79b8}']), ('\u{2f72}', &['\u{79be}']), ('\u{2f73}',
-        &['\u{7a74}']), ('\u{2f74}', &['\u{7acb}']), ('\u{2f75}', &['\u{7af9}']), ('\u{2f76}',
-        &['\u{7c73}']), ('\u{2f77}', &['\u{7cf8}']), ('\u{2f78}', &['\u{7f36}']), ('\u{2f79}',
-        &['\u{7f51}']), ('\u{2f7a}', &['\u{7f8a}']), ('\u{2f7b}', &['\u{7fbd}']), ('\u{2f7c}',
-        &['\u{8001}']), ('\u{2f7d}', &['\u{800c}']), ('\u{2f7e}', &['\u{8012}']), ('\u{2f7f}',
-        &['\u{8033}']), ('\u{2f80}', &['\u{807f}']), ('\u{2f81}', &['\u{8089}']), ('\u{2f82}',
-        &['\u{81e3}']), ('\u{2f83}', &['\u{81ea}']), ('\u{2f84}', &['\u{81f3}']), ('\u{2f85}',
-        &['\u{81fc}']), ('\u{2f86}', &['\u{820c}']), ('\u{2f87}', &['\u{821b}']), ('\u{2f88}',
-        &['\u{821f}']), ('\u{2f89}', &['\u{826e}']), ('\u{2f8a}', &['\u{8272}']), ('\u{2f8b}',
-        &['\u{8278}']), ('\u{2f8c}', &['\u{864d}']), ('\u{2f8d}', &['\u{866b}']), ('\u{2f8e}',
-        &['\u{8840}']), ('\u{2f8f}', &['\u{884c}']), ('\u{2f90}', &['\u{8863}']), ('\u{2f91}',
-        &['\u{897e}']), ('\u{2f92}', &['\u{898b}']), ('\u{2f93}', &['\u{89d2}']), ('\u{2f94}',
-        &['\u{8a00}']), ('\u{2f95}', &['\u{8c37}']), ('\u{2f96}', &['\u{8c46}']), ('\u{2f97}',
-        &['\u{8c55}']), ('\u{2f98}', &['\u{8c78}']), ('\u{2f99}', &['\u{8c9d}']), ('\u{2f9a}',
-        &['\u{8d64}']), ('\u{2f9b}', &['\u{8d70}']), ('\u{2f9c}', &['\u{8db3}']), ('\u{2f9d}',
-        &['\u{8eab}']), ('\u{2f9e}', &['\u{8eca}']), ('\u{2f9f}', &['\u{8f9b}']), ('\u{2fa0}',
-        &['\u{8fb0}']), ('\u{2fa1}', &['\u{8fb5}']), ('\u{2fa2}', &['\u{9091}']), ('\u{2fa3}',
-        &['\u{9149}']), ('\u{2fa4}', &['\u{91c6}']), ('\u{2fa5}', &['\u{91cc}']), ('\u{2fa6}',
-        &['\u{91d1}']), ('\u{2fa7}', &['\u{9577}']), ('\u{2fa8}', &['\u{9580}']), ('\u{2fa9}',
-        &['\u{961c}']), ('\u{2faa}', &['\u{96b6}']), ('\u{2fab}', &['\u{96b9}']), ('\u{2fac}',
-        &['\u{96e8}']), ('\u{2fad}', &['\u{9751}']), ('\u{2fae}', &['\u{975e}']), ('\u{2faf}',
-        &['\u{9762}']), ('\u{2fb0}', &['\u{9769}']), ('\u{2fb1}', &['\u{97cb}']), ('\u{2fb2}',
-        &['\u{97ed}']), ('\u{2fb3}', &['\u{97f3}']), ('\u{2fb4}', &['\u{9801}']), ('\u{2fb5}',
-        &['\u{98a8}']), ('\u{2fb6}', &['\u{98db}']), ('\u{2fb7}', &['\u{98df}']), ('\u{2fb8}',
-        &['\u{9996}']), ('\u{2fb9}', &['\u{9999}']), ('\u{2fba}', &['\u{99ac}']), ('\u{2fbb}',
-        &['\u{9aa8}']), ('\u{2fbc}', &['\u{9ad8}']), ('\u{2fbd}', &['\u{9adf}']), ('\u{2fbe}',
-        &['\u{9b25}']), ('\u{2fbf}', &['\u{9b2f}']), ('\u{2fc0}', &['\u{9b32}']), ('\u{2fc1}',
-        &['\u{9b3c}']), ('\u{2fc2}', &['\u{9b5a}']), ('\u{2fc3}', &['\u{9ce5}']), ('\u{2fc4}',
-        &['\u{9e75}']), ('\u{2fc5}', &['\u{9e7f}']), ('\u{2fc6}', &['\u{9ea5}']), ('\u{2fc7}',
-        &['\u{9ebb}']), ('\u{2fc8}', &['\u{9ec3}']), ('\u{2fc9}', &['\u{9ecd}']), ('\u{2fca}',
-        &['\u{9ed1}']), ('\u{2fcb}', &['\u{9ef9}']), ('\u{2fcc}', &['\u{9efd}']), ('\u{2fcd}',
-        &['\u{9f0e}']), ('\u{2fce}', &['\u{9f13}']), ('\u{2fcf}', &['\u{9f20}']), ('\u{2fd0}',
-        &['\u{9f3b}']), ('\u{2fd1}', &['\u{9f4a}']), ('\u{2fd2}', &['\u{9f52}']), ('\u{2fd3}',
-        &['\u{9f8d}']), ('\u{2fd4}', &['\u{9f9c}']), ('\u{2fd5}', &['\u{9fa0}']), ('\u{3000}',
-        &['\u{20}']), ('\u{3036}', &['\u{3012}']), ('\u{3038}', &['\u{5341}']), ('\u{3039}',
-        &['\u{5344}']), ('\u{303a}', &['\u{5345}']), ('\u{309b}', &['\u{20}', '\u{3099}']),
-        ('\u{309c}', &['\u{20}', '\u{309a}']), ('\u{309f}', &['\u{3088}', '\u{308a}']), ('\u{30ff}',
-        &['\u{30b3}', '\u{30c8}']), ('\u{3131}', &['\u{1100}']), ('\u{3132}', &['\u{1101}']),
-        ('\u{3133}', &['\u{11aa}']), ('\u{3134}', &['\u{1102}']), ('\u{3135}', &['\u{11ac}']),
-        ('\u{3136}', &['\u{11ad}']), ('\u{3137}', &['\u{1103}']), ('\u{3138}', &['\u{1104}']),
-        ('\u{3139}', &['\u{1105}']), ('\u{313a}', &['\u{11b0}']), ('\u{313b}', &['\u{11b1}']),
-        ('\u{313c}', &['\u{11b2}']), ('\u{313d}', &['\u{11b3}']), ('\u{313e}', &['\u{11b4}']),
-        ('\u{313f}', &['\u{11b5}']), ('\u{3140}', &['\u{111a}']), ('\u{3141}', &['\u{1106}']),
-        ('\u{3142}', &['\u{1107}']), ('\u{3143}', &['\u{1108}']), ('\u{3144}', &['\u{1121}']),
-        ('\u{3145}', &['\u{1109}']), ('\u{3146}', &['\u{110a}']), ('\u{3147}', &['\u{110b}']),
-        ('\u{3148}', &['\u{110c}']), ('\u{3149}', &['\u{110d}']), ('\u{314a}', &['\u{110e}']),
-        ('\u{314b}', &['\u{110f}']), ('\u{314c}', &['\u{1110}']), ('\u{314d}', &['\u{1111}']),
-        ('\u{314e}', &['\u{1112}']), ('\u{314f}', &['\u{1161}']), ('\u{3150}', &['\u{1162}']),
-        ('\u{3151}', &['\u{1163}']), ('\u{3152}', &['\u{1164}']), ('\u{3153}', &['\u{1165}']),
-        ('\u{3154}', &['\u{1166}']), ('\u{3155}', &['\u{1167}']), ('\u{3156}', &['\u{1168}']),
-        ('\u{3157}', &['\u{1169}']), ('\u{3158}', &['\u{116a}']), ('\u{3159}', &['\u{116b}']),
-        ('\u{315a}', &['\u{116c}']), ('\u{315b}', &['\u{116d}']), ('\u{315c}', &['\u{116e}']),
-        ('\u{315d}', &['\u{116f}']), ('\u{315e}', &['\u{1170}']), ('\u{315f}', &['\u{1171}']),
-        ('\u{3160}', &['\u{1172}']), ('\u{3161}', &['\u{1173}']), ('\u{3162}', &['\u{1174}']),
-        ('\u{3163}', &['\u{1175}']), ('\u{3164}', &['\u{1160}']), ('\u{3165}', &['\u{1114}']),
-        ('\u{3166}', &['\u{1115}']), ('\u{3167}', &['\u{11c7}']), ('\u{3168}', &['\u{11c8}']),
-        ('\u{3169}', &['\u{11cc}']), ('\u{316a}', &['\u{11ce}']), ('\u{316b}', &['\u{11d3}']),
-        ('\u{316c}', &['\u{11d7}']), ('\u{316d}', &['\u{11d9}']), ('\u{316e}', &['\u{111c}']),
-        ('\u{316f}', &['\u{11dd}']), ('\u{3170}', &['\u{11df}']), ('\u{3171}', &['\u{111d}']),
-        ('\u{3172}', &['\u{111e}']), ('\u{3173}', &['\u{1120}']), ('\u{3174}', &['\u{1122}']),
-        ('\u{3175}', &['\u{1123}']), ('\u{3176}', &['\u{1127}']), ('\u{3177}', &['\u{1129}']),
-        ('\u{3178}', &['\u{112b}']), ('\u{3179}', &['\u{112c}']), ('\u{317a}', &['\u{112d}']),
-        ('\u{317b}', &['\u{112e}']), ('\u{317c}', &['\u{112f}']), ('\u{317d}', &['\u{1132}']),
-        ('\u{317e}', &['\u{1136}']), ('\u{317f}', &['\u{1140}']), ('\u{3180}', &['\u{1147}']),
-        ('\u{3181}', &['\u{114c}']), ('\u{3182}', &['\u{11f1}']), ('\u{3183}', &['\u{11f2}']),
-        ('\u{3184}', &['\u{1157}']), ('\u{3185}', &['\u{1158}']), ('\u{3186}', &['\u{1159}']),
-        ('\u{3187}', &['\u{1184}']), ('\u{3188}', &['\u{1185}']), ('\u{3189}', &['\u{1188}']),
-        ('\u{318a}', &['\u{1191}']), ('\u{318b}', &['\u{1192}']), ('\u{318c}', &['\u{1194}']),
-        ('\u{318d}', &['\u{119e}']), ('\u{318e}', &['\u{11a1}']), ('\u{3192}', &['\u{4e00}']),
-        ('\u{3193}', &['\u{4e8c}']), ('\u{3194}', &['\u{4e09}']), ('\u{3195}', &['\u{56db}']),
-        ('\u{3196}', &['\u{4e0a}']), ('\u{3197}', &['\u{4e2d}']), ('\u{3198}', &['\u{4e0b}']),
-        ('\u{3199}', &['\u{7532}']), ('\u{319a}', &['\u{4e59}']), ('\u{319b}', &['\u{4e19}']),
-        ('\u{319c}', &['\u{4e01}']), ('\u{319d}', &['\u{5929}']), ('\u{319e}', &['\u{5730}']),
-        ('\u{319f}', &['\u{4eba}']), ('\u{3200}', &['\u{28}', '\u{1100}', '\u{29}']), ('\u{3201}',
-        &['\u{28}', '\u{1102}', '\u{29}']), ('\u{3202}', &['\u{28}', '\u{1103}', '\u{29}']),
-        ('\u{3203}', &['\u{28}', '\u{1105}', '\u{29}']), ('\u{3204}', &['\u{28}', '\u{1106}',
-        '\u{29}']), ('\u{3205}', &['\u{28}', '\u{1107}', '\u{29}']), ('\u{3206}', &['\u{28}',
-        '\u{1109}', '\u{29}']), ('\u{3207}', &['\u{28}', '\u{110b}', '\u{29}']), ('\u{3208}',
-        &['\u{28}', '\u{110c}', '\u{29}']), ('\u{3209}', &['\u{28}', '\u{110e}', '\u{29}']),
-        ('\u{320a}', &['\u{28}', '\u{110f}', '\u{29}']), ('\u{320b}', &['\u{28}', '\u{1110}',
-        '\u{29}']), ('\u{320c}', &['\u{28}', '\u{1111}', '\u{29}']), ('\u{320d}', &['\u{28}',
-        '\u{1112}', '\u{29}']), ('\u{320e}', &['\u{28}', '\u{1100}', '\u{1161}', '\u{29}']),
-        ('\u{320f}', &['\u{28}', '\u{1102}', '\u{1161}', '\u{29}']), ('\u{3210}', &['\u{28}',
-        '\u{1103}', '\u{1161}', '\u{29}']), ('\u{3211}', &['\u{28}', '\u{1105}', '\u{1161}',
-        '\u{29}']), ('\u{3212}', &['\u{28}', '\u{1106}', '\u{1161}', '\u{29}']), ('\u{3213}',
-        &['\u{28}', '\u{1107}', '\u{1161}', '\u{29}']), ('\u{3214}', &['\u{28}', '\u{1109}',
-        '\u{1161}', '\u{29}']), ('\u{3215}', &['\u{28}', '\u{110b}', '\u{1161}', '\u{29}']),
-        ('\u{3216}', &['\u{28}', '\u{110c}', '\u{1161}', '\u{29}']), ('\u{3217}', &['\u{28}',
-        '\u{110e}', '\u{1161}', '\u{29}']), ('\u{3218}', &['\u{28}', '\u{110f}', '\u{1161}',
-        '\u{29}']), ('\u{3219}', &['\u{28}', '\u{1110}', '\u{1161}', '\u{29}']), ('\u{321a}',
-        &['\u{28}', '\u{1111}', '\u{1161}', '\u{29}']), ('\u{321b}', &['\u{28}', '\u{1112}',
-        '\u{1161}', '\u{29}']), ('\u{321c}', &['\u{28}', '\u{110c}', '\u{116e}', '\u{29}']),
-        ('\u{321d}', &['\u{28}', '\u{110b}', '\u{1169}', '\u{110c}', '\u{1165}', '\u{11ab}',
-        '\u{29}']), ('\u{321e}', &['\u{28}', '\u{110b}', '\u{1169}', '\u{1112}', '\u{116e}',
-        '\u{29}']), ('\u{3220}', &['\u{28}', '\u{4e00}', '\u{29}']), ('\u{3221}', &['\u{28}',
-        '\u{4e8c}', '\u{29}']), ('\u{3222}', &['\u{28}', '\u{4e09}', '\u{29}']), ('\u{3223}',
-        &['\u{28}', '\u{56db}', '\u{29}']), ('\u{3224}', &['\u{28}', '\u{4e94}', '\u{29}']),
-        ('\u{3225}', &['\u{28}', '\u{516d}', '\u{29}']), ('\u{3226}', &['\u{28}', '\u{4e03}',
-        '\u{29}']), ('\u{3227}', &['\u{28}', '\u{516b}', '\u{29}']), ('\u{3228}', &['\u{28}',
-        '\u{4e5d}', '\u{29}']), ('\u{3229}', &['\u{28}', '\u{5341}', '\u{29}']), ('\u{322a}',
-        &['\u{28}', '\u{6708}', '\u{29}']), ('\u{322b}', &['\u{28}', '\u{706b}', '\u{29}']),
-        ('\u{322c}', &['\u{28}', '\u{6c34}', '\u{29}']), ('\u{322d}', &['\u{28}', '\u{6728}',
-        '\u{29}']), ('\u{322e}', &['\u{28}', '\u{91d1}', '\u{29}']), ('\u{322f}', &['\u{28}',
-        '\u{571f}', '\u{29}']), ('\u{3230}', &['\u{28}', '\u{65e5}', '\u{29}']), ('\u{3231}',
-        &['\u{28}', '\u{682a}', '\u{29}']), ('\u{3232}', &['\u{28}', '\u{6709}', '\u{29}']),
-        ('\u{3233}', &['\u{28}', '\u{793e}', '\u{29}']), ('\u{3234}', &['\u{28}', '\u{540d}',
-        '\u{29}']), ('\u{3235}', &['\u{28}', '\u{7279}', '\u{29}']), ('\u{3236}', &['\u{28}',
-        '\u{8ca1}', '\u{29}']), ('\u{3237}', &['\u{28}', '\u{795d}', '\u{29}']), ('\u{3238}',
-        &['\u{28}', '\u{52b4}', '\u{29}']), ('\u{3239}', &['\u{28}', '\u{4ee3}', '\u{29}']),
-        ('\u{323a}', &['\u{28}', '\u{547c}', '\u{29}']), ('\u{323b}', &['\u{28}', '\u{5b66}',
-        '\u{29}']), ('\u{323c}', &['\u{28}', '\u{76e3}', '\u{29}']), ('\u{323d}', &['\u{28}',
-        '\u{4f01}', '\u{29}']), ('\u{323e}', &['\u{28}', '\u{8cc7}', '\u{29}']), ('\u{323f}',
-        &['\u{28}', '\u{5354}', '\u{29}']), ('\u{3240}', &['\u{28}', '\u{796d}', '\u{29}']),
-        ('\u{3241}', &['\u{28}', '\u{4f11}', '\u{29}']), ('\u{3242}', &['\u{28}', '\u{81ea}',
-        '\u{29}']), ('\u{3243}', &['\u{28}', '\u{81f3}', '\u{29}']), ('\u{3244}', &['\u{554f}']),
-        ('\u{3245}', &['\u{5e7c}']), ('\u{3246}', &['\u{6587}']), ('\u{3247}', &['\u{7b8f}']),
-        ('\u{3250}', &['\u{50}', '\u{54}', '\u{45}']), ('\u{3251}', &['\u{32}', '\u{31}']),
-        ('\u{3252}', &['\u{32}', '\u{32}']), ('\u{3253}', &['\u{32}', '\u{33}']), ('\u{3254}',
-        &['\u{32}', '\u{34}']), ('\u{3255}', &['\u{32}', '\u{35}']), ('\u{3256}', &['\u{32}',
-        '\u{36}']), ('\u{3257}', &['\u{32}', '\u{37}']), ('\u{3258}', &['\u{32}', '\u{38}']),
-        ('\u{3259}', &['\u{32}', '\u{39}']), ('\u{325a}', &['\u{33}', '\u{30}']), ('\u{325b}',
-        &['\u{33}', '\u{31}']), ('\u{325c}', &['\u{33}', '\u{32}']), ('\u{325d}', &['\u{33}',
-        '\u{33}']), ('\u{325e}', &['\u{33}', '\u{34}']), ('\u{325f}', &['\u{33}', '\u{35}']),
-        ('\u{3260}', &['\u{1100}']), ('\u{3261}', &['\u{1102}']), ('\u{3262}', &['\u{1103}']),
-        ('\u{3263}', &['\u{1105}']), ('\u{3264}', &['\u{1106}']), ('\u{3265}', &['\u{1107}']),
-        ('\u{3266}', &['\u{1109}']), ('\u{3267}', &['\u{110b}']), ('\u{3268}', &['\u{110c}']),
-        ('\u{3269}', &['\u{110e}']), ('\u{326a}', &['\u{110f}']), ('\u{326b}', &['\u{1110}']),
-        ('\u{326c}', &['\u{1111}']), ('\u{326d}', &['\u{1112}']), ('\u{326e}', &['\u{1100}',
-        '\u{1161}']), ('\u{326f}', &['\u{1102}', '\u{1161}']), ('\u{3270}', &['\u{1103}',
-        '\u{1161}']), ('\u{3271}', &['\u{1105}', '\u{1161}']), ('\u{3272}', &['\u{1106}',
-        '\u{1161}']), ('\u{3273}', &['\u{1107}', '\u{1161}']), ('\u{3274}', &['\u{1109}',
-        '\u{1161}']), ('\u{3275}', &['\u{110b}', '\u{1161}']), ('\u{3276}', &['\u{110c}',
-        '\u{1161}']), ('\u{3277}', &['\u{110e}', '\u{1161}']), ('\u{3278}', &['\u{110f}',
-        '\u{1161}']), ('\u{3279}', &['\u{1110}', '\u{1161}']), ('\u{327a}', &['\u{1111}',
-        '\u{1161}']), ('\u{327b}', &['\u{1112}', '\u{1161}']), ('\u{327c}', &['\u{110e}',
-        '\u{1161}', '\u{11b7}', '\u{1100}', '\u{1169}']), ('\u{327d}', &['\u{110c}', '\u{116e}',
-        '\u{110b}', '\u{1174}']), ('\u{327e}', &['\u{110b}', '\u{116e}']), ('\u{3280}',
-        &['\u{4e00}']), ('\u{3281}', &['\u{4e8c}']), ('\u{3282}', &['\u{4e09}']), ('\u{3283}',
-        &['\u{56db}']), ('\u{3284}', &['\u{4e94}']), ('\u{3285}', &['\u{516d}']), ('\u{3286}',
-        &['\u{4e03}']), ('\u{3287}', &['\u{516b}']), ('\u{3288}', &['\u{4e5d}']), ('\u{3289}',
-        &['\u{5341}']), ('\u{328a}', &['\u{6708}']), ('\u{328b}', &['\u{706b}']), ('\u{328c}',
-        &['\u{6c34}']), ('\u{328d}', &['\u{6728}']), ('\u{328e}', &['\u{91d1}']), ('\u{328f}',
-        &['\u{571f}']), ('\u{3290}', &['\u{65e5}']), ('\u{3291}', &['\u{682a}']), ('\u{3292}',
-        &['\u{6709}']), ('\u{3293}', &['\u{793e}']), ('\u{3294}', &['\u{540d}']), ('\u{3295}',
-        &['\u{7279}']), ('\u{3296}', &['\u{8ca1}']), ('\u{3297}', &['\u{795d}']), ('\u{3298}',
-        &['\u{52b4}']), ('\u{3299}', &['\u{79d8}']), ('\u{329a}', &['\u{7537}']), ('\u{329b}',
-        &['\u{5973}']), ('\u{329c}', &['\u{9069}']), ('\u{329d}', &['\u{512a}']), ('\u{329e}',
-        &['\u{5370}']), ('\u{329f}', &['\u{6ce8}']), ('\u{32a0}', &['\u{9805}']), ('\u{32a1}',
-        &['\u{4f11}']), ('\u{32a2}', &['\u{5199}']), ('\u{32a3}', &['\u{6b63}']), ('\u{32a4}',
-        &['\u{4e0a}']), ('\u{32a5}', &['\u{4e2d}']), ('\u{32a6}', &['\u{4e0b}']), ('\u{32a7}',
-        &['\u{5de6}']), ('\u{32a8}', &['\u{53f3}']), ('\u{32a9}', &['\u{533b}']), ('\u{32aa}',
-        &['\u{5b97}']), ('\u{32ab}', &['\u{5b66}']), ('\u{32ac}', &['\u{76e3}']), ('\u{32ad}',
-        &['\u{4f01}']), ('\u{32ae}', &['\u{8cc7}']), ('\u{32af}', &['\u{5354}']), ('\u{32b0}',
-        &['\u{591c}']), ('\u{32b1}', &['\u{33}', '\u{36}']), ('\u{32b2}', &['\u{33}', '\u{37}']),
-        ('\u{32b3}', &['\u{33}', '\u{38}']), ('\u{32b4}', &['\u{33}', '\u{39}']), ('\u{32b5}',
-        &['\u{34}', '\u{30}']), ('\u{32b6}', &['\u{34}', '\u{31}']), ('\u{32b7}', &['\u{34}',
-        '\u{32}']), ('\u{32b8}', &['\u{34}', '\u{33}']), ('\u{32b9}', &['\u{34}', '\u{34}']),
-        ('\u{32ba}', &['\u{34}', '\u{35}']), ('\u{32bb}', &['\u{34}', '\u{36}']), ('\u{32bc}',
-        &['\u{34}', '\u{37}']), ('\u{32bd}', &['\u{34}', '\u{38}']), ('\u{32be}', &['\u{34}',
-        '\u{39}']), ('\u{32bf}', &['\u{35}', '\u{30}']), ('\u{32c0}', &['\u{31}', '\u{6708}']),
-        ('\u{32c1}', &['\u{32}', '\u{6708}']), ('\u{32c2}', &['\u{33}', '\u{6708}']), ('\u{32c3}',
-        &['\u{34}', '\u{6708}']), ('\u{32c4}', &['\u{35}', '\u{6708}']), ('\u{32c5}', &['\u{36}',
-        '\u{6708}']), ('\u{32c6}', &['\u{37}', '\u{6708}']), ('\u{32c7}', &['\u{38}', '\u{6708}']),
-        ('\u{32c8}', &['\u{39}', '\u{6708}']), ('\u{32c9}', &['\u{31}', '\u{30}', '\u{6708}']),
-        ('\u{32ca}', &['\u{31}', '\u{31}', '\u{6708}']), ('\u{32cb}', &['\u{31}', '\u{32}',
-        '\u{6708}']), ('\u{32cc}', &['\u{48}', '\u{67}']), ('\u{32cd}', &['\u{65}', '\u{72}',
-        '\u{67}']), ('\u{32ce}', &['\u{65}', '\u{56}']), ('\u{32cf}', &['\u{4c}', '\u{54}',
-        '\u{44}']), ('\u{32d0}', &['\u{30a2}']), ('\u{32d1}', &['\u{30a4}']), ('\u{32d2}',
-        &['\u{30a6}']), ('\u{32d3}', &['\u{30a8}']), ('\u{32d4}', &['\u{30aa}']), ('\u{32d5}',
-        &['\u{30ab}']), ('\u{32d6}', &['\u{30ad}']), ('\u{32d7}', &['\u{30af}']), ('\u{32d8}',
-        &['\u{30b1}']), ('\u{32d9}', &['\u{30b3}']), ('\u{32da}', &['\u{30b5}']), ('\u{32db}',
-        &['\u{30b7}']), ('\u{32dc}', &['\u{30b9}']), ('\u{32dd}', &['\u{30bb}']), ('\u{32de}',
-        &['\u{30bd}']), ('\u{32df}', &['\u{30bf}']), ('\u{32e0}', &['\u{30c1}']), ('\u{32e1}',
-        &['\u{30c4}']), ('\u{32e2}', &['\u{30c6}']), ('\u{32e3}', &['\u{30c8}']), ('\u{32e4}',
-        &['\u{30ca}']), ('\u{32e5}', &['\u{30cb}']), ('\u{32e6}', &['\u{30cc}']), ('\u{32e7}',
-        &['\u{30cd}']), ('\u{32e8}', &['\u{30ce}']), ('\u{32e9}', &['\u{30cf}']), ('\u{32ea}',
-        &['\u{30d2}']), ('\u{32eb}', &['\u{30d5}']), ('\u{32ec}', &['\u{30d8}']), ('\u{32ed}',
-        &['\u{30db}']), ('\u{32ee}', &['\u{30de}']), ('\u{32ef}', &['\u{30df}']), ('\u{32f0}',
-        &['\u{30e0}']), ('\u{32f1}', &['\u{30e1}']), ('\u{32f2}', &['\u{30e2}']), ('\u{32f3}',
-        &['\u{30e4}']), ('\u{32f4}', &['\u{30e6}']), ('\u{32f5}', &['\u{30e8}']), ('\u{32f6}',
-        &['\u{30e9}']), ('\u{32f7}', &['\u{30ea}']), ('\u{32f8}', &['\u{30eb}']), ('\u{32f9}',
-        &['\u{30ec}']), ('\u{32fa}', &['\u{30ed}']), ('\u{32fb}', &['\u{30ef}']), ('\u{32fc}',
-        &['\u{30f0}']), ('\u{32fd}', &['\u{30f1}']), ('\u{32fe}', &['\u{30f2}']), ('\u{3300}',
-        &['\u{30a2}', '\u{30d1}', '\u{30fc}', '\u{30c8}']), ('\u{3301}', &['\u{30a2}', '\u{30eb}',
-        '\u{30d5}', '\u{30a1}']), ('\u{3302}', &['\u{30a2}', '\u{30f3}', '\u{30da}', '\u{30a2}']),
-        ('\u{3303}', &['\u{30a2}', '\u{30fc}', '\u{30eb}']), ('\u{3304}', &['\u{30a4}', '\u{30cb}',
-        '\u{30f3}', '\u{30b0}']), ('\u{3305}', &['\u{30a4}', '\u{30f3}', '\u{30c1}']), ('\u{3306}',
-        &['\u{30a6}', '\u{30a9}', '\u{30f3}']), ('\u{3307}', &['\u{30a8}', '\u{30b9}', '\u{30af}',
-        '\u{30fc}', '\u{30c9}']), ('\u{3308}', &['\u{30a8}', '\u{30fc}', '\u{30ab}', '\u{30fc}']),
-        ('\u{3309}', &['\u{30aa}', '\u{30f3}', '\u{30b9}']), ('\u{330a}', &['\u{30aa}', '\u{30fc}',
-        '\u{30e0}']), ('\u{330b}', &['\u{30ab}', '\u{30a4}', '\u{30ea}']), ('\u{330c}',
-        &['\u{30ab}', '\u{30e9}', '\u{30c3}', '\u{30c8}']), ('\u{330d}', &['\u{30ab}', '\u{30ed}',
-        '\u{30ea}', '\u{30fc}']), ('\u{330e}', &['\u{30ac}', '\u{30ed}', '\u{30f3}']), ('\u{330f}',
-        &['\u{30ac}', '\u{30f3}', '\u{30de}']), ('\u{3310}', &['\u{30ae}', '\u{30ac}']),
-        ('\u{3311}', &['\u{30ae}', '\u{30cb}', '\u{30fc}']), ('\u{3312}', &['\u{30ad}', '\u{30e5}',
-        '\u{30ea}', '\u{30fc}']), ('\u{3313}', &['\u{30ae}', '\u{30eb}', '\u{30c0}', '\u{30fc}']),
-        ('\u{3314}', &['\u{30ad}', '\u{30ed}']), ('\u{3315}', &['\u{30ad}', '\u{30ed}', '\u{30b0}',
-        '\u{30e9}', '\u{30e0}']), ('\u{3316}', &['\u{30ad}', '\u{30ed}', '\u{30e1}', '\u{30fc}',
-        '\u{30c8}', '\u{30eb}']), ('\u{3317}', &['\u{30ad}', '\u{30ed}', '\u{30ef}', '\u{30c3}',
-        '\u{30c8}']), ('\u{3318}', &['\u{30b0}', '\u{30e9}', '\u{30e0}']), ('\u{3319}',
-        &['\u{30b0}', '\u{30e9}', '\u{30e0}', '\u{30c8}', '\u{30f3}']), ('\u{331a}', &['\u{30af}',
-        '\u{30eb}', '\u{30bc}', '\u{30a4}', '\u{30ed}']), ('\u{331b}', &['\u{30af}', '\u{30ed}',
-        '\u{30fc}', '\u{30cd}']), ('\u{331c}', &['\u{30b1}', '\u{30fc}', '\u{30b9}']), ('\u{331d}',
-        &['\u{30b3}', '\u{30eb}', '\u{30ca}']), ('\u{331e}', &['\u{30b3}', '\u{30fc}', '\u{30dd}']),
-        ('\u{331f}', &['\u{30b5}', '\u{30a4}', '\u{30af}', '\u{30eb}']), ('\u{3320}', &['\u{30b5}',
-        '\u{30f3}', '\u{30c1}', '\u{30fc}', '\u{30e0}']), ('\u{3321}', &['\u{30b7}', '\u{30ea}',
-        '\u{30f3}', '\u{30b0}']), ('\u{3322}', &['\u{30bb}', '\u{30f3}', '\u{30c1}']), ('\u{3323}',
-        &['\u{30bb}', '\u{30f3}', '\u{30c8}']), ('\u{3324}', &['\u{30c0}', '\u{30fc}', '\u{30b9}']),
-        ('\u{3325}', &['\u{30c7}', '\u{30b7}']), ('\u{3326}', &['\u{30c9}', '\u{30eb}']),
-        ('\u{3327}', &['\u{30c8}', '\u{30f3}']), ('\u{3328}', &['\u{30ca}', '\u{30ce}']),
-        ('\u{3329}', &['\u{30ce}', '\u{30c3}', '\u{30c8}']), ('\u{332a}', &['\u{30cf}', '\u{30a4}',
-        '\u{30c4}']), ('\u{332b}', &['\u{30d1}', '\u{30fc}', '\u{30bb}', '\u{30f3}', '\u{30c8}']),
-        ('\u{332c}', &['\u{30d1}', '\u{30fc}', '\u{30c4}']), ('\u{332d}', &['\u{30d0}', '\u{30fc}',
-        '\u{30ec}', '\u{30eb}']), ('\u{332e}', &['\u{30d4}', '\u{30a2}', '\u{30b9}', '\u{30c8}',
-        '\u{30eb}']), ('\u{332f}', &['\u{30d4}', '\u{30af}', '\u{30eb}']), ('\u{3330}',
-        &['\u{30d4}', '\u{30b3}']), ('\u{3331}', &['\u{30d3}', '\u{30eb}']), ('\u{3332}',
-        &['\u{30d5}', '\u{30a1}', '\u{30e9}', '\u{30c3}', '\u{30c9}']), ('\u{3333}', &['\u{30d5}',
-        '\u{30a3}', '\u{30fc}', '\u{30c8}']), ('\u{3334}', &['\u{30d6}', '\u{30c3}', '\u{30b7}',
-        '\u{30a7}', '\u{30eb}']), ('\u{3335}', &['\u{30d5}', '\u{30e9}', '\u{30f3}']), ('\u{3336}',
-        &['\u{30d8}', '\u{30af}', '\u{30bf}', '\u{30fc}', '\u{30eb}']), ('\u{3337}', &['\u{30da}',
-        '\u{30bd}']), ('\u{3338}', &['\u{30da}', '\u{30cb}', '\u{30d2}']), ('\u{3339}',
-        &['\u{30d8}', '\u{30eb}', '\u{30c4}']), ('\u{333a}', &['\u{30da}', '\u{30f3}', '\u{30b9}']),
-        ('\u{333b}', &['\u{30da}', '\u{30fc}', '\u{30b8}']), ('\u{333c}', &['\u{30d9}', '\u{30fc}',
-        '\u{30bf}']), ('\u{333d}', &['\u{30dd}', '\u{30a4}', '\u{30f3}', '\u{30c8}']), ('\u{333e}',
-        &['\u{30dc}', '\u{30eb}', '\u{30c8}']), ('\u{333f}', &['\u{30db}', '\u{30f3}']),
-        ('\u{3340}', &['\u{30dd}', '\u{30f3}', '\u{30c9}']), ('\u{3341}', &['\u{30db}', '\u{30fc}',
-        '\u{30eb}']), ('\u{3342}', &['\u{30db}', '\u{30fc}', '\u{30f3}']), ('\u{3343}',
-        &['\u{30de}', '\u{30a4}', '\u{30af}', '\u{30ed}']), ('\u{3344}', &['\u{30de}', '\u{30a4}',
-        '\u{30eb}']), ('\u{3345}', &['\u{30de}', '\u{30c3}', '\u{30cf}']), ('\u{3346}',
-        &['\u{30de}', '\u{30eb}', '\u{30af}']), ('\u{3347}', &['\u{30de}', '\u{30f3}', '\u{30b7}',
-        '\u{30e7}', '\u{30f3}']), ('\u{3348}', &['\u{30df}', '\u{30af}', '\u{30ed}', '\u{30f3}']),
-        ('\u{3349}', &['\u{30df}', '\u{30ea}']), ('\u{334a}', &['\u{30df}', '\u{30ea}', '\u{30d0}',
-        '\u{30fc}', '\u{30eb}']), ('\u{334b}', &['\u{30e1}', '\u{30ac}']), ('\u{334c}',
-        &['\u{30e1}', '\u{30ac}', '\u{30c8}', '\u{30f3}']), ('\u{334d}', &['\u{30e1}', '\u{30fc}',
-        '\u{30c8}', '\u{30eb}']), ('\u{334e}', &['\u{30e4}', '\u{30fc}', '\u{30c9}']), ('\u{334f}',
-        &['\u{30e4}', '\u{30fc}', '\u{30eb}']), ('\u{3350}', &['\u{30e6}', '\u{30a2}', '\u{30f3}']),
-        ('\u{3351}', &['\u{30ea}', '\u{30c3}', '\u{30c8}', '\u{30eb}']), ('\u{3352}', &['\u{30ea}',
-        '\u{30e9}']), ('\u{3353}', &['\u{30eb}', '\u{30d4}', '\u{30fc}']), ('\u{3354}',
-        &['\u{30eb}', '\u{30fc}', '\u{30d6}', '\u{30eb}']), ('\u{3355}', &['\u{30ec}', '\u{30e0}']),
-        ('\u{3356}', &['\u{30ec}', '\u{30f3}', '\u{30c8}', '\u{30b2}', '\u{30f3}']), ('\u{3357}',
-        &['\u{30ef}', '\u{30c3}', '\u{30c8}']), ('\u{3358}', &['\u{30}', '\u{70b9}']), ('\u{3359}',
-        &['\u{31}', '\u{70b9}']), ('\u{335a}', &['\u{32}', '\u{70b9}']), ('\u{335b}', &['\u{33}',
-        '\u{70b9}']), ('\u{335c}', &['\u{34}', '\u{70b9}']), ('\u{335d}', &['\u{35}', '\u{70b9}']),
-        ('\u{335e}', &['\u{36}', '\u{70b9}']), ('\u{335f}', &['\u{37}', '\u{70b9}']), ('\u{3360}',
-        &['\u{38}', '\u{70b9}']), ('\u{3361}', &['\u{39}', '\u{70b9}']), ('\u{3362}', &['\u{31}',
-        '\u{30}', '\u{70b9}']), ('\u{3363}', &['\u{31}', '\u{31}', '\u{70b9}']), ('\u{3364}',
-        &['\u{31}', '\u{32}', '\u{70b9}']), ('\u{3365}', &['\u{31}', '\u{33}', '\u{70b9}']),
-        ('\u{3366}', &['\u{31}', '\u{34}', '\u{70b9}']), ('\u{3367}', &['\u{31}', '\u{35}',
-        '\u{70b9}']), ('\u{3368}', &['\u{31}', '\u{36}', '\u{70b9}']), ('\u{3369}', &['\u{31}',
-        '\u{37}', '\u{70b9}']), ('\u{336a}', &['\u{31}', '\u{38}', '\u{70b9}']), ('\u{336b}',
-        &['\u{31}', '\u{39}', '\u{70b9}']), ('\u{336c}', &['\u{32}', '\u{30}', '\u{70b9}']),
-        ('\u{336d}', &['\u{32}', '\u{31}', '\u{70b9}']), ('\u{336e}', &['\u{32}', '\u{32}',
-        '\u{70b9}']), ('\u{336f}', &['\u{32}', '\u{33}', '\u{70b9}']), ('\u{3370}', &['\u{32}',
-        '\u{34}', '\u{70b9}']), ('\u{3371}', &['\u{68}', '\u{50}', '\u{61}']), ('\u{3372}',
-        &['\u{64}', '\u{61}']), ('\u{3373}', &['\u{41}', '\u{55}']), ('\u{3374}', &['\u{62}',
-        '\u{61}', '\u{72}']), ('\u{3375}', &['\u{6f}', '\u{56}']), ('\u{3376}', &['\u{70}',
-        '\u{63}']), ('\u{3377}', &['\u{64}', '\u{6d}']), ('\u{3378}', &['\u{64}', '\u{6d}',
-        '\u{b2}']), ('\u{3379}', &['\u{64}', '\u{6d}', '\u{b3}']), ('\u{337a}', &['\u{49}',
-        '\u{55}']), ('\u{337b}', &['\u{5e73}', '\u{6210}']), ('\u{337c}', &['\u{662d}',
-        '\u{548c}']), ('\u{337d}', &['\u{5927}', '\u{6b63}']), ('\u{337e}', &['\u{660e}',
-        '\u{6cbb}']), ('\u{337f}', &['\u{682a}', '\u{5f0f}', '\u{4f1a}', '\u{793e}']), ('\u{3380}',
-        &['\u{70}', '\u{41}']), ('\u{3381}', &['\u{6e}', '\u{41}']), ('\u{3382}', &['\u{3bc}',
-        '\u{41}']), ('\u{3383}', &['\u{6d}', '\u{41}']), ('\u{3384}', &['\u{6b}', '\u{41}']),
-        ('\u{3385}', &['\u{4b}', '\u{42}']), ('\u{3386}', &['\u{4d}', '\u{42}']), ('\u{3387}',
-        &['\u{47}', '\u{42}']), ('\u{3388}', &['\u{63}', '\u{61}', '\u{6c}']), ('\u{3389}',
-        &['\u{6b}', '\u{63}', '\u{61}', '\u{6c}']), ('\u{338a}', &['\u{70}', '\u{46}']),
-        ('\u{338b}', &['\u{6e}', '\u{46}']), ('\u{338c}', &['\u{3bc}', '\u{46}']), ('\u{338d}',
-        &['\u{3bc}', '\u{67}']), ('\u{338e}', &['\u{6d}', '\u{67}']), ('\u{338f}', &['\u{6b}',
-        '\u{67}']), ('\u{3390}', &['\u{48}', '\u{7a}']), ('\u{3391}', &['\u{6b}', '\u{48}',
-        '\u{7a}']), ('\u{3392}', &['\u{4d}', '\u{48}', '\u{7a}']), ('\u{3393}', &['\u{47}',
-        '\u{48}', '\u{7a}']), ('\u{3394}', &['\u{54}', '\u{48}', '\u{7a}']), ('\u{3395}',
-        &['\u{3bc}', '\u{2113}']), ('\u{3396}', &['\u{6d}', '\u{2113}']), ('\u{3397}', &['\u{64}',
-        '\u{2113}']), ('\u{3398}', &['\u{6b}', '\u{2113}']), ('\u{3399}', &['\u{66}', '\u{6d}']),
-        ('\u{339a}', &['\u{6e}', '\u{6d}']), ('\u{339b}', &['\u{3bc}', '\u{6d}']), ('\u{339c}',
-        &['\u{6d}', '\u{6d}']), ('\u{339d}', &['\u{63}', '\u{6d}']), ('\u{339e}', &['\u{6b}',
-        '\u{6d}']), ('\u{339f}', &['\u{6d}', '\u{6d}', '\u{b2}']), ('\u{33a0}', &['\u{63}',
-        '\u{6d}', '\u{b2}']), ('\u{33a1}', &['\u{6d}', '\u{b2}']), ('\u{33a2}', &['\u{6b}',
-        '\u{6d}', '\u{b2}']), ('\u{33a3}', &['\u{6d}', '\u{6d}', '\u{b3}']), ('\u{33a4}',
-        &['\u{63}', '\u{6d}', '\u{b3}']), ('\u{33a5}', &['\u{6d}', '\u{b3}']), ('\u{33a6}',
-        &['\u{6b}', '\u{6d}', '\u{b3}']), ('\u{33a7}', &['\u{6d}', '\u{2215}', '\u{73}']),
-        ('\u{33a8}', &['\u{6d}', '\u{2215}', '\u{73}', '\u{b2}']), ('\u{33a9}', &['\u{50}',
-        '\u{61}']), ('\u{33aa}', &['\u{6b}', '\u{50}', '\u{61}']), ('\u{33ab}', &['\u{4d}',
-        '\u{50}', '\u{61}']), ('\u{33ac}', &['\u{47}', '\u{50}', '\u{61}']), ('\u{33ad}',
-        &['\u{72}', '\u{61}', '\u{64}']), ('\u{33ae}', &['\u{72}', '\u{61}', '\u{64}', '\u{2215}',
-        '\u{73}']), ('\u{33af}', &['\u{72}', '\u{61}', '\u{64}', '\u{2215}', '\u{73}', '\u{b2}']),
-        ('\u{33b0}', &['\u{70}', '\u{73}']), ('\u{33b1}', &['\u{6e}', '\u{73}']), ('\u{33b2}',
-        &['\u{3bc}', '\u{73}']), ('\u{33b3}', &['\u{6d}', '\u{73}']), ('\u{33b4}', &['\u{70}',
-        '\u{56}']), ('\u{33b5}', &['\u{6e}', '\u{56}']), ('\u{33b6}', &['\u{3bc}', '\u{56}']),
-        ('\u{33b7}', &['\u{6d}', '\u{56}']), ('\u{33b8}', &['\u{6b}', '\u{56}']), ('\u{33b9}',
-        &['\u{4d}', '\u{56}']), ('\u{33ba}', &['\u{70}', '\u{57}']), ('\u{33bb}', &['\u{6e}',
-        '\u{57}']), ('\u{33bc}', &['\u{3bc}', '\u{57}']), ('\u{33bd}', &['\u{6d}', '\u{57}']),
-        ('\u{33be}', &['\u{6b}', '\u{57}']), ('\u{33bf}', &['\u{4d}', '\u{57}']), ('\u{33c0}',
-        &['\u{6b}', '\u{3a9}']), ('\u{33c1}', &['\u{4d}', '\u{3a9}']), ('\u{33c2}', &['\u{61}',
-        '\u{2e}', '\u{6d}', '\u{2e}']), ('\u{33c3}', &['\u{42}', '\u{71}']), ('\u{33c4}',
-        &['\u{63}', '\u{63}']), ('\u{33c5}', &['\u{63}', '\u{64}']), ('\u{33c6}', &['\u{43}',
-        '\u{2215}', '\u{6b}', '\u{67}']), ('\u{33c7}', &['\u{43}', '\u{6f}', '\u{2e}']),
-        ('\u{33c8}', &['\u{64}', '\u{42}']), ('\u{33c9}', &['\u{47}', '\u{79}']), ('\u{33ca}',
-        &['\u{68}', '\u{61}']), ('\u{33cb}', &['\u{48}', '\u{50}']), ('\u{33cc}', &['\u{69}',
-        '\u{6e}']), ('\u{33cd}', &['\u{4b}', '\u{4b}']), ('\u{33ce}', &['\u{4b}', '\u{4d}']),
-        ('\u{33cf}', &['\u{6b}', '\u{74}']), ('\u{33d0}', &['\u{6c}', '\u{6d}']), ('\u{33d1}',
-        &['\u{6c}', '\u{6e}']), ('\u{33d2}', &['\u{6c}', '\u{6f}', '\u{67}']), ('\u{33d3}',
-        &['\u{6c}', '\u{78}']), ('\u{33d4}', &['\u{6d}', '\u{62}']), ('\u{33d5}', &['\u{6d}',
-        '\u{69}', '\u{6c}']), ('\u{33d6}', &['\u{6d}', '\u{6f}', '\u{6c}']), ('\u{33d7}',
-        &['\u{50}', '\u{48}']), ('\u{33d8}', &['\u{70}', '\u{2e}', '\u{6d}', '\u{2e}']),
-        ('\u{33d9}', &['\u{50}', '\u{50}', '\u{4d}']), ('\u{33da}', &['\u{50}', '\u{52}']),
-        ('\u{33db}', &['\u{73}', '\u{72}']), ('\u{33dc}', &['\u{53}', '\u{76}']), ('\u{33dd}',
-        &['\u{57}', '\u{62}']), ('\u{33de}', &['\u{56}', '\u{2215}', '\u{6d}']), ('\u{33df}',
-        &['\u{41}', '\u{2215}', '\u{6d}']), ('\u{33e0}', &['\u{31}', '\u{65e5}']), ('\u{33e1}',
-        &['\u{32}', '\u{65e5}']), ('\u{33e2}', &['\u{33}', '\u{65e5}']), ('\u{33e3}', &['\u{34}',
-        '\u{65e5}']), ('\u{33e4}', &['\u{35}', '\u{65e5}']), ('\u{33e5}', &['\u{36}', '\u{65e5}']),
-        ('\u{33e6}', &['\u{37}', '\u{65e5}']), ('\u{33e7}', &['\u{38}', '\u{65e5}']), ('\u{33e8}',
-        &['\u{39}', '\u{65e5}']), ('\u{33e9}', &['\u{31}', '\u{30}', '\u{65e5}']), ('\u{33ea}',
-        &['\u{31}', '\u{31}', '\u{65e5}']), ('\u{33eb}', &['\u{31}', '\u{32}', '\u{65e5}']),
-        ('\u{33ec}', &['\u{31}', '\u{33}', '\u{65e5}']), ('\u{33ed}', &['\u{31}', '\u{34}',
-        '\u{65e5}']), ('\u{33ee}', &['\u{31}', '\u{35}', '\u{65e5}']), ('\u{33ef}', &['\u{31}',
-        '\u{36}', '\u{65e5}']), ('\u{33f0}', &['\u{31}', '\u{37}', '\u{65e5}']), ('\u{33f1}',
-        &['\u{31}', '\u{38}', '\u{65e5}']), ('\u{33f2}', &['\u{31}', '\u{39}', '\u{65e5}']),
-        ('\u{33f3}', &['\u{32}', '\u{30}', '\u{65e5}']), ('\u{33f4}', &['\u{32}', '\u{31}',
-        '\u{65e5}']), ('\u{33f5}', &['\u{32}', '\u{32}', '\u{65e5}']), ('\u{33f6}', &['\u{32}',
-        '\u{33}', '\u{65e5}']), ('\u{33f7}', &['\u{32}', '\u{34}', '\u{65e5}']), ('\u{33f8}',
-        &['\u{32}', '\u{35}', '\u{65e5}']), ('\u{33f9}', &['\u{32}', '\u{36}', '\u{65e5}']),
-        ('\u{33fa}', &['\u{32}', '\u{37}', '\u{65e5}']), ('\u{33fb}', &['\u{32}', '\u{38}',
-        '\u{65e5}']), ('\u{33fc}', &['\u{32}', '\u{39}', '\u{65e5}']), ('\u{33fd}', &['\u{33}',
-        '\u{30}', '\u{65e5}']), ('\u{33fe}', &['\u{33}', '\u{31}', '\u{65e5}']), ('\u{33ff}',
-        &['\u{67}', '\u{61}', '\u{6c}']), ('\u{a69c}', &['\u{44a}']), ('\u{a69d}', &['\u{44c}']),
-        ('\u{a770}', &['\u{a76f}']), ('\u{a7f8}', &['\u{126}']), ('\u{a7f9}', &['\u{153}']),
-        ('\u{ab5c}', &['\u{a727}']), ('\u{ab5d}', &['\u{ab37}']), ('\u{ab5e}', &['\u{26b}']),
-        ('\u{ab5f}', &['\u{ab52}']), ('\u{fb00}', &['\u{66}', '\u{66}']), ('\u{fb01}', &['\u{66}',
-        '\u{69}']), ('\u{fb02}', &['\u{66}', '\u{6c}']), ('\u{fb03}', &['\u{66}', '\u{66}',
-        '\u{69}']), ('\u{fb04}', &['\u{66}', '\u{66}', '\u{6c}']), ('\u{fb05}', &['\u{17f}',
-        '\u{74}']), ('\u{fb06}', &['\u{73}', '\u{74}']), ('\u{fb13}', &['\u{574}', '\u{576}']),
-        ('\u{fb14}', &['\u{574}', '\u{565}']), ('\u{fb15}', &['\u{574}', '\u{56b}']), ('\u{fb16}',
-        &['\u{57e}', '\u{576}']), ('\u{fb17}', &['\u{574}', '\u{56d}']), ('\u{fb20}', &['\u{5e2}']),
-        ('\u{fb21}', &['\u{5d0}']), ('\u{fb22}', &['\u{5d3}']), ('\u{fb23}', &['\u{5d4}']),
-        ('\u{fb24}', &['\u{5db}']), ('\u{fb25}', &['\u{5dc}']), ('\u{fb26}', &['\u{5dd}']),
-        ('\u{fb27}', &['\u{5e8}']), ('\u{fb28}', &['\u{5ea}']), ('\u{fb29}', &['\u{2b}']),
-        ('\u{fb4f}', &['\u{5d0}', '\u{5dc}']), ('\u{fb50}', &['\u{671}']), ('\u{fb51}',
-        &['\u{671}']), ('\u{fb52}', &['\u{67b}']), ('\u{fb53}', &['\u{67b}']), ('\u{fb54}',
-        &['\u{67b}']), ('\u{fb55}', &['\u{67b}']), ('\u{fb56}', &['\u{67e}']), ('\u{fb57}',
-        &['\u{67e}']), ('\u{fb58}', &['\u{67e}']), ('\u{fb59}', &['\u{67e}']), ('\u{fb5a}',
-        &['\u{680}']), ('\u{fb5b}', &['\u{680}']), ('\u{fb5c}', &['\u{680}']), ('\u{fb5d}',
-        &['\u{680}']), ('\u{fb5e}', &['\u{67a}']), ('\u{fb5f}', &['\u{67a}']), ('\u{fb60}',
-        &['\u{67a}']), ('\u{fb61}', &['\u{67a}']), ('\u{fb62}', &['\u{67f}']), ('\u{fb63}',
-        &['\u{67f}']), ('\u{fb64}', &['\u{67f}']), ('\u{fb65}', &['\u{67f}']), ('\u{fb66}',
-        &['\u{679}']), ('\u{fb67}', &['\u{679}']), ('\u{fb68}', &['\u{679}']), ('\u{fb69}',
-        &['\u{679}']), ('\u{fb6a}', &['\u{6a4}']), ('\u{fb6b}', &['\u{6a4}']), ('\u{fb6c}',
-        &['\u{6a4}']), ('\u{fb6d}', &['\u{6a4}']), ('\u{fb6e}', &['\u{6a6}']), ('\u{fb6f}',
-        &['\u{6a6}']), ('\u{fb70}', &['\u{6a6}']), ('\u{fb71}', &['\u{6a6}']), ('\u{fb72}',
-        &['\u{684}']), ('\u{fb73}', &['\u{684}']), ('\u{fb74}', &['\u{684}']), ('\u{fb75}',
-        &['\u{684}']), ('\u{fb76}', &['\u{683}']), ('\u{fb77}', &['\u{683}']), ('\u{fb78}',
-        &['\u{683}']), ('\u{fb79}', &['\u{683}']), ('\u{fb7a}', &['\u{686}']), ('\u{fb7b}',
-        &['\u{686}']), ('\u{fb7c}', &['\u{686}']), ('\u{fb7d}', &['\u{686}']), ('\u{fb7e}',
-        &['\u{687}']), ('\u{fb7f}', &['\u{687}']), ('\u{fb80}', &['\u{687}']), ('\u{fb81}',
-        &['\u{687}']), ('\u{fb82}', &['\u{68d}']), ('\u{fb83}', &['\u{68d}']), ('\u{fb84}',
-        &['\u{68c}']), ('\u{fb85}', &['\u{68c}']), ('\u{fb86}', &['\u{68e}']), ('\u{fb87}',
-        &['\u{68e}']), ('\u{fb88}', &['\u{688}']), ('\u{fb89}', &['\u{688}']), ('\u{fb8a}',
-        &['\u{698}']), ('\u{fb8b}', &['\u{698}']), ('\u{fb8c}', &['\u{691}']), ('\u{fb8d}',
-        &['\u{691}']), ('\u{fb8e}', &['\u{6a9}']), ('\u{fb8f}', &['\u{6a9}']), ('\u{fb90}',
-        &['\u{6a9}']), ('\u{fb91}', &['\u{6a9}']), ('\u{fb92}', &['\u{6af}']), ('\u{fb93}',
-        &['\u{6af}']), ('\u{fb94}', &['\u{6af}']), ('\u{fb95}', &['\u{6af}']), ('\u{fb96}',
-        &['\u{6b3}']), ('\u{fb97}', &['\u{6b3}']), ('\u{fb98}', &['\u{6b3}']), ('\u{fb99}',
-        &['\u{6b3}']), ('\u{fb9a}', &['\u{6b1}']), ('\u{fb9b}', &['\u{6b1}']), ('\u{fb9c}',
-        &['\u{6b1}']), ('\u{fb9d}', &['\u{6b1}']), ('\u{fb9e}', &['\u{6ba}']), ('\u{fb9f}',
-        &['\u{6ba}']), ('\u{fba0}', &['\u{6bb}']), ('\u{fba1}', &['\u{6bb}']), ('\u{fba2}',
-        &['\u{6bb}']), ('\u{fba3}', &['\u{6bb}']), ('\u{fba4}', &['\u{6c0}']), ('\u{fba5}',
-        &['\u{6c0}']), ('\u{fba6}', &['\u{6c1}']), ('\u{fba7}', &['\u{6c1}']), ('\u{fba8}',
-        &['\u{6c1}']), ('\u{fba9}', &['\u{6c1}']), ('\u{fbaa}', &['\u{6be}']), ('\u{fbab}',
-        &['\u{6be}']), ('\u{fbac}', &['\u{6be}']), ('\u{fbad}', &['\u{6be}']), ('\u{fbae}',
-        &['\u{6d2}']), ('\u{fbaf}', &['\u{6d2}']), ('\u{fbb0}', &['\u{6d3}']), ('\u{fbb1}',
-        &['\u{6d3}']), ('\u{fbd3}', &['\u{6ad}']), ('\u{fbd4}', &['\u{6ad}']), ('\u{fbd5}',
-        &['\u{6ad}']), ('\u{fbd6}', &['\u{6ad}']), ('\u{fbd7}', &['\u{6c7}']), ('\u{fbd8}',
-        &['\u{6c7}']), ('\u{fbd9}', &['\u{6c6}']), ('\u{fbda}', &['\u{6c6}']), ('\u{fbdb}',
-        &['\u{6c8}']), ('\u{fbdc}', &['\u{6c8}']), ('\u{fbdd}', &['\u{677}']), ('\u{fbde}',
-        &['\u{6cb}']), ('\u{fbdf}', &['\u{6cb}']), ('\u{fbe0}', &['\u{6c5}']), ('\u{fbe1}',
-        &['\u{6c5}']), ('\u{fbe2}', &['\u{6c9}']), ('\u{fbe3}', &['\u{6c9}']), ('\u{fbe4}',
-        &['\u{6d0}']), ('\u{fbe5}', &['\u{6d0}']), ('\u{fbe6}', &['\u{6d0}']), ('\u{fbe7}',
-        &['\u{6d0}']), ('\u{fbe8}', &['\u{649}']), ('\u{fbe9}', &['\u{649}']), ('\u{fbea}',
-        &['\u{626}', '\u{627}']), ('\u{fbeb}', &['\u{626}', '\u{627}']), ('\u{fbec}', &['\u{626}',
-        '\u{6d5}']), ('\u{fbed}', &['\u{626}', '\u{6d5}']), ('\u{fbee}', &['\u{626}', '\u{648}']),
-        ('\u{fbef}', &['\u{626}', '\u{648}']), ('\u{fbf0}', &['\u{626}', '\u{6c7}']), ('\u{fbf1}',
-        &['\u{626}', '\u{6c7}']), ('\u{fbf2}', &['\u{626}', '\u{6c6}']), ('\u{fbf3}', &['\u{626}',
-        '\u{6c6}']), ('\u{fbf4}', &['\u{626}', '\u{6c8}']), ('\u{fbf5}', &['\u{626}', '\u{6c8}']),
-        ('\u{fbf6}', &['\u{626}', '\u{6d0}']), ('\u{fbf7}', &['\u{626}', '\u{6d0}']), ('\u{fbf8}',
-        &['\u{626}', '\u{6d0}']), ('\u{fbf9}', &['\u{626}', '\u{649}']), ('\u{fbfa}', &['\u{626}',
-        '\u{649}']), ('\u{fbfb}', &['\u{626}', '\u{649}']), ('\u{fbfc}', &['\u{6cc}']), ('\u{fbfd}',
-        &['\u{6cc}']), ('\u{fbfe}', &['\u{6cc}']), ('\u{fbff}', &['\u{6cc}']), ('\u{fc00}',
-        &['\u{626}', '\u{62c}']), ('\u{fc01}', &['\u{626}', '\u{62d}']), ('\u{fc02}', &['\u{626}',
-        '\u{645}']), ('\u{fc03}', &['\u{626}', '\u{649}']), ('\u{fc04}', &['\u{626}', '\u{64a}']),
-        ('\u{fc05}', &['\u{628}', '\u{62c}']), ('\u{fc06}', &['\u{628}', '\u{62d}']), ('\u{fc07}',
-        &['\u{628}', '\u{62e}']), ('\u{fc08}', &['\u{628}', '\u{645}']), ('\u{fc09}', &['\u{628}',
-        '\u{649}']), ('\u{fc0a}', &['\u{628}', '\u{64a}']), ('\u{fc0b}', &['\u{62a}', '\u{62c}']),
-        ('\u{fc0c}', &['\u{62a}', '\u{62d}']), ('\u{fc0d}', &['\u{62a}', '\u{62e}']), ('\u{fc0e}',
-        &['\u{62a}', '\u{645}']), ('\u{fc0f}', &['\u{62a}', '\u{649}']), ('\u{fc10}', &['\u{62a}',
-        '\u{64a}']), ('\u{fc11}', &['\u{62b}', '\u{62c}']), ('\u{fc12}', &['\u{62b}', '\u{645}']),
-        ('\u{fc13}', &['\u{62b}', '\u{649}']), ('\u{fc14}', &['\u{62b}', '\u{64a}']), ('\u{fc15}',
-        &['\u{62c}', '\u{62d}']), ('\u{fc16}', &['\u{62c}', '\u{645}']), ('\u{fc17}', &['\u{62d}',
-        '\u{62c}']), ('\u{fc18}', &['\u{62d}', '\u{645}']), ('\u{fc19}', &['\u{62e}', '\u{62c}']),
-        ('\u{fc1a}', &['\u{62e}', '\u{62d}']), ('\u{fc1b}', &['\u{62e}', '\u{645}']), ('\u{fc1c}',
-        &['\u{633}', '\u{62c}']), ('\u{fc1d}', &['\u{633}', '\u{62d}']), ('\u{fc1e}', &['\u{633}',
-        '\u{62e}']), ('\u{fc1f}', &['\u{633}', '\u{645}']), ('\u{fc20}', &['\u{635}', '\u{62d}']),
-        ('\u{fc21}', &['\u{635}', '\u{645}']), ('\u{fc22}', &['\u{636}', '\u{62c}']), ('\u{fc23}',
-        &['\u{636}', '\u{62d}']), ('\u{fc24}', &['\u{636}', '\u{62e}']), ('\u{fc25}', &['\u{636}',
-        '\u{645}']), ('\u{fc26}', &['\u{637}', '\u{62d}']), ('\u{fc27}', &['\u{637}', '\u{645}']),
-        ('\u{fc28}', &['\u{638}', '\u{645}']), ('\u{fc29}', &['\u{639}', '\u{62c}']), ('\u{fc2a}',
-        &['\u{639}', '\u{645}']), ('\u{fc2b}', &['\u{63a}', '\u{62c}']), ('\u{fc2c}', &['\u{63a}',
-        '\u{645}']), ('\u{fc2d}', &['\u{641}', '\u{62c}']), ('\u{fc2e}', &['\u{641}', '\u{62d}']),
-        ('\u{fc2f}', &['\u{641}', '\u{62e}']), ('\u{fc30}', &['\u{641}', '\u{645}']), ('\u{fc31}',
-        &['\u{641}', '\u{649}']), ('\u{fc32}', &['\u{641}', '\u{64a}']), ('\u{fc33}', &['\u{642}',
-        '\u{62d}']), ('\u{fc34}', &['\u{642}', '\u{645}']), ('\u{fc35}', &['\u{642}', '\u{649}']),
-        ('\u{fc36}', &['\u{642}', '\u{64a}']), ('\u{fc37}', &['\u{643}', '\u{627}']), ('\u{fc38}',
-        &['\u{643}', '\u{62c}']), ('\u{fc39}', &['\u{643}', '\u{62d}']), ('\u{fc3a}', &['\u{643}',
-        '\u{62e}']), ('\u{fc3b}', &['\u{643}', '\u{644}']), ('\u{fc3c}', &['\u{643}', '\u{645}']),
-        ('\u{fc3d}', &['\u{643}', '\u{649}']), ('\u{fc3e}', &['\u{643}', '\u{64a}']), ('\u{fc3f}',
-        &['\u{644}', '\u{62c}']), ('\u{fc40}', &['\u{644}', '\u{62d}']), ('\u{fc41}', &['\u{644}',
-        '\u{62e}']), ('\u{fc42}', &['\u{644}', '\u{645}']), ('\u{fc43}', &['\u{644}', '\u{649}']),
-        ('\u{fc44}', &['\u{644}', '\u{64a}']), ('\u{fc45}', &['\u{645}', '\u{62c}']), ('\u{fc46}',
-        &['\u{645}', '\u{62d}']), ('\u{fc47}', &['\u{645}', '\u{62e}']), ('\u{fc48}', &['\u{645}',
-        '\u{645}']), ('\u{fc49}', &['\u{645}', '\u{649}']), ('\u{fc4a}', &['\u{645}', '\u{64a}']),
-        ('\u{fc4b}', &['\u{646}', '\u{62c}']), ('\u{fc4c}', &['\u{646}', '\u{62d}']), ('\u{fc4d}',
-        &['\u{646}', '\u{62e}']), ('\u{fc4e}', &['\u{646}', '\u{645}']), ('\u{fc4f}', &['\u{646}',
-        '\u{649}']), ('\u{fc50}', &['\u{646}', '\u{64a}']), ('\u{fc51}', &['\u{647}', '\u{62c}']),
-        ('\u{fc52}', &['\u{647}', '\u{645}']), ('\u{fc53}', &['\u{647}', '\u{649}']), ('\u{fc54}',
-        &['\u{647}', '\u{64a}']), ('\u{fc55}', &['\u{64a}', '\u{62c}']), ('\u{fc56}', &['\u{64a}',
-        '\u{62d}']), ('\u{fc57}', &['\u{64a}', '\u{62e}']), ('\u{fc58}', &['\u{64a}', '\u{645}']),
-        ('\u{fc59}', &['\u{64a}', '\u{649}']), ('\u{fc5a}', &['\u{64a}', '\u{64a}']), ('\u{fc5b}',
-        &['\u{630}', '\u{670}']), ('\u{fc5c}', &['\u{631}', '\u{670}']), ('\u{fc5d}', &['\u{649}',
-        '\u{670}']), ('\u{fc5e}', &['\u{20}', '\u{64c}', '\u{651}']), ('\u{fc5f}', &['\u{20}',
-        '\u{64d}', '\u{651}']), ('\u{fc60}', &['\u{20}', '\u{64e}', '\u{651}']), ('\u{fc61}',
-        &['\u{20}', '\u{64f}', '\u{651}']), ('\u{fc62}', &['\u{20}', '\u{650}', '\u{651}']),
-        ('\u{fc63}', &['\u{20}', '\u{651}', '\u{670}']), ('\u{fc64}', &['\u{626}', '\u{631}']),
-        ('\u{fc65}', &['\u{626}', '\u{632}']), ('\u{fc66}', &['\u{626}', '\u{645}']), ('\u{fc67}',
-        &['\u{626}', '\u{646}']), ('\u{fc68}', &['\u{626}', '\u{649}']), ('\u{fc69}', &['\u{626}',
-        '\u{64a}']), ('\u{fc6a}', &['\u{628}', '\u{631}']), ('\u{fc6b}', &['\u{628}', '\u{632}']),
-        ('\u{fc6c}', &['\u{628}', '\u{645}']), ('\u{fc6d}', &['\u{628}', '\u{646}']), ('\u{fc6e}',
-        &['\u{628}', '\u{649}']), ('\u{fc6f}', &['\u{628}', '\u{64a}']), ('\u{fc70}', &['\u{62a}',
-        '\u{631}']), ('\u{fc71}', &['\u{62a}', '\u{632}']), ('\u{fc72}', &['\u{62a}', '\u{645}']),
-        ('\u{fc73}', &['\u{62a}', '\u{646}']), ('\u{fc74}', &['\u{62a}', '\u{649}']), ('\u{fc75}',
-        &['\u{62a}', '\u{64a}']), ('\u{fc76}', &['\u{62b}', '\u{631}']), ('\u{fc77}', &['\u{62b}',
-        '\u{632}']), ('\u{fc78}', &['\u{62b}', '\u{645}']), ('\u{fc79}', &['\u{62b}', '\u{646}']),
-        ('\u{fc7a}', &['\u{62b}', '\u{649}']), ('\u{fc7b}', &['\u{62b}', '\u{64a}']), ('\u{fc7c}',
-        &['\u{641}', '\u{649}']), ('\u{fc7d}', &['\u{641}', '\u{64a}']), ('\u{fc7e}', &['\u{642}',
-        '\u{649}']), ('\u{fc7f}', &['\u{642}', '\u{64a}']), ('\u{fc80}', &['\u{643}', '\u{627}']),
-        ('\u{fc81}', &['\u{643}', '\u{644}']), ('\u{fc82}', &['\u{643}', '\u{645}']), ('\u{fc83}',
-        &['\u{643}', '\u{649}']), ('\u{fc84}', &['\u{643}', '\u{64a}']), ('\u{fc85}', &['\u{644}',
-        '\u{645}']), ('\u{fc86}', &['\u{644}', '\u{649}']), ('\u{fc87}', &['\u{644}', '\u{64a}']),
-        ('\u{fc88}', &['\u{645}', '\u{627}']), ('\u{fc89}', &['\u{645}', '\u{645}']), ('\u{fc8a}',
-        &['\u{646}', '\u{631}']), ('\u{fc8b}', &['\u{646}', '\u{632}']), ('\u{fc8c}', &['\u{646}',
-        '\u{645}']), ('\u{fc8d}', &['\u{646}', '\u{646}']), ('\u{fc8e}', &['\u{646}', '\u{649}']),
-        ('\u{fc8f}', &['\u{646}', '\u{64a}']), ('\u{fc90}', &['\u{649}', '\u{670}']), ('\u{fc91}',
-        &['\u{64a}', '\u{631}']), ('\u{fc92}', &['\u{64a}', '\u{632}']), ('\u{fc93}', &['\u{64a}',
-        '\u{645}']), ('\u{fc94}', &['\u{64a}', '\u{646}']), ('\u{fc95}', &['\u{64a}', '\u{649}']),
-        ('\u{fc96}', &['\u{64a}', '\u{64a}']), ('\u{fc97}', &['\u{626}', '\u{62c}']), ('\u{fc98}',
-        &['\u{626}', '\u{62d}']), ('\u{fc99}', &['\u{626}', '\u{62e}']), ('\u{fc9a}', &['\u{626}',
-        '\u{645}']), ('\u{fc9b}', &['\u{626}', '\u{647}']), ('\u{fc9c}', &['\u{628}', '\u{62c}']),
-        ('\u{fc9d}', &['\u{628}', '\u{62d}']), ('\u{fc9e}', &['\u{628}', '\u{62e}']), ('\u{fc9f}',
-        &['\u{628}', '\u{645}']), ('\u{fca0}', &['\u{628}', '\u{647}']), ('\u{fca1}', &['\u{62a}',
-        '\u{62c}']), ('\u{fca2}', &['\u{62a}', '\u{62d}']), ('\u{fca3}', &['\u{62a}', '\u{62e}']),
-        ('\u{fca4}', &['\u{62a}', '\u{645}']), ('\u{fca5}', &['\u{62a}', '\u{647}']), ('\u{fca6}',
-        &['\u{62b}', '\u{645}']), ('\u{fca7}', &['\u{62c}', '\u{62d}']), ('\u{fca8}', &['\u{62c}',
-        '\u{645}']), ('\u{fca9}', &['\u{62d}', '\u{62c}']), ('\u{fcaa}', &['\u{62d}', '\u{645}']),
-        ('\u{fcab}', &['\u{62e}', '\u{62c}']), ('\u{fcac}', &['\u{62e}', '\u{645}']), ('\u{fcad}',
-        &['\u{633}', '\u{62c}']), ('\u{fcae}', &['\u{633}', '\u{62d}']), ('\u{fcaf}', &['\u{633}',
-        '\u{62e}']), ('\u{fcb0}', &['\u{633}', '\u{645}']), ('\u{fcb1}', &['\u{635}', '\u{62d}']),
-        ('\u{fcb2}', &['\u{635}', '\u{62e}']), ('\u{fcb3}', &['\u{635}', '\u{645}']), ('\u{fcb4}',
-        &['\u{636}', '\u{62c}']), ('\u{fcb5}', &['\u{636}', '\u{62d}']), ('\u{fcb6}', &['\u{636}',
-        '\u{62e}']), ('\u{fcb7}', &['\u{636}', '\u{645}']), ('\u{fcb8}', &['\u{637}', '\u{62d}']),
-        ('\u{fcb9}', &['\u{638}', '\u{645}']), ('\u{fcba}', &['\u{639}', '\u{62c}']), ('\u{fcbb}',
-        &['\u{639}', '\u{645}']), ('\u{fcbc}', &['\u{63a}', '\u{62c}']), ('\u{fcbd}', &['\u{63a}',
-        '\u{645}']), ('\u{fcbe}', &['\u{641}', '\u{62c}']), ('\u{fcbf}', &['\u{641}', '\u{62d}']),
-        ('\u{fcc0}', &['\u{641}', '\u{62e}']), ('\u{fcc1}', &['\u{641}', '\u{645}']), ('\u{fcc2}',
-        &['\u{642}', '\u{62d}']), ('\u{fcc3}', &['\u{642}', '\u{645}']), ('\u{fcc4}', &['\u{643}',
-        '\u{62c}']), ('\u{fcc5}', &['\u{643}', '\u{62d}']), ('\u{fcc6}', &['\u{643}', '\u{62e}']),
-        ('\u{fcc7}', &['\u{643}', '\u{644}']), ('\u{fcc8}', &['\u{643}', '\u{645}']), ('\u{fcc9}',
-        &['\u{644}', '\u{62c}']), ('\u{fcca}', &['\u{644}', '\u{62d}']), ('\u{fccb}', &['\u{644}',
-        '\u{62e}']), ('\u{fccc}', &['\u{644}', '\u{645}']), ('\u{fccd}', &['\u{644}', '\u{647}']),
-        ('\u{fcce}', &['\u{645}', '\u{62c}']), ('\u{fccf}', &['\u{645}', '\u{62d}']), ('\u{fcd0}',
-        &['\u{645}', '\u{62e}']), ('\u{fcd1}', &['\u{645}', '\u{645}']), ('\u{fcd2}', &['\u{646}',
-        '\u{62c}']), ('\u{fcd3}', &['\u{646}', '\u{62d}']), ('\u{fcd4}', &['\u{646}', '\u{62e}']),
-        ('\u{fcd5}', &['\u{646}', '\u{645}']), ('\u{fcd6}', &['\u{646}', '\u{647}']), ('\u{fcd7}',
-        &['\u{647}', '\u{62c}']), ('\u{fcd8}', &['\u{647}', '\u{645}']), ('\u{fcd9}', &['\u{647}',
-        '\u{670}']), ('\u{fcda}', &['\u{64a}', '\u{62c}']), ('\u{fcdb}', &['\u{64a}', '\u{62d}']),
-        ('\u{fcdc}', &['\u{64a}', '\u{62e}']), ('\u{fcdd}', &['\u{64a}', '\u{645}']), ('\u{fcde}',
-        &['\u{64a}', '\u{647}']), ('\u{fcdf}', &['\u{626}', '\u{645}']), ('\u{fce0}', &['\u{626}',
-        '\u{647}']), ('\u{fce1}', &['\u{628}', '\u{645}']), ('\u{fce2}', &['\u{628}', '\u{647}']),
-        ('\u{fce3}', &['\u{62a}', '\u{645}']), ('\u{fce4}', &['\u{62a}', '\u{647}']), ('\u{fce5}',
-        &['\u{62b}', '\u{645}']), ('\u{fce6}', &['\u{62b}', '\u{647}']), ('\u{fce7}', &['\u{633}',
-        '\u{645}']), ('\u{fce8}', &['\u{633}', '\u{647}']), ('\u{fce9}', &['\u{634}', '\u{645}']),
-        ('\u{fcea}', &['\u{634}', '\u{647}']), ('\u{fceb}', &['\u{643}', '\u{644}']), ('\u{fcec}',
-        &['\u{643}', '\u{645}']), ('\u{fced}', &['\u{644}', '\u{645}']), ('\u{fcee}', &['\u{646}',
-        '\u{645}']), ('\u{fcef}', &['\u{646}', '\u{647}']), ('\u{fcf0}', &['\u{64a}', '\u{645}']),
-        ('\u{fcf1}', &['\u{64a}', '\u{647}']), ('\u{fcf2}', &['\u{640}', '\u{64e}', '\u{651}']),
-        ('\u{fcf3}', &['\u{640}', '\u{64f}', '\u{651}']), ('\u{fcf4}', &['\u{640}', '\u{650}',
-        '\u{651}']), ('\u{fcf5}', &['\u{637}', '\u{649}']), ('\u{fcf6}', &['\u{637}', '\u{64a}']),
-        ('\u{fcf7}', &['\u{639}', '\u{649}']), ('\u{fcf8}', &['\u{639}', '\u{64a}']), ('\u{fcf9}',
-        &['\u{63a}', '\u{649}']), ('\u{fcfa}', &['\u{63a}', '\u{64a}']), ('\u{fcfb}', &['\u{633}',
-        '\u{649}']), ('\u{fcfc}', &['\u{633}', '\u{64a}']), ('\u{fcfd}', &['\u{634}', '\u{649}']),
-        ('\u{fcfe}', &['\u{634}', '\u{64a}']), ('\u{fcff}', &['\u{62d}', '\u{649}']), ('\u{fd00}',
-        &['\u{62d}', '\u{64a}']), ('\u{fd01}', &['\u{62c}', '\u{649}']), ('\u{fd02}', &['\u{62c}',
-        '\u{64a}']), ('\u{fd03}', &['\u{62e}', '\u{649}']), ('\u{fd04}', &['\u{62e}', '\u{64a}']),
-        ('\u{fd05}', &['\u{635}', '\u{649}']), ('\u{fd06}', &['\u{635}', '\u{64a}']), ('\u{fd07}',
-        &['\u{636}', '\u{649}']), ('\u{fd08}', &['\u{636}', '\u{64a}']), ('\u{fd09}', &['\u{634}',
-        '\u{62c}']), ('\u{fd0a}', &['\u{634}', '\u{62d}']), ('\u{fd0b}', &['\u{634}', '\u{62e}']),
-        ('\u{fd0c}', &['\u{634}', '\u{645}']), ('\u{fd0d}', &['\u{634}', '\u{631}']), ('\u{fd0e}',
-        &['\u{633}', '\u{631}']), ('\u{fd0f}', &['\u{635}', '\u{631}']), ('\u{fd10}', &['\u{636}',
-        '\u{631}']), ('\u{fd11}', &['\u{637}', '\u{649}']), ('\u{fd12}', &['\u{637}', '\u{64a}']),
-        ('\u{fd13}', &['\u{639}', '\u{649}']), ('\u{fd14}', &['\u{639}', '\u{64a}']), ('\u{fd15}',
-        &['\u{63a}', '\u{649}']), ('\u{fd16}', &['\u{63a}', '\u{64a}']), ('\u{fd17}', &['\u{633}',
-        '\u{649}']), ('\u{fd18}', &['\u{633}', '\u{64a}']), ('\u{fd19}', &['\u{634}', '\u{649}']),
-        ('\u{fd1a}', &['\u{634}', '\u{64a}']), ('\u{fd1b}', &['\u{62d}', '\u{649}']), ('\u{fd1c}',
-        &['\u{62d}', '\u{64a}']), ('\u{fd1d}', &['\u{62c}', '\u{649}']), ('\u{fd1e}', &['\u{62c}',
-        '\u{64a}']), ('\u{fd1f}', &['\u{62e}', '\u{649}']), ('\u{fd20}', &['\u{62e}', '\u{64a}']),
-        ('\u{fd21}', &['\u{635}', '\u{649}']), ('\u{fd22}', &['\u{635}', '\u{64a}']), ('\u{fd23}',
-        &['\u{636}', '\u{649}']), ('\u{fd24}', &['\u{636}', '\u{64a}']), ('\u{fd25}', &['\u{634}',
-        '\u{62c}']), ('\u{fd26}', &['\u{634}', '\u{62d}']), ('\u{fd27}', &['\u{634}', '\u{62e}']),
-        ('\u{fd28}', &['\u{634}', '\u{645}']), ('\u{fd29}', &['\u{634}', '\u{631}']), ('\u{fd2a}',
-        &['\u{633}', '\u{631}']), ('\u{fd2b}', &['\u{635}', '\u{631}']), ('\u{fd2c}', &['\u{636}',
-        '\u{631}']), ('\u{fd2d}', &['\u{634}', '\u{62c}']), ('\u{fd2e}', &['\u{634}', '\u{62d}']),
-        ('\u{fd2f}', &['\u{634}', '\u{62e}']), ('\u{fd30}', &['\u{634}', '\u{645}']), ('\u{fd31}',
-        &['\u{633}', '\u{647}']), ('\u{fd32}', &['\u{634}', '\u{647}']), ('\u{fd33}', &['\u{637}',
-        '\u{645}']), ('\u{fd34}', &['\u{633}', '\u{62c}']), ('\u{fd35}', &['\u{633}', '\u{62d}']),
-        ('\u{fd36}', &['\u{633}', '\u{62e}']), ('\u{fd37}', &['\u{634}', '\u{62c}']), ('\u{fd38}',
-        &['\u{634}', '\u{62d}']), ('\u{fd39}', &['\u{634}', '\u{62e}']), ('\u{fd3a}', &['\u{637}',
-        '\u{645}']), ('\u{fd3b}', &['\u{638}', '\u{645}']), ('\u{fd3c}', &['\u{627}', '\u{64b}']),
-        ('\u{fd3d}', &['\u{627}', '\u{64b}']), ('\u{fd50}', &['\u{62a}', '\u{62c}', '\u{645}']),
-        ('\u{fd51}', &['\u{62a}', '\u{62d}', '\u{62c}']), ('\u{fd52}', &['\u{62a}', '\u{62d}',
-        '\u{62c}']), ('\u{fd53}', &['\u{62a}', '\u{62d}', '\u{645}']), ('\u{fd54}', &['\u{62a}',
-        '\u{62e}', '\u{645}']), ('\u{fd55}', &['\u{62a}', '\u{645}', '\u{62c}']), ('\u{fd56}',
-        &['\u{62a}', '\u{645}', '\u{62d}']), ('\u{fd57}', &['\u{62a}', '\u{645}', '\u{62e}']),
-        ('\u{fd58}', &['\u{62c}', '\u{645}', '\u{62d}']), ('\u{fd59}', &['\u{62c}', '\u{645}',
-        '\u{62d}']), ('\u{fd5a}', &['\u{62d}', '\u{645}', '\u{64a}']), ('\u{fd5b}', &['\u{62d}',
-        '\u{645}', '\u{649}']), ('\u{fd5c}', &['\u{633}', '\u{62d}', '\u{62c}']), ('\u{fd5d}',
-        &['\u{633}', '\u{62c}', '\u{62d}']), ('\u{fd5e}', &['\u{633}', '\u{62c}', '\u{649}']),
-        ('\u{fd5f}', &['\u{633}', '\u{645}', '\u{62d}']), ('\u{fd60}', &['\u{633}', '\u{645}',
-        '\u{62d}']), ('\u{fd61}', &['\u{633}', '\u{645}', '\u{62c}']), ('\u{fd62}', &['\u{633}',
-        '\u{645}', '\u{645}']), ('\u{fd63}', &['\u{633}', '\u{645}', '\u{645}']), ('\u{fd64}',
-        &['\u{635}', '\u{62d}', '\u{62d}']), ('\u{fd65}', &['\u{635}', '\u{62d}', '\u{62d}']),
-        ('\u{fd66}', &['\u{635}', '\u{645}', '\u{645}']), ('\u{fd67}', &['\u{634}', '\u{62d}',
-        '\u{645}']), ('\u{fd68}', &['\u{634}', '\u{62d}', '\u{645}']), ('\u{fd69}', &['\u{634}',
-        '\u{62c}', '\u{64a}']), ('\u{fd6a}', &['\u{634}', '\u{645}', '\u{62e}']), ('\u{fd6b}',
-        &['\u{634}', '\u{645}', '\u{62e}']), ('\u{fd6c}', &['\u{634}', '\u{645}', '\u{645}']),
-        ('\u{fd6d}', &['\u{634}', '\u{645}', '\u{645}']), ('\u{fd6e}', &['\u{636}', '\u{62d}',
-        '\u{649}']), ('\u{fd6f}', &['\u{636}', '\u{62e}', '\u{645}']), ('\u{fd70}', &['\u{636}',
-        '\u{62e}', '\u{645}']), ('\u{fd71}', &['\u{637}', '\u{645}', '\u{62d}']), ('\u{fd72}',
-        &['\u{637}', '\u{645}', '\u{62d}']), ('\u{fd73}', &['\u{637}', '\u{645}', '\u{645}']),
-        ('\u{fd74}', &['\u{637}', '\u{645}', '\u{64a}']), ('\u{fd75}', &['\u{639}', '\u{62c}',
-        '\u{645}']), ('\u{fd76}', &['\u{639}', '\u{645}', '\u{645}']), ('\u{fd77}', &['\u{639}',
-        '\u{645}', '\u{645}']), ('\u{fd78}', &['\u{639}', '\u{645}', '\u{649}']), ('\u{fd79}',
-        &['\u{63a}', '\u{645}', '\u{645}']), ('\u{fd7a}', &['\u{63a}', '\u{645}', '\u{64a}']),
-        ('\u{fd7b}', &['\u{63a}', '\u{645}', '\u{649}']), ('\u{fd7c}', &['\u{641}', '\u{62e}',
-        '\u{645}']), ('\u{fd7d}', &['\u{641}', '\u{62e}', '\u{645}']), ('\u{fd7e}', &['\u{642}',
-        '\u{645}', '\u{62d}']), ('\u{fd7f}', &['\u{642}', '\u{645}', '\u{645}']), ('\u{fd80}',
-        &['\u{644}', '\u{62d}', '\u{645}']), ('\u{fd81}', &['\u{644}', '\u{62d}', '\u{64a}']),
-        ('\u{fd82}', &['\u{644}', '\u{62d}', '\u{649}']), ('\u{fd83}', &['\u{644}', '\u{62c}',
-        '\u{62c}']), ('\u{fd84}', &['\u{644}', '\u{62c}', '\u{62c}']), ('\u{fd85}', &['\u{644}',
-        '\u{62e}', '\u{645}']), ('\u{fd86}', &['\u{644}', '\u{62e}', '\u{645}']), ('\u{fd87}',
-        &['\u{644}', '\u{645}', '\u{62d}']), ('\u{fd88}', &['\u{644}', '\u{645}', '\u{62d}']),
-        ('\u{fd89}', &['\u{645}', '\u{62d}', '\u{62c}']), ('\u{fd8a}', &['\u{645}', '\u{62d}',
-        '\u{645}']), ('\u{fd8b}', &['\u{645}', '\u{62d}', '\u{64a}']), ('\u{fd8c}', &['\u{645}',
-        '\u{62c}', '\u{62d}']), ('\u{fd8d}', &['\u{645}', '\u{62c}', '\u{645}']), ('\u{fd8e}',
-        &['\u{645}', '\u{62e}', '\u{62c}']), ('\u{fd8f}', &['\u{645}', '\u{62e}', '\u{645}']),
-        ('\u{fd92}', &['\u{645}', '\u{62c}', '\u{62e}']), ('\u{fd93}', &['\u{647}', '\u{645}',
-        '\u{62c}']), ('\u{fd94}', &['\u{647}', '\u{645}', '\u{645}']), ('\u{fd95}', &['\u{646}',
-        '\u{62d}', '\u{645}']), ('\u{fd96}', &['\u{646}', '\u{62d}', '\u{649}']), ('\u{fd97}',
-        &['\u{646}', '\u{62c}', '\u{645}']), ('\u{fd98}', &['\u{646}', '\u{62c}', '\u{645}']),
-        ('\u{fd99}', &['\u{646}', '\u{62c}', '\u{649}']), ('\u{fd9a}', &['\u{646}', '\u{645}',
-        '\u{64a}']), ('\u{fd9b}', &['\u{646}', '\u{645}', '\u{649}']), ('\u{fd9c}', &['\u{64a}',
-        '\u{645}', '\u{645}']), ('\u{fd9d}', &['\u{64a}', '\u{645}', '\u{645}']), ('\u{fd9e}',
-        &['\u{628}', '\u{62e}', '\u{64a}']), ('\u{fd9f}', &['\u{62a}', '\u{62c}', '\u{64a}']),
-        ('\u{fda0}', &['\u{62a}', '\u{62c}', '\u{649}']), ('\u{fda1}', &['\u{62a}', '\u{62e}',
-        '\u{64a}']), ('\u{fda2}', &['\u{62a}', '\u{62e}', '\u{649}']), ('\u{fda3}', &['\u{62a}',
-        '\u{645}', '\u{64a}']), ('\u{fda4}', &['\u{62a}', '\u{645}', '\u{649}']), ('\u{fda5}',
-        &['\u{62c}', '\u{645}', '\u{64a}']), ('\u{fda6}', &['\u{62c}', '\u{62d}', '\u{649}']),
-        ('\u{fda7}', &['\u{62c}', '\u{645}', '\u{649}']), ('\u{fda8}', &['\u{633}', '\u{62e}',
-        '\u{649}']), ('\u{fda9}', &['\u{635}', '\u{62d}', '\u{64a}']), ('\u{fdaa}', &['\u{634}',
-        '\u{62d}', '\u{64a}']), ('\u{fdab}', &['\u{636}', '\u{62d}', '\u{64a}']), ('\u{fdac}',
-        &['\u{644}', '\u{62c}', '\u{64a}']), ('\u{fdad}', &['\u{644}', '\u{645}', '\u{64a}']),
-        ('\u{fdae}', &['\u{64a}', '\u{62d}', '\u{64a}']), ('\u{fdaf}', &['\u{64a}', '\u{62c}',
-        '\u{64a}']), ('\u{fdb0}', &['\u{64a}', '\u{645}', '\u{64a}']), ('\u{fdb1}', &['\u{645}',
-        '\u{645}', '\u{64a}']), ('\u{fdb2}', &['\u{642}', '\u{645}', '\u{64a}']), ('\u{fdb3}',
-        &['\u{646}', '\u{62d}', '\u{64a}']), ('\u{fdb4}', &['\u{642}', '\u{645}', '\u{62d}']),
-        ('\u{fdb5}', &['\u{644}', '\u{62d}', '\u{645}']), ('\u{fdb6}', &['\u{639}', '\u{645}',
-        '\u{64a}']), ('\u{fdb7}', &['\u{643}', '\u{645}', '\u{64a}']), ('\u{fdb8}', &['\u{646}',
-        '\u{62c}', '\u{62d}']), ('\u{fdb9}', &['\u{645}', '\u{62e}', '\u{64a}']), ('\u{fdba}',
-        &['\u{644}', '\u{62c}', '\u{645}']), ('\u{fdbb}', &['\u{643}', '\u{645}', '\u{645}']),
-        ('\u{fdbc}', &['\u{644}', '\u{62c}', '\u{645}']), ('\u{fdbd}', &['\u{646}', '\u{62c}',
-        '\u{62d}']), ('\u{fdbe}', &['\u{62c}', '\u{62d}', '\u{64a}']), ('\u{fdbf}', &['\u{62d}',
-        '\u{62c}', '\u{64a}']), ('\u{fdc0}', &['\u{645}', '\u{62c}', '\u{64a}']), ('\u{fdc1}',
-        &['\u{641}', '\u{645}', '\u{64a}']), ('\u{fdc2}', &['\u{628}', '\u{62d}', '\u{64a}']),
-        ('\u{fdc3}', &['\u{643}', '\u{645}', '\u{645}']), ('\u{fdc4}', &['\u{639}', '\u{62c}',
-        '\u{645}']), ('\u{fdc5}', &['\u{635}', '\u{645}', '\u{645}']), ('\u{fdc6}', &['\u{633}',
-        '\u{62e}', '\u{64a}']), ('\u{fdc7}', &['\u{646}', '\u{62c}', '\u{64a}']), ('\u{fdf0}',
-        &['\u{635}', '\u{644}', '\u{6d2}']), ('\u{fdf1}', &['\u{642}', '\u{644}', '\u{6d2}']),
-        ('\u{fdf2}', &['\u{627}', '\u{644}', '\u{644}', '\u{647}']), ('\u{fdf3}', &['\u{627}',
-        '\u{643}', '\u{628}', '\u{631}']), ('\u{fdf4}', &['\u{645}', '\u{62d}', '\u{645}',
-        '\u{62f}']), ('\u{fdf5}', &['\u{635}', '\u{644}', '\u{639}', '\u{645}']), ('\u{fdf6}',
-        &['\u{631}', '\u{633}', '\u{648}', '\u{644}']), ('\u{fdf7}', &['\u{639}', '\u{644}',
-        '\u{64a}', '\u{647}']), ('\u{fdf8}', &['\u{648}', '\u{633}', '\u{644}', '\u{645}']),
-        ('\u{fdf9}', &['\u{635}', '\u{644}', '\u{649}']), ('\u{fdfa}', &['\u{635}', '\u{644}',
-        '\u{649}', '\u{20}', '\u{627}', '\u{644}', '\u{644}', '\u{647}', '\u{20}', '\u{639}',
-        '\u{644}', '\u{64a}', '\u{647}', '\u{20}', '\u{648}', '\u{633}', '\u{644}', '\u{645}']),
-        ('\u{fdfb}', &['\u{62c}', '\u{644}', '\u{20}', '\u{62c}', '\u{644}', '\u{627}', '\u{644}',
-        '\u{647}']), ('\u{fdfc}', &['\u{631}', '\u{6cc}', '\u{627}', '\u{644}']), ('\u{fe10}',
-        &['\u{2c}']), ('\u{fe11}', &['\u{3001}']), ('\u{fe12}', &['\u{3002}']), ('\u{fe13}',
-        &['\u{3a}']), ('\u{fe14}', &['\u{3b}']), ('\u{fe15}', &['\u{21}']), ('\u{fe16}',
-        &['\u{3f}']), ('\u{fe17}', &['\u{3016}']), ('\u{fe18}', &['\u{3017}']), ('\u{fe19}',
-        &['\u{2026}']), ('\u{fe30}', &['\u{2025}']), ('\u{fe31}', &['\u{2014}']), ('\u{fe32}',
-        &['\u{2013}']), ('\u{fe33}', &['\u{5f}']), ('\u{fe34}', &['\u{5f}']), ('\u{fe35}',
-        &['\u{28}']), ('\u{fe36}', &['\u{29}']), ('\u{fe37}', &['\u{7b}']), ('\u{fe38}',
-        &['\u{7d}']), ('\u{fe39}', &['\u{3014}']), ('\u{fe3a}', &['\u{3015}']), ('\u{fe3b}',
-        &['\u{3010}']), ('\u{fe3c}', &['\u{3011}']), ('\u{fe3d}', &['\u{300a}']), ('\u{fe3e}',
-        &['\u{300b}']), ('\u{fe3f}', &['\u{3008}']), ('\u{fe40}', &['\u{3009}']), ('\u{fe41}',
-        &['\u{300c}']), ('\u{fe42}', &['\u{300d}']), ('\u{fe43}', &['\u{300e}']), ('\u{fe44}',
-        &['\u{300f}']), ('\u{fe47}', &['\u{5b}']), ('\u{fe48}', &['\u{5d}']), ('\u{fe49}',
-        &['\u{203e}']), ('\u{fe4a}', &['\u{203e}']), ('\u{fe4b}', &['\u{203e}']), ('\u{fe4c}',
-        &['\u{203e}']), ('\u{fe4d}', &['\u{5f}']), ('\u{fe4e}', &['\u{5f}']), ('\u{fe4f}',
-        &['\u{5f}']), ('\u{fe50}', &['\u{2c}']), ('\u{fe51}', &['\u{3001}']), ('\u{fe52}',
-        &['\u{2e}']), ('\u{fe54}', &['\u{3b}']), ('\u{fe55}', &['\u{3a}']), ('\u{fe56}',
-        &['\u{3f}']), ('\u{fe57}', &['\u{21}']), ('\u{fe58}', &['\u{2014}']), ('\u{fe59}',
-        &['\u{28}']), ('\u{fe5a}', &['\u{29}']), ('\u{fe5b}', &['\u{7b}']), ('\u{fe5c}',
-        &['\u{7d}']), ('\u{fe5d}', &['\u{3014}']), ('\u{fe5e}', &['\u{3015}']), ('\u{fe5f}',
-        &['\u{23}']), ('\u{fe60}', &['\u{26}']), ('\u{fe61}', &['\u{2a}']), ('\u{fe62}',
-        &['\u{2b}']), ('\u{fe63}', &['\u{2d}']), ('\u{fe64}', &['\u{3c}']), ('\u{fe65}',
-        &['\u{3e}']), ('\u{fe66}', &['\u{3d}']), ('\u{fe68}', &['\u{5c}']), ('\u{fe69}',
-        &['\u{24}']), ('\u{fe6a}', &['\u{25}']), ('\u{fe6b}', &['\u{40}']), ('\u{fe70}', &['\u{20}',
-        '\u{64b}']), ('\u{fe71}', &['\u{640}', '\u{64b}']), ('\u{fe72}', &['\u{20}', '\u{64c}']),
-        ('\u{fe74}', &['\u{20}', '\u{64d}']), ('\u{fe76}', &['\u{20}', '\u{64e}']), ('\u{fe77}',
-        &['\u{640}', '\u{64e}']), ('\u{fe78}', &['\u{20}', '\u{64f}']), ('\u{fe79}', &['\u{640}',
-        '\u{64f}']), ('\u{fe7a}', &['\u{20}', '\u{650}']), ('\u{fe7b}', &['\u{640}', '\u{650}']),
-        ('\u{fe7c}', &['\u{20}', '\u{651}']), ('\u{fe7d}', &['\u{640}', '\u{651}']), ('\u{fe7e}',
-        &['\u{20}', '\u{652}']), ('\u{fe7f}', &['\u{640}', '\u{652}']), ('\u{fe80}', &['\u{621}']),
-        ('\u{fe81}', &['\u{622}']), ('\u{fe82}', &['\u{622}']), ('\u{fe83}', &['\u{623}']),
-        ('\u{fe84}', &['\u{623}']), ('\u{fe85}', &['\u{624}']), ('\u{fe86}', &['\u{624}']),
-        ('\u{fe87}', &['\u{625}']), ('\u{fe88}', &['\u{625}']), ('\u{fe89}', &['\u{626}']),
-        ('\u{fe8a}', &['\u{626}']), ('\u{fe8b}', &['\u{626}']), ('\u{fe8c}', &['\u{626}']),
-        ('\u{fe8d}', &['\u{627}']), ('\u{fe8e}', &['\u{627}']), ('\u{fe8f}', &['\u{628}']),
-        ('\u{fe90}', &['\u{628}']), ('\u{fe91}', &['\u{628}']), ('\u{fe92}', &['\u{628}']),
-        ('\u{fe93}', &['\u{629}']), ('\u{fe94}', &['\u{629}']), ('\u{fe95}', &['\u{62a}']),
-        ('\u{fe96}', &['\u{62a}']), ('\u{fe97}', &['\u{62a}']), ('\u{fe98}', &['\u{62a}']),
-        ('\u{fe99}', &['\u{62b}']), ('\u{fe9a}', &['\u{62b}']), ('\u{fe9b}', &['\u{62b}']),
-        ('\u{fe9c}', &['\u{62b}']), ('\u{fe9d}', &['\u{62c}']), ('\u{fe9e}', &['\u{62c}']),
-        ('\u{fe9f}', &['\u{62c}']), ('\u{fea0}', &['\u{62c}']), ('\u{fea1}', &['\u{62d}']),
-        ('\u{fea2}', &['\u{62d}']), ('\u{fea3}', &['\u{62d}']), ('\u{fea4}', &['\u{62d}']),
-        ('\u{fea5}', &['\u{62e}']), ('\u{fea6}', &['\u{62e}']), ('\u{fea7}', &['\u{62e}']),
-        ('\u{fea8}', &['\u{62e}']), ('\u{fea9}', &['\u{62f}']), ('\u{feaa}', &['\u{62f}']),
-        ('\u{feab}', &['\u{630}']), ('\u{feac}', &['\u{630}']), ('\u{fead}', &['\u{631}']),
-        ('\u{feae}', &['\u{631}']), ('\u{feaf}', &['\u{632}']), ('\u{feb0}', &['\u{632}']),
-        ('\u{feb1}', &['\u{633}']), ('\u{feb2}', &['\u{633}']), ('\u{feb3}', &['\u{633}']),
-        ('\u{feb4}', &['\u{633}']), ('\u{feb5}', &['\u{634}']), ('\u{feb6}', &['\u{634}']),
-        ('\u{feb7}', &['\u{634}']), ('\u{feb8}', &['\u{634}']), ('\u{feb9}', &['\u{635}']),
-        ('\u{feba}', &['\u{635}']), ('\u{febb}', &['\u{635}']), ('\u{febc}', &['\u{635}']),
-        ('\u{febd}', &['\u{636}']), ('\u{febe}', &['\u{636}']), ('\u{febf}', &['\u{636}']),
-        ('\u{fec0}', &['\u{636}']), ('\u{fec1}', &['\u{637}']), ('\u{fec2}', &['\u{637}']),
-        ('\u{fec3}', &['\u{637}']), ('\u{fec4}', &['\u{637}']), ('\u{fec5}', &['\u{638}']),
-        ('\u{fec6}', &['\u{638}']), ('\u{fec7}', &['\u{638}']), ('\u{fec8}', &['\u{638}']),
-        ('\u{fec9}', &['\u{639}']), ('\u{feca}', &['\u{639}']), ('\u{fecb}', &['\u{639}']),
-        ('\u{fecc}', &['\u{639}']), ('\u{fecd}', &['\u{63a}']), ('\u{fece}', &['\u{63a}']),
-        ('\u{fecf}', &['\u{63a}']), ('\u{fed0}', &['\u{63a}']), ('\u{fed1}', &['\u{641}']),
-        ('\u{fed2}', &['\u{641}']), ('\u{fed3}', &['\u{641}']), ('\u{fed4}', &['\u{641}']),
-        ('\u{fed5}', &['\u{642}']), ('\u{fed6}', &['\u{642}']), ('\u{fed7}', &['\u{642}']),
-        ('\u{fed8}', &['\u{642}']), ('\u{fed9}', &['\u{643}']), ('\u{feda}', &['\u{643}']),
-        ('\u{fedb}', &['\u{643}']), ('\u{fedc}', &['\u{643}']), ('\u{fedd}', &['\u{644}']),
-        ('\u{fede}', &['\u{644}']), ('\u{fedf}', &['\u{644}']), ('\u{fee0}', &['\u{644}']),
-        ('\u{fee1}', &['\u{645}']), ('\u{fee2}', &['\u{645}']), ('\u{fee3}', &['\u{645}']),
-        ('\u{fee4}', &['\u{645}']), ('\u{fee5}', &['\u{646}']), ('\u{fee6}', &['\u{646}']),
-        ('\u{fee7}', &['\u{646}']), ('\u{fee8}', &['\u{646}']), ('\u{fee9}', &['\u{647}']),
-        ('\u{feea}', &['\u{647}']), ('\u{feeb}', &['\u{647}']), ('\u{feec}', &['\u{647}']),
-        ('\u{feed}', &['\u{648}']), ('\u{feee}', &['\u{648}']), ('\u{feef}', &['\u{649}']),
-        ('\u{fef0}', &['\u{649}']), ('\u{fef1}', &['\u{64a}']), ('\u{fef2}', &['\u{64a}']),
-        ('\u{fef3}', &['\u{64a}']), ('\u{fef4}', &['\u{64a}']), ('\u{fef5}', &['\u{644}',
-        '\u{622}']), ('\u{fef6}', &['\u{644}', '\u{622}']), ('\u{fef7}', &['\u{644}', '\u{623}']),
-        ('\u{fef8}', &['\u{644}', '\u{623}']), ('\u{fef9}', &['\u{644}', '\u{625}']), ('\u{fefa}',
-        &['\u{644}', '\u{625}']), ('\u{fefb}', &['\u{644}', '\u{627}']), ('\u{fefc}', &['\u{644}',
-        '\u{627}']), ('\u{ff01}', &['\u{21}']), ('\u{ff02}', &['\u{22}']), ('\u{ff03}',
-        &['\u{23}']), ('\u{ff04}', &['\u{24}']), ('\u{ff05}', &['\u{25}']), ('\u{ff06}',
-        &['\u{26}']), ('\u{ff07}', &['\u{27}']), ('\u{ff08}', &['\u{28}']), ('\u{ff09}',
-        &['\u{29}']), ('\u{ff0a}', &['\u{2a}']), ('\u{ff0b}', &['\u{2b}']), ('\u{ff0c}',
-        &['\u{2c}']), ('\u{ff0d}', &['\u{2d}']), ('\u{ff0e}', &['\u{2e}']), ('\u{ff0f}',
-        &['\u{2f}']), ('\u{ff10}', &['\u{30}']), ('\u{ff11}', &['\u{31}']), ('\u{ff12}',
-        &['\u{32}']), ('\u{ff13}', &['\u{33}']), ('\u{ff14}', &['\u{34}']), ('\u{ff15}',
-        &['\u{35}']), ('\u{ff16}', &['\u{36}']), ('\u{ff17}', &['\u{37}']), ('\u{ff18}',
-        &['\u{38}']), ('\u{ff19}', &['\u{39}']), ('\u{ff1a}', &['\u{3a}']), ('\u{ff1b}',
-        &['\u{3b}']), ('\u{ff1c}', &['\u{3c}']), ('\u{ff1d}', &['\u{3d}']), ('\u{ff1e}',
-        &['\u{3e}']), ('\u{ff1f}', &['\u{3f}']), ('\u{ff20}', &['\u{40}']), ('\u{ff21}',
-        &['\u{41}']), ('\u{ff22}', &['\u{42}']), ('\u{ff23}', &['\u{43}']), ('\u{ff24}',
-        &['\u{44}']), ('\u{ff25}', &['\u{45}']), ('\u{ff26}', &['\u{46}']), ('\u{ff27}',
-        &['\u{47}']), ('\u{ff28}', &['\u{48}']), ('\u{ff29}', &['\u{49}']), ('\u{ff2a}',
-        &['\u{4a}']), ('\u{ff2b}', &['\u{4b}']), ('\u{ff2c}', &['\u{4c}']), ('\u{ff2d}',
-        &['\u{4d}']), ('\u{ff2e}', &['\u{4e}']), ('\u{ff2f}', &['\u{4f}']), ('\u{ff30}',
-        &['\u{50}']), ('\u{ff31}', &['\u{51}']), ('\u{ff32}', &['\u{52}']), ('\u{ff33}',
-        &['\u{53}']), ('\u{ff34}', &['\u{54}']), ('\u{ff35}', &['\u{55}']), ('\u{ff36}',
-        &['\u{56}']), ('\u{ff37}', &['\u{57}']), ('\u{ff38}', &['\u{58}']), ('\u{ff39}',
-        &['\u{59}']), ('\u{ff3a}', &['\u{5a}']), ('\u{ff3b}', &['\u{5b}']), ('\u{ff3c}',
-        &['\u{5c}']), ('\u{ff3d}', &['\u{5d}']), ('\u{ff3e}', &['\u{5e}']), ('\u{ff3f}',
-        &['\u{5f}']), ('\u{ff40}', &['\u{60}']), ('\u{ff41}', &['\u{61}']), ('\u{ff42}',
-        &['\u{62}']), ('\u{ff43}', &['\u{63}']), ('\u{ff44}', &['\u{64}']), ('\u{ff45}',
-        &['\u{65}']), ('\u{ff46}', &['\u{66}']), ('\u{ff47}', &['\u{67}']), ('\u{ff48}',
-        &['\u{68}']), ('\u{ff49}', &['\u{69}']), ('\u{ff4a}', &['\u{6a}']), ('\u{ff4b}',
-        &['\u{6b}']), ('\u{ff4c}', &['\u{6c}']), ('\u{ff4d}', &['\u{6d}']), ('\u{ff4e}',
-        &['\u{6e}']), ('\u{ff4f}', &['\u{6f}']), ('\u{ff50}', &['\u{70}']), ('\u{ff51}',
-        &['\u{71}']), ('\u{ff52}', &['\u{72}']), ('\u{ff53}', &['\u{73}']), ('\u{ff54}',
-        &['\u{74}']), ('\u{ff55}', &['\u{75}']), ('\u{ff56}', &['\u{76}']), ('\u{ff57}',
-        &['\u{77}']), ('\u{ff58}', &['\u{78}']), ('\u{ff59}', &['\u{79}']), ('\u{ff5a}',
-        &['\u{7a}']), ('\u{ff5b}', &['\u{7b}']), ('\u{ff5c}', &['\u{7c}']), ('\u{ff5d}',
-        &['\u{7d}']), ('\u{ff5e}', &['\u{7e}']), ('\u{ff5f}', &['\u{2985}']), ('\u{ff60}',
-        &['\u{2986}']), ('\u{ff61}', &['\u{3002}']), ('\u{ff62}', &['\u{300c}']), ('\u{ff63}',
-        &['\u{300d}']), ('\u{ff64}', &['\u{3001}']), ('\u{ff65}', &['\u{30fb}']), ('\u{ff66}',
-        &['\u{30f2}']), ('\u{ff67}', &['\u{30a1}']), ('\u{ff68}', &['\u{30a3}']), ('\u{ff69}',
-        &['\u{30a5}']), ('\u{ff6a}', &['\u{30a7}']), ('\u{ff6b}', &['\u{30a9}']), ('\u{ff6c}',
-        &['\u{30e3}']), ('\u{ff6d}', &['\u{30e5}']), ('\u{ff6e}', &['\u{30e7}']), ('\u{ff6f}',
-        &['\u{30c3}']), ('\u{ff70}', &['\u{30fc}']), ('\u{ff71}', &['\u{30a2}']), ('\u{ff72}',
-        &['\u{30a4}']), ('\u{ff73}', &['\u{30a6}']), ('\u{ff74}', &['\u{30a8}']), ('\u{ff75}',
-        &['\u{30aa}']), ('\u{ff76}', &['\u{30ab}']), ('\u{ff77}', &['\u{30ad}']), ('\u{ff78}',
-        &['\u{30af}']), ('\u{ff79}', &['\u{30b1}']), ('\u{ff7a}', &['\u{30b3}']), ('\u{ff7b}',
-        &['\u{30b5}']), ('\u{ff7c}', &['\u{30b7}']), ('\u{ff7d}', &['\u{30b9}']), ('\u{ff7e}',
-        &['\u{30bb}']), ('\u{ff7f}', &['\u{30bd}']), ('\u{ff80}', &['\u{30bf}']), ('\u{ff81}',
-        &['\u{30c1}']), ('\u{ff82}', &['\u{30c4}']), ('\u{ff83}', &['\u{30c6}']), ('\u{ff84}',
-        &['\u{30c8}']), ('\u{ff85}', &['\u{30ca}']), ('\u{ff86}', &['\u{30cb}']), ('\u{ff87}',
-        &['\u{30cc}']), ('\u{ff88}', &['\u{30cd}']), ('\u{ff89}', &['\u{30ce}']), ('\u{ff8a}',
-        &['\u{30cf}']), ('\u{ff8b}', &['\u{30d2}']), ('\u{ff8c}', &['\u{30d5}']), ('\u{ff8d}',
-        &['\u{30d8}']), ('\u{ff8e}', &['\u{30db}']), ('\u{ff8f}', &['\u{30de}']), ('\u{ff90}',
-        &['\u{30df}']), ('\u{ff91}', &['\u{30e0}']), ('\u{ff92}', &['\u{30e1}']), ('\u{ff93}',
-        &['\u{30e2}']), ('\u{ff94}', &['\u{30e4}']), ('\u{ff95}', &['\u{30e6}']), ('\u{ff96}',
-        &['\u{30e8}']), ('\u{ff97}', &['\u{30e9}']), ('\u{ff98}', &['\u{30ea}']), ('\u{ff99}',
-        &['\u{30eb}']), ('\u{ff9a}', &['\u{30ec}']), ('\u{ff9b}', &['\u{30ed}']), ('\u{ff9c}',
-        &['\u{30ef}']), ('\u{ff9d}', &['\u{30f3}']), ('\u{ff9e}', &['\u{3099}']), ('\u{ff9f}',
-        &['\u{309a}']), ('\u{ffa0}', &['\u{3164}']), ('\u{ffa1}', &['\u{3131}']), ('\u{ffa2}',
-        &['\u{3132}']), ('\u{ffa3}', &['\u{3133}']), ('\u{ffa4}', &['\u{3134}']), ('\u{ffa5}',
-        &['\u{3135}']), ('\u{ffa6}', &['\u{3136}']), ('\u{ffa7}', &['\u{3137}']), ('\u{ffa8}',
-        &['\u{3138}']), ('\u{ffa9}', &['\u{3139}']), ('\u{ffaa}', &['\u{313a}']), ('\u{ffab}',
-        &['\u{313b}']), ('\u{ffac}', &['\u{313c}']), ('\u{ffad}', &['\u{313d}']), ('\u{ffae}',
-        &['\u{313e}']), ('\u{ffaf}', &['\u{313f}']), ('\u{ffb0}', &['\u{3140}']), ('\u{ffb1}',
-        &['\u{3141}']), ('\u{ffb2}', &['\u{3142}']), ('\u{ffb3}', &['\u{3143}']), ('\u{ffb4}',
-        &['\u{3144}']), ('\u{ffb5}', &['\u{3145}']), ('\u{ffb6}', &['\u{3146}']), ('\u{ffb7}',
-        &['\u{3147}']), ('\u{ffb8}', &['\u{3148}']), ('\u{ffb9}', &['\u{3149}']), ('\u{ffba}',
-        &['\u{314a}']), ('\u{ffbb}', &['\u{314b}']), ('\u{ffbc}', &['\u{314c}']), ('\u{ffbd}',
-        &['\u{314d}']), ('\u{ffbe}', &['\u{314e}']), ('\u{ffc2}', &['\u{314f}']), ('\u{ffc3}',
-        &['\u{3150}']), ('\u{ffc4}', &['\u{3151}']), ('\u{ffc5}', &['\u{3152}']), ('\u{ffc6}',
-        &['\u{3153}']), ('\u{ffc7}', &['\u{3154}']), ('\u{ffca}', &['\u{3155}']), ('\u{ffcb}',
-        &['\u{3156}']), ('\u{ffcc}', &['\u{3157}']), ('\u{ffcd}', &['\u{3158}']), ('\u{ffce}',
-        &['\u{3159}']), ('\u{ffcf}', &['\u{315a}']), ('\u{ffd2}', &['\u{315b}']), ('\u{ffd3}',
-        &['\u{315c}']), ('\u{ffd4}', &['\u{315d}']), ('\u{ffd5}', &['\u{315e}']), ('\u{ffd6}',
-        &['\u{315f}']), ('\u{ffd7}', &['\u{3160}']), ('\u{ffda}', &['\u{3161}']), ('\u{ffdb}',
-        &['\u{3162}']), ('\u{ffdc}', &['\u{3163}']), ('\u{ffe0}', &['\u{a2}']), ('\u{ffe1}',
-        &['\u{a3}']), ('\u{ffe2}', &['\u{ac}']), ('\u{ffe3}', &['\u{af}']), ('\u{ffe4}',
-        &['\u{a6}']), ('\u{ffe5}', &['\u{a5}']), ('\u{ffe6}', &['\u{20a9}']), ('\u{ffe8}',
-        &['\u{2502}']), ('\u{ffe9}', &['\u{2190}']), ('\u{ffea}', &['\u{2191}']), ('\u{ffeb}',
-        &['\u{2192}']), ('\u{ffec}', &['\u{2193}']), ('\u{ffed}', &['\u{25a0}']), ('\u{ffee}',
-        &['\u{25cb}']), ('\u{1d400}', &['\u{41}']), ('\u{1d401}', &['\u{42}']), ('\u{1d402}',
-        &['\u{43}']), ('\u{1d403}', &['\u{44}']), ('\u{1d404}', &['\u{45}']), ('\u{1d405}',
-        &['\u{46}']), ('\u{1d406}', &['\u{47}']), ('\u{1d407}', &['\u{48}']), ('\u{1d408}',
-        &['\u{49}']), ('\u{1d409}', &['\u{4a}']), ('\u{1d40a}', &['\u{4b}']), ('\u{1d40b}',
-        &['\u{4c}']), ('\u{1d40c}', &['\u{4d}']), ('\u{1d40d}', &['\u{4e}']), ('\u{1d40e}',
-        &['\u{4f}']), ('\u{1d40f}', &['\u{50}']), ('\u{1d410}', &['\u{51}']), ('\u{1d411}',
-        &['\u{52}']), ('\u{1d412}', &['\u{53}']), ('\u{1d413}', &['\u{54}']), ('\u{1d414}',
-        &['\u{55}']), ('\u{1d415}', &['\u{56}']), ('\u{1d416}', &['\u{57}']), ('\u{1d417}',
-        &['\u{58}']), ('\u{1d418}', &['\u{59}']), ('\u{1d419}', &['\u{5a}']), ('\u{1d41a}',
-        &['\u{61}']), ('\u{1d41b}', &['\u{62}']), ('\u{1d41c}', &['\u{63}']), ('\u{1d41d}',
-        &['\u{64}']), ('\u{1d41e}', &['\u{65}']), ('\u{1d41f}', &['\u{66}']), ('\u{1d420}',
-        &['\u{67}']), ('\u{1d421}', &['\u{68}']), ('\u{1d422}', &['\u{69}']), ('\u{1d423}',
-        &['\u{6a}']), ('\u{1d424}', &['\u{6b}']), ('\u{1d425}', &['\u{6c}']), ('\u{1d426}',
-        &['\u{6d}']), ('\u{1d427}', &['\u{6e}']), ('\u{1d428}', &['\u{6f}']), ('\u{1d429}',
-        &['\u{70}']), ('\u{1d42a}', &['\u{71}']), ('\u{1d42b}', &['\u{72}']), ('\u{1d42c}',
-        &['\u{73}']), ('\u{1d42d}', &['\u{74}']), ('\u{1d42e}', &['\u{75}']), ('\u{1d42f}',
-        &['\u{76}']), ('\u{1d430}', &['\u{77}']), ('\u{1d431}', &['\u{78}']), ('\u{1d432}',
-        &['\u{79}']), ('\u{1d433}', &['\u{7a}']), ('\u{1d434}', &['\u{41}']), ('\u{1d435}',
-        &['\u{42}']), ('\u{1d436}', &['\u{43}']), ('\u{1d437}', &['\u{44}']), ('\u{1d438}',
-        &['\u{45}']), ('\u{1d439}', &['\u{46}']), ('\u{1d43a}', &['\u{47}']), ('\u{1d43b}',
-        &['\u{48}']), ('\u{1d43c}', &['\u{49}']), ('\u{1d43d}', &['\u{4a}']), ('\u{1d43e}',
-        &['\u{4b}']), ('\u{1d43f}', &['\u{4c}']), ('\u{1d440}', &['\u{4d}']), ('\u{1d441}',
-        &['\u{4e}']), ('\u{1d442}', &['\u{4f}']), ('\u{1d443}', &['\u{50}']), ('\u{1d444}',
-        &['\u{51}']), ('\u{1d445}', &['\u{52}']), ('\u{1d446}', &['\u{53}']), ('\u{1d447}',
-        &['\u{54}']), ('\u{1d448}', &['\u{55}']), ('\u{1d449}', &['\u{56}']), ('\u{1d44a}',
-        &['\u{57}']), ('\u{1d44b}', &['\u{58}']), ('\u{1d44c}', &['\u{59}']), ('\u{1d44d}',
-        &['\u{5a}']), ('\u{1d44e}', &['\u{61}']), ('\u{1d44f}', &['\u{62}']), ('\u{1d450}',
-        &['\u{63}']), ('\u{1d451}', &['\u{64}']), ('\u{1d452}', &['\u{65}']), ('\u{1d453}',
-        &['\u{66}']), ('\u{1d454}', &['\u{67}']), ('\u{1d456}', &['\u{69}']), ('\u{1d457}',
-        &['\u{6a}']), ('\u{1d458}', &['\u{6b}']), ('\u{1d459}', &['\u{6c}']), ('\u{1d45a}',
-        &['\u{6d}']), ('\u{1d45b}', &['\u{6e}']), ('\u{1d45c}', &['\u{6f}']), ('\u{1d45d}',
-        &['\u{70}']), ('\u{1d45e}', &['\u{71}']), ('\u{1d45f}', &['\u{72}']), ('\u{1d460}',
-        &['\u{73}']), ('\u{1d461}', &['\u{74}']), ('\u{1d462}', &['\u{75}']), ('\u{1d463}',
-        &['\u{76}']), ('\u{1d464}', &['\u{77}']), ('\u{1d465}', &['\u{78}']), ('\u{1d466}',
-        &['\u{79}']), ('\u{1d467}', &['\u{7a}']), ('\u{1d468}', &['\u{41}']), ('\u{1d469}',
-        &['\u{42}']), ('\u{1d46a}', &['\u{43}']), ('\u{1d46b}', &['\u{44}']), ('\u{1d46c}',
-        &['\u{45}']), ('\u{1d46d}', &['\u{46}']), ('\u{1d46e}', &['\u{47}']), ('\u{1d46f}',
-        &['\u{48}']), ('\u{1d470}', &['\u{49}']), ('\u{1d471}', &['\u{4a}']), ('\u{1d472}',
-        &['\u{4b}']), ('\u{1d473}', &['\u{4c}']), ('\u{1d474}', &['\u{4d}']), ('\u{1d475}',
-        &['\u{4e}']), ('\u{1d476}', &['\u{4f}']), ('\u{1d477}', &['\u{50}']), ('\u{1d478}',
-        &['\u{51}']), ('\u{1d479}', &['\u{52}']), ('\u{1d47a}', &['\u{53}']), ('\u{1d47b}',
-        &['\u{54}']), ('\u{1d47c}', &['\u{55}']), ('\u{1d47d}', &['\u{56}']), ('\u{1d47e}',
-        &['\u{57}']), ('\u{1d47f}', &['\u{58}']), ('\u{1d480}', &['\u{59}']), ('\u{1d481}',
-        &['\u{5a}']), ('\u{1d482}', &['\u{61}']), ('\u{1d483}', &['\u{62}']), ('\u{1d484}',
-        &['\u{63}']), ('\u{1d485}', &['\u{64}']), ('\u{1d486}', &['\u{65}']), ('\u{1d487}',
-        &['\u{66}']), ('\u{1d488}', &['\u{67}']), ('\u{1d489}', &['\u{68}']), ('\u{1d48a}',
-        &['\u{69}']), ('\u{1d48b}', &['\u{6a}']), ('\u{1d48c}', &['\u{6b}']), ('\u{1d48d}',
-        &['\u{6c}']), ('\u{1d48e}', &['\u{6d}']), ('\u{1d48f}', &['\u{6e}']), ('\u{1d490}',
-        &['\u{6f}']), ('\u{1d491}', &['\u{70}']), ('\u{1d492}', &['\u{71}']), ('\u{1d493}',
-        &['\u{72}']), ('\u{1d494}', &['\u{73}']), ('\u{1d495}', &['\u{74}']), ('\u{1d496}',
-        &['\u{75}']), ('\u{1d497}', &['\u{76}']), ('\u{1d498}', &['\u{77}']), ('\u{1d499}',
-        &['\u{78}']), ('\u{1d49a}', &['\u{79}']), ('\u{1d49b}', &['\u{7a}']), ('\u{1d49c}',
-        &['\u{41}']), ('\u{1d49e}', &['\u{43}']), ('\u{1d49f}', &['\u{44}']), ('\u{1d4a2}',
-        &['\u{47}']), ('\u{1d4a5}', &['\u{4a}']), ('\u{1d4a6}', &['\u{4b}']), ('\u{1d4a9}',
-        &['\u{4e}']), ('\u{1d4aa}', &['\u{4f}']), ('\u{1d4ab}', &['\u{50}']), ('\u{1d4ac}',
-        &['\u{51}']), ('\u{1d4ae}', &['\u{53}']), ('\u{1d4af}', &['\u{54}']), ('\u{1d4b0}',
-        &['\u{55}']), ('\u{1d4b1}', &['\u{56}']), ('\u{1d4b2}', &['\u{57}']), ('\u{1d4b3}',
-        &['\u{58}']), ('\u{1d4b4}', &['\u{59}']), ('\u{1d4b5}', &['\u{5a}']), ('\u{1d4b6}',
-        &['\u{61}']), ('\u{1d4b7}', &['\u{62}']), ('\u{1d4b8}', &['\u{63}']), ('\u{1d4b9}',
-        &['\u{64}']), ('\u{1d4bb}', &['\u{66}']), ('\u{1d4bd}', &['\u{68}']), ('\u{1d4be}',
-        &['\u{69}']), ('\u{1d4bf}', &['\u{6a}']), ('\u{1d4c0}', &['\u{6b}']), ('\u{1d4c1}',
-        &['\u{6c}']), ('\u{1d4c2}', &['\u{6d}']), ('\u{1d4c3}', &['\u{6e}']), ('\u{1d4c5}',
-        &['\u{70}']), ('\u{1d4c6}', &['\u{71}']), ('\u{1d4c7}', &['\u{72}']), ('\u{1d4c8}',
-        &['\u{73}']), ('\u{1d4c9}', &['\u{74}']), ('\u{1d4ca}', &['\u{75}']), ('\u{1d4cb}',
-        &['\u{76}']), ('\u{1d4cc}', &['\u{77}']), ('\u{1d4cd}', &['\u{78}']), ('\u{1d4ce}',
-        &['\u{79}']), ('\u{1d4cf}', &['\u{7a}']), ('\u{1d4d0}', &['\u{41}']), ('\u{1d4d1}',
-        &['\u{42}']), ('\u{1d4d2}', &['\u{43}']), ('\u{1d4d3}', &['\u{44}']), ('\u{1d4d4}',
-        &['\u{45}']), ('\u{1d4d5}', &['\u{46}']), ('\u{1d4d6}', &['\u{47}']), ('\u{1d4d7}',
-        &['\u{48}']), ('\u{1d4d8}', &['\u{49}']), ('\u{1d4d9}', &['\u{4a}']), ('\u{1d4da}',
-        &['\u{4b}']), ('\u{1d4db}', &['\u{4c}']), ('\u{1d4dc}', &['\u{4d}']), ('\u{1d4dd}',
-        &['\u{4e}']), ('\u{1d4de}', &['\u{4f}']), ('\u{1d4df}', &['\u{50}']), ('\u{1d4e0}',
-        &['\u{51}']), ('\u{1d4e1}', &['\u{52}']), ('\u{1d4e2}', &['\u{53}']), ('\u{1d4e3}',
-        &['\u{54}']), ('\u{1d4e4}', &['\u{55}']), ('\u{1d4e5}', &['\u{56}']), ('\u{1d4e6}',
-        &['\u{57}']), ('\u{1d4e7}', &['\u{58}']), ('\u{1d4e8}', &['\u{59}']), ('\u{1d4e9}',
-        &['\u{5a}']), ('\u{1d4ea}', &['\u{61}']), ('\u{1d4eb}', &['\u{62}']), ('\u{1d4ec}',
-        &['\u{63}']), ('\u{1d4ed}', &['\u{64}']), ('\u{1d4ee}', &['\u{65}']), ('\u{1d4ef}',
-        &['\u{66}']), ('\u{1d4f0}', &['\u{67}']), ('\u{1d4f1}', &['\u{68}']), ('\u{1d4f2}',
-        &['\u{69}']), ('\u{1d4f3}', &['\u{6a}']), ('\u{1d4f4}', &['\u{6b}']), ('\u{1d4f5}',
-        &['\u{6c}']), ('\u{1d4f6}', &['\u{6d}']), ('\u{1d4f7}', &['\u{6e}']), ('\u{1d4f8}',
-        &['\u{6f}']), ('\u{1d4f9}', &['\u{70}']), ('\u{1d4fa}', &['\u{71}']), ('\u{1d4fb}',
-        &['\u{72}']), ('\u{1d4fc}', &['\u{73}']), ('\u{1d4fd}', &['\u{74}']), ('\u{1d4fe}',
-        &['\u{75}']), ('\u{1d4ff}', &['\u{76}']), ('\u{1d500}', &['\u{77}']), ('\u{1d501}',
-        &['\u{78}']), ('\u{1d502}', &['\u{79}']), ('\u{1d503}', &['\u{7a}']), ('\u{1d504}',
-        &['\u{41}']), ('\u{1d505}', &['\u{42}']), ('\u{1d507}', &['\u{44}']), ('\u{1d508}',
-        &['\u{45}']), ('\u{1d509}', &['\u{46}']), ('\u{1d50a}', &['\u{47}']), ('\u{1d50d}',
-        &['\u{4a}']), ('\u{1d50e}', &['\u{4b}']), ('\u{1d50f}', &['\u{4c}']), ('\u{1d510}',
-        &['\u{4d}']), ('\u{1d511}', &['\u{4e}']), ('\u{1d512}', &['\u{4f}']), ('\u{1d513}',
-        &['\u{50}']), ('\u{1d514}', &['\u{51}']), ('\u{1d516}', &['\u{53}']), ('\u{1d517}',
-        &['\u{54}']), ('\u{1d518}', &['\u{55}']), ('\u{1d519}', &['\u{56}']), ('\u{1d51a}',
-        &['\u{57}']), ('\u{1d51b}', &['\u{58}']), ('\u{1d51c}', &['\u{59}']), ('\u{1d51e}',
-        &['\u{61}']), ('\u{1d51f}', &['\u{62}']), ('\u{1d520}', &['\u{63}']), ('\u{1d521}',
-        &['\u{64}']), ('\u{1d522}', &['\u{65}']), ('\u{1d523}', &['\u{66}']), ('\u{1d524}',
-        &['\u{67}']), ('\u{1d525}', &['\u{68}']), ('\u{1d526}', &['\u{69}']), ('\u{1d527}',
-        &['\u{6a}']), ('\u{1d528}', &['\u{6b}']), ('\u{1d529}', &['\u{6c}']), ('\u{1d52a}',
-        &['\u{6d}']), ('\u{1d52b}', &['\u{6e}']), ('\u{1d52c}', &['\u{6f}']), ('\u{1d52d}',
-        &['\u{70}']), ('\u{1d52e}', &['\u{71}']), ('\u{1d52f}', &['\u{72}']), ('\u{1d530}',
-        &['\u{73}']), ('\u{1d531}', &['\u{74}']), ('\u{1d532}', &['\u{75}']), ('\u{1d533}',
-        &['\u{76}']), ('\u{1d534}', &['\u{77}']), ('\u{1d535}', &['\u{78}']), ('\u{1d536}',
-        &['\u{79}']), ('\u{1d537}', &['\u{7a}']), ('\u{1d538}', &['\u{41}']), ('\u{1d539}',
-        &['\u{42}']), ('\u{1d53b}', &['\u{44}']), ('\u{1d53c}', &['\u{45}']), ('\u{1d53d}',
-        &['\u{46}']), ('\u{1d53e}', &['\u{47}']), ('\u{1d540}', &['\u{49}']), ('\u{1d541}',
-        &['\u{4a}']), ('\u{1d542}', &['\u{4b}']), ('\u{1d543}', &['\u{4c}']), ('\u{1d544}',
-        &['\u{4d}']), ('\u{1d546}', &['\u{4f}']), ('\u{1d54a}', &['\u{53}']), ('\u{1d54b}',
-        &['\u{54}']), ('\u{1d54c}', &['\u{55}']), ('\u{1d54d}', &['\u{56}']), ('\u{1d54e}',
-        &['\u{57}']), ('\u{1d54f}', &['\u{58}']), ('\u{1d550}', &['\u{59}']), ('\u{1d552}',
-        &['\u{61}']), ('\u{1d553}', &['\u{62}']), ('\u{1d554}', &['\u{63}']), ('\u{1d555}',
-        &['\u{64}']), ('\u{1d556}', &['\u{65}']), ('\u{1d557}', &['\u{66}']), ('\u{1d558}',
-        &['\u{67}']), ('\u{1d559}', &['\u{68}']), ('\u{1d55a}', &['\u{69}']), ('\u{1d55b}',
-        &['\u{6a}']), ('\u{1d55c}', &['\u{6b}']), ('\u{1d55d}', &['\u{6c}']), ('\u{1d55e}',
-        &['\u{6d}']), ('\u{1d55f}', &['\u{6e}']), ('\u{1d560}', &['\u{6f}']), ('\u{1d561}',
-        &['\u{70}']), ('\u{1d562}', &['\u{71}']), ('\u{1d563}', &['\u{72}']), ('\u{1d564}',
-        &['\u{73}']), ('\u{1d565}', &['\u{74}']), ('\u{1d566}', &['\u{75}']), ('\u{1d567}',
-        &['\u{76}']), ('\u{1d568}', &['\u{77}']), ('\u{1d569}', &['\u{78}']), ('\u{1d56a}',
-        &['\u{79}']), ('\u{1d56b}', &['\u{7a}']), ('\u{1d56c}', &['\u{41}']), ('\u{1d56d}',
-        &['\u{42}']), ('\u{1d56e}', &['\u{43}']), ('\u{1d56f}', &['\u{44}']), ('\u{1d570}',
-        &['\u{45}']), ('\u{1d571}', &['\u{46}']), ('\u{1d572}', &['\u{47}']), ('\u{1d573}',
-        &['\u{48}']), ('\u{1d574}', &['\u{49}']), ('\u{1d575}', &['\u{4a}']), ('\u{1d576}',
-        &['\u{4b}']), ('\u{1d577}', &['\u{4c}']), ('\u{1d578}', &['\u{4d}']), ('\u{1d579}',
-        &['\u{4e}']), ('\u{1d57a}', &['\u{4f}']), ('\u{1d57b}', &['\u{50}']), ('\u{1d57c}',
-        &['\u{51}']), ('\u{1d57d}', &['\u{52}']), ('\u{1d57e}', &['\u{53}']), ('\u{1d57f}',
-        &['\u{54}']), ('\u{1d580}', &['\u{55}']), ('\u{1d581}', &['\u{56}']), ('\u{1d582}',
-        &['\u{57}']), ('\u{1d583}', &['\u{58}']), ('\u{1d584}', &['\u{59}']), ('\u{1d585}',
-        &['\u{5a}']), ('\u{1d586}', &['\u{61}']), ('\u{1d587}', &['\u{62}']), ('\u{1d588}',
-        &['\u{63}']), ('\u{1d589}', &['\u{64}']), ('\u{1d58a}', &['\u{65}']), ('\u{1d58b}',
-        &['\u{66}']), ('\u{1d58c}', &['\u{67}']), ('\u{1d58d}', &['\u{68}']), ('\u{1d58e}',
-        &['\u{69}']), ('\u{1d58f}', &['\u{6a}']), ('\u{1d590}', &['\u{6b}']), ('\u{1d591}',
-        &['\u{6c}']), ('\u{1d592}', &['\u{6d}']), ('\u{1d593}', &['\u{6e}']), ('\u{1d594}',
-        &['\u{6f}']), ('\u{1d595}', &['\u{70}']), ('\u{1d596}', &['\u{71}']), ('\u{1d597}',
-        &['\u{72}']), ('\u{1d598}', &['\u{73}']), ('\u{1d599}', &['\u{74}']), ('\u{1d59a}',
-        &['\u{75}']), ('\u{1d59b}', &['\u{76}']), ('\u{1d59c}', &['\u{77}']), ('\u{1d59d}',
-        &['\u{78}']), ('\u{1d59e}', &['\u{79}']), ('\u{1d59f}', &['\u{7a}']), ('\u{1d5a0}',
-        &['\u{41}']), ('\u{1d5a1}', &['\u{42}']), ('\u{1d5a2}', &['\u{43}']), ('\u{1d5a3}',
-        &['\u{44}']), ('\u{1d5a4}', &['\u{45}']), ('\u{1d5a5}', &['\u{46}']), ('\u{1d5a6}',
-        &['\u{47}']), ('\u{1d5a7}', &['\u{48}']), ('\u{1d5a8}', &['\u{49}']), ('\u{1d5a9}',
-        &['\u{4a}']), ('\u{1d5aa}', &['\u{4b}']), ('\u{1d5ab}', &['\u{4c}']), ('\u{1d5ac}',
-        &['\u{4d}']), ('\u{1d5ad}', &['\u{4e}']), ('\u{1d5ae}', &['\u{4f}']), ('\u{1d5af}',
-        &['\u{50}']), ('\u{1d5b0}', &['\u{51}']), ('\u{1d5b1}', &['\u{52}']), ('\u{1d5b2}',
-        &['\u{53}']), ('\u{1d5b3}', &['\u{54}']), ('\u{1d5b4}', &['\u{55}']), ('\u{1d5b5}',
-        &['\u{56}']), ('\u{1d5b6}', &['\u{57}']), ('\u{1d5b7}', &['\u{58}']), ('\u{1d5b8}',
-        &['\u{59}']), ('\u{1d5b9}', &['\u{5a}']), ('\u{1d5ba}', &['\u{61}']), ('\u{1d5bb}',
-        &['\u{62}']), ('\u{1d5bc}', &['\u{63}']), ('\u{1d5bd}', &['\u{64}']), ('\u{1d5be}',
-        &['\u{65}']), ('\u{1d5bf}', &['\u{66}']), ('\u{1d5c0}', &['\u{67}']), ('\u{1d5c1}',
-        &['\u{68}']), ('\u{1d5c2}', &['\u{69}']), ('\u{1d5c3}', &['\u{6a}']), ('\u{1d5c4}',
-        &['\u{6b}']), ('\u{1d5c5}', &['\u{6c}']), ('\u{1d5c6}', &['\u{6d}']), ('\u{1d5c7}',
-        &['\u{6e}']), ('\u{1d5c8}', &['\u{6f}']), ('\u{1d5c9}', &['\u{70}']), ('\u{1d5ca}',
-        &['\u{71}']), ('\u{1d5cb}', &['\u{72}']), ('\u{1d5cc}', &['\u{73}']), ('\u{1d5cd}',
-        &['\u{74}']), ('\u{1d5ce}', &['\u{75}']), ('\u{1d5cf}', &['\u{76}']), ('\u{1d5d0}',
-        &['\u{77}']), ('\u{1d5d1}', &['\u{78}']), ('\u{1d5d2}', &['\u{79}']), ('\u{1d5d3}',
-        &['\u{7a}']), ('\u{1d5d4}', &['\u{41}']), ('\u{1d5d5}', &['\u{42}']), ('\u{1d5d6}',
-        &['\u{43}']), ('\u{1d5d7}', &['\u{44}']), ('\u{1d5d8}', &['\u{45}']), ('\u{1d5d9}',
-        &['\u{46}']), ('\u{1d5da}', &['\u{47}']), ('\u{1d5db}', &['\u{48}']), ('\u{1d5dc}',
-        &['\u{49}']), ('\u{1d5dd}', &['\u{4a}']), ('\u{1d5de}', &['\u{4b}']), ('\u{1d5df}',
-        &['\u{4c}']), ('\u{1d5e0}', &['\u{4d}']), ('\u{1d5e1}', &['\u{4e}']), ('\u{1d5e2}',
-        &['\u{4f}']), ('\u{1d5e3}', &['\u{50}']), ('\u{1d5e4}', &['\u{51}']), ('\u{1d5e5}',
-        &['\u{52}']), ('\u{1d5e6}', &['\u{53}']), ('\u{1d5e7}', &['\u{54}']), ('\u{1d5e8}',
-        &['\u{55}']), ('\u{1d5e9}', &['\u{56}']), ('\u{1d5ea}', &['\u{57}']), ('\u{1d5eb}',
-        &['\u{58}']), ('\u{1d5ec}', &['\u{59}']), ('\u{1d5ed}', &['\u{5a}']), ('\u{1d5ee}',
-        &['\u{61}']), ('\u{1d5ef}', &['\u{62}']), ('\u{1d5f0}', &['\u{63}']), ('\u{1d5f1}',
-        &['\u{64}']), ('\u{1d5f2}', &['\u{65}']), ('\u{1d5f3}', &['\u{66}']), ('\u{1d5f4}',
-        &['\u{67}']), ('\u{1d5f5}', &['\u{68}']), ('\u{1d5f6}', &['\u{69}']), ('\u{1d5f7}',
-        &['\u{6a}']), ('\u{1d5f8}', &['\u{6b}']), ('\u{1d5f9}', &['\u{6c}']), ('\u{1d5fa}',
-        &['\u{6d}']), ('\u{1d5fb}', &['\u{6e}']), ('\u{1d5fc}', &['\u{6f}']), ('\u{1d5fd}',
-        &['\u{70}']), ('\u{1d5fe}', &['\u{71}']), ('\u{1d5ff}', &['\u{72}']), ('\u{1d600}',
-        &['\u{73}']), ('\u{1d601}', &['\u{74}']), ('\u{1d602}', &['\u{75}']), ('\u{1d603}',
-        &['\u{76}']), ('\u{1d604}', &['\u{77}']), ('\u{1d605}', &['\u{78}']), ('\u{1d606}',
-        &['\u{79}']), ('\u{1d607}', &['\u{7a}']), ('\u{1d608}', &['\u{41}']), ('\u{1d609}',
-        &['\u{42}']), ('\u{1d60a}', &['\u{43}']), ('\u{1d60b}', &['\u{44}']), ('\u{1d60c}',
-        &['\u{45}']), ('\u{1d60d}', &['\u{46}']), ('\u{1d60e}', &['\u{47}']), ('\u{1d60f}',
-        &['\u{48}']), ('\u{1d610}', &['\u{49}']), ('\u{1d611}', &['\u{4a}']), ('\u{1d612}',
-        &['\u{4b}']), ('\u{1d613}', &['\u{4c}']), ('\u{1d614}', &['\u{4d}']), ('\u{1d615}',
-        &['\u{4e}']), ('\u{1d616}', &['\u{4f}']), ('\u{1d617}', &['\u{50}']), ('\u{1d618}',
-        &['\u{51}']), ('\u{1d619}', &['\u{52}']), ('\u{1d61a}', &['\u{53}']), ('\u{1d61b}',
-        &['\u{54}']), ('\u{1d61c}', &['\u{55}']), ('\u{1d61d}', &['\u{56}']), ('\u{1d61e}',
-        &['\u{57}']), ('\u{1d61f}', &['\u{58}']), ('\u{1d620}', &['\u{59}']), ('\u{1d621}',
-        &['\u{5a}']), ('\u{1d622}', &['\u{61}']), ('\u{1d623}', &['\u{62}']), ('\u{1d624}',
-        &['\u{63}']), ('\u{1d625}', &['\u{64}']), ('\u{1d626}', &['\u{65}']), ('\u{1d627}',
-        &['\u{66}']), ('\u{1d628}', &['\u{67}']), ('\u{1d629}', &['\u{68}']), ('\u{1d62a}',
-        &['\u{69}']), ('\u{1d62b}', &['\u{6a}']), ('\u{1d62c}', &['\u{6b}']), ('\u{1d62d}',
-        &['\u{6c}']), ('\u{1d62e}', &['\u{6d}']), ('\u{1d62f}', &['\u{6e}']), ('\u{1d630}',
-        &['\u{6f}']), ('\u{1d631}', &['\u{70}']), ('\u{1d632}', &['\u{71}']), ('\u{1d633}',
-        &['\u{72}']), ('\u{1d634}', &['\u{73}']), ('\u{1d635}', &['\u{74}']), ('\u{1d636}',
-        &['\u{75}']), ('\u{1d637}', &['\u{76}']), ('\u{1d638}', &['\u{77}']), ('\u{1d639}',
-        &['\u{78}']), ('\u{1d63a}', &['\u{79}']), ('\u{1d63b}', &['\u{7a}']), ('\u{1d63c}',
-        &['\u{41}']), ('\u{1d63d}', &['\u{42}']), ('\u{1d63e}', &['\u{43}']), ('\u{1d63f}',
-        &['\u{44}']), ('\u{1d640}', &['\u{45}']), ('\u{1d641}', &['\u{46}']), ('\u{1d642}',
-        &['\u{47}']), ('\u{1d643}', &['\u{48}']), ('\u{1d644}', &['\u{49}']), ('\u{1d645}',
-        &['\u{4a}']), ('\u{1d646}', &['\u{4b}']), ('\u{1d647}', &['\u{4c}']), ('\u{1d648}',
-        &['\u{4d}']), ('\u{1d649}', &['\u{4e}']), ('\u{1d64a}', &['\u{4f}']), ('\u{1d64b}',
-        &['\u{50}']), ('\u{1d64c}', &['\u{51}']), ('\u{1d64d}', &['\u{52}']), ('\u{1d64e}',
-        &['\u{53}']), ('\u{1d64f}', &['\u{54}']), ('\u{1d650}', &['\u{55}']), ('\u{1d651}',
-        &['\u{56}']), ('\u{1d652}', &['\u{57}']), ('\u{1d653}', &['\u{58}']), ('\u{1d654}',
-        &['\u{59}']), ('\u{1d655}', &['\u{5a}']), ('\u{1d656}', &['\u{61}']), ('\u{1d657}',
-        &['\u{62}']), ('\u{1d658}', &['\u{63}']), ('\u{1d659}', &['\u{64}']), ('\u{1d65a}',
-        &['\u{65}']), ('\u{1d65b}', &['\u{66}']), ('\u{1d65c}', &['\u{67}']), ('\u{1d65d}',
-        &['\u{68}']), ('\u{1d65e}', &['\u{69}']), ('\u{1d65f}', &['\u{6a}']), ('\u{1d660}',
-        &['\u{6b}']), ('\u{1d661}', &['\u{6c}']), ('\u{1d662}', &['\u{6d}']), ('\u{1d663}',
-        &['\u{6e}']), ('\u{1d664}', &['\u{6f}']), ('\u{1d665}', &['\u{70}']), ('\u{1d666}',
-        &['\u{71}']), ('\u{1d667}', &['\u{72}']), ('\u{1d668}', &['\u{73}']), ('\u{1d669}',
-        &['\u{74}']), ('\u{1d66a}', &['\u{75}']), ('\u{1d66b}', &['\u{76}']), ('\u{1d66c}',
-        &['\u{77}']), ('\u{1d66d}', &['\u{78}']), ('\u{1d66e}', &['\u{79}']), ('\u{1d66f}',
-        &['\u{7a}']), ('\u{1d670}', &['\u{41}']), ('\u{1d671}', &['\u{42}']), ('\u{1d672}',
-        &['\u{43}']), ('\u{1d673}', &['\u{44}']), ('\u{1d674}', &['\u{45}']), ('\u{1d675}',
-        &['\u{46}']), ('\u{1d676}', &['\u{47}']), ('\u{1d677}', &['\u{48}']), ('\u{1d678}',
-        &['\u{49}']), ('\u{1d679}', &['\u{4a}']), ('\u{1d67a}', &['\u{4b}']), ('\u{1d67b}',
-        &['\u{4c}']), ('\u{1d67c}', &['\u{4d}']), ('\u{1d67d}', &['\u{4e}']), ('\u{1d67e}',
-        &['\u{4f}']), ('\u{1d67f}', &['\u{50}']), ('\u{1d680}', &['\u{51}']), ('\u{1d681}',
-        &['\u{52}']), ('\u{1d682}', &['\u{53}']), ('\u{1d683}', &['\u{54}']), ('\u{1d684}',
-        &['\u{55}']), ('\u{1d685}', &['\u{56}']), ('\u{1d686}', &['\u{57}']), ('\u{1d687}',
-        &['\u{58}']), ('\u{1d688}', &['\u{59}']), ('\u{1d689}', &['\u{5a}']), ('\u{1d68a}',
-        &['\u{61}']), ('\u{1d68b}', &['\u{62}']), ('\u{1d68c}', &['\u{63}']), ('\u{1d68d}',
-        &['\u{64}']), ('\u{1d68e}', &['\u{65}']), ('\u{1d68f}', &['\u{66}']), ('\u{1d690}',
-        &['\u{67}']), ('\u{1d691}', &['\u{68}']), ('\u{1d692}', &['\u{69}']), ('\u{1d693}',
-        &['\u{6a}']), ('\u{1d694}', &['\u{6b}']), ('\u{1d695}', &['\u{6c}']), ('\u{1d696}',
-        &['\u{6d}']), ('\u{1d697}', &['\u{6e}']), ('\u{1d698}', &['\u{6f}']), ('\u{1d699}',
-        &['\u{70}']), ('\u{1d69a}', &['\u{71}']), ('\u{1d69b}', &['\u{72}']), ('\u{1d69c}',
-        &['\u{73}']), ('\u{1d69d}', &['\u{74}']), ('\u{1d69e}', &['\u{75}']), ('\u{1d69f}',
-        &['\u{76}']), ('\u{1d6a0}', &['\u{77}']), ('\u{1d6a1}', &['\u{78}']), ('\u{1d6a2}',
-        &['\u{79}']), ('\u{1d6a3}', &['\u{7a}']), ('\u{1d6a4}', &['\u{131}']), ('\u{1d6a5}',
-        &['\u{237}']), ('\u{1d6a8}', &['\u{391}']), ('\u{1d6a9}', &['\u{392}']), ('\u{1d6aa}',
-        &['\u{393}']), ('\u{1d6ab}', &['\u{394}']), ('\u{1d6ac}', &['\u{395}']), ('\u{1d6ad}',
-        &['\u{396}']), ('\u{1d6ae}', &['\u{397}']), ('\u{1d6af}', &['\u{398}']), ('\u{1d6b0}',
-        &['\u{399}']), ('\u{1d6b1}', &['\u{39a}']), ('\u{1d6b2}', &['\u{39b}']), ('\u{1d6b3}',
-        &['\u{39c}']), ('\u{1d6b4}', &['\u{39d}']), ('\u{1d6b5}', &['\u{39e}']), ('\u{1d6b6}',
-        &['\u{39f}']), ('\u{1d6b7}', &['\u{3a0}']), ('\u{1d6b8}', &['\u{3a1}']), ('\u{1d6b9}',
-        &['\u{3f4}']), ('\u{1d6ba}', &['\u{3a3}']), ('\u{1d6bb}', &['\u{3a4}']), ('\u{1d6bc}',
-        &['\u{3a5}']), ('\u{1d6bd}', &['\u{3a6}']), ('\u{1d6be}', &['\u{3a7}']), ('\u{1d6bf}',
-        &['\u{3a8}']), ('\u{1d6c0}', &['\u{3a9}']), ('\u{1d6c1}', &['\u{2207}']), ('\u{1d6c2}',
-        &['\u{3b1}']), ('\u{1d6c3}', &['\u{3b2}']), ('\u{1d6c4}', &['\u{3b3}']), ('\u{1d6c5}',
-        &['\u{3b4}']), ('\u{1d6c6}', &['\u{3b5}']), ('\u{1d6c7}', &['\u{3b6}']), ('\u{1d6c8}',
-        &['\u{3b7}']), ('\u{1d6c9}', &['\u{3b8}']), ('\u{1d6ca}', &['\u{3b9}']), ('\u{1d6cb}',
-        &['\u{3ba}']), ('\u{1d6cc}', &['\u{3bb}']), ('\u{1d6cd}', &['\u{3bc}']), ('\u{1d6ce}',
-        &['\u{3bd}']), ('\u{1d6cf}', &['\u{3be}']), ('\u{1d6d0}', &['\u{3bf}']), ('\u{1d6d1}',
-        &['\u{3c0}']), ('\u{1d6d2}', &['\u{3c1}']), ('\u{1d6d3}', &['\u{3c2}']), ('\u{1d6d4}',
-        &['\u{3c3}']), ('\u{1d6d5}', &['\u{3c4}']), ('\u{1d6d6}', &['\u{3c5}']), ('\u{1d6d7}',
-        &['\u{3c6}']), ('\u{1d6d8}', &['\u{3c7}']), ('\u{1d6d9}', &['\u{3c8}']), ('\u{1d6da}',
-        &['\u{3c9}']), ('\u{1d6db}', &['\u{2202}']), ('\u{1d6dc}', &['\u{3f5}']), ('\u{1d6dd}',
-        &['\u{3d1}']), ('\u{1d6de}', &['\u{3f0}']), ('\u{1d6df}', &['\u{3d5}']), ('\u{1d6e0}',
-        &['\u{3f1}']), ('\u{1d6e1}', &['\u{3d6}']), ('\u{1d6e2}', &['\u{391}']), ('\u{1d6e3}',
-        &['\u{392}']), ('\u{1d6e4}', &['\u{393}']), ('\u{1d6e5}', &['\u{394}']), ('\u{1d6e6}',
-        &['\u{395}']), ('\u{1d6e7}', &['\u{396}']), ('\u{1d6e8}', &['\u{397}']), ('\u{1d6e9}',
-        &['\u{398}']), ('\u{1d6ea}', &['\u{399}']), ('\u{1d6eb}', &['\u{39a}']), ('\u{1d6ec}',
-        &['\u{39b}']), ('\u{1d6ed}', &['\u{39c}']), ('\u{1d6ee}', &['\u{39d}']), ('\u{1d6ef}',
-        &['\u{39e}']), ('\u{1d6f0}', &['\u{39f}']), ('\u{1d6f1}', &['\u{3a0}']), ('\u{1d6f2}',
-        &['\u{3a1}']), ('\u{1d6f3}', &['\u{3f4}']), ('\u{1d6f4}', &['\u{3a3}']), ('\u{1d6f5}',
-        &['\u{3a4}']), ('\u{1d6f6}', &['\u{3a5}']), ('\u{1d6f7}', &['\u{3a6}']), ('\u{1d6f8}',
-        &['\u{3a7}']), ('\u{1d6f9}', &['\u{3a8}']), ('\u{1d6fa}', &['\u{3a9}']), ('\u{1d6fb}',
-        &['\u{2207}']), ('\u{1d6fc}', &['\u{3b1}']), ('\u{1d6fd}', &['\u{3b2}']), ('\u{1d6fe}',
-        &['\u{3b3}']), ('\u{1d6ff}', &['\u{3b4}']), ('\u{1d700}', &['\u{3b5}']), ('\u{1d701}',
-        &['\u{3b6}']), ('\u{1d702}', &['\u{3b7}']), ('\u{1d703}', &['\u{3b8}']), ('\u{1d704}',
-        &['\u{3b9}']), ('\u{1d705}', &['\u{3ba}']), ('\u{1d706}', &['\u{3bb}']), ('\u{1d707}',
-        &['\u{3bc}']), ('\u{1d708}', &['\u{3bd}']), ('\u{1d709}', &['\u{3be}']), ('\u{1d70a}',
-        &['\u{3bf}']), ('\u{1d70b}', &['\u{3c0}']), ('\u{1d70c}', &['\u{3c1}']), ('\u{1d70d}',
-        &['\u{3c2}']), ('\u{1d70e}', &['\u{3c3}']), ('\u{1d70f}', &['\u{3c4}']), ('\u{1d710}',
-        &['\u{3c5}']), ('\u{1d711}', &['\u{3c6}']), ('\u{1d712}', &['\u{3c7}']), ('\u{1d713}',
-        &['\u{3c8}']), ('\u{1d714}', &['\u{3c9}']), ('\u{1d715}', &['\u{2202}']), ('\u{1d716}',
-        &['\u{3f5}']), ('\u{1d717}', &['\u{3d1}']), ('\u{1d718}', &['\u{3f0}']), ('\u{1d719}',
-        &['\u{3d5}']), ('\u{1d71a}', &['\u{3f1}']), ('\u{1d71b}', &['\u{3d6}']), ('\u{1d71c}',
-        &['\u{391}']), ('\u{1d71d}', &['\u{392}']), ('\u{1d71e}', &['\u{393}']), ('\u{1d71f}',
-        &['\u{394}']), ('\u{1d720}', &['\u{395}']), ('\u{1d721}', &['\u{396}']), ('\u{1d722}',
-        &['\u{397}']), ('\u{1d723}', &['\u{398}']), ('\u{1d724}', &['\u{399}']), ('\u{1d725}',
-        &['\u{39a}']), ('\u{1d726}', &['\u{39b}']), ('\u{1d727}', &['\u{39c}']), ('\u{1d728}',
-        &['\u{39d}']), ('\u{1d729}', &['\u{39e}']), ('\u{1d72a}', &['\u{39f}']), ('\u{1d72b}',
-        &['\u{3a0}']), ('\u{1d72c}', &['\u{3a1}']), ('\u{1d72d}', &['\u{3f4}']), ('\u{1d72e}',
-        &['\u{3a3}']), ('\u{1d72f}', &['\u{3a4}']), ('\u{1d730}', &['\u{3a5}']), ('\u{1d731}',
-        &['\u{3a6}']), ('\u{1d732}', &['\u{3a7}']), ('\u{1d733}', &['\u{3a8}']), ('\u{1d734}',
-        &['\u{3a9}']), ('\u{1d735}', &['\u{2207}']), ('\u{1d736}', &['\u{3b1}']), ('\u{1d737}',
-        &['\u{3b2}']), ('\u{1d738}', &['\u{3b3}']), ('\u{1d739}', &['\u{3b4}']), ('\u{1d73a}',
-        &['\u{3b5}']), ('\u{1d73b}', &['\u{3b6}']), ('\u{1d73c}', &['\u{3b7}']), ('\u{1d73d}',
-        &['\u{3b8}']), ('\u{1d73e}', &['\u{3b9}']), ('\u{1d73f}', &['\u{3ba}']), ('\u{1d740}',
-        &['\u{3bb}']), ('\u{1d741}', &['\u{3bc}']), ('\u{1d742}', &['\u{3bd}']), ('\u{1d743}',
-        &['\u{3be}']), ('\u{1d744}', &['\u{3bf}']), ('\u{1d745}', &['\u{3c0}']), ('\u{1d746}',
-        &['\u{3c1}']), ('\u{1d747}', &['\u{3c2}']), ('\u{1d748}', &['\u{3c3}']), ('\u{1d749}',
-        &['\u{3c4}']), ('\u{1d74a}', &['\u{3c5}']), ('\u{1d74b}', &['\u{3c6}']), ('\u{1d74c}',
-        &['\u{3c7}']), ('\u{1d74d}', &['\u{3c8}']), ('\u{1d74e}', &['\u{3c9}']), ('\u{1d74f}',
-        &['\u{2202}']), ('\u{1d750}', &['\u{3f5}']), ('\u{1d751}', &['\u{3d1}']), ('\u{1d752}',
-        &['\u{3f0}']), ('\u{1d753}', &['\u{3d5}']), ('\u{1d754}', &['\u{3f1}']), ('\u{1d755}',
-        &['\u{3d6}']), ('\u{1d756}', &['\u{391}']), ('\u{1d757}', &['\u{392}']), ('\u{1d758}',
-        &['\u{393}']), ('\u{1d759}', &['\u{394}']), ('\u{1d75a}', &['\u{395}']), ('\u{1d75b}',
-        &['\u{396}']), ('\u{1d75c}', &['\u{397}']), ('\u{1d75d}', &['\u{398}']), ('\u{1d75e}',
-        &['\u{399}']), ('\u{1d75f}', &['\u{39a}']), ('\u{1d760}', &['\u{39b}']), ('\u{1d761}',
-        &['\u{39c}']), ('\u{1d762}', &['\u{39d}']), ('\u{1d763}', &['\u{39e}']), ('\u{1d764}',
-        &['\u{39f}']), ('\u{1d765}', &['\u{3a0}']), ('\u{1d766}', &['\u{3a1}']), ('\u{1d767}',
-        &['\u{3f4}']), ('\u{1d768}', &['\u{3a3}']), ('\u{1d769}', &['\u{3a4}']), ('\u{1d76a}',
-        &['\u{3a5}']), ('\u{1d76b}', &['\u{3a6}']), ('\u{1d76c}', &['\u{3a7}']), ('\u{1d76d}',
-        &['\u{3a8}']), ('\u{1d76e}', &['\u{3a9}']), ('\u{1d76f}', &['\u{2207}']), ('\u{1d770}',
-        &['\u{3b1}']), ('\u{1d771}', &['\u{3b2}']), ('\u{1d772}', &['\u{3b3}']), ('\u{1d773}',
-        &['\u{3b4}']), ('\u{1d774}', &['\u{3b5}']), ('\u{1d775}', &['\u{3b6}']), ('\u{1d776}',
-        &['\u{3b7}']), ('\u{1d777}', &['\u{3b8}']), ('\u{1d778}', &['\u{3b9}']), ('\u{1d779}',
-        &['\u{3ba}']), ('\u{1d77a}', &['\u{3bb}']), ('\u{1d77b}', &['\u{3bc}']), ('\u{1d77c}',
-        &['\u{3bd}']), ('\u{1d77d}', &['\u{3be}']), ('\u{1d77e}', &['\u{3bf}']), ('\u{1d77f}',
-        &['\u{3c0}']), ('\u{1d780}', &['\u{3c1}']), ('\u{1d781}', &['\u{3c2}']), ('\u{1d782}',
-        &['\u{3c3}']), ('\u{1d783}', &['\u{3c4}']), ('\u{1d784}', &['\u{3c5}']), ('\u{1d785}',
-        &['\u{3c6}']), ('\u{1d786}', &['\u{3c7}']), ('\u{1d787}', &['\u{3c8}']), ('\u{1d788}',
-        &['\u{3c9}']), ('\u{1d789}', &['\u{2202}']), ('\u{1d78a}', &['\u{3f5}']), ('\u{1d78b}',
-        &['\u{3d1}']), ('\u{1d78c}', &['\u{3f0}']), ('\u{1d78d}', &['\u{3d5}']), ('\u{1d78e}',
-        &['\u{3f1}']), ('\u{1d78f}', &['\u{3d6}']), ('\u{1d790}', &['\u{391}']), ('\u{1d791}',
-        &['\u{392}']), ('\u{1d792}', &['\u{393}']), ('\u{1d793}', &['\u{394}']), ('\u{1d794}',
-        &['\u{395}']), ('\u{1d795}', &['\u{396}']), ('\u{1d796}', &['\u{397}']), ('\u{1d797}',
-        &['\u{398}']), ('\u{1d798}', &['\u{399}']), ('\u{1d799}', &['\u{39a}']), ('\u{1d79a}',
-        &['\u{39b}']), ('\u{1d79b}', &['\u{39c}']), ('\u{1d79c}', &['\u{39d}']), ('\u{1d79d}',
-        &['\u{39e}']), ('\u{1d79e}', &['\u{39f}']), ('\u{1d79f}', &['\u{3a0}']), ('\u{1d7a0}',
-        &['\u{3a1}']), ('\u{1d7a1}', &['\u{3f4}']), ('\u{1d7a2}', &['\u{3a3}']), ('\u{1d7a3}',
-        &['\u{3a4}']), ('\u{1d7a4}', &['\u{3a5}']), ('\u{1d7a5}', &['\u{3a6}']), ('\u{1d7a6}',
-        &['\u{3a7}']), ('\u{1d7a7}', &['\u{3a8}']), ('\u{1d7a8}', &['\u{3a9}']), ('\u{1d7a9}',
-        &['\u{2207}']), ('\u{1d7aa}', &['\u{3b1}']), ('\u{1d7ab}', &['\u{3b2}']), ('\u{1d7ac}',
-        &['\u{3b3}']), ('\u{1d7ad}', &['\u{3b4}']), ('\u{1d7ae}', &['\u{3b5}']), ('\u{1d7af}',
-        &['\u{3b6}']), ('\u{1d7b0}', &['\u{3b7}']), ('\u{1d7b1}', &['\u{3b8}']), ('\u{1d7b2}',
-        &['\u{3b9}']), ('\u{1d7b3}', &['\u{3ba}']), ('\u{1d7b4}', &['\u{3bb}']), ('\u{1d7b5}',
-        &['\u{3bc}']), ('\u{1d7b6}', &['\u{3bd}']), ('\u{1d7b7}', &['\u{3be}']), ('\u{1d7b8}',
-        &['\u{3bf}']), ('\u{1d7b9}', &['\u{3c0}']), ('\u{1d7ba}', &['\u{3c1}']), ('\u{1d7bb}',
-        &['\u{3c2}']), ('\u{1d7bc}', &['\u{3c3}']), ('\u{1d7bd}', &['\u{3c4}']), ('\u{1d7be}',
-        &['\u{3c5}']), ('\u{1d7bf}', &['\u{3c6}']), ('\u{1d7c0}', &['\u{3c7}']), ('\u{1d7c1}',
-        &['\u{3c8}']), ('\u{1d7c2}', &['\u{3c9}']), ('\u{1d7c3}', &['\u{2202}']), ('\u{1d7c4}',
-        &['\u{3f5}']), ('\u{1d7c5}', &['\u{3d1}']), ('\u{1d7c6}', &['\u{3f0}']), ('\u{1d7c7}',
-        &['\u{3d5}']), ('\u{1d7c8}', &['\u{3f1}']), ('\u{1d7c9}', &['\u{3d6}']), ('\u{1d7ca}',
-        &['\u{3dc}']), ('\u{1d7cb}', &['\u{3dd}']), ('\u{1d7ce}', &['\u{30}']), ('\u{1d7cf}',
-        &['\u{31}']), ('\u{1d7d0}', &['\u{32}']), ('\u{1d7d1}', &['\u{33}']), ('\u{1d7d2}',
-        &['\u{34}']), ('\u{1d7d3}', &['\u{35}']), ('\u{1d7d4}', &['\u{36}']), ('\u{1d7d5}',
-        &['\u{37}']), ('\u{1d7d6}', &['\u{38}']), ('\u{1d7d7}', &['\u{39}']), ('\u{1d7d8}',
-        &['\u{30}']), ('\u{1d7d9}', &['\u{31}']), ('\u{1d7da}', &['\u{32}']), ('\u{1d7db}',
-        &['\u{33}']), ('\u{1d7dc}', &['\u{34}']), ('\u{1d7dd}', &['\u{35}']), ('\u{1d7de}',
-        &['\u{36}']), ('\u{1d7df}', &['\u{37}']), ('\u{1d7e0}', &['\u{38}']), ('\u{1d7e1}',
-        &['\u{39}']), ('\u{1d7e2}', &['\u{30}']), ('\u{1d7e3}', &['\u{31}']), ('\u{1d7e4}',
-        &['\u{32}']), ('\u{1d7e5}', &['\u{33}']), ('\u{1d7e6}', &['\u{34}']), ('\u{1d7e7}',
-        &['\u{35}']), ('\u{1d7e8}', &['\u{36}']), ('\u{1d7e9}', &['\u{37}']), ('\u{1d7ea}',
-        &['\u{38}']), ('\u{1d7eb}', &['\u{39}']), ('\u{1d7ec}', &['\u{30}']), ('\u{1d7ed}',
-        &['\u{31}']), ('\u{1d7ee}', &['\u{32}']), ('\u{1d7ef}', &['\u{33}']), ('\u{1d7f0}',
-        &['\u{34}']), ('\u{1d7f1}', &['\u{35}']), ('\u{1d7f2}', &['\u{36}']), ('\u{1d7f3}',
-        &['\u{37}']), ('\u{1d7f4}', &['\u{38}']), ('\u{1d7f5}', &['\u{39}']), ('\u{1d7f6}',
-        &['\u{30}']), ('\u{1d7f7}', &['\u{31}']), ('\u{1d7f8}', &['\u{32}']), ('\u{1d7f9}',
-        &['\u{33}']), ('\u{1d7fa}', &['\u{34}']), ('\u{1d7fb}', &['\u{35}']), ('\u{1d7fc}',
-        &['\u{36}']), ('\u{1d7fd}', &['\u{37}']), ('\u{1d7fe}', &['\u{38}']), ('\u{1d7ff}',
-        &['\u{39}']), ('\u{1ee00}', &['\u{627}']), ('\u{1ee01}', &['\u{628}']), ('\u{1ee02}',
-        &['\u{62c}']), ('\u{1ee03}', &['\u{62f}']), ('\u{1ee05}', &['\u{648}']), ('\u{1ee06}',
-        &['\u{632}']), ('\u{1ee07}', &['\u{62d}']), ('\u{1ee08}', &['\u{637}']), ('\u{1ee09}',
-        &['\u{64a}']), ('\u{1ee0a}', &['\u{643}']), ('\u{1ee0b}', &['\u{644}']), ('\u{1ee0c}',
-        &['\u{645}']), ('\u{1ee0d}', &['\u{646}']), ('\u{1ee0e}', &['\u{633}']), ('\u{1ee0f}',
-        &['\u{639}']), ('\u{1ee10}', &['\u{641}']), ('\u{1ee11}', &['\u{635}']), ('\u{1ee12}',
-        &['\u{642}']), ('\u{1ee13}', &['\u{631}']), ('\u{1ee14}', &['\u{634}']), ('\u{1ee15}',
-        &['\u{62a}']), ('\u{1ee16}', &['\u{62b}']), ('\u{1ee17}', &['\u{62e}']), ('\u{1ee18}',
-        &['\u{630}']), ('\u{1ee19}', &['\u{636}']), ('\u{1ee1a}', &['\u{638}']), ('\u{1ee1b}',
-        &['\u{63a}']), ('\u{1ee1c}', &['\u{66e}']), ('\u{1ee1d}', &['\u{6ba}']), ('\u{1ee1e}',
-        &['\u{6a1}']), ('\u{1ee1f}', &['\u{66f}']), ('\u{1ee21}', &['\u{628}']), ('\u{1ee22}',
-        &['\u{62c}']), ('\u{1ee24}', &['\u{647}']), ('\u{1ee27}', &['\u{62d}']), ('\u{1ee29}',
-        &['\u{64a}']), ('\u{1ee2a}', &['\u{643}']), ('\u{1ee2b}', &['\u{644}']), ('\u{1ee2c}',
-        &['\u{645}']), ('\u{1ee2d}', &['\u{646}']), ('\u{1ee2e}', &['\u{633}']), ('\u{1ee2f}',
-        &['\u{639}']), ('\u{1ee30}', &['\u{641}']), ('\u{1ee31}', &['\u{635}']), ('\u{1ee32}',
-        &['\u{642}']), ('\u{1ee34}', &['\u{634}']), ('\u{1ee35}', &['\u{62a}']), ('\u{1ee36}',
-        &['\u{62b}']), ('\u{1ee37}', &['\u{62e}']), ('\u{1ee39}', &['\u{636}']), ('\u{1ee3b}',
-        &['\u{63a}']), ('\u{1ee42}', &['\u{62c}']), ('\u{1ee47}', &['\u{62d}']), ('\u{1ee49}',
-        &['\u{64a}']), ('\u{1ee4b}', &['\u{644}']), ('\u{1ee4d}', &['\u{646}']), ('\u{1ee4e}',
-        &['\u{633}']), ('\u{1ee4f}', &['\u{639}']), ('\u{1ee51}', &['\u{635}']), ('\u{1ee52}',
-        &['\u{642}']), ('\u{1ee54}', &['\u{634}']), ('\u{1ee57}', &['\u{62e}']), ('\u{1ee59}',
-        &['\u{636}']), ('\u{1ee5b}', &['\u{63a}']), ('\u{1ee5d}', &['\u{6ba}']), ('\u{1ee5f}',
-        &['\u{66f}']), ('\u{1ee61}', &['\u{628}']), ('\u{1ee62}', &['\u{62c}']), ('\u{1ee64}',
-        &['\u{647}']), ('\u{1ee67}', &['\u{62d}']), ('\u{1ee68}', &['\u{637}']), ('\u{1ee69}',
-        &['\u{64a}']), ('\u{1ee6a}', &['\u{643}']), ('\u{1ee6c}', &['\u{645}']), ('\u{1ee6d}',
-        &['\u{646}']), ('\u{1ee6e}', &['\u{633}']), ('\u{1ee6f}', &['\u{639}']), ('\u{1ee70}',
-        &['\u{641}']), ('\u{1ee71}', &['\u{635}']), ('\u{1ee72}', &['\u{642}']), ('\u{1ee74}',
-        &['\u{634}']), ('\u{1ee75}', &['\u{62a}']), ('\u{1ee76}', &['\u{62b}']), ('\u{1ee77}',
-        &['\u{62e}']), ('\u{1ee79}', &['\u{636}']), ('\u{1ee7a}', &['\u{638}']), ('\u{1ee7b}',
-        &['\u{63a}']), ('\u{1ee7c}', &['\u{66e}']), ('\u{1ee7e}', &['\u{6a1}']), ('\u{1ee80}',
-        &['\u{627}']), ('\u{1ee81}', &['\u{628}']), ('\u{1ee82}', &['\u{62c}']), ('\u{1ee83}',
-        &['\u{62f}']), ('\u{1ee84}', &['\u{647}']), ('\u{1ee85}', &['\u{648}']), ('\u{1ee86}',
-        &['\u{632}']), ('\u{1ee87}', &['\u{62d}']), ('\u{1ee88}', &['\u{637}']), ('\u{1ee89}',
-        &['\u{64a}']), ('\u{1ee8b}', &['\u{644}']), ('\u{1ee8c}', &['\u{645}']), ('\u{1ee8d}',
-        &['\u{646}']), ('\u{1ee8e}', &['\u{633}']), ('\u{1ee8f}', &['\u{639}']), ('\u{1ee90}',
-        &['\u{641}']), ('\u{1ee91}', &['\u{635}']), ('\u{1ee92}', &['\u{642}']), ('\u{1ee93}',
-        &['\u{631}']), ('\u{1ee94}', &['\u{634}']), ('\u{1ee95}', &['\u{62a}']), ('\u{1ee96}',
-        &['\u{62b}']), ('\u{1ee97}', &['\u{62e}']), ('\u{1ee98}', &['\u{630}']), ('\u{1ee99}',
-        &['\u{636}']), ('\u{1ee9a}', &['\u{638}']), ('\u{1ee9b}', &['\u{63a}']), ('\u{1eea1}',
-        &['\u{628}']), ('\u{1eea2}', &['\u{62c}']), ('\u{1eea3}', &['\u{62f}']), ('\u{1eea5}',
-        &['\u{648}']), ('\u{1eea6}', &['\u{632}']), ('\u{1eea7}', &['\u{62d}']), ('\u{1eea8}',
-        &['\u{637}']), ('\u{1eea9}', &['\u{64a}']), ('\u{1eeab}', &['\u{644}']), ('\u{1eeac}',
-        &['\u{645}']), ('\u{1eead}', &['\u{646}']), ('\u{1eeae}', &['\u{633}']), ('\u{1eeaf}',
-        &['\u{639}']), ('\u{1eeb0}', &['\u{641}']), ('\u{1eeb1}', &['\u{635}']), ('\u{1eeb2}',
-        &['\u{642}']), ('\u{1eeb3}', &['\u{631}']), ('\u{1eeb4}', &['\u{634}']), ('\u{1eeb5}',
-        &['\u{62a}']), ('\u{1eeb6}', &['\u{62b}']), ('\u{1eeb7}', &['\u{62e}']), ('\u{1eeb8}',
-        &['\u{630}']), ('\u{1eeb9}', &['\u{636}']), ('\u{1eeba}', &['\u{638}']), ('\u{1eebb}',
-        &['\u{63a}']), ('\u{1f100}', &['\u{30}', '\u{2e}']), ('\u{1f101}', &['\u{30}', '\u{2c}']),
-        ('\u{1f102}', &['\u{31}', '\u{2c}']), ('\u{1f103}', &['\u{32}', '\u{2c}']), ('\u{1f104}',
-        &['\u{33}', '\u{2c}']), ('\u{1f105}', &['\u{34}', '\u{2c}']), ('\u{1f106}', &['\u{35}',
-        '\u{2c}']), ('\u{1f107}', &['\u{36}', '\u{2c}']), ('\u{1f108}', &['\u{37}', '\u{2c}']),
-        ('\u{1f109}', &['\u{38}', '\u{2c}']), ('\u{1f10a}', &['\u{39}', '\u{2c}']), ('\u{1f110}',
-        &['\u{28}', '\u{41}', '\u{29}']), ('\u{1f111}', &['\u{28}', '\u{42}', '\u{29}']),
-        ('\u{1f112}', &['\u{28}', '\u{43}', '\u{29}']), ('\u{1f113}', &['\u{28}', '\u{44}',
-        '\u{29}']), ('\u{1f114}', &['\u{28}', '\u{45}', '\u{29}']), ('\u{1f115}', &['\u{28}',
-        '\u{46}', '\u{29}']), ('\u{1f116}', &['\u{28}', '\u{47}', '\u{29}']), ('\u{1f117}',
-        &['\u{28}', '\u{48}', '\u{29}']), ('\u{1f118}', &['\u{28}', '\u{49}', '\u{29}']),
-        ('\u{1f119}', &['\u{28}', '\u{4a}', '\u{29}']), ('\u{1f11a}', &['\u{28}', '\u{4b}',
-        '\u{29}']), ('\u{1f11b}', &['\u{28}', '\u{4c}', '\u{29}']), ('\u{1f11c}', &['\u{28}',
-        '\u{4d}', '\u{29}']), ('\u{1f11d}', &['\u{28}', '\u{4e}', '\u{29}']), ('\u{1f11e}',
-        &['\u{28}', '\u{4f}', '\u{29}']), ('\u{1f11f}', &['\u{28}', '\u{50}', '\u{29}']),
-        ('\u{1f120}', &['\u{28}', '\u{51}', '\u{29}']), ('\u{1f121}', &['\u{28}', '\u{52}',
-        '\u{29}']), ('\u{1f122}', &['\u{28}', '\u{53}', '\u{29}']), ('\u{1f123}', &['\u{28}',
-        '\u{54}', '\u{29}']), ('\u{1f124}', &['\u{28}', '\u{55}', '\u{29}']), ('\u{1f125}',
-        &['\u{28}', '\u{56}', '\u{29}']), ('\u{1f126}', &['\u{28}', '\u{57}', '\u{29}']),
-        ('\u{1f127}', &['\u{28}', '\u{58}', '\u{29}']), ('\u{1f128}', &['\u{28}', '\u{59}',
-        '\u{29}']), ('\u{1f129}', &['\u{28}', '\u{5a}', '\u{29}']), ('\u{1f12a}', &['\u{3014}',
-        '\u{53}', '\u{3015}']), ('\u{1f12b}', &['\u{43}']), ('\u{1f12c}', &['\u{52}']),
-        ('\u{1f12d}', &['\u{43}', '\u{44}']), ('\u{1f12e}', &['\u{57}', '\u{5a}']), ('\u{1f130}',
-        &['\u{41}']), ('\u{1f131}', &['\u{42}']), ('\u{1f132}', &['\u{43}']), ('\u{1f133}',
-        &['\u{44}']), ('\u{1f134}', &['\u{45}']), ('\u{1f135}', &['\u{46}']), ('\u{1f136}',
-        &['\u{47}']), ('\u{1f137}', &['\u{48}']), ('\u{1f138}', &['\u{49}']), ('\u{1f139}',
-        &['\u{4a}']), ('\u{1f13a}', &['\u{4b}']), ('\u{1f13b}', &['\u{4c}']), ('\u{1f13c}',
-        &['\u{4d}']), ('\u{1f13d}', &['\u{4e}']), ('\u{1f13e}', &['\u{4f}']), ('\u{1f13f}',
-        &['\u{50}']), ('\u{1f140}', &['\u{51}']), ('\u{1f141}', &['\u{52}']), ('\u{1f142}',
-        &['\u{53}']), ('\u{1f143}', &['\u{54}']), ('\u{1f144}', &['\u{55}']), ('\u{1f145}',
-        &['\u{56}']), ('\u{1f146}', &['\u{57}']), ('\u{1f147}', &['\u{58}']), ('\u{1f148}',
-        &['\u{59}']), ('\u{1f149}', &['\u{5a}']), ('\u{1f14a}', &['\u{48}', '\u{56}']),
-        ('\u{1f14b}', &['\u{4d}', '\u{56}']), ('\u{1f14c}', &['\u{53}', '\u{44}']), ('\u{1f14d}',
-        &['\u{53}', '\u{53}']), ('\u{1f14e}', &['\u{50}', '\u{50}', '\u{56}']), ('\u{1f14f}',
-        &['\u{57}', '\u{43}']), ('\u{1f16a}', &['\u{4d}', '\u{43}']), ('\u{1f16b}', &['\u{4d}',
-        '\u{44}']), ('\u{1f190}', &['\u{44}', '\u{4a}']), ('\u{1f200}', &['\u{307b}', '\u{304b}']),
-        ('\u{1f201}', &['\u{30b3}', '\u{30b3}']), ('\u{1f202}', &['\u{30b5}']), ('\u{1f210}',
-        &['\u{624b}']), ('\u{1f211}', &['\u{5b57}']), ('\u{1f212}', &['\u{53cc}']), ('\u{1f213}',
-        &['\u{30c7}']), ('\u{1f214}', &['\u{4e8c}']), ('\u{1f215}', &['\u{591a}']), ('\u{1f216}',
-        &['\u{89e3}']), ('\u{1f217}', &['\u{5929}']), ('\u{1f218}', &['\u{4ea4}']), ('\u{1f219}',
-        &['\u{6620}']), ('\u{1f21a}', &['\u{7121}']), ('\u{1f21b}', &['\u{6599}']), ('\u{1f21c}',
-        &['\u{524d}']), ('\u{1f21d}', &['\u{5f8c}']), ('\u{1f21e}', &['\u{518d}']), ('\u{1f21f}',
-        &['\u{65b0}']), ('\u{1f220}', &['\u{521d}']), ('\u{1f221}', &['\u{7d42}']), ('\u{1f222}',
-        &['\u{751f}']), ('\u{1f223}', &['\u{8ca9}']), ('\u{1f224}', &['\u{58f0}']), ('\u{1f225}',
-        &['\u{5439}']), ('\u{1f226}', &['\u{6f14}']), ('\u{1f227}', &['\u{6295}']), ('\u{1f228}',
-        &['\u{6355}']), ('\u{1f229}', &['\u{4e00}']), ('\u{1f22a}', &['\u{4e09}']), ('\u{1f22b}',
-        &['\u{904a}']), ('\u{1f22c}', &['\u{5de6}']), ('\u{1f22d}', &['\u{4e2d}']), ('\u{1f22e}',
-        &['\u{53f3}']), ('\u{1f22f}', &['\u{6307}']), ('\u{1f230}', &['\u{8d70}']), ('\u{1f231}',
-        &['\u{6253}']), ('\u{1f232}', &['\u{7981}']), ('\u{1f233}', &['\u{7a7a}']), ('\u{1f234}',
-        &['\u{5408}']), ('\u{1f235}', &['\u{6e80}']), ('\u{1f236}', &['\u{6709}']), ('\u{1f237}',
-        &['\u{6708}']), ('\u{1f238}', &['\u{7533}']), ('\u{1f239}', &['\u{5272}']), ('\u{1f23a}',
-        &['\u{55b6}']), ('\u{1f240}', &['\u{3014}', '\u{672c}', '\u{3015}']), ('\u{1f241}',
-        &['\u{3014}', '\u{4e09}', '\u{3015}']), ('\u{1f242}', &['\u{3014}', '\u{4e8c}',
-        '\u{3015}']), ('\u{1f243}', &['\u{3014}', '\u{5b89}', '\u{3015}']), ('\u{1f244}',
-        &['\u{3014}', '\u{70b9}', '\u{3015}']), ('\u{1f245}', &['\u{3014}', '\u{6253}',
-        '\u{3015}']), ('\u{1f246}', &['\u{3014}', '\u{76d7}', '\u{3015}']), ('\u{1f247}',
-        &['\u{3014}', '\u{52dd}', '\u{3015}']), ('\u{1f248}', &['\u{3014}', '\u{6557}',
-        '\u{3015}']), ('\u{1f250}', &['\u{5f97}']), ('\u{1f251}', &['\u{53ef}'])
-    ];
-
-    // Canonical compositions
-    pub const composition_table: &'static [(char, &'static [(char, char)])] = &[
-        ('\u{3c}', &[('\u{338}', '\u{226e}')]), ('\u{3d}', &[('\u{338}', '\u{2260}')]), ('\u{3e}',
-        &[('\u{338}', '\u{226f}')]), ('\u{41}', &[('\u{300}', '\u{c0}'), ('\u{301}', '\u{c1}'),
-        ('\u{302}', '\u{c2}'), ('\u{303}', '\u{c3}'), ('\u{304}', '\u{100}'), ('\u{306}',
-        '\u{102}'), ('\u{307}', '\u{226}'), ('\u{308}', '\u{c4}'), ('\u{309}', '\u{1ea2}'),
-        ('\u{30a}', '\u{c5}'), ('\u{30c}', '\u{1cd}'), ('\u{30f}', '\u{200}'), ('\u{311}',
-        '\u{202}'), ('\u{323}', '\u{1ea0}'), ('\u{325}', '\u{1e00}'), ('\u{328}', '\u{104}')]),
-        ('\u{42}', &[('\u{307}', '\u{1e02}'), ('\u{323}', '\u{1e04}'), ('\u{331}', '\u{1e06}')]),
-        ('\u{43}', &[('\u{301}', '\u{106}'), ('\u{302}', '\u{108}'), ('\u{307}', '\u{10a}'),
-        ('\u{30c}', '\u{10c}'), ('\u{327}', '\u{c7}')]), ('\u{44}', &[('\u{307}', '\u{1e0a}'),
-        ('\u{30c}', '\u{10e}'), ('\u{323}', '\u{1e0c}'), ('\u{327}', '\u{1e10}'), ('\u{32d}',
-        '\u{1e12}'), ('\u{331}', '\u{1e0e}')]), ('\u{45}', &[('\u{300}', '\u{c8}'), ('\u{301}',
-        '\u{c9}'), ('\u{302}', '\u{ca}'), ('\u{303}', '\u{1ebc}'), ('\u{304}', '\u{112}'),
-        ('\u{306}', '\u{114}'), ('\u{307}', '\u{116}'), ('\u{308}', '\u{cb}'), ('\u{309}',
-        '\u{1eba}'), ('\u{30c}', '\u{11a}'), ('\u{30f}', '\u{204}'), ('\u{311}', '\u{206}'),
-        ('\u{323}', '\u{1eb8}'), ('\u{327}', '\u{228}'), ('\u{328}', '\u{118}'), ('\u{32d}',
-        '\u{1e18}'), ('\u{330}', '\u{1e1a}')]), ('\u{46}', &[('\u{307}', '\u{1e1e}')]), ('\u{47}',
-        &[('\u{301}', '\u{1f4}'), ('\u{302}', '\u{11c}'), ('\u{304}', '\u{1e20}'), ('\u{306}',
-        '\u{11e}'), ('\u{307}', '\u{120}'), ('\u{30c}', '\u{1e6}'), ('\u{327}', '\u{122}')]),
-        ('\u{48}', &[('\u{302}', '\u{124}'), ('\u{307}', '\u{1e22}'), ('\u{308}', '\u{1e26}'),
-        ('\u{30c}', '\u{21e}'), ('\u{323}', '\u{1e24}'), ('\u{327}', '\u{1e28}'), ('\u{32e}',
-        '\u{1e2a}')]), ('\u{49}', &[('\u{300}', '\u{cc}'), ('\u{301}', '\u{cd}'), ('\u{302}',
-        '\u{ce}'), ('\u{303}', '\u{128}'), ('\u{304}', '\u{12a}'), ('\u{306}', '\u{12c}'),
-        ('\u{307}', '\u{130}'), ('\u{308}', '\u{cf}'), ('\u{309}', '\u{1ec8}'), ('\u{30c}',
-        '\u{1cf}'), ('\u{30f}', '\u{208}'), ('\u{311}', '\u{20a}'), ('\u{323}', '\u{1eca}'),
-        ('\u{328}', '\u{12e}'), ('\u{330}', '\u{1e2c}')]), ('\u{4a}', &[('\u{302}', '\u{134}')]),
-        ('\u{4b}', &[('\u{301}', '\u{1e30}'), ('\u{30c}', '\u{1e8}'), ('\u{323}', '\u{1e32}'),
-        ('\u{327}', '\u{136}'), ('\u{331}', '\u{1e34}')]), ('\u{4c}', &[('\u{301}', '\u{139}'),
-        ('\u{30c}', '\u{13d}'), ('\u{323}', '\u{1e36}'), ('\u{327}', '\u{13b}'), ('\u{32d}',
-        '\u{1e3c}'), ('\u{331}', '\u{1e3a}')]), ('\u{4d}', &[('\u{301}', '\u{1e3e}'), ('\u{307}',
-        '\u{1e40}'), ('\u{323}', '\u{1e42}')]), ('\u{4e}', &[('\u{300}', '\u{1f8}'), ('\u{301}',
-        '\u{143}'), ('\u{303}', '\u{d1}'), ('\u{307}', '\u{1e44}'), ('\u{30c}', '\u{147}'),
-        ('\u{323}', '\u{1e46}'), ('\u{327}', '\u{145}'), ('\u{32d}', '\u{1e4a}'), ('\u{331}',
-        '\u{1e48}')]), ('\u{4f}', &[('\u{300}', '\u{d2}'), ('\u{301}', '\u{d3}'), ('\u{302}',
-        '\u{d4}'), ('\u{303}', '\u{d5}'), ('\u{304}', '\u{14c}'), ('\u{306}', '\u{14e}'),
-        ('\u{307}', '\u{22e}'), ('\u{308}', '\u{d6}'), ('\u{309}', '\u{1ece}'), ('\u{30b}',
-        '\u{150}'), ('\u{30c}', '\u{1d1}'), ('\u{30f}', '\u{20c}'), ('\u{311}', '\u{20e}'),
-        ('\u{31b}', '\u{1a0}'), ('\u{323}', '\u{1ecc}'), ('\u{328}', '\u{1ea}')]), ('\u{50}',
-        &[('\u{301}', '\u{1e54}'), ('\u{307}', '\u{1e56}')]), ('\u{52}', &[('\u{301}', '\u{154}'),
-        ('\u{307}', '\u{1e58}'), ('\u{30c}', '\u{158}'), ('\u{30f}', '\u{210}'), ('\u{311}',
-        '\u{212}'), ('\u{323}', '\u{1e5a}'), ('\u{327}', '\u{156}'), ('\u{331}', '\u{1e5e}')]),
-        ('\u{53}', &[('\u{301}', '\u{15a}'), ('\u{302}', '\u{15c}'), ('\u{307}', '\u{1e60}'),
-        ('\u{30c}', '\u{160}'), ('\u{323}', '\u{1e62}'), ('\u{326}', '\u{218}'), ('\u{327}',
-        '\u{15e}')]), ('\u{54}', &[('\u{307}', '\u{1e6a}'), ('\u{30c}', '\u{164}'), ('\u{323}',
-        '\u{1e6c}'), ('\u{326}', '\u{21a}'), ('\u{327}', '\u{162}'), ('\u{32d}', '\u{1e70}'),
-        ('\u{331}', '\u{1e6e}')]), ('\u{55}', &[('\u{300}', '\u{d9}'), ('\u{301}', '\u{da}'),
-        ('\u{302}', '\u{db}'), ('\u{303}', '\u{168}'), ('\u{304}', '\u{16a}'), ('\u{306}',
-        '\u{16c}'), ('\u{308}', '\u{dc}'), ('\u{309}', '\u{1ee6}'), ('\u{30a}', '\u{16e}'),
-        ('\u{30b}', '\u{170}'), ('\u{30c}', '\u{1d3}'), ('\u{30f}', '\u{214}'), ('\u{311}',
-        '\u{216}'), ('\u{31b}', '\u{1af}'), ('\u{323}', '\u{1ee4}'), ('\u{324}', '\u{1e72}'),
-        ('\u{328}', '\u{172}'), ('\u{32d}', '\u{1e76}'), ('\u{330}', '\u{1e74}')]), ('\u{56}',
-        &[('\u{303}', '\u{1e7c}'), ('\u{323}', '\u{1e7e}')]), ('\u{57}', &[('\u{300}', '\u{1e80}'),
-        ('\u{301}', '\u{1e82}'), ('\u{302}', '\u{174}'), ('\u{307}', '\u{1e86}'), ('\u{308}',
-        '\u{1e84}'), ('\u{323}', '\u{1e88}')]), ('\u{58}', &[('\u{307}', '\u{1e8a}'), ('\u{308}',
-        '\u{1e8c}')]), ('\u{59}', &[('\u{300}', '\u{1ef2}'), ('\u{301}', '\u{dd}'), ('\u{302}',
-        '\u{176}'), ('\u{303}', '\u{1ef8}'), ('\u{304}', '\u{232}'), ('\u{307}', '\u{1e8e}'),
-        ('\u{308}', '\u{178}'), ('\u{309}', '\u{1ef6}'), ('\u{323}', '\u{1ef4}')]), ('\u{5a}',
-        &[('\u{301}', '\u{179}'), ('\u{302}', '\u{1e90}'), ('\u{307}', '\u{17b}'), ('\u{30c}',
-        '\u{17d}'), ('\u{323}', '\u{1e92}'), ('\u{331}', '\u{1e94}')]), ('\u{61}', &[('\u{300}',
-        '\u{e0}'), ('\u{301}', '\u{e1}'), ('\u{302}', '\u{e2}'), ('\u{303}', '\u{e3}'), ('\u{304}',
-        '\u{101}'), ('\u{306}', '\u{103}'), ('\u{307}', '\u{227}'), ('\u{308}', '\u{e4}'),
-        ('\u{309}', '\u{1ea3}'), ('\u{30a}', '\u{e5}'), ('\u{30c}', '\u{1ce}'), ('\u{30f}',
-        '\u{201}'), ('\u{311}', '\u{203}'), ('\u{323}', '\u{1ea1}'), ('\u{325}', '\u{1e01}'),
-        ('\u{328}', '\u{105}')]), ('\u{62}', &[('\u{307}', '\u{1e03}'), ('\u{323}', '\u{1e05}'),
-        ('\u{331}', '\u{1e07}')]), ('\u{63}', &[('\u{301}', '\u{107}'), ('\u{302}', '\u{109}'),
-        ('\u{307}', '\u{10b}'), ('\u{30c}', '\u{10d}'), ('\u{327}', '\u{e7}')]), ('\u{64}',
-        &[('\u{307}', '\u{1e0b}'), ('\u{30c}', '\u{10f}'), ('\u{323}', '\u{1e0d}'), ('\u{327}',
-        '\u{1e11}'), ('\u{32d}', '\u{1e13}'), ('\u{331}', '\u{1e0f}')]), ('\u{65}', &[('\u{300}',
-        '\u{e8}'), ('\u{301}', '\u{e9}'), ('\u{302}', '\u{ea}'), ('\u{303}', '\u{1ebd}'),
-        ('\u{304}', '\u{113}'), ('\u{306}', '\u{115}'), ('\u{307}', '\u{117}'), ('\u{308}',
-        '\u{eb}'), ('\u{309}', '\u{1ebb}'), ('\u{30c}', '\u{11b}'), ('\u{30f}', '\u{205}'),
-        ('\u{311}', '\u{207}'), ('\u{323}', '\u{1eb9}'), ('\u{327}', '\u{229}'), ('\u{328}',
-        '\u{119}'), ('\u{32d}', '\u{1e19}'), ('\u{330}', '\u{1e1b}')]), ('\u{66}', &[('\u{307}',
-        '\u{1e1f}')]), ('\u{67}', &[('\u{301}', '\u{1f5}'), ('\u{302}', '\u{11d}'), ('\u{304}',
-        '\u{1e21}'), ('\u{306}', '\u{11f}'), ('\u{307}', '\u{121}'), ('\u{30c}', '\u{1e7}'),
-        ('\u{327}', '\u{123}')]), ('\u{68}', &[('\u{302}', '\u{125}'), ('\u{307}', '\u{1e23}'),
-        ('\u{308}', '\u{1e27}'), ('\u{30c}', '\u{21f}'), ('\u{323}', '\u{1e25}'), ('\u{327}',
-        '\u{1e29}'), ('\u{32e}', '\u{1e2b}'), ('\u{331}', '\u{1e96}')]), ('\u{69}', &[('\u{300}',
-        '\u{ec}'), ('\u{301}', '\u{ed}'), ('\u{302}', '\u{ee}'), ('\u{303}', '\u{129}'), ('\u{304}',
-        '\u{12b}'), ('\u{306}', '\u{12d}'), ('\u{308}', '\u{ef}'), ('\u{309}', '\u{1ec9}'),
-        ('\u{30c}', '\u{1d0}'), ('\u{30f}', '\u{209}'), ('\u{311}', '\u{20b}'), ('\u{323}',
-        '\u{1ecb}'), ('\u{328}', '\u{12f}'), ('\u{330}', '\u{1e2d}')]), ('\u{6a}', &[('\u{302}',
-        '\u{135}'), ('\u{30c}', '\u{1f0}')]), ('\u{6b}', &[('\u{301}', '\u{1e31}'), ('\u{30c}',
-        '\u{1e9}'), ('\u{323}', '\u{1e33}'), ('\u{327}', '\u{137}'), ('\u{331}', '\u{1e35}')]),
-        ('\u{6c}', &[('\u{301}', '\u{13a}'), ('\u{30c}', '\u{13e}'), ('\u{323}', '\u{1e37}'),
-        ('\u{327}', '\u{13c}'), ('\u{32d}', '\u{1e3d}'), ('\u{331}', '\u{1e3b}')]), ('\u{6d}',
-        &[('\u{301}', '\u{1e3f}'), ('\u{307}', '\u{1e41}'), ('\u{323}', '\u{1e43}')]), ('\u{6e}',
-        &[('\u{300}', '\u{1f9}'), ('\u{301}', '\u{144}'), ('\u{303}', '\u{f1}'), ('\u{307}',
-        '\u{1e45}'), ('\u{30c}', '\u{148}'), ('\u{323}', '\u{1e47}'), ('\u{327}', '\u{146}'),
-        ('\u{32d}', '\u{1e4b}'), ('\u{331}', '\u{1e49}')]), ('\u{6f}', &[('\u{300}', '\u{f2}'),
-        ('\u{301}', '\u{f3}'), ('\u{302}', '\u{f4}'), ('\u{303}', '\u{f5}'), ('\u{304}', '\u{14d}'),
-        ('\u{306}', '\u{14f}'), ('\u{307}', '\u{22f}'), ('\u{308}', '\u{f6}'), ('\u{309}',
-        '\u{1ecf}'), ('\u{30b}', '\u{151}'), ('\u{30c}', '\u{1d2}'), ('\u{30f}', '\u{20d}'),
-        ('\u{311}', '\u{20f}'), ('\u{31b}', '\u{1a1}'), ('\u{323}', '\u{1ecd}'), ('\u{328}',
-        '\u{1eb}')]), ('\u{70}', &[('\u{301}', '\u{1e55}'), ('\u{307}', '\u{1e57}')]), ('\u{72}',
-        &[('\u{301}', '\u{155}'), ('\u{307}', '\u{1e59}'), ('\u{30c}', '\u{159}'), ('\u{30f}',
-        '\u{211}'), ('\u{311}', '\u{213}'), ('\u{323}', '\u{1e5b}'), ('\u{327}', '\u{157}'),
-        ('\u{331}', '\u{1e5f}')]), ('\u{73}', &[('\u{301}', '\u{15b}'), ('\u{302}', '\u{15d}'),
-        ('\u{307}', '\u{1e61}'), ('\u{30c}', '\u{161}'), ('\u{323}', '\u{1e63}'), ('\u{326}',
-        '\u{219}'), ('\u{327}', '\u{15f}')]), ('\u{74}', &[('\u{307}', '\u{1e6b}'), ('\u{308}',
-        '\u{1e97}'), ('\u{30c}', '\u{165}'), ('\u{323}', '\u{1e6d}'), ('\u{326}', '\u{21b}'),
-        ('\u{327}', '\u{163}'), ('\u{32d}', '\u{1e71}'), ('\u{331}', '\u{1e6f}')]), ('\u{75}',
-        &[('\u{300}', '\u{f9}'), ('\u{301}', '\u{fa}'), ('\u{302}', '\u{fb}'), ('\u{303}',
-        '\u{169}'), ('\u{304}', '\u{16b}'), ('\u{306}', '\u{16d}'), ('\u{308}', '\u{fc}'),
-        ('\u{309}', '\u{1ee7}'), ('\u{30a}', '\u{16f}'), ('\u{30b}', '\u{171}'), ('\u{30c}',
-        '\u{1d4}'), ('\u{30f}', '\u{215}'), ('\u{311}', '\u{217}'), ('\u{31b}', '\u{1b0}'),
-        ('\u{323}', '\u{1ee5}'), ('\u{324}', '\u{1e73}'), ('\u{328}', '\u{173}'), ('\u{32d}',
-        '\u{1e77}'), ('\u{330}', '\u{1e75}')]), ('\u{76}', &[('\u{303}', '\u{1e7d}'), ('\u{323}',
-        '\u{1e7f}')]), ('\u{77}', &[('\u{300}', '\u{1e81}'), ('\u{301}', '\u{1e83}'), ('\u{302}',
-        '\u{175}'), ('\u{307}', '\u{1e87}'), ('\u{308}', '\u{1e85}'), ('\u{30a}', '\u{1e98}'),
-        ('\u{323}', '\u{1e89}')]), ('\u{78}', &[('\u{307}', '\u{1e8b}'), ('\u{308}', '\u{1e8d}')]),
-        ('\u{79}', &[('\u{300}', '\u{1ef3}'), ('\u{301}', '\u{fd}'), ('\u{302}', '\u{177}'),
-        ('\u{303}', '\u{1ef9}'), ('\u{304}', '\u{233}'), ('\u{307}', '\u{1e8f}'), ('\u{308}',
-        '\u{ff}'), ('\u{309}', '\u{1ef7}'), ('\u{30a}', '\u{1e99}'), ('\u{323}', '\u{1ef5}')]),
-        ('\u{7a}', &[('\u{301}', '\u{17a}'), ('\u{302}', '\u{1e91}'), ('\u{307}', '\u{17c}'),
-        ('\u{30c}', '\u{17e}'), ('\u{323}', '\u{1e93}'), ('\u{331}', '\u{1e95}')]), ('\u{a8}',
-        &[('\u{300}', '\u{1fed}'), ('\u{301}', '\u{385}'), ('\u{342}', '\u{1fc1}')]), ('\u{c2}',
-        &[('\u{300}', '\u{1ea6}'), ('\u{301}', '\u{1ea4}'), ('\u{303}', '\u{1eaa}'), ('\u{309}',
-        '\u{1ea8}')]), ('\u{c4}', &[('\u{304}', '\u{1de}')]), ('\u{c5}', &[('\u{301}', '\u{1fa}')]),
-        ('\u{c6}', &[('\u{301}', '\u{1fc}'), ('\u{304}', '\u{1e2}')]), ('\u{c7}', &[('\u{301}',
-        '\u{1e08}')]), ('\u{ca}', &[('\u{300}', '\u{1ec0}'), ('\u{301}', '\u{1ebe}'), ('\u{303}',
-        '\u{1ec4}'), ('\u{309}', '\u{1ec2}')]), ('\u{cf}', &[('\u{301}', '\u{1e2e}')]), ('\u{d4}',
-        &[('\u{300}', '\u{1ed2}'), ('\u{301}', '\u{1ed0}'), ('\u{303}', '\u{1ed6}'), ('\u{309}',
-        '\u{1ed4}')]), ('\u{d5}', &[('\u{301}', '\u{1e4c}'), ('\u{304}', '\u{22c}'), ('\u{308}',
-        '\u{1e4e}')]), ('\u{d6}', &[('\u{304}', '\u{22a}')]), ('\u{d8}', &[('\u{301}', '\u{1fe}')]),
-        ('\u{dc}', &[('\u{300}', '\u{1db}'), ('\u{301}', '\u{1d7}'), ('\u{304}', '\u{1d5}'),
-        ('\u{30c}', '\u{1d9}')]), ('\u{e2}', &[('\u{300}', '\u{1ea7}'), ('\u{301}', '\u{1ea5}'),
-        ('\u{303}', '\u{1eab}'), ('\u{309}', '\u{1ea9}')]), ('\u{e4}', &[('\u{304}', '\u{1df}')]),
-        ('\u{e5}', &[('\u{301}', '\u{1fb}')]), ('\u{e6}', &[('\u{301}', '\u{1fd}'), ('\u{304}',
-        '\u{1e3}')]), ('\u{e7}', &[('\u{301}', '\u{1e09}')]), ('\u{ea}', &[('\u{300}', '\u{1ec1}'),
-        ('\u{301}', '\u{1ebf}'), ('\u{303}', '\u{1ec5}'), ('\u{309}', '\u{1ec3}')]), ('\u{ef}',
-        &[('\u{301}', '\u{1e2f}')]), ('\u{f4}', &[('\u{300}', '\u{1ed3}'), ('\u{301}', '\u{1ed1}'),
-        ('\u{303}', '\u{1ed7}'), ('\u{309}', '\u{1ed5}')]), ('\u{f5}', &[('\u{301}', '\u{1e4d}'),
-        ('\u{304}', '\u{22d}'), ('\u{308}', '\u{1e4f}')]), ('\u{f6}', &[('\u{304}', '\u{22b}')]),
-        ('\u{f8}', &[('\u{301}', '\u{1ff}')]), ('\u{fc}', &[('\u{300}', '\u{1dc}'), ('\u{301}',
-        '\u{1d8}'), ('\u{304}', '\u{1d6}'), ('\u{30c}', '\u{1da}')]), ('\u{102}', &[('\u{300}',
-        '\u{1eb0}'), ('\u{301}', '\u{1eae}'), ('\u{303}', '\u{1eb4}'), ('\u{309}', '\u{1eb2}')]),
-        ('\u{103}', &[('\u{300}', '\u{1eb1}'), ('\u{301}', '\u{1eaf}'), ('\u{303}', '\u{1eb5}'),
-        ('\u{309}', '\u{1eb3}')]), ('\u{112}', &[('\u{300}', '\u{1e14}'), ('\u{301}', '\u{1e16}')]),
-        ('\u{113}', &[('\u{300}', '\u{1e15}'), ('\u{301}', '\u{1e17}')]), ('\u{14c}', &[('\u{300}',
-        '\u{1e50}'), ('\u{301}', '\u{1e52}')]), ('\u{14d}', &[('\u{300}', '\u{1e51}'), ('\u{301}',
-        '\u{1e53}')]), ('\u{15a}', &[('\u{307}', '\u{1e64}')]), ('\u{15b}', &[('\u{307}',
-        '\u{1e65}')]), ('\u{160}', &[('\u{307}', '\u{1e66}')]), ('\u{161}', &[('\u{307}',
-        '\u{1e67}')]), ('\u{168}', &[('\u{301}', '\u{1e78}')]), ('\u{169}', &[('\u{301}',
-        '\u{1e79}')]), ('\u{16a}', &[('\u{308}', '\u{1e7a}')]), ('\u{16b}', &[('\u{308}',
-        '\u{1e7b}')]), ('\u{17f}', &[('\u{307}', '\u{1e9b}')]), ('\u{1a0}', &[('\u{300}',
-        '\u{1edc}'), ('\u{301}', '\u{1eda}'), ('\u{303}', '\u{1ee0}'), ('\u{309}', '\u{1ede}'),
-        ('\u{323}', '\u{1ee2}')]), ('\u{1a1}', &[('\u{300}', '\u{1edd}'), ('\u{301}', '\u{1edb}'),
-        ('\u{303}', '\u{1ee1}'), ('\u{309}', '\u{1edf}'), ('\u{323}', '\u{1ee3}')]), ('\u{1af}',
-        &[('\u{300}', '\u{1eea}'), ('\u{301}', '\u{1ee8}'), ('\u{303}', '\u{1eee}'), ('\u{309}',
-        '\u{1eec}'), ('\u{323}', '\u{1ef0}')]), ('\u{1b0}', &[('\u{300}', '\u{1eeb}'), ('\u{301}',
-        '\u{1ee9}'), ('\u{303}', '\u{1eef}'), ('\u{309}', '\u{1eed}'), ('\u{323}', '\u{1ef1}')]),
-        ('\u{1b7}', &[('\u{30c}', '\u{1ee}')]), ('\u{1ea}', &[('\u{304}', '\u{1ec}')]), ('\u{1eb}',
-        &[('\u{304}', '\u{1ed}')]), ('\u{226}', &[('\u{304}', '\u{1e0}')]), ('\u{227}',
-        &[('\u{304}', '\u{1e1}')]), ('\u{228}', &[('\u{306}', '\u{1e1c}')]), ('\u{229}',
-        &[('\u{306}', '\u{1e1d}')]), ('\u{22e}', &[('\u{304}', '\u{230}')]), ('\u{22f}',
-        &[('\u{304}', '\u{231}')]), ('\u{292}', &[('\u{30c}', '\u{1ef}')]), ('\u{391}',
-        &[('\u{300}', '\u{1fba}'), ('\u{301}', '\u{386}'), ('\u{304}', '\u{1fb9}'), ('\u{306}',
-        '\u{1fb8}'), ('\u{313}', '\u{1f08}'), ('\u{314}', '\u{1f09}'), ('\u{345}', '\u{1fbc}')]),
-        ('\u{395}', &[('\u{300}', '\u{1fc8}'), ('\u{301}', '\u{388}'), ('\u{313}', '\u{1f18}'),
-        ('\u{314}', '\u{1f19}')]), ('\u{397}', &[('\u{300}', '\u{1fca}'), ('\u{301}', '\u{389}'),
-        ('\u{313}', '\u{1f28}'), ('\u{314}', '\u{1f29}'), ('\u{345}', '\u{1fcc}')]), ('\u{399}',
-        &[('\u{300}', '\u{1fda}'), ('\u{301}', '\u{38a}'), ('\u{304}', '\u{1fd9}'), ('\u{306}',
-        '\u{1fd8}'), ('\u{308}', '\u{3aa}'), ('\u{313}', '\u{1f38}'), ('\u{314}', '\u{1f39}')]),
-        ('\u{39f}', &[('\u{300}', '\u{1ff8}'), ('\u{301}', '\u{38c}'), ('\u{313}', '\u{1f48}'),
-        ('\u{314}', '\u{1f49}')]), ('\u{3a1}', &[('\u{314}', '\u{1fec}')]), ('\u{3a5}',
-        &[('\u{300}', '\u{1fea}'), ('\u{301}', '\u{38e}'), ('\u{304}', '\u{1fe9}'), ('\u{306}',
-        '\u{1fe8}'), ('\u{308}', '\u{3ab}'), ('\u{314}', '\u{1f59}')]), ('\u{3a9}', &[('\u{300}',
-        '\u{1ffa}'), ('\u{301}', '\u{38f}'), ('\u{313}', '\u{1f68}'), ('\u{314}', '\u{1f69}'),
-        ('\u{345}', '\u{1ffc}')]), ('\u{3ac}', &[('\u{345}', '\u{1fb4}')]), ('\u{3ae}',
-        &[('\u{345}', '\u{1fc4}')]), ('\u{3b1}', &[('\u{300}', '\u{1f70}'), ('\u{301}', '\u{3ac}'),
-        ('\u{304}', '\u{1fb1}'), ('\u{306}', '\u{1fb0}'), ('\u{313}', '\u{1f00}'), ('\u{314}',
-        '\u{1f01}'), ('\u{342}', '\u{1fb6}'), ('\u{345}', '\u{1fb3}')]), ('\u{3b5}', &[('\u{300}',
-        '\u{1f72}'), ('\u{301}', '\u{3ad}'), ('\u{313}', '\u{1f10}'), ('\u{314}', '\u{1f11}')]),
-        ('\u{3b7}', &[('\u{300}', '\u{1f74}'), ('\u{301}', '\u{3ae}'), ('\u{313}', '\u{1f20}'),
-        ('\u{314}', '\u{1f21}'), ('\u{342}', '\u{1fc6}'), ('\u{345}', '\u{1fc3}')]), ('\u{3b9}',
-        &[('\u{300}', '\u{1f76}'), ('\u{301}', '\u{3af}'), ('\u{304}', '\u{1fd1}'), ('\u{306}',
-        '\u{1fd0}'), ('\u{308}', '\u{3ca}'), ('\u{313}', '\u{1f30}'), ('\u{314}', '\u{1f31}'),
-        ('\u{342}', '\u{1fd6}')]), ('\u{3bf}', &[('\u{300}', '\u{1f78}'), ('\u{301}', '\u{3cc}'),
-        ('\u{313}', '\u{1f40}'), ('\u{314}', '\u{1f41}')]), ('\u{3c1}', &[('\u{313}', '\u{1fe4}'),
-        ('\u{314}', '\u{1fe5}')]), ('\u{3c5}', &[('\u{300}', '\u{1f7a}'), ('\u{301}', '\u{3cd}'),
-        ('\u{304}', '\u{1fe1}'), ('\u{306}', '\u{1fe0}'), ('\u{308}', '\u{3cb}'), ('\u{313}',
-        '\u{1f50}'), ('\u{314}', '\u{1f51}'), ('\u{342}', '\u{1fe6}')]), ('\u{3c9}', &[('\u{300}',
-        '\u{1f7c}'), ('\u{301}', '\u{3ce}'), ('\u{313}', '\u{1f60}'), ('\u{314}', '\u{1f61}'),
-        ('\u{342}', '\u{1ff6}'), ('\u{345}', '\u{1ff3}')]), ('\u{3ca}', &[('\u{300}', '\u{1fd2}'),
-        ('\u{301}', '\u{390}'), ('\u{342}', '\u{1fd7}')]), ('\u{3cb}', &[('\u{300}', '\u{1fe2}'),
-        ('\u{301}', '\u{3b0}'), ('\u{342}', '\u{1fe7}')]), ('\u{3ce}', &[('\u{345}', '\u{1ff4}')]),
-        ('\u{3d2}', &[('\u{301}', '\u{3d3}'), ('\u{308}', '\u{3d4}')]), ('\u{406}', &[('\u{308}',
-        '\u{407}')]), ('\u{410}', &[('\u{306}', '\u{4d0}'), ('\u{308}', '\u{4d2}')]), ('\u{413}',
-        &[('\u{301}', '\u{403}')]), ('\u{415}', &[('\u{300}', '\u{400}'), ('\u{306}', '\u{4d6}'),
-        ('\u{308}', '\u{401}')]), ('\u{416}', &[('\u{306}', '\u{4c1}'), ('\u{308}', '\u{4dc}')]),
-        ('\u{417}', &[('\u{308}', '\u{4de}')]), ('\u{418}', &[('\u{300}', '\u{40d}'), ('\u{304}',
-        '\u{4e2}'), ('\u{306}', '\u{419}'), ('\u{308}', '\u{4e4}')]), ('\u{41a}', &[('\u{301}',
-        '\u{40c}')]), ('\u{41e}', &[('\u{308}', '\u{4e6}')]), ('\u{423}', &[('\u{304}', '\u{4ee}'),
-        ('\u{306}', '\u{40e}'), ('\u{308}', '\u{4f0}'), ('\u{30b}', '\u{4f2}')]), ('\u{427}',
-        &[('\u{308}', '\u{4f4}')]), ('\u{42b}', &[('\u{308}', '\u{4f8}')]), ('\u{42d}',
-        &[('\u{308}', '\u{4ec}')]), ('\u{430}', &[('\u{306}', '\u{4d1}'), ('\u{308}', '\u{4d3}')]),
-        ('\u{433}', &[('\u{301}', '\u{453}')]), ('\u{435}', &[('\u{300}', '\u{450}'), ('\u{306}',
-        '\u{4d7}'), ('\u{308}', '\u{451}')]), ('\u{436}', &[('\u{306}', '\u{4c2}'), ('\u{308}',
-        '\u{4dd}')]), ('\u{437}', &[('\u{308}', '\u{4df}')]), ('\u{438}', &[('\u{300}', '\u{45d}'),
-        ('\u{304}', '\u{4e3}'), ('\u{306}', '\u{439}'), ('\u{308}', '\u{4e5}')]), ('\u{43a}',
-        &[('\u{301}', '\u{45c}')]), ('\u{43e}', &[('\u{308}', '\u{4e7}')]), ('\u{443}',
-        &[('\u{304}', '\u{4ef}'), ('\u{306}', '\u{45e}'), ('\u{308}', '\u{4f1}'), ('\u{30b}',
-        '\u{4f3}')]), ('\u{447}', &[('\u{308}', '\u{4f5}')]), ('\u{44b}', &[('\u{308}',
-        '\u{4f9}')]), ('\u{44d}', &[('\u{308}', '\u{4ed}')]), ('\u{456}', &[('\u{308}',
-        '\u{457}')]), ('\u{474}', &[('\u{30f}', '\u{476}')]), ('\u{475}', &[('\u{30f}',
-        '\u{477}')]), ('\u{4d8}', &[('\u{308}', '\u{4da}')]), ('\u{4d9}', &[('\u{308}',
-        '\u{4db}')]), ('\u{4e8}', &[('\u{308}', '\u{4ea}')]), ('\u{4e9}', &[('\u{308}',
-        '\u{4eb}')]), ('\u{627}', &[('\u{653}', '\u{622}'), ('\u{654}', '\u{623}'), ('\u{655}',
-        '\u{625}')]), ('\u{648}', &[('\u{654}', '\u{624}')]), ('\u{64a}', &[('\u{654}',
-        '\u{626}')]), ('\u{6c1}', &[('\u{654}', '\u{6c2}')]), ('\u{6d2}', &[('\u{654}',
-        '\u{6d3}')]), ('\u{6d5}', &[('\u{654}', '\u{6c0}')]), ('\u{928}', &[('\u{93c}',
-        '\u{929}')]), ('\u{930}', &[('\u{93c}', '\u{931}')]), ('\u{933}', &[('\u{93c}',
-        '\u{934}')]), ('\u{9c7}', &[('\u{9be}', '\u{9cb}'), ('\u{9d7}', '\u{9cc}')]), ('\u{b47}',
-        &[('\u{b3e}', '\u{b4b}'), ('\u{b56}', '\u{b48}'), ('\u{b57}', '\u{b4c}')]), ('\u{b92}',
-        &[('\u{bd7}', '\u{b94}')]), ('\u{bc6}', &[('\u{bbe}', '\u{bca}'), ('\u{bd7}', '\u{bcc}')]),
-        ('\u{bc7}', &[('\u{bbe}', '\u{bcb}')]), ('\u{c46}', &[('\u{c56}', '\u{c48}')]), ('\u{cbf}',
-        &[('\u{cd5}', '\u{cc0}')]), ('\u{cc6}', &[('\u{cc2}', '\u{cca}'), ('\u{cd5}', '\u{cc7}'),
-        ('\u{cd6}', '\u{cc8}')]), ('\u{cca}', &[('\u{cd5}', '\u{ccb}')]), ('\u{d46}', &[('\u{d3e}',
-        '\u{d4a}'), ('\u{d57}', '\u{d4c}')]), ('\u{d47}', &[('\u{d3e}', '\u{d4b}')]), ('\u{dd9}',
-        &[('\u{dca}', '\u{dda}'), ('\u{dcf}', '\u{ddc}'), ('\u{ddf}', '\u{dde}')]), ('\u{ddc}',
-        &[('\u{dca}', '\u{ddd}')]), ('\u{1025}', &[('\u{102e}', '\u{1026}')]), ('\u{1b05}',
-        &[('\u{1b35}', '\u{1b06}')]), ('\u{1b07}', &[('\u{1b35}', '\u{1b08}')]), ('\u{1b09}',
-        &[('\u{1b35}', '\u{1b0a}')]), ('\u{1b0b}', &[('\u{1b35}', '\u{1b0c}')]), ('\u{1b0d}',
-        &[('\u{1b35}', '\u{1b0e}')]), ('\u{1b11}', &[('\u{1b35}', '\u{1b12}')]), ('\u{1b3a}',
-        &[('\u{1b35}', '\u{1b3b}')]), ('\u{1b3c}', &[('\u{1b35}', '\u{1b3d}')]), ('\u{1b3e}',
-        &[('\u{1b35}', '\u{1b40}')]), ('\u{1b3f}', &[('\u{1b35}', '\u{1b41}')]), ('\u{1b42}',
-        &[('\u{1b35}', '\u{1b43}')]), ('\u{1e36}', &[('\u{304}', '\u{1e38}')]), ('\u{1e37}',
-        &[('\u{304}', '\u{1e39}')]), ('\u{1e5a}', &[('\u{304}', '\u{1e5c}')]), ('\u{1e5b}',
-        &[('\u{304}', '\u{1e5d}')]), ('\u{1e62}', &[('\u{307}', '\u{1e68}')]), ('\u{1e63}',
-        &[('\u{307}', '\u{1e69}')]), ('\u{1ea0}', &[('\u{302}', '\u{1eac}'), ('\u{306}',
-        '\u{1eb6}')]), ('\u{1ea1}', &[('\u{302}', '\u{1ead}'), ('\u{306}', '\u{1eb7}')]),
-        ('\u{1eb8}', &[('\u{302}', '\u{1ec6}')]), ('\u{1eb9}', &[('\u{302}', '\u{1ec7}')]),
-        ('\u{1ecc}', &[('\u{302}', '\u{1ed8}')]), ('\u{1ecd}', &[('\u{302}', '\u{1ed9}')]),
-        ('\u{1f00}', &[('\u{300}', '\u{1f02}'), ('\u{301}', '\u{1f04}'), ('\u{342}', '\u{1f06}'),
-        ('\u{345}', '\u{1f80}')]), ('\u{1f01}', &[('\u{300}', '\u{1f03}'), ('\u{301}', '\u{1f05}'),
-        ('\u{342}', '\u{1f07}'), ('\u{345}', '\u{1f81}')]), ('\u{1f02}', &[('\u{345}',
-        '\u{1f82}')]), ('\u{1f03}', &[('\u{345}', '\u{1f83}')]), ('\u{1f04}', &[('\u{345}',
-        '\u{1f84}')]), ('\u{1f05}', &[('\u{345}', '\u{1f85}')]), ('\u{1f06}', &[('\u{345}',
-        '\u{1f86}')]), ('\u{1f07}', &[('\u{345}', '\u{1f87}')]), ('\u{1f08}', &[('\u{300}',
-        '\u{1f0a}'), ('\u{301}', '\u{1f0c}'), ('\u{342}', '\u{1f0e}'), ('\u{345}', '\u{1f88}')]),
-        ('\u{1f09}', &[('\u{300}', '\u{1f0b}'), ('\u{301}', '\u{1f0d}'), ('\u{342}', '\u{1f0f}'),
-        ('\u{345}', '\u{1f89}')]), ('\u{1f0a}', &[('\u{345}', '\u{1f8a}')]), ('\u{1f0b}',
-        &[('\u{345}', '\u{1f8b}')]), ('\u{1f0c}', &[('\u{345}', '\u{1f8c}')]), ('\u{1f0d}',
-        &[('\u{345}', '\u{1f8d}')]), ('\u{1f0e}', &[('\u{345}', '\u{1f8e}')]), ('\u{1f0f}',
-        &[('\u{345}', '\u{1f8f}')]), ('\u{1f10}', &[('\u{300}', '\u{1f12}'), ('\u{301}',
-        '\u{1f14}')]), ('\u{1f11}', &[('\u{300}', '\u{1f13}'), ('\u{301}', '\u{1f15}')]),
-        ('\u{1f18}', &[('\u{300}', '\u{1f1a}'), ('\u{301}', '\u{1f1c}')]), ('\u{1f19}',
-        &[('\u{300}', '\u{1f1b}'), ('\u{301}', '\u{1f1d}')]), ('\u{1f20}', &[('\u{300}',
-        '\u{1f22}'), ('\u{301}', '\u{1f24}'), ('\u{342}', '\u{1f26}'), ('\u{345}', '\u{1f90}')]),
-        ('\u{1f21}', &[('\u{300}', '\u{1f23}'), ('\u{301}', '\u{1f25}'), ('\u{342}', '\u{1f27}'),
-        ('\u{345}', '\u{1f91}')]), ('\u{1f22}', &[('\u{345}', '\u{1f92}')]), ('\u{1f23}',
-        &[('\u{345}', '\u{1f93}')]), ('\u{1f24}', &[('\u{345}', '\u{1f94}')]), ('\u{1f25}',
-        &[('\u{345}', '\u{1f95}')]), ('\u{1f26}', &[('\u{345}', '\u{1f96}')]), ('\u{1f27}',
-        &[('\u{345}', '\u{1f97}')]), ('\u{1f28}', &[('\u{300}', '\u{1f2a}'), ('\u{301}',
-        '\u{1f2c}'), ('\u{342}', '\u{1f2e}'), ('\u{345}', '\u{1f98}')]), ('\u{1f29}', &[('\u{300}',
-        '\u{1f2b}'), ('\u{301}', '\u{1f2d}'), ('\u{342}', '\u{1f2f}'), ('\u{345}', '\u{1f99}')]),
-        ('\u{1f2a}', &[('\u{345}', '\u{1f9a}')]), ('\u{1f2b}', &[('\u{345}', '\u{1f9b}')]),
-        ('\u{1f2c}', &[('\u{345}', '\u{1f9c}')]), ('\u{1f2d}', &[('\u{345}', '\u{1f9d}')]),
-        ('\u{1f2e}', &[('\u{345}', '\u{1f9e}')]), ('\u{1f2f}', &[('\u{345}', '\u{1f9f}')]),
-        ('\u{1f30}', &[('\u{300}', '\u{1f32}'), ('\u{301}', '\u{1f34}'), ('\u{342}', '\u{1f36}')]),
-        ('\u{1f31}', &[('\u{300}', '\u{1f33}'), ('\u{301}', '\u{1f35}'), ('\u{342}', '\u{1f37}')]),
-        ('\u{1f38}', &[('\u{300}', '\u{1f3a}'), ('\u{301}', '\u{1f3c}'), ('\u{342}', '\u{1f3e}')]),
-        ('\u{1f39}', &[('\u{300}', '\u{1f3b}'), ('\u{301}', '\u{1f3d}'), ('\u{342}', '\u{1f3f}')]),
-        ('\u{1f40}', &[('\u{300}', '\u{1f42}'), ('\u{301}', '\u{1f44}')]), ('\u{1f41}',
-        &[('\u{300}', '\u{1f43}'), ('\u{301}', '\u{1f45}')]), ('\u{1f48}', &[('\u{300}',
-        '\u{1f4a}'), ('\u{301}', '\u{1f4c}')]), ('\u{1f49}', &[('\u{300}', '\u{1f4b}'), ('\u{301}',
-        '\u{1f4d}')]), ('\u{1f50}', &[('\u{300}', '\u{1f52}'), ('\u{301}', '\u{1f54}'), ('\u{342}',
-        '\u{1f56}')]), ('\u{1f51}', &[('\u{300}', '\u{1f53}'), ('\u{301}', '\u{1f55}'), ('\u{342}',
-        '\u{1f57}')]), ('\u{1f59}', &[('\u{300}', '\u{1f5b}'), ('\u{301}', '\u{1f5d}'), ('\u{342}',
-        '\u{1f5f}')]), ('\u{1f60}', &[('\u{300}', '\u{1f62}'), ('\u{301}', '\u{1f64}'), ('\u{342}',
-        '\u{1f66}'), ('\u{345}', '\u{1fa0}')]), ('\u{1f61}', &[('\u{300}', '\u{1f63}'), ('\u{301}',
-        '\u{1f65}'), ('\u{342}', '\u{1f67}'), ('\u{345}', '\u{1fa1}')]), ('\u{1f62}', &[('\u{345}',
-        '\u{1fa2}')]), ('\u{1f63}', &[('\u{345}', '\u{1fa3}')]), ('\u{1f64}', &[('\u{345}',
-        '\u{1fa4}')]), ('\u{1f65}', &[('\u{345}', '\u{1fa5}')]), ('\u{1f66}', &[('\u{345}',
-        '\u{1fa6}')]), ('\u{1f67}', &[('\u{345}', '\u{1fa7}')]), ('\u{1f68}', &[('\u{300}',
-        '\u{1f6a}'), ('\u{301}', '\u{1f6c}'), ('\u{342}', '\u{1f6e}'), ('\u{345}', '\u{1fa8}')]),
-        ('\u{1f69}', &[('\u{300}', '\u{1f6b}'), ('\u{301}', '\u{1f6d}'), ('\u{342}', '\u{1f6f}'),
-        ('\u{345}', '\u{1fa9}')]), ('\u{1f6a}', &[('\u{345}', '\u{1faa}')]), ('\u{1f6b}',
-        &[('\u{345}', '\u{1fab}')]), ('\u{1f6c}', &[('\u{345}', '\u{1fac}')]), ('\u{1f6d}',
-        &[('\u{345}', '\u{1fad}')]), ('\u{1f6e}', &[('\u{345}', '\u{1fae}')]), ('\u{1f6f}',
-        &[('\u{345}', '\u{1faf}')]), ('\u{1f70}', &[('\u{345}', '\u{1fb2}')]), ('\u{1f74}',
-        &[('\u{345}', '\u{1fc2}')]), ('\u{1f7c}', &[('\u{345}', '\u{1ff2}')]), ('\u{1fb6}',
-        &[('\u{345}', '\u{1fb7}')]), ('\u{1fbf}', &[('\u{300}', '\u{1fcd}'), ('\u{301}',
-        '\u{1fce}'), ('\u{342}', '\u{1fcf}')]), ('\u{1fc6}', &[('\u{345}', '\u{1fc7}')]),
-        ('\u{1ff6}', &[('\u{345}', '\u{1ff7}')]), ('\u{1ffe}', &[('\u{300}', '\u{1fdd}'),
-        ('\u{301}', '\u{1fde}'), ('\u{342}', '\u{1fdf}')]), ('\u{2190}', &[('\u{338}',
-        '\u{219a}')]), ('\u{2192}', &[('\u{338}', '\u{219b}')]), ('\u{2194}', &[('\u{338}',
-        '\u{21ae}')]), ('\u{21d0}', &[('\u{338}', '\u{21cd}')]), ('\u{21d2}', &[('\u{338}',
-        '\u{21cf}')]), ('\u{21d4}', &[('\u{338}', '\u{21ce}')]), ('\u{2203}', &[('\u{338}',
-        '\u{2204}')]), ('\u{2208}', &[('\u{338}', '\u{2209}')]), ('\u{220b}', &[('\u{338}',
-        '\u{220c}')]), ('\u{2223}', &[('\u{338}', '\u{2224}')]), ('\u{2225}', &[('\u{338}',
-        '\u{2226}')]), ('\u{223c}', &[('\u{338}', '\u{2241}')]), ('\u{2243}', &[('\u{338}',
-        '\u{2244}')]), ('\u{2245}', &[('\u{338}', '\u{2247}')]), ('\u{2248}', &[('\u{338}',
-        '\u{2249}')]), ('\u{224d}', &[('\u{338}', '\u{226d}')]), ('\u{2261}', &[('\u{338}',
-        '\u{2262}')]), ('\u{2264}', &[('\u{338}', '\u{2270}')]), ('\u{2265}', &[('\u{338}',
-        '\u{2271}')]), ('\u{2272}', &[('\u{338}', '\u{2274}')]), ('\u{2273}', &[('\u{338}',
-        '\u{2275}')]), ('\u{2276}', &[('\u{338}', '\u{2278}')]), ('\u{2277}', &[('\u{338}',
-        '\u{2279}')]), ('\u{227a}', &[('\u{338}', '\u{2280}')]), ('\u{227b}', &[('\u{338}',
-        '\u{2281}')]), ('\u{227c}', &[('\u{338}', '\u{22e0}')]), ('\u{227d}', &[('\u{338}',
-        '\u{22e1}')]), ('\u{2282}', &[('\u{338}', '\u{2284}')]), ('\u{2283}', &[('\u{338}',
-        '\u{2285}')]), ('\u{2286}', &[('\u{338}', '\u{2288}')]), ('\u{2287}', &[('\u{338}',
-        '\u{2289}')]), ('\u{2291}', &[('\u{338}', '\u{22e2}')]), ('\u{2292}', &[('\u{338}',
-        '\u{22e3}')]), ('\u{22a2}', &[('\u{338}', '\u{22ac}')]), ('\u{22a8}', &[('\u{338}',
-        '\u{22ad}')]), ('\u{22a9}', &[('\u{338}', '\u{22ae}')]), ('\u{22ab}', &[('\u{338}',
-        '\u{22af}')]), ('\u{22b2}', &[('\u{338}', '\u{22ea}')]), ('\u{22b3}', &[('\u{338}',
-        '\u{22eb}')]), ('\u{22b4}', &[('\u{338}', '\u{22ec}')]), ('\u{22b5}', &[('\u{338}',
-        '\u{22ed}')]), ('\u{3046}', &[('\u{3099}', '\u{3094}')]), ('\u{304b}', &[('\u{3099}',
-        '\u{304c}')]), ('\u{304d}', &[('\u{3099}', '\u{304e}')]), ('\u{304f}', &[('\u{3099}',
-        '\u{3050}')]), ('\u{3051}', &[('\u{3099}', '\u{3052}')]), ('\u{3053}', &[('\u{3099}',
-        '\u{3054}')]), ('\u{3055}', &[('\u{3099}', '\u{3056}')]), ('\u{3057}', &[('\u{3099}',
-        '\u{3058}')]), ('\u{3059}', &[('\u{3099}', '\u{305a}')]), ('\u{305b}', &[('\u{3099}',
-        '\u{305c}')]), ('\u{305d}', &[('\u{3099}', '\u{305e}')]), ('\u{305f}', &[('\u{3099}',
-        '\u{3060}')]), ('\u{3061}', &[('\u{3099}', '\u{3062}')]), ('\u{3064}', &[('\u{3099}',
-        '\u{3065}')]), ('\u{3066}', &[('\u{3099}', '\u{3067}')]), ('\u{3068}', &[('\u{3099}',
-        '\u{3069}')]), ('\u{306f}', &[('\u{3099}', '\u{3070}'), ('\u{309a}', '\u{3071}')]),
-        ('\u{3072}', &[('\u{3099}', '\u{3073}'), ('\u{309a}', '\u{3074}')]), ('\u{3075}',
-        &[('\u{3099}', '\u{3076}'), ('\u{309a}', '\u{3077}')]), ('\u{3078}', &[('\u{3099}',
-        '\u{3079}'), ('\u{309a}', '\u{307a}')]), ('\u{307b}', &[('\u{3099}', '\u{307c}'),
-        ('\u{309a}', '\u{307d}')]), ('\u{309d}', &[('\u{3099}', '\u{309e}')]), ('\u{30a6}',
-        &[('\u{3099}', '\u{30f4}')]), ('\u{30ab}', &[('\u{3099}', '\u{30ac}')]), ('\u{30ad}',
-        &[('\u{3099}', '\u{30ae}')]), ('\u{30af}', &[('\u{3099}', '\u{30b0}')]), ('\u{30b1}',
-        &[('\u{3099}', '\u{30b2}')]), ('\u{30b3}', &[('\u{3099}', '\u{30b4}')]), ('\u{30b5}',
-        &[('\u{3099}', '\u{30b6}')]), ('\u{30b7}', &[('\u{3099}', '\u{30b8}')]), ('\u{30b9}',
-        &[('\u{3099}', '\u{30ba}')]), ('\u{30bb}', &[('\u{3099}', '\u{30bc}')]), ('\u{30bd}',
-        &[('\u{3099}', '\u{30be}')]), ('\u{30bf}', &[('\u{3099}', '\u{30c0}')]), ('\u{30c1}',
-        &[('\u{3099}', '\u{30c2}')]), ('\u{30c4}', &[('\u{3099}', '\u{30c5}')]), ('\u{30c6}',
-        &[('\u{3099}', '\u{30c7}')]), ('\u{30c8}', &[('\u{3099}', '\u{30c9}')]), ('\u{30cf}',
-        &[('\u{3099}', '\u{30d0}'), ('\u{309a}', '\u{30d1}')]), ('\u{30d2}', &[('\u{3099}',
-        '\u{30d3}'), ('\u{309a}', '\u{30d4}')]), ('\u{30d5}', &[('\u{3099}', '\u{30d6}'),
-        ('\u{309a}', '\u{30d7}')]), ('\u{30d8}', &[('\u{3099}', '\u{30d9}'), ('\u{309a}',
-        '\u{30da}')]), ('\u{30db}', &[('\u{3099}', '\u{30dc}'), ('\u{309a}', '\u{30dd}')]),
-        ('\u{30ef}', &[('\u{3099}', '\u{30f7}')]), ('\u{30f0}', &[('\u{3099}', '\u{30f8}')]),
-        ('\u{30f1}', &[('\u{3099}', '\u{30f9}')]), ('\u{30f2}', &[('\u{3099}', '\u{30fa}')]),
-        ('\u{30fd}', &[('\u{3099}', '\u{30fe}')]), ('\u{11099}', &[('\u{110ba}', '\u{1109a}')]),
-        ('\u{1109b}', &[('\u{110ba}', '\u{1109c}')]), ('\u{110a5}', &[('\u{110ba}', '\u{110ab}')]),
-        ('\u{11131}', &[('\u{11127}', '\u{1112e}')]), ('\u{11132}', &[('\u{11127}', '\u{1112f}')]),
-        ('\u{11347}', &[('\u{1133e}', '\u{1134b}'), ('\u{11357}', '\u{1134c}')]), ('\u{114b9}',
-        &[('\u{114b0}', '\u{114bc}'), ('\u{114ba}', '\u{114bb}'), ('\u{114bd}', '\u{114be}')]),
-        ('\u{115b8}', &[('\u{115af}', '\u{115ba}')]), ('\u{115b9}', &[('\u{115af}', '\u{115bb}')])
-    ];
-
-
-    fn bsearch_range_value_table(c: char, r: &'static [(char, char, u8)]) -> u8 {
-        use core::cmp::Ordering::{Equal, Less, Greater};
-        use core::slice::SliceExt;
-        use core::result::Result::{Ok, Err};
-        match r.binary_search_by(|&(lo, hi, _)| {
-            if lo <= c && c <= hi { Equal }
-            else if hi < c { Less }
-            else { Greater }
-        }) {
-            Ok(idx) => {
-                let (_, _, result) = r[idx];
-                result
-            }
-            Err(_) => 0
-        }
-    }
-
-    const combining_class_table: &'static [(char, char, u8)] = &[
-        ('\u{300}', '\u{314}', 230), ('\u{315}', '\u{315}', 232), ('\u{316}', '\u{319}', 220),
-        ('\u{31a}', '\u{31a}', 232), ('\u{31b}', '\u{31b}', 216), ('\u{31c}', '\u{320}', 220),
-        ('\u{321}', '\u{322}', 202), ('\u{323}', '\u{326}', 220), ('\u{327}', '\u{328}', 202),
-        ('\u{329}', '\u{333}', 220), ('\u{334}', '\u{338}', 1), ('\u{339}', '\u{33c}', 220),
-        ('\u{33d}', '\u{344}', 230), ('\u{345}', '\u{345}', 240), ('\u{346}', '\u{346}', 230),
-        ('\u{347}', '\u{349}', 220), ('\u{34a}', '\u{34c}', 230), ('\u{34d}', '\u{34e}', 220),
-        ('\u{350}', '\u{352}', 230), ('\u{353}', '\u{356}', 220), ('\u{357}', '\u{357}', 230),
-        ('\u{358}', '\u{358}', 232), ('\u{359}', '\u{35a}', 220), ('\u{35b}', '\u{35b}', 230),
-        ('\u{35c}', '\u{35c}', 233), ('\u{35d}', '\u{35e}', 234), ('\u{35f}', '\u{35f}', 233),
-        ('\u{360}', '\u{361}', 234), ('\u{362}', '\u{362}', 233), ('\u{363}', '\u{36f}', 230),
-        ('\u{483}', '\u{487}', 230), ('\u{591}', '\u{591}', 220), ('\u{592}', '\u{595}', 230),
-        ('\u{596}', '\u{596}', 220), ('\u{597}', '\u{599}', 230), ('\u{59a}', '\u{59a}', 222),
-        ('\u{59b}', '\u{59b}', 220), ('\u{59c}', '\u{5a1}', 230), ('\u{5a2}', '\u{5a7}', 220),
-        ('\u{5a8}', '\u{5a9}', 230), ('\u{5aa}', '\u{5aa}', 220), ('\u{5ab}', '\u{5ac}', 230),
-        ('\u{5ad}', '\u{5ad}', 222), ('\u{5ae}', '\u{5ae}', 228), ('\u{5af}', '\u{5af}', 230),
-        ('\u{5b0}', '\u{5b0}', 10), ('\u{5b1}', '\u{5b1}', 11), ('\u{5b2}', '\u{5b2}', 12),
-        ('\u{5b3}', '\u{5b3}', 13), ('\u{5b4}', '\u{5b4}', 14), ('\u{5b5}', '\u{5b5}', 15),
-        ('\u{5b6}', '\u{5b6}', 16), ('\u{5b7}', '\u{5b7}', 17), ('\u{5b8}', '\u{5b8}', 18),
-        ('\u{5b9}', '\u{5ba}', 19), ('\u{5bb}', '\u{5bb}', 20), ('\u{5bc}', '\u{5bc}', 21),
-        ('\u{5bd}', '\u{5bd}', 22), ('\u{5bf}', '\u{5bf}', 23), ('\u{5c1}', '\u{5c1}', 24),
-        ('\u{5c2}', '\u{5c2}', 25), ('\u{5c4}', '\u{5c4}', 230), ('\u{5c5}', '\u{5c5}', 220),
-        ('\u{5c7}', '\u{5c7}', 18), ('\u{610}', '\u{617}', 230), ('\u{618}', '\u{618}', 30),
-        ('\u{619}', '\u{619}', 31), ('\u{61a}', '\u{61a}', 32), ('\u{64b}', '\u{64b}', 27),
-        ('\u{64c}', '\u{64c}', 28), ('\u{64d}', '\u{64d}', 29), ('\u{64e}', '\u{64e}', 30),
-        ('\u{64f}', '\u{64f}', 31), ('\u{650}', '\u{650}', 32), ('\u{651}', '\u{651}', 33),
-        ('\u{652}', '\u{652}', 34), ('\u{653}', '\u{654}', 230), ('\u{655}', '\u{656}', 220),
-        ('\u{657}', '\u{65b}', 230), ('\u{65c}', '\u{65c}', 220), ('\u{65d}', '\u{65e}', 230),
-        ('\u{65f}', '\u{65f}', 220), ('\u{670}', '\u{670}', 35), ('\u{6d6}', '\u{6dc}', 230),
-        ('\u{6df}', '\u{6e2}', 230), ('\u{6e3}', '\u{6e3}', 220), ('\u{6e4}', '\u{6e4}', 230),
-        ('\u{6e7}', '\u{6e8}', 230), ('\u{6ea}', '\u{6ea}', 220), ('\u{6eb}', '\u{6ec}', 230),
-        ('\u{6ed}', '\u{6ed}', 220), ('\u{711}', '\u{711}', 36), ('\u{730}', '\u{730}', 230),
-        ('\u{731}', '\u{731}', 220), ('\u{732}', '\u{733}', 230), ('\u{734}', '\u{734}', 220),
-        ('\u{735}', '\u{736}', 230), ('\u{737}', '\u{739}', 220), ('\u{73a}', '\u{73a}', 230),
-        ('\u{73b}', '\u{73c}', 220), ('\u{73d}', '\u{73d}', 230), ('\u{73e}', '\u{73e}', 220),
-        ('\u{73f}', '\u{741}', 230), ('\u{742}', '\u{742}', 220), ('\u{743}', '\u{743}', 230),
-        ('\u{744}', '\u{744}', 220), ('\u{745}', '\u{745}', 230), ('\u{746}', '\u{746}', 220),
-        ('\u{747}', '\u{747}', 230), ('\u{748}', '\u{748}', 220), ('\u{749}', '\u{74a}', 230),
-        ('\u{7eb}', '\u{7f1}', 230), ('\u{7f2}', '\u{7f2}', 220), ('\u{7f3}', '\u{7f3}', 230),
-        ('\u{816}', '\u{819}', 230), ('\u{81b}', '\u{823}', 230), ('\u{825}', '\u{827}', 230),
-        ('\u{829}', '\u{82d}', 230), ('\u{859}', '\u{85b}', 220), ('\u{8e4}', '\u{8e5}', 230),
-        ('\u{8e6}', '\u{8e6}', 220), ('\u{8e7}', '\u{8e8}', 230), ('\u{8e9}', '\u{8e9}', 220),
-        ('\u{8ea}', '\u{8ec}', 230), ('\u{8ed}', '\u{8ef}', 220), ('\u{8f0}', '\u{8f0}', 27),
-        ('\u{8f1}', '\u{8f1}', 28), ('\u{8f2}', '\u{8f2}', 29), ('\u{8f3}', '\u{8f5}', 230),
-        ('\u{8f6}', '\u{8f6}', 220), ('\u{8f7}', '\u{8f8}', 230), ('\u{8f9}', '\u{8fa}', 220),
-        ('\u{8fb}', '\u{8ff}', 230), ('\u{93c}', '\u{93c}', 7), ('\u{94d}', '\u{94d}', 9),
-        ('\u{951}', '\u{951}', 230), ('\u{952}', '\u{952}', 220), ('\u{953}', '\u{954}', 230),
-        ('\u{9bc}', '\u{9bc}', 7), ('\u{9cd}', '\u{9cd}', 9), ('\u{a3c}', '\u{a3c}', 7), ('\u{a4d}',
-        '\u{a4d}', 9), ('\u{abc}', '\u{abc}', 7), ('\u{acd}', '\u{acd}', 9), ('\u{b3c}', '\u{b3c}',
-        7), ('\u{b4d}', '\u{b4d}', 9), ('\u{bcd}', '\u{bcd}', 9), ('\u{c4d}', '\u{c4d}', 9),
-        ('\u{c55}', '\u{c55}', 84), ('\u{c56}', '\u{c56}', 91), ('\u{cbc}', '\u{cbc}', 7),
-        ('\u{ccd}', '\u{ccd}', 9), ('\u{d4d}', '\u{d4d}', 9), ('\u{dca}', '\u{dca}', 9), ('\u{e38}',
-        '\u{e39}', 103), ('\u{e3a}', '\u{e3a}', 9), ('\u{e48}', '\u{e4b}', 107), ('\u{eb8}',
-        '\u{eb9}', 118), ('\u{ec8}', '\u{ecb}', 122), ('\u{f18}', '\u{f19}', 220), ('\u{f35}',
-        '\u{f35}', 220), ('\u{f37}', '\u{f37}', 220), ('\u{f39}', '\u{f39}', 216), ('\u{f71}',
-        '\u{f71}', 129), ('\u{f72}', '\u{f72}', 130), ('\u{f74}', '\u{f74}', 132), ('\u{f7a}',
-        '\u{f7d}', 130), ('\u{f80}', '\u{f80}', 130), ('\u{f82}', '\u{f83}', 230), ('\u{f84}',
-        '\u{f84}', 9), ('\u{f86}', '\u{f87}', 230), ('\u{fc6}', '\u{fc6}', 220), ('\u{1037}',
-        '\u{1037}', 7), ('\u{1039}', '\u{103a}', 9), ('\u{108d}', '\u{108d}', 220), ('\u{135d}',
-        '\u{135f}', 230), ('\u{1714}', '\u{1714}', 9), ('\u{1734}', '\u{1734}', 9), ('\u{17d2}',
-        '\u{17d2}', 9), ('\u{17dd}', '\u{17dd}', 230), ('\u{18a9}', '\u{18a9}', 228), ('\u{1939}',
-        '\u{1939}', 222), ('\u{193a}', '\u{193a}', 230), ('\u{193b}', '\u{193b}', 220), ('\u{1a17}',
-        '\u{1a17}', 230), ('\u{1a18}', '\u{1a18}', 220), ('\u{1a60}', '\u{1a60}', 9), ('\u{1a75}',
-        '\u{1a7c}', 230), ('\u{1a7f}', '\u{1a7f}', 220), ('\u{1ab0}', '\u{1ab4}', 230), ('\u{1ab5}',
-        '\u{1aba}', 220), ('\u{1abb}', '\u{1abc}', 230), ('\u{1abd}', '\u{1abd}', 220), ('\u{1b34}',
-        '\u{1b34}', 7), ('\u{1b44}', '\u{1b44}', 9), ('\u{1b6b}', '\u{1b6b}', 230), ('\u{1b6c}',
-        '\u{1b6c}', 220), ('\u{1b6d}', '\u{1b73}', 230), ('\u{1baa}', '\u{1bab}', 9), ('\u{1be6}',
-        '\u{1be6}', 7), ('\u{1bf2}', '\u{1bf3}', 9), ('\u{1c37}', '\u{1c37}', 7), ('\u{1cd0}',
-        '\u{1cd2}', 230), ('\u{1cd4}', '\u{1cd4}', 1), ('\u{1cd5}', '\u{1cd9}', 220), ('\u{1cda}',
-        '\u{1cdb}', 230), ('\u{1cdc}', '\u{1cdf}', 220), ('\u{1ce0}', '\u{1ce0}', 230), ('\u{1ce2}',
-        '\u{1ce8}', 1), ('\u{1ced}', '\u{1ced}', 220), ('\u{1cf4}', '\u{1cf4}', 230), ('\u{1cf8}',
-        '\u{1cf9}', 230), ('\u{1dc0}', '\u{1dc1}', 230), ('\u{1dc2}', '\u{1dc2}', 220), ('\u{1dc3}',
-        '\u{1dc9}', 230), ('\u{1dca}', '\u{1dca}', 220), ('\u{1dcb}', '\u{1dcc}', 230), ('\u{1dcd}',
-        '\u{1dcd}', 234), ('\u{1dce}', '\u{1dce}', 214), ('\u{1dcf}', '\u{1dcf}', 220), ('\u{1dd0}',
-        '\u{1dd0}', 202), ('\u{1dd1}', '\u{1df5}', 230), ('\u{1dfc}', '\u{1dfc}', 233), ('\u{1dfd}',
-        '\u{1dfd}', 220), ('\u{1dfe}', '\u{1dfe}', 230), ('\u{1dff}', '\u{1dff}', 220), ('\u{20d0}',
-        '\u{20d1}', 230), ('\u{20d2}', '\u{20d3}', 1), ('\u{20d4}', '\u{20d7}', 230), ('\u{20d8}',
-        '\u{20da}', 1), ('\u{20db}', '\u{20dc}', 230), ('\u{20e1}', '\u{20e1}', 230), ('\u{20e5}',
-        '\u{20e6}', 1), ('\u{20e7}', '\u{20e7}', 230), ('\u{20e8}', '\u{20e8}', 220), ('\u{20e9}',
-        '\u{20e9}', 230), ('\u{20ea}', '\u{20eb}', 1), ('\u{20ec}', '\u{20ef}', 220), ('\u{20f0}',
-        '\u{20f0}', 230), ('\u{2cef}', '\u{2cf1}', 230), ('\u{2d7f}', '\u{2d7f}', 9), ('\u{2de0}',
-        '\u{2dff}', 230), ('\u{302a}', '\u{302a}', 218), ('\u{302b}', '\u{302b}', 228), ('\u{302c}',
-        '\u{302c}', 232), ('\u{302d}', '\u{302d}', 222), ('\u{302e}', '\u{302f}', 224), ('\u{3099}',
-        '\u{309a}', 8), ('\u{a66f}', '\u{a66f}', 230), ('\u{a674}', '\u{a67d}', 230), ('\u{a69f}',
-        '\u{a69f}', 230), ('\u{a6f0}', '\u{a6f1}', 230), ('\u{a806}', '\u{a806}', 9), ('\u{a8c4}',
-        '\u{a8c4}', 9), ('\u{a8e0}', '\u{a8f1}', 230), ('\u{a92b}', '\u{a92d}', 220), ('\u{a953}',
-        '\u{a953}', 9), ('\u{a9b3}', '\u{a9b3}', 7), ('\u{a9c0}', '\u{a9c0}', 9), ('\u{aab0}',
-        '\u{aab0}', 230), ('\u{aab2}', '\u{aab3}', 230), ('\u{aab4}', '\u{aab4}', 220), ('\u{aab7}',
-        '\u{aab8}', 230), ('\u{aabe}', '\u{aabf}', 230), ('\u{aac1}', '\u{aac1}', 230), ('\u{aaf6}',
-        '\u{aaf6}', 9), ('\u{abed}', '\u{abed}', 9), ('\u{fb1e}', '\u{fb1e}', 26), ('\u{fe20}',
-        '\u{fe26}', 230), ('\u{fe27}', '\u{fe2d}', 220), ('\u{101fd}', '\u{101fd}', 220),
-        ('\u{102e0}', '\u{102e0}', 220), ('\u{10376}', '\u{1037a}', 230), ('\u{10a0d}', '\u{10a0d}',
-        220), ('\u{10a0f}', '\u{10a0f}', 230), ('\u{10a38}', '\u{10a38}', 230), ('\u{10a39}',
-        '\u{10a39}', 1), ('\u{10a3a}', '\u{10a3a}', 220), ('\u{10a3f}', '\u{10a3f}', 9),
-        ('\u{10ae5}', '\u{10ae5}', 230), ('\u{10ae6}', '\u{10ae6}', 220), ('\u{11046}', '\u{11046}',
-        9), ('\u{1107f}', '\u{1107f}', 9), ('\u{110b9}', '\u{110b9}', 9), ('\u{110ba}', '\u{110ba}',
-        7), ('\u{11100}', '\u{11102}', 230), ('\u{11133}', '\u{11134}', 9), ('\u{11173}',
-        '\u{11173}', 7), ('\u{111c0}', '\u{111c0}', 9), ('\u{11235}', '\u{11235}', 9), ('\u{11236}',
-        '\u{11236}', 7), ('\u{112e9}', '\u{112e9}', 7), ('\u{112ea}', '\u{112ea}', 9), ('\u{1133c}',
-        '\u{1133c}', 7), ('\u{1134d}', '\u{1134d}', 9), ('\u{11366}', '\u{1136c}', 230),
-        ('\u{11370}', '\u{11374}', 230), ('\u{114c2}', '\u{114c2}', 9), ('\u{114c3}', '\u{114c3}',
-        7), ('\u{115bf}', '\u{115bf}', 9), ('\u{115c0}', '\u{115c0}', 7), ('\u{1163f}', '\u{1163f}',
-        9), ('\u{116b6}', '\u{116b6}', 9), ('\u{116b7}', '\u{116b7}', 7), ('\u{16af0}', '\u{16af4}',
-        1), ('\u{16b30}', '\u{16b36}', 230), ('\u{1bc9e}', '\u{1bc9e}', 1), ('\u{1d165}',
-        '\u{1d166}', 216), ('\u{1d167}', '\u{1d169}', 1), ('\u{1d16d}', '\u{1d16d}', 226),
-        ('\u{1d16e}', '\u{1d172}', 216), ('\u{1d17b}', '\u{1d182}', 220), ('\u{1d185}', '\u{1d189}',
-        230), ('\u{1d18a}', '\u{1d18b}', 220), ('\u{1d1aa}', '\u{1d1ad}', 230), ('\u{1d242}',
-        '\u{1d244}', 230), ('\u{1e8d0}', '\u{1e8d6}', 220)
-    ];
-
-    #[deprecated(reason = "use the crates.io `unicode-normalization` lib instead",
-                 since = "1.0.0")]
-    #[unstable(feature = "unicode",
-               reason = "this functionality will be moved to crates.io")]
-    pub fn canonical_combining_class(c: char) -> u8 {
-        bsearch_range_value_table(c, combining_class_table)
-    }
-
-}
-
 pub mod conversions {
     use core::cmp::Ordering::{Equal, Less, Greater};
     use core::slice::SliceExt;
@@ -4120,234 +1438,274 @@ pub mod conversions {
         '\0', '\0']), ('\u{10c1}', ['\u{2d21}', '\0', '\0']), ('\u{10c2}', ['\u{2d22}', '\0',
         '\0']), ('\u{10c3}', ['\u{2d23}', '\0', '\0']), ('\u{10c4}', ['\u{2d24}', '\0', '\0']),
         ('\u{10c5}', ['\u{2d25}', '\0', '\0']), ('\u{10c7}', ['\u{2d27}', '\0', '\0']), ('\u{10cd}',
-        ['\u{2d2d}', '\0', '\0']), ('\u{1e00}', ['\u{1e01}', '\0', '\0']), ('\u{1e02}', ['\u{1e03}',
-        '\0', '\0']), ('\u{1e04}', ['\u{1e05}', '\0', '\0']), ('\u{1e06}', ['\u{1e07}', '\0',
-        '\0']), ('\u{1e08}', ['\u{1e09}', '\0', '\0']), ('\u{1e0a}', ['\u{1e0b}', '\0', '\0']),
-        ('\u{1e0c}', ['\u{1e0d}', '\0', '\0']), ('\u{1e0e}', ['\u{1e0f}', '\0', '\0']), ('\u{1e10}',
-        ['\u{1e11}', '\0', '\0']), ('\u{1e12}', ['\u{1e13}', '\0', '\0']), ('\u{1e14}', ['\u{1e15}',
-        '\0', '\0']), ('\u{1e16}', ['\u{1e17}', '\0', '\0']), ('\u{1e18}', ['\u{1e19}', '\0',
-        '\0']), ('\u{1e1a}', ['\u{1e1b}', '\0', '\0']), ('\u{1e1c}', ['\u{1e1d}', '\0', '\0']),
-        ('\u{1e1e}', ['\u{1e1f}', '\0', '\0']), ('\u{1e20}', ['\u{1e21}', '\0', '\0']), ('\u{1e22}',
-        ['\u{1e23}', '\0', '\0']), ('\u{1e24}', ['\u{1e25}', '\0', '\0']), ('\u{1e26}', ['\u{1e27}',
-        '\0', '\0']), ('\u{1e28}', ['\u{1e29}', '\0', '\0']), ('\u{1e2a}', ['\u{1e2b}', '\0',
-        '\0']), ('\u{1e2c}', ['\u{1e2d}', '\0', '\0']), ('\u{1e2e}', ['\u{1e2f}', '\0', '\0']),
-        ('\u{1e30}', ['\u{1e31}', '\0', '\0']), ('\u{1e32}', ['\u{1e33}', '\0', '\0']), ('\u{1e34}',
-        ['\u{1e35}', '\0', '\0']), ('\u{1e36}', ['\u{1e37}', '\0', '\0']), ('\u{1e38}', ['\u{1e39}',
-        '\0', '\0']), ('\u{1e3a}', ['\u{1e3b}', '\0', '\0']), ('\u{1e3c}', ['\u{1e3d}', '\0',
-        '\0']), ('\u{1e3e}', ['\u{1e3f}', '\0', '\0']), ('\u{1e40}', ['\u{1e41}', '\0', '\0']),
-        ('\u{1e42}', ['\u{1e43}', '\0', '\0']), ('\u{1e44}', ['\u{1e45}', '\0', '\0']), ('\u{1e46}',
-        ['\u{1e47}', '\0', '\0']), ('\u{1e48}', ['\u{1e49}', '\0', '\0']), ('\u{1e4a}', ['\u{1e4b}',
-        '\0', '\0']), ('\u{1e4c}', ['\u{1e4d}', '\0', '\0']), ('\u{1e4e}', ['\u{1e4f}', '\0',
-        '\0']), ('\u{1e50}', ['\u{1e51}', '\0', '\0']), ('\u{1e52}', ['\u{1e53}', '\0', '\0']),
-        ('\u{1e54}', ['\u{1e55}', '\0', '\0']), ('\u{1e56}', ['\u{1e57}', '\0', '\0']), ('\u{1e58}',
-        ['\u{1e59}', '\0', '\0']), ('\u{1e5a}', ['\u{1e5b}', '\0', '\0']), ('\u{1e5c}', ['\u{1e5d}',
-        '\0', '\0']), ('\u{1e5e}', ['\u{1e5f}', '\0', '\0']), ('\u{1e60}', ['\u{1e61}', '\0',
-        '\0']), ('\u{1e62}', ['\u{1e63}', '\0', '\0']), ('\u{1e64}', ['\u{1e65}', '\0', '\0']),
-        ('\u{1e66}', ['\u{1e67}', '\0', '\0']), ('\u{1e68}', ['\u{1e69}', '\0', '\0']), ('\u{1e6a}',
-        ['\u{1e6b}', '\0', '\0']), ('\u{1e6c}', ['\u{1e6d}', '\0', '\0']), ('\u{1e6e}', ['\u{1e6f}',
-        '\0', '\0']), ('\u{1e70}', ['\u{1e71}', '\0', '\0']), ('\u{1e72}', ['\u{1e73}', '\0',
-        '\0']), ('\u{1e74}', ['\u{1e75}', '\0', '\0']), ('\u{1e76}', ['\u{1e77}', '\0', '\0']),
-        ('\u{1e78}', ['\u{1e79}', '\0', '\0']), ('\u{1e7a}', ['\u{1e7b}', '\0', '\0']), ('\u{1e7c}',
-        ['\u{1e7d}', '\0', '\0']), ('\u{1e7e}', ['\u{1e7f}', '\0', '\0']), ('\u{1e80}', ['\u{1e81}',
-        '\0', '\0']), ('\u{1e82}', ['\u{1e83}', '\0', '\0']), ('\u{1e84}', ['\u{1e85}', '\0',
-        '\0']), ('\u{1e86}', ['\u{1e87}', '\0', '\0']), ('\u{1e88}', ['\u{1e89}', '\0', '\0']),
-        ('\u{1e8a}', ['\u{1e8b}', '\0', '\0']), ('\u{1e8c}', ['\u{1e8d}', '\0', '\0']), ('\u{1e8e}',
-        ['\u{1e8f}', '\0', '\0']), ('\u{1e90}', ['\u{1e91}', '\0', '\0']), ('\u{1e92}', ['\u{1e93}',
-        '\0', '\0']), ('\u{1e94}', ['\u{1e95}', '\0', '\0']), ('\u{1e9e}', ['\u{df}', '\0', '\0']),
-        ('\u{1ea0}', ['\u{1ea1}', '\0', '\0']), ('\u{1ea2}', ['\u{1ea3}', '\0', '\0']), ('\u{1ea4}',
-        ['\u{1ea5}', '\0', '\0']), ('\u{1ea6}', ['\u{1ea7}', '\0', '\0']), ('\u{1ea8}', ['\u{1ea9}',
-        '\0', '\0']), ('\u{1eaa}', ['\u{1eab}', '\0', '\0']), ('\u{1eac}', ['\u{1ead}', '\0',
-        '\0']), ('\u{1eae}', ['\u{1eaf}', '\0', '\0']), ('\u{1eb0}', ['\u{1eb1}', '\0', '\0']),
-        ('\u{1eb2}', ['\u{1eb3}', '\0', '\0']), ('\u{1eb4}', ['\u{1eb5}', '\0', '\0']), ('\u{1eb6}',
-        ['\u{1eb7}', '\0', '\0']), ('\u{1eb8}', ['\u{1eb9}', '\0', '\0']), ('\u{1eba}', ['\u{1ebb}',
-        '\0', '\0']), ('\u{1ebc}', ['\u{1ebd}', '\0', '\0']), ('\u{1ebe}', ['\u{1ebf}', '\0',
-        '\0']), ('\u{1ec0}', ['\u{1ec1}', '\0', '\0']), ('\u{1ec2}', ['\u{1ec3}', '\0', '\0']),
-        ('\u{1ec4}', ['\u{1ec5}', '\0', '\0']), ('\u{1ec6}', ['\u{1ec7}', '\0', '\0']), ('\u{1ec8}',
-        ['\u{1ec9}', '\0', '\0']), ('\u{1eca}', ['\u{1ecb}', '\0', '\0']), ('\u{1ecc}', ['\u{1ecd}',
-        '\0', '\0']), ('\u{1ece}', ['\u{1ecf}', '\0', '\0']), ('\u{1ed0}', ['\u{1ed1}', '\0',
-        '\0']), ('\u{1ed2}', ['\u{1ed3}', '\0', '\0']), ('\u{1ed4}', ['\u{1ed5}', '\0', '\0']),
-        ('\u{1ed6}', ['\u{1ed7}', '\0', '\0']), ('\u{1ed8}', ['\u{1ed9}', '\0', '\0']), ('\u{1eda}',
-        ['\u{1edb}', '\0', '\0']), ('\u{1edc}', ['\u{1edd}', '\0', '\0']), ('\u{1ede}', ['\u{1edf}',
-        '\0', '\0']), ('\u{1ee0}', ['\u{1ee1}', '\0', '\0']), ('\u{1ee2}', ['\u{1ee3}', '\0',
-        '\0']), ('\u{1ee4}', ['\u{1ee5}', '\0', '\0']), ('\u{1ee6}', ['\u{1ee7}', '\0', '\0']),
-        ('\u{1ee8}', ['\u{1ee9}', '\0', '\0']), ('\u{1eea}', ['\u{1eeb}', '\0', '\0']), ('\u{1eec}',
-        ['\u{1eed}', '\0', '\0']), ('\u{1eee}', ['\u{1eef}', '\0', '\0']), ('\u{1ef0}', ['\u{1ef1}',
-        '\0', '\0']), ('\u{1ef2}', ['\u{1ef3}', '\0', '\0']), ('\u{1ef4}', ['\u{1ef5}', '\0',
-        '\0']), ('\u{1ef6}', ['\u{1ef7}', '\0', '\0']), ('\u{1ef8}', ['\u{1ef9}', '\0', '\0']),
-        ('\u{1efa}', ['\u{1efb}', '\0', '\0']), ('\u{1efc}', ['\u{1efd}', '\0', '\0']), ('\u{1efe}',
-        ['\u{1eff}', '\0', '\0']), ('\u{1f08}', ['\u{1f00}', '\0', '\0']), ('\u{1f09}', ['\u{1f01}',
-        '\0', '\0']), ('\u{1f0a}', ['\u{1f02}', '\0', '\0']), ('\u{1f0b}', ['\u{1f03}', '\0',
-        '\0']), ('\u{1f0c}', ['\u{1f04}', '\0', '\0']), ('\u{1f0d}', ['\u{1f05}', '\0', '\0']),
-        ('\u{1f0e}', ['\u{1f06}', '\0', '\0']), ('\u{1f0f}', ['\u{1f07}', '\0', '\0']), ('\u{1f18}',
-        ['\u{1f10}', '\0', '\0']), ('\u{1f19}', ['\u{1f11}', '\0', '\0']), ('\u{1f1a}', ['\u{1f12}',
-        '\0', '\0']), ('\u{1f1b}', ['\u{1f13}', '\0', '\0']), ('\u{1f1c}', ['\u{1f14}', '\0',
-        '\0']), ('\u{1f1d}', ['\u{1f15}', '\0', '\0']), ('\u{1f28}', ['\u{1f20}', '\0', '\0']),
-        ('\u{1f29}', ['\u{1f21}', '\0', '\0']), ('\u{1f2a}', ['\u{1f22}', '\0', '\0']), ('\u{1f2b}',
-        ['\u{1f23}', '\0', '\0']), ('\u{1f2c}', ['\u{1f24}', '\0', '\0']), ('\u{1f2d}', ['\u{1f25}',
-        '\0', '\0']), ('\u{1f2e}', ['\u{1f26}', '\0', '\0']), ('\u{1f2f}', ['\u{1f27}', '\0',
-        '\0']), ('\u{1f38}', ['\u{1f30}', '\0', '\0']), ('\u{1f39}', ['\u{1f31}', '\0', '\0']),
-        ('\u{1f3a}', ['\u{1f32}', '\0', '\0']), ('\u{1f3b}', ['\u{1f33}', '\0', '\0']), ('\u{1f3c}',
-        ['\u{1f34}', '\0', '\0']), ('\u{1f3d}', ['\u{1f35}', '\0', '\0']), ('\u{1f3e}', ['\u{1f36}',
-        '\0', '\0']), ('\u{1f3f}', ['\u{1f37}', '\0', '\0']), ('\u{1f48}', ['\u{1f40}', '\0',
-        '\0']), ('\u{1f49}', ['\u{1f41}', '\0', '\0']), ('\u{1f4a}', ['\u{1f42}', '\0', '\0']),
-        ('\u{1f4b}', ['\u{1f43}', '\0', '\0']), ('\u{1f4c}', ['\u{1f44}', '\0', '\0']), ('\u{1f4d}',
-        ['\u{1f45}', '\0', '\0']), ('\u{1f59}', ['\u{1f51}', '\0', '\0']), ('\u{1f5b}', ['\u{1f53}',
-        '\0', '\0']), ('\u{1f5d}', ['\u{1f55}', '\0', '\0']), ('\u{1f5f}', ['\u{1f57}', '\0',
-        '\0']), ('\u{1f68}', ['\u{1f60}', '\0', '\0']), ('\u{1f69}', ['\u{1f61}', '\0', '\0']),
-        ('\u{1f6a}', ['\u{1f62}', '\0', '\0']), ('\u{1f6b}', ['\u{1f63}', '\0', '\0']), ('\u{1f6c}',
-        ['\u{1f64}', '\0', '\0']), ('\u{1f6d}', ['\u{1f65}', '\0', '\0']), ('\u{1f6e}', ['\u{1f66}',
-        '\0', '\0']), ('\u{1f6f}', ['\u{1f67}', '\0', '\0']), ('\u{1f88}', ['\u{1f80}', '\0',
-        '\0']), ('\u{1f89}', ['\u{1f81}', '\0', '\0']), ('\u{1f8a}', ['\u{1f82}', '\0', '\0']),
-        ('\u{1f8b}', ['\u{1f83}', '\0', '\0']), ('\u{1f8c}', ['\u{1f84}', '\0', '\0']), ('\u{1f8d}',
-        ['\u{1f85}', '\0', '\0']), ('\u{1f8e}', ['\u{1f86}', '\0', '\0']), ('\u{1f8f}', ['\u{1f87}',
-        '\0', '\0']), ('\u{1f98}', ['\u{1f90}', '\0', '\0']), ('\u{1f99}', ['\u{1f91}', '\0',
-        '\0']), ('\u{1f9a}', ['\u{1f92}', '\0', '\0']), ('\u{1f9b}', ['\u{1f93}', '\0', '\0']),
-        ('\u{1f9c}', ['\u{1f94}', '\0', '\0']), ('\u{1f9d}', ['\u{1f95}', '\0', '\0']), ('\u{1f9e}',
-        ['\u{1f96}', '\0', '\0']), ('\u{1f9f}', ['\u{1f97}', '\0', '\0']), ('\u{1fa8}', ['\u{1fa0}',
-        '\0', '\0']), ('\u{1fa9}', ['\u{1fa1}', '\0', '\0']), ('\u{1faa}', ['\u{1fa2}', '\0',
-        '\0']), ('\u{1fab}', ['\u{1fa3}', '\0', '\0']), ('\u{1fac}', ['\u{1fa4}', '\0', '\0']),
-        ('\u{1fad}', ['\u{1fa5}', '\0', '\0']), ('\u{1fae}', ['\u{1fa6}', '\0', '\0']), ('\u{1faf}',
-        ['\u{1fa7}', '\0', '\0']), ('\u{1fb8}', ['\u{1fb0}', '\0', '\0']), ('\u{1fb9}', ['\u{1fb1}',
-        '\0', '\0']), ('\u{1fba}', ['\u{1f70}', '\0', '\0']), ('\u{1fbb}', ['\u{1f71}', '\0',
-        '\0']), ('\u{1fbc}', ['\u{1fb3}', '\0', '\0']), ('\u{1fc8}', ['\u{1f72}', '\0', '\0']),
-        ('\u{1fc9}', ['\u{1f73}', '\0', '\0']), ('\u{1fca}', ['\u{1f74}', '\0', '\0']), ('\u{1fcb}',
-        ['\u{1f75}', '\0', '\0']), ('\u{1fcc}', ['\u{1fc3}', '\0', '\0']), ('\u{1fd8}', ['\u{1fd0}',
-        '\0', '\0']), ('\u{1fd9}', ['\u{1fd1}', '\0', '\0']), ('\u{1fda}', ['\u{1f76}', '\0',
-        '\0']), ('\u{1fdb}', ['\u{1f77}', '\0', '\0']), ('\u{1fe8}', ['\u{1fe0}', '\0', '\0']),
-        ('\u{1fe9}', ['\u{1fe1}', '\0', '\0']), ('\u{1fea}', ['\u{1f7a}', '\0', '\0']), ('\u{1feb}',
-        ['\u{1f7b}', '\0', '\0']), ('\u{1fec}', ['\u{1fe5}', '\0', '\0']), ('\u{1ff8}', ['\u{1f78}',
-        '\0', '\0']), ('\u{1ff9}', ['\u{1f79}', '\0', '\0']), ('\u{1ffa}', ['\u{1f7c}', '\0',
-        '\0']), ('\u{1ffb}', ['\u{1f7d}', '\0', '\0']), ('\u{1ffc}', ['\u{1ff3}', '\0', '\0']),
-        ('\u{2126}', ['\u{3c9}', '\0', '\0']), ('\u{212a}', ['\u{6b}', '\0', '\0']), ('\u{212b}',
-        ['\u{e5}', '\0', '\0']), ('\u{2132}', ['\u{214e}', '\0', '\0']), ('\u{2160}', ['\u{2170}',
-        '\0', '\0']), ('\u{2161}', ['\u{2171}', '\0', '\0']), ('\u{2162}', ['\u{2172}', '\0',
-        '\0']), ('\u{2163}', ['\u{2173}', '\0', '\0']), ('\u{2164}', ['\u{2174}', '\0', '\0']),
-        ('\u{2165}', ['\u{2175}', '\0', '\0']), ('\u{2166}', ['\u{2176}', '\0', '\0']), ('\u{2167}',
-        ['\u{2177}', '\0', '\0']), ('\u{2168}', ['\u{2178}', '\0', '\0']), ('\u{2169}', ['\u{2179}',
-        '\0', '\0']), ('\u{216a}', ['\u{217a}', '\0', '\0']), ('\u{216b}', ['\u{217b}', '\0',
-        '\0']), ('\u{216c}', ['\u{217c}', '\0', '\0']), ('\u{216d}', ['\u{217d}', '\0', '\0']),
-        ('\u{216e}', ['\u{217e}', '\0', '\0']), ('\u{216f}', ['\u{217f}', '\0', '\0']), ('\u{2183}',
-        ['\u{2184}', '\0', '\0']), ('\u{24b6}', ['\u{24d0}', '\0', '\0']), ('\u{24b7}', ['\u{24d1}',
-        '\0', '\0']), ('\u{24b8}', ['\u{24d2}', '\0', '\0']), ('\u{24b9}', ['\u{24d3}', '\0',
-        '\0']), ('\u{24ba}', ['\u{24d4}', '\0', '\0']), ('\u{24bb}', ['\u{24d5}', '\0', '\0']),
-        ('\u{24bc}', ['\u{24d6}', '\0', '\0']), ('\u{24bd}', ['\u{24d7}', '\0', '\0']), ('\u{24be}',
-        ['\u{24d8}', '\0', '\0']), ('\u{24bf}', ['\u{24d9}', '\0', '\0']), ('\u{24c0}', ['\u{24da}',
-        '\0', '\0']), ('\u{24c1}', ['\u{24db}', '\0', '\0']), ('\u{24c2}', ['\u{24dc}', '\0',
-        '\0']), ('\u{24c3}', ['\u{24dd}', '\0', '\0']), ('\u{24c4}', ['\u{24de}', '\0', '\0']),
-        ('\u{24c5}', ['\u{24df}', '\0', '\0']), ('\u{24c6}', ['\u{24e0}', '\0', '\0']), ('\u{24c7}',
-        ['\u{24e1}', '\0', '\0']), ('\u{24c8}', ['\u{24e2}', '\0', '\0']), ('\u{24c9}', ['\u{24e3}',
-        '\0', '\0']), ('\u{24ca}', ['\u{24e4}', '\0', '\0']), ('\u{24cb}', ['\u{24e5}', '\0',
-        '\0']), ('\u{24cc}', ['\u{24e6}', '\0', '\0']), ('\u{24cd}', ['\u{24e7}', '\0', '\0']),
-        ('\u{24ce}', ['\u{24e8}', '\0', '\0']), ('\u{24cf}', ['\u{24e9}', '\0', '\0']), ('\u{2c00}',
-        ['\u{2c30}', '\0', '\0']), ('\u{2c01}', ['\u{2c31}', '\0', '\0']), ('\u{2c02}', ['\u{2c32}',
-        '\0', '\0']), ('\u{2c03}', ['\u{2c33}', '\0', '\0']), ('\u{2c04}', ['\u{2c34}', '\0',
-        '\0']), ('\u{2c05}', ['\u{2c35}', '\0', '\0']), ('\u{2c06}', ['\u{2c36}', '\0', '\0']),
-        ('\u{2c07}', ['\u{2c37}', '\0', '\0']), ('\u{2c08}', ['\u{2c38}', '\0', '\0']), ('\u{2c09}',
-        ['\u{2c39}', '\0', '\0']), ('\u{2c0a}', ['\u{2c3a}', '\0', '\0']), ('\u{2c0b}', ['\u{2c3b}',
-        '\0', '\0']), ('\u{2c0c}', ['\u{2c3c}', '\0', '\0']), ('\u{2c0d}', ['\u{2c3d}', '\0',
-        '\0']), ('\u{2c0e}', ['\u{2c3e}', '\0', '\0']), ('\u{2c0f}', ['\u{2c3f}', '\0', '\0']),
-        ('\u{2c10}', ['\u{2c40}', '\0', '\0']), ('\u{2c11}', ['\u{2c41}', '\0', '\0']), ('\u{2c12}',
-        ['\u{2c42}', '\0', '\0']), ('\u{2c13}', ['\u{2c43}', '\0', '\0']), ('\u{2c14}', ['\u{2c44}',
-        '\0', '\0']), ('\u{2c15}', ['\u{2c45}', '\0', '\0']), ('\u{2c16}', ['\u{2c46}', '\0',
-        '\0']), ('\u{2c17}', ['\u{2c47}', '\0', '\0']), ('\u{2c18}', ['\u{2c48}', '\0', '\0']),
-        ('\u{2c19}', ['\u{2c49}', '\0', '\0']), ('\u{2c1a}', ['\u{2c4a}', '\0', '\0']), ('\u{2c1b}',
-        ['\u{2c4b}', '\0', '\0']), ('\u{2c1c}', ['\u{2c4c}', '\0', '\0']), ('\u{2c1d}', ['\u{2c4d}',
-        '\0', '\0']), ('\u{2c1e}', ['\u{2c4e}', '\0', '\0']), ('\u{2c1f}', ['\u{2c4f}', '\0',
-        '\0']), ('\u{2c20}', ['\u{2c50}', '\0', '\0']), ('\u{2c21}', ['\u{2c51}', '\0', '\0']),
-        ('\u{2c22}', ['\u{2c52}', '\0', '\0']), ('\u{2c23}', ['\u{2c53}', '\0', '\0']), ('\u{2c24}',
-        ['\u{2c54}', '\0', '\0']), ('\u{2c25}', ['\u{2c55}', '\0', '\0']), ('\u{2c26}', ['\u{2c56}',
-        '\0', '\0']), ('\u{2c27}', ['\u{2c57}', '\0', '\0']), ('\u{2c28}', ['\u{2c58}', '\0',
-        '\0']), ('\u{2c29}', ['\u{2c59}', '\0', '\0']), ('\u{2c2a}', ['\u{2c5a}', '\0', '\0']),
-        ('\u{2c2b}', ['\u{2c5b}', '\0', '\0']), ('\u{2c2c}', ['\u{2c5c}', '\0', '\0']), ('\u{2c2d}',
-        ['\u{2c5d}', '\0', '\0']), ('\u{2c2e}', ['\u{2c5e}', '\0', '\0']), ('\u{2c60}', ['\u{2c61}',
-        '\0', '\0']), ('\u{2c62}', ['\u{26b}', '\0', '\0']), ('\u{2c63}', ['\u{1d7d}', '\0', '\0']),
-        ('\u{2c64}', ['\u{27d}', '\0', '\0']), ('\u{2c67}', ['\u{2c68}', '\0', '\0']), ('\u{2c69}',
-        ['\u{2c6a}', '\0', '\0']), ('\u{2c6b}', ['\u{2c6c}', '\0', '\0']), ('\u{2c6d}', ['\u{251}',
-        '\0', '\0']), ('\u{2c6e}', ['\u{271}', '\0', '\0']), ('\u{2c6f}', ['\u{250}', '\0', '\0']),
-        ('\u{2c70}', ['\u{252}', '\0', '\0']), ('\u{2c72}', ['\u{2c73}', '\0', '\0']), ('\u{2c75}',
-        ['\u{2c76}', '\0', '\0']), ('\u{2c7e}', ['\u{23f}', '\0', '\0']), ('\u{2c7f}', ['\u{240}',
-        '\0', '\0']), ('\u{2c80}', ['\u{2c81}', '\0', '\0']), ('\u{2c82}', ['\u{2c83}', '\0',
-        '\0']), ('\u{2c84}', ['\u{2c85}', '\0', '\0']), ('\u{2c86}', ['\u{2c87}', '\0', '\0']),
-        ('\u{2c88}', ['\u{2c89}', '\0', '\0']), ('\u{2c8a}', ['\u{2c8b}', '\0', '\0']), ('\u{2c8c}',
-        ['\u{2c8d}', '\0', '\0']), ('\u{2c8e}', ['\u{2c8f}', '\0', '\0']), ('\u{2c90}', ['\u{2c91}',
-        '\0', '\0']), ('\u{2c92}', ['\u{2c93}', '\0', '\0']), ('\u{2c94}', ['\u{2c95}', '\0',
-        '\0']), ('\u{2c96}', ['\u{2c97}', '\0', '\0']), ('\u{2c98}', ['\u{2c99}', '\0', '\0']),
-        ('\u{2c9a}', ['\u{2c9b}', '\0', '\0']), ('\u{2c9c}', ['\u{2c9d}', '\0', '\0']), ('\u{2c9e}',
-        ['\u{2c9f}', '\0', '\0']), ('\u{2ca0}', ['\u{2ca1}', '\0', '\0']), ('\u{2ca2}', ['\u{2ca3}',
-        '\0', '\0']), ('\u{2ca4}', ['\u{2ca5}', '\0', '\0']), ('\u{2ca6}', ['\u{2ca7}', '\0',
-        '\0']), ('\u{2ca8}', ['\u{2ca9}', '\0', '\0']), ('\u{2caa}', ['\u{2cab}', '\0', '\0']),
-        ('\u{2cac}', ['\u{2cad}', '\0', '\0']), ('\u{2cae}', ['\u{2caf}', '\0', '\0']), ('\u{2cb0}',
-        ['\u{2cb1}', '\0', '\0']), ('\u{2cb2}', ['\u{2cb3}', '\0', '\0']), ('\u{2cb4}', ['\u{2cb5}',
-        '\0', '\0']), ('\u{2cb6}', ['\u{2cb7}', '\0', '\0']), ('\u{2cb8}', ['\u{2cb9}', '\0',
-        '\0']), ('\u{2cba}', ['\u{2cbb}', '\0', '\0']), ('\u{2cbc}', ['\u{2cbd}', '\0', '\0']),
-        ('\u{2cbe}', ['\u{2cbf}', '\0', '\0']), ('\u{2cc0}', ['\u{2cc1}', '\0', '\0']), ('\u{2cc2}',
-        ['\u{2cc3}', '\0', '\0']), ('\u{2cc4}', ['\u{2cc5}', '\0', '\0']), ('\u{2cc6}', ['\u{2cc7}',
-        '\0', '\0']), ('\u{2cc8}', ['\u{2cc9}', '\0', '\0']), ('\u{2cca}', ['\u{2ccb}', '\0',
-        '\0']), ('\u{2ccc}', ['\u{2ccd}', '\0', '\0']), ('\u{2cce}', ['\u{2ccf}', '\0', '\0']),
-        ('\u{2cd0}', ['\u{2cd1}', '\0', '\0']), ('\u{2cd2}', ['\u{2cd3}', '\0', '\0']), ('\u{2cd4}',
-        ['\u{2cd5}', '\0', '\0']), ('\u{2cd6}', ['\u{2cd7}', '\0', '\0']), ('\u{2cd8}', ['\u{2cd9}',
-        '\0', '\0']), ('\u{2cda}', ['\u{2cdb}', '\0', '\0']), ('\u{2cdc}', ['\u{2cdd}', '\0',
-        '\0']), ('\u{2cde}', ['\u{2cdf}', '\0', '\0']), ('\u{2ce0}', ['\u{2ce1}', '\0', '\0']),
-        ('\u{2ce2}', ['\u{2ce3}', '\0', '\0']), ('\u{2ceb}', ['\u{2cec}', '\0', '\0']), ('\u{2ced}',
-        ['\u{2cee}', '\0', '\0']), ('\u{2cf2}', ['\u{2cf3}', '\0', '\0']), ('\u{a640}', ['\u{a641}',
-        '\0', '\0']), ('\u{a642}', ['\u{a643}', '\0', '\0']), ('\u{a644}', ['\u{a645}', '\0',
-        '\0']), ('\u{a646}', ['\u{a647}', '\0', '\0']), ('\u{a648}', ['\u{a649}', '\0', '\0']),
-        ('\u{a64a}', ['\u{a64b}', '\0', '\0']), ('\u{a64c}', ['\u{a64d}', '\0', '\0']), ('\u{a64e}',
-        ['\u{a64f}', '\0', '\0']), ('\u{a650}', ['\u{a651}', '\0', '\0']), ('\u{a652}', ['\u{a653}',
-        '\0', '\0']), ('\u{a654}', ['\u{a655}', '\0', '\0']), ('\u{a656}', ['\u{a657}', '\0',
-        '\0']), ('\u{a658}', ['\u{a659}', '\0', '\0']), ('\u{a65a}', ['\u{a65b}', '\0', '\0']),
-        ('\u{a65c}', ['\u{a65d}', '\0', '\0']), ('\u{a65e}', ['\u{a65f}', '\0', '\0']), ('\u{a660}',
-        ['\u{a661}', '\0', '\0']), ('\u{a662}', ['\u{a663}', '\0', '\0']), ('\u{a664}', ['\u{a665}',
-        '\0', '\0']), ('\u{a666}', ['\u{a667}', '\0', '\0']), ('\u{a668}', ['\u{a669}', '\0',
-        '\0']), ('\u{a66a}', ['\u{a66b}', '\0', '\0']), ('\u{a66c}', ['\u{a66d}', '\0', '\0']),
-        ('\u{a680}', ['\u{a681}', '\0', '\0']), ('\u{a682}', ['\u{a683}', '\0', '\0']), ('\u{a684}',
-        ['\u{a685}', '\0', '\0']), ('\u{a686}', ['\u{a687}', '\0', '\0']), ('\u{a688}', ['\u{a689}',
-        '\0', '\0']), ('\u{a68a}', ['\u{a68b}', '\0', '\0']), ('\u{a68c}', ['\u{a68d}', '\0',
-        '\0']), ('\u{a68e}', ['\u{a68f}', '\0', '\0']), ('\u{a690}', ['\u{a691}', '\0', '\0']),
-        ('\u{a692}', ['\u{a693}', '\0', '\0']), ('\u{a694}', ['\u{a695}', '\0', '\0']), ('\u{a696}',
-        ['\u{a697}', '\0', '\0']), ('\u{a698}', ['\u{a699}', '\0', '\0']), ('\u{a69a}', ['\u{a69b}',
-        '\0', '\0']), ('\u{a722}', ['\u{a723}', '\0', '\0']), ('\u{a724}', ['\u{a725}', '\0',
-        '\0']), ('\u{a726}', ['\u{a727}', '\0', '\0']), ('\u{a728}', ['\u{a729}', '\0', '\0']),
-        ('\u{a72a}', ['\u{a72b}', '\0', '\0']), ('\u{a72c}', ['\u{a72d}', '\0', '\0']), ('\u{a72e}',
-        ['\u{a72f}', '\0', '\0']), ('\u{a732}', ['\u{a733}', '\0', '\0']), ('\u{a734}', ['\u{a735}',
-        '\0', '\0']), ('\u{a736}', ['\u{a737}', '\0', '\0']), ('\u{a738}', ['\u{a739}', '\0',
-        '\0']), ('\u{a73a}', ['\u{a73b}', '\0', '\0']), ('\u{a73c}', ['\u{a73d}', '\0', '\0']),
-        ('\u{a73e}', ['\u{a73f}', '\0', '\0']), ('\u{a740}', ['\u{a741}', '\0', '\0']), ('\u{a742}',
-        ['\u{a743}', '\0', '\0']), ('\u{a744}', ['\u{a745}', '\0', '\0']), ('\u{a746}', ['\u{a747}',
-        '\0', '\0']), ('\u{a748}', ['\u{a749}', '\0', '\0']), ('\u{a74a}', ['\u{a74b}', '\0',
-        '\0']), ('\u{a74c}', ['\u{a74d}', '\0', '\0']), ('\u{a74e}', ['\u{a74f}', '\0', '\0']),
-        ('\u{a750}', ['\u{a751}', '\0', '\0']), ('\u{a752}', ['\u{a753}', '\0', '\0']), ('\u{a754}',
-        ['\u{a755}', '\0', '\0']), ('\u{a756}', ['\u{a757}', '\0', '\0']), ('\u{a758}', ['\u{a759}',
-        '\0', '\0']), ('\u{a75a}', ['\u{a75b}', '\0', '\0']), ('\u{a75c}', ['\u{a75d}', '\0',
-        '\0']), ('\u{a75e}', ['\u{a75f}', '\0', '\0']), ('\u{a760}', ['\u{a761}', '\0', '\0']),
-        ('\u{a762}', ['\u{a763}', '\0', '\0']), ('\u{a764}', ['\u{a765}', '\0', '\0']), ('\u{a766}',
-        ['\u{a767}', '\0', '\0']), ('\u{a768}', ['\u{a769}', '\0', '\0']), ('\u{a76a}', ['\u{a76b}',
-        '\0', '\0']), ('\u{a76c}', ['\u{a76d}', '\0', '\0']), ('\u{a76e}', ['\u{a76f}', '\0',
-        '\0']), ('\u{a779}', ['\u{a77a}', '\0', '\0']), ('\u{a77b}', ['\u{a77c}', '\0', '\0']),
-        ('\u{a77d}', ['\u{1d79}', '\0', '\0']), ('\u{a77e}', ['\u{a77f}', '\0', '\0']), ('\u{a780}',
-        ['\u{a781}', '\0', '\0']), ('\u{a782}', ['\u{a783}', '\0', '\0']), ('\u{a784}', ['\u{a785}',
-        '\0', '\0']), ('\u{a786}', ['\u{a787}', '\0', '\0']), ('\u{a78b}', ['\u{a78c}', '\0',
-        '\0']), ('\u{a78d}', ['\u{265}', '\0', '\0']), ('\u{a790}', ['\u{a791}', '\0', '\0']),
-        ('\u{a792}', ['\u{a793}', '\0', '\0']), ('\u{a796}', ['\u{a797}', '\0', '\0']), ('\u{a798}',
-        ['\u{a799}', '\0', '\0']), ('\u{a79a}', ['\u{a79b}', '\0', '\0']), ('\u{a79c}', ['\u{a79d}',
-        '\0', '\0']), ('\u{a79e}', ['\u{a79f}', '\0', '\0']), ('\u{a7a0}', ['\u{a7a1}', '\0',
-        '\0']), ('\u{a7a2}', ['\u{a7a3}', '\0', '\0']), ('\u{a7a4}', ['\u{a7a5}', '\0', '\0']),
-        ('\u{a7a6}', ['\u{a7a7}', '\0', '\0']), ('\u{a7a8}', ['\u{a7a9}', '\0', '\0']), ('\u{a7aa}',
-        ['\u{266}', '\0', '\0']), ('\u{a7ab}', ['\u{25c}', '\0', '\0']), ('\u{a7ac}', ['\u{261}',
-        '\0', '\0']), ('\u{a7ad}', ['\u{26c}', '\0', '\0']), ('\u{a7b0}', ['\u{29e}', '\0', '\0']),
-        ('\u{a7b1}', ['\u{287}', '\0', '\0']), ('\u{ff21}', ['\u{ff41}', '\0', '\0']), ('\u{ff22}',
-        ['\u{ff42}', '\0', '\0']), ('\u{ff23}', ['\u{ff43}', '\0', '\0']), ('\u{ff24}', ['\u{ff44}',
-        '\0', '\0']), ('\u{ff25}', ['\u{ff45}', '\0', '\0']), ('\u{ff26}', ['\u{ff46}', '\0',
-        '\0']), ('\u{ff27}', ['\u{ff47}', '\0', '\0']), ('\u{ff28}', ['\u{ff48}', '\0', '\0']),
-        ('\u{ff29}', ['\u{ff49}', '\0', '\0']), ('\u{ff2a}', ['\u{ff4a}', '\0', '\0']), ('\u{ff2b}',
-        ['\u{ff4b}', '\0', '\0']), ('\u{ff2c}', ['\u{ff4c}', '\0', '\0']), ('\u{ff2d}', ['\u{ff4d}',
-        '\0', '\0']), ('\u{ff2e}', ['\u{ff4e}', '\0', '\0']), ('\u{ff2f}', ['\u{ff4f}', '\0',
-        '\0']), ('\u{ff30}', ['\u{ff50}', '\0', '\0']), ('\u{ff31}', ['\u{ff51}', '\0', '\0']),
-        ('\u{ff32}', ['\u{ff52}', '\0', '\0']), ('\u{ff33}', ['\u{ff53}', '\0', '\0']), ('\u{ff34}',
-        ['\u{ff54}', '\0', '\0']), ('\u{ff35}', ['\u{ff55}', '\0', '\0']), ('\u{ff36}', ['\u{ff56}',
-        '\0', '\0']), ('\u{ff37}', ['\u{ff57}', '\0', '\0']), ('\u{ff38}', ['\u{ff58}', '\0',
-        '\0']), ('\u{ff39}', ['\u{ff59}', '\0', '\0']), ('\u{ff3a}', ['\u{ff5a}', '\0', '\0']),
-        ('\u{10400}', ['\u{10428}', '\0', '\0']), ('\u{10401}', ['\u{10429}', '\0', '\0']),
+        ['\u{2d2d}', '\0', '\0']), ('\u{13a0}', ['\u{ab70}', '\0', '\0']), ('\u{13a1}', ['\u{ab71}',
+        '\0', '\0']), ('\u{13a2}', ['\u{ab72}', '\0', '\0']), ('\u{13a3}', ['\u{ab73}', '\0',
+        '\0']), ('\u{13a4}', ['\u{ab74}', '\0', '\0']), ('\u{13a5}', ['\u{ab75}', '\0', '\0']),
+        ('\u{13a6}', ['\u{ab76}', '\0', '\0']), ('\u{13a7}', ['\u{ab77}', '\0', '\0']), ('\u{13a8}',
+        ['\u{ab78}', '\0', '\0']), ('\u{13a9}', ['\u{ab79}', '\0', '\0']), ('\u{13aa}', ['\u{ab7a}',
+        '\0', '\0']), ('\u{13ab}', ['\u{ab7b}', '\0', '\0']), ('\u{13ac}', ['\u{ab7c}', '\0',
+        '\0']), ('\u{13ad}', ['\u{ab7d}', '\0', '\0']), ('\u{13ae}', ['\u{ab7e}', '\0', '\0']),
+        ('\u{13af}', ['\u{ab7f}', '\0', '\0']), ('\u{13b0}', ['\u{ab80}', '\0', '\0']), ('\u{13b1}',
+        ['\u{ab81}', '\0', '\0']), ('\u{13b2}', ['\u{ab82}', '\0', '\0']), ('\u{13b3}', ['\u{ab83}',
+        '\0', '\0']), ('\u{13b4}', ['\u{ab84}', '\0', '\0']), ('\u{13b5}', ['\u{ab85}', '\0',
+        '\0']), ('\u{13b6}', ['\u{ab86}', '\0', '\0']), ('\u{13b7}', ['\u{ab87}', '\0', '\0']),
+        ('\u{13b8}', ['\u{ab88}', '\0', '\0']), ('\u{13b9}', ['\u{ab89}', '\0', '\0']), ('\u{13ba}',
+        ['\u{ab8a}', '\0', '\0']), ('\u{13bb}', ['\u{ab8b}', '\0', '\0']), ('\u{13bc}', ['\u{ab8c}',
+        '\0', '\0']), ('\u{13bd}', ['\u{ab8d}', '\0', '\0']), ('\u{13be}', ['\u{ab8e}', '\0',
+        '\0']), ('\u{13bf}', ['\u{ab8f}', '\0', '\0']), ('\u{13c0}', ['\u{ab90}', '\0', '\0']),
+        ('\u{13c1}', ['\u{ab91}', '\0', '\0']), ('\u{13c2}', ['\u{ab92}', '\0', '\0']), ('\u{13c3}',
+        ['\u{ab93}', '\0', '\0']), ('\u{13c4}', ['\u{ab94}', '\0', '\0']), ('\u{13c5}', ['\u{ab95}',
+        '\0', '\0']), ('\u{13c6}', ['\u{ab96}', '\0', '\0']), ('\u{13c7}', ['\u{ab97}', '\0',
+        '\0']), ('\u{13c8}', ['\u{ab98}', '\0', '\0']), ('\u{13c9}', ['\u{ab99}', '\0', '\0']),
+        ('\u{13ca}', ['\u{ab9a}', '\0', '\0']), ('\u{13cb}', ['\u{ab9b}', '\0', '\0']), ('\u{13cc}',
+        ['\u{ab9c}', '\0', '\0']), ('\u{13cd}', ['\u{ab9d}', '\0', '\0']), ('\u{13ce}', ['\u{ab9e}',
+        '\0', '\0']), ('\u{13cf}', ['\u{ab9f}', '\0', '\0']), ('\u{13d0}', ['\u{aba0}', '\0',
+        '\0']), ('\u{13d1}', ['\u{aba1}', '\0', '\0']), ('\u{13d2}', ['\u{aba2}', '\0', '\0']),
+        ('\u{13d3}', ['\u{aba3}', '\0', '\0']), ('\u{13d4}', ['\u{aba4}', '\0', '\0']), ('\u{13d5}',
+        ['\u{aba5}', '\0', '\0']), ('\u{13d6}', ['\u{aba6}', '\0', '\0']), ('\u{13d7}', ['\u{aba7}',
+        '\0', '\0']), ('\u{13d8}', ['\u{aba8}', '\0', '\0']), ('\u{13d9}', ['\u{aba9}', '\0',
+        '\0']), ('\u{13da}', ['\u{abaa}', '\0', '\0']), ('\u{13db}', ['\u{abab}', '\0', '\0']),
+        ('\u{13dc}', ['\u{abac}', '\0', '\0']), ('\u{13dd}', ['\u{abad}', '\0', '\0']), ('\u{13de}',
+        ['\u{abae}', '\0', '\0']), ('\u{13df}', ['\u{abaf}', '\0', '\0']), ('\u{13e0}', ['\u{abb0}',
+        '\0', '\0']), ('\u{13e1}', ['\u{abb1}', '\0', '\0']), ('\u{13e2}', ['\u{abb2}', '\0',
+        '\0']), ('\u{13e3}', ['\u{abb3}', '\0', '\0']), ('\u{13e4}', ['\u{abb4}', '\0', '\0']),
+        ('\u{13e5}', ['\u{abb5}', '\0', '\0']), ('\u{13e6}', ['\u{abb6}', '\0', '\0']), ('\u{13e7}',
+        ['\u{abb7}', '\0', '\0']), ('\u{13e8}', ['\u{abb8}', '\0', '\0']), ('\u{13e9}', ['\u{abb9}',
+        '\0', '\0']), ('\u{13ea}', ['\u{abba}', '\0', '\0']), ('\u{13eb}', ['\u{abbb}', '\0',
+        '\0']), ('\u{13ec}', ['\u{abbc}', '\0', '\0']), ('\u{13ed}', ['\u{abbd}', '\0', '\0']),
+        ('\u{13ee}', ['\u{abbe}', '\0', '\0']), ('\u{13ef}', ['\u{abbf}', '\0', '\0']), ('\u{13f0}',
+        ['\u{13f8}', '\0', '\0']), ('\u{13f1}', ['\u{13f9}', '\0', '\0']), ('\u{13f2}', ['\u{13fa}',
+        '\0', '\0']), ('\u{13f3}', ['\u{13fb}', '\0', '\0']), ('\u{13f4}', ['\u{13fc}', '\0',
+        '\0']), ('\u{13f5}', ['\u{13fd}', '\0', '\0']), ('\u{1e00}', ['\u{1e01}', '\0', '\0']),
+        ('\u{1e02}', ['\u{1e03}', '\0', '\0']), ('\u{1e04}', ['\u{1e05}', '\0', '\0']), ('\u{1e06}',
+        ['\u{1e07}', '\0', '\0']), ('\u{1e08}', ['\u{1e09}', '\0', '\0']), ('\u{1e0a}', ['\u{1e0b}',
+        '\0', '\0']), ('\u{1e0c}', ['\u{1e0d}', '\0', '\0']), ('\u{1e0e}', ['\u{1e0f}', '\0',
+        '\0']), ('\u{1e10}', ['\u{1e11}', '\0', '\0']), ('\u{1e12}', ['\u{1e13}', '\0', '\0']),
+        ('\u{1e14}', ['\u{1e15}', '\0', '\0']), ('\u{1e16}', ['\u{1e17}', '\0', '\0']), ('\u{1e18}',
+        ['\u{1e19}', '\0', '\0']), ('\u{1e1a}', ['\u{1e1b}', '\0', '\0']), ('\u{1e1c}', ['\u{1e1d}',
+        '\0', '\0']), ('\u{1e1e}', ['\u{1e1f}', '\0', '\0']), ('\u{1e20}', ['\u{1e21}', '\0',
+        '\0']), ('\u{1e22}', ['\u{1e23}', '\0', '\0']), ('\u{1e24}', ['\u{1e25}', '\0', '\0']),
+        ('\u{1e26}', ['\u{1e27}', '\0', '\0']), ('\u{1e28}', ['\u{1e29}', '\0', '\0']), ('\u{1e2a}',
+        ['\u{1e2b}', '\0', '\0']), ('\u{1e2c}', ['\u{1e2d}', '\0', '\0']), ('\u{1e2e}', ['\u{1e2f}',
+        '\0', '\0']), ('\u{1e30}', ['\u{1e31}', '\0', '\0']), ('\u{1e32}', ['\u{1e33}', '\0',
+        '\0']), ('\u{1e34}', ['\u{1e35}', '\0', '\0']), ('\u{1e36}', ['\u{1e37}', '\0', '\0']),
+        ('\u{1e38}', ['\u{1e39}', '\0', '\0']), ('\u{1e3a}', ['\u{1e3b}', '\0', '\0']), ('\u{1e3c}',
+        ['\u{1e3d}', '\0', '\0']), ('\u{1e3e}', ['\u{1e3f}', '\0', '\0']), ('\u{1e40}', ['\u{1e41}',
+        '\0', '\0']), ('\u{1e42}', ['\u{1e43}', '\0', '\0']), ('\u{1e44}', ['\u{1e45}', '\0',
+        '\0']), ('\u{1e46}', ['\u{1e47}', '\0', '\0']), ('\u{1e48}', ['\u{1e49}', '\0', '\0']),
+        ('\u{1e4a}', ['\u{1e4b}', '\0', '\0']), ('\u{1e4c}', ['\u{1e4d}', '\0', '\0']), ('\u{1e4e}',
+        ['\u{1e4f}', '\0', '\0']), ('\u{1e50}', ['\u{1e51}', '\0', '\0']), ('\u{1e52}', ['\u{1e53}',
+        '\0', '\0']), ('\u{1e54}', ['\u{1e55}', '\0', '\0']), ('\u{1e56}', ['\u{1e57}', '\0',
+        '\0']), ('\u{1e58}', ['\u{1e59}', '\0', '\0']), ('\u{1e5a}', ['\u{1e5b}', '\0', '\0']),
+        ('\u{1e5c}', ['\u{1e5d}', '\0', '\0']), ('\u{1e5e}', ['\u{1e5f}', '\0', '\0']), ('\u{1e60}',
+        ['\u{1e61}', '\0', '\0']), ('\u{1e62}', ['\u{1e63}', '\0', '\0']), ('\u{1e64}', ['\u{1e65}',
+        '\0', '\0']), ('\u{1e66}', ['\u{1e67}', '\0', '\0']), ('\u{1e68}', ['\u{1e69}', '\0',
+        '\0']), ('\u{1e6a}', ['\u{1e6b}', '\0', '\0']), ('\u{1e6c}', ['\u{1e6d}', '\0', '\0']),
+        ('\u{1e6e}', ['\u{1e6f}', '\0', '\0']), ('\u{1e70}', ['\u{1e71}', '\0', '\0']), ('\u{1e72}',
+        ['\u{1e73}', '\0', '\0']), ('\u{1e74}', ['\u{1e75}', '\0', '\0']), ('\u{1e76}', ['\u{1e77}',
+        '\0', '\0']), ('\u{1e78}', ['\u{1e79}', '\0', '\0']), ('\u{1e7a}', ['\u{1e7b}', '\0',
+        '\0']), ('\u{1e7c}', ['\u{1e7d}', '\0', '\0']), ('\u{1e7e}', ['\u{1e7f}', '\0', '\0']),
+        ('\u{1e80}', ['\u{1e81}', '\0', '\0']), ('\u{1e82}', ['\u{1e83}', '\0', '\0']), ('\u{1e84}',
+        ['\u{1e85}', '\0', '\0']), ('\u{1e86}', ['\u{1e87}', '\0', '\0']), ('\u{1e88}', ['\u{1e89}',
+        '\0', '\0']), ('\u{1e8a}', ['\u{1e8b}', '\0', '\0']), ('\u{1e8c}', ['\u{1e8d}', '\0',
+        '\0']), ('\u{1e8e}', ['\u{1e8f}', '\0', '\0']), ('\u{1e90}', ['\u{1e91}', '\0', '\0']),
+        ('\u{1e92}', ['\u{1e93}', '\0', '\0']), ('\u{1e94}', ['\u{1e95}', '\0', '\0']), ('\u{1e9e}',
+        ['\u{df}', '\0', '\0']), ('\u{1ea0}', ['\u{1ea1}', '\0', '\0']), ('\u{1ea2}', ['\u{1ea3}',
+        '\0', '\0']), ('\u{1ea4}', ['\u{1ea5}', '\0', '\0']), ('\u{1ea6}', ['\u{1ea7}', '\0',
+        '\0']), ('\u{1ea8}', ['\u{1ea9}', '\0', '\0']), ('\u{1eaa}', ['\u{1eab}', '\0', '\0']),
+        ('\u{1eac}', ['\u{1ead}', '\0', '\0']), ('\u{1eae}', ['\u{1eaf}', '\0', '\0']), ('\u{1eb0}',
+        ['\u{1eb1}', '\0', '\0']), ('\u{1eb2}', ['\u{1eb3}', '\0', '\0']), ('\u{1eb4}', ['\u{1eb5}',
+        '\0', '\0']), ('\u{1eb6}', ['\u{1eb7}', '\0', '\0']), ('\u{1eb8}', ['\u{1eb9}', '\0',
+        '\0']), ('\u{1eba}', ['\u{1ebb}', '\0', '\0']), ('\u{1ebc}', ['\u{1ebd}', '\0', '\0']),
+        ('\u{1ebe}', ['\u{1ebf}', '\0', '\0']), ('\u{1ec0}', ['\u{1ec1}', '\0', '\0']), ('\u{1ec2}',
+        ['\u{1ec3}', '\0', '\0']), ('\u{1ec4}', ['\u{1ec5}', '\0', '\0']), ('\u{1ec6}', ['\u{1ec7}',
+        '\0', '\0']), ('\u{1ec8}', ['\u{1ec9}', '\0', '\0']), ('\u{1eca}', ['\u{1ecb}', '\0',
+        '\0']), ('\u{1ecc}', ['\u{1ecd}', '\0', '\0']), ('\u{1ece}', ['\u{1ecf}', '\0', '\0']),
+        ('\u{1ed0}', ['\u{1ed1}', '\0', '\0']), ('\u{1ed2}', ['\u{1ed3}', '\0', '\0']), ('\u{1ed4}',
+        ['\u{1ed5}', '\0', '\0']), ('\u{1ed6}', ['\u{1ed7}', '\0', '\0']), ('\u{1ed8}', ['\u{1ed9}',
+        '\0', '\0']), ('\u{1eda}', ['\u{1edb}', '\0', '\0']), ('\u{1edc}', ['\u{1edd}', '\0',
+        '\0']), ('\u{1ede}', ['\u{1edf}', '\0', '\0']), ('\u{1ee0}', ['\u{1ee1}', '\0', '\0']),
+        ('\u{1ee2}', ['\u{1ee3}', '\0', '\0']), ('\u{1ee4}', ['\u{1ee5}', '\0', '\0']), ('\u{1ee6}',
+        ['\u{1ee7}', '\0', '\0']), ('\u{1ee8}', ['\u{1ee9}', '\0', '\0']), ('\u{1eea}', ['\u{1eeb}',
+        '\0', '\0']), ('\u{1eec}', ['\u{1eed}', '\0', '\0']), ('\u{1eee}', ['\u{1eef}', '\0',
+        '\0']), ('\u{1ef0}', ['\u{1ef1}', '\0', '\0']), ('\u{1ef2}', ['\u{1ef3}', '\0', '\0']),
+        ('\u{1ef4}', ['\u{1ef5}', '\0', '\0']), ('\u{1ef6}', ['\u{1ef7}', '\0', '\0']), ('\u{1ef8}',
+        ['\u{1ef9}', '\0', '\0']), ('\u{1efa}', ['\u{1efb}', '\0', '\0']), ('\u{1efc}', ['\u{1efd}',
+        '\0', '\0']), ('\u{1efe}', ['\u{1eff}', '\0', '\0']), ('\u{1f08}', ['\u{1f00}', '\0',
+        '\0']), ('\u{1f09}', ['\u{1f01}', '\0', '\0']), ('\u{1f0a}', ['\u{1f02}', '\0', '\0']),
+        ('\u{1f0b}', ['\u{1f03}', '\0', '\0']), ('\u{1f0c}', ['\u{1f04}', '\0', '\0']), ('\u{1f0d}',
+        ['\u{1f05}', '\0', '\0']), ('\u{1f0e}', ['\u{1f06}', '\0', '\0']), ('\u{1f0f}', ['\u{1f07}',
+        '\0', '\0']), ('\u{1f18}', ['\u{1f10}', '\0', '\0']), ('\u{1f19}', ['\u{1f11}', '\0',
+        '\0']), ('\u{1f1a}', ['\u{1f12}', '\0', '\0']), ('\u{1f1b}', ['\u{1f13}', '\0', '\0']),
+        ('\u{1f1c}', ['\u{1f14}', '\0', '\0']), ('\u{1f1d}', ['\u{1f15}', '\0', '\0']), ('\u{1f28}',
+        ['\u{1f20}', '\0', '\0']), ('\u{1f29}', ['\u{1f21}', '\0', '\0']), ('\u{1f2a}', ['\u{1f22}',
+        '\0', '\0']), ('\u{1f2b}', ['\u{1f23}', '\0', '\0']), ('\u{1f2c}', ['\u{1f24}', '\0',
+        '\0']), ('\u{1f2d}', ['\u{1f25}', '\0', '\0']), ('\u{1f2e}', ['\u{1f26}', '\0', '\0']),
+        ('\u{1f2f}', ['\u{1f27}', '\0', '\0']), ('\u{1f38}', ['\u{1f30}', '\0', '\0']), ('\u{1f39}',
+        ['\u{1f31}', '\0', '\0']), ('\u{1f3a}', ['\u{1f32}', '\0', '\0']), ('\u{1f3b}', ['\u{1f33}',
+        '\0', '\0']), ('\u{1f3c}', ['\u{1f34}', '\0', '\0']), ('\u{1f3d}', ['\u{1f35}', '\0',
+        '\0']), ('\u{1f3e}', ['\u{1f36}', '\0', '\0']), ('\u{1f3f}', ['\u{1f37}', '\0', '\0']),
+        ('\u{1f48}', ['\u{1f40}', '\0', '\0']), ('\u{1f49}', ['\u{1f41}', '\0', '\0']), ('\u{1f4a}',
+        ['\u{1f42}', '\0', '\0']), ('\u{1f4b}', ['\u{1f43}', '\0', '\0']), ('\u{1f4c}', ['\u{1f44}',
+        '\0', '\0']), ('\u{1f4d}', ['\u{1f45}', '\0', '\0']), ('\u{1f59}', ['\u{1f51}', '\0',
+        '\0']), ('\u{1f5b}', ['\u{1f53}', '\0', '\0']), ('\u{1f5d}', ['\u{1f55}', '\0', '\0']),
+        ('\u{1f5f}', ['\u{1f57}', '\0', '\0']), ('\u{1f68}', ['\u{1f60}', '\0', '\0']), ('\u{1f69}',
+        ['\u{1f61}', '\0', '\0']), ('\u{1f6a}', ['\u{1f62}', '\0', '\0']), ('\u{1f6b}', ['\u{1f63}',
+        '\0', '\0']), ('\u{1f6c}', ['\u{1f64}', '\0', '\0']), ('\u{1f6d}', ['\u{1f65}', '\0',
+        '\0']), ('\u{1f6e}', ['\u{1f66}', '\0', '\0']), ('\u{1f6f}', ['\u{1f67}', '\0', '\0']),
+        ('\u{1f88}', ['\u{1f80}', '\0', '\0']), ('\u{1f89}', ['\u{1f81}', '\0', '\0']), ('\u{1f8a}',
+        ['\u{1f82}', '\0', '\0']), ('\u{1f8b}', ['\u{1f83}', '\0', '\0']), ('\u{1f8c}', ['\u{1f84}',
+        '\0', '\0']), ('\u{1f8d}', ['\u{1f85}', '\0', '\0']), ('\u{1f8e}', ['\u{1f86}', '\0',
+        '\0']), ('\u{1f8f}', ['\u{1f87}', '\0', '\0']), ('\u{1f98}', ['\u{1f90}', '\0', '\0']),
+        ('\u{1f99}', ['\u{1f91}', '\0', '\0']), ('\u{1f9a}', ['\u{1f92}', '\0', '\0']), ('\u{1f9b}',
+        ['\u{1f93}', '\0', '\0']), ('\u{1f9c}', ['\u{1f94}', '\0', '\0']), ('\u{1f9d}', ['\u{1f95}',
+        '\0', '\0']), ('\u{1f9e}', ['\u{1f96}', '\0', '\0']), ('\u{1f9f}', ['\u{1f97}', '\0',
+        '\0']), ('\u{1fa8}', ['\u{1fa0}', '\0', '\0']), ('\u{1fa9}', ['\u{1fa1}', '\0', '\0']),
+        ('\u{1faa}', ['\u{1fa2}', '\0', '\0']), ('\u{1fab}', ['\u{1fa3}', '\0', '\0']), ('\u{1fac}',
+        ['\u{1fa4}', '\0', '\0']), ('\u{1fad}', ['\u{1fa5}', '\0', '\0']), ('\u{1fae}', ['\u{1fa6}',
+        '\0', '\0']), ('\u{1faf}', ['\u{1fa7}', '\0', '\0']), ('\u{1fb8}', ['\u{1fb0}', '\0',
+        '\0']), ('\u{1fb9}', ['\u{1fb1}', '\0', '\0']), ('\u{1fba}', ['\u{1f70}', '\0', '\0']),
+        ('\u{1fbb}', ['\u{1f71}', '\0', '\0']), ('\u{1fbc}', ['\u{1fb3}', '\0', '\0']), ('\u{1fc8}',
+        ['\u{1f72}', '\0', '\0']), ('\u{1fc9}', ['\u{1f73}', '\0', '\0']), ('\u{1fca}', ['\u{1f74}',
+        '\0', '\0']), ('\u{1fcb}', ['\u{1f75}', '\0', '\0']), ('\u{1fcc}', ['\u{1fc3}', '\0',
+        '\0']), ('\u{1fd8}', ['\u{1fd0}', '\0', '\0']), ('\u{1fd9}', ['\u{1fd1}', '\0', '\0']),
+        ('\u{1fda}', ['\u{1f76}', '\0', '\0']), ('\u{1fdb}', ['\u{1f77}', '\0', '\0']), ('\u{1fe8}',
+        ['\u{1fe0}', '\0', '\0']), ('\u{1fe9}', ['\u{1fe1}', '\0', '\0']), ('\u{1fea}', ['\u{1f7a}',
+        '\0', '\0']), ('\u{1feb}', ['\u{1f7b}', '\0', '\0']), ('\u{1fec}', ['\u{1fe5}', '\0',
+        '\0']), ('\u{1ff8}', ['\u{1f78}', '\0', '\0']), ('\u{1ff9}', ['\u{1f79}', '\0', '\0']),
+        ('\u{1ffa}', ['\u{1f7c}', '\0', '\0']), ('\u{1ffb}', ['\u{1f7d}', '\0', '\0']), ('\u{1ffc}',
+        ['\u{1ff3}', '\0', '\0']), ('\u{2126}', ['\u{3c9}', '\0', '\0']), ('\u{212a}', ['\u{6b}',
+        '\0', '\0']), ('\u{212b}', ['\u{e5}', '\0', '\0']), ('\u{2132}', ['\u{214e}', '\0', '\0']),
+        ('\u{2160}', ['\u{2170}', '\0', '\0']), ('\u{2161}', ['\u{2171}', '\0', '\0']), ('\u{2162}',
+        ['\u{2172}', '\0', '\0']), ('\u{2163}', ['\u{2173}', '\0', '\0']), ('\u{2164}', ['\u{2174}',
+        '\0', '\0']), ('\u{2165}', ['\u{2175}', '\0', '\0']), ('\u{2166}', ['\u{2176}', '\0',
+        '\0']), ('\u{2167}', ['\u{2177}', '\0', '\0']), ('\u{2168}', ['\u{2178}', '\0', '\0']),
+        ('\u{2169}', ['\u{2179}', '\0', '\0']), ('\u{216a}', ['\u{217a}', '\0', '\0']), ('\u{216b}',
+        ['\u{217b}', '\0', '\0']), ('\u{216c}', ['\u{217c}', '\0', '\0']), ('\u{216d}', ['\u{217d}',
+        '\0', '\0']), ('\u{216e}', ['\u{217e}', '\0', '\0']), ('\u{216f}', ['\u{217f}', '\0',
+        '\0']), ('\u{2183}', ['\u{2184}', '\0', '\0']), ('\u{24b6}', ['\u{24d0}', '\0', '\0']),
+        ('\u{24b7}', ['\u{24d1}', '\0', '\0']), ('\u{24b8}', ['\u{24d2}', '\0', '\0']), ('\u{24b9}',
+        ['\u{24d3}', '\0', '\0']), ('\u{24ba}', ['\u{24d4}', '\0', '\0']), ('\u{24bb}', ['\u{24d5}',
+        '\0', '\0']), ('\u{24bc}', ['\u{24d6}', '\0', '\0']), ('\u{24bd}', ['\u{24d7}', '\0',
+        '\0']), ('\u{24be}', ['\u{24d8}', '\0', '\0']), ('\u{24bf}', ['\u{24d9}', '\0', '\0']),
+        ('\u{24c0}', ['\u{24da}', '\0', '\0']), ('\u{24c1}', ['\u{24db}', '\0', '\0']), ('\u{24c2}',
+        ['\u{24dc}', '\0', '\0']), ('\u{24c3}', ['\u{24dd}', '\0', '\0']), ('\u{24c4}', ['\u{24de}',
+        '\0', '\0']), ('\u{24c5}', ['\u{24df}', '\0', '\0']), ('\u{24c6}', ['\u{24e0}', '\0',
+        '\0']), ('\u{24c7}', ['\u{24e1}', '\0', '\0']), ('\u{24c8}', ['\u{24e2}', '\0', '\0']),
+        ('\u{24c9}', ['\u{24e3}', '\0', '\0']), ('\u{24ca}', ['\u{24e4}', '\0', '\0']), ('\u{24cb}',
+        ['\u{24e5}', '\0', '\0']), ('\u{24cc}', ['\u{24e6}', '\0', '\0']), ('\u{24cd}', ['\u{24e7}',
+        '\0', '\0']), ('\u{24ce}', ['\u{24e8}', '\0', '\0']), ('\u{24cf}', ['\u{24e9}', '\0',
+        '\0']), ('\u{2c00}', ['\u{2c30}', '\0', '\0']), ('\u{2c01}', ['\u{2c31}', '\0', '\0']),
+        ('\u{2c02}', ['\u{2c32}', '\0', '\0']), ('\u{2c03}', ['\u{2c33}', '\0', '\0']), ('\u{2c04}',
+        ['\u{2c34}', '\0', '\0']), ('\u{2c05}', ['\u{2c35}', '\0', '\0']), ('\u{2c06}', ['\u{2c36}',
+        '\0', '\0']), ('\u{2c07}', ['\u{2c37}', '\0', '\0']), ('\u{2c08}', ['\u{2c38}', '\0',
+        '\0']), ('\u{2c09}', ['\u{2c39}', '\0', '\0']), ('\u{2c0a}', ['\u{2c3a}', '\0', '\0']),
+        ('\u{2c0b}', ['\u{2c3b}', '\0', '\0']), ('\u{2c0c}', ['\u{2c3c}', '\0', '\0']), ('\u{2c0d}',
+        ['\u{2c3d}', '\0', '\0']), ('\u{2c0e}', ['\u{2c3e}', '\0', '\0']), ('\u{2c0f}', ['\u{2c3f}',
+        '\0', '\0']), ('\u{2c10}', ['\u{2c40}', '\0', '\0']), ('\u{2c11}', ['\u{2c41}', '\0',
+        '\0']), ('\u{2c12}', ['\u{2c42}', '\0', '\0']), ('\u{2c13}', ['\u{2c43}', '\0', '\0']),
+        ('\u{2c14}', ['\u{2c44}', '\0', '\0']), ('\u{2c15}', ['\u{2c45}', '\0', '\0']), ('\u{2c16}',
+        ['\u{2c46}', '\0', '\0']), ('\u{2c17}', ['\u{2c47}', '\0', '\0']), ('\u{2c18}', ['\u{2c48}',
+        '\0', '\0']), ('\u{2c19}', ['\u{2c49}', '\0', '\0']), ('\u{2c1a}', ['\u{2c4a}', '\0',
+        '\0']), ('\u{2c1b}', ['\u{2c4b}', '\0', '\0']), ('\u{2c1c}', ['\u{2c4c}', '\0', '\0']),
+        ('\u{2c1d}', ['\u{2c4d}', '\0', '\0']), ('\u{2c1e}', ['\u{2c4e}', '\0', '\0']), ('\u{2c1f}',
+        ['\u{2c4f}', '\0', '\0']), ('\u{2c20}', ['\u{2c50}', '\0', '\0']), ('\u{2c21}', ['\u{2c51}',
+        '\0', '\0']), ('\u{2c22}', ['\u{2c52}', '\0', '\0']), ('\u{2c23}', ['\u{2c53}', '\0',
+        '\0']), ('\u{2c24}', ['\u{2c54}', '\0', '\0']), ('\u{2c25}', ['\u{2c55}', '\0', '\0']),
+        ('\u{2c26}', ['\u{2c56}', '\0', '\0']), ('\u{2c27}', ['\u{2c57}', '\0', '\0']), ('\u{2c28}',
+        ['\u{2c58}', '\0', '\0']), ('\u{2c29}', ['\u{2c59}', '\0', '\0']), ('\u{2c2a}', ['\u{2c5a}',
+        '\0', '\0']), ('\u{2c2b}', ['\u{2c5b}', '\0', '\0']), ('\u{2c2c}', ['\u{2c5c}', '\0',
+        '\0']), ('\u{2c2d}', ['\u{2c5d}', '\0', '\0']), ('\u{2c2e}', ['\u{2c5e}', '\0', '\0']),
+        ('\u{2c60}', ['\u{2c61}', '\0', '\0']), ('\u{2c62}', ['\u{26b}', '\0', '\0']), ('\u{2c63}',
+        ['\u{1d7d}', '\0', '\0']), ('\u{2c64}', ['\u{27d}', '\0', '\0']), ('\u{2c67}', ['\u{2c68}',
+        '\0', '\0']), ('\u{2c69}', ['\u{2c6a}', '\0', '\0']), ('\u{2c6b}', ['\u{2c6c}', '\0',
+        '\0']), ('\u{2c6d}', ['\u{251}', '\0', '\0']), ('\u{2c6e}', ['\u{271}', '\0', '\0']),
+        ('\u{2c6f}', ['\u{250}', '\0', '\0']), ('\u{2c70}', ['\u{252}', '\0', '\0']), ('\u{2c72}',
+        ['\u{2c73}', '\0', '\0']), ('\u{2c75}', ['\u{2c76}', '\0', '\0']), ('\u{2c7e}', ['\u{23f}',
+        '\0', '\0']), ('\u{2c7f}', ['\u{240}', '\0', '\0']), ('\u{2c80}', ['\u{2c81}', '\0', '\0']),
+        ('\u{2c82}', ['\u{2c83}', '\0', '\0']), ('\u{2c84}', ['\u{2c85}', '\0', '\0']), ('\u{2c86}',
+        ['\u{2c87}', '\0', '\0']), ('\u{2c88}', ['\u{2c89}', '\0', '\0']), ('\u{2c8a}', ['\u{2c8b}',
+        '\0', '\0']), ('\u{2c8c}', ['\u{2c8d}', '\0', '\0']), ('\u{2c8e}', ['\u{2c8f}', '\0',
+        '\0']), ('\u{2c90}', ['\u{2c91}', '\0', '\0']), ('\u{2c92}', ['\u{2c93}', '\0', '\0']),
+        ('\u{2c94}', ['\u{2c95}', '\0', '\0']), ('\u{2c96}', ['\u{2c97}', '\0', '\0']), ('\u{2c98}',
+        ['\u{2c99}', '\0', '\0']), ('\u{2c9a}', ['\u{2c9b}', '\0', '\0']), ('\u{2c9c}', ['\u{2c9d}',
+        '\0', '\0']), ('\u{2c9e}', ['\u{2c9f}', '\0', '\0']), ('\u{2ca0}', ['\u{2ca1}', '\0',
+        '\0']), ('\u{2ca2}', ['\u{2ca3}', '\0', '\0']), ('\u{2ca4}', ['\u{2ca5}', '\0', '\0']),
+        ('\u{2ca6}', ['\u{2ca7}', '\0', '\0']), ('\u{2ca8}', ['\u{2ca9}', '\0', '\0']), ('\u{2caa}',
+        ['\u{2cab}', '\0', '\0']), ('\u{2cac}', ['\u{2cad}', '\0', '\0']), ('\u{2cae}', ['\u{2caf}',
+        '\0', '\0']), ('\u{2cb0}', ['\u{2cb1}', '\0', '\0']), ('\u{2cb2}', ['\u{2cb3}', '\0',
+        '\0']), ('\u{2cb4}', ['\u{2cb5}', '\0', '\0']), ('\u{2cb6}', ['\u{2cb7}', '\0', '\0']),
+        ('\u{2cb8}', ['\u{2cb9}', '\0', '\0']), ('\u{2cba}', ['\u{2cbb}', '\0', '\0']), ('\u{2cbc}',
+        ['\u{2cbd}', '\0', '\0']), ('\u{2cbe}', ['\u{2cbf}', '\0', '\0']), ('\u{2cc0}', ['\u{2cc1}',
+        '\0', '\0']), ('\u{2cc2}', ['\u{2cc3}', '\0', '\0']), ('\u{2cc4}', ['\u{2cc5}', '\0',
+        '\0']), ('\u{2cc6}', ['\u{2cc7}', '\0', '\0']), ('\u{2cc8}', ['\u{2cc9}', '\0', '\0']),
+        ('\u{2cca}', ['\u{2ccb}', '\0', '\0']), ('\u{2ccc}', ['\u{2ccd}', '\0', '\0']), ('\u{2cce}',
+        ['\u{2ccf}', '\0', '\0']), ('\u{2cd0}', ['\u{2cd1}', '\0', '\0']), ('\u{2cd2}', ['\u{2cd3}',
+        '\0', '\0']), ('\u{2cd4}', ['\u{2cd5}', '\0', '\0']), ('\u{2cd6}', ['\u{2cd7}', '\0',
+        '\0']), ('\u{2cd8}', ['\u{2cd9}', '\0', '\0']), ('\u{2cda}', ['\u{2cdb}', '\0', '\0']),
+        ('\u{2cdc}', ['\u{2cdd}', '\0', '\0']), ('\u{2cde}', ['\u{2cdf}', '\0', '\0']), ('\u{2ce0}',
+        ['\u{2ce1}', '\0', '\0']), ('\u{2ce2}', ['\u{2ce3}', '\0', '\0']), ('\u{2ceb}', ['\u{2cec}',
+        '\0', '\0']), ('\u{2ced}', ['\u{2cee}', '\0', '\0']), ('\u{2cf2}', ['\u{2cf3}', '\0',
+        '\0']), ('\u{a640}', ['\u{a641}', '\0', '\0']), ('\u{a642}', ['\u{a643}', '\0', '\0']),
+        ('\u{a644}', ['\u{a645}', '\0', '\0']), ('\u{a646}', ['\u{a647}', '\0', '\0']), ('\u{a648}',
+        ['\u{a649}', '\0', '\0']), ('\u{a64a}', ['\u{a64b}', '\0', '\0']), ('\u{a64c}', ['\u{a64d}',
+        '\0', '\0']), ('\u{a64e}', ['\u{a64f}', '\0', '\0']), ('\u{a650}', ['\u{a651}', '\0',
+        '\0']), ('\u{a652}', ['\u{a653}', '\0', '\0']), ('\u{a654}', ['\u{a655}', '\0', '\0']),
+        ('\u{a656}', ['\u{a657}', '\0', '\0']), ('\u{a658}', ['\u{a659}', '\0', '\0']), ('\u{a65a}',
+        ['\u{a65b}', '\0', '\0']), ('\u{a65c}', ['\u{a65d}', '\0', '\0']), ('\u{a65e}', ['\u{a65f}',
+        '\0', '\0']), ('\u{a660}', ['\u{a661}', '\0', '\0']), ('\u{a662}', ['\u{a663}', '\0',
+        '\0']), ('\u{a664}', ['\u{a665}', '\0', '\0']), ('\u{a666}', ['\u{a667}', '\0', '\0']),
+        ('\u{a668}', ['\u{a669}', '\0', '\0']), ('\u{a66a}', ['\u{a66b}', '\0', '\0']), ('\u{a66c}',
+        ['\u{a66d}', '\0', '\0']), ('\u{a680}', ['\u{a681}', '\0', '\0']), ('\u{a682}', ['\u{a683}',
+        '\0', '\0']), ('\u{a684}', ['\u{a685}', '\0', '\0']), ('\u{a686}', ['\u{a687}', '\0',
+        '\0']), ('\u{a688}', ['\u{a689}', '\0', '\0']), ('\u{a68a}', ['\u{a68b}', '\0', '\0']),
+        ('\u{a68c}', ['\u{a68d}', '\0', '\0']), ('\u{a68e}', ['\u{a68f}', '\0', '\0']), ('\u{a690}',
+        ['\u{a691}', '\0', '\0']), ('\u{a692}', ['\u{a693}', '\0', '\0']), ('\u{a694}', ['\u{a695}',
+        '\0', '\0']), ('\u{a696}', ['\u{a697}', '\0', '\0']), ('\u{a698}', ['\u{a699}', '\0',
+        '\0']), ('\u{a69a}', ['\u{a69b}', '\0', '\0']), ('\u{a722}', ['\u{a723}', '\0', '\0']),
+        ('\u{a724}', ['\u{a725}', '\0', '\0']), ('\u{a726}', ['\u{a727}', '\0', '\0']), ('\u{a728}',
+        ['\u{a729}', '\0', '\0']), ('\u{a72a}', ['\u{a72b}', '\0', '\0']), ('\u{a72c}', ['\u{a72d}',
+        '\0', '\0']), ('\u{a72e}', ['\u{a72f}', '\0', '\0']), ('\u{a732}', ['\u{a733}', '\0',
+        '\0']), ('\u{a734}', ['\u{a735}', '\0', '\0']), ('\u{a736}', ['\u{a737}', '\0', '\0']),
+        ('\u{a738}', ['\u{a739}', '\0', '\0']), ('\u{a73a}', ['\u{a73b}', '\0', '\0']), ('\u{a73c}',
+        ['\u{a73d}', '\0', '\0']), ('\u{a73e}', ['\u{a73f}', '\0', '\0']), ('\u{a740}', ['\u{a741}',
+        '\0', '\0']), ('\u{a742}', ['\u{a743}', '\0', '\0']), ('\u{a744}', ['\u{a745}', '\0',
+        '\0']), ('\u{a746}', ['\u{a747}', '\0', '\0']), ('\u{a748}', ['\u{a749}', '\0', '\0']),
+        ('\u{a74a}', ['\u{a74b}', '\0', '\0']), ('\u{a74c}', ['\u{a74d}', '\0', '\0']), ('\u{a74e}',
+        ['\u{a74f}', '\0', '\0']), ('\u{a750}', ['\u{a751}', '\0', '\0']), ('\u{a752}', ['\u{a753}',
+        '\0', '\0']), ('\u{a754}', ['\u{a755}', '\0', '\0']), ('\u{a756}', ['\u{a757}', '\0',
+        '\0']), ('\u{a758}', ['\u{a759}', '\0', '\0']), ('\u{a75a}', ['\u{a75b}', '\0', '\0']),
+        ('\u{a75c}', ['\u{a75d}', '\0', '\0']), ('\u{a75e}', ['\u{a75f}', '\0', '\0']), ('\u{a760}',
+        ['\u{a761}', '\0', '\0']), ('\u{a762}', ['\u{a763}', '\0', '\0']), ('\u{a764}', ['\u{a765}',
+        '\0', '\0']), ('\u{a766}', ['\u{a767}', '\0', '\0']), ('\u{a768}', ['\u{a769}', '\0',
+        '\0']), ('\u{a76a}', ['\u{a76b}', '\0', '\0']), ('\u{a76c}', ['\u{a76d}', '\0', '\0']),
+        ('\u{a76e}', ['\u{a76f}', '\0', '\0']), ('\u{a779}', ['\u{a77a}', '\0', '\0']), ('\u{a77b}',
+        ['\u{a77c}', '\0', '\0']), ('\u{a77d}', ['\u{1d79}', '\0', '\0']), ('\u{a77e}', ['\u{a77f}',
+        '\0', '\0']), ('\u{a780}', ['\u{a781}', '\0', '\0']), ('\u{a782}', ['\u{a783}', '\0',
+        '\0']), ('\u{a784}', ['\u{a785}', '\0', '\0']), ('\u{a786}', ['\u{a787}', '\0', '\0']),
+        ('\u{a78b}', ['\u{a78c}', '\0', '\0']), ('\u{a78d}', ['\u{265}', '\0', '\0']), ('\u{a790}',
+        ['\u{a791}', '\0', '\0']), ('\u{a792}', ['\u{a793}', '\0', '\0']), ('\u{a796}', ['\u{a797}',
+        '\0', '\0']), ('\u{a798}', ['\u{a799}', '\0', '\0']), ('\u{a79a}', ['\u{a79b}', '\0',
+        '\0']), ('\u{a79c}', ['\u{a79d}', '\0', '\0']), ('\u{a79e}', ['\u{a79f}', '\0', '\0']),
+        ('\u{a7a0}', ['\u{a7a1}', '\0', '\0']), ('\u{a7a2}', ['\u{a7a3}', '\0', '\0']), ('\u{a7a4}',
+        ['\u{a7a5}', '\0', '\0']), ('\u{a7a6}', ['\u{a7a7}', '\0', '\0']), ('\u{a7a8}', ['\u{a7a9}',
+        '\0', '\0']), ('\u{a7aa}', ['\u{266}', '\0', '\0']), ('\u{a7ab}', ['\u{25c}', '\0', '\0']),
+        ('\u{a7ac}', ['\u{261}', '\0', '\0']), ('\u{a7ad}', ['\u{26c}', '\0', '\0']), ('\u{a7b0}',
+        ['\u{29e}', '\0', '\0']), ('\u{a7b1}', ['\u{287}', '\0', '\0']), ('\u{a7b2}', ['\u{29d}',
+        '\0', '\0']), ('\u{a7b3}', ['\u{ab53}', '\0', '\0']), ('\u{a7b4}', ['\u{a7b5}', '\0',
+        '\0']), ('\u{a7b6}', ['\u{a7b7}', '\0', '\0']), ('\u{ff21}', ['\u{ff41}', '\0', '\0']),
+        ('\u{ff22}', ['\u{ff42}', '\0', '\0']), ('\u{ff23}', ['\u{ff43}', '\0', '\0']), ('\u{ff24}',
+        ['\u{ff44}', '\0', '\0']), ('\u{ff25}', ['\u{ff45}', '\0', '\0']), ('\u{ff26}', ['\u{ff46}',
+        '\0', '\0']), ('\u{ff27}', ['\u{ff47}', '\0', '\0']), ('\u{ff28}', ['\u{ff48}', '\0',
+        '\0']), ('\u{ff29}', ['\u{ff49}', '\0', '\0']), ('\u{ff2a}', ['\u{ff4a}', '\0', '\0']),
+        ('\u{ff2b}', ['\u{ff4b}', '\0', '\0']), ('\u{ff2c}', ['\u{ff4c}', '\0', '\0']), ('\u{ff2d}',
+        ['\u{ff4d}', '\0', '\0']), ('\u{ff2e}', ['\u{ff4e}', '\0', '\0']), ('\u{ff2f}', ['\u{ff4f}',
+        '\0', '\0']), ('\u{ff30}', ['\u{ff50}', '\0', '\0']), ('\u{ff31}', ['\u{ff51}', '\0',
+        '\0']), ('\u{ff32}', ['\u{ff52}', '\0', '\0']), ('\u{ff33}', ['\u{ff53}', '\0', '\0']),
+        ('\u{ff34}', ['\u{ff54}', '\0', '\0']), ('\u{ff35}', ['\u{ff55}', '\0', '\0']), ('\u{ff36}',
+        ['\u{ff56}', '\0', '\0']), ('\u{ff37}', ['\u{ff57}', '\0', '\0']), ('\u{ff38}', ['\u{ff58}',
+        '\0', '\0']), ('\u{ff39}', ['\u{ff59}', '\0', '\0']), ('\u{ff3a}', ['\u{ff5a}', '\0',
+        '\0']), ('\u{10400}', ['\u{10428}', '\0', '\0']), ('\u{10401}', ['\u{10429}', '\0', '\0']),
         ('\u{10402}', ['\u{1042a}', '\0', '\0']), ('\u{10403}', ['\u{1042b}', '\0', '\0']),
         ('\u{10404}', ['\u{1042c}', '\0', '\0']), ('\u{10405}', ['\u{1042d}', '\0', '\0']),
         ('\u{10406}', ['\u{1042e}', '\0', '\0']), ('\u{10407}', ['\u{1042f}', '\0', '\0']),
@@ -4367,22 +1725,48 @@ pub mod conversions {
         ('\u{10422}', ['\u{1044a}', '\0', '\0']), ('\u{10423}', ['\u{1044b}', '\0', '\0']),
         ('\u{10424}', ['\u{1044c}', '\0', '\0']), ('\u{10425}', ['\u{1044d}', '\0', '\0']),
         ('\u{10426}', ['\u{1044e}', '\0', '\0']), ('\u{10427}', ['\u{1044f}', '\0', '\0']),
-        ('\u{118a0}', ['\u{118c0}', '\0', '\0']), ('\u{118a1}', ['\u{118c1}', '\0', '\0']),
-        ('\u{118a2}', ['\u{118c2}', '\0', '\0']), ('\u{118a3}', ['\u{118c3}', '\0', '\0']),
-        ('\u{118a4}', ['\u{118c4}', '\0', '\0']), ('\u{118a5}', ['\u{118c5}', '\0', '\0']),
-        ('\u{118a6}', ['\u{118c6}', '\0', '\0']), ('\u{118a7}', ['\u{118c7}', '\0', '\0']),
-        ('\u{118a8}', ['\u{118c8}', '\0', '\0']), ('\u{118a9}', ['\u{118c9}', '\0', '\0']),
-        ('\u{118aa}', ['\u{118ca}', '\0', '\0']), ('\u{118ab}', ['\u{118cb}', '\0', '\0']),
-        ('\u{118ac}', ['\u{118cc}', '\0', '\0']), ('\u{118ad}', ['\u{118cd}', '\0', '\0']),
-        ('\u{118ae}', ['\u{118ce}', '\0', '\0']), ('\u{118af}', ['\u{118cf}', '\0', '\0']),
-        ('\u{118b0}', ['\u{118d0}', '\0', '\0']), ('\u{118b1}', ['\u{118d1}', '\0', '\0']),
-        ('\u{118b2}', ['\u{118d2}', '\0', '\0']), ('\u{118b3}', ['\u{118d3}', '\0', '\0']),
-        ('\u{118b4}', ['\u{118d4}', '\0', '\0']), ('\u{118b5}', ['\u{118d5}', '\0', '\0']),
-        ('\u{118b6}', ['\u{118d6}', '\0', '\0']), ('\u{118b7}', ['\u{118d7}', '\0', '\0']),
-        ('\u{118b8}', ['\u{118d8}', '\0', '\0']), ('\u{118b9}', ['\u{118d9}', '\0', '\0']),
-        ('\u{118ba}', ['\u{118da}', '\0', '\0']), ('\u{118bb}', ['\u{118db}', '\0', '\0']),
-        ('\u{118bc}', ['\u{118dc}', '\0', '\0']), ('\u{118bd}', ['\u{118dd}', '\0', '\0']),
-        ('\u{118be}', ['\u{118de}', '\0', '\0']), ('\u{118bf}', ['\u{118df}', '\0', '\0'])
+        ('\u{10c80}', ['\u{10cc0}', '\0', '\0']), ('\u{10c81}', ['\u{10cc1}', '\0', '\0']),
+        ('\u{10c82}', ['\u{10cc2}', '\0', '\0']), ('\u{10c83}', ['\u{10cc3}', '\0', '\0']),
+        ('\u{10c84}', ['\u{10cc4}', '\0', '\0']), ('\u{10c85}', ['\u{10cc5}', '\0', '\0']),
+        ('\u{10c86}', ['\u{10cc6}', '\0', '\0']), ('\u{10c87}', ['\u{10cc7}', '\0', '\0']),
+        ('\u{10c88}', ['\u{10cc8}', '\0', '\0']), ('\u{10c89}', ['\u{10cc9}', '\0', '\0']),
+        ('\u{10c8a}', ['\u{10cca}', '\0', '\0']), ('\u{10c8b}', ['\u{10ccb}', '\0', '\0']),
+        ('\u{10c8c}', ['\u{10ccc}', '\0', '\0']), ('\u{10c8d}', ['\u{10ccd}', '\0', '\0']),
+        ('\u{10c8e}', ['\u{10cce}', '\0', '\0']), ('\u{10c8f}', ['\u{10ccf}', '\0', '\0']),
+        ('\u{10c90}', ['\u{10cd0}', '\0', '\0']), ('\u{10c91}', ['\u{10cd1}', '\0', '\0']),
+        ('\u{10c92}', ['\u{10cd2}', '\0', '\0']), ('\u{10c93}', ['\u{10cd3}', '\0', '\0']),
+        ('\u{10c94}', ['\u{10cd4}', '\0', '\0']), ('\u{10c95}', ['\u{10cd5}', '\0', '\0']),
+        ('\u{10c96}', ['\u{10cd6}', '\0', '\0']), ('\u{10c97}', ['\u{10cd7}', '\0', '\0']),
+        ('\u{10c98}', ['\u{10cd8}', '\0', '\0']), ('\u{10c99}', ['\u{10cd9}', '\0', '\0']),
+        ('\u{10c9a}', ['\u{10cda}', '\0', '\0']), ('\u{10c9b}', ['\u{10cdb}', '\0', '\0']),
+        ('\u{10c9c}', ['\u{10cdc}', '\0', '\0']), ('\u{10c9d}', ['\u{10cdd}', '\0', '\0']),
+        ('\u{10c9e}', ['\u{10cde}', '\0', '\0']), ('\u{10c9f}', ['\u{10cdf}', '\0', '\0']),
+        ('\u{10ca0}', ['\u{10ce0}', '\0', '\0']), ('\u{10ca1}', ['\u{10ce1}', '\0', '\0']),
+        ('\u{10ca2}', ['\u{10ce2}', '\0', '\0']), ('\u{10ca3}', ['\u{10ce3}', '\0', '\0']),
+        ('\u{10ca4}', ['\u{10ce4}', '\0', '\0']), ('\u{10ca5}', ['\u{10ce5}', '\0', '\0']),
+        ('\u{10ca6}', ['\u{10ce6}', '\0', '\0']), ('\u{10ca7}', ['\u{10ce7}', '\0', '\0']),
+        ('\u{10ca8}', ['\u{10ce8}', '\0', '\0']), ('\u{10ca9}', ['\u{10ce9}', '\0', '\0']),
+        ('\u{10caa}', ['\u{10cea}', '\0', '\0']), ('\u{10cab}', ['\u{10ceb}', '\0', '\0']),
+        ('\u{10cac}', ['\u{10cec}', '\0', '\0']), ('\u{10cad}', ['\u{10ced}', '\0', '\0']),
+        ('\u{10cae}', ['\u{10cee}', '\0', '\0']), ('\u{10caf}', ['\u{10cef}', '\0', '\0']),
+        ('\u{10cb0}', ['\u{10cf0}', '\0', '\0']), ('\u{10cb1}', ['\u{10cf1}', '\0', '\0']),
+        ('\u{10cb2}', ['\u{10cf2}', '\0', '\0']), ('\u{118a0}', ['\u{118c0}', '\0', '\0']),
+        ('\u{118a1}', ['\u{118c1}', '\0', '\0']), ('\u{118a2}', ['\u{118c2}', '\0', '\0']),
+        ('\u{118a3}', ['\u{118c3}', '\0', '\0']), ('\u{118a4}', ['\u{118c4}', '\0', '\0']),
+        ('\u{118a5}', ['\u{118c5}', '\0', '\0']), ('\u{118a6}', ['\u{118c6}', '\0', '\0']),
+        ('\u{118a7}', ['\u{118c7}', '\0', '\0']), ('\u{118a8}', ['\u{118c8}', '\0', '\0']),
+        ('\u{118a9}', ['\u{118c9}', '\0', '\0']), ('\u{118aa}', ['\u{118ca}', '\0', '\0']),
+        ('\u{118ab}', ['\u{118cb}', '\0', '\0']), ('\u{118ac}', ['\u{118cc}', '\0', '\0']),
+        ('\u{118ad}', ['\u{118cd}', '\0', '\0']), ('\u{118ae}', ['\u{118ce}', '\0', '\0']),
+        ('\u{118af}', ['\u{118cf}', '\0', '\0']), ('\u{118b0}', ['\u{118d0}', '\0', '\0']),
+        ('\u{118b1}', ['\u{118d1}', '\0', '\0']), ('\u{118b2}', ['\u{118d2}', '\0', '\0']),
+        ('\u{118b3}', ['\u{118d3}', '\0', '\0']), ('\u{118b4}', ['\u{118d4}', '\0', '\0']),
+        ('\u{118b5}', ['\u{118d5}', '\0', '\0']), ('\u{118b6}', ['\u{118d6}', '\0', '\0']),
+        ('\u{118b7}', ['\u{118d7}', '\0', '\0']), ('\u{118b8}', ['\u{118d8}', '\0', '\0']),
+        ('\u{118b9}', ['\u{118d9}', '\0', '\0']), ('\u{118ba}', ['\u{118da}', '\0', '\0']),
+        ('\u{118bb}', ['\u{118db}', '\0', '\0']), ('\u{118bc}', ['\u{118dc}', '\0', '\0']),
+        ('\u{118bd}', ['\u{118dd}', '\0', '\0']), ('\u{118be}', ['\u{118de}', '\0', '\0']),
+        ('\u{118bf}', ['\u{118df}', '\0', '\0'])
     ];
 
     const to_uppercase_table: &'static [(char, [char; 3])] = &[
@@ -4488,238 +1872,241 @@ pub mod conversions {
         ('\u{280}', ['\u{1a6}', '\0', '\0']), ('\u{283}', ['\u{1a9}', '\0', '\0']), ('\u{287}',
         ['\u{a7b1}', '\0', '\0']), ('\u{288}', ['\u{1ae}', '\0', '\0']), ('\u{289}', ['\u{244}',
         '\0', '\0']), ('\u{28a}', ['\u{1b1}', '\0', '\0']), ('\u{28b}', ['\u{1b2}', '\0', '\0']),
-        ('\u{28c}', ['\u{245}', '\0', '\0']), ('\u{292}', ['\u{1b7}', '\0', '\0']), ('\u{29e}',
-        ['\u{a7b0}', '\0', '\0']), ('\u{345}', ['\u{399}', '\0', '\0']), ('\u{371}', ['\u{370}',
-        '\0', '\0']), ('\u{373}', ['\u{372}', '\0', '\0']), ('\u{377}', ['\u{376}', '\0', '\0']),
-        ('\u{37b}', ['\u{3fd}', '\0', '\0']), ('\u{37c}', ['\u{3fe}', '\0', '\0']), ('\u{37d}',
-        ['\u{3ff}', '\0', '\0']), ('\u{390}', ['\u{399}', '\u{308}', '\u{301}']), ('\u{3ac}',
-        ['\u{386}', '\0', '\0']), ('\u{3ad}', ['\u{388}', '\0', '\0']), ('\u{3ae}', ['\u{389}',
-        '\0', '\0']), ('\u{3af}', ['\u{38a}', '\0', '\0']), ('\u{3b0}', ['\u{3a5}', '\u{308}',
-        '\u{301}']), ('\u{3b1}', ['\u{391}', '\0', '\0']), ('\u{3b2}', ['\u{392}', '\0', '\0']),
-        ('\u{3b3}', ['\u{393}', '\0', '\0']), ('\u{3b4}', ['\u{394}', '\0', '\0']), ('\u{3b5}',
-        ['\u{395}', '\0', '\0']), ('\u{3b6}', ['\u{396}', '\0', '\0']), ('\u{3b7}', ['\u{397}',
-        '\0', '\0']), ('\u{3b8}', ['\u{398}', '\0', '\0']), ('\u{3b9}', ['\u{399}', '\0', '\0']),
-        ('\u{3ba}', ['\u{39a}', '\0', '\0']), ('\u{3bb}', ['\u{39b}', '\0', '\0']), ('\u{3bc}',
-        ['\u{39c}', '\0', '\0']), ('\u{3bd}', ['\u{39d}', '\0', '\0']), ('\u{3be}', ['\u{39e}',
-        '\0', '\0']), ('\u{3bf}', ['\u{39f}', '\0', '\0']), ('\u{3c0}', ['\u{3a0}', '\0', '\0']),
-        ('\u{3c1}', ['\u{3a1}', '\0', '\0']), ('\u{3c2}', ['\u{3a3}', '\0', '\0']), ('\u{3c3}',
-        ['\u{3a3}', '\0', '\0']), ('\u{3c4}', ['\u{3a4}', '\0', '\0']), ('\u{3c5}', ['\u{3a5}',
-        '\0', '\0']), ('\u{3c6}', ['\u{3a6}', '\0', '\0']), ('\u{3c7}', ['\u{3a7}', '\0', '\0']),
-        ('\u{3c8}', ['\u{3a8}', '\0', '\0']), ('\u{3c9}', ['\u{3a9}', '\0', '\0']), ('\u{3ca}',
-        ['\u{3aa}', '\0', '\0']), ('\u{3cb}', ['\u{3ab}', '\0', '\0']), ('\u{3cc}', ['\u{38c}',
-        '\0', '\0']), ('\u{3cd}', ['\u{38e}', '\0', '\0']), ('\u{3ce}', ['\u{38f}', '\0', '\0']),
-        ('\u{3d0}', ['\u{392}', '\0', '\0']), ('\u{3d1}', ['\u{398}', '\0', '\0']), ('\u{3d5}',
-        ['\u{3a6}', '\0', '\0']), ('\u{3d6}', ['\u{3a0}', '\0', '\0']), ('\u{3d7}', ['\u{3cf}',
-        '\0', '\0']), ('\u{3d9}', ['\u{3d8}', '\0', '\0']), ('\u{3db}', ['\u{3da}', '\0', '\0']),
-        ('\u{3dd}', ['\u{3dc}', '\0', '\0']), ('\u{3df}', ['\u{3de}', '\0', '\0']), ('\u{3e1}',
-        ['\u{3e0}', '\0', '\0']), ('\u{3e3}', ['\u{3e2}', '\0', '\0']), ('\u{3e5}', ['\u{3e4}',
-        '\0', '\0']), ('\u{3e7}', ['\u{3e6}', '\0', '\0']), ('\u{3e9}', ['\u{3e8}', '\0', '\0']),
-        ('\u{3eb}', ['\u{3ea}', '\0', '\0']), ('\u{3ed}', ['\u{3ec}', '\0', '\0']), ('\u{3ef}',
-        ['\u{3ee}', '\0', '\0']), ('\u{3f0}', ['\u{39a}', '\0', '\0']), ('\u{3f1}', ['\u{3a1}',
-        '\0', '\0']), ('\u{3f2}', ['\u{3f9}', '\0', '\0']), ('\u{3f3}', ['\u{37f}', '\0', '\0']),
-        ('\u{3f5}', ['\u{395}', '\0', '\0']), ('\u{3f8}', ['\u{3f7}', '\0', '\0']), ('\u{3fb}',
-        ['\u{3fa}', '\0', '\0']), ('\u{430}', ['\u{410}', '\0', '\0']), ('\u{431}', ['\u{411}',
-        '\0', '\0']), ('\u{432}', ['\u{412}', '\0', '\0']), ('\u{433}', ['\u{413}', '\0', '\0']),
-        ('\u{434}', ['\u{414}', '\0', '\0']), ('\u{435}', ['\u{415}', '\0', '\0']), ('\u{436}',
-        ['\u{416}', '\0', '\0']), ('\u{437}', ['\u{417}', '\0', '\0']), ('\u{438}', ['\u{418}',
-        '\0', '\0']), ('\u{439}', ['\u{419}', '\0', '\0']), ('\u{43a}', ['\u{41a}', '\0', '\0']),
-        ('\u{43b}', ['\u{41b}', '\0', '\0']), ('\u{43c}', ['\u{41c}', '\0', '\0']), ('\u{43d}',
-        ['\u{41d}', '\0', '\0']), ('\u{43e}', ['\u{41e}', '\0', '\0']), ('\u{43f}', ['\u{41f}',
-        '\0', '\0']), ('\u{440}', ['\u{420}', '\0', '\0']), ('\u{441}', ['\u{421}', '\0', '\0']),
-        ('\u{442}', ['\u{422}', '\0', '\0']), ('\u{443}', ['\u{423}', '\0', '\0']), ('\u{444}',
-        ['\u{424}', '\0', '\0']), ('\u{445}', ['\u{425}', '\0', '\0']), ('\u{446}', ['\u{426}',
-        '\0', '\0']), ('\u{447}', ['\u{427}', '\0', '\0']), ('\u{448}', ['\u{428}', '\0', '\0']),
-        ('\u{449}', ['\u{429}', '\0', '\0']), ('\u{44a}', ['\u{42a}', '\0', '\0']), ('\u{44b}',
-        ['\u{42b}', '\0', '\0']), ('\u{44c}', ['\u{42c}', '\0', '\0']), ('\u{44d}', ['\u{42d}',
-        '\0', '\0']), ('\u{44e}', ['\u{42e}', '\0', '\0']), ('\u{44f}', ['\u{42f}', '\0', '\0']),
-        ('\u{450}', ['\u{400}', '\0', '\0']), ('\u{451}', ['\u{401}', '\0', '\0']), ('\u{452}',
-        ['\u{402}', '\0', '\0']), ('\u{453}', ['\u{403}', '\0', '\0']), ('\u{454}', ['\u{404}',
-        '\0', '\0']), ('\u{455}', ['\u{405}', '\0', '\0']), ('\u{456}', ['\u{406}', '\0', '\0']),
-        ('\u{457}', ['\u{407}', '\0', '\0']), ('\u{458}', ['\u{408}', '\0', '\0']), ('\u{459}',
-        ['\u{409}', '\0', '\0']), ('\u{45a}', ['\u{40a}', '\0', '\0']), ('\u{45b}', ['\u{40b}',
-        '\0', '\0']), ('\u{45c}', ['\u{40c}', '\0', '\0']), ('\u{45d}', ['\u{40d}', '\0', '\0']),
-        ('\u{45e}', ['\u{40e}', '\0', '\0']), ('\u{45f}', ['\u{40f}', '\0', '\0']), ('\u{461}',
-        ['\u{460}', '\0', '\0']), ('\u{463}', ['\u{462}', '\0', '\0']), ('\u{465}', ['\u{464}',
-        '\0', '\0']), ('\u{467}', ['\u{466}', '\0', '\0']), ('\u{469}', ['\u{468}', '\0', '\0']),
-        ('\u{46b}', ['\u{46a}', '\0', '\0']), ('\u{46d}', ['\u{46c}', '\0', '\0']), ('\u{46f}',
-        ['\u{46e}', '\0', '\0']), ('\u{471}', ['\u{470}', '\0', '\0']), ('\u{473}', ['\u{472}',
-        '\0', '\0']), ('\u{475}', ['\u{474}', '\0', '\0']), ('\u{477}', ['\u{476}', '\0', '\0']),
-        ('\u{479}', ['\u{478}', '\0', '\0']), ('\u{47b}', ['\u{47a}', '\0', '\0']), ('\u{47d}',
-        ['\u{47c}', '\0', '\0']), ('\u{47f}', ['\u{47e}', '\0', '\0']), ('\u{481}', ['\u{480}',
-        '\0', '\0']), ('\u{48b}', ['\u{48a}', '\0', '\0']), ('\u{48d}', ['\u{48c}', '\0', '\0']),
-        ('\u{48f}', ['\u{48e}', '\0', '\0']), ('\u{491}', ['\u{490}', '\0', '\0']), ('\u{493}',
-        ['\u{492}', '\0', '\0']), ('\u{495}', ['\u{494}', '\0', '\0']), ('\u{497}', ['\u{496}',
-        '\0', '\0']), ('\u{499}', ['\u{498}', '\0', '\0']), ('\u{49b}', ['\u{49a}', '\0', '\0']),
-        ('\u{49d}', ['\u{49c}', '\0', '\0']), ('\u{49f}', ['\u{49e}', '\0', '\0']), ('\u{4a1}',
-        ['\u{4a0}', '\0', '\0']), ('\u{4a3}', ['\u{4a2}', '\0', '\0']), ('\u{4a5}', ['\u{4a4}',
-        '\0', '\0']), ('\u{4a7}', ['\u{4a6}', '\0', '\0']), ('\u{4a9}', ['\u{4a8}', '\0', '\0']),
-        ('\u{4ab}', ['\u{4aa}', '\0', '\0']), ('\u{4ad}', ['\u{4ac}', '\0', '\0']), ('\u{4af}',
-        ['\u{4ae}', '\0', '\0']), ('\u{4b1}', ['\u{4b0}', '\0', '\0']), ('\u{4b3}', ['\u{4b2}',
-        '\0', '\0']), ('\u{4b5}', ['\u{4b4}', '\0', '\0']), ('\u{4b7}', ['\u{4b6}', '\0', '\0']),
-        ('\u{4b9}', ['\u{4b8}', '\0', '\0']), ('\u{4bb}', ['\u{4ba}', '\0', '\0']), ('\u{4bd}',
-        ['\u{4bc}', '\0', '\0']), ('\u{4bf}', ['\u{4be}', '\0', '\0']), ('\u{4c2}', ['\u{4c1}',
-        '\0', '\0']), ('\u{4c4}', ['\u{4c3}', '\0', '\0']), ('\u{4c6}', ['\u{4c5}', '\0', '\0']),
-        ('\u{4c8}', ['\u{4c7}', '\0', '\0']), ('\u{4ca}', ['\u{4c9}', '\0', '\0']), ('\u{4cc}',
-        ['\u{4cb}', '\0', '\0']), ('\u{4ce}', ['\u{4cd}', '\0', '\0']), ('\u{4cf}', ['\u{4c0}',
-        '\0', '\0']), ('\u{4d1}', ['\u{4d0}', '\0', '\0']), ('\u{4d3}', ['\u{4d2}', '\0', '\0']),
-        ('\u{4d5}', ['\u{4d4}', '\0', '\0']), ('\u{4d7}', ['\u{4d6}', '\0', '\0']), ('\u{4d9}',
-        ['\u{4d8}', '\0', '\0']), ('\u{4db}', ['\u{4da}', '\0', '\0']), ('\u{4dd}', ['\u{4dc}',
-        '\0', '\0']), ('\u{4df}', ['\u{4de}', '\0', '\0']), ('\u{4e1}', ['\u{4e0}', '\0', '\0']),
-        ('\u{4e3}', ['\u{4e2}', '\0', '\0']), ('\u{4e5}', ['\u{4e4}', '\0', '\0']), ('\u{4e7}',
-        ['\u{4e6}', '\0', '\0']), ('\u{4e9}', ['\u{4e8}', '\0', '\0']), ('\u{4eb}', ['\u{4ea}',
-        '\0', '\0']), ('\u{4ed}', ['\u{4ec}', '\0', '\0']), ('\u{4ef}', ['\u{4ee}', '\0', '\0']),
-        ('\u{4f1}', ['\u{4f0}', '\0', '\0']), ('\u{4f3}', ['\u{4f2}', '\0', '\0']), ('\u{4f5}',
-        ['\u{4f4}', '\0', '\0']), ('\u{4f7}', ['\u{4f6}', '\0', '\0']), ('\u{4f9}', ['\u{4f8}',
-        '\0', '\0']), ('\u{4fb}', ['\u{4fa}', '\0', '\0']), ('\u{4fd}', ['\u{4fc}', '\0', '\0']),
-        ('\u{4ff}', ['\u{4fe}', '\0', '\0']), ('\u{501}', ['\u{500}', '\0', '\0']), ('\u{503}',
-        ['\u{502}', '\0', '\0']), ('\u{505}', ['\u{504}', '\0', '\0']), ('\u{507}', ['\u{506}',
-        '\0', '\0']), ('\u{509}', ['\u{508}', '\0', '\0']), ('\u{50b}', ['\u{50a}', '\0', '\0']),
-        ('\u{50d}', ['\u{50c}', '\0', '\0']), ('\u{50f}', ['\u{50e}', '\0', '\0']), ('\u{511}',
-        ['\u{510}', '\0', '\0']), ('\u{513}', ['\u{512}', '\0', '\0']), ('\u{515}', ['\u{514}',
-        '\0', '\0']), ('\u{517}', ['\u{516}', '\0', '\0']), ('\u{519}', ['\u{518}', '\0', '\0']),
-        ('\u{51b}', ['\u{51a}', '\0', '\0']), ('\u{51d}', ['\u{51c}', '\0', '\0']), ('\u{51f}',
-        ['\u{51e}', '\0', '\0']), ('\u{521}', ['\u{520}', '\0', '\0']), ('\u{523}', ['\u{522}',
-        '\0', '\0']), ('\u{525}', ['\u{524}', '\0', '\0']), ('\u{527}', ['\u{526}', '\0', '\0']),
-        ('\u{529}', ['\u{528}', '\0', '\0']), ('\u{52b}', ['\u{52a}', '\0', '\0']), ('\u{52d}',
-        ['\u{52c}', '\0', '\0']), ('\u{52f}', ['\u{52e}', '\0', '\0']), ('\u{561}', ['\u{531}',
-        '\0', '\0']), ('\u{562}', ['\u{532}', '\0', '\0']), ('\u{563}', ['\u{533}', '\0', '\0']),
-        ('\u{564}', ['\u{534}', '\0', '\0']), ('\u{565}', ['\u{535}', '\0', '\0']), ('\u{566}',
-        ['\u{536}', '\0', '\0']), ('\u{567}', ['\u{537}', '\0', '\0']), ('\u{568}', ['\u{538}',
-        '\0', '\0']), ('\u{569}', ['\u{539}', '\0', '\0']), ('\u{56a}', ['\u{53a}', '\0', '\0']),
-        ('\u{56b}', ['\u{53b}', '\0', '\0']), ('\u{56c}', ['\u{53c}', '\0', '\0']), ('\u{56d}',
-        ['\u{53d}', '\0', '\0']), ('\u{56e}', ['\u{53e}', '\0', '\0']), ('\u{56f}', ['\u{53f}',
-        '\0', '\0']), ('\u{570}', ['\u{540}', '\0', '\0']), ('\u{571}', ['\u{541}', '\0', '\0']),
-        ('\u{572}', ['\u{542}', '\0', '\0']), ('\u{573}', ['\u{543}', '\0', '\0']), ('\u{574}',
-        ['\u{544}', '\0', '\0']), ('\u{575}', ['\u{545}', '\0', '\0']), ('\u{576}', ['\u{546}',
-        '\0', '\0']), ('\u{577}', ['\u{547}', '\0', '\0']), ('\u{578}', ['\u{548}', '\0', '\0']),
-        ('\u{579}', ['\u{549}', '\0', '\0']), ('\u{57a}', ['\u{54a}', '\0', '\0']), ('\u{57b}',
-        ['\u{54b}', '\0', '\0']), ('\u{57c}', ['\u{54c}', '\0', '\0']), ('\u{57d}', ['\u{54d}',
-        '\0', '\0']), ('\u{57e}', ['\u{54e}', '\0', '\0']), ('\u{57f}', ['\u{54f}', '\0', '\0']),
-        ('\u{580}', ['\u{550}', '\0', '\0']), ('\u{581}', ['\u{551}', '\0', '\0']), ('\u{582}',
-        ['\u{552}', '\0', '\0']), ('\u{583}', ['\u{553}', '\0', '\0']), ('\u{584}', ['\u{554}',
-        '\0', '\0']), ('\u{585}', ['\u{555}', '\0', '\0']), ('\u{586}', ['\u{556}', '\0', '\0']),
-        ('\u{587}', ['\u{535}', '\u{552}', '\0']), ('\u{1d79}', ['\u{a77d}', '\0', '\0']),
-        ('\u{1d7d}', ['\u{2c63}', '\0', '\0']), ('\u{1e01}', ['\u{1e00}', '\0', '\0']), ('\u{1e03}',
-        ['\u{1e02}', '\0', '\0']), ('\u{1e05}', ['\u{1e04}', '\0', '\0']), ('\u{1e07}', ['\u{1e06}',
-        '\0', '\0']), ('\u{1e09}', ['\u{1e08}', '\0', '\0']), ('\u{1e0b}', ['\u{1e0a}', '\0',
-        '\0']), ('\u{1e0d}', ['\u{1e0c}', '\0', '\0']), ('\u{1e0f}', ['\u{1e0e}', '\0', '\0']),
-        ('\u{1e11}', ['\u{1e10}', '\0', '\0']), ('\u{1e13}', ['\u{1e12}', '\0', '\0']), ('\u{1e15}',
-        ['\u{1e14}', '\0', '\0']), ('\u{1e17}', ['\u{1e16}', '\0', '\0']), ('\u{1e19}', ['\u{1e18}',
-        '\0', '\0']), ('\u{1e1b}', ['\u{1e1a}', '\0', '\0']), ('\u{1e1d}', ['\u{1e1c}', '\0',
-        '\0']), ('\u{1e1f}', ['\u{1e1e}', '\0', '\0']), ('\u{1e21}', ['\u{1e20}', '\0', '\0']),
-        ('\u{1e23}', ['\u{1e22}', '\0', '\0']), ('\u{1e25}', ['\u{1e24}', '\0', '\0']), ('\u{1e27}',
-        ['\u{1e26}', '\0', '\0']), ('\u{1e29}', ['\u{1e28}', '\0', '\0']), ('\u{1e2b}', ['\u{1e2a}',
-        '\0', '\0']), ('\u{1e2d}', ['\u{1e2c}', '\0', '\0']), ('\u{1e2f}', ['\u{1e2e}', '\0',
-        '\0']), ('\u{1e31}', ['\u{1e30}', '\0', '\0']), ('\u{1e33}', ['\u{1e32}', '\0', '\0']),
-        ('\u{1e35}', ['\u{1e34}', '\0', '\0']), ('\u{1e37}', ['\u{1e36}', '\0', '\0']), ('\u{1e39}',
-        ['\u{1e38}', '\0', '\0']), ('\u{1e3b}', ['\u{1e3a}', '\0', '\0']), ('\u{1e3d}', ['\u{1e3c}',
-        '\0', '\0']), ('\u{1e3f}', ['\u{1e3e}', '\0', '\0']), ('\u{1e41}', ['\u{1e40}', '\0',
-        '\0']), ('\u{1e43}', ['\u{1e42}', '\0', '\0']), ('\u{1e45}', ['\u{1e44}', '\0', '\0']),
-        ('\u{1e47}', ['\u{1e46}', '\0', '\0']), ('\u{1e49}', ['\u{1e48}', '\0', '\0']), ('\u{1e4b}',
-        ['\u{1e4a}', '\0', '\0']), ('\u{1e4d}', ['\u{1e4c}', '\0', '\0']), ('\u{1e4f}', ['\u{1e4e}',
-        '\0', '\0']), ('\u{1e51}', ['\u{1e50}', '\0', '\0']), ('\u{1e53}', ['\u{1e52}', '\0',
-        '\0']), ('\u{1e55}', ['\u{1e54}', '\0', '\0']), ('\u{1e57}', ['\u{1e56}', '\0', '\0']),
-        ('\u{1e59}', ['\u{1e58}', '\0', '\0']), ('\u{1e5b}', ['\u{1e5a}', '\0', '\0']), ('\u{1e5d}',
-        ['\u{1e5c}', '\0', '\0']), ('\u{1e5f}', ['\u{1e5e}', '\0', '\0']), ('\u{1e61}', ['\u{1e60}',
-        '\0', '\0']), ('\u{1e63}', ['\u{1e62}', '\0', '\0']), ('\u{1e65}', ['\u{1e64}', '\0',
-        '\0']), ('\u{1e67}', ['\u{1e66}', '\0', '\0']), ('\u{1e69}', ['\u{1e68}', '\0', '\0']),
-        ('\u{1e6b}', ['\u{1e6a}', '\0', '\0']), ('\u{1e6d}', ['\u{1e6c}', '\0', '\0']), ('\u{1e6f}',
-        ['\u{1e6e}', '\0', '\0']), ('\u{1e71}', ['\u{1e70}', '\0', '\0']), ('\u{1e73}', ['\u{1e72}',
-        '\0', '\0']), ('\u{1e75}', ['\u{1e74}', '\0', '\0']), ('\u{1e77}', ['\u{1e76}', '\0',
-        '\0']), ('\u{1e79}', ['\u{1e78}', '\0', '\0']), ('\u{1e7b}', ['\u{1e7a}', '\0', '\0']),
-        ('\u{1e7d}', ['\u{1e7c}', '\0', '\0']), ('\u{1e7f}', ['\u{1e7e}', '\0', '\0']), ('\u{1e81}',
-        ['\u{1e80}', '\0', '\0']), ('\u{1e83}', ['\u{1e82}', '\0', '\0']), ('\u{1e85}', ['\u{1e84}',
-        '\0', '\0']), ('\u{1e87}', ['\u{1e86}', '\0', '\0']), ('\u{1e89}', ['\u{1e88}', '\0',
-        '\0']), ('\u{1e8b}', ['\u{1e8a}', '\0', '\0']), ('\u{1e8d}', ['\u{1e8c}', '\0', '\0']),
-        ('\u{1e8f}', ['\u{1e8e}', '\0', '\0']), ('\u{1e91}', ['\u{1e90}', '\0', '\0']), ('\u{1e93}',
-        ['\u{1e92}', '\0', '\0']), ('\u{1e95}', ['\u{1e94}', '\0', '\0']), ('\u{1e96}', ['\u{48}',
-        '\u{331}', '\0']), ('\u{1e97}', ['\u{54}', '\u{308}', '\0']), ('\u{1e98}', ['\u{57}',
-        '\u{30a}', '\0']), ('\u{1e99}', ['\u{59}', '\u{30a}', '\0']), ('\u{1e9a}', ['\u{41}',
-        '\u{2be}', '\0']), ('\u{1e9b}', ['\u{1e60}', '\0', '\0']), ('\u{1ea1}', ['\u{1ea0}', '\0',
-        '\0']), ('\u{1ea3}', ['\u{1ea2}', '\0', '\0']), ('\u{1ea5}', ['\u{1ea4}', '\0', '\0']),
-        ('\u{1ea7}', ['\u{1ea6}', '\0', '\0']), ('\u{1ea9}', ['\u{1ea8}', '\0', '\0']), ('\u{1eab}',
-        ['\u{1eaa}', '\0', '\0']), ('\u{1ead}', ['\u{1eac}', '\0', '\0']), ('\u{1eaf}', ['\u{1eae}',
-        '\0', '\0']), ('\u{1eb1}', ['\u{1eb0}', '\0', '\0']), ('\u{1eb3}', ['\u{1eb2}', '\0',
-        '\0']), ('\u{1eb5}', ['\u{1eb4}', '\0', '\0']), ('\u{1eb7}', ['\u{1eb6}', '\0', '\0']),
-        ('\u{1eb9}', ['\u{1eb8}', '\0', '\0']), ('\u{1ebb}', ['\u{1eba}', '\0', '\0']), ('\u{1ebd}',
-        ['\u{1ebc}', '\0', '\0']), ('\u{1ebf}', ['\u{1ebe}', '\0', '\0']), ('\u{1ec1}', ['\u{1ec0}',
-        '\0', '\0']), ('\u{1ec3}', ['\u{1ec2}', '\0', '\0']), ('\u{1ec5}', ['\u{1ec4}', '\0',
-        '\0']), ('\u{1ec7}', ['\u{1ec6}', '\0', '\0']), ('\u{1ec9}', ['\u{1ec8}', '\0', '\0']),
-        ('\u{1ecb}', ['\u{1eca}', '\0', '\0']), ('\u{1ecd}', ['\u{1ecc}', '\0', '\0']), ('\u{1ecf}',
-        ['\u{1ece}', '\0', '\0']), ('\u{1ed1}', ['\u{1ed0}', '\0', '\0']), ('\u{1ed3}', ['\u{1ed2}',
-        '\0', '\0']), ('\u{1ed5}', ['\u{1ed4}', '\0', '\0']), ('\u{1ed7}', ['\u{1ed6}', '\0',
-        '\0']), ('\u{1ed9}', ['\u{1ed8}', '\0', '\0']), ('\u{1edb}', ['\u{1eda}', '\0', '\0']),
-        ('\u{1edd}', ['\u{1edc}', '\0', '\0']), ('\u{1edf}', ['\u{1ede}', '\0', '\0']), ('\u{1ee1}',
-        ['\u{1ee0}', '\0', '\0']), ('\u{1ee3}', ['\u{1ee2}', '\0', '\0']), ('\u{1ee5}', ['\u{1ee4}',
-        '\0', '\0']), ('\u{1ee7}', ['\u{1ee6}', '\0', '\0']), ('\u{1ee9}', ['\u{1ee8}', '\0',
-        '\0']), ('\u{1eeb}', ['\u{1eea}', '\0', '\0']), ('\u{1eed}', ['\u{1eec}', '\0', '\0']),
-        ('\u{1eef}', ['\u{1eee}', '\0', '\0']), ('\u{1ef1}', ['\u{1ef0}', '\0', '\0']), ('\u{1ef3}',
-        ['\u{1ef2}', '\0', '\0']), ('\u{1ef5}', ['\u{1ef4}', '\0', '\0']), ('\u{1ef7}', ['\u{1ef6}',
-        '\0', '\0']), ('\u{1ef9}', ['\u{1ef8}', '\0', '\0']), ('\u{1efb}', ['\u{1efa}', '\0',
-        '\0']), ('\u{1efd}', ['\u{1efc}', '\0', '\0']), ('\u{1eff}', ['\u{1efe}', '\0', '\0']),
-        ('\u{1f00}', ['\u{1f08}', '\0', '\0']), ('\u{1f01}', ['\u{1f09}', '\0', '\0']), ('\u{1f02}',
-        ['\u{1f0a}', '\0', '\0']), ('\u{1f03}', ['\u{1f0b}', '\0', '\0']), ('\u{1f04}', ['\u{1f0c}',
-        '\0', '\0']), ('\u{1f05}', ['\u{1f0d}', '\0', '\0']), ('\u{1f06}', ['\u{1f0e}', '\0',
-        '\0']), ('\u{1f07}', ['\u{1f0f}', '\0', '\0']), ('\u{1f10}', ['\u{1f18}', '\0', '\0']),
-        ('\u{1f11}', ['\u{1f19}', '\0', '\0']), ('\u{1f12}', ['\u{1f1a}', '\0', '\0']), ('\u{1f13}',
-        ['\u{1f1b}', '\0', '\0']), ('\u{1f14}', ['\u{1f1c}', '\0', '\0']), ('\u{1f15}', ['\u{1f1d}',
-        '\0', '\0']), ('\u{1f20}', ['\u{1f28}', '\0', '\0']), ('\u{1f21}', ['\u{1f29}', '\0',
-        '\0']), ('\u{1f22}', ['\u{1f2a}', '\0', '\0']), ('\u{1f23}', ['\u{1f2b}', '\0', '\0']),
-        ('\u{1f24}', ['\u{1f2c}', '\0', '\0']), ('\u{1f25}', ['\u{1f2d}', '\0', '\0']), ('\u{1f26}',
-        ['\u{1f2e}', '\0', '\0']), ('\u{1f27}', ['\u{1f2f}', '\0', '\0']), ('\u{1f30}', ['\u{1f38}',
-        '\0', '\0']), ('\u{1f31}', ['\u{1f39}', '\0', '\0']), ('\u{1f32}', ['\u{1f3a}', '\0',
-        '\0']), ('\u{1f33}', ['\u{1f3b}', '\0', '\0']), ('\u{1f34}', ['\u{1f3c}', '\0', '\0']),
-        ('\u{1f35}', ['\u{1f3d}', '\0', '\0']), ('\u{1f36}', ['\u{1f3e}', '\0', '\0']), ('\u{1f37}',
-        ['\u{1f3f}', '\0', '\0']), ('\u{1f40}', ['\u{1f48}', '\0', '\0']), ('\u{1f41}', ['\u{1f49}',
-        '\0', '\0']), ('\u{1f42}', ['\u{1f4a}', '\0', '\0']), ('\u{1f43}', ['\u{1f4b}', '\0',
-        '\0']), ('\u{1f44}', ['\u{1f4c}', '\0', '\0']), ('\u{1f45}', ['\u{1f4d}', '\0', '\0']),
-        ('\u{1f50}', ['\u{3a5}', '\u{313}', '\0']), ('\u{1f51}', ['\u{1f59}', '\0', '\0']),
-        ('\u{1f52}', ['\u{3a5}', '\u{313}', '\u{300}']), ('\u{1f53}', ['\u{1f5b}', '\0', '\0']),
-        ('\u{1f54}', ['\u{3a5}', '\u{313}', '\u{301}']), ('\u{1f55}', ['\u{1f5d}', '\0', '\0']),
-        ('\u{1f56}', ['\u{3a5}', '\u{313}', '\u{342}']), ('\u{1f57}', ['\u{1f5f}', '\0', '\0']),
-        ('\u{1f60}', ['\u{1f68}', '\0', '\0']), ('\u{1f61}', ['\u{1f69}', '\0', '\0']), ('\u{1f62}',
-        ['\u{1f6a}', '\0', '\0']), ('\u{1f63}', ['\u{1f6b}', '\0', '\0']), ('\u{1f64}', ['\u{1f6c}',
-        '\0', '\0']), ('\u{1f65}', ['\u{1f6d}', '\0', '\0']), ('\u{1f66}', ['\u{1f6e}', '\0',
-        '\0']), ('\u{1f67}', ['\u{1f6f}', '\0', '\0']), ('\u{1f70}', ['\u{1fba}', '\0', '\0']),
-        ('\u{1f71}', ['\u{1fbb}', '\0', '\0']), ('\u{1f72}', ['\u{1fc8}', '\0', '\0']), ('\u{1f73}',
-        ['\u{1fc9}', '\0', '\0']), ('\u{1f74}', ['\u{1fca}', '\0', '\0']), ('\u{1f75}', ['\u{1fcb}',
-        '\0', '\0']), ('\u{1f76}', ['\u{1fda}', '\0', '\0']), ('\u{1f77}', ['\u{1fdb}', '\0',
-        '\0']), ('\u{1f78}', ['\u{1ff8}', '\0', '\0']), ('\u{1f79}', ['\u{1ff9}', '\0', '\0']),
-        ('\u{1f7a}', ['\u{1fea}', '\0', '\0']), ('\u{1f7b}', ['\u{1feb}', '\0', '\0']), ('\u{1f7c}',
-        ['\u{1ffa}', '\0', '\0']), ('\u{1f7d}', ['\u{1ffb}', '\0', '\0']), ('\u{1f80}', ['\u{1f08}',
-        '\u{399}', '\0']), ('\u{1f81}', ['\u{1f09}', '\u{399}', '\0']), ('\u{1f82}', ['\u{1f0a}',
-        '\u{399}', '\0']), ('\u{1f83}', ['\u{1f0b}', '\u{399}', '\0']), ('\u{1f84}', ['\u{1f0c}',
-        '\u{399}', '\0']), ('\u{1f85}', ['\u{1f0d}', '\u{399}', '\0']), ('\u{1f86}', ['\u{1f0e}',
-        '\u{399}', '\0']), ('\u{1f87}', ['\u{1f0f}', '\u{399}', '\0']), ('\u{1f88}', ['\u{1f08}',
-        '\u{399}', '\0']), ('\u{1f89}', ['\u{1f09}', '\u{399}', '\0']), ('\u{1f8a}', ['\u{1f0a}',
-        '\u{399}', '\0']), ('\u{1f8b}', ['\u{1f0b}', '\u{399}', '\0']), ('\u{1f8c}', ['\u{1f0c}',
-        '\u{399}', '\0']), ('\u{1f8d}', ['\u{1f0d}', '\u{399}', '\0']), ('\u{1f8e}', ['\u{1f0e}',
-        '\u{399}', '\0']), ('\u{1f8f}', ['\u{1f0f}', '\u{399}', '\0']), ('\u{1f90}', ['\u{1f28}',
-        '\u{399}', '\0']), ('\u{1f91}', ['\u{1f29}', '\u{399}', '\0']), ('\u{1f92}', ['\u{1f2a}',
-        '\u{399}', '\0']), ('\u{1f93}', ['\u{1f2b}', '\u{399}', '\0']), ('\u{1f94}', ['\u{1f2c}',
-        '\u{399}', '\0']), ('\u{1f95}', ['\u{1f2d}', '\u{399}', '\0']), ('\u{1f96}', ['\u{1f2e}',
-        '\u{399}', '\0']), ('\u{1f97}', ['\u{1f2f}', '\u{399}', '\0']), ('\u{1f98}', ['\u{1f28}',
-        '\u{399}', '\0']), ('\u{1f99}', ['\u{1f29}', '\u{399}', '\0']), ('\u{1f9a}', ['\u{1f2a}',
-        '\u{399}', '\0']), ('\u{1f9b}', ['\u{1f2b}', '\u{399}', '\0']), ('\u{1f9c}', ['\u{1f2c}',
-        '\u{399}', '\0']), ('\u{1f9d}', ['\u{1f2d}', '\u{399}', '\0']), ('\u{1f9e}', ['\u{1f2e}',
-        '\u{399}', '\0']), ('\u{1f9f}', ['\u{1f2f}', '\u{399}', '\0']), ('\u{1fa0}', ['\u{1f68}',
-        '\u{399}', '\0']), ('\u{1fa1}', ['\u{1f69}', '\u{399}', '\0']), ('\u{1fa2}', ['\u{1f6a}',
-        '\u{399}', '\0']), ('\u{1fa3}', ['\u{1f6b}', '\u{399}', '\0']), ('\u{1fa4}', ['\u{1f6c}',
-        '\u{399}', '\0']), ('\u{1fa5}', ['\u{1f6d}', '\u{399}', '\0']), ('\u{1fa6}', ['\u{1f6e}',
-        '\u{399}', '\0']), ('\u{1fa7}', ['\u{1f6f}', '\u{399}', '\0']), ('\u{1fa8}', ['\u{1f68}',
-        '\u{399}', '\0']), ('\u{1fa9}', ['\u{1f69}', '\u{399}', '\0']), ('\u{1faa}', ['\u{1f6a}',
-        '\u{399}', '\0']), ('\u{1fab}', ['\u{1f6b}', '\u{399}', '\0']), ('\u{1fac}', ['\u{1f6c}',
-        '\u{399}', '\0']), ('\u{1fad}', ['\u{1f6d}', '\u{399}', '\0']), ('\u{1fae}', ['\u{1f6e}',
-        '\u{399}', '\0']), ('\u{1faf}', ['\u{1f6f}', '\u{399}', '\0']), ('\u{1fb0}', ['\u{1fb8}',
-        '\0', '\0']), ('\u{1fb1}', ['\u{1fb9}', '\0', '\0']), ('\u{1fb2}', ['\u{1fba}', '\u{399}',
-        '\0']), ('\u{1fb3}', ['\u{391}', '\u{399}', '\0']), ('\u{1fb4}', ['\u{386}', '\u{399}',
-        '\0']), ('\u{1fb6}', ['\u{391}', '\u{342}', '\0']), ('\u{1fb7}', ['\u{391}', '\u{342}',
-        '\u{399}']), ('\u{1fbc}', ['\u{391}', '\u{399}', '\0']), ('\u{1fbe}', ['\u{399}', '\0',
-        '\0']), ('\u{1fc2}', ['\u{1fca}', '\u{399}', '\0']), ('\u{1fc3}', ['\u{397}', '\u{399}',
-        '\0']), ('\u{1fc4}', ['\u{389}', '\u{399}', '\0']), ('\u{1fc6}', ['\u{397}', '\u{342}',
-        '\0']), ('\u{1fc7}', ['\u{397}', '\u{342}', '\u{399}']), ('\u{1fcc}', ['\u{397}', '\u{399}',
-        '\0']), ('\u{1fd0}', ['\u{1fd8}', '\0', '\0']), ('\u{1fd1}', ['\u{1fd9}', '\0', '\0']),
-        ('\u{1fd2}', ['\u{399}', '\u{308}', '\u{300}']), ('\u{1fd3}', ['\u{399}', '\u{308}',
+        ('\u{28c}', ['\u{245}', '\0', '\0']), ('\u{292}', ['\u{1b7}', '\0', '\0']), ('\u{29d}',
+        ['\u{a7b2}', '\0', '\0']), ('\u{29e}', ['\u{a7b0}', '\0', '\0']), ('\u{345}', ['\u{399}',
+        '\0', '\0']), ('\u{371}', ['\u{370}', '\0', '\0']), ('\u{373}', ['\u{372}', '\0', '\0']),
+        ('\u{377}', ['\u{376}', '\0', '\0']), ('\u{37b}', ['\u{3fd}', '\0', '\0']), ('\u{37c}',
+        ['\u{3fe}', '\0', '\0']), ('\u{37d}', ['\u{3ff}', '\0', '\0']), ('\u{390}', ['\u{399}',
+        '\u{308}', '\u{301}']), ('\u{3ac}', ['\u{386}', '\0', '\0']), ('\u{3ad}', ['\u{388}', '\0',
+        '\0']), ('\u{3ae}', ['\u{389}', '\0', '\0']), ('\u{3af}', ['\u{38a}', '\0', '\0']),
+        ('\u{3b0}', ['\u{3a5}', '\u{308}', '\u{301}']), ('\u{3b1}', ['\u{391}', '\0', '\0']),
+        ('\u{3b2}', ['\u{392}', '\0', '\0']), ('\u{3b3}', ['\u{393}', '\0', '\0']), ('\u{3b4}',
+        ['\u{394}', '\0', '\0']), ('\u{3b5}', ['\u{395}', '\0', '\0']), ('\u{3b6}', ['\u{396}',
+        '\0', '\0']), ('\u{3b7}', ['\u{397}', '\0', '\0']), ('\u{3b8}', ['\u{398}', '\0', '\0']),
+        ('\u{3b9}', ['\u{399}', '\0', '\0']), ('\u{3ba}', ['\u{39a}', '\0', '\0']), ('\u{3bb}',
+        ['\u{39b}', '\0', '\0']), ('\u{3bc}', ['\u{39c}', '\0', '\0']), ('\u{3bd}', ['\u{39d}',
+        '\0', '\0']), ('\u{3be}', ['\u{39e}', '\0', '\0']), ('\u{3bf}', ['\u{39f}', '\0', '\0']),
+        ('\u{3c0}', ['\u{3a0}', '\0', '\0']), ('\u{3c1}', ['\u{3a1}', '\0', '\0']), ('\u{3c2}',
+        ['\u{3a3}', '\0', '\0']), ('\u{3c3}', ['\u{3a3}', '\0', '\0']), ('\u{3c4}', ['\u{3a4}',
+        '\0', '\0']), ('\u{3c5}', ['\u{3a5}', '\0', '\0']), ('\u{3c6}', ['\u{3a6}', '\0', '\0']),
+        ('\u{3c7}', ['\u{3a7}', '\0', '\0']), ('\u{3c8}', ['\u{3a8}', '\0', '\0']), ('\u{3c9}',
+        ['\u{3a9}', '\0', '\0']), ('\u{3ca}', ['\u{3aa}', '\0', '\0']), ('\u{3cb}', ['\u{3ab}',
+        '\0', '\0']), ('\u{3cc}', ['\u{38c}', '\0', '\0']), ('\u{3cd}', ['\u{38e}', '\0', '\0']),
+        ('\u{3ce}', ['\u{38f}', '\0', '\0']), ('\u{3d0}', ['\u{392}', '\0', '\0']), ('\u{3d1}',
+        ['\u{398}', '\0', '\0']), ('\u{3d5}', ['\u{3a6}', '\0', '\0']), ('\u{3d6}', ['\u{3a0}',
+        '\0', '\0']), ('\u{3d7}', ['\u{3cf}', '\0', '\0']), ('\u{3d9}', ['\u{3d8}', '\0', '\0']),
+        ('\u{3db}', ['\u{3da}', '\0', '\0']), ('\u{3dd}', ['\u{3dc}', '\0', '\0']), ('\u{3df}',
+        ['\u{3de}', '\0', '\0']), ('\u{3e1}', ['\u{3e0}', '\0', '\0']), ('\u{3e3}', ['\u{3e2}',
+        '\0', '\0']), ('\u{3e5}', ['\u{3e4}', '\0', '\0']), ('\u{3e7}', ['\u{3e6}', '\0', '\0']),
+        ('\u{3e9}', ['\u{3e8}', '\0', '\0']), ('\u{3eb}', ['\u{3ea}', '\0', '\0']), ('\u{3ed}',
+        ['\u{3ec}', '\0', '\0']), ('\u{3ef}', ['\u{3ee}', '\0', '\0']), ('\u{3f0}', ['\u{39a}',
+        '\0', '\0']), ('\u{3f1}', ['\u{3a1}', '\0', '\0']), ('\u{3f2}', ['\u{3f9}', '\0', '\0']),
+        ('\u{3f3}', ['\u{37f}', '\0', '\0']), ('\u{3f5}', ['\u{395}', '\0', '\0']), ('\u{3f8}',
+        ['\u{3f7}', '\0', '\0']), ('\u{3fb}', ['\u{3fa}', '\0', '\0']), ('\u{430}', ['\u{410}',
+        '\0', '\0']), ('\u{431}', ['\u{411}', '\0', '\0']), ('\u{432}', ['\u{412}', '\0', '\0']),
+        ('\u{433}', ['\u{413}', '\0', '\0']), ('\u{434}', ['\u{414}', '\0', '\0']), ('\u{435}',
+        ['\u{415}', '\0', '\0']), ('\u{436}', ['\u{416}', '\0', '\0']), ('\u{437}', ['\u{417}',
+        '\0', '\0']), ('\u{438}', ['\u{418}', '\0', '\0']), ('\u{439}', ['\u{419}', '\0', '\0']),
+        ('\u{43a}', ['\u{41a}', '\0', '\0']), ('\u{43b}', ['\u{41b}', '\0', '\0']), ('\u{43c}',
+        ['\u{41c}', '\0', '\0']), ('\u{43d}', ['\u{41d}', '\0', '\0']), ('\u{43e}', ['\u{41e}',
+        '\0', '\0']), ('\u{43f}', ['\u{41f}', '\0', '\0']), ('\u{440}', ['\u{420}', '\0', '\0']),
+        ('\u{441}', ['\u{421}', '\0', '\0']), ('\u{442}', ['\u{422}', '\0', '\0']), ('\u{443}',
+        ['\u{423}', '\0', '\0']), ('\u{444}', ['\u{424}', '\0', '\0']), ('\u{445}', ['\u{425}',
+        '\0', '\0']), ('\u{446}', ['\u{426}', '\0', '\0']), ('\u{447}', ['\u{427}', '\0', '\0']),
+        ('\u{448}', ['\u{428}', '\0', '\0']), ('\u{449}', ['\u{429}', '\0', '\0']), ('\u{44a}',
+        ['\u{42a}', '\0', '\0']), ('\u{44b}', ['\u{42b}', '\0', '\0']), ('\u{44c}', ['\u{42c}',
+        '\0', '\0']), ('\u{44d}', ['\u{42d}', '\0', '\0']), ('\u{44e}', ['\u{42e}', '\0', '\0']),
+        ('\u{44f}', ['\u{42f}', '\0', '\0']), ('\u{450}', ['\u{400}', '\0', '\0']), ('\u{451}',
+        ['\u{401}', '\0', '\0']), ('\u{452}', ['\u{402}', '\0', '\0']), ('\u{453}', ['\u{403}',
+        '\0', '\0']), ('\u{454}', ['\u{404}', '\0', '\0']), ('\u{455}', ['\u{405}', '\0', '\0']),
+        ('\u{456}', ['\u{406}', '\0', '\0']), ('\u{457}', ['\u{407}', '\0', '\0']), ('\u{458}',
+        ['\u{408}', '\0', '\0']), ('\u{459}', ['\u{409}', '\0', '\0']), ('\u{45a}', ['\u{40a}',
+        '\0', '\0']), ('\u{45b}', ['\u{40b}', '\0', '\0']), ('\u{45c}', ['\u{40c}', '\0', '\0']),
+        ('\u{45d}', ['\u{40d}', '\0', '\0']), ('\u{45e}', ['\u{40e}', '\0', '\0']), ('\u{45f}',
+        ['\u{40f}', '\0', '\0']), ('\u{461}', ['\u{460}', '\0', '\0']), ('\u{463}', ['\u{462}',
+        '\0', '\0']), ('\u{465}', ['\u{464}', '\0', '\0']), ('\u{467}', ['\u{466}', '\0', '\0']),
+        ('\u{469}', ['\u{468}', '\0', '\0']), ('\u{46b}', ['\u{46a}', '\0', '\0']), ('\u{46d}',
+        ['\u{46c}', '\0', '\0']), ('\u{46f}', ['\u{46e}', '\0', '\0']), ('\u{471}', ['\u{470}',
+        '\0', '\0']), ('\u{473}', ['\u{472}', '\0', '\0']), ('\u{475}', ['\u{474}', '\0', '\0']),
+        ('\u{477}', ['\u{476}', '\0', '\0']), ('\u{479}', ['\u{478}', '\0', '\0']), ('\u{47b}',
+        ['\u{47a}', '\0', '\0']), ('\u{47d}', ['\u{47c}', '\0', '\0']), ('\u{47f}', ['\u{47e}',
+        '\0', '\0']), ('\u{481}', ['\u{480}', '\0', '\0']), ('\u{48b}', ['\u{48a}', '\0', '\0']),
+        ('\u{48d}', ['\u{48c}', '\0', '\0']), ('\u{48f}', ['\u{48e}', '\0', '\0']), ('\u{491}',
+        ['\u{490}', '\0', '\0']), ('\u{493}', ['\u{492}', '\0', '\0']), ('\u{495}', ['\u{494}',
+        '\0', '\0']), ('\u{497}', ['\u{496}', '\0', '\0']), ('\u{499}', ['\u{498}', '\0', '\0']),
+        ('\u{49b}', ['\u{49a}', '\0', '\0']), ('\u{49d}', ['\u{49c}', '\0', '\0']), ('\u{49f}',
+        ['\u{49e}', '\0', '\0']), ('\u{4a1}', ['\u{4a0}', '\0', '\0']), ('\u{4a3}', ['\u{4a2}',
+        '\0', '\0']), ('\u{4a5}', ['\u{4a4}', '\0', '\0']), ('\u{4a7}', ['\u{4a6}', '\0', '\0']),
+        ('\u{4a9}', ['\u{4a8}', '\0', '\0']), ('\u{4ab}', ['\u{4aa}', '\0', '\0']), ('\u{4ad}',
+        ['\u{4ac}', '\0', '\0']), ('\u{4af}', ['\u{4ae}', '\0', '\0']), ('\u{4b1}', ['\u{4b0}',
+        '\0', '\0']), ('\u{4b3}', ['\u{4b2}', '\0', '\0']), ('\u{4b5}', ['\u{4b4}', '\0', '\0']),
+        ('\u{4b7}', ['\u{4b6}', '\0', '\0']), ('\u{4b9}', ['\u{4b8}', '\0', '\0']), ('\u{4bb}',
+        ['\u{4ba}', '\0', '\0']), ('\u{4bd}', ['\u{4bc}', '\0', '\0']), ('\u{4bf}', ['\u{4be}',
+        '\0', '\0']), ('\u{4c2}', ['\u{4c1}', '\0', '\0']), ('\u{4c4}', ['\u{4c3}', '\0', '\0']),
+        ('\u{4c6}', ['\u{4c5}', '\0', '\0']), ('\u{4c8}', ['\u{4c7}', '\0', '\0']), ('\u{4ca}',
+        ['\u{4c9}', '\0', '\0']), ('\u{4cc}', ['\u{4cb}', '\0', '\0']), ('\u{4ce}', ['\u{4cd}',
+        '\0', '\0']), ('\u{4cf}', ['\u{4c0}', '\0', '\0']), ('\u{4d1}', ['\u{4d0}', '\0', '\0']),
+        ('\u{4d3}', ['\u{4d2}', '\0', '\0']), ('\u{4d5}', ['\u{4d4}', '\0', '\0']), ('\u{4d7}',
+        ['\u{4d6}', '\0', '\0']), ('\u{4d9}', ['\u{4d8}', '\0', '\0']), ('\u{4db}', ['\u{4da}',
+        '\0', '\0']), ('\u{4dd}', ['\u{4dc}', '\0', '\0']), ('\u{4df}', ['\u{4de}', '\0', '\0']),
+        ('\u{4e1}', ['\u{4e0}', '\0', '\0']), ('\u{4e3}', ['\u{4e2}', '\0', '\0']), ('\u{4e5}',
+        ['\u{4e4}', '\0', '\0']), ('\u{4e7}', ['\u{4e6}', '\0', '\0']), ('\u{4e9}', ['\u{4e8}',
+        '\0', '\0']), ('\u{4eb}', ['\u{4ea}', '\0', '\0']), ('\u{4ed}', ['\u{4ec}', '\0', '\0']),
+        ('\u{4ef}', ['\u{4ee}', '\0', '\0']), ('\u{4f1}', ['\u{4f0}', '\0', '\0']), ('\u{4f3}',
+        ['\u{4f2}', '\0', '\0']), ('\u{4f5}', ['\u{4f4}', '\0', '\0']), ('\u{4f7}', ['\u{4f6}',
+        '\0', '\0']), ('\u{4f9}', ['\u{4f8}', '\0', '\0']), ('\u{4fb}', ['\u{4fa}', '\0', '\0']),
+        ('\u{4fd}', ['\u{4fc}', '\0', '\0']), ('\u{4ff}', ['\u{4fe}', '\0', '\0']), ('\u{501}',
+        ['\u{500}', '\0', '\0']), ('\u{503}', ['\u{502}', '\0', '\0']), ('\u{505}', ['\u{504}',
+        '\0', '\0']), ('\u{507}', ['\u{506}', '\0', '\0']), ('\u{509}', ['\u{508}', '\0', '\0']),
+        ('\u{50b}', ['\u{50a}', '\0', '\0']), ('\u{50d}', ['\u{50c}', '\0', '\0']), ('\u{50f}',
+        ['\u{50e}', '\0', '\0']), ('\u{511}', ['\u{510}', '\0', '\0']), ('\u{513}', ['\u{512}',
+        '\0', '\0']), ('\u{515}', ['\u{514}', '\0', '\0']), ('\u{517}', ['\u{516}', '\0', '\0']),
+        ('\u{519}', ['\u{518}', '\0', '\0']), ('\u{51b}', ['\u{51a}', '\0', '\0']), ('\u{51d}',
+        ['\u{51c}', '\0', '\0']), ('\u{51f}', ['\u{51e}', '\0', '\0']), ('\u{521}', ['\u{520}',
+        '\0', '\0']), ('\u{523}', ['\u{522}', '\0', '\0']), ('\u{525}', ['\u{524}', '\0', '\0']),
+        ('\u{527}', ['\u{526}', '\0', '\0']), ('\u{529}', ['\u{528}', '\0', '\0']), ('\u{52b}',
+        ['\u{52a}', '\0', '\0']), ('\u{52d}', ['\u{52c}', '\0', '\0']), ('\u{52f}', ['\u{52e}',
+        '\0', '\0']), ('\u{561}', ['\u{531}', '\0', '\0']), ('\u{562}', ['\u{532}', '\0', '\0']),
+        ('\u{563}', ['\u{533}', '\0', '\0']), ('\u{564}', ['\u{534}', '\0', '\0']), ('\u{565}',
+        ['\u{535}', '\0', '\0']), ('\u{566}', ['\u{536}', '\0', '\0']), ('\u{567}', ['\u{537}',
+        '\0', '\0']), ('\u{568}', ['\u{538}', '\0', '\0']), ('\u{569}', ['\u{539}', '\0', '\0']),
+        ('\u{56a}', ['\u{53a}', '\0', '\0']), ('\u{56b}', ['\u{53b}', '\0', '\0']), ('\u{56c}',
+        ['\u{53c}', '\0', '\0']), ('\u{56d}', ['\u{53d}', '\0', '\0']), ('\u{56e}', ['\u{53e}',
+        '\0', '\0']), ('\u{56f}', ['\u{53f}', '\0', '\0']), ('\u{570}', ['\u{540}', '\0', '\0']),
+        ('\u{571}', ['\u{541}', '\0', '\0']), ('\u{572}', ['\u{542}', '\0', '\0']), ('\u{573}',
+        ['\u{543}', '\0', '\0']), ('\u{574}', ['\u{544}', '\0', '\0']), ('\u{575}', ['\u{545}',
+        '\0', '\0']), ('\u{576}', ['\u{546}', '\0', '\0']), ('\u{577}', ['\u{547}', '\0', '\0']),
+        ('\u{578}', ['\u{548}', '\0', '\0']), ('\u{579}', ['\u{549}', '\0', '\0']), ('\u{57a}',
+        ['\u{54a}', '\0', '\0']), ('\u{57b}', ['\u{54b}', '\0', '\0']), ('\u{57c}', ['\u{54c}',
+        '\0', '\0']), ('\u{57d}', ['\u{54d}', '\0', '\0']), ('\u{57e}', ['\u{54e}', '\0', '\0']),
+        ('\u{57f}', ['\u{54f}', '\0', '\0']), ('\u{580}', ['\u{550}', '\0', '\0']), ('\u{581}',
+        ['\u{551}', '\0', '\0']), ('\u{582}', ['\u{552}', '\0', '\0']), ('\u{583}', ['\u{553}',
+        '\0', '\0']), ('\u{584}', ['\u{554}', '\0', '\0']), ('\u{585}', ['\u{555}', '\0', '\0']),
+        ('\u{586}', ['\u{556}', '\0', '\0']), ('\u{587}', ['\u{535}', '\u{552}', '\0']),
+        ('\u{13f8}', ['\u{13f0}', '\0', '\0']), ('\u{13f9}', ['\u{13f1}', '\0', '\0']), ('\u{13fa}',
+        ['\u{13f2}', '\0', '\0']), ('\u{13fb}', ['\u{13f3}', '\0', '\0']), ('\u{13fc}', ['\u{13f4}',
+        '\0', '\0']), ('\u{13fd}', ['\u{13f5}', '\0', '\0']), ('\u{1d79}', ['\u{a77d}', '\0',
+        '\0']), ('\u{1d7d}', ['\u{2c63}', '\0', '\0']), ('\u{1e01}', ['\u{1e00}', '\0', '\0']),
+        ('\u{1e03}', ['\u{1e02}', '\0', '\0']), ('\u{1e05}', ['\u{1e04}', '\0', '\0']), ('\u{1e07}',
+        ['\u{1e06}', '\0', '\0']), ('\u{1e09}', ['\u{1e08}', '\0', '\0']), ('\u{1e0b}', ['\u{1e0a}',
+        '\0', '\0']), ('\u{1e0d}', ['\u{1e0c}', '\0', '\0']), ('\u{1e0f}', ['\u{1e0e}', '\0',
+        '\0']), ('\u{1e11}', ['\u{1e10}', '\0', '\0']), ('\u{1e13}', ['\u{1e12}', '\0', '\0']),
+        ('\u{1e15}', ['\u{1e14}', '\0', '\0']), ('\u{1e17}', ['\u{1e16}', '\0', '\0']), ('\u{1e19}',
+        ['\u{1e18}', '\0', '\0']), ('\u{1e1b}', ['\u{1e1a}', '\0', '\0']), ('\u{1e1d}', ['\u{1e1c}',
+        '\0', '\0']), ('\u{1e1f}', ['\u{1e1e}', '\0', '\0']), ('\u{1e21}', ['\u{1e20}', '\0',
+        '\0']), ('\u{1e23}', ['\u{1e22}', '\0', '\0']), ('\u{1e25}', ['\u{1e24}', '\0', '\0']),
+        ('\u{1e27}', ['\u{1e26}', '\0', '\0']), ('\u{1e29}', ['\u{1e28}', '\0', '\0']), ('\u{1e2b}',
+        ['\u{1e2a}', '\0', '\0']), ('\u{1e2d}', ['\u{1e2c}', '\0', '\0']), ('\u{1e2f}', ['\u{1e2e}',
+        '\0', '\0']), ('\u{1e31}', ['\u{1e30}', '\0', '\0']), ('\u{1e33}', ['\u{1e32}', '\0',
+        '\0']), ('\u{1e35}', ['\u{1e34}', '\0', '\0']), ('\u{1e37}', ['\u{1e36}', '\0', '\0']),
+        ('\u{1e39}', ['\u{1e38}', '\0', '\0']), ('\u{1e3b}', ['\u{1e3a}', '\0', '\0']), ('\u{1e3d}',
+        ['\u{1e3c}', '\0', '\0']), ('\u{1e3f}', ['\u{1e3e}', '\0', '\0']), ('\u{1e41}', ['\u{1e40}',
+        '\0', '\0']), ('\u{1e43}', ['\u{1e42}', '\0', '\0']), ('\u{1e45}', ['\u{1e44}', '\0',
+        '\0']), ('\u{1e47}', ['\u{1e46}', '\0', '\0']), ('\u{1e49}', ['\u{1e48}', '\0', '\0']),
+        ('\u{1e4b}', ['\u{1e4a}', '\0', '\0']), ('\u{1e4d}', ['\u{1e4c}', '\0', '\0']), ('\u{1e4f}',
+        ['\u{1e4e}', '\0', '\0']), ('\u{1e51}', ['\u{1e50}', '\0', '\0']), ('\u{1e53}', ['\u{1e52}',
+        '\0', '\0']), ('\u{1e55}', ['\u{1e54}', '\0', '\0']), ('\u{1e57}', ['\u{1e56}', '\0',
+        '\0']), ('\u{1e59}', ['\u{1e58}', '\0', '\0']), ('\u{1e5b}', ['\u{1e5a}', '\0', '\0']),
+        ('\u{1e5d}', ['\u{1e5c}', '\0', '\0']), ('\u{1e5f}', ['\u{1e5e}', '\0', '\0']), ('\u{1e61}',
+        ['\u{1e60}', '\0', '\0']), ('\u{1e63}', ['\u{1e62}', '\0', '\0']), ('\u{1e65}', ['\u{1e64}',
+        '\0', '\0']), ('\u{1e67}', ['\u{1e66}', '\0', '\0']), ('\u{1e69}', ['\u{1e68}', '\0',
+        '\0']), ('\u{1e6b}', ['\u{1e6a}', '\0', '\0']), ('\u{1e6d}', ['\u{1e6c}', '\0', '\0']),
+        ('\u{1e6f}', ['\u{1e6e}', '\0', '\0']), ('\u{1e71}', ['\u{1e70}', '\0', '\0']), ('\u{1e73}',
+        ['\u{1e72}', '\0', '\0']), ('\u{1e75}', ['\u{1e74}', '\0', '\0']), ('\u{1e77}', ['\u{1e76}',
+        '\0', '\0']), ('\u{1e79}', ['\u{1e78}', '\0', '\0']), ('\u{1e7b}', ['\u{1e7a}', '\0',
+        '\0']), ('\u{1e7d}', ['\u{1e7c}', '\0', '\0']), ('\u{1e7f}', ['\u{1e7e}', '\0', '\0']),
+        ('\u{1e81}', ['\u{1e80}', '\0', '\0']), ('\u{1e83}', ['\u{1e82}', '\0', '\0']), ('\u{1e85}',
+        ['\u{1e84}', '\0', '\0']), ('\u{1e87}', ['\u{1e86}', '\0', '\0']), ('\u{1e89}', ['\u{1e88}',
+        '\0', '\0']), ('\u{1e8b}', ['\u{1e8a}', '\0', '\0']), ('\u{1e8d}', ['\u{1e8c}', '\0',
+        '\0']), ('\u{1e8f}', ['\u{1e8e}', '\0', '\0']), ('\u{1e91}', ['\u{1e90}', '\0', '\0']),
+        ('\u{1e93}', ['\u{1e92}', '\0', '\0']), ('\u{1e95}', ['\u{1e94}', '\0', '\0']), ('\u{1e96}',
+        ['\u{48}', '\u{331}', '\0']), ('\u{1e97}', ['\u{54}', '\u{308}', '\0']), ('\u{1e98}',
+        ['\u{57}', '\u{30a}', '\0']), ('\u{1e99}', ['\u{59}', '\u{30a}', '\0']), ('\u{1e9a}',
+        ['\u{41}', '\u{2be}', '\0']), ('\u{1e9b}', ['\u{1e60}', '\0', '\0']), ('\u{1ea1}',
+        ['\u{1ea0}', '\0', '\0']), ('\u{1ea3}', ['\u{1ea2}', '\0', '\0']), ('\u{1ea5}', ['\u{1ea4}',
+        '\0', '\0']), ('\u{1ea7}', ['\u{1ea6}', '\0', '\0']), ('\u{1ea9}', ['\u{1ea8}', '\0',
+        '\0']), ('\u{1eab}', ['\u{1eaa}', '\0', '\0']), ('\u{1ead}', ['\u{1eac}', '\0', '\0']),
+        ('\u{1eaf}', ['\u{1eae}', '\0', '\0']), ('\u{1eb1}', ['\u{1eb0}', '\0', '\0']), ('\u{1eb3}',
+        ['\u{1eb2}', '\0', '\0']), ('\u{1eb5}', ['\u{1eb4}', '\0', '\0']), ('\u{1eb7}', ['\u{1eb6}',
+        '\0', '\0']), ('\u{1eb9}', ['\u{1eb8}', '\0', '\0']), ('\u{1ebb}', ['\u{1eba}', '\0',
+        '\0']), ('\u{1ebd}', ['\u{1ebc}', '\0', '\0']), ('\u{1ebf}', ['\u{1ebe}', '\0', '\0']),
+        ('\u{1ec1}', ['\u{1ec0}', '\0', '\0']), ('\u{1ec3}', ['\u{1ec2}', '\0', '\0']), ('\u{1ec5}',
+        ['\u{1ec4}', '\0', '\0']), ('\u{1ec7}', ['\u{1ec6}', '\0', '\0']), ('\u{1ec9}', ['\u{1ec8}',
+        '\0', '\0']), ('\u{1ecb}', ['\u{1eca}', '\0', '\0']), ('\u{1ecd}', ['\u{1ecc}', '\0',
+        '\0']), ('\u{1ecf}', ['\u{1ece}', '\0', '\0']), ('\u{1ed1}', ['\u{1ed0}', '\0', '\0']),
+        ('\u{1ed3}', ['\u{1ed2}', '\0', '\0']), ('\u{1ed5}', ['\u{1ed4}', '\0', '\0']), ('\u{1ed7}',
+        ['\u{1ed6}', '\0', '\0']), ('\u{1ed9}', ['\u{1ed8}', '\0', '\0']), ('\u{1edb}', ['\u{1eda}',
+        '\0', '\0']), ('\u{1edd}', ['\u{1edc}', '\0', '\0']), ('\u{1edf}', ['\u{1ede}', '\0',
+        '\0']), ('\u{1ee1}', ['\u{1ee0}', '\0', '\0']), ('\u{1ee3}', ['\u{1ee2}', '\0', '\0']),
+        ('\u{1ee5}', ['\u{1ee4}', '\0', '\0']), ('\u{1ee7}', ['\u{1ee6}', '\0', '\0']), ('\u{1ee9}',
+        ['\u{1ee8}', '\0', '\0']), ('\u{1eeb}', ['\u{1eea}', '\0', '\0']), ('\u{1eed}', ['\u{1eec}',
+        '\0', '\0']), ('\u{1eef}', ['\u{1eee}', '\0', '\0']), ('\u{1ef1}', ['\u{1ef0}', '\0',
+        '\0']), ('\u{1ef3}', ['\u{1ef2}', '\0', '\0']), ('\u{1ef5}', ['\u{1ef4}', '\0', '\0']),
+        ('\u{1ef7}', ['\u{1ef6}', '\0', '\0']), ('\u{1ef9}', ['\u{1ef8}', '\0', '\0']), ('\u{1efb}',
+        ['\u{1efa}', '\0', '\0']), ('\u{1efd}', ['\u{1efc}', '\0', '\0']), ('\u{1eff}', ['\u{1efe}',
+        '\0', '\0']), ('\u{1f00}', ['\u{1f08}', '\0', '\0']), ('\u{1f01}', ['\u{1f09}', '\0',
+        '\0']), ('\u{1f02}', ['\u{1f0a}', '\0', '\0']), ('\u{1f03}', ['\u{1f0b}', '\0', '\0']),
+        ('\u{1f04}', ['\u{1f0c}', '\0', '\0']), ('\u{1f05}', ['\u{1f0d}', '\0', '\0']), ('\u{1f06}',
+        ['\u{1f0e}', '\0', '\0']), ('\u{1f07}', ['\u{1f0f}', '\0', '\0']), ('\u{1f10}', ['\u{1f18}',
+        '\0', '\0']), ('\u{1f11}', ['\u{1f19}', '\0', '\0']), ('\u{1f12}', ['\u{1f1a}', '\0',
+        '\0']), ('\u{1f13}', ['\u{1f1b}', '\0', '\0']), ('\u{1f14}', ['\u{1f1c}', '\0', '\0']),
+        ('\u{1f15}', ['\u{1f1d}', '\0', '\0']), ('\u{1f20}', ['\u{1f28}', '\0', '\0']), ('\u{1f21}',
+        ['\u{1f29}', '\0', '\0']), ('\u{1f22}', ['\u{1f2a}', '\0', '\0']), ('\u{1f23}', ['\u{1f2b}',
+        '\0', '\0']), ('\u{1f24}', ['\u{1f2c}', '\0', '\0']), ('\u{1f25}', ['\u{1f2d}', '\0',
+        '\0']), ('\u{1f26}', ['\u{1f2e}', '\0', '\0']), ('\u{1f27}', ['\u{1f2f}', '\0', '\0']),
+        ('\u{1f30}', ['\u{1f38}', '\0', '\0']), ('\u{1f31}', ['\u{1f39}', '\0', '\0']), ('\u{1f32}',
+        ['\u{1f3a}', '\0', '\0']), ('\u{1f33}', ['\u{1f3b}', '\0', '\0']), ('\u{1f34}', ['\u{1f3c}',
+        '\0', '\0']), ('\u{1f35}', ['\u{1f3d}', '\0', '\0']), ('\u{1f36}', ['\u{1f3e}', '\0',
+        '\0']), ('\u{1f37}', ['\u{1f3f}', '\0', '\0']), ('\u{1f40}', ['\u{1f48}', '\0', '\0']),
+        ('\u{1f41}', ['\u{1f49}', '\0', '\0']), ('\u{1f42}', ['\u{1f4a}', '\0', '\0']), ('\u{1f43}',
+        ['\u{1f4b}', '\0', '\0']), ('\u{1f44}', ['\u{1f4c}', '\0', '\0']), ('\u{1f45}', ['\u{1f4d}',
+        '\0', '\0']), ('\u{1f50}', ['\u{3a5}', '\u{313}', '\0']), ('\u{1f51}', ['\u{1f59}', '\0',
+        '\0']), ('\u{1f52}', ['\u{3a5}', '\u{313}', '\u{300}']), ('\u{1f53}', ['\u{1f5b}', '\0',
+        '\0']), ('\u{1f54}', ['\u{3a5}', '\u{313}', '\u{301}']), ('\u{1f55}', ['\u{1f5d}', '\0',
+        '\0']), ('\u{1f56}', ['\u{3a5}', '\u{313}', '\u{342}']), ('\u{1f57}', ['\u{1f5f}', '\0',
+        '\0']), ('\u{1f60}', ['\u{1f68}', '\0', '\0']), ('\u{1f61}', ['\u{1f69}', '\0', '\0']),
+        ('\u{1f62}', ['\u{1f6a}', '\0', '\0']), ('\u{1f63}', ['\u{1f6b}', '\0', '\0']), ('\u{1f64}',
+        ['\u{1f6c}', '\0', '\0']), ('\u{1f65}', ['\u{1f6d}', '\0', '\0']), ('\u{1f66}', ['\u{1f6e}',
+        '\0', '\0']), ('\u{1f67}', ['\u{1f6f}', '\0', '\0']), ('\u{1f70}', ['\u{1fba}', '\0',
+        '\0']), ('\u{1f71}', ['\u{1fbb}', '\0', '\0']), ('\u{1f72}', ['\u{1fc8}', '\0', '\0']),
+        ('\u{1f73}', ['\u{1fc9}', '\0', '\0']), ('\u{1f74}', ['\u{1fca}', '\0', '\0']), ('\u{1f75}',
+        ['\u{1fcb}', '\0', '\0']), ('\u{1f76}', ['\u{1fda}', '\0', '\0']), ('\u{1f77}', ['\u{1fdb}',
+        '\0', '\0']), ('\u{1f78}', ['\u{1ff8}', '\0', '\0']), ('\u{1f79}', ['\u{1ff9}', '\0',
+        '\0']), ('\u{1f7a}', ['\u{1fea}', '\0', '\0']), ('\u{1f7b}', ['\u{1feb}', '\0', '\0']),
+        ('\u{1f7c}', ['\u{1ffa}', '\0', '\0']), ('\u{1f7d}', ['\u{1ffb}', '\0', '\0']), ('\u{1f80}',
+        ['\u{1f08}', '\u{399}', '\0']), ('\u{1f81}', ['\u{1f09}', '\u{399}', '\0']), ('\u{1f82}',
+        ['\u{1f0a}', '\u{399}', '\0']), ('\u{1f83}', ['\u{1f0b}', '\u{399}', '\0']), ('\u{1f84}',
+        ['\u{1f0c}', '\u{399}', '\0']), ('\u{1f85}', ['\u{1f0d}', '\u{399}', '\0']), ('\u{1f86}',
+        ['\u{1f0e}', '\u{399}', '\0']), ('\u{1f87}', ['\u{1f0f}', '\u{399}', '\0']), ('\u{1f88}',
+        ['\u{1f08}', '\u{399}', '\0']), ('\u{1f89}', ['\u{1f09}', '\u{399}', '\0']), ('\u{1f8a}',
+        ['\u{1f0a}', '\u{399}', '\0']), ('\u{1f8b}', ['\u{1f0b}', '\u{399}', '\0']), ('\u{1f8c}',
+        ['\u{1f0c}', '\u{399}', '\0']), ('\u{1f8d}', ['\u{1f0d}', '\u{399}', '\0']), ('\u{1f8e}',
+        ['\u{1f0e}', '\u{399}', '\0']), ('\u{1f8f}', ['\u{1f0f}', '\u{399}', '\0']), ('\u{1f90}',
+        ['\u{1f28}', '\u{399}', '\0']), ('\u{1f91}', ['\u{1f29}', '\u{399}', '\0']), ('\u{1f92}',
+        ['\u{1f2a}', '\u{399}', '\0']), ('\u{1f93}', ['\u{1f2b}', '\u{399}', '\0']), ('\u{1f94}',
+        ['\u{1f2c}', '\u{399}', '\0']), ('\u{1f95}', ['\u{1f2d}', '\u{399}', '\0']), ('\u{1f96}',
+        ['\u{1f2e}', '\u{399}', '\0']), ('\u{1f97}', ['\u{1f2f}', '\u{399}', '\0']), ('\u{1f98}',
+        ['\u{1f28}', '\u{399}', '\0']), ('\u{1f99}', ['\u{1f29}', '\u{399}', '\0']), ('\u{1f9a}',
+        ['\u{1f2a}', '\u{399}', '\0']), ('\u{1f9b}', ['\u{1f2b}', '\u{399}', '\0']), ('\u{1f9c}',
+        ['\u{1f2c}', '\u{399}', '\0']), ('\u{1f9d}', ['\u{1f2d}', '\u{399}', '\0']), ('\u{1f9e}',
+        ['\u{1f2e}', '\u{399}', '\0']), ('\u{1f9f}', ['\u{1f2f}', '\u{399}', '\0']), ('\u{1fa0}',
+        ['\u{1f68}', '\u{399}', '\0']), ('\u{1fa1}', ['\u{1f69}', '\u{399}', '\0']), ('\u{1fa2}',
+        ['\u{1f6a}', '\u{399}', '\0']), ('\u{1fa3}', ['\u{1f6b}', '\u{399}', '\0']), ('\u{1fa4}',
+        ['\u{1f6c}', '\u{399}', '\0']), ('\u{1fa5}', ['\u{1f6d}', '\u{399}', '\0']), ('\u{1fa6}',
+        ['\u{1f6e}', '\u{399}', '\0']), ('\u{1fa7}', ['\u{1f6f}', '\u{399}', '\0']), ('\u{1fa8}',
+        ['\u{1f68}', '\u{399}', '\0']), ('\u{1fa9}', ['\u{1f69}', '\u{399}', '\0']), ('\u{1faa}',
+        ['\u{1f6a}', '\u{399}', '\0']), ('\u{1fab}', ['\u{1f6b}', '\u{399}', '\0']), ('\u{1fac}',
+        ['\u{1f6c}', '\u{399}', '\0']), ('\u{1fad}', ['\u{1f6d}', '\u{399}', '\0']), ('\u{1fae}',
+        ['\u{1f6e}', '\u{399}', '\0']), ('\u{1faf}', ['\u{1f6f}', '\u{399}', '\0']), ('\u{1fb0}',
+        ['\u{1fb8}', '\0', '\0']), ('\u{1fb1}', ['\u{1fb9}', '\0', '\0']), ('\u{1fb2}', ['\u{1fba}',
+        '\u{399}', '\0']), ('\u{1fb3}', ['\u{391}', '\u{399}', '\0']), ('\u{1fb4}', ['\u{386}',
+        '\u{399}', '\0']), ('\u{1fb6}', ['\u{391}', '\u{342}', '\0']), ('\u{1fb7}', ['\u{391}',
+        '\u{342}', '\u{399}']), ('\u{1fbc}', ['\u{391}', '\u{399}', '\0']), ('\u{1fbe}', ['\u{399}',
+        '\0', '\0']), ('\u{1fc2}', ['\u{1fca}', '\u{399}', '\0']), ('\u{1fc3}', ['\u{397}',
+        '\u{399}', '\0']), ('\u{1fc4}', ['\u{389}', '\u{399}', '\0']), ('\u{1fc6}', ['\u{397}',
+        '\u{342}', '\0']), ('\u{1fc7}', ['\u{397}', '\u{342}', '\u{399}']), ('\u{1fcc}', ['\u{397}',
+        '\u{399}', '\0']), ('\u{1fd0}', ['\u{1fd8}', '\0', '\0']), ('\u{1fd1}', ['\u{1fd9}', '\0',
+        '\0']), ('\u{1fd2}', ['\u{399}', '\u{308}', '\u{300}']), ('\u{1fd3}', ['\u{399}', '\u{308}',
         '\u{301}']), ('\u{1fd6}', ['\u{399}', '\u{342}', '\0']), ('\u{1fd7}', ['\u{399}', '\u{308}',
         '\u{342}']), ('\u{1fe0}', ['\u{1fe8}', '\0', '\0']), ('\u{1fe1}', ['\u{1fe9}', '\0', '\0']),
         ('\u{1fe2}', ['\u{3a5}', '\u{308}', '\u{300}']), ('\u{1fe3}', ['\u{3a5}', '\u{308}',
@@ -4855,802 +2242,124 @@ pub mod conversions {
         '\0', '\0']), ('\u{a79b}', ['\u{a79a}', '\0', '\0']), ('\u{a79d}', ['\u{a79c}', '\0',
         '\0']), ('\u{a79f}', ['\u{a79e}', '\0', '\0']), ('\u{a7a1}', ['\u{a7a0}', '\0', '\0']),
         ('\u{a7a3}', ['\u{a7a2}', '\0', '\0']), ('\u{a7a5}', ['\u{a7a4}', '\0', '\0']), ('\u{a7a7}',
-        ['\u{a7a6}', '\0', '\0']), ('\u{a7a9}', ['\u{a7a8}', '\0', '\0']), ('\u{fb00}', ['\u{46}',
-        '\u{46}', '\0']), ('\u{fb01}', ['\u{46}', '\u{49}', '\0']), ('\u{fb02}', ['\u{46}',
-        '\u{4c}', '\0']), ('\u{fb03}', ['\u{46}', '\u{46}', '\u{49}']), ('\u{fb04}', ['\u{46}',
-        '\u{46}', '\u{4c}']), ('\u{fb05}', ['\u{53}', '\u{54}', '\0']), ('\u{fb06}', ['\u{53}',
-        '\u{54}', '\0']), ('\u{fb13}', ['\u{544}', '\u{546}', '\0']), ('\u{fb14}', ['\u{544}',
-        '\u{535}', '\0']), ('\u{fb15}', ['\u{544}', '\u{53b}', '\0']), ('\u{fb16}', ['\u{54e}',
-        '\u{546}', '\0']), ('\u{fb17}', ['\u{544}', '\u{53d}', '\0']), ('\u{ff41}', ['\u{ff21}',
-        '\0', '\0']), ('\u{ff42}', ['\u{ff22}', '\0', '\0']), ('\u{ff43}', ['\u{ff23}', '\0',
-        '\0']), ('\u{ff44}', ['\u{ff24}', '\0', '\0']), ('\u{ff45}', ['\u{ff25}', '\0', '\0']),
-        ('\u{ff46}', ['\u{ff26}', '\0', '\0']), ('\u{ff47}', ['\u{ff27}', '\0', '\0']), ('\u{ff48}',
-        ['\u{ff28}', '\0', '\0']), ('\u{ff49}', ['\u{ff29}', '\0', '\0']), ('\u{ff4a}', ['\u{ff2a}',
-        '\0', '\0']), ('\u{ff4b}', ['\u{ff2b}', '\0', '\0']), ('\u{ff4c}', ['\u{ff2c}', '\0',
-        '\0']), ('\u{ff4d}', ['\u{ff2d}', '\0', '\0']), ('\u{ff4e}', ['\u{ff2e}', '\0', '\0']),
-        ('\u{ff4f}', ['\u{ff2f}', '\0', '\0']), ('\u{ff50}', ['\u{ff30}', '\0', '\0']), ('\u{ff51}',
-        ['\u{ff31}', '\0', '\0']), ('\u{ff52}', ['\u{ff32}', '\0', '\0']), ('\u{ff53}', ['\u{ff33}',
-        '\0', '\0']), ('\u{ff54}', ['\u{ff34}', '\0', '\0']), ('\u{ff55}', ['\u{ff35}', '\0',
-        '\0']), ('\u{ff56}', ['\u{ff36}', '\0', '\0']), ('\u{ff57}', ['\u{ff37}', '\0', '\0']),
-        ('\u{ff58}', ['\u{ff38}', '\0', '\0']), ('\u{ff59}', ['\u{ff39}', '\0', '\0']), ('\u{ff5a}',
-        ['\u{ff3a}', '\0', '\0']), ('\u{10428}', ['\u{10400}', '\0', '\0']), ('\u{10429}',
-        ['\u{10401}', '\0', '\0']), ('\u{1042a}', ['\u{10402}', '\0', '\0']), ('\u{1042b}',
-        ['\u{10403}', '\0', '\0']), ('\u{1042c}', ['\u{10404}', '\0', '\0']), ('\u{1042d}',
-        ['\u{10405}', '\0', '\0']), ('\u{1042e}', ['\u{10406}', '\0', '\0']), ('\u{1042f}',
-        ['\u{10407}', '\0', '\0']), ('\u{10430}', ['\u{10408}', '\0', '\0']), ('\u{10431}',
-        ['\u{10409}', '\0', '\0']), ('\u{10432}', ['\u{1040a}', '\0', '\0']), ('\u{10433}',
-        ['\u{1040b}', '\0', '\0']), ('\u{10434}', ['\u{1040c}', '\0', '\0']), ('\u{10435}',
-        ['\u{1040d}', '\0', '\0']), ('\u{10436}', ['\u{1040e}', '\0', '\0']), ('\u{10437}',
-        ['\u{1040f}', '\0', '\0']), ('\u{10438}', ['\u{10410}', '\0', '\0']), ('\u{10439}',
-        ['\u{10411}', '\0', '\0']), ('\u{1043a}', ['\u{10412}', '\0', '\0']), ('\u{1043b}',
-        ['\u{10413}', '\0', '\0']), ('\u{1043c}', ['\u{10414}', '\0', '\0']), ('\u{1043d}',
-        ['\u{10415}', '\0', '\0']), ('\u{1043e}', ['\u{10416}', '\0', '\0']), ('\u{1043f}',
-        ['\u{10417}', '\0', '\0']), ('\u{10440}', ['\u{10418}', '\0', '\0']), ('\u{10441}',
-        ['\u{10419}', '\0', '\0']), ('\u{10442}', ['\u{1041a}', '\0', '\0']), ('\u{10443}',
-        ['\u{1041b}', '\0', '\0']), ('\u{10444}', ['\u{1041c}', '\0', '\0']), ('\u{10445}',
-        ['\u{1041d}', '\0', '\0']), ('\u{10446}', ['\u{1041e}', '\0', '\0']), ('\u{10447}',
-        ['\u{1041f}', '\0', '\0']), ('\u{10448}', ['\u{10420}', '\0', '\0']), ('\u{10449}',
-        ['\u{10421}', '\0', '\0']), ('\u{1044a}', ['\u{10422}', '\0', '\0']), ('\u{1044b}',
-        ['\u{10423}', '\0', '\0']), ('\u{1044c}', ['\u{10424}', '\0', '\0']), ('\u{1044d}',
-        ['\u{10425}', '\0', '\0']), ('\u{1044e}', ['\u{10426}', '\0', '\0']), ('\u{1044f}',
-        ['\u{10427}', '\0', '\0']), ('\u{118c0}', ['\u{118a0}', '\0', '\0']), ('\u{118c1}',
-        ['\u{118a1}', '\0', '\0']), ('\u{118c2}', ['\u{118a2}', '\0', '\0']), ('\u{118c3}',
-        ['\u{118a3}', '\0', '\0']), ('\u{118c4}', ['\u{118a4}', '\0', '\0']), ('\u{118c5}',
-        ['\u{118a5}', '\0', '\0']), ('\u{118c6}', ['\u{118a6}', '\0', '\0']), ('\u{118c7}',
-        ['\u{118a7}', '\0', '\0']), ('\u{118c8}', ['\u{118a8}', '\0', '\0']), ('\u{118c9}',
-        ['\u{118a9}', '\0', '\0']), ('\u{118ca}', ['\u{118aa}', '\0', '\0']), ('\u{118cb}',
-        ['\u{118ab}', '\0', '\0']), ('\u{118cc}', ['\u{118ac}', '\0', '\0']), ('\u{118cd}',
-        ['\u{118ad}', '\0', '\0']), ('\u{118ce}', ['\u{118ae}', '\0', '\0']), ('\u{118cf}',
-        ['\u{118af}', '\0', '\0']), ('\u{118d0}', ['\u{118b0}', '\0', '\0']), ('\u{118d1}',
-        ['\u{118b1}', '\0', '\0']), ('\u{118d2}', ['\u{118b2}', '\0', '\0']), ('\u{118d3}',
-        ['\u{118b3}', '\0', '\0']), ('\u{118d4}', ['\u{118b4}', '\0', '\0']), ('\u{118d5}',
-        ['\u{118b5}', '\0', '\0']), ('\u{118d6}', ['\u{118b6}', '\0', '\0']), ('\u{118d7}',
-        ['\u{118b7}', '\0', '\0']), ('\u{118d8}', ['\u{118b8}', '\0', '\0']), ('\u{118d9}',
-        ['\u{118b9}', '\0', '\0']), ('\u{118da}', ['\u{118ba}', '\0', '\0']), ('\u{118db}',
-        ['\u{118bb}', '\0', '\0']), ('\u{118dc}', ['\u{118bc}', '\0', '\0']), ('\u{118dd}',
-        ['\u{118bd}', '\0', '\0']), ('\u{118de}', ['\u{118be}', '\0', '\0']), ('\u{118df}',
-        ['\u{118bf}', '\0', '\0'])
-    ];
-
-}
-
-pub mod charwidth {
-    use core::option::Option;
-    use core::option::Option::{Some, None};
-    use core::slice::SliceExt;
-    use core::result::Result::{Ok, Err};
-
-    fn bsearch_range_value_table(c: char, is_cjk: bool, r: &'static [(char, char, u8, u8)]) -> u8 {
-        use core::cmp::Ordering::{Equal, Less, Greater};
-        match r.binary_search_by(|&(lo, hi, _, _)| {
-            if lo <= c && c <= hi { Equal }
-            else if hi < c { Less }
-            else { Greater }
-        }) {
-            Ok(idx) => {
-                let (_, _, r_ncjk, r_cjk) = r[idx];
-                if is_cjk { r_cjk } else { r_ncjk }
-            }
-            Err(_) => 1
-        }
-    }
-
-    pub fn width(c: char, is_cjk: bool) -> Option<usize> {
-        match c as usize {
-            _c @ 0 => Some(0),          // null is zero width
-            cu if cu < 0x20 => None,    // control sequences have no width
-            cu if cu < 0x7F => Some(1), // ASCII
-            cu if cu < 0xA0 => None,    // more control sequences
-            _ => Some(bsearch_range_value_table(c, is_cjk, charwidth_table) as usize)
-        }
-    }
-
-    // character width table. Based on Markus Kuhn's free wcwidth() implementation,
-    //     http://www.cl.cam.ac.uk/~mgk25/ucs/wcwidth.c
-    const charwidth_table: &'static [(char, char, u8, u8)] = &[
-        ('\u{a1}', '\u{a1}', 1, 2), ('\u{a4}', '\u{a4}', 1, 2), ('\u{a7}', '\u{a8}', 1, 2),
-        ('\u{aa}', '\u{aa}', 1, 2), ('\u{ae}', '\u{ae}', 1, 2), ('\u{b0}', '\u{b4}', 1, 2),
-        ('\u{b6}', '\u{ba}', 1, 2), ('\u{bc}', '\u{bf}', 1, 2), ('\u{c6}', '\u{c6}', 1, 2),
-        ('\u{d0}', '\u{d0}', 1, 2), ('\u{d7}', '\u{d8}', 1, 2), ('\u{de}', '\u{e1}', 1, 2),
-        ('\u{e6}', '\u{e6}', 1, 2), ('\u{e8}', '\u{ea}', 1, 2), ('\u{ec}', '\u{ed}', 1, 2),
-        ('\u{f0}', '\u{f0}', 1, 2), ('\u{f2}', '\u{f3}', 1, 2), ('\u{f7}', '\u{fa}', 1, 2),
-        ('\u{fc}', '\u{fc}', 1, 2), ('\u{fe}', '\u{fe}', 1, 2), ('\u{101}', '\u{101}', 1, 2),
-        ('\u{111}', '\u{111}', 1, 2), ('\u{113}', '\u{113}', 1, 2), ('\u{11b}', '\u{11b}', 1, 2),
-        ('\u{126}', '\u{127}', 1, 2), ('\u{12b}', '\u{12b}', 1, 2), ('\u{131}', '\u{133}', 1, 2),
-        ('\u{138}', '\u{138}', 1, 2), ('\u{13f}', '\u{142}', 1, 2), ('\u{144}', '\u{144}', 1, 2),
-        ('\u{148}', '\u{14b}', 1, 2), ('\u{14d}', '\u{14d}', 1, 2), ('\u{152}', '\u{153}', 1, 2),
-        ('\u{166}', '\u{167}', 1, 2), ('\u{16b}', '\u{16b}', 1, 2), ('\u{1ce}', '\u{1ce}', 1, 2),
-        ('\u{1d0}', '\u{1d0}', 1, 2), ('\u{1d2}', '\u{1d2}', 1, 2), ('\u{1d4}', '\u{1d4}', 1, 2),
-        ('\u{1d6}', '\u{1d6}', 1, 2), ('\u{1d8}', '\u{1d8}', 1, 2), ('\u{1da}', '\u{1da}', 1, 2),
-        ('\u{1dc}', '\u{1dc}', 1, 2), ('\u{251}', '\u{251}', 1, 2), ('\u{261}', '\u{261}', 1, 2),
-        ('\u{2c4}', '\u{2c4}', 1, 2), ('\u{2c7}', '\u{2c7}', 1, 2), ('\u{2c9}', '\u{2cb}', 1, 2),
-        ('\u{2cd}', '\u{2cd}', 1, 2), ('\u{2d0}', '\u{2d0}', 1, 2), ('\u{2d8}', '\u{2db}', 1, 2),
-        ('\u{2dd}', '\u{2dd}', 1, 2), ('\u{2df}', '\u{2df}', 1, 2), ('\u{300}', '\u{36f}', 0, 0),
-        ('\u{391}', '\u{3a1}', 1, 2), ('\u{3a3}', '\u{3a9}', 1, 2), ('\u{3b1}', '\u{3c1}', 1, 2),
-        ('\u{3c3}', '\u{3c9}', 1, 2), ('\u{401}', '\u{401}', 1, 2), ('\u{410}', '\u{44f}', 1, 2),
-        ('\u{451}', '\u{451}', 1, 2), ('\u{483}', '\u{489}', 0, 0), ('\u{591}', '\u{5bd}', 0, 0),
-        ('\u{5bf}', '\u{5bf}', 0, 0), ('\u{5c1}', '\u{5c2}', 0, 0), ('\u{5c4}', '\u{5c5}', 0, 0),
-        ('\u{5c7}', '\u{5c7}', 0, 0), ('\u{600}', '\u{605}', 0, 0), ('\u{610}', '\u{61a}', 0, 0),
-        ('\u{61c}', '\u{61c}', 0, 0), ('\u{64b}', '\u{65f}', 0, 0), ('\u{670}', '\u{670}', 0, 0),
-        ('\u{6d6}', '\u{6dd}', 0, 0), ('\u{6df}', '\u{6e4}', 0, 0), ('\u{6e7}', '\u{6e8}', 0, 0),
-        ('\u{6ea}', '\u{6ed}', 0, 0), ('\u{70f}', '\u{70f}', 0, 0), ('\u{711}', '\u{711}', 0, 0),
-        ('\u{730}', '\u{74a}', 0, 0), ('\u{7a6}', '\u{7b0}', 0, 0), ('\u{7eb}', '\u{7f3}', 0, 0),
-        ('\u{816}', '\u{819}', 0, 0), ('\u{81b}', '\u{823}', 0, 0), ('\u{825}', '\u{827}', 0, 0),
-        ('\u{829}', '\u{82d}', 0, 0), ('\u{859}', '\u{85b}', 0, 0), ('\u{8e4}', '\u{902}', 0, 0),
-        ('\u{93a}', '\u{93a}', 0, 0), ('\u{93c}', '\u{93c}', 0, 0), ('\u{941}', '\u{948}', 0, 0),
-        ('\u{94d}', '\u{94d}', 0, 0), ('\u{951}', '\u{957}', 0, 0), ('\u{962}', '\u{963}', 0, 0),
-        ('\u{981}', '\u{981}', 0, 0), ('\u{9bc}', '\u{9bc}', 0, 0), ('\u{9c1}', '\u{9c4}', 0, 0),
-        ('\u{9cd}', '\u{9cd}', 0, 0), ('\u{9e2}', '\u{9e3}', 0, 0), ('\u{a01}', '\u{a02}', 0, 0),
-        ('\u{a3c}', '\u{a3c}', 0, 0), ('\u{a41}', '\u{a42}', 0, 0), ('\u{a47}', '\u{a48}', 0, 0),
-        ('\u{a4b}', '\u{a4d}', 0, 0), ('\u{a51}', '\u{a51}', 0, 0), ('\u{a70}', '\u{a71}', 0, 0),
-        ('\u{a75}', '\u{a75}', 0, 0), ('\u{a81}', '\u{a82}', 0, 0), ('\u{abc}', '\u{abc}', 0, 0),
-        ('\u{ac1}', '\u{ac5}', 0, 0), ('\u{ac7}', '\u{ac8}', 0, 0), ('\u{acd}', '\u{acd}', 0, 0),
-        ('\u{ae2}', '\u{ae3}', 0, 0), ('\u{b01}', '\u{b01}', 0, 0), ('\u{b3c}', '\u{b3c}', 0, 0),
-        ('\u{b3f}', '\u{b3f}', 0, 0), ('\u{b41}', '\u{b44}', 0, 0), ('\u{b4d}', '\u{b4d}', 0, 0),
-        ('\u{b56}', '\u{b56}', 0, 0), ('\u{b62}', '\u{b63}', 0, 0), ('\u{b82}', '\u{b82}', 0, 0),
-        ('\u{bc0}', '\u{bc0}', 0, 0), ('\u{bcd}', '\u{bcd}', 0, 0), ('\u{c00}', '\u{c00}', 0, 0),
-        ('\u{c3e}', '\u{c40}', 0, 0), ('\u{c46}', '\u{c48}', 0, 0), ('\u{c4a}', '\u{c4d}', 0, 0),
-        ('\u{c55}', '\u{c56}', 0, 0), ('\u{c62}', '\u{c63}', 0, 0), ('\u{c81}', '\u{c81}', 0, 0),
-        ('\u{cbc}', '\u{cbc}', 0, 0), ('\u{cbf}', '\u{cbf}', 0, 0), ('\u{cc6}', '\u{cc6}', 0, 0),
-        ('\u{ccc}', '\u{ccd}', 0, 0), ('\u{ce2}', '\u{ce3}', 0, 0), ('\u{d01}', '\u{d01}', 0, 0),
-        ('\u{d41}', '\u{d44}', 0, 0), ('\u{d4d}', '\u{d4d}', 0, 0), ('\u{d62}', '\u{d63}', 0, 0),
-        ('\u{dca}', '\u{dca}', 0, 0), ('\u{dd2}', '\u{dd4}', 0, 0), ('\u{dd6}', '\u{dd6}', 0, 0),
-        ('\u{e31}', '\u{e31}', 0, 0), ('\u{e34}', '\u{e3a}', 0, 0), ('\u{e47}', '\u{e4e}', 0, 0),
-        ('\u{eb1}', '\u{eb1}', 0, 0), ('\u{eb4}', '\u{eb9}', 0, 0), ('\u{ebb}', '\u{ebc}', 0, 0),
-        ('\u{ec8}', '\u{ecd}', 0, 0), ('\u{f18}', '\u{f19}', 0, 0), ('\u{f35}', '\u{f35}', 0, 0),
-        ('\u{f37}', '\u{f37}', 0, 0), ('\u{f39}', '\u{f39}', 0, 0), ('\u{f71}', '\u{f7e}', 0, 0),
-        ('\u{f80}', '\u{f84}', 0, 0), ('\u{f86}', '\u{f87}', 0, 0), ('\u{f8d}', '\u{f97}', 0, 0),
-        ('\u{f99}', '\u{fbc}', 0, 0), ('\u{fc6}', '\u{fc6}', 0, 0), ('\u{102d}', '\u{1030}', 0, 0),
-        ('\u{1032}', '\u{1037}', 0, 0), ('\u{1039}', '\u{103a}', 0, 0), ('\u{103d}', '\u{103e}', 0,
-        0), ('\u{1058}', '\u{1059}', 0, 0), ('\u{105e}', '\u{1060}', 0, 0), ('\u{1071}', '\u{1074}',
-        0, 0), ('\u{1082}', '\u{1082}', 0, 0), ('\u{1085}', '\u{1086}', 0, 0), ('\u{108d}',
-        '\u{108d}', 0, 0), ('\u{109d}', '\u{109d}', 0, 0), ('\u{1100}', '\u{115f}', 2, 2),
-        ('\u{1160}', '\u{11ff}', 0, 0), ('\u{135d}', '\u{135f}', 0, 0), ('\u{1712}', '\u{1714}', 0,
-        0), ('\u{1732}', '\u{1734}', 0, 0), ('\u{1752}', '\u{1753}', 0, 0), ('\u{1772}', '\u{1773}',
-        0, 0), ('\u{17b4}', '\u{17b5}', 0, 0), ('\u{17b7}', '\u{17bd}', 0, 0), ('\u{17c6}',
-        '\u{17c6}', 0, 0), ('\u{17c9}', '\u{17d3}', 0, 0), ('\u{17dd}', '\u{17dd}', 0, 0),
-        ('\u{180b}', '\u{180e}', 0, 0), ('\u{18a9}', '\u{18a9}', 0, 0), ('\u{1920}', '\u{1922}', 0,
-        0), ('\u{1927}', '\u{1928}', 0, 0), ('\u{1932}', '\u{1932}', 0, 0), ('\u{1939}', '\u{193b}',
-        0, 0), ('\u{1a17}', '\u{1a18}', 0, 0), ('\u{1a1b}', '\u{1a1b}', 0, 0), ('\u{1a56}',
-        '\u{1a56}', 0, 0), ('\u{1a58}', '\u{1a5e}', 0, 0), ('\u{1a60}', '\u{1a60}', 0, 0),
-        ('\u{1a62}', '\u{1a62}', 0, 0), ('\u{1a65}', '\u{1a6c}', 0, 0), ('\u{1a73}', '\u{1a7c}', 0,
-        0), ('\u{1a7f}', '\u{1a7f}', 0, 0), ('\u{1ab0}', '\u{1abe}', 0, 0), ('\u{1b00}', '\u{1b03}',
-        0, 0), ('\u{1b34}', '\u{1b34}', 0, 0), ('\u{1b36}', '\u{1b3a}', 0, 0), ('\u{1b3c}',
-        '\u{1b3c}', 0, 0), ('\u{1b42}', '\u{1b42}', 0, 0), ('\u{1b6b}', '\u{1b73}', 0, 0),
-        ('\u{1b80}', '\u{1b81}', 0, 0), ('\u{1ba2}', '\u{1ba5}', 0, 0), ('\u{1ba8}', '\u{1ba9}', 0,
-        0), ('\u{1bab}', '\u{1bad}', 0, 0), ('\u{1be6}', '\u{1be6}', 0, 0), ('\u{1be8}', '\u{1be9}',
-        0, 0), ('\u{1bed}', '\u{1bed}', 0, 0), ('\u{1bef}', '\u{1bf1}', 0, 0), ('\u{1c2c}',
-        '\u{1c33}', 0, 0), ('\u{1c36}', '\u{1c37}', 0, 0), ('\u{1cd0}', '\u{1cd2}', 0, 0),
-        ('\u{1cd4}', '\u{1ce0}', 0, 0), ('\u{1ce2}', '\u{1ce8}', 0, 0), ('\u{1ced}', '\u{1ced}', 0,
-        0), ('\u{1cf4}', '\u{1cf4}', 0, 0), ('\u{1cf8}', '\u{1cf9}', 0, 0), ('\u{1dc0}', '\u{1df5}',
-        0, 0), ('\u{1dfc}', '\u{1dff}', 0, 0), ('\u{200b}', '\u{200f}', 0, 0), ('\u{2010}',
-        '\u{2010}', 1, 2), ('\u{2013}', '\u{2016}', 1, 2), ('\u{2018}', '\u{2019}', 1, 2),
-        ('\u{201c}', '\u{201d}', 1, 2), ('\u{2020}', '\u{2022}', 1, 2), ('\u{2024}', '\u{2027}', 1,
-        2), ('\u{202a}', '\u{202e}', 0, 0), ('\u{2030}', '\u{2030}', 1, 2), ('\u{2032}', '\u{2033}',
-        1, 2), ('\u{2035}', '\u{2035}', 1, 2), ('\u{203b}', '\u{203b}', 1, 2), ('\u{203e}',
-        '\u{203e}', 1, 2), ('\u{2060}', '\u{2064}', 0, 0), ('\u{2066}', '\u{206f}', 0, 0),
-        ('\u{2074}', '\u{2074}', 1, 2), ('\u{207f}', '\u{207f}', 1, 2), ('\u{2081}', '\u{2084}', 1,
-        2), ('\u{20ac}', '\u{20ac}', 1, 2), ('\u{20d0}', '\u{20f0}', 0, 0), ('\u{2103}', '\u{2103}',
-        1, 2), ('\u{2105}', '\u{2105}', 1, 2), ('\u{2109}', '\u{2109}', 1, 2), ('\u{2113}',
-        '\u{2113}', 1, 2), ('\u{2116}', '\u{2116}', 1, 2), ('\u{2121}', '\u{2122}', 1, 2),
-        ('\u{2126}', '\u{2126}', 1, 2), ('\u{212b}', '\u{212b}', 1, 2), ('\u{2153}', '\u{2154}', 1,
-        2), ('\u{215b}', '\u{215e}', 1, 2), ('\u{2160}', '\u{216b}', 1, 2), ('\u{2170}', '\u{2179}',
-        1, 2), ('\u{2189}', '\u{2189}', 1, 2), ('\u{2190}', '\u{2199}', 1, 2), ('\u{21b8}',
-        '\u{21b9}', 1, 2), ('\u{21d2}', '\u{21d2}', 1, 2), ('\u{21d4}', '\u{21d4}', 1, 2),
-        ('\u{21e7}', '\u{21e7}', 1, 2), ('\u{2200}', '\u{2200}', 1, 2), ('\u{2202}', '\u{2203}', 1,
-        2), ('\u{2207}', '\u{2208}', 1, 2), ('\u{220b}', '\u{220b}', 1, 2), ('\u{220f}', '\u{220f}',
-        1, 2), ('\u{2211}', '\u{2211}', 1, 2), ('\u{2215}', '\u{2215}', 1, 2), ('\u{221a}',
-        '\u{221a}', 1, 2), ('\u{221d}', '\u{2220}', 1, 2), ('\u{2223}', '\u{2223}', 1, 2),
-        ('\u{2225}', '\u{2225}', 1, 2), ('\u{2227}', '\u{222c}', 1, 2), ('\u{222e}', '\u{222e}', 1,
-        2), ('\u{2234}', '\u{2237}', 1, 2), ('\u{223c}', '\u{223d}', 1, 2), ('\u{2248}', '\u{2248}',
-        1, 2), ('\u{224c}', '\u{224c}', 1, 2), ('\u{2252}', '\u{2252}', 1, 2), ('\u{2260}',
-        '\u{2261}', 1, 2), ('\u{2264}', '\u{2267}', 1, 2), ('\u{226a}', '\u{226b}', 1, 2),
-        ('\u{226e}', '\u{226f}', 1, 2), ('\u{2282}', '\u{2283}', 1, 2), ('\u{2286}', '\u{2287}', 1,
-        2), ('\u{2295}', '\u{2295}', 1, 2), ('\u{2299}', '\u{2299}', 1, 2), ('\u{22a5}', '\u{22a5}',
-        1, 2), ('\u{22bf}', '\u{22bf}', 1, 2), ('\u{2312}', '\u{2312}', 1, 2), ('\u{2329}',
-        '\u{232a}', 2, 2), ('\u{2460}', '\u{24e9}', 1, 2), ('\u{24eb}', '\u{254b}', 1, 2),
-        ('\u{2550}', '\u{2573}', 1, 2), ('\u{2580}', '\u{258f}', 1, 2), ('\u{2592}', '\u{2595}', 1,
-        2), ('\u{25a0}', '\u{25a1}', 1, 2), ('\u{25a3}', '\u{25a9}', 1, 2), ('\u{25b2}', '\u{25b3}',
-        1, 2), ('\u{25b6}', '\u{25b7}', 1, 2), ('\u{25bc}', '\u{25bd}', 1, 2), ('\u{25c0}',
-        '\u{25c1}', 1, 2), ('\u{25c6}', '\u{25c8}', 1, 2), ('\u{25cb}', '\u{25cb}', 1, 2),
-        ('\u{25ce}', '\u{25d1}', 1, 2), ('\u{25e2}', '\u{25e5}', 1, 2), ('\u{25ef}', '\u{25ef}', 1,
-        2), ('\u{2605}', '\u{2606}', 1, 2), ('\u{2609}', '\u{2609}', 1, 2), ('\u{260e}', '\u{260f}',
-        1, 2), ('\u{2614}', '\u{2615}', 1, 2), ('\u{261c}', '\u{261c}', 1, 2), ('\u{261e}',
-        '\u{261e}', 1, 2), ('\u{2640}', '\u{2640}', 1, 2), ('\u{2642}', '\u{2642}', 1, 2),
-        ('\u{2660}', '\u{2661}', 1, 2), ('\u{2663}', '\u{2665}', 1, 2), ('\u{2667}', '\u{266a}', 1,
-        2), ('\u{266c}', '\u{266d}', 1, 2), ('\u{266f}', '\u{266f}', 1, 2), ('\u{269e}', '\u{269f}',
-        1, 2), ('\u{26be}', '\u{26bf}', 1, 2), ('\u{26c4}', '\u{26cd}', 1, 2), ('\u{26cf}',
-        '\u{26e1}', 1, 2), ('\u{26e3}', '\u{26e3}', 1, 2), ('\u{26e8}', '\u{26ff}', 1, 2),
-        ('\u{273d}', '\u{273d}', 1, 2), ('\u{2757}', '\u{2757}', 1, 2), ('\u{2776}', '\u{277f}', 1,
-        2), ('\u{2b55}', '\u{2b59}', 1, 2), ('\u{2cef}', '\u{2cf1}', 0, 0), ('\u{2d7f}', '\u{2d7f}',
-        0, 0), ('\u{2de0}', '\u{2dff}', 0, 0), ('\u{2e80}', '\u{2e99}', 2, 2), ('\u{2e9b}',
-        '\u{2ef3}', 2, 2), ('\u{2f00}', '\u{2fd5}', 2, 2), ('\u{2ff0}', '\u{2ffb}', 2, 2),
-        ('\u{3000}', '\u{3029}', 2, 2), ('\u{302a}', '\u{302d}', 0, 0), ('\u{302e}', '\u{303e}', 2,
-        2), ('\u{3041}', '\u{3096}', 2, 2), ('\u{3099}', '\u{309a}', 0, 0), ('\u{309b}', '\u{30ff}',
-        2, 2), ('\u{3105}', '\u{312d}', 2, 2), ('\u{3131}', '\u{318e}', 2, 2), ('\u{3190}',
-        '\u{31ba}', 2, 2), ('\u{31c0}', '\u{31e3}', 2, 2), ('\u{31f0}', '\u{321e}', 2, 2),
-        ('\u{3220}', '\u{3247}', 2, 2), ('\u{3248}', '\u{324f}', 1, 2), ('\u{3250}', '\u{32fe}', 2,
-        2), ('\u{3300}', '\u{4dbf}', 2, 2), ('\u{4e00}', '\u{a48c}', 2, 2), ('\u{a490}', '\u{a4c6}',
-        2, 2), ('\u{a66f}', '\u{a672}', 0, 0), ('\u{a674}', '\u{a67d}', 0, 0), ('\u{a69f}',
-        '\u{a69f}', 0, 0), ('\u{a6f0}', '\u{a6f1}', 0, 0), ('\u{a802}', '\u{a802}', 0, 0),
-        ('\u{a806}', '\u{a806}', 0, 0), ('\u{a80b}', '\u{a80b}', 0, 0), ('\u{a825}', '\u{a826}', 0,
-        0), ('\u{a8c4}', '\u{a8c4}', 0, 0), ('\u{a8e0}', '\u{a8f1}', 0, 0), ('\u{a926}', '\u{a92d}',
-        0, 0), ('\u{a947}', '\u{a951}', 0, 0), ('\u{a960}', '\u{a97c}', 2, 2), ('\u{a980}',
-        '\u{a982}', 0, 0), ('\u{a9b3}', '\u{a9b3}', 0, 0), ('\u{a9b6}', '\u{a9b9}', 0, 0),
-        ('\u{a9bc}', '\u{a9bc}', 0, 0), ('\u{a9e5}', '\u{a9e5}', 0, 0), ('\u{aa29}', '\u{aa2e}', 0,
-        0), ('\u{aa31}', '\u{aa32}', 0, 0), ('\u{aa35}', '\u{aa36}', 0, 0), ('\u{aa43}', '\u{aa43}',
-        0, 0), ('\u{aa4c}', '\u{aa4c}', 0, 0), ('\u{aa7c}', '\u{aa7c}', 0, 0), ('\u{aab0}',
-        '\u{aab0}', 0, 0), ('\u{aab2}', '\u{aab4}', 0, 0), ('\u{aab7}', '\u{aab8}', 0, 0),
-        ('\u{aabe}', '\u{aabf}', 0, 0), ('\u{aac1}', '\u{aac1}', 0, 0), ('\u{aaec}', '\u{aaed}', 0,
-        0), ('\u{aaf6}', '\u{aaf6}', 0, 0), ('\u{abe5}', '\u{abe5}', 0, 0), ('\u{abe8}', '\u{abe8}',
-        0, 0), ('\u{abed}', '\u{abed}', 0, 0), ('\u{ac00}', '\u{d7a3}', 2, 2), ('\u{e000}',
-        '\u{f8ff}', 1, 2), ('\u{f900}', '\u{faff}', 2, 2), ('\u{fb1e}', '\u{fb1e}', 0, 0),
-        ('\u{fe00}', '\u{fe0f}', 0, 0), ('\u{fe10}', '\u{fe19}', 2, 2), ('\u{fe20}', '\u{fe2d}', 0,
-        0), ('\u{fe30}', '\u{fe52}', 2, 2), ('\u{fe54}', '\u{fe66}', 2, 2), ('\u{fe68}', '\u{fe6b}',
-        2, 2), ('\u{feff}', '\u{feff}', 0, 0), ('\u{ff01}', '\u{ff60}', 2, 2), ('\u{ffe0}',
-        '\u{ffe6}', 2, 2), ('\u{fff9}', '\u{fffb}', 0, 0), ('\u{fffd}', '\u{fffd}', 1, 2),
-        ('\u{101fd}', '\u{101fd}', 0, 0), ('\u{102e0}', '\u{102e0}', 0, 0), ('\u{10376}',
-        '\u{1037a}', 0, 0), ('\u{10a01}', '\u{10a03}', 0, 0), ('\u{10a05}', '\u{10a06}', 0, 0),
-        ('\u{10a0c}', '\u{10a0f}', 0, 0), ('\u{10a38}', '\u{10a3a}', 0, 0), ('\u{10a3f}',
-        '\u{10a3f}', 0, 0), ('\u{10ae5}', '\u{10ae6}', 0, 0), ('\u{11001}', '\u{11001}', 0, 0),
-        ('\u{11038}', '\u{11046}', 0, 0), ('\u{1107f}', '\u{11081}', 0, 0), ('\u{110b3}',
-        '\u{110b6}', 0, 0), ('\u{110b9}', '\u{110ba}', 0, 0), ('\u{110bd}', '\u{110bd}', 0, 0),
-        ('\u{11100}', '\u{11102}', 0, 0), ('\u{11127}', '\u{1112b}', 0, 0), ('\u{1112d}',
-        '\u{11134}', 0, 0), ('\u{11173}', '\u{11173}', 0, 0), ('\u{11180}', '\u{11181}', 0, 0),
-        ('\u{111b6}', '\u{111be}', 0, 0), ('\u{1122f}', '\u{11231}', 0, 0), ('\u{11234}',
-        '\u{11234}', 0, 0), ('\u{11236}', '\u{11237}', 0, 0), ('\u{112df}', '\u{112df}', 0, 0),
-        ('\u{112e3}', '\u{112ea}', 0, 0), ('\u{11301}', '\u{11301}', 0, 0), ('\u{1133c}',
-        '\u{1133c}', 0, 0), ('\u{11340}', '\u{11340}', 0, 0), ('\u{11366}', '\u{1136c}', 0, 0),
-        ('\u{11370}', '\u{11374}', 0, 0), ('\u{114b3}', '\u{114b8}', 0, 0), ('\u{114ba}',
-        '\u{114ba}', 0, 0), ('\u{114bf}', '\u{114c0}', 0, 0), ('\u{114c2}', '\u{114c3}', 0, 0),
-        ('\u{115b2}', '\u{115b5}', 0, 0), ('\u{115bc}', '\u{115bd}', 0, 0), ('\u{115bf}',
-        '\u{115c0}', 0, 0), ('\u{11633}', '\u{1163a}', 0, 0), ('\u{1163d}', '\u{1163d}', 0, 0),
-        ('\u{1163f}', '\u{11640}', 0, 0), ('\u{116ab}', '\u{116ab}', 0, 0), ('\u{116ad}',
-        '\u{116ad}', 0, 0), ('\u{116b0}', '\u{116b5}', 0, 0), ('\u{116b7}', '\u{116b7}', 0, 0),
-        ('\u{16af0}', '\u{16af4}', 0, 0), ('\u{16b30}', '\u{16b36}', 0, 0), ('\u{16f8f}',
-        '\u{16f92}', 0, 0), ('\u{1b000}', '\u{1b001}', 2, 2), ('\u{1bc9d}', '\u{1bc9e}', 0, 0),
-        ('\u{1bca0}', '\u{1bca3}', 0, 0), ('\u{1d167}', '\u{1d169}', 0, 0), ('\u{1d173}',
-        '\u{1d182}', 0, 0), ('\u{1d185}', '\u{1d18b}', 0, 0), ('\u{1d1aa}', '\u{1d1ad}', 0, 0),
-        ('\u{1d242}', '\u{1d244}', 0, 0), ('\u{1e8d0}', '\u{1e8d6}', 0, 0), ('\u{1f100}',
-        '\u{1f10a}', 1, 2), ('\u{1f110}', '\u{1f12d}', 1, 2), ('\u{1f130}', '\u{1f169}', 1, 2),
-        ('\u{1f170}', '\u{1f19a}', 1, 2), ('\u{1f200}', '\u{1f202}', 2, 2), ('\u{1f210}',
-        '\u{1f23a}', 2, 2), ('\u{1f240}', '\u{1f248}', 2, 2), ('\u{1f250}', '\u{1f251}', 2, 2),
-        ('\u{20000}', '\u{2fffd}', 2, 2), ('\u{30000}', '\u{3fffd}', 2, 2), ('\u{e0001}',
-        '\u{e0001}', 0, 0), ('\u{e0020}', '\u{e007f}', 0, 0), ('\u{e0100}', '\u{e01ef}', 0, 0),
-        ('\u{f0000}', '\u{ffffd}', 1, 2), ('\u{100000}', '\u{10fffd}', 1, 2)
+        ['\u{a7a6}', '\0', '\0']), ('\u{a7a9}', ['\u{a7a8}', '\0', '\0']), ('\u{a7b5}', ['\u{a7b4}',
+        '\0', '\0']), ('\u{a7b7}', ['\u{a7b6}', '\0', '\0']), ('\u{ab53}', ['\u{a7b3}', '\0',
+        '\0']), ('\u{ab70}', ['\u{13a0}', '\0', '\0']), ('\u{ab71}', ['\u{13a1}', '\0', '\0']),
+        ('\u{ab72}', ['\u{13a2}', '\0', '\0']), ('\u{ab73}', ['\u{13a3}', '\0', '\0']), ('\u{ab74}',
+        ['\u{13a4}', '\0', '\0']), ('\u{ab75}', ['\u{13a5}', '\0', '\0']), ('\u{ab76}', ['\u{13a6}',
+        '\0', '\0']), ('\u{ab77}', ['\u{13a7}', '\0', '\0']), ('\u{ab78}', ['\u{13a8}', '\0',
+        '\0']), ('\u{ab79}', ['\u{13a9}', '\0', '\0']), ('\u{ab7a}', ['\u{13aa}', '\0', '\0']),
+        ('\u{ab7b}', ['\u{13ab}', '\0', '\0']), ('\u{ab7c}', ['\u{13ac}', '\0', '\0']), ('\u{ab7d}',
+        ['\u{13ad}', '\0', '\0']), ('\u{ab7e}', ['\u{13ae}', '\0', '\0']), ('\u{ab7f}', ['\u{13af}',
+        '\0', '\0']), ('\u{ab80}', ['\u{13b0}', '\0', '\0']), ('\u{ab81}', ['\u{13b1}', '\0',
+        '\0']), ('\u{ab82}', ['\u{13b2}', '\0', '\0']), ('\u{ab83}', ['\u{13b3}', '\0', '\0']),
+        ('\u{ab84}', ['\u{13b4}', '\0', '\0']), ('\u{ab85}', ['\u{13b5}', '\0', '\0']), ('\u{ab86}',
+        ['\u{13b6}', '\0', '\0']), ('\u{ab87}', ['\u{13b7}', '\0', '\0']), ('\u{ab88}', ['\u{13b8}',
+        '\0', '\0']), ('\u{ab89}', ['\u{13b9}', '\0', '\0']), ('\u{ab8a}', ['\u{13ba}', '\0',
+        '\0']), ('\u{ab8b}', ['\u{13bb}', '\0', '\0']), ('\u{ab8c}', ['\u{13bc}', '\0', '\0']),
+        ('\u{ab8d}', ['\u{13bd}', '\0', '\0']), ('\u{ab8e}', ['\u{13be}', '\0', '\0']), ('\u{ab8f}',
+        ['\u{13bf}', '\0', '\0']), ('\u{ab90}', ['\u{13c0}', '\0', '\0']), ('\u{ab91}', ['\u{13c1}',
+        '\0', '\0']), ('\u{ab92}', ['\u{13c2}', '\0', '\0']), ('\u{ab93}', ['\u{13c3}', '\0',
+        '\0']), ('\u{ab94}', ['\u{13c4}', '\0', '\0']), ('\u{ab95}', ['\u{13c5}', '\0', '\0']),
+        ('\u{ab96}', ['\u{13c6}', '\0', '\0']), ('\u{ab97}', ['\u{13c7}', '\0', '\0']), ('\u{ab98}',
+        ['\u{13c8}', '\0', '\0']), ('\u{ab99}', ['\u{13c9}', '\0', '\0']), ('\u{ab9a}', ['\u{13ca}',
+        '\0', '\0']), ('\u{ab9b}', ['\u{13cb}', '\0', '\0']), ('\u{ab9c}', ['\u{13cc}', '\0',
+        '\0']), ('\u{ab9d}', ['\u{13cd}', '\0', '\0']), ('\u{ab9e}', ['\u{13ce}', '\0', '\0']),
+        ('\u{ab9f}', ['\u{13cf}', '\0', '\0']), ('\u{aba0}', ['\u{13d0}', '\0', '\0']), ('\u{aba1}',
+        ['\u{13d1}', '\0', '\0']), ('\u{aba2}', ['\u{13d2}', '\0', '\0']), ('\u{aba3}', ['\u{13d3}',
+        '\0', '\0']), ('\u{aba4}', ['\u{13d4}', '\0', '\0']), ('\u{aba5}', ['\u{13d5}', '\0',
+        '\0']), ('\u{aba6}', ['\u{13d6}', '\0', '\0']), ('\u{aba7}', ['\u{13d7}', '\0', '\0']),
+        ('\u{aba8}', ['\u{13d8}', '\0', '\0']), ('\u{aba9}', ['\u{13d9}', '\0', '\0']), ('\u{abaa}',
+        ['\u{13da}', '\0', '\0']), ('\u{abab}', ['\u{13db}', '\0', '\0']), ('\u{abac}', ['\u{13dc}',
+        '\0', '\0']), ('\u{abad}', ['\u{13dd}', '\0', '\0']), ('\u{abae}', ['\u{13de}', '\0',
+        '\0']), ('\u{abaf}', ['\u{13df}', '\0', '\0']), ('\u{abb0}', ['\u{13e0}', '\0', '\0']),
+        ('\u{abb1}', ['\u{13e1}', '\0', '\0']), ('\u{abb2}', ['\u{13e2}', '\0', '\0']), ('\u{abb3}',
+        ['\u{13e3}', '\0', '\0']), ('\u{abb4}', ['\u{13e4}', '\0', '\0']), ('\u{abb5}', ['\u{13e5}',
+        '\0', '\0']), ('\u{abb6}', ['\u{13e6}', '\0', '\0']), ('\u{abb7}', ['\u{13e7}', '\0',
+        '\0']), ('\u{abb8}', ['\u{13e8}', '\0', '\0']), ('\u{abb9}', ['\u{13e9}', '\0', '\0']),
+        ('\u{abba}', ['\u{13ea}', '\0', '\0']), ('\u{abbb}', ['\u{13eb}', '\0', '\0']), ('\u{abbc}',
+        ['\u{13ec}', '\0', '\0']), ('\u{abbd}', ['\u{13ed}', '\0', '\0']), ('\u{abbe}', ['\u{13ee}',
+        '\0', '\0']), ('\u{abbf}', ['\u{13ef}', '\0', '\0']), ('\u{fb00}', ['\u{46}', '\u{46}',
+        '\0']), ('\u{fb01}', ['\u{46}', '\u{49}', '\0']), ('\u{fb02}', ['\u{46}', '\u{4c}', '\0']),
+        ('\u{fb03}', ['\u{46}', '\u{46}', '\u{49}']), ('\u{fb04}', ['\u{46}', '\u{46}', '\u{4c}']),
+        ('\u{fb05}', ['\u{53}', '\u{54}', '\0']), ('\u{fb06}', ['\u{53}', '\u{54}', '\0']),
+        ('\u{fb13}', ['\u{544}', '\u{546}', '\0']), ('\u{fb14}', ['\u{544}', '\u{535}', '\0']),
+        ('\u{fb15}', ['\u{544}', '\u{53b}', '\0']), ('\u{fb16}', ['\u{54e}', '\u{546}', '\0']),
+        ('\u{fb17}', ['\u{544}', '\u{53d}', '\0']), ('\u{ff41}', ['\u{ff21}', '\0', '\0']),
+        ('\u{ff42}', ['\u{ff22}', '\0', '\0']), ('\u{ff43}', ['\u{ff23}', '\0', '\0']), ('\u{ff44}',
+        ['\u{ff24}', '\0', '\0']), ('\u{ff45}', ['\u{ff25}', '\0', '\0']), ('\u{ff46}', ['\u{ff26}',
+        '\0', '\0']), ('\u{ff47}', ['\u{ff27}', '\0', '\0']), ('\u{ff48}', ['\u{ff28}', '\0',
+        '\0']), ('\u{ff49}', ['\u{ff29}', '\0', '\0']), ('\u{ff4a}', ['\u{ff2a}', '\0', '\0']),
+        ('\u{ff4b}', ['\u{ff2b}', '\0', '\0']), ('\u{ff4c}', ['\u{ff2c}', '\0', '\0']), ('\u{ff4d}',
+        ['\u{ff2d}', '\0', '\0']), ('\u{ff4e}', ['\u{ff2e}', '\0', '\0']), ('\u{ff4f}', ['\u{ff2f}',
+        '\0', '\0']), ('\u{ff50}', ['\u{ff30}', '\0', '\0']), ('\u{ff51}', ['\u{ff31}', '\0',
+        '\0']), ('\u{ff52}', ['\u{ff32}', '\0', '\0']), ('\u{ff53}', ['\u{ff33}', '\0', '\0']),
+        ('\u{ff54}', ['\u{ff34}', '\0', '\0']), ('\u{ff55}', ['\u{ff35}', '\0', '\0']), ('\u{ff56}',
+        ['\u{ff36}', '\0', '\0']), ('\u{ff57}', ['\u{ff37}', '\0', '\0']), ('\u{ff58}', ['\u{ff38}',
+        '\0', '\0']), ('\u{ff59}', ['\u{ff39}', '\0', '\0']), ('\u{ff5a}', ['\u{ff3a}', '\0',
+        '\0']), ('\u{10428}', ['\u{10400}', '\0', '\0']), ('\u{10429}', ['\u{10401}', '\0', '\0']),
+        ('\u{1042a}', ['\u{10402}', '\0', '\0']), ('\u{1042b}', ['\u{10403}', '\0', '\0']),
+        ('\u{1042c}', ['\u{10404}', '\0', '\0']), ('\u{1042d}', ['\u{10405}', '\0', '\0']),
+        ('\u{1042e}', ['\u{10406}', '\0', '\0']), ('\u{1042f}', ['\u{10407}', '\0', '\0']),
+        ('\u{10430}', ['\u{10408}', '\0', '\0']), ('\u{10431}', ['\u{10409}', '\0', '\0']),
+        ('\u{10432}', ['\u{1040a}', '\0', '\0']), ('\u{10433}', ['\u{1040b}', '\0', '\0']),
+        ('\u{10434}', ['\u{1040c}', '\0', '\0']), ('\u{10435}', ['\u{1040d}', '\0', '\0']),
+        ('\u{10436}', ['\u{1040e}', '\0', '\0']), ('\u{10437}', ['\u{1040f}', '\0', '\0']),
+        ('\u{10438}', ['\u{10410}', '\0', '\0']), ('\u{10439}', ['\u{10411}', '\0', '\0']),
+        ('\u{1043a}', ['\u{10412}', '\0', '\0']), ('\u{1043b}', ['\u{10413}', '\0', '\0']),
+        ('\u{1043c}', ['\u{10414}', '\0', '\0']), ('\u{1043d}', ['\u{10415}', '\0', '\0']),
+        ('\u{1043e}', ['\u{10416}', '\0', '\0']), ('\u{1043f}', ['\u{10417}', '\0', '\0']),
+        ('\u{10440}', ['\u{10418}', '\0', '\0']), ('\u{10441}', ['\u{10419}', '\0', '\0']),
+        ('\u{10442}', ['\u{1041a}', '\0', '\0']), ('\u{10443}', ['\u{1041b}', '\0', '\0']),
+        ('\u{10444}', ['\u{1041c}', '\0', '\0']), ('\u{10445}', ['\u{1041d}', '\0', '\0']),
+        ('\u{10446}', ['\u{1041e}', '\0', '\0']), ('\u{10447}', ['\u{1041f}', '\0', '\0']),
+        ('\u{10448}', ['\u{10420}', '\0', '\0']), ('\u{10449}', ['\u{10421}', '\0', '\0']),
+        ('\u{1044a}', ['\u{10422}', '\0', '\0']), ('\u{1044b}', ['\u{10423}', '\0', '\0']),
+        ('\u{1044c}', ['\u{10424}', '\0', '\0']), ('\u{1044d}', ['\u{10425}', '\0', '\0']),
+        ('\u{1044e}', ['\u{10426}', '\0', '\0']), ('\u{1044f}', ['\u{10427}', '\0', '\0']),
+        ('\u{10cc0}', ['\u{10c80}', '\0', '\0']), ('\u{10cc1}', ['\u{10c81}', '\0', '\0']),
+        ('\u{10cc2}', ['\u{10c82}', '\0', '\0']), ('\u{10cc3}', ['\u{10c83}', '\0', '\0']),
+        ('\u{10cc4}', ['\u{10c84}', '\0', '\0']), ('\u{10cc5}', ['\u{10c85}', '\0', '\0']),
+        ('\u{10cc6}', ['\u{10c86}', '\0', '\0']), ('\u{10cc7}', ['\u{10c87}', '\0', '\0']),
+        ('\u{10cc8}', ['\u{10c88}', '\0', '\0']), ('\u{10cc9}', ['\u{10c89}', '\0', '\0']),
+        ('\u{10cca}', ['\u{10c8a}', '\0', '\0']), ('\u{10ccb}', ['\u{10c8b}', '\0', '\0']),
+        ('\u{10ccc}', ['\u{10c8c}', '\0', '\0']), ('\u{10ccd}', ['\u{10c8d}', '\0', '\0']),
+        ('\u{10cce}', ['\u{10c8e}', '\0', '\0']), ('\u{10ccf}', ['\u{10c8f}', '\0', '\0']),
+        ('\u{10cd0}', ['\u{10c90}', '\0', '\0']), ('\u{10cd1}', ['\u{10c91}', '\0', '\0']),
+        ('\u{10cd2}', ['\u{10c92}', '\0', '\0']), ('\u{10cd3}', ['\u{10c93}', '\0', '\0']),
+        ('\u{10cd4}', ['\u{10c94}', '\0', '\0']), ('\u{10cd5}', ['\u{10c95}', '\0', '\0']),
+        ('\u{10cd6}', ['\u{10c96}', '\0', '\0']), ('\u{10cd7}', ['\u{10c97}', '\0', '\0']),
+        ('\u{10cd8}', ['\u{10c98}', '\0', '\0']), ('\u{10cd9}', ['\u{10c99}', '\0', '\0']),
+        ('\u{10cda}', ['\u{10c9a}', '\0', '\0']), ('\u{10cdb}', ['\u{10c9b}', '\0', '\0']),
+        ('\u{10cdc}', ['\u{10c9c}', '\0', '\0']), ('\u{10cdd}', ['\u{10c9d}', '\0', '\0']),
+        ('\u{10cde}', ['\u{10c9e}', '\0', '\0']), ('\u{10cdf}', ['\u{10c9f}', '\0', '\0']),
+        ('\u{10ce0}', ['\u{10ca0}', '\0', '\0']), ('\u{10ce1}', ['\u{10ca1}', '\0', '\0']),
+        ('\u{10ce2}', ['\u{10ca2}', '\0', '\0']), ('\u{10ce3}', ['\u{10ca3}', '\0', '\0']),
+        ('\u{10ce4}', ['\u{10ca4}', '\0', '\0']), ('\u{10ce5}', ['\u{10ca5}', '\0', '\0']),
+        ('\u{10ce6}', ['\u{10ca6}', '\0', '\0']), ('\u{10ce7}', ['\u{10ca7}', '\0', '\0']),
+        ('\u{10ce8}', ['\u{10ca8}', '\0', '\0']), ('\u{10ce9}', ['\u{10ca9}', '\0', '\0']),
+        ('\u{10cea}', ['\u{10caa}', '\0', '\0']), ('\u{10ceb}', ['\u{10cab}', '\0', '\0']),
+        ('\u{10cec}', ['\u{10cac}', '\0', '\0']), ('\u{10ced}', ['\u{10cad}', '\0', '\0']),
+        ('\u{10cee}', ['\u{10cae}', '\0', '\0']), ('\u{10cef}', ['\u{10caf}', '\0', '\0']),
+        ('\u{10cf0}', ['\u{10cb0}', '\0', '\0']), ('\u{10cf1}', ['\u{10cb1}', '\0', '\0']),
+        ('\u{10cf2}', ['\u{10cb2}', '\0', '\0']), ('\u{118c0}', ['\u{118a0}', '\0', '\0']),
+        ('\u{118c1}', ['\u{118a1}', '\0', '\0']), ('\u{118c2}', ['\u{118a2}', '\0', '\0']),
+        ('\u{118c3}', ['\u{118a3}', '\0', '\0']), ('\u{118c4}', ['\u{118a4}', '\0', '\0']),
+        ('\u{118c5}', ['\u{118a5}', '\0', '\0']), ('\u{118c6}', ['\u{118a6}', '\0', '\0']),
+        ('\u{118c7}', ['\u{118a7}', '\0', '\0']), ('\u{118c8}', ['\u{118a8}', '\0', '\0']),
+        ('\u{118c9}', ['\u{118a9}', '\0', '\0']), ('\u{118ca}', ['\u{118aa}', '\0', '\0']),
+        ('\u{118cb}', ['\u{118ab}', '\0', '\0']), ('\u{118cc}', ['\u{118ac}', '\0', '\0']),
+        ('\u{118cd}', ['\u{118ad}', '\0', '\0']), ('\u{118ce}', ['\u{118ae}', '\0', '\0']),
+        ('\u{118cf}', ['\u{118af}', '\0', '\0']), ('\u{118d0}', ['\u{118b0}', '\0', '\0']),
+        ('\u{118d1}', ['\u{118b1}', '\0', '\0']), ('\u{118d2}', ['\u{118b2}', '\0', '\0']),
+        ('\u{118d3}', ['\u{118b3}', '\0', '\0']), ('\u{118d4}', ['\u{118b4}', '\0', '\0']),
+        ('\u{118d5}', ['\u{118b5}', '\0', '\0']), ('\u{118d6}', ['\u{118b6}', '\0', '\0']),
+        ('\u{118d7}', ['\u{118b7}', '\0', '\0']), ('\u{118d8}', ['\u{118b8}', '\0', '\0']),
+        ('\u{118d9}', ['\u{118b9}', '\0', '\0']), ('\u{118da}', ['\u{118ba}', '\0', '\0']),
+        ('\u{118db}', ['\u{118bb}', '\0', '\0']), ('\u{118dc}', ['\u{118bc}', '\0', '\0']),
+        ('\u{118dd}', ['\u{118bd}', '\0', '\0']), ('\u{118de}', ['\u{118be}', '\0', '\0']),
+        ('\u{118df}', ['\u{118bf}', '\0', '\0'])
     ];
 
 }
 
-pub mod grapheme {
-    use core::slice::SliceExt;
-    pub use self::GraphemeCat::*;
-    use core::result::Result::{Ok, Err};
-
-    #[allow(non_camel_case_types)]
-    #[derive(Clone, Copy)]
-    pub enum GraphemeCat {
-        GC_Control,
-        GC_Extend,
-        GC_LVT,
-        GC_V,
-        GC_L,
-        GC_Regional_Indicator,
-        GC_LV,
-        GC_T,
-        GC_SpacingMark,
-        GC_Any,
-    }
-
-    fn bsearch_range_value_table(c: char, r: &'static [(char, char, GraphemeCat)]) -> GraphemeCat {
-        use core::cmp::Ordering::{Equal, Less, Greater};
-        match r.binary_search_by(|&(lo, hi, _)| {
-            if lo <= c && c <= hi { Equal }
-            else if hi < c { Less }
-            else { Greater }
-        }) {
-            Ok(idx) => {
-                let (_, _, cat) = r[idx];
-                cat
-            }
-            Err(_) => GC_Any
-        }
-    }
-
-    pub fn grapheme_category(c: char) -> GraphemeCat {
-        bsearch_range_value_table(c, grapheme_cat_table)
-    }
-
-    const grapheme_cat_table: &'static [(char, char, GraphemeCat)] = &[
-        ('\0', '\u{1f}', GC_Control), ('\u{7f}', '\u{9f}', GC_Control), ('\u{ad}', '\u{ad}',
-        GC_Control), ('\u{300}', '\u{36f}', GC_Extend), ('\u{483}', '\u{489}', GC_Extend),
-        ('\u{591}', '\u{5bd}', GC_Extend), ('\u{5bf}', '\u{5bf}', GC_Extend), ('\u{5c1}', '\u{5c2}',
-        GC_Extend), ('\u{5c4}', '\u{5c5}', GC_Extend), ('\u{5c7}', '\u{5c7}', GC_Extend),
-        ('\u{600}', '\u{605}', GC_Control), ('\u{610}', '\u{61a}', GC_Extend), ('\u{61c}',
-        '\u{61c}', GC_Control), ('\u{64b}', '\u{65f}', GC_Extend), ('\u{670}', '\u{670}',
-        GC_Extend), ('\u{6d6}', '\u{6dc}', GC_Extend), ('\u{6dd}', '\u{6dd}', GC_Control),
-        ('\u{6df}', '\u{6e4}', GC_Extend), ('\u{6e7}', '\u{6e8}', GC_Extend), ('\u{6ea}', '\u{6ed}',
-        GC_Extend), ('\u{70f}', '\u{70f}', GC_Control), ('\u{711}', '\u{711}', GC_Extend),
-        ('\u{730}', '\u{74a}', GC_Extend), ('\u{7a6}', '\u{7b0}', GC_Extend), ('\u{7eb}', '\u{7f3}',
-        GC_Extend), ('\u{816}', '\u{819}', GC_Extend), ('\u{81b}', '\u{823}', GC_Extend),
-        ('\u{825}', '\u{827}', GC_Extend), ('\u{829}', '\u{82d}', GC_Extend), ('\u{859}', '\u{85b}',
-        GC_Extend), ('\u{8e4}', '\u{902}', GC_Extend), ('\u{903}', '\u{903}', GC_SpacingMark),
-        ('\u{93a}', '\u{93a}', GC_Extend), ('\u{93b}', '\u{93b}', GC_SpacingMark), ('\u{93c}',
-        '\u{93c}', GC_Extend), ('\u{93e}', '\u{940}', GC_SpacingMark), ('\u{941}', '\u{948}',
-        GC_Extend), ('\u{949}', '\u{94c}', GC_SpacingMark), ('\u{94d}', '\u{94d}', GC_Extend),
-        ('\u{94e}', '\u{94f}', GC_SpacingMark), ('\u{951}', '\u{957}', GC_Extend), ('\u{962}',
-        '\u{963}', GC_Extend), ('\u{981}', '\u{981}', GC_Extend), ('\u{982}', '\u{983}',
-        GC_SpacingMark), ('\u{9bc}', '\u{9bc}', GC_Extend), ('\u{9be}', '\u{9be}', GC_Extend),
-        ('\u{9bf}', '\u{9c0}', GC_SpacingMark), ('\u{9c1}', '\u{9c4}', GC_Extend), ('\u{9c7}',
-        '\u{9c8}', GC_SpacingMark), ('\u{9cb}', '\u{9cc}', GC_SpacingMark), ('\u{9cd}', '\u{9cd}',
-        GC_Extend), ('\u{9d7}', '\u{9d7}', GC_Extend), ('\u{9e2}', '\u{9e3}', GC_Extend),
-        ('\u{a01}', '\u{a02}', GC_Extend), ('\u{a03}', '\u{a03}', GC_SpacingMark), ('\u{a3c}',
-        '\u{a3c}', GC_Extend), ('\u{a3e}', '\u{a40}', GC_SpacingMark), ('\u{a41}', '\u{a42}',
-        GC_Extend), ('\u{a47}', '\u{a48}', GC_Extend), ('\u{a4b}', '\u{a4d}', GC_Extend),
-        ('\u{a51}', '\u{a51}', GC_Extend), ('\u{a70}', '\u{a71}', GC_Extend), ('\u{a75}', '\u{a75}',
-        GC_Extend), ('\u{a81}', '\u{a82}', GC_Extend), ('\u{a83}', '\u{a83}', GC_SpacingMark),
-        ('\u{abc}', '\u{abc}', GC_Extend), ('\u{abe}', '\u{ac0}', GC_SpacingMark), ('\u{ac1}',
-        '\u{ac5}', GC_Extend), ('\u{ac7}', '\u{ac8}', GC_Extend), ('\u{ac9}', '\u{ac9}',
-        GC_SpacingMark), ('\u{acb}', '\u{acc}', GC_SpacingMark), ('\u{acd}', '\u{acd}', GC_Extend),
-        ('\u{ae2}', '\u{ae3}', GC_Extend), ('\u{b01}', '\u{b01}', GC_Extend), ('\u{b02}', '\u{b03}',
-        GC_SpacingMark), ('\u{b3c}', '\u{b3c}', GC_Extend), ('\u{b3e}', '\u{b3f}', GC_Extend),
-        ('\u{b40}', '\u{b40}', GC_SpacingMark), ('\u{b41}', '\u{b44}', GC_Extend), ('\u{b47}',
-        '\u{b48}', GC_SpacingMark), ('\u{b4b}', '\u{b4c}', GC_SpacingMark), ('\u{b4d}', '\u{b4d}',
-        GC_Extend), ('\u{b56}', '\u{b57}', GC_Extend), ('\u{b62}', '\u{b63}', GC_Extend),
-        ('\u{b82}', '\u{b82}', GC_Extend), ('\u{bbe}', '\u{bbe}', GC_Extend), ('\u{bbf}', '\u{bbf}',
-        GC_SpacingMark), ('\u{bc0}', '\u{bc0}', GC_Extend), ('\u{bc1}', '\u{bc2}', GC_SpacingMark),
-        ('\u{bc6}', '\u{bc8}', GC_SpacingMark), ('\u{bca}', '\u{bcc}', GC_SpacingMark), ('\u{bcd}',
-        '\u{bcd}', GC_Extend), ('\u{bd7}', '\u{bd7}', GC_Extend), ('\u{c00}', '\u{c00}', GC_Extend),
-        ('\u{c01}', '\u{c03}', GC_SpacingMark), ('\u{c3e}', '\u{c40}', GC_Extend), ('\u{c41}',
-        '\u{c44}', GC_SpacingMark), ('\u{c46}', '\u{c48}', GC_Extend), ('\u{c4a}', '\u{c4d}',
-        GC_Extend), ('\u{c55}', '\u{c56}', GC_Extend), ('\u{c62}', '\u{c63}', GC_Extend),
-        ('\u{c81}', '\u{c81}', GC_Extend), ('\u{c82}', '\u{c83}', GC_SpacingMark), ('\u{cbc}',
-        '\u{cbc}', GC_Extend), ('\u{cbe}', '\u{cbe}', GC_SpacingMark), ('\u{cbf}', '\u{cbf}',
-        GC_Extend), ('\u{cc0}', '\u{cc1}', GC_SpacingMark), ('\u{cc2}', '\u{cc2}', GC_Extend),
-        ('\u{cc3}', '\u{cc4}', GC_SpacingMark), ('\u{cc6}', '\u{cc6}', GC_Extend), ('\u{cc7}',
-        '\u{cc8}', GC_SpacingMark), ('\u{cca}', '\u{ccb}', GC_SpacingMark), ('\u{ccc}', '\u{ccd}',
-        GC_Extend), ('\u{cd5}', '\u{cd6}', GC_Extend), ('\u{ce2}', '\u{ce3}', GC_Extend),
-        ('\u{d01}', '\u{d01}', GC_Extend), ('\u{d02}', '\u{d03}', GC_SpacingMark), ('\u{d3e}',
-        '\u{d3e}', GC_Extend), ('\u{d3f}', '\u{d40}', GC_SpacingMark), ('\u{d41}', '\u{d44}',
-        GC_Extend), ('\u{d46}', '\u{d48}', GC_SpacingMark), ('\u{d4a}', '\u{d4c}', GC_SpacingMark),
-        ('\u{d4d}', '\u{d4d}', GC_Extend), ('\u{d57}', '\u{d57}', GC_Extend), ('\u{d62}', '\u{d63}',
-        GC_Extend), ('\u{d82}', '\u{d83}', GC_SpacingMark), ('\u{dca}', '\u{dca}', GC_Extend),
-        ('\u{dcf}', '\u{dcf}', GC_Extend), ('\u{dd0}', '\u{dd1}', GC_SpacingMark), ('\u{dd2}',
-        '\u{dd4}', GC_Extend), ('\u{dd6}', '\u{dd6}', GC_Extend), ('\u{dd8}', '\u{dde}',
-        GC_SpacingMark), ('\u{ddf}', '\u{ddf}', GC_Extend), ('\u{df2}', '\u{df3}', GC_SpacingMark),
-        ('\u{e31}', '\u{e31}', GC_Extend), ('\u{e33}', '\u{e33}', GC_SpacingMark), ('\u{e34}',
-        '\u{e3a}', GC_Extend), ('\u{e47}', '\u{e4e}', GC_Extend), ('\u{eb1}', '\u{eb1}', GC_Extend),
-        ('\u{eb3}', '\u{eb3}', GC_SpacingMark), ('\u{eb4}', '\u{eb9}', GC_Extend), ('\u{ebb}',
-        '\u{ebc}', GC_Extend), ('\u{ec8}', '\u{ecd}', GC_Extend), ('\u{f18}', '\u{f19}', GC_Extend),
-        ('\u{f35}', '\u{f35}', GC_Extend), ('\u{f37}', '\u{f37}', GC_Extend), ('\u{f39}', '\u{f39}',
-        GC_Extend), ('\u{f3e}', '\u{f3f}', GC_SpacingMark), ('\u{f71}', '\u{f7e}', GC_Extend),
-        ('\u{f7f}', '\u{f7f}', GC_SpacingMark), ('\u{f80}', '\u{f84}', GC_Extend), ('\u{f86}',
-        '\u{f87}', GC_Extend), ('\u{f8d}', '\u{f97}', GC_Extend), ('\u{f99}', '\u{fbc}', GC_Extend),
-        ('\u{fc6}', '\u{fc6}', GC_Extend), ('\u{102d}', '\u{1030}', GC_Extend), ('\u{1031}',
-        '\u{1031}', GC_SpacingMark), ('\u{1032}', '\u{1037}', GC_Extend), ('\u{1039}', '\u{103a}',
-        GC_Extend), ('\u{103b}', '\u{103c}', GC_SpacingMark), ('\u{103d}', '\u{103e}', GC_Extend),
-        ('\u{1056}', '\u{1057}', GC_SpacingMark), ('\u{1058}', '\u{1059}', GC_Extend), ('\u{105e}',
-        '\u{1060}', GC_Extend), ('\u{1071}', '\u{1074}', GC_Extend), ('\u{1082}', '\u{1082}',
-        GC_Extend), ('\u{1084}', '\u{1084}', GC_SpacingMark), ('\u{1085}', '\u{1086}', GC_Extend),
-        ('\u{108d}', '\u{108d}', GC_Extend), ('\u{109d}', '\u{109d}', GC_Extend), ('\u{1100}',
-        '\u{115f}', GC_L), ('\u{1160}', '\u{11a7}', GC_V), ('\u{11a8}', '\u{11ff}', GC_T),
-        ('\u{135d}', '\u{135f}', GC_Extend), ('\u{1712}', '\u{1714}', GC_Extend), ('\u{1732}',
-        '\u{1734}', GC_Extend), ('\u{1752}', '\u{1753}', GC_Extend), ('\u{1772}', '\u{1773}',
-        GC_Extend), ('\u{17b4}', '\u{17b5}', GC_Extend), ('\u{17b6}', '\u{17b6}', GC_SpacingMark),
-        ('\u{17b7}', '\u{17bd}', GC_Extend), ('\u{17be}', '\u{17c5}', GC_SpacingMark), ('\u{17c6}',
-        '\u{17c6}', GC_Extend), ('\u{17c7}', '\u{17c8}', GC_SpacingMark), ('\u{17c9}', '\u{17d3}',
-        GC_Extend), ('\u{17dd}', '\u{17dd}', GC_Extend), ('\u{180b}', '\u{180d}', GC_Extend),
-        ('\u{180e}', '\u{180e}', GC_Control), ('\u{18a9}', '\u{18a9}', GC_Extend), ('\u{1920}',
-        '\u{1922}', GC_Extend), ('\u{1923}', '\u{1926}', GC_SpacingMark), ('\u{1927}', '\u{1928}',
-        GC_Extend), ('\u{1929}', '\u{192b}', GC_SpacingMark), ('\u{1930}', '\u{1931}',
-        GC_SpacingMark), ('\u{1932}', '\u{1932}', GC_Extend), ('\u{1933}', '\u{1938}',
-        GC_SpacingMark), ('\u{1939}', '\u{193b}', GC_Extend), ('\u{19b5}', '\u{19b7}',
-        GC_SpacingMark), ('\u{19ba}', '\u{19ba}', GC_SpacingMark), ('\u{1a17}', '\u{1a18}',
-        GC_Extend), ('\u{1a19}', '\u{1a1a}', GC_SpacingMark), ('\u{1a1b}', '\u{1a1b}', GC_Extend),
-        ('\u{1a55}', '\u{1a55}', GC_SpacingMark), ('\u{1a56}', '\u{1a56}', GC_Extend), ('\u{1a57}',
-        '\u{1a57}', GC_SpacingMark), ('\u{1a58}', '\u{1a5e}', GC_Extend), ('\u{1a60}', '\u{1a60}',
-        GC_Extend), ('\u{1a62}', '\u{1a62}', GC_Extend), ('\u{1a65}', '\u{1a6c}', GC_Extend),
-        ('\u{1a6d}', '\u{1a72}', GC_SpacingMark), ('\u{1a73}', '\u{1a7c}', GC_Extend), ('\u{1a7f}',
-        '\u{1a7f}', GC_Extend), ('\u{1ab0}', '\u{1abe}', GC_Extend), ('\u{1b00}', '\u{1b03}',
-        GC_Extend), ('\u{1b04}', '\u{1b04}', GC_SpacingMark), ('\u{1b34}', '\u{1b34}', GC_Extend),
-        ('\u{1b35}', '\u{1b35}', GC_SpacingMark), ('\u{1b36}', '\u{1b3a}', GC_Extend), ('\u{1b3b}',
-        '\u{1b3b}', GC_SpacingMark), ('\u{1b3c}', '\u{1b3c}', GC_Extend), ('\u{1b3d}', '\u{1b41}',
-        GC_SpacingMark), ('\u{1b42}', '\u{1b42}', GC_Extend), ('\u{1b43}', '\u{1b44}',
-        GC_SpacingMark), ('\u{1b6b}', '\u{1b73}', GC_Extend), ('\u{1b80}', '\u{1b81}', GC_Extend),
-        ('\u{1b82}', '\u{1b82}', GC_SpacingMark), ('\u{1ba1}', '\u{1ba1}', GC_SpacingMark),
-        ('\u{1ba2}', '\u{1ba5}', GC_Extend), ('\u{1ba6}', '\u{1ba7}', GC_SpacingMark), ('\u{1ba8}',
-        '\u{1ba9}', GC_Extend), ('\u{1baa}', '\u{1baa}', GC_SpacingMark), ('\u{1bab}', '\u{1bad}',
-        GC_Extend), ('\u{1be6}', '\u{1be6}', GC_Extend), ('\u{1be7}', '\u{1be7}', GC_SpacingMark),
-        ('\u{1be8}', '\u{1be9}', GC_Extend), ('\u{1bea}', '\u{1bec}', GC_SpacingMark), ('\u{1bed}',
-        '\u{1bed}', GC_Extend), ('\u{1bee}', '\u{1bee}', GC_SpacingMark), ('\u{1bef}', '\u{1bf1}',
-        GC_Extend), ('\u{1bf2}', '\u{1bf3}', GC_SpacingMark), ('\u{1c24}', '\u{1c2b}',
-        GC_SpacingMark), ('\u{1c2c}', '\u{1c33}', GC_Extend), ('\u{1c34}', '\u{1c35}',
-        GC_SpacingMark), ('\u{1c36}', '\u{1c37}', GC_Extend), ('\u{1cd0}', '\u{1cd2}', GC_Extend),
-        ('\u{1cd4}', '\u{1ce0}', GC_Extend), ('\u{1ce1}', '\u{1ce1}', GC_SpacingMark), ('\u{1ce2}',
-        '\u{1ce8}', GC_Extend), ('\u{1ced}', '\u{1ced}', GC_Extend), ('\u{1cf2}', '\u{1cf3}',
-        GC_SpacingMark), ('\u{1cf4}', '\u{1cf4}', GC_Extend), ('\u{1cf8}', '\u{1cf9}', GC_Extend),
-        ('\u{1dc0}', '\u{1df5}', GC_Extend), ('\u{1dfc}', '\u{1dff}', GC_Extend), ('\u{200b}',
-        '\u{200b}', GC_Control), ('\u{200c}', '\u{200d}', GC_Extend), ('\u{200e}', '\u{200f}',
-        GC_Control), ('\u{2028}', '\u{202e}', GC_Control), ('\u{2060}', '\u{206f}', GC_Control),
-        ('\u{20d0}', '\u{20f0}', GC_Extend), ('\u{2cef}', '\u{2cf1}', GC_Extend), ('\u{2d7f}',
-        '\u{2d7f}', GC_Extend), ('\u{2de0}', '\u{2dff}', GC_Extend), ('\u{302a}', '\u{302f}',
-        GC_Extend), ('\u{3099}', '\u{309a}', GC_Extend), ('\u{a66f}', '\u{a672}', GC_Extend),
-        ('\u{a674}', '\u{a67d}', GC_Extend), ('\u{a69f}', '\u{a69f}', GC_Extend), ('\u{a6f0}',
-        '\u{a6f1}', GC_Extend), ('\u{a802}', '\u{a802}', GC_Extend), ('\u{a806}', '\u{a806}',
-        GC_Extend), ('\u{a80b}', '\u{a80b}', GC_Extend), ('\u{a823}', '\u{a824}', GC_SpacingMark),
-        ('\u{a825}', '\u{a826}', GC_Extend), ('\u{a827}', '\u{a827}', GC_SpacingMark), ('\u{a880}',
-        '\u{a881}', GC_SpacingMark), ('\u{a8b4}', '\u{a8c3}', GC_SpacingMark), ('\u{a8c4}',
-        '\u{a8c4}', GC_Extend), ('\u{a8e0}', '\u{a8f1}', GC_Extend), ('\u{a926}', '\u{a92d}',
-        GC_Extend), ('\u{a947}', '\u{a951}', GC_Extend), ('\u{a952}', '\u{a953}', GC_SpacingMark),
-        ('\u{a960}', '\u{a97c}', GC_L), ('\u{a980}', '\u{a982}', GC_Extend), ('\u{a983}',
-        '\u{a983}', GC_SpacingMark), ('\u{a9b3}', '\u{a9b3}', GC_Extend), ('\u{a9b4}', '\u{a9b5}',
-        GC_SpacingMark), ('\u{a9b6}', '\u{a9b9}', GC_Extend), ('\u{a9ba}', '\u{a9bb}',
-        GC_SpacingMark), ('\u{a9bc}', '\u{a9bc}', GC_Extend), ('\u{a9bd}', '\u{a9c0}',
-        GC_SpacingMark), ('\u{a9e5}', '\u{a9e5}', GC_Extend), ('\u{aa29}', '\u{aa2e}', GC_Extend),
-        ('\u{aa2f}', '\u{aa30}', GC_SpacingMark), ('\u{aa31}', '\u{aa32}', GC_Extend), ('\u{aa33}',
-        '\u{aa34}', GC_SpacingMark), ('\u{aa35}', '\u{aa36}', GC_Extend), ('\u{aa43}', '\u{aa43}',
-        GC_Extend), ('\u{aa4c}', '\u{aa4c}', GC_Extend), ('\u{aa4d}', '\u{aa4d}', GC_SpacingMark),
-        ('\u{aa7c}', '\u{aa7c}', GC_Extend), ('\u{aab0}', '\u{aab0}', GC_Extend), ('\u{aab2}',
-        '\u{aab4}', GC_Extend), ('\u{aab7}', '\u{aab8}', GC_Extend), ('\u{aabe}', '\u{aabf}',
-        GC_Extend), ('\u{aac1}', '\u{aac1}', GC_Extend), ('\u{aaeb}', '\u{aaeb}', GC_SpacingMark),
-        ('\u{aaec}', '\u{aaed}', GC_Extend), ('\u{aaee}', '\u{aaef}', GC_SpacingMark), ('\u{aaf5}',
-        '\u{aaf5}', GC_SpacingMark), ('\u{aaf6}', '\u{aaf6}', GC_Extend), ('\u{abe3}', '\u{abe4}',
-        GC_SpacingMark), ('\u{abe5}', '\u{abe5}', GC_Extend), ('\u{abe6}', '\u{abe7}',
-        GC_SpacingMark), ('\u{abe8}', '\u{abe8}', GC_Extend), ('\u{abe9}', '\u{abea}',
-        GC_SpacingMark), ('\u{abec}', '\u{abec}', GC_SpacingMark), ('\u{abed}', '\u{abed}',
-        GC_Extend), ('\u{ac00}', '\u{ac00}', GC_LV), ('\u{ac01}', '\u{ac1b}', GC_LVT), ('\u{ac1c}',
-        '\u{ac1c}', GC_LV), ('\u{ac1d}', '\u{ac37}', GC_LVT), ('\u{ac38}', '\u{ac38}', GC_LV),
-        ('\u{ac39}', '\u{ac53}', GC_LVT), ('\u{ac54}', '\u{ac54}', GC_LV), ('\u{ac55}', '\u{ac6f}',
-        GC_LVT), ('\u{ac70}', '\u{ac70}', GC_LV), ('\u{ac71}', '\u{ac8b}', GC_LVT), ('\u{ac8c}',
-        '\u{ac8c}', GC_LV), ('\u{ac8d}', '\u{aca7}', GC_LVT), ('\u{aca8}', '\u{aca8}', GC_LV),
-        ('\u{aca9}', '\u{acc3}', GC_LVT), ('\u{acc4}', '\u{acc4}', GC_LV), ('\u{acc5}', '\u{acdf}',
-        GC_LVT), ('\u{ace0}', '\u{ace0}', GC_LV), ('\u{ace1}', '\u{acfb}', GC_LVT), ('\u{acfc}',
-        '\u{acfc}', GC_LV), ('\u{acfd}', '\u{ad17}', GC_LVT), ('\u{ad18}', '\u{ad18}', GC_LV),
-        ('\u{ad19}', '\u{ad33}', GC_LVT), ('\u{ad34}', '\u{ad34}', GC_LV), ('\u{ad35}', '\u{ad4f}',
-        GC_LVT), ('\u{ad50}', '\u{ad50}', GC_LV), ('\u{ad51}', '\u{ad6b}', GC_LVT), ('\u{ad6c}',
-        '\u{ad6c}', GC_LV), ('\u{ad6d}', '\u{ad87}', GC_LVT), ('\u{ad88}', '\u{ad88}', GC_LV),
-        ('\u{ad89}', '\u{ada3}', GC_LVT), ('\u{ada4}', '\u{ada4}', GC_LV), ('\u{ada5}', '\u{adbf}',
-        GC_LVT), ('\u{adc0}', '\u{adc0}', GC_LV), ('\u{adc1}', '\u{addb}', GC_LVT), ('\u{addc}',
-        '\u{addc}', GC_LV), ('\u{addd}', '\u{adf7}', GC_LVT), ('\u{adf8}', '\u{adf8}', GC_LV),
-        ('\u{adf9}', '\u{ae13}', GC_LVT), ('\u{ae14}', '\u{ae14}', GC_LV), ('\u{ae15}', '\u{ae2f}',
-        GC_LVT), ('\u{ae30}', '\u{ae30}', GC_LV), ('\u{ae31}', '\u{ae4b}', GC_LVT), ('\u{ae4c}',
-        '\u{ae4c}', GC_LV), ('\u{ae4d}', '\u{ae67}', GC_LVT), ('\u{ae68}', '\u{ae68}', GC_LV),
-        ('\u{ae69}', '\u{ae83}', GC_LVT), ('\u{ae84}', '\u{ae84}', GC_LV), ('\u{ae85}', '\u{ae9f}',
-        GC_LVT), ('\u{aea0}', '\u{aea0}', GC_LV), ('\u{aea1}', '\u{aebb}', GC_LVT), ('\u{aebc}',
-        '\u{aebc}', GC_LV), ('\u{aebd}', '\u{aed7}', GC_LVT), ('\u{aed8}', '\u{aed8}', GC_LV),
-        ('\u{aed9}', '\u{aef3}', GC_LVT), ('\u{aef4}', '\u{aef4}', GC_LV), ('\u{aef5}', '\u{af0f}',
-        GC_LVT), ('\u{af10}', '\u{af10}', GC_LV), ('\u{af11}', '\u{af2b}', GC_LVT), ('\u{af2c}',
-        '\u{af2c}', GC_LV), ('\u{af2d}', '\u{af47}', GC_LVT), ('\u{af48}', '\u{af48}', GC_LV),
-        ('\u{af49}', '\u{af63}', GC_LVT), ('\u{af64}', '\u{af64}', GC_LV), ('\u{af65}', '\u{af7f}',
-        GC_LVT), ('\u{af80}', '\u{af80}', GC_LV), ('\u{af81}', '\u{af9b}', GC_LVT), ('\u{af9c}',
-        '\u{af9c}', GC_LV), ('\u{af9d}', '\u{afb7}', GC_LVT), ('\u{afb8}', '\u{afb8}', GC_LV),
-        ('\u{afb9}', '\u{afd3}', GC_LVT), ('\u{afd4}', '\u{afd4}', GC_LV), ('\u{afd5}', '\u{afef}',
-        GC_LVT), ('\u{aff0}', '\u{aff0}', GC_LV), ('\u{aff1}', '\u{b00b}', GC_LVT), ('\u{b00c}',
-        '\u{b00c}', GC_LV), ('\u{b00d}', '\u{b027}', GC_LVT), ('\u{b028}', '\u{b028}', GC_LV),
-        ('\u{b029}', '\u{b043}', GC_LVT), ('\u{b044}', '\u{b044}', GC_LV), ('\u{b045}', '\u{b05f}',
-        GC_LVT), ('\u{b060}', '\u{b060}', GC_LV), ('\u{b061}', '\u{b07b}', GC_LVT), ('\u{b07c}',
-        '\u{b07c}', GC_LV), ('\u{b07d}', '\u{b097}', GC_LVT), ('\u{b098}', '\u{b098}', GC_LV),
-        ('\u{b099}', '\u{b0b3}', GC_LVT), ('\u{b0b4}', '\u{b0b4}', GC_LV), ('\u{b0b5}', '\u{b0cf}',
-        GC_LVT), ('\u{b0d0}', '\u{b0d0}', GC_LV), ('\u{b0d1}', '\u{b0eb}', GC_LVT), ('\u{b0ec}',
-        '\u{b0ec}', GC_LV), ('\u{b0ed}', '\u{b107}', GC_LVT), ('\u{b108}', '\u{b108}', GC_LV),
-        ('\u{b109}', '\u{b123}', GC_LVT), ('\u{b124}', '\u{b124}', GC_LV), ('\u{b125}', '\u{b13f}',
-        GC_LVT), ('\u{b140}', '\u{b140}', GC_LV), ('\u{b141}', '\u{b15b}', GC_LVT), ('\u{b15c}',
-        '\u{b15c}', GC_LV), ('\u{b15d}', '\u{b177}', GC_LVT), ('\u{b178}', '\u{b178}', GC_LV),
-        ('\u{b179}', '\u{b193}', GC_LVT), ('\u{b194}', '\u{b194}', GC_LV), ('\u{b195}', '\u{b1af}',
-        GC_LVT), ('\u{b1b0}', '\u{b1b0}', GC_LV), ('\u{b1b1}', '\u{b1cb}', GC_LVT), ('\u{b1cc}',
-        '\u{b1cc}', GC_LV), ('\u{b1cd}', '\u{b1e7}', GC_LVT), ('\u{b1e8}', '\u{b1e8}', GC_LV),
-        ('\u{b1e9}', '\u{b203}', GC_LVT), ('\u{b204}', '\u{b204}', GC_LV), ('\u{b205}', '\u{b21f}',
-        GC_LVT), ('\u{b220}', '\u{b220}', GC_LV), ('\u{b221}', '\u{b23b}', GC_LVT), ('\u{b23c}',
-        '\u{b23c}', GC_LV), ('\u{b23d}', '\u{b257}', GC_LVT), ('\u{b258}', '\u{b258}', GC_LV),
-        ('\u{b259}', '\u{b273}', GC_LVT), ('\u{b274}', '\u{b274}', GC_LV), ('\u{b275}', '\u{b28f}',
-        GC_LVT), ('\u{b290}', '\u{b290}', GC_LV), ('\u{b291}', '\u{b2ab}', GC_LVT), ('\u{b2ac}',
-        '\u{b2ac}', GC_LV), ('\u{b2ad}', '\u{b2c7}', GC_LVT), ('\u{b2c8}', '\u{b2c8}', GC_LV),
-        ('\u{b2c9}', '\u{b2e3}', GC_LVT), ('\u{b2e4}', '\u{b2e4}', GC_LV), ('\u{b2e5}', '\u{b2ff}',
-        GC_LVT), ('\u{b300}', '\u{b300}', GC_LV), ('\u{b301}', '\u{b31b}', GC_LVT), ('\u{b31c}',
-        '\u{b31c}', GC_LV), ('\u{b31d}', '\u{b337}', GC_LVT), ('\u{b338}', '\u{b338}', GC_LV),
-        ('\u{b339}', '\u{b353}', GC_LVT), ('\u{b354}', '\u{b354}', GC_LV), ('\u{b355}', '\u{b36f}',
-        GC_LVT), ('\u{b370}', '\u{b370}', GC_LV), ('\u{b371}', '\u{b38b}', GC_LVT), ('\u{b38c}',
-        '\u{b38c}', GC_LV), ('\u{b38d}', '\u{b3a7}', GC_LVT), ('\u{b3a8}', '\u{b3a8}', GC_LV),
-        ('\u{b3a9}', '\u{b3c3}', GC_LVT), ('\u{b3c4}', '\u{b3c4}', GC_LV), ('\u{b3c5}', '\u{b3df}',
-        GC_LVT), ('\u{b3e0}', '\u{b3e0}', GC_LV), ('\u{b3e1}', '\u{b3fb}', GC_LVT), ('\u{b3fc}',
-        '\u{b3fc}', GC_LV), ('\u{b3fd}', '\u{b417}', GC_LVT), ('\u{b418}', '\u{b418}', GC_LV),
-        ('\u{b419}', '\u{b433}', GC_LVT), ('\u{b434}', '\u{b434}', GC_LV), ('\u{b435}', '\u{b44f}',
-        GC_LVT), ('\u{b450}', '\u{b450}', GC_LV), ('\u{b451}', '\u{b46b}', GC_LVT), ('\u{b46c}',
-        '\u{b46c}', GC_LV), ('\u{b46d}', '\u{b487}', GC_LVT), ('\u{b488}', '\u{b488}', GC_LV),
-        ('\u{b489}', '\u{b4a3}', GC_LVT), ('\u{b4a4}', '\u{b4a4}', GC_LV), ('\u{b4a5}', '\u{b4bf}',
-        GC_LVT), ('\u{b4c0}', '\u{b4c0}', GC_LV), ('\u{b4c1}', '\u{b4db}', GC_LVT), ('\u{b4dc}',
-        '\u{b4dc}', GC_LV), ('\u{b4dd}', '\u{b4f7}', GC_LVT), ('\u{b4f8}', '\u{b4f8}', GC_LV),
-        ('\u{b4f9}', '\u{b513}', GC_LVT), ('\u{b514}', '\u{b514}', GC_LV), ('\u{b515}', '\u{b52f}',
-        GC_LVT), ('\u{b530}', '\u{b530}', GC_LV), ('\u{b531}', '\u{b54b}', GC_LVT), ('\u{b54c}',
-        '\u{b54c}', GC_LV), ('\u{b54d}', '\u{b567}', GC_LVT), ('\u{b568}', '\u{b568}', GC_LV),
-        ('\u{b569}', '\u{b583}', GC_LVT), ('\u{b584}', '\u{b584}', GC_LV), ('\u{b585}', '\u{b59f}',
-        GC_LVT), ('\u{b5a0}', '\u{b5a0}', GC_LV), ('\u{b5a1}', '\u{b5bb}', GC_LVT), ('\u{b5bc}',
-        '\u{b5bc}', GC_LV), ('\u{b5bd}', '\u{b5d7}', GC_LVT), ('\u{b5d8}', '\u{b5d8}', GC_LV),
-        ('\u{b5d9}', '\u{b5f3}', GC_LVT), ('\u{b5f4}', '\u{b5f4}', GC_LV), ('\u{b5f5}', '\u{b60f}',
-        GC_LVT), ('\u{b610}', '\u{b610}', GC_LV), ('\u{b611}', '\u{b62b}', GC_LVT), ('\u{b62c}',
-        '\u{b62c}', GC_LV), ('\u{b62d}', '\u{b647}', GC_LVT), ('\u{b648}', '\u{b648}', GC_LV),
-        ('\u{b649}', '\u{b663}', GC_LVT), ('\u{b664}', '\u{b664}', GC_LV), ('\u{b665}', '\u{b67f}',
-        GC_LVT), ('\u{b680}', '\u{b680}', GC_LV), ('\u{b681}', '\u{b69b}', GC_LVT), ('\u{b69c}',
-        '\u{b69c}', GC_LV), ('\u{b69d}', '\u{b6b7}', GC_LVT), ('\u{b6b8}', '\u{b6b8}', GC_LV),
-        ('\u{b6b9}', '\u{b6d3}', GC_LVT), ('\u{b6d4}', '\u{b6d4}', GC_LV), ('\u{b6d5}', '\u{b6ef}',
-        GC_LVT), ('\u{b6f0}', '\u{b6f0}', GC_LV), ('\u{b6f1}', '\u{b70b}', GC_LVT), ('\u{b70c}',
-        '\u{b70c}', GC_LV), ('\u{b70d}', '\u{b727}', GC_LVT), ('\u{b728}', '\u{b728}', GC_LV),
-        ('\u{b729}', '\u{b743}', GC_LVT), ('\u{b744}', '\u{b744}', GC_LV), ('\u{b745}', '\u{b75f}',
-        GC_LVT), ('\u{b760}', '\u{b760}', GC_LV), ('\u{b761}', '\u{b77b}', GC_LVT), ('\u{b77c}',
-        '\u{b77c}', GC_LV), ('\u{b77d}', '\u{b797}', GC_LVT), ('\u{b798}', '\u{b798}', GC_LV),
-        ('\u{b799}', '\u{b7b3}', GC_LVT), ('\u{b7b4}', '\u{b7b4}', GC_LV), ('\u{b7b5}', '\u{b7cf}',
-        GC_LVT), ('\u{b7d0}', '\u{b7d0}', GC_LV), ('\u{b7d1}', '\u{b7eb}', GC_LVT), ('\u{b7ec}',
-        '\u{b7ec}', GC_LV), ('\u{b7ed}', '\u{b807}', GC_LVT), ('\u{b808}', '\u{b808}', GC_LV),
-        ('\u{b809}', '\u{b823}', GC_LVT), ('\u{b824}', '\u{b824}', GC_LV), ('\u{b825}', '\u{b83f}',
-        GC_LVT), ('\u{b840}', '\u{b840}', GC_LV), ('\u{b841}', '\u{b85b}', GC_LVT), ('\u{b85c}',
-        '\u{b85c}', GC_LV), ('\u{b85d}', '\u{b877}', GC_LVT), ('\u{b878}', '\u{b878}', GC_LV),
-        ('\u{b879}', '\u{b893}', GC_LVT), ('\u{b894}', '\u{b894}', GC_LV), ('\u{b895}', '\u{b8af}',
-        GC_LVT), ('\u{b8b0}', '\u{b8b0}', GC_LV), ('\u{b8b1}', '\u{b8cb}', GC_LVT), ('\u{b8cc}',
-        '\u{b8cc}', GC_LV), ('\u{b8cd}', '\u{b8e7}', GC_LVT), ('\u{b8e8}', '\u{b8e8}', GC_LV),
-        ('\u{b8e9}', '\u{b903}', GC_LVT), ('\u{b904}', '\u{b904}', GC_LV), ('\u{b905}', '\u{b91f}',
-        GC_LVT), ('\u{b920}', '\u{b920}', GC_LV), ('\u{b921}', '\u{b93b}', GC_LVT), ('\u{b93c}',
-        '\u{b93c}', GC_LV), ('\u{b93d}', '\u{b957}', GC_LVT), ('\u{b958}', '\u{b958}', GC_LV),
-        ('\u{b959}', '\u{b973}', GC_LVT), ('\u{b974}', '\u{b974}', GC_LV), ('\u{b975}', '\u{b98f}',
-        GC_LVT), ('\u{b990}', '\u{b990}', GC_LV), ('\u{b991}', '\u{b9ab}', GC_LVT), ('\u{b9ac}',
-        '\u{b9ac}', GC_LV), ('\u{b9ad}', '\u{b9c7}', GC_LVT), ('\u{b9c8}', '\u{b9c8}', GC_LV),
-        ('\u{b9c9}', '\u{b9e3}', GC_LVT), ('\u{b9e4}', '\u{b9e4}', GC_LV), ('\u{b9e5}', '\u{b9ff}',
-        GC_LVT), ('\u{ba00}', '\u{ba00}', GC_LV), ('\u{ba01}', '\u{ba1b}', GC_LVT), ('\u{ba1c}',
-        '\u{ba1c}', GC_LV), ('\u{ba1d}', '\u{ba37}', GC_LVT), ('\u{ba38}', '\u{ba38}', GC_LV),
-        ('\u{ba39}', '\u{ba53}', GC_LVT), ('\u{ba54}', '\u{ba54}', GC_LV), ('\u{ba55}', '\u{ba6f}',
-        GC_LVT), ('\u{ba70}', '\u{ba70}', GC_LV), ('\u{ba71}', '\u{ba8b}', GC_LVT), ('\u{ba8c}',
-        '\u{ba8c}', GC_LV), ('\u{ba8d}', '\u{baa7}', GC_LVT), ('\u{baa8}', '\u{baa8}', GC_LV),
-        ('\u{baa9}', '\u{bac3}', GC_LVT), ('\u{bac4}', '\u{bac4}', GC_LV), ('\u{bac5}', '\u{badf}',
-        GC_LVT), ('\u{bae0}', '\u{bae0}', GC_LV), ('\u{bae1}', '\u{bafb}', GC_LVT), ('\u{bafc}',
-        '\u{bafc}', GC_LV), ('\u{bafd}', '\u{bb17}', GC_LVT), ('\u{bb18}', '\u{bb18}', GC_LV),
-        ('\u{bb19}', '\u{bb33}', GC_LVT), ('\u{bb34}', '\u{bb34}', GC_LV), ('\u{bb35}', '\u{bb4f}',
-        GC_LVT), ('\u{bb50}', '\u{bb50}', GC_LV), ('\u{bb51}', '\u{bb6b}', GC_LVT), ('\u{bb6c}',
-        '\u{bb6c}', GC_LV), ('\u{bb6d}', '\u{bb87}', GC_LVT), ('\u{bb88}', '\u{bb88}', GC_LV),
-        ('\u{bb89}', '\u{bba3}', GC_LVT), ('\u{bba4}', '\u{bba4}', GC_LV), ('\u{bba5}', '\u{bbbf}',
-        GC_LVT), ('\u{bbc0}', '\u{bbc0}', GC_LV), ('\u{bbc1}', '\u{bbdb}', GC_LVT), ('\u{bbdc}',
-        '\u{bbdc}', GC_LV), ('\u{bbdd}', '\u{bbf7}', GC_LVT), ('\u{bbf8}', '\u{bbf8}', GC_LV),
-        ('\u{bbf9}', '\u{bc13}', GC_LVT), ('\u{bc14}', '\u{bc14}', GC_LV), ('\u{bc15}', '\u{bc2f}',
-        GC_LVT), ('\u{bc30}', '\u{bc30}', GC_LV), ('\u{bc31}', '\u{bc4b}', GC_LVT), ('\u{bc4c}',
-        '\u{bc4c}', GC_LV), ('\u{bc4d}', '\u{bc67}', GC_LVT), ('\u{bc68}', '\u{bc68}', GC_LV),
-        ('\u{bc69}', '\u{bc83}', GC_LVT), ('\u{bc84}', '\u{bc84}', GC_LV), ('\u{bc85}', '\u{bc9f}',
-        GC_LVT), ('\u{bca0}', '\u{bca0}', GC_LV), ('\u{bca1}', '\u{bcbb}', GC_LVT), ('\u{bcbc}',
-        '\u{bcbc}', GC_LV), ('\u{bcbd}', '\u{bcd7}', GC_LVT), ('\u{bcd8}', '\u{bcd8}', GC_LV),
-        ('\u{bcd9}', '\u{bcf3}', GC_LVT), ('\u{bcf4}', '\u{bcf4}', GC_LV), ('\u{bcf5}', '\u{bd0f}',
-        GC_LVT), ('\u{bd10}', '\u{bd10}', GC_LV), ('\u{bd11}', '\u{bd2b}', GC_LVT), ('\u{bd2c}',
-        '\u{bd2c}', GC_LV), ('\u{bd2d}', '\u{bd47}', GC_LVT), ('\u{bd48}', '\u{bd48}', GC_LV),
-        ('\u{bd49}', '\u{bd63}', GC_LVT), ('\u{bd64}', '\u{bd64}', GC_LV), ('\u{bd65}', '\u{bd7f}',
-        GC_LVT), ('\u{bd80}', '\u{bd80}', GC_LV), ('\u{bd81}', '\u{bd9b}', GC_LVT), ('\u{bd9c}',
-        '\u{bd9c}', GC_LV), ('\u{bd9d}', '\u{bdb7}', GC_LVT), ('\u{bdb8}', '\u{bdb8}', GC_LV),
-        ('\u{bdb9}', '\u{bdd3}', GC_LVT), ('\u{bdd4}', '\u{bdd4}', GC_LV), ('\u{bdd5}', '\u{bdef}',
-        GC_LVT), ('\u{bdf0}', '\u{bdf0}', GC_LV), ('\u{bdf1}', '\u{be0b}', GC_LVT), ('\u{be0c}',
-        '\u{be0c}', GC_LV), ('\u{be0d}', '\u{be27}', GC_LVT), ('\u{be28}', '\u{be28}', GC_LV),
-        ('\u{be29}', '\u{be43}', GC_LVT), ('\u{be44}', '\u{be44}', GC_LV), ('\u{be45}', '\u{be5f}',
-        GC_LVT), ('\u{be60}', '\u{be60}', GC_LV), ('\u{be61}', '\u{be7b}', GC_LVT), ('\u{be7c}',
-        '\u{be7c}', GC_LV), ('\u{be7d}', '\u{be97}', GC_LVT), ('\u{be98}', '\u{be98}', GC_LV),
-        ('\u{be99}', '\u{beb3}', GC_LVT), ('\u{beb4}', '\u{beb4}', GC_LV), ('\u{beb5}', '\u{becf}',
-        GC_LVT), ('\u{bed0}', '\u{bed0}', GC_LV), ('\u{bed1}', '\u{beeb}', GC_LVT), ('\u{beec}',
-        '\u{beec}', GC_LV), ('\u{beed}', '\u{bf07}', GC_LVT), ('\u{bf08}', '\u{bf08}', GC_LV),
-        ('\u{bf09}', '\u{bf23}', GC_LVT), ('\u{bf24}', '\u{bf24}', GC_LV), ('\u{bf25}', '\u{bf3f}',
-        GC_LVT), ('\u{bf40}', '\u{bf40}', GC_LV), ('\u{bf41}', '\u{bf5b}', GC_LVT), ('\u{bf5c}',
-        '\u{bf5c}', GC_LV), ('\u{bf5d}', '\u{bf77}', GC_LVT), ('\u{bf78}', '\u{bf78}', GC_LV),
-        ('\u{bf79}', '\u{bf93}', GC_LVT), ('\u{bf94}', '\u{bf94}', GC_LV), ('\u{bf95}', '\u{bfaf}',
-        GC_LVT), ('\u{bfb0}', '\u{bfb0}', GC_LV), ('\u{bfb1}', '\u{bfcb}', GC_LVT), ('\u{bfcc}',
-        '\u{bfcc}', GC_LV), ('\u{bfcd}', '\u{bfe7}', GC_LVT), ('\u{bfe8}', '\u{bfe8}', GC_LV),
-        ('\u{bfe9}', '\u{c003}', GC_LVT), ('\u{c004}', '\u{c004}', GC_LV), ('\u{c005}', '\u{c01f}',
-        GC_LVT), ('\u{c020}', '\u{c020}', GC_LV), ('\u{c021}', '\u{c03b}', GC_LVT), ('\u{c03c}',
-        '\u{c03c}', GC_LV), ('\u{c03d}', '\u{c057}', GC_LVT), ('\u{c058}', '\u{c058}', GC_LV),
-        ('\u{c059}', '\u{c073}', GC_LVT), ('\u{c074}', '\u{c074}', GC_LV), ('\u{c075}', '\u{c08f}',
-        GC_LVT), ('\u{c090}', '\u{c090}', GC_LV), ('\u{c091}', '\u{c0ab}', GC_LVT), ('\u{c0ac}',
-        '\u{c0ac}', GC_LV), ('\u{c0ad}', '\u{c0c7}', GC_LVT), ('\u{c0c8}', '\u{c0c8}', GC_LV),
-        ('\u{c0c9}', '\u{c0e3}', GC_LVT), ('\u{c0e4}', '\u{c0e4}', GC_LV), ('\u{c0e5}', '\u{c0ff}',
-        GC_LVT), ('\u{c100}', '\u{c100}', GC_LV), ('\u{c101}', '\u{c11b}', GC_LVT), ('\u{c11c}',
-        '\u{c11c}', GC_LV), ('\u{c11d}', '\u{c137}', GC_LVT), ('\u{c138}', '\u{c138}', GC_LV),
-        ('\u{c139}', '\u{c153}', GC_LVT), ('\u{c154}', '\u{c154}', GC_LV), ('\u{c155}', '\u{c16f}',
-        GC_LVT), ('\u{c170}', '\u{c170}', GC_LV), ('\u{c171}', '\u{c18b}', GC_LVT), ('\u{c18c}',
-        '\u{c18c}', GC_LV), ('\u{c18d}', '\u{c1a7}', GC_LVT), ('\u{c1a8}', '\u{c1a8}', GC_LV),
-        ('\u{c1a9}', '\u{c1c3}', GC_LVT), ('\u{c1c4}', '\u{c1c4}', GC_LV), ('\u{c1c5}', '\u{c1df}',
-        GC_LVT), ('\u{c1e0}', '\u{c1e0}', GC_LV), ('\u{c1e1}', '\u{c1fb}', GC_LVT), ('\u{c1fc}',
-        '\u{c1fc}', GC_LV), ('\u{c1fd}', '\u{c217}', GC_LVT), ('\u{c218}', '\u{c218}', GC_LV),
-        ('\u{c219}', '\u{c233}', GC_LVT), ('\u{c234}', '\u{c234}', GC_LV), ('\u{c235}', '\u{c24f}',
-        GC_LVT), ('\u{c250}', '\u{c250}', GC_LV), ('\u{c251}', '\u{c26b}', GC_LVT), ('\u{c26c}',
-        '\u{c26c}', GC_LV), ('\u{c26d}', '\u{c287}', GC_LVT), ('\u{c288}', '\u{c288}', GC_LV),
-        ('\u{c289}', '\u{c2a3}', GC_LVT), ('\u{c2a4}', '\u{c2a4}', GC_LV), ('\u{c2a5}', '\u{c2bf}',
-        GC_LVT), ('\u{c2c0}', '\u{c2c0}', GC_LV), ('\u{c2c1}', '\u{c2db}', GC_LVT), ('\u{c2dc}',
-        '\u{c2dc}', GC_LV), ('\u{c2dd}', '\u{c2f7}', GC_LVT), ('\u{c2f8}', '\u{c2f8}', GC_LV),
-        ('\u{c2f9}', '\u{c313}', GC_LVT), ('\u{c314}', '\u{c314}', GC_LV), ('\u{c315}', '\u{c32f}',
-        GC_LVT), ('\u{c330}', '\u{c330}', GC_LV), ('\u{c331}', '\u{c34b}', GC_LVT), ('\u{c34c}',
-        '\u{c34c}', GC_LV), ('\u{c34d}', '\u{c367}', GC_LVT), ('\u{c368}', '\u{c368}', GC_LV),
-        ('\u{c369}', '\u{c383}', GC_LVT), ('\u{c384}', '\u{c384}', GC_LV), ('\u{c385}', '\u{c39f}',
-        GC_LVT), ('\u{c3a0}', '\u{c3a0}', GC_LV), ('\u{c3a1}', '\u{c3bb}', GC_LVT), ('\u{c3bc}',
-        '\u{c3bc}', GC_LV), ('\u{c3bd}', '\u{c3d7}', GC_LVT), ('\u{c3d8}', '\u{c3d8}', GC_LV),
-        ('\u{c3d9}', '\u{c3f3}', GC_LVT), ('\u{c3f4}', '\u{c3f4}', GC_LV), ('\u{c3f5}', '\u{c40f}',
-        GC_LVT), ('\u{c410}', '\u{c410}', GC_LV), ('\u{c411}', '\u{c42b}', GC_LVT), ('\u{c42c}',
-        '\u{c42c}', GC_LV), ('\u{c42d}', '\u{c447}', GC_LVT), ('\u{c448}', '\u{c448}', GC_LV),
-        ('\u{c449}', '\u{c463}', GC_LVT), ('\u{c464}', '\u{c464}', GC_LV), ('\u{c465}', '\u{c47f}',
-        GC_LVT), ('\u{c480}', '\u{c480}', GC_LV), ('\u{c481}', '\u{c49b}', GC_LVT), ('\u{c49c}',
-        '\u{c49c}', GC_LV), ('\u{c49d}', '\u{c4b7}', GC_LVT), ('\u{c4b8}', '\u{c4b8}', GC_LV),
-        ('\u{c4b9}', '\u{c4d3}', GC_LVT), ('\u{c4d4}', '\u{c4d4}', GC_LV), ('\u{c4d5}', '\u{c4ef}',
-        GC_LVT), ('\u{c4f0}', '\u{c4f0}', GC_LV), ('\u{c4f1}', '\u{c50b}', GC_LVT), ('\u{c50c}',
-        '\u{c50c}', GC_LV), ('\u{c50d}', '\u{c527}', GC_LVT), ('\u{c528}', '\u{c528}', GC_LV),
-        ('\u{c529}', '\u{c543}', GC_LVT), ('\u{c544}', '\u{c544}', GC_LV), ('\u{c545}', '\u{c55f}',
-        GC_LVT), ('\u{c560}', '\u{c560}', GC_LV), ('\u{c561}', '\u{c57b}', GC_LVT), ('\u{c57c}',
-        '\u{c57c}', GC_LV), ('\u{c57d}', '\u{c597}', GC_LVT), ('\u{c598}', '\u{c598}', GC_LV),
-        ('\u{c599}', '\u{c5b3}', GC_LVT), ('\u{c5b4}', '\u{c5b4}', GC_LV), ('\u{c5b5}', '\u{c5cf}',
-        GC_LVT), ('\u{c5d0}', '\u{c5d0}', GC_LV), ('\u{c5d1}', '\u{c5eb}', GC_LVT), ('\u{c5ec}',
-        '\u{c5ec}', GC_LV), ('\u{c5ed}', '\u{c607}', GC_LVT), ('\u{c608}', '\u{c608}', GC_LV),
-        ('\u{c609}', '\u{c623}', GC_LVT), ('\u{c624}', '\u{c624}', GC_LV), ('\u{c625}', '\u{c63f}',
-        GC_LVT), ('\u{c640}', '\u{c640}', GC_LV), ('\u{c641}', '\u{c65b}', GC_LVT), ('\u{c65c}',
-        '\u{c65c}', GC_LV), ('\u{c65d}', '\u{c677}', GC_LVT), ('\u{c678}', '\u{c678}', GC_LV),
-        ('\u{c679}', '\u{c693}', GC_LVT), ('\u{c694}', '\u{c694}', GC_LV), ('\u{c695}', '\u{c6af}',
-        GC_LVT), ('\u{c6b0}', '\u{c6b0}', GC_LV), ('\u{c6b1}', '\u{c6cb}', GC_LVT), ('\u{c6cc}',
-        '\u{c6cc}', GC_LV), ('\u{c6cd}', '\u{c6e7}', GC_LVT), ('\u{c6e8}', '\u{c6e8}', GC_LV),
-        ('\u{c6e9}', '\u{c703}', GC_LVT), ('\u{c704}', '\u{c704}', GC_LV), ('\u{c705}', '\u{c71f}',
-        GC_LVT), ('\u{c720}', '\u{c720}', GC_LV), ('\u{c721}', '\u{c73b}', GC_LVT), ('\u{c73c}',
-        '\u{c73c}', GC_LV), ('\u{c73d}', '\u{c757}', GC_LVT), ('\u{c758}', '\u{c758}', GC_LV),
-        ('\u{c759}', '\u{c773}', GC_LVT), ('\u{c774}', '\u{c774}', GC_LV), ('\u{c775}', '\u{c78f}',
-        GC_LVT), ('\u{c790}', '\u{c790}', GC_LV), ('\u{c791}', '\u{c7ab}', GC_LVT), ('\u{c7ac}',
-        '\u{c7ac}', GC_LV), ('\u{c7ad}', '\u{c7c7}', GC_LVT), ('\u{c7c8}', '\u{c7c8}', GC_LV),
-        ('\u{c7c9}', '\u{c7e3}', GC_LVT), ('\u{c7e4}', '\u{c7e4}', GC_LV), ('\u{c7e5}', '\u{c7ff}',
-        GC_LVT), ('\u{c800}', '\u{c800}', GC_LV), ('\u{c801}', '\u{c81b}', GC_LVT), ('\u{c81c}',
-        '\u{c81c}', GC_LV), ('\u{c81d}', '\u{c837}', GC_LVT), ('\u{c838}', '\u{c838}', GC_LV),
-        ('\u{c839}', '\u{c853}', GC_LVT), ('\u{c854}', '\u{c854}', GC_LV), ('\u{c855}', '\u{c86f}',
-        GC_LVT), ('\u{c870}', '\u{c870}', GC_LV), ('\u{c871}', '\u{c88b}', GC_LVT), ('\u{c88c}',
-        '\u{c88c}', GC_LV), ('\u{c88d}', '\u{c8a7}', GC_LVT), ('\u{c8a8}', '\u{c8a8}', GC_LV),
-        ('\u{c8a9}', '\u{c8c3}', GC_LVT), ('\u{c8c4}', '\u{c8c4}', GC_LV), ('\u{c8c5}', '\u{c8df}',
-        GC_LVT), ('\u{c8e0}', '\u{c8e0}', GC_LV), ('\u{c8e1}', '\u{c8fb}', GC_LVT), ('\u{c8fc}',
-        '\u{c8fc}', GC_LV), ('\u{c8fd}', '\u{c917}', GC_LVT), ('\u{c918}', '\u{c918}', GC_LV),
-        ('\u{c919}', '\u{c933}', GC_LVT), ('\u{c934}', '\u{c934}', GC_LV), ('\u{c935}', '\u{c94f}',
-        GC_LVT), ('\u{c950}', '\u{c950}', GC_LV), ('\u{c951}', '\u{c96b}', GC_LVT), ('\u{c96c}',
-        '\u{c96c}', GC_LV), ('\u{c96d}', '\u{c987}', GC_LVT), ('\u{c988}', '\u{c988}', GC_LV),
-        ('\u{c989}', '\u{c9a3}', GC_LVT), ('\u{c9a4}', '\u{c9a4}', GC_LV), ('\u{c9a5}', '\u{c9bf}',
-        GC_LVT), ('\u{c9c0}', '\u{c9c0}', GC_LV), ('\u{c9c1}', '\u{c9db}', GC_LVT), ('\u{c9dc}',
-        '\u{c9dc}', GC_LV), ('\u{c9dd}', '\u{c9f7}', GC_LVT), ('\u{c9f8}', '\u{c9f8}', GC_LV),
-        ('\u{c9f9}', '\u{ca13}', GC_LVT), ('\u{ca14}', '\u{ca14}', GC_LV), ('\u{ca15}', '\u{ca2f}',
-        GC_LVT), ('\u{ca30}', '\u{ca30}', GC_LV), ('\u{ca31}', '\u{ca4b}', GC_LVT), ('\u{ca4c}',
-        '\u{ca4c}', GC_LV), ('\u{ca4d}', '\u{ca67}', GC_LVT), ('\u{ca68}', '\u{ca68}', GC_LV),
-        ('\u{ca69}', '\u{ca83}', GC_LVT), ('\u{ca84}', '\u{ca84}', GC_LV), ('\u{ca85}', '\u{ca9f}',
-        GC_LVT), ('\u{caa0}', '\u{caa0}', GC_LV), ('\u{caa1}', '\u{cabb}', GC_LVT), ('\u{cabc}',
-        '\u{cabc}', GC_LV), ('\u{cabd}', '\u{cad7}', GC_LVT), ('\u{cad8}', '\u{cad8}', GC_LV),
-        ('\u{cad9}', '\u{caf3}', GC_LVT), ('\u{caf4}', '\u{caf4}', GC_LV), ('\u{caf5}', '\u{cb0f}',
-        GC_LVT), ('\u{cb10}', '\u{cb10}', GC_LV), ('\u{cb11}', '\u{cb2b}', GC_LVT), ('\u{cb2c}',
-        '\u{cb2c}', GC_LV), ('\u{cb2d}', '\u{cb47}', GC_LVT), ('\u{cb48}', '\u{cb48}', GC_LV),
-        ('\u{cb49}', '\u{cb63}', GC_LVT), ('\u{cb64}', '\u{cb64}', GC_LV), ('\u{cb65}', '\u{cb7f}',
-        GC_LVT), ('\u{cb80}', '\u{cb80}', GC_LV), ('\u{cb81}', '\u{cb9b}', GC_LVT), ('\u{cb9c}',
-        '\u{cb9c}', GC_LV), ('\u{cb9d}', '\u{cbb7}', GC_LVT), ('\u{cbb8}', '\u{cbb8}', GC_LV),
-        ('\u{cbb9}', '\u{cbd3}', GC_LVT), ('\u{cbd4}', '\u{cbd4}', GC_LV), ('\u{cbd5}', '\u{cbef}',
-        GC_LVT), ('\u{cbf0}', '\u{cbf0}', GC_LV), ('\u{cbf1}', '\u{cc0b}', GC_LVT), ('\u{cc0c}',
-        '\u{cc0c}', GC_LV), ('\u{cc0d}', '\u{cc27}', GC_LVT), ('\u{cc28}', '\u{cc28}', GC_LV),
-        ('\u{cc29}', '\u{cc43}', GC_LVT), ('\u{cc44}', '\u{cc44}', GC_LV), ('\u{cc45}', '\u{cc5f}',
-        GC_LVT), ('\u{cc60}', '\u{cc60}', GC_LV), ('\u{cc61}', '\u{cc7b}', GC_LVT), ('\u{cc7c}',
-        '\u{cc7c}', GC_LV), ('\u{cc7d}', '\u{cc97}', GC_LVT), ('\u{cc98}', '\u{cc98}', GC_LV),
-        ('\u{cc99}', '\u{ccb3}', GC_LVT), ('\u{ccb4}', '\u{ccb4}', GC_LV), ('\u{ccb5}', '\u{cccf}',
-        GC_LVT), ('\u{ccd0}', '\u{ccd0}', GC_LV), ('\u{ccd1}', '\u{cceb}', GC_LVT), ('\u{ccec}',
-        '\u{ccec}', GC_LV), ('\u{cced}', '\u{cd07}', GC_LVT), ('\u{cd08}', '\u{cd08}', GC_LV),
-        ('\u{cd09}', '\u{cd23}', GC_LVT), ('\u{cd24}', '\u{cd24}', GC_LV), ('\u{cd25}', '\u{cd3f}',
-        GC_LVT), ('\u{cd40}', '\u{cd40}', GC_LV), ('\u{cd41}', '\u{cd5b}', GC_LVT), ('\u{cd5c}',
-        '\u{cd5c}', GC_LV), ('\u{cd5d}', '\u{cd77}', GC_LVT), ('\u{cd78}', '\u{cd78}', GC_LV),
-        ('\u{cd79}', '\u{cd93}', GC_LVT), ('\u{cd94}', '\u{cd94}', GC_LV), ('\u{cd95}', '\u{cdaf}',
-        GC_LVT), ('\u{cdb0}', '\u{cdb0}', GC_LV), ('\u{cdb1}', '\u{cdcb}', GC_LVT), ('\u{cdcc}',
-        '\u{cdcc}', GC_LV), ('\u{cdcd}', '\u{cde7}', GC_LVT), ('\u{cde8}', '\u{cde8}', GC_LV),
-        ('\u{cde9}', '\u{ce03}', GC_LVT), ('\u{ce04}', '\u{ce04}', GC_LV), ('\u{ce05}', '\u{ce1f}',
-        GC_LVT), ('\u{ce20}', '\u{ce20}', GC_LV), ('\u{ce21}', '\u{ce3b}', GC_LVT), ('\u{ce3c}',
-        '\u{ce3c}', GC_LV), ('\u{ce3d}', '\u{ce57}', GC_LVT), ('\u{ce58}', '\u{ce58}', GC_LV),
-        ('\u{ce59}', '\u{ce73}', GC_LVT), ('\u{ce74}', '\u{ce74}', GC_LV), ('\u{ce75}', '\u{ce8f}',
-        GC_LVT), ('\u{ce90}', '\u{ce90}', GC_LV), ('\u{ce91}', '\u{ceab}', GC_LVT), ('\u{ceac}',
-        '\u{ceac}', GC_LV), ('\u{cead}', '\u{cec7}', GC_LVT), ('\u{cec8}', '\u{cec8}', GC_LV),
-        ('\u{cec9}', '\u{cee3}', GC_LVT), ('\u{cee4}', '\u{cee4}', GC_LV), ('\u{cee5}', '\u{ceff}',
-        GC_LVT), ('\u{cf00}', '\u{cf00}', GC_LV), ('\u{cf01}', '\u{cf1b}', GC_LVT), ('\u{cf1c}',
-        '\u{cf1c}', GC_LV), ('\u{cf1d}', '\u{cf37}', GC_LVT), ('\u{cf38}', '\u{cf38}', GC_LV),
-        ('\u{cf39}', '\u{cf53}', GC_LVT), ('\u{cf54}', '\u{cf54}', GC_LV), ('\u{cf55}', '\u{cf6f}',
-        GC_LVT), ('\u{cf70}', '\u{cf70}', GC_LV), ('\u{cf71}', '\u{cf8b}', GC_LVT), ('\u{cf8c}',
-        '\u{cf8c}', GC_LV), ('\u{cf8d}', '\u{cfa7}', GC_LVT), ('\u{cfa8}', '\u{cfa8}', GC_LV),
-        ('\u{cfa9}', '\u{cfc3}', GC_LVT), ('\u{cfc4}', '\u{cfc4}', GC_LV), ('\u{cfc5}', '\u{cfdf}',
-        GC_LVT), ('\u{cfe0}', '\u{cfe0}', GC_LV), ('\u{cfe1}', '\u{cffb}', GC_LVT), ('\u{cffc}',
-        '\u{cffc}', GC_LV), ('\u{cffd}', '\u{d017}', GC_LVT), ('\u{d018}', '\u{d018}', GC_LV),
-        ('\u{d019}', '\u{d033}', GC_LVT), ('\u{d034}', '\u{d034}', GC_LV), ('\u{d035}', '\u{d04f}',
-        GC_LVT), ('\u{d050}', '\u{d050}', GC_LV), ('\u{d051}', '\u{d06b}', GC_LVT), ('\u{d06c}',
-        '\u{d06c}', GC_LV), ('\u{d06d}', '\u{d087}', GC_LVT), ('\u{d088}', '\u{d088}', GC_LV),
-        ('\u{d089}', '\u{d0a3}', GC_LVT), ('\u{d0a4}', '\u{d0a4}', GC_LV), ('\u{d0a5}', '\u{d0bf}',
-        GC_LVT), ('\u{d0c0}', '\u{d0c0}', GC_LV), ('\u{d0c1}', '\u{d0db}', GC_LVT), ('\u{d0dc}',
-        '\u{d0dc}', GC_LV), ('\u{d0dd}', '\u{d0f7}', GC_LVT), ('\u{d0f8}', '\u{d0f8}', GC_LV),
-        ('\u{d0f9}', '\u{d113}', GC_LVT), ('\u{d114}', '\u{d114}', GC_LV), ('\u{d115}', '\u{d12f}',
-        GC_LVT), ('\u{d130}', '\u{d130}', GC_LV), ('\u{d131}', '\u{d14b}', GC_LVT), ('\u{d14c}',
-        '\u{d14c}', GC_LV), ('\u{d14d}', '\u{d167}', GC_LVT), ('\u{d168}', '\u{d168}', GC_LV),
-        ('\u{d169}', '\u{d183}', GC_LVT), ('\u{d184}', '\u{d184}', GC_LV), ('\u{d185}', '\u{d19f}',
-        GC_LVT), ('\u{d1a0}', '\u{d1a0}', GC_LV), ('\u{d1a1}', '\u{d1bb}', GC_LVT), ('\u{d1bc}',
-        '\u{d1bc}', GC_LV), ('\u{d1bd}', '\u{d1d7}', GC_LVT), ('\u{d1d8}', '\u{d1d8}', GC_LV),
-        ('\u{d1d9}', '\u{d1f3}', GC_LVT), ('\u{d1f4}', '\u{d1f4}', GC_LV), ('\u{d1f5}', '\u{d20f}',
-        GC_LVT), ('\u{d210}', '\u{d210}', GC_LV), ('\u{d211}', '\u{d22b}', GC_LVT), ('\u{d22c}',
-        '\u{d22c}', GC_LV), ('\u{d22d}', '\u{d247}', GC_LVT), ('\u{d248}', '\u{d248}', GC_LV),
-        ('\u{d249}', '\u{d263}', GC_LVT), ('\u{d264}', '\u{d264}', GC_LV), ('\u{d265}', '\u{d27f}',
-        GC_LVT), ('\u{d280}', '\u{d280}', GC_LV), ('\u{d281}', '\u{d29b}', GC_LVT), ('\u{d29c}',
-        '\u{d29c}', GC_LV), ('\u{d29d}', '\u{d2b7}', GC_LVT), ('\u{d2b8}', '\u{d2b8}', GC_LV),
-        ('\u{d2b9}', '\u{d2d3}', GC_LVT), ('\u{d2d4}', '\u{d2d4}', GC_LV), ('\u{d2d5}', '\u{d2ef}',
-        GC_LVT), ('\u{d2f0}', '\u{d2f0}', GC_LV), ('\u{d2f1}', '\u{d30b}', GC_LVT), ('\u{d30c}',
-        '\u{d30c}', GC_LV), ('\u{d30d}', '\u{d327}', GC_LVT), ('\u{d328}', '\u{d328}', GC_LV),
-        ('\u{d329}', '\u{d343}', GC_LVT), ('\u{d344}', '\u{d344}', GC_LV), ('\u{d345}', '\u{d35f}',
-        GC_LVT), ('\u{d360}', '\u{d360}', GC_LV), ('\u{d361}', '\u{d37b}', GC_LVT), ('\u{d37c}',
-        '\u{d37c}', GC_LV), ('\u{d37d}', '\u{d397}', GC_LVT), ('\u{d398}', '\u{d398}', GC_LV),
-        ('\u{d399}', '\u{d3b3}', GC_LVT), ('\u{d3b4}', '\u{d3b4}', GC_LV), ('\u{d3b5}', '\u{d3cf}',
-        GC_LVT), ('\u{d3d0}', '\u{d3d0}', GC_LV), ('\u{d3d1}', '\u{d3eb}', GC_LVT), ('\u{d3ec}',
-        '\u{d3ec}', GC_LV), ('\u{d3ed}', '\u{d407}', GC_LVT), ('\u{d408}', '\u{d408}', GC_LV),
-        ('\u{d409}', '\u{d423}', GC_LVT), ('\u{d424}', '\u{d424}', GC_LV), ('\u{d425}', '\u{d43f}',
-        GC_LVT), ('\u{d440}', '\u{d440}', GC_LV), ('\u{d441}', '\u{d45b}', GC_LVT), ('\u{d45c}',
-        '\u{d45c}', GC_LV), ('\u{d45d}', '\u{d477}', GC_LVT), ('\u{d478}', '\u{d478}', GC_LV),
-        ('\u{d479}', '\u{d493}', GC_LVT), ('\u{d494}', '\u{d494}', GC_LV), ('\u{d495}', '\u{d4af}',
-        GC_LVT), ('\u{d4b0}', '\u{d4b0}', GC_LV), ('\u{d4b1}', '\u{d4cb}', GC_LVT), ('\u{d4cc}',
-        '\u{d4cc}', GC_LV), ('\u{d4cd}', '\u{d4e7}', GC_LVT), ('\u{d4e8}', '\u{d4e8}', GC_LV),
-        ('\u{d4e9}', '\u{d503}', GC_LVT), ('\u{d504}', '\u{d504}', GC_LV), ('\u{d505}', '\u{d51f}',
-        GC_LVT), ('\u{d520}', '\u{d520}', GC_LV), ('\u{d521}', '\u{d53b}', GC_LVT), ('\u{d53c}',
-        '\u{d53c}', GC_LV), ('\u{d53d}', '\u{d557}', GC_LVT), ('\u{d558}', '\u{d558}', GC_LV),
-        ('\u{d559}', '\u{d573}', GC_LVT), ('\u{d574}', '\u{d574}', GC_LV), ('\u{d575}', '\u{d58f}',
-        GC_LVT), ('\u{d590}', '\u{d590}', GC_LV), ('\u{d591}', '\u{d5ab}', GC_LVT), ('\u{d5ac}',
-        '\u{d5ac}', GC_LV), ('\u{d5ad}', '\u{d5c7}', GC_LVT), ('\u{d5c8}', '\u{d5c8}', GC_LV),
-        ('\u{d5c9}', '\u{d5e3}', GC_LVT), ('\u{d5e4}', '\u{d5e4}', GC_LV), ('\u{d5e5}', '\u{d5ff}',
-        GC_LVT), ('\u{d600}', '\u{d600}', GC_LV), ('\u{d601}', '\u{d61b}', GC_LVT), ('\u{d61c}',
-        '\u{d61c}', GC_LV), ('\u{d61d}', '\u{d637}', GC_LVT), ('\u{d638}', '\u{d638}', GC_LV),
-        ('\u{d639}', '\u{d653}', GC_LVT), ('\u{d654}', '\u{d654}', GC_LV), ('\u{d655}', '\u{d66f}',
-        GC_LVT), ('\u{d670}', '\u{d670}', GC_LV), ('\u{d671}', '\u{d68b}', GC_LVT), ('\u{d68c}',
-        '\u{d68c}', GC_LV), ('\u{d68d}', '\u{d6a7}', GC_LVT), ('\u{d6a8}', '\u{d6a8}', GC_LV),
-        ('\u{d6a9}', '\u{d6c3}', GC_LVT), ('\u{d6c4}', '\u{d6c4}', GC_LV), ('\u{d6c5}', '\u{d6df}',
-        GC_LVT), ('\u{d6e0}', '\u{d6e0}', GC_LV), ('\u{d6e1}', '\u{d6fb}', GC_LVT), ('\u{d6fc}',
-        '\u{d6fc}', GC_LV), ('\u{d6fd}', '\u{d717}', GC_LVT), ('\u{d718}', '\u{d718}', GC_LV),
-        ('\u{d719}', '\u{d733}', GC_LVT), ('\u{d734}', '\u{d734}', GC_LV), ('\u{d735}', '\u{d74f}',
-        GC_LVT), ('\u{d750}', '\u{d750}', GC_LV), ('\u{d751}', '\u{d76b}', GC_LVT), ('\u{d76c}',
-        '\u{d76c}', GC_LV), ('\u{d76d}', '\u{d787}', GC_LVT), ('\u{d788}', '\u{d788}', GC_LV),
-        ('\u{d789}', '\u{d7a3}', GC_LVT), ('\u{d7b0}', '\u{d7c6}', GC_V), ('\u{d7cb}', '\u{d7fb}',
-        GC_T), ('\u{fb1e}', '\u{fb1e}', GC_Extend), ('\u{fe00}', '\u{fe0f}', GC_Extend),
-        ('\u{fe20}', '\u{fe2d}', GC_Extend), ('\u{feff}', '\u{feff}', GC_Control), ('\u{ff9e}',
-        '\u{ff9f}', GC_Extend), ('\u{fff0}', '\u{fffb}', GC_Control), ('\u{101fd}', '\u{101fd}',
-        GC_Extend), ('\u{102e0}', '\u{102e0}', GC_Extend), ('\u{10376}', '\u{1037a}', GC_Extend),
-        ('\u{10a01}', '\u{10a03}', GC_Extend), ('\u{10a05}', '\u{10a06}', GC_Extend), ('\u{10a0c}',
-        '\u{10a0f}', GC_Extend), ('\u{10a38}', '\u{10a3a}', GC_Extend), ('\u{10a3f}', '\u{10a3f}',
-        GC_Extend), ('\u{10ae5}', '\u{10ae6}', GC_Extend), ('\u{11000}', '\u{11000}',
-        GC_SpacingMark), ('\u{11001}', '\u{11001}', GC_Extend), ('\u{11002}', '\u{11002}',
-        GC_SpacingMark), ('\u{11038}', '\u{11046}', GC_Extend), ('\u{1107f}', '\u{11081}',
-        GC_Extend), ('\u{11082}', '\u{11082}', GC_SpacingMark), ('\u{110b0}', '\u{110b2}',
-        GC_SpacingMark), ('\u{110b3}', '\u{110b6}', GC_Extend), ('\u{110b7}', '\u{110b8}',
-        GC_SpacingMark), ('\u{110b9}', '\u{110ba}', GC_Extend), ('\u{110bd}', '\u{110bd}',
-        GC_Control), ('\u{11100}', '\u{11102}', GC_Extend), ('\u{11127}', '\u{1112b}', GC_Extend),
-        ('\u{1112c}', '\u{1112c}', GC_SpacingMark), ('\u{1112d}', '\u{11134}', GC_Extend),
-        ('\u{11173}', '\u{11173}', GC_Extend), ('\u{11180}', '\u{11181}', GC_Extend), ('\u{11182}',
-        '\u{11182}', GC_SpacingMark), ('\u{111b3}', '\u{111b5}', GC_SpacingMark), ('\u{111b6}',
-        '\u{111be}', GC_Extend), ('\u{111bf}', '\u{111c0}', GC_SpacingMark), ('\u{1122c}',
-        '\u{1122e}', GC_SpacingMark), ('\u{1122f}', '\u{11231}', GC_Extend), ('\u{11232}',
-        '\u{11233}', GC_SpacingMark), ('\u{11234}', '\u{11234}', GC_Extend), ('\u{11235}',
-        '\u{11235}', GC_SpacingMark), ('\u{11236}', '\u{11237}', GC_Extend), ('\u{112df}',
-        '\u{112df}', GC_Extend), ('\u{112e0}', '\u{112e2}', GC_SpacingMark), ('\u{112e3}',
-        '\u{112ea}', GC_Extend), ('\u{11301}', '\u{11301}', GC_Extend), ('\u{11302}', '\u{11303}',
-        GC_SpacingMark), ('\u{1133c}', '\u{1133c}', GC_Extend), ('\u{1133e}', '\u{1133e}',
-        GC_Extend), ('\u{1133f}', '\u{1133f}', GC_SpacingMark), ('\u{11340}', '\u{11340}',
-        GC_Extend), ('\u{11341}', '\u{11344}', GC_SpacingMark), ('\u{11347}', '\u{11348}',
-        GC_SpacingMark), ('\u{1134b}', '\u{1134d}', GC_SpacingMark), ('\u{11357}', '\u{11357}',
-        GC_Extend), ('\u{11362}', '\u{11363}', GC_SpacingMark), ('\u{11366}', '\u{1136c}',
-        GC_Extend), ('\u{11370}', '\u{11374}', GC_Extend), ('\u{114b0}', '\u{114b0}', GC_Extend),
-        ('\u{114b1}', '\u{114b2}', GC_SpacingMark), ('\u{114b3}', '\u{114b8}', GC_Extend),
-        ('\u{114b9}', '\u{114b9}', GC_SpacingMark), ('\u{114ba}', '\u{114ba}', GC_Extend),
-        ('\u{114bb}', '\u{114bc}', GC_SpacingMark), ('\u{114bd}', '\u{114bd}', GC_Extend),
-        ('\u{114be}', '\u{114be}', GC_SpacingMark), ('\u{114bf}', '\u{114c0}', GC_Extend),
-        ('\u{114c1}', '\u{114c1}', GC_SpacingMark), ('\u{114c2}', '\u{114c3}', GC_Extend),
-        ('\u{115af}', '\u{115af}', GC_Extend), ('\u{115b0}', '\u{115b1}', GC_SpacingMark),
-        ('\u{115b2}', '\u{115b5}', GC_Extend), ('\u{115b8}', '\u{115bb}', GC_SpacingMark),
-        ('\u{115bc}', '\u{115bd}', GC_Extend), ('\u{115be}', '\u{115be}', GC_SpacingMark),
-        ('\u{115bf}', '\u{115c0}', GC_Extend), ('\u{11630}', '\u{11632}', GC_SpacingMark),
-        ('\u{11633}', '\u{1163a}', GC_Extend), ('\u{1163b}', '\u{1163c}', GC_SpacingMark),
-        ('\u{1163d}', '\u{1163d}', GC_Extend), ('\u{1163e}', '\u{1163e}', GC_SpacingMark),
-        ('\u{1163f}', '\u{11640}', GC_Extend), ('\u{116ab}', '\u{116ab}', GC_Extend), ('\u{116ac}',
-        '\u{116ac}', GC_SpacingMark), ('\u{116ad}', '\u{116ad}', GC_Extend), ('\u{116ae}',
-        '\u{116af}', GC_SpacingMark), ('\u{116b0}', '\u{116b5}', GC_Extend), ('\u{116b6}',
-        '\u{116b6}', GC_SpacingMark), ('\u{116b7}', '\u{116b7}', GC_Extend), ('\u{16af0}',
-        '\u{16af4}', GC_Extend), ('\u{16b30}', '\u{16b36}', GC_Extend), ('\u{16f51}', '\u{16f7e}',
-        GC_SpacingMark), ('\u{16f8f}', '\u{16f92}', GC_Extend), ('\u{1bc9d}', '\u{1bc9e}',
-        GC_Extend), ('\u{1bca0}', '\u{1bca3}', GC_Control), ('\u{1d165}', '\u{1d165}', GC_Extend),
-        ('\u{1d166}', '\u{1d166}', GC_SpacingMark), ('\u{1d167}', '\u{1d169}', GC_Extend),
-        ('\u{1d16d}', '\u{1d16d}', GC_SpacingMark), ('\u{1d16e}', '\u{1d172}', GC_Extend),
-        ('\u{1d173}', '\u{1d17a}', GC_Control), ('\u{1d17b}', '\u{1d182}', GC_Extend), ('\u{1d185}',
-        '\u{1d18b}', GC_Extend), ('\u{1d1aa}', '\u{1d1ad}', GC_Extend), ('\u{1d242}', '\u{1d244}',
-        GC_Extend), ('\u{1e8d0}', '\u{1e8d6}', GC_Extend), ('\u{1f1e6}', '\u{1f1ff}',
-        GC_Regional_Indicator), ('\u{e0000}', '\u{e00ff}', GC_Control), ('\u{e0100}', '\u{e01ef}',
-        GC_Extend), ('\u{e01f0}', '\u{e0fff}', GC_Control)
-    ];
-
-}
diff --git a/src/librustc_unicode/u_str.rs b/src/librustc_unicode/u_str.rs
index a938312248f..f6e6ac508a7 100644
--- a/src/librustc_unicode/u_str.rs
+++ b/src/librustc_unicode/u_str.rs
@@ -13,22 +13,11 @@
 //! This module provides functionality to `str` that requires the Unicode methods provided by the
 //! unicode parts of the CharExt trait.
 
-use self::GraphemeState::*;
-
 use core::char;
-use core::cmp;
 use core::iter::Filter;
 use core::slice;
 use core::str::Split;
 
-use tables::grapheme::GraphemeCat;
-
-#[deprecated(reason = "struct Words is being replaced by struct SplitWhitespace",
-             since = "1.1.0")]
-#[unstable(feature = "str_words",
-           reason = "words() will be replaced by split_whitespace() in 1.1.0")]
-pub type Words<'a> = SplitWhitespace<'a>;
-
 /// An iterator over the non-whitespace substrings of a string,
 /// separated by any amount of whitespace.
 #[stable(feature = "split_whitespace", since = "1.1.0")]
@@ -39,14 +28,9 @@ pub struct SplitWhitespace<'a> {
 /// Methods for Unicode string slices
 #[allow(missing_docs)] // docs in libcollections
 pub trait UnicodeStr {
-    fn graphemes<'a>(&'a self, is_extended: bool) -> Graphemes<'a>;
-    fn grapheme_indices<'a>(&'a self, is_extended: bool) -> GraphemeIndices<'a>;
-    #[allow(deprecated)]
-    fn words<'a>(&'a self) -> Words<'a>;
     fn split_whitespace<'a>(&'a self) -> SplitWhitespace<'a>;
     fn is_whitespace(&self) -> bool;
     fn is_alphanumeric(&self) -> bool;
-    fn width(&self, is_cjk: bool) -> usize;
     fn trim<'a>(&'a self) -> &'a str;
     fn trim_left<'a>(&'a self) -> &'a str;
     fn trim_right<'a>(&'a self) -> &'a str;
@@ -54,22 +38,6 @@ pub trait UnicodeStr {
 
 impl UnicodeStr for str {
     #[inline]
-    fn graphemes(&self, is_extended: bool) -> Graphemes {
-        Graphemes { string: self, extended: is_extended, cat: None, catb: None }
-    }
-
-    #[inline]
-    fn grapheme_indices(&self, is_extended: bool) -> GraphemeIndices {
-        GraphemeIndices { start_offset: self.as_ptr() as usize, iter: self.graphemes(is_extended) }
-    }
-
-    #[allow(deprecated)]
-    #[inline]
-    fn words(&self) -> Words {
-        self.split_whitespace()
-    }
-
-    #[inline]
     fn split_whitespace(&self) -> SplitWhitespace {
         fn is_not_empty(s: &&str) -> bool { !s.is_empty() }
         let is_not_empty: fn(&&str) -> bool = is_not_empty; // coerce to fn pointer
@@ -86,12 +54,6 @@ impl UnicodeStr for str {
     #[inline]
     fn is_alphanumeric(&self) -> bool { self.chars().all(|c| c.is_alphanumeric()) }
 
-    #[allow(deprecated)]
-    #[inline]
-    fn width(&self, is_cjk: bool) -> usize {
-        self.chars().map(|c| c.width(is_cjk).unwrap_or(0)).sum()
-    }
-
     #[inline]
     fn trim(&self) -> &str {
         self.trim_matches(|c: char| c.is_whitespace())
@@ -108,264 +70,6 @@ impl UnicodeStr for str {
     }
 }
 
-/// External iterator for grapheme clusters and byte offsets.
-#[derive(Clone)]
-pub struct GraphemeIndices<'a> {
-    start_offset: usize,
-    iter: Graphemes<'a>,
-}
-
-impl<'a> Iterator for GraphemeIndices<'a> {
-    type Item = (usize, &'a str);
-
-    #[inline]
-    fn next(&mut self) -> Option<(usize, &'a str)> {
-        self.iter.next().map(|s| (s.as_ptr() as usize - self.start_offset, s))
-    }
-
-    #[inline]
-    fn size_hint(&self) -> (usize, Option<usize>) {
-        self.iter.size_hint()
-    }
-}
-
-impl<'a> DoubleEndedIterator for GraphemeIndices<'a> {
-    #[inline]
-    fn next_back(&mut self) -> Option<(usize, &'a str)> {
-        self.iter.next_back().map(|s| (s.as_ptr() as usize - self.start_offset, s))
-    }
-}
-
-/// External iterator for a string's
-/// [grapheme clusters](http://www.unicode.org/reports/tr29/#Grapheme_Cluster_Boundaries).
-#[derive(Clone)]
-pub struct Graphemes<'a> {
-    string: &'a str,
-    extended: bool,
-    cat: Option<GraphemeCat>,
-    catb: Option<GraphemeCat>,
-}
-
-// state machine for cluster boundary rules
-#[derive(PartialEq,Eq)]
-enum GraphemeState {
-    Start,
-    FindExtend,
-    HangulL,
-    HangulLV,
-    HangulLVT,
-    Regional,
-}
-
-impl<'a> Iterator for Graphemes<'a> {
-    type Item = &'a str;
-
-    #[inline]
-    fn size_hint(&self) -> (usize, Option<usize>) {
-        let slen = self.string.len();
-        (cmp::min(slen, 1), Some(slen))
-    }
-
-    #[inline]
-    fn next(&mut self) -> Option<&'a str> {
-        use tables::grapheme as gr;
-        if self.string.is_empty() {
-            return None;
-        }
-
-        let mut take_curr = true;
-        let mut idx = 0;
-        let mut state = Start;
-        let mut cat = gr::GC_Any;
-        for (curr, ch) in self.string.char_indices() {
-            idx = curr;
-
-            // retrieve cached category, if any
-            // We do this because most of the time we would end up
-            // looking up each character twice.
-            cat = match self.cat {
-                None => gr::grapheme_category(ch),
-                _ => self.cat.take().unwrap()
-            };
-
-            if match cat {
-                gr::GC_Extend => true,
-                gr::GC_SpacingMark if self.extended => true,
-                _ => false
-            } {
-                    state = FindExtend;     // rule GB9/GB9a
-                    continue;
-            }
-
-            state = match state {
-                Start if '\r' == ch => {
-                    let slen = self.string.len();
-                    let nidx = idx + 1;
-                    if nidx != slen && self.string.char_at(nidx) == '\n' {
-                        idx = nidx;             // rule GB3
-                    }
-                    break;                      // rule GB4
-                }
-                Start => match cat {
-                    gr::GC_Control => break,
-                    gr::GC_L => HangulL,
-                    gr::GC_LV | gr::GC_V => HangulLV,
-                    gr::GC_LVT | gr::GC_T => HangulLVT,
-                    gr::GC_Regional_Indicator => Regional,
-                    _ => FindExtend
-                },
-                FindExtend => {         // found non-extending when looking for extending
-                    take_curr = false;
-                    break;
-                },
-                HangulL => match cat {      // rule GB6: L x (L|V|LV|LVT)
-                    gr::GC_L => continue,
-                    gr::GC_LV | gr::GC_V => HangulLV,
-                    gr::GC_LVT => HangulLVT,
-                    _ => {
-                        take_curr = false;
-                        break;
-                    }
-                },
-                HangulLV => match cat {     // rule GB7: (LV|V) x (V|T)
-                    gr::GC_V => continue,
-                    gr::GC_T => HangulLVT,
-                    _ => {
-                        take_curr = false;
-                        break;
-                    }
-                },
-                HangulLVT => match cat {    // rule GB8: (LVT|T) x T
-                    gr::GC_T => continue,
-                    _ => {
-                        take_curr = false;
-                        break;
-                    }
-                },
-                Regional => match cat {     // rule GB8a
-                    gr::GC_Regional_Indicator => continue,
-                    _ => {
-                        take_curr = false;
-                        break;
-                    }
-                }
-            }
-        }
-
-        self.cat = if take_curr {
-            idx = idx + self.string.char_at(idx).len_utf8();
-            None
-        } else {
-            Some(cat)
-        };
-
-        let retstr = &self.string[..idx];
-        self.string = &self.string[idx..];
-        Some(retstr)
-    }
-}
-
-impl<'a> DoubleEndedIterator for Graphemes<'a> {
-    #[inline]
-    fn next_back(&mut self) -> Option<&'a str> {
-        use tables::grapheme as gr;
-        if self.string.is_empty() {
-            return None;
-        }
-
-        let mut take_curr = true;
-        let mut idx = self.string.len();
-        let mut previdx = idx;
-        let mut state = Start;
-        let mut cat = gr::GC_Any;
-        for (curr, ch) in self.string.char_indices().rev() {
-            previdx = idx;
-            idx = curr;
-
-            // cached category, if any
-            cat = match self.catb {
-                None => gr::grapheme_category(ch),
-                _ => self.catb.take().unwrap()
-            };
-
-            // a matching state machine that runs *backwards* across an input string
-            // note that this has some implications for the Hangul matching, since
-            // we now need to know what the rightward letter is:
-            //
-            // Right to left, we have:
-            //      L x L
-            //      V x (L|V|LV)
-            //      T x (V|T|LV|LVT)
-            // HangulL means the letter to the right is L
-            // HangulLV means the letter to the right is V
-            // HangulLVT means the letter to the right is T
-            state = match state {
-                Start if '\n' == ch => {
-                    if idx > 0 && '\r' == self.string.char_at_reverse(idx) {
-                        idx -= 1;       // rule GB3
-                    }
-                    break;              // rule GB4
-                },
-                Start | FindExtend => match cat {
-                    gr::GC_Extend => FindExtend,
-                    gr::GC_SpacingMark if self.extended => FindExtend,
-                    gr::GC_L | gr::GC_LV | gr::GC_LVT => HangulL,
-                    gr::GC_V => HangulLV,
-                    gr::GC_T => HangulLVT,
-                    gr::GC_Regional_Indicator => Regional,
-                    gr::GC_Control => {
-                        take_curr = Start == state;
-                        break;
-                    },
-                    _ => break
-                },
-                HangulL => match cat {      // char to right is an L
-                    gr::GC_L => continue,               // L x L is the only legal match
-                    _ => {
-                        take_curr = false;
-                        break;
-                    }
-                },
-                HangulLV => match cat {     // char to right is a V
-                    gr::GC_V => continue,               // V x V, right char is still V
-                    gr::GC_L | gr::GC_LV => HangulL,    // (L|V) x V, right char is now L
-                    _ => {
-                        take_curr = false;
-                        break;
-                    }
-                },
-                HangulLVT => match cat {    // char to right is a T
-                    gr::GC_T => continue,               // T x T, right char is still T
-                    gr::GC_V => HangulLV,               // V x T, right char is now V
-                    gr::GC_LV | gr::GC_LVT => HangulL,  // (LV|LVT) x T, right char is now L
-                    _ => {
-                        take_curr = false;
-                        break;
-                    }
-                },
-                Regional => match cat {     // rule GB8a
-                    gr::GC_Regional_Indicator => continue,
-                    _ => {
-                        take_curr = false;
-                        break;
-                    }
-                }
-            }
-        }
-
-        self.catb = if take_curr {
-            None
-        } else  {
-            idx = previdx;
-            Some(cat)
-        };
-
-        let retstr = &self.string[idx..];
-        self.string = &self.string[..idx];
-        Some(retstr)
-    }
-}
-
 // https://tools.ietf.org/html/rfc3629
 static UTF8_CHAR_WIDTH: [u8; 256] = [
 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
diff --git a/src/librustdoc/lib.rs b/src/librustdoc/lib.rs
index 9ceb2195f03..2f2c63ef19e 100644
--- a/src/librustdoc/lib.rs
+++ b/src/librustdoc/lib.rs
@@ -354,7 +354,6 @@ fn parse_externs(matches: &getopts::Matches) -> Result<core::Externs, String> {
 /// generated from the cleaned AST of the crate.
 ///
 /// This form of input will run all of the plug/cleaning passes
-#[allow(deprecated)] // for old Path in plugin manager
 fn rust_input(cratefile: &str, externs: core::Externs, matches: &getopts::Matches) -> Output {
     let mut default_passes = !matches.opt_present("no-defaults");
     let mut passes = matches.opt_strs("passes");
diff --git a/src/librustdoc/plugins.rs b/src/librustdoc/plugins.rs
index e48651a154e..a81787dad77 100644
--- a/src/librustdoc/plugins.rs
+++ b/src/librustdoc/plugins.rs
@@ -8,8 +8,6 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-#![allow(deprecated)] // old path, used for compatibility with dynamic lib
-
 use clean;
 
 use std::dynamic_lib as dl;
diff --git a/src/libserialize/collection_impls.rs b/src/libserialize/collection_impls.rs
index 4b31a606931..cb949940b6d 100644
--- a/src/libserialize/collection_impls.rs
+++ b/src/libserialize/collection_impls.rs
@@ -8,9 +8,6 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-// VecMap
-#![allow(deprecated)]
-
 //! Implementations of serialization for structures found in libcollections
 
 use std::usize;
@@ -19,7 +16,7 @@ use std::hash::Hash;
 use std::collections::hash_state::HashState;
 
 use {Decodable, Encodable, Decoder, Encoder};
-use std::collections::{LinkedList, VecDeque, BTreeMap, BTreeSet, HashMap, HashSet, VecMap};
+use std::collections::{LinkedList, VecDeque, BTreeMap, BTreeSet, HashMap, HashSet};
 use collections::enum_set::{EnumSet, CLike};
 
 impl<
@@ -228,29 +225,3 @@ impl<T, S> Decodable for HashSet<T, S>
         })
     }
 }
-
-impl<V: Encodable> Encodable for VecMap<V> {
-    fn encode<S: Encoder>(&self, e: &mut S) -> Result<(), S::Error> {
-        e.emit_map(self.len(), |e| {
-                for (i, (key, val)) in self.iter().enumerate() {
-                    try!(e.emit_map_elt_key(i, |e| key.encode(e)));
-                    try!(e.emit_map_elt_val(i, |e| val.encode(e)));
-                }
-                Ok(())
-            })
-    }
-}
-
-impl<V: Decodable> Decodable for VecMap<V> {
-    fn decode<D: Decoder>(d: &mut D) -> Result<VecMap<V>, D::Error> {
-        d.read_map(|d, len| {
-            let mut map = VecMap::new();
-            for i in 0..len {
-                let key = try!(d.read_map_elt_key(i, |d| Decodable::decode(d)));
-                let val = try!(d.read_map_elt_val(i, |d| Decodable::decode(d)));
-                map.insert(key, val);
-            }
-            Ok(map)
-        })
-    }
-}
diff --git a/src/libserialize/json.rs b/src/libserialize/json.rs
index 0096d8d22ae..e474f47a1b5 100644
--- a/src/libserialize/json.rs
+++ b/src/libserialize/json.rs
@@ -1552,7 +1552,6 @@ impl<T: Iterator<Item=char>> Parser<T> {
         }
     }
 
-    #[allow(deprecated)] // possible resolve bug is mapping these to traits
     fn parse_u64(&mut self) -> Result<u64, ParserError> {
         let mut accum = 0u64;
         let last_accum = 0; // necessary to detect overflow.
diff --git a/src/libserialize/lib.rs b/src/libserialize/lib.rs
index 561cd8745f3..7472839a59c 100644
--- a/src/libserialize/lib.rs
+++ b/src/libserialize/lib.rs
@@ -36,7 +36,6 @@ Core encoding and decoding interfaces.
 #![feature(staged_api)]
 #![feature(str_char)]
 #![feature(unicode)]
-#![feature(vecmap)]
 #![cfg_attr(test, feature(test))]
 
 // test harness access
diff --git a/src/libstd/ascii.rs b/src/libstd/ascii.rs
index ded572e82ff..82b5f60d65c 100644
--- a/src/libstd/ascii.rs
+++ b/src/libstd/ascii.rs
@@ -17,24 +17,6 @@ use prelude::v1::*;
 use mem;
 use ops::Range;
 
-/// Extension methods for ASCII-subset only operations on owned strings
-#[unstable(feature = "owned_ascii_ext",
-           reason = "would prefer to do this in a more general way")]
-#[deprecated(since = "1.3.0",
-             reason = "hasn't yet proved essential to be in the standard library")]
-#[allow(deprecated)]
-pub trait OwnedAsciiExt {
-    /// Converts the string to ASCII upper case:
-    /// ASCII letters 'a' to 'z' are mapped to 'A' to 'Z',
-    /// but non-ASCII letters are unchanged.
-    fn into_ascii_uppercase(self) -> Self;
-
-    /// Converts the string to ASCII lower case:
-    /// ASCII letters 'A' to 'Z' are mapped to 'a' to 'z',
-    /// but non-ASCII letters are unchanged.
-    fn into_ascii_lowercase(self) -> Self;
-}
-
 /// Extension methods for ASCII-subset only operations on string slices.
 #[stable(feature = "rust1", since = "1.0.0")]
 pub trait AsciiExt {
@@ -169,15 +151,19 @@ impl AsciiExt for str {
     }
 
     #[inline]
-    #[allow(deprecated)]
     fn to_ascii_uppercase(&self) -> String {
-        self.to_string().into_ascii_uppercase()
+        let mut bytes = self.as_bytes().to_vec();
+        bytes.make_ascii_uppercase();
+        // make_ascii_uppercase() preserves the UTF-8 invariant.
+        unsafe { String::from_utf8_unchecked(bytes) }
     }
 
     #[inline]
-    #[allow(deprecated)]
     fn to_ascii_lowercase(&self) -> String {
-        self.to_string().into_ascii_lowercase()
+        let mut bytes = self.as_bytes().to_vec();
+        bytes.make_ascii_lowercase();
+        // make_ascii_uppercase() preserves the UTF-8 invariant.
+        unsafe { String::from_utf8_unchecked(bytes) }
     }
 
     #[inline]
@@ -196,21 +182,6 @@ impl AsciiExt for str {
     }
 }
 
-#[allow(deprecated)]
-impl OwnedAsciiExt for String {
-    #[inline]
-    fn into_ascii_uppercase(self) -> String {
-        // Vec<u8>::into_ascii_uppercase() preserves the UTF-8 invariant.
-        unsafe { String::from_utf8_unchecked(self.into_bytes().into_ascii_uppercase()) }
-    }
-
-    #[inline]
-    fn into_ascii_lowercase(self) -> String {
-        // Vec<u8>::into_ascii_lowercase() preserves the UTF-8 invariant.
-        unsafe { String::from_utf8_unchecked(self.into_bytes().into_ascii_lowercase()) }
-    }
-}
-
 #[stable(feature = "rust1", since = "1.0.0")]
 impl AsciiExt for [u8] {
     type Owned = Vec<u8>;
@@ -220,15 +191,17 @@ impl AsciiExt for [u8] {
     }
 
     #[inline]
-    #[allow(deprecated)]
     fn to_ascii_uppercase(&self) -> Vec<u8> {
-        self.to_vec().into_ascii_uppercase()
+        let mut me = self.to_vec();
+        me.make_ascii_uppercase();
+        return me
     }
 
     #[inline]
-    #[allow(deprecated)]
     fn to_ascii_lowercase(&self) -> Vec<u8> {
-        self.to_vec().into_ascii_lowercase()
+        let mut me = self.to_vec();
+        me.make_ascii_lowercase();
+        return me
     }
 
     #[inline]
@@ -252,21 +225,6 @@ impl AsciiExt for [u8] {
     }
 }
 
-#[allow(deprecated)]
-impl OwnedAsciiExt for Vec<u8> {
-    #[inline]
-    fn into_ascii_uppercase(mut self) -> Vec<u8> {
-        self.make_ascii_uppercase();
-        self
-    }
-
-    #[inline]
-    fn into_ascii_lowercase(mut self) -> Vec<u8> {
-        self.make_ascii_lowercase();
-        self
-    }
-}
-
 #[stable(feature = "rust1", since = "1.0.0")]
 impl AsciiExt for u8 {
     type Owned = u8;
@@ -523,35 +481,6 @@ mod tests {
     }
 
     #[test]
-    fn test_into_ascii_uppercase() {
-        assert_eq!(("url()URL()uRl()ürl".to_string()).into_ascii_uppercase(),
-                   "URL()URL()URL()üRL".to_string());
-        assert_eq!(("hıKß".to_string()).into_ascii_uppercase(), "HıKß");
-
-        for i in 0..501 {
-            let upper = if 'a' as u32 <= i && i <= 'z' as u32 { i + 'A' as u32 - 'a' as u32 }
-                        else { i };
-            assert_eq!((from_u32(i).unwrap()).to_string().into_ascii_uppercase(),
-                       (from_u32(upper).unwrap()).to_string());
-        }
-    }
-
-    #[test]
-    fn test_into_ascii_lowercase() {
-        assert_eq!(("url()URL()uRl()Ürl".to_string()).into_ascii_lowercase(),
-                   "url()url()url()Ürl");
-        // Dotted capital I, Kelvin sign, Sharp S.
-        assert_eq!(("HİKß".to_string()).into_ascii_lowercase(), "hİKß");
-
-        for i in 0..501 {
-            let lower = if 'A' as u32 <= i && i <= 'Z' as u32 { i + 'a' as u32 - 'A' as u32 }
-                        else { i };
-            assert_eq!((from_u32(i).unwrap()).to_string().into_ascii_lowercase(),
-                       (from_u32(lower).unwrap()).to_string());
-        }
-    }
-
-    #[test]
     fn test_make_ascii_lower_case() {
         macro_rules! test {
             ($from: expr, $to: expr) => {
diff --git a/src/libstd/collections/hash/map.rs b/src/libstd/collections/hash/map.rs
index 66f894fc31f..654b2eac4ba 100644
--- a/src/libstd/collections/hash/map.rs
+++ b/src/libstd/collections/hash/map.rs
@@ -24,7 +24,7 @@ use mem::{self, replace};
 use ops::{Deref, FnMut, FnOnce, Index};
 use option::Option::{self, Some, None};
 use rand::{self, Rng};
-use result::Result::{self, Ok, Err};
+use result::Result;
 
 use super::table::{
     self,
@@ -1482,18 +1482,6 @@ impl<'a, K, V> ExactSizeIterator for Drain<'a, K, V> {
 }
 
 impl<'a, K, V> Entry<'a, K, V> {
-    #[unstable(feature = "entry",
-               reason = "will soon be replaced by or_insert")]
-    #[deprecated(since = "1.0",
-                reason = "replaced with more ergonomic `or_insert` and `or_insert_with`")]
-    /// Returns a mutable reference to the entry if occupied, or the VacantEntry if vacant
-    pub fn get(self) -> Result<&'a mut V, VacantEntry<'a, K, V>> {
-        match self {
-            Occupied(entry) => Ok(entry.into_mut()),
-            Vacant(entry) => Err(entry),
-        }
-    }
-
     #[stable(feature = "rust1", since = "1.0.0")]
     /// Ensures a value is in the entry by inserting the default if empty, and returns
     /// a mutable reference to the value in the entry.
@@ -1610,7 +1598,7 @@ pub struct RandomState {
 impl RandomState {
     /// Constructs a new `RandomState` that is initialized with random keys.
     #[inline]
-    #[allow(deprecated)]
+    #[allow(deprecated)] // rand
     pub fn new() -> RandomState {
         let mut r = rand::thread_rng();
         RandomState { k0: r.gen(), k1: r.gen() }
diff --git a/src/libstd/collections/mod.rs b/src/libstd/collections/mod.rs
index c91ebc91ef3..d59d08497d2 100644
--- a/src/libstd/collections/mod.rs
+++ b/src/libstd/collections/mod.rs
@@ -385,11 +385,11 @@
 #![stable(feature = "rust1", since = "1.0.0")]
 
 pub use core_collections::Bound;
-pub use core_collections::{BinaryHeap, BitVec, BitSet, BTreeMap, BTreeSet};
-pub use core_collections::{LinkedList, VecDeque, VecMap};
+pub use core_collections::{BinaryHeap, BTreeMap, BTreeSet};
+pub use core_collections::{LinkedList, VecDeque};
 
-pub use core_collections::{binary_heap, bit_vec, bit_set, btree_map, btree_set};
-pub use core_collections::{linked_list, vec_deque, vec_map};
+pub use core_collections::{binary_heap, btree_map, btree_set};
+pub use core_collections::{linked_list, vec_deque};
 
 pub use self::hash_map::HashMap;
 pub use self::hash_set::HashSet;
diff --git a/src/libstd/env.rs b/src/libstd/env.rs
index d1a49da461e..d80a222d8d2 100644
--- a/src/libstd/env.rs
+++ b/src/libstd/env.rs
@@ -23,7 +23,6 @@ use ffi::{OsStr, OsString};
 use fmt;
 use io;
 use path::{Path, PathBuf};
-use sync::atomic::{AtomicIsize, Ordering};
 use sync::StaticMutex;
 use sys::os as os_imp;
 
@@ -474,30 +473,6 @@ pub fn current_exe() -> io::Result<PathBuf> {
     os_imp::current_exe()
 }
 
-static EXIT_STATUS: AtomicIsize = AtomicIsize::new(0);
-
-/// Sets the process exit code
-///
-/// Sets the exit code returned by the process if all supervised threads
-/// terminate successfully (without panicking). If the current root thread panics
-/// and is supervised by the scheduler then any user-specified exit status is
-/// ignored and the process exits with the default panic status.
-///
-/// Note that this is not synchronized against modifications of other threads.
-#[unstable(feature = "exit_status", reason = "managing the exit status may change")]
-#[deprecated(since = "1.2.0", reason = "use process::exit instead")]
-pub fn set_exit_status(code: i32) {
-    EXIT_STATUS.store(code as isize, Ordering::SeqCst)
-}
-
-/// Fetches the process's current exit code. This defaults to 0 and can change
-/// by calling `set_exit_status`.
-#[unstable(feature = "exit_status", reason = "managing the exit status may change")]
-#[deprecated(since = "1.2.0", reason = "use process::exit instead")]
-pub fn get_exit_status() -> i32 {
-    EXIT_STATUS.load(Ordering::SeqCst) as i32
-}
-
 /// An iterator over the arguments of a process, yielding a `String` value
 /// for each argument.
 ///
@@ -588,14 +563,6 @@ impl ExactSizeIterator for ArgsOs {
     fn len(&self) -> usize { self.inner.len() }
 }
 
-/// Returns the page size of the current architecture in bytes.
-#[unstable(feature = "page_size", reason = "naming and/or location may change")]
-#[deprecated(since = "1.3.0",
-             reason = "hasn't seen enough usage to justify inclusion")]
-pub fn page_size() -> usize {
-    os_imp::page_size()
-}
-
 /// Constants associated with the current target
 #[stable(feature = "env", since = "1.0.0")]
 pub mod consts {
diff --git a/src/libstd/ffi/c_str.rs b/src/libstd/ffi/c_str.rs
index 3e503074ab4..f99d3c14ed8 100644
--- a/src/libstd/ffi/c_str.rs
+++ b/src/libstd/ffi/c_str.rs
@@ -468,6 +468,7 @@ mod tests {
     use super::*;
     use libc;
     use borrow::Cow::{Borrowed, Owned};
+    use hash::{SipHasher, Hash, Hasher};
 
     #[test]
     fn c_to_rust() {
@@ -545,15 +546,16 @@ mod tests {
 
     #[test]
     fn equal_hash() {
-        use hash;
-
         let data = b"123\xE2\xFA\xA6\0";
         let ptr = data.as_ptr() as *const libc::c_char;
         let cstr: &'static CStr = unsafe { CStr::from_ptr(ptr) };
 
-        let cstr_hash = hash::hash::<_, hash::SipHasher>(&cstr);
-        let cstring_hash =
-            hash::hash::<_, hash::SipHasher>(&CString::new(&data[..data.len() - 1]).unwrap());
+        let mut s = SipHasher::new_with_keys(0, 0);
+        cstr.hash(&mut s);
+        let cstr_hash = s.finish();
+        let mut s = SipHasher::new_with_keys(0, 0);
+        CString::new(&data[..data.len() - 1]).unwrap().hash(&mut s);
+        let cstring_hash = s.finish();
 
         assert_eq!(cstr_hash, cstring_hash);
     }
diff --git a/src/libstd/fs.rs b/src/libstd/fs.rs
index ba32ffc49d4..53caa0e78e2 100644
--- a/src/libstd/fs.rs
+++ b/src/libstd/fs.rs
@@ -1216,23 +1216,6 @@ impl PathExt for Path {
     }
 }
 
-/// Changes the timestamps for a file's last modification and access time.
-///
-/// The file at the path specified will have its last access time set to
-/// `accessed` and its modification time set to `modified`. The times specified
-/// should be in milliseconds.
-#[unstable(feature = "fs_time",
-           reason = "the argument type of u64 is not quite appropriate for \
-                     this function and may change if the standard library \
-                     gains a type to represent a moment in time")]
-#[deprecated(since = "1.3.0",
-             reason = "will never be stabilized as-is and its replacement will \
-                       likely have a totally new API")]
-pub fn set_file_times<P: AsRef<Path>>(path: P, accessed: u64,
-                                 modified: u64) -> io::Result<()> {
-    fs_imp::utimes(path.as_ref(), accessed, modified)
-}
-
 /// Changes the permissions found on a file or a directory.
 ///
 /// # Examples
@@ -2050,44 +2033,6 @@ mod tests {
     }
 
     #[test]
-    fn utime() {
-        let tmpdir = tmpdir();
-        let path = tmpdir.join("a");
-        check!(File::create(&path));
-        // These numbers have to be bigger than the time in the day to account
-        // for timezones Windows in particular will fail in certain timezones
-        // with small enough values
-        check!(fs::set_file_times(&path, 100_000, 200_000));
-
-        check(&check!(path.metadata()));
-
-        #[cfg(unix)]
-        fn check(metadata: &fs::Metadata) {
-            use os::unix::prelude::*;
-            assert_eq!(metadata.atime(), 100);
-            assert_eq!(metadata.atime_nsec(), 0);
-            assert_eq!(metadata.mtime(), 200);
-            assert_eq!(metadata.mtime_nsec(), 0);
-        }
-        #[cfg(windows)]
-        fn check(metadata: &fs::Metadata) {
-            use os::windows::prelude::*;
-            assert_eq!(metadata.last_access_time(), 100_000 * 10_000);
-            assert_eq!(metadata.last_write_time(), 200_000 * 10_000);
-        }
-    }
-
-    #[test]
-    fn utime_noexist() {
-        let tmpdir = tmpdir();
-
-        match fs::set_file_times(&tmpdir.join("a"), 100, 200) {
-            Ok(..) => panic!(),
-            Err(..) => {}
-        }
-    }
-
-    #[test]
     fn binary_file() {
         let mut bytes = [0; 1024];
         StdRng::new().unwrap().fill_bytes(&mut bytes);
diff --git a/src/libstd/io/buffered.rs b/src/libstd/io/buffered.rs
index eca6ffc8ce3..90bcbe7fe86 100644
--- a/src/libstd/io/buffered.rs
+++ b/src/libstd/io/buffered.rs
@@ -785,129 +785,11 @@ impl<W: Read + Write> Read for InternalBufWriter<W> {
     }
 }
 
-/// Wraps a Stream and buffers input and output to and from it.
-///
-/// It can be excessively inefficient to work directly with a `Read+Write`. For
-/// example, every call to `read` or `write` on `TcpStream` results in a system
-/// call. A `BufStream` keeps in memory buffers of data, making large,
-/// infrequent calls to `read` and `write` on the underlying `Read+Write`.
-///
-/// The output buffer will be written out when this stream is dropped.
-#[unstable(feature = "buf_stream",
-           reason = "unsure about semantics of buffering two directions, \
-                     leading to issues like #17136")]
-#[deprecated(since = "1.2.0",
-             reason = "use the crates.io `bufstream` crate instead")]
-pub struct BufStream<S: Write> {
-    inner: BufReader<InternalBufWriter<S>>
-}
-
-#[unstable(feature = "buf_stream",
-           reason = "unsure about semantics of buffering two directions, \
-                     leading to issues like #17136")]
-#[deprecated(since = "1.2.0",
-             reason = "use the crates.io `bufstream` crate instead")]
-#[allow(deprecated)]
-impl<S: Read + Write> BufStream<S> {
-    /// Creates a new buffered stream with explicitly listed capacities for the
-    /// reader/writer buffer.
-    pub fn with_capacities(reader_cap: usize, writer_cap: usize, inner: S)
-                           -> BufStream<S> {
-        let writer = BufWriter::with_capacity(writer_cap, inner);
-        let internal_writer = InternalBufWriter(writer);
-        let reader = BufReader::with_capacity(reader_cap, internal_writer);
-        BufStream { inner: reader }
-    }
-
-    /// Creates a new buffered stream with the default reader/writer buffer
-    /// capacities.
-    pub fn new(inner: S) -> BufStream<S> {
-        BufStream::with_capacities(DEFAULT_BUF_SIZE, DEFAULT_BUF_SIZE, inner)
-    }
-
-    /// Gets a reference to the underlying stream.
-    pub fn get_ref(&self) -> &S {
-        let InternalBufWriter(ref w) = self.inner.inner;
-        w.get_ref()
-    }
-
-    /// Gets a mutable reference to the underlying stream.
-    ///
-    /// It is inadvisable to read directly from or write directly to the
-    /// underlying stream.
-    pub fn get_mut(&mut self) -> &mut S {
-        let InternalBufWriter(ref mut w) = self.inner.inner;
-        w.get_mut()
-    }
-
-    /// Unwraps this `BufStream`, returning the underlying stream.
-    ///
-    /// The internal write buffer is written out before returning the stream.
-    /// Any leftover data in the read buffer is lost.
-    pub fn into_inner(self) -> Result<S, IntoInnerError<BufStream<S>>> {
-        let BufReader { inner: InternalBufWriter(w), buf, pos, cap } = self.inner;
-        w.into_inner().map_err(|IntoInnerError(w, e)| {
-            IntoInnerError(BufStream {
-                inner: BufReader { inner: InternalBufWriter(w), buf: buf, pos: pos, cap: cap },
-            }, e)
-        })
-    }
-}
-
-#[unstable(feature = "buf_stream",
-           reason = "unsure about semantics of buffering two directions, \
-                     leading to issues like #17136")]
-#[allow(deprecated)]
-impl<S: Read + Write> BufRead for BufStream<S> {
-    fn fill_buf(&mut self) -> io::Result<&[u8]> { self.inner.fill_buf() }
-    fn consume(&mut self, amt: usize) { self.inner.consume(amt) }
-}
-
-#[unstable(feature = "buf_stream",
-           reason = "unsure about semantics of buffering two directions, \
-                     leading to issues like #17136")]
-#[allow(deprecated)]
-impl<S: Read + Write> Read for BufStream<S> {
-    fn read(&mut self, buf: &mut [u8]) -> io::Result<usize> {
-        self.inner.read(buf)
-    }
-}
-
-#[unstable(feature = "buf_stream",
-           reason = "unsure about semantics of buffering two directions, \
-                     leading to issues like #17136")]
-#[allow(deprecated)]
-impl<S: Read + Write> Write for BufStream<S> {
-    fn write(&mut self, buf: &[u8]) -> io::Result<usize> {
-        self.inner.inner.get_mut().write(buf)
-    }
-    fn flush(&mut self) -> io::Result<()> {
-        self.inner.inner.get_mut().flush()
-    }
-}
-
-#[unstable(feature = "buf_stream",
-           reason = "unsure about semantics of buffering two directions, \
-                     leading to issues like #17136")]
-#[allow(deprecated)]
-impl<S: Write> fmt::Debug for BufStream<S> where S: fmt::Debug {
-    fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
-        let reader = &self.inner;
-        let writer = &self.inner.inner.0;
-        fmt.debug_struct("BufStream")
-            .field("stream", &writer.inner)
-            .field("write_buffer", &format_args!("{}/{}", writer.buf.len(), writer.buf.capacity()))
-            .field("read_buffer",
-                   &format_args!("{}/{}", reader.cap - reader.pos, reader.buf.len()))
-            .finish()
-    }
-}
-
 #[cfg(test)]
 mod tests {
     use prelude::v1::*;
     use io::prelude::*;
-    use io::{self, BufReader, BufWriter, BufStream, Cursor, LineWriter, SeekFrom};
+    use io::{self, BufReader, BufWriter, Cursor, LineWriter, SeekFrom};
     use test;
 
     /// A dummy reader intended at testing short-reads propagation.
@@ -1078,27 +960,6 @@ mod tests {
         assert_eq!(&w.into_inner().unwrap().into_inner()[..], &[0, 1, 8, 9, 4, 5, 6, 7]);
     }
 
-    // This is just here to make sure that we don't infinite loop in the
-    // newtype struct autoderef weirdness
-    #[test]
-    fn test_buffered_stream() {
-        struct S;
-
-        impl Write for S {
-            fn write(&mut self, b: &[u8]) -> io::Result<usize> { Ok(b.len()) }
-            fn flush(&mut self) -> io::Result<()> { Ok(()) }
-        }
-
-        impl Read for S {
-            fn read(&mut self, _: &mut [u8]) -> io::Result<usize> { Ok(0) }
-        }
-
-        let mut stream = BufStream::new(S);
-        assert_eq!(stream.read(&mut [0; 10]).unwrap(), 0);
-        stream.write(&[0; 10]).unwrap();
-        stream.flush().unwrap();
-    }
-
     #[test]
     fn test_read_until() {
         let inner: &[u8] = &[0, 1, 2, 1, 0];
@@ -1230,12 +1091,4 @@ mod tests {
             BufWriter::new(io::sink())
         });
     }
-
-    #[bench]
-    fn bench_buffered_stream(b: &mut test::Bencher) {
-        let mut buf = Cursor::new(Vec::new());
-        b.iter(|| {
-            BufStream::new(&mut buf);
-        });
-    }
 }
diff --git a/src/libstd/io/mod.rs b/src/libstd/io/mod.rs
index 3d746aa450a..eda6e85ff7f 100644
--- a/src/libstd/io/mod.rs
+++ b/src/libstd/io/mod.rs
@@ -255,7 +255,7 @@ use string::String;
 use str;
 use vec::Vec;
 
-pub use self::buffered::{BufReader, BufWriter, BufStream, LineWriter};
+pub use self::buffered::{BufReader, BufWriter, LineWriter};
 pub use self::buffered::IntoInnerError;
 pub use self::cursor::Cursor;
 pub use self::error::{Result, Error, ErrorKind};
diff --git a/src/libstd/lib.rs b/src/libstd/lib.rs
index 6041c2d3d47..77c634e8090 100644
--- a/src/libstd/lib.rs
+++ b/src/libstd/lib.rs
@@ -360,8 +360,6 @@ mod uint_macros;
 
 pub mod ascii;
 
-pub mod thunk;
-
 /* Common traits */
 
 pub mod num;
diff --git a/src/libstd/net/tcp.rs b/src/libstd/net/tcp.rs
index 84e05083b57..be224c15ff0 100644
--- a/src/libstd/net/tcp.rs
+++ b/src/libstd/net/tcp.rs
@@ -128,26 +128,6 @@ impl TcpStream {
         self.0.duplicate().map(TcpStream)
     }
 
-    /// Sets the nodelay flag on this connection to the boolean specified.
-    #[deprecated(since = "1.3.0",
-                 reason = "available through the `net2` crate on crates.io")]
-    #[unstable(feature = "tcp_extras", reason = "available externally")]
-    pub fn set_nodelay(&self, nodelay: bool) -> io::Result<()> {
-        self.0.set_nodelay(nodelay)
-    }
-
-    /// Sets the keepalive timeout to the timeout specified.
-    ///
-    /// If the value specified is `None`, then the keepalive flag is cleared on
-    /// this connection. Otherwise, the keepalive timeout will be set to the
-    /// specified time, in seconds.
-    #[unstable(feature = "tcp_extras", reason = "available externally")]
-    #[deprecated(since = "1.3.0",
-                 reason = "available through the `net2` crate on crates.io")]
-    pub fn set_keepalive(&self, seconds: Option<u32>) -> io::Result<()> {
-        self.0.set_keepalive(seconds)
-    }
-
     /// Sets the read timeout to the timeout specified.
     ///
     /// If the value specified is `None`, then `read` calls will block
diff --git a/src/libstd/net/udp.rs b/src/libstd/net/udp.rs
index 1e1ffc19900..20ce344be4f 100644
--- a/src/libstd/net/udp.rs
+++ b/src/libstd/net/udp.rs
@@ -13,7 +13,7 @@
 
 use fmt;
 use io::{self, Error, ErrorKind};
-use net::{ToSocketAddrs, SocketAddr, IpAddr};
+use net::{ToSocketAddrs, SocketAddr};
 use sys_common::net as net_imp;
 use sys_common::{AsInner, FromInner, IntoInner};
 use time::Duration;
@@ -95,56 +95,6 @@ impl UdpSocket {
         self.0.duplicate().map(UdpSocket)
     }
 
-    /// Sets the broadcast flag on or off.
-    #[deprecated(since = "1.3.0",
-                 reason = "available through the `net2` crate on crates.io")]
-    #[unstable(feature = "udp_extras", reason = "available externally")]
-    pub fn set_broadcast(&self, on: bool) -> io::Result<()> {
-        self.0.set_broadcast(on)
-    }
-
-    /// Sets the multicast loop flag to the specified value.
-    ///
-    /// This lets multicast packets loop back to local sockets (if enabled)
-    #[deprecated(since = "1.3.0",
-                 reason = "available through the `net2` crate on crates.io")]
-    #[unstable(feature = "udp_extras", reason = "available externally")]
-    pub fn set_multicast_loop(&self, on: bool) -> io::Result<()> {
-        self.0.set_multicast_loop(on)
-    }
-
-    /// Joins a multicast IP address (becomes a member of it).
-    #[deprecated(since = "1.3.0",
-                 reason = "available through the `net2` crate on crates.io")]
-    #[unstable(feature = "udp_extras", reason = "available externally")]
-    pub fn join_multicast(&self, multi: &IpAddr) -> io::Result<()> {
-        self.0.join_multicast(multi)
-    }
-
-    /// Leaves a multicast IP address (drops membership from it).
-    #[deprecated(since = "1.3.0",
-                 reason = "available through the `net2` crate on crates.io")]
-    #[unstable(feature = "udp_extras", reason = "available externally")]
-    pub fn leave_multicast(&self, multi: &IpAddr) -> io::Result<()> {
-        self.0.leave_multicast(multi)
-    }
-
-    /// Sets the multicast TTL.
-    #[deprecated(since = "1.3.0",
-                 reason = "available through the `net2` crate on crates.io")]
-    #[unstable(feature = "udp_extras", reason = "available externally")]
-    pub fn set_multicast_time_to_live(&self, ttl: i32) -> io::Result<()> {
-        self.0.multicast_time_to_live(ttl)
-    }
-
-    /// Sets this socket's TTL.
-    #[deprecated(since = "1.3.0",
-                 reason = "available through the `net2` crate on crates.io")]
-    #[unstable(feature = "udp_extras", reason = "available externally")]
-    pub fn set_time_to_live(&self, ttl: i32) -> io::Result<()> {
-        self.0.time_to_live(ttl)
-    }
-
     /// Sets the read timeout to the timeout specified.
     ///
     /// If the value specified is `None`, then `read` calls will block
diff --git a/src/libstd/num/f32.rs b/src/libstd/num/f32.rs
index 6a8026a807e..2bc837a231c 100644
--- a/src/libstd/num/f32.rs
+++ b/src/libstd/num/f32.rs
@@ -1751,7 +1751,6 @@ mod tests {
         use super::consts;
 
         let pi: f32 = consts::PI;
-        let two_pi: f32 = consts::PI_2;
         let frac_pi_2: f32 = consts::FRAC_PI_2;
         let frac_pi_3: f32 = consts::FRAC_PI_3;
         let frac_pi_4: f32 = consts::FRAC_PI_4;
@@ -1768,7 +1767,6 @@ mod tests {
         let ln_2: f32 = consts::LN_2;
         let ln_10: f32 = consts::LN_10;
 
-        assert_approx_eq!(two_pi, 2f32 * pi);
         assert_approx_eq!(frac_pi_2, pi / 2f32);
         assert_approx_eq!(frac_pi_3, pi / 3f32);
         assert_approx_eq!(frac_pi_4, pi / 4f32);
diff --git a/src/libstd/num/f64.rs b/src/libstd/num/f64.rs
index e757ff90fdd..c6e2d7380df 100644
--- a/src/libstd/num/f64.rs
+++ b/src/libstd/num/f64.rs
@@ -1651,7 +1651,6 @@ mod tests {
     fn test_real_consts() {
         use super::consts;
         let pi: f64 = consts::PI;
-        let two_pi: f64 = consts::PI_2;
         let frac_pi_2: f64 = consts::FRAC_PI_2;
         let frac_pi_3: f64 = consts::FRAC_PI_3;
         let frac_pi_4: f64 = consts::FRAC_PI_4;
@@ -1668,7 +1667,6 @@ mod tests {
         let ln_2: f64 = consts::LN_2;
         let ln_10: f64 = consts::LN_10;
 
-        assert_approx_eq!(two_pi, 2.0 * pi);
         assert_approx_eq!(frac_pi_2, pi / 2f64);
         assert_approx_eq!(frac_pi_3, pi / 3f64);
         assert_approx_eq!(frac_pi_4, pi / 4f64);
diff --git a/src/libstd/rt/mod.rs b/src/libstd/rt/mod.rs
index 24a4575aa54..2ace6e4cf8d 100644
--- a/src/libstd/rt/mod.rs
+++ b/src/libstd/rt/mod.rs
@@ -59,7 +59,6 @@ fn lang_start(main: *const u8, argc: isize, argv: *const *const u8) -> isize {
     use prelude::v1::*;
 
     use mem;
-    use env;
     use rt;
     use sys_common::thread_info::{self, NewThread};
     use thread::Thread;
@@ -105,9 +104,7 @@ fn lang_start(main: *const u8, argc: isize, argv: *const *const u8) -> isize {
     if failed {
         rt::DEFAULT_ERROR_CODE
     } else {
-        #[allow(deprecated)]
-        fn exit_status() -> isize { env::get_exit_status() as isize }
-        exit_status()
+        0
     }
 }
 
diff --git a/src/libstd/sync/future.rs b/src/libstd/sync/future.rs
deleted file mode 100644
index 506b8260278..00000000000
--- a/src/libstd/sync/future.rs
+++ /dev/null
@@ -1,231 +0,0 @@
-// Copyright 2012-2013 The Rust Project Developers. See the COPYRIGHT
-// file at the top-level directory of this distribution and at
-// http://rust-lang.org/COPYRIGHT.
-//
-// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
-// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
-// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
-// option. This file may not be copied, modified, or distributed
-// except according to those terms.
-
-//! A type representing values that may be computed concurrently and operations
-//! for working with them.
-//!
-//! # Examples
-//!
-//! ```
-//! #![feature(future)]
-//!
-//! use std::sync::Future;
-//!
-//! // a fake, for now
-//! fn fib(n: u32) -> u32 { 42 };
-//!
-//! let mut delayed_fib = Future::spawn(move || fib(5000));
-//!
-//! // do stuff...
-//!
-//! println!("fib(5000) = {}", delayed_fib.get())
-//! ```
-
-#![allow(missing_docs)]
-#![unstable(feature = "future",
-            reason = "futures as-is have yet to be deeply reevaluated with recent \
-                      core changes to Rust's synchronization story, and will likely \
-                      become stable in the future but are unstable until that time")]
-#![deprecated(since = "1.2.0",
-              reason = "implementation does not match the quality of the \
-                        standard library and this will likely be prototyped \
-                        outside in crates.io first")]
-#![allow(deprecated)]
-
-use core::mem::replace;
-
-use boxed::Box;
-use self::FutureState::*;
-use sync::mpsc::{Receiver, channel};
-use thunk::Thunk;
-use thread;
-
-/// A type encapsulating the result of a computation which may not be complete
-pub struct Future<A> {
-    state: FutureState<A>,
-}
-
-enum FutureState<A> {
-    Pending(Thunk<'static,(),A>),
-    Evaluating,
-    Forced(A)
-}
-
-/// Methods on the `future` type
-impl<A:Clone> Future<A> {
-    pub fn get(&mut self) -> A {
-        //! Get the value of the future.
-        (*(self.get_ref())).clone()
-    }
-}
-
-impl<A> Future<A> {
-    /// Gets the value from this future, forcing evaluation.
-    pub fn into_inner(mut self) -> A {
-        self.get_ref();
-        let state = replace(&mut self.state, Evaluating);
-        match state {
-            Forced(v) => v,
-            _ => panic!( "Logic error." ),
-        }
-    }
-
-    pub fn get_ref<'a>(&'a mut self) -> &'a A {
-        /*!
-        * Executes the future's closure and then returns a reference
-        * to the result.  The reference lasts as long as
-        * the future.
-        */
-        match self.state {
-            Forced(ref v) => return v,
-            Evaluating => panic!("Recursive forcing of future!"),
-            Pending(_) => {
-                match replace(&mut self.state, Evaluating) {
-                    Forced(_) | Evaluating => panic!("Logic error."),
-                    Pending(f) => {
-                        self.state = Forced(f());
-                        self.get_ref()
-                    }
-                }
-            }
-        }
-    }
-
-    pub fn from_value(val: A) -> Future<A> {
-        /*!
-         * Create a future from a value.
-         *
-         * The value is immediately available and calling `get` later will
-         * not block.
-         */
-
-        Future {state: Forced(val)}
-    }
-
-    pub fn from_fn<F>(f: F) -> Future<A>
-        where F : FnOnce() -> A, F : Send + 'static
-    {
-        /*!
-         * Create a future from a function.
-         *
-         * The first time that the value is requested it will be retrieved by
-         * calling the function.  Note that this function is a local
-         * function. It is not spawned into another task.
-         */
-
-        Future {state: Pending(Box::new(f))}
-    }
-}
-
-impl<A:Send+'static> Future<A> {
-    pub fn from_receiver(rx: Receiver<A>) -> Future<A> {
-        /*!
-         * Create a future from a port
-         *
-         * The first time that the value is requested the task will block
-         * waiting for the result to be received on the port.
-         */
-
-        Future::from_fn(move || {
-            rx.recv().unwrap()
-        })
-    }
-
-    pub fn spawn<F>(blk: F) -> Future<A>
-        where F : FnOnce() -> A, F : Send + 'static
-    {
-        /*!
-         * Create a future from a unique closure.
-         *
-         * The closure will be run in a new task and its result used as the
-         * value of the future.
-         */
-
-        let (tx, rx) = channel();
-
-        thread::spawn(move || {
-            // Don't panic if the other end has hung up
-            let _ = tx.send(blk());
-        });
-
-        Future::from_receiver(rx)
-    }
-}
-
-#[cfg(test)]
-mod tests {
-    use prelude::v1::*;
-    use sync::mpsc::channel;
-    use sync::Future;
-    use thread;
-
-    #[test]
-    fn test_from_value() {
-        let mut f = Future::from_value("snail".to_string());
-        assert_eq!(f.get(), "snail");
-    }
-
-    #[test]
-    fn test_from_receiver() {
-        let (tx, rx) = channel();
-        tx.send("whale".to_string()).unwrap();
-        let mut f = Future::from_receiver(rx);
-        assert_eq!(f.get(), "whale");
-    }
-
-    #[test]
-    fn test_from_fn() {
-        let mut f = Future::from_fn(move|| "brail".to_string());
-        assert_eq!(f.get(), "brail");
-    }
-
-    #[test]
-    fn test_interface_get() {
-        let mut f = Future::from_value("fail".to_string());
-        assert_eq!(f.get(), "fail");
-    }
-
-    #[test]
-    fn test_interface_unwrap() {
-        let f = Future::from_value("fail".to_string());
-        assert_eq!(f.into_inner(), "fail");
-    }
-
-    #[test]
-    fn test_get_ref_method() {
-        let mut f = Future::from_value(22);
-        assert_eq!(*f.get_ref(), 22);
-    }
-
-    #[test]
-    fn test_spawn() {
-        let mut f = Future::spawn(move|| "bale".to_string());
-        assert_eq!(f.get(), "bale");
-    }
-
-    #[test]
-    #[should_panic]
-    fn test_future_panic() {
-        let mut f = Future::spawn(move|| panic!());
-        let _x: String = f.get();
-    }
-
-    #[test]
-    fn test_sendable_future() {
-        let expected = "schlorf";
-        let (tx, rx) = channel();
-        let f = Future::spawn(move|| { expected });
-        let _t = thread::spawn(move|| {
-            let mut f = f;
-            tx.send(f.get()).unwrap();
-        });
-        assert_eq!(rx.recv().unwrap(), expected);
-    }
-}
diff --git a/src/libstd/sync/mod.rs b/src/libstd/sync/mod.rs
index ab8d4587cfd..28fab5a2c9d 100644
--- a/src/libstd/sync/mod.rs
+++ b/src/libstd/sync/mod.rs
@@ -30,14 +30,10 @@ pub use self::rwlock::{RwLockReadGuard, RwLockWriteGuard};
 pub use self::rwlock::{RwLock, StaticRwLock, RW_LOCK_INIT};
 pub use self::semaphore::{Semaphore, SemaphoreGuard};
 
-#[allow(deprecated)]
-pub use self::future::Future;
-
 pub mod mpsc;
 
 mod barrier;
 mod condvar;
-mod future;
 mod mutex;
 mod once;
 mod rwlock;
diff --git a/src/libstd/sys/common/net.rs b/src/libstd/sys/common/net.rs
index 6dd222b8f6e..68d5f49dffa 100644
--- a/src/libstd/sys/common/net.rs
+++ b/src/libstd/sys/common/net.rs
@@ -186,42 +186,6 @@ impl TcpStream {
 
     pub fn into_socket(self) -> Socket { self.inner }
 
-    pub fn set_nodelay(&self, nodelay: bool) -> io::Result<()> {
-        setsockopt(&self.inner, libc::IPPROTO_TCP, libc::TCP_NODELAY,
-                   nodelay as c_int)
-    }
-
-    pub fn set_keepalive(&self, seconds: Option<u32>) -> io::Result<()> {
-        let ret = setsockopt(&self.inner, libc::SOL_SOCKET, libc::SO_KEEPALIVE,
-                             seconds.is_some() as c_int);
-        match seconds {
-            Some(n) => ret.and_then(|()| self.set_tcp_keepalive(n)),
-            None => ret,
-        }
-    }
-
-    #[cfg(any(target_os = "macos", target_os = "ios"))]
-    fn set_tcp_keepalive(&self, seconds: u32) -> io::Result<()> {
-        setsockopt(&self.inner, libc::IPPROTO_TCP, libc::TCP_KEEPALIVE,
-                   seconds as c_int)
-    }
-    #[cfg(any(target_os = "freebsd",
-              target_os = "dragonfly",
-              target_os = "linux"))]
-    fn set_tcp_keepalive(&self, seconds: u32) -> io::Result<()> {
-        setsockopt(&self.inner, libc::IPPROTO_TCP, libc::TCP_KEEPIDLE,
-                   seconds as c_int)
-    }
-
-    #[cfg(not(any(target_os = "macos",
-                  target_os = "ios",
-                  target_os = "freebsd",
-                  target_os = "dragonfly",
-                  target_os = "linux")))]
-    fn set_tcp_keepalive(&self, _seconds: u32) -> io::Result<()> {
-        Ok(())
-    }
-
     pub fn set_read_timeout(&self, dur: Option<Duration>) -> io::Result<()> {
         self.inner.set_timeout(dur, libc::SO_RCVTIMEO)
     }
@@ -431,65 +395,6 @@ impl UdpSocket {
         Ok(ret as usize)
     }
 
-    pub fn set_broadcast(&self, on: bool) -> io::Result<()> {
-        setsockopt(&self.inner, libc::SOL_SOCKET, libc::SO_BROADCAST,
-                   on as c_int)
-    }
-
-    pub fn set_multicast_loop(&self, on: bool) -> io::Result<()> {
-        setsockopt(&self.inner, libc::IPPROTO_IP,
-                   libc::IP_MULTICAST_LOOP, on as c_int)
-    }
-
-    pub fn join_multicast(&self, multi: &IpAddr) -> io::Result<()> {
-        match *multi {
-            IpAddr::V4(..) => {
-                self.set_membership(multi, libc::IP_ADD_MEMBERSHIP)
-            }
-            IpAddr::V6(..) => {
-                self.set_membership(multi, libc::IPV6_ADD_MEMBERSHIP)
-            }
-        }
-    }
-    pub fn leave_multicast(&self, multi: &IpAddr) -> io::Result<()> {
-        match *multi {
-            IpAddr::V4(..) => {
-                self.set_membership(multi, libc::IP_DROP_MEMBERSHIP)
-            }
-            IpAddr::V6(..) => {
-                self.set_membership(multi, libc::IPV6_DROP_MEMBERSHIP)
-            }
-        }
-    }
-    fn set_membership(&self, addr: &IpAddr, opt: c_int) -> io::Result<()> {
-        match *addr {
-            IpAddr::V4(ref addr) => {
-                let mreq = libc::ip_mreq {
-                    imr_multiaddr: *addr.as_inner(),
-                    // interface == INADDR_ANY
-                    imr_interface: libc::in_addr { s_addr: 0x0 },
-                };
-                setsockopt(&self.inner, libc::IPPROTO_IP, opt, mreq)
-            }
-            IpAddr::V6(ref addr) => {
-                let mreq = libc::ip6_mreq {
-                    ipv6mr_multiaddr: *addr.as_inner(),
-                    ipv6mr_interface: 0,
-                };
-                setsockopt(&self.inner, libc::IPPROTO_IPV6, opt, mreq)
-            }
-        }
-    }
-
-    pub fn multicast_time_to_live(&self, ttl: i32) -> io::Result<()> {
-        setsockopt(&self.inner, libc::IPPROTO_IP, libc::IP_MULTICAST_TTL,
-                   ttl as c_int)
-    }
-
-    pub fn time_to_live(&self, ttl: i32) -> io::Result<()> {
-        setsockopt(&self.inner, libc::IPPROTO_IP, libc::IP_TTL, ttl as c_int)
-    }
-
     pub fn duplicate(&self) -> io::Result<UdpSocket> {
         self.inner.duplicate().map(|s| UdpSocket { inner: s })
     }
diff --git a/src/libstd/sys/common/remutex.rs b/src/libstd/sys/common/remutex.rs
index 8f416464173..20475c5463b 100644
--- a/src/libstd/sys/common/remutex.rs
+++ b/src/libstd/sys/common/remutex.rs
@@ -180,10 +180,11 @@ mod tests {
 
     #[test]
     fn is_mutex() {
-        let m = ReentrantMutex::new(RefCell::new(0));
+        let m = Arc::new(ReentrantMutex::new(RefCell::new(0)));
+        let m2 = m.clone();
         let lock = m.lock().unwrap();
-        let handle = thread::scoped(|| {
-            let lock = m.lock().unwrap();
+        let child = thread::spawn(move || {
+            let lock = m2.lock().unwrap();
             assert_eq!(*lock.borrow(), 4950);
         });
         for i in 0..100 {
@@ -191,20 +192,19 @@ mod tests {
             *lock.borrow_mut() += i;
         }
         drop(lock);
-        drop(handle);
+        child.join().unwrap();
     }
 
     #[test]
     fn trylock_works() {
-        let m = ReentrantMutex::new(());
+        let m = Arc::new(ReentrantMutex::new(()));
+        let m2 = m.clone();
         let lock = m.try_lock().unwrap();
         let lock2 = m.try_lock().unwrap();
-        {
-            thread::scoped(|| {
-                let lock = m.try_lock();
-                assert!(lock.is_err());
-            });
-        }
+        thread::spawn(move || {
+            let lock = m2.try_lock();
+            assert!(lock.is_err());
+        }).join().unwrap();
         let lock3 = m.try_lock().unwrap();
     }
 
diff --git a/src/libstd/sys/unix/fs.rs b/src/libstd/sys/unix/fs.rs
index 922a213f9c2..751b8e48263 100644
--- a/src/libstd/sys/unix/fs.rs
+++ b/src/libstd/sys/unix/fs.rs
@@ -509,13 +509,6 @@ pub fn lstat(p: &Path) -> io::Result<FileAttr> {
     Ok(FileAttr { stat: stat })
 }
 
-pub fn utimes(p: &Path, atime: u64, mtime: u64) -> io::Result<()> {
-    let p = try!(cstr(p));
-    let buf = [super::ms_to_timeval(atime), super::ms_to_timeval(mtime)];
-    try!(cvt(unsafe { c::utimes(p.as_ptr(), buf.as_ptr()) }));
-    Ok(())
-}
-
 pub fn canonicalize(p: &Path) -> io::Result<PathBuf> {
     let path = try!(CString::new(p.as_os_str().as_bytes()));
     let mut buf = vec![0u8; 16 * 1024];
diff --git a/src/libstd/sys/unix/mod.rs b/src/libstd/sys/unix/mod.rs
index 2efca0257f3..bbed42cc31d 100644
--- a/src/libstd/sys/unix/mod.rs
+++ b/src/libstd/sys/unix/mod.rs
@@ -82,7 +82,6 @@ pub fn cvt<T: One + PartialEq + Neg<Output=T>>(t: T) -> io::Result<T> {
     }
 }
 
-#[allow(deprecated)]
 pub fn cvt_r<T, F>(mut f: F) -> io::Result<T>
     where T: One + PartialEq + Neg<Output=T>, F: FnMut() -> T
 {
@@ -93,10 +92,3 @@ pub fn cvt_r<T, F>(mut f: F) -> io::Result<T>
         }
     }
 }
-
-pub fn ms_to_timeval(ms: u64) -> libc::timeval {
-    libc::timeval {
-        tv_sec: (ms / 1000) as libc::time_t,
-        tv_usec: ((ms % 1000) * 1000) as libc::suseconds_t,
-    }
-}
diff --git a/src/libstd/sys/windows/fs.rs b/src/libstd/sys/windows/fs.rs
index b8c3f1e7b35..d413d536cc8 100644
--- a/src/libstd/sys/windows/fs.rs
+++ b/src/libstd/sys/windows/fs.rs
@@ -571,19 +571,6 @@ pub fn set_perm(p: &Path, perm: FilePermissions) -> io::Result<()> {
     }
 }
 
-pub fn utimes(p: &Path, atime: u64, mtime: u64) -> io::Result<()> {
-    let atime = super::ms_to_filetime(atime);
-    let mtime = super::ms_to_filetime(mtime);
-
-    let mut o = OpenOptions::new();
-    o.write(true);
-    let f = try!(File::open(p, &o));
-    try!(cvt(unsafe {
-        c::SetFileTime(f.handle.raw(), 0 as *const _, &atime, &mtime)
-    }));
-    Ok(())
-}
-
 fn get_path(f: &File) -> io::Result<PathBuf> {
     super::fill_utf16_buf(|buf, sz| unsafe {
         c::GetFinalPathNameByHandleW(f.handle.raw(), buf, sz,
diff --git a/src/libstd/sys/windows/mod.rs b/src/libstd/sys/windows/mod.rs
index b38945d8916..732e2e65864 100644
--- a/src/libstd/sys/windows/mod.rs
+++ b/src/libstd/sys/windows/mod.rs
@@ -174,13 +174,3 @@ fn dur2timeout(dur: Duration) -> libc::DWORD {
         }
     }).unwrap_or(libc::INFINITE)
 }
-
-fn ms_to_filetime(ms: u64) -> libc::FILETIME {
-    // A FILETIME is a count of 100 nanosecond intervals, so we multiply by
-    // 10000 b/c there are 10000 intervals in 1 ms
-    let ms = ms * 10000;
-    libc::FILETIME {
-        dwLowDateTime: ms as u32,
-        dwHighDateTime: (ms >> 32) as u32,
-    }
-}
diff --git a/src/libstd/sys/windows/net.rs b/src/libstd/sys/windows/net.rs
index 02c5bc1f0ab..57e84b0c46c 100644
--- a/src/libstd/sys/windows/net.rs
+++ b/src/libstd/sys/windows/net.rs
@@ -67,7 +67,6 @@ pub fn cvt_gai(err: c_int) -> io::Result<()> {
 }
 
 /// Provides the functionality of `cvt` for a closure.
-#[allow(deprecated)]
 pub fn cvt_r<T, F>(mut f: F) -> io::Result<T>
     where F: FnMut() -> T, T: One + Neg<Output=T> + PartialEq
 {
diff --git a/src/libstd/sys/windows/os.rs b/src/libstd/sys/windows/os.rs
index 694d873d0d2..3e640ceaddd 100644
--- a/src/libstd/sys/windows/os.rs
+++ b/src/libstd/sys/windows/os.rs
@@ -21,7 +21,6 @@ use fmt;
 use io;
 use libc::types::os::arch::extra::LPWCH;
 use libc::{self, c_int, c_void};
-use mem;
 use ops::Range;
 use os::windows::ffi::EncodeWide;
 use path::{self, PathBuf};
@@ -334,14 +333,6 @@ pub fn args() -> Args {
     }
 }
 
-pub fn page_size() -> usize {
-    unsafe {
-        let mut info = mem::zeroed();
-        libc::GetSystemInfo(&mut info);
-        return info.dwPageSize as usize;
-    }
-}
-
 pub fn temp_dir() -> PathBuf {
     super::fill_utf16_buf(|buf, sz| unsafe {
         c::GetTempPathW(sz, buf)
diff --git a/src/libstd/thread/mod.rs b/src/libstd/thread/mod.rs
index 89a51391624..3435a1fccdf 100644
--- a/src/libstd/thread/mod.rs
+++ b/src/libstd/thread/mod.rs
@@ -253,36 +253,6 @@ impl Builder {
         }
     }
 
-    /// Spawns a new child thread that must be joined within a given
-    /// scope, and returns a `JoinGuard`.
-    ///
-    /// The join guard can be used to explicitly join the child thread (via
-    /// `join`), returning `Result<T>`, or it will implicitly join the child
-    /// upon being dropped. Because the child thread may refer to data on the
-    /// current thread's stack (hence the "scoped" name), it cannot be detached;
-    /// it *must* be joined before the relevant stack frame is popped. See the
-    /// documentation on `thread::scoped` for additional details.
-    ///
-    /// # Errors
-    ///
-    /// Unlike the `scoped` free function, this method yields an
-    /// `io::Result` to capture any failure to create the thread at
-    /// the OS level.
-    #[unstable(feature = "scoped",
-               reason = "memory unsafe if destructor is avoided, see #24292")]
-    #[deprecated(since = "1.2.0",
-                 reason = "this unsafe API is unlikely to ever be stabilized \
-                           in this form")]
-    pub fn scoped<'a, T, F>(self, f: F) -> io::Result<JoinGuard<'a, T>> where
-        T: Send + 'a, F: FnOnce() -> T, F: Send + 'a
-    {
-        unsafe {
-            self.spawn_inner(Box::new(f)).map(|inner| {
-                JoinGuard { inner: inner, _marker: PhantomData }
-            })
-        }
-    }
-
     // NB: this function is unsafe as the lifetime parameter of the code to run
     //     in the new thread is not tied into the return value, and the return
     //     value must not outlast that lifetime.
@@ -346,50 +316,6 @@ pub fn spawn<F, T>(f: F) -> JoinHandle<T> where
     Builder::new().spawn(f).unwrap()
 }
 
-/// Spawns a new *scoped* thread, returning a `JoinGuard` for it.
-///
-/// The `spawn` method does not allow the child and parent threads to
-/// share any stack data, since that is not safe in general. However,
-/// `scoped` makes it possible to share the parent's stack by forcing
-/// a join before any relevant stack frames are popped:
-///
-/// ```rust
-/// #![feature(scoped)]
-///
-/// use std::thread;
-///
-/// let guard = thread::scoped(move || {
-///     // some work here
-/// });
-///
-/// // do some other work in the meantime
-/// let output = guard.join();
-/// ```
-///
-/// The `scoped` function doesn't return a `Thread` directly; instead, it
-/// returns a *join guard*. The join guard can be used to explicitly join
-/// the child thread (via `join`), returning `Result<T>`, or it will
-/// implicitly join the child upon being dropped. Because the child thread
-/// may refer to data on the current thread's stack (hence the "scoped"
-/// name), it cannot be detached; it *must* be joined before the relevant
-/// stack frame is popped.
-///
-/// # Panics
-///
-/// Panics if the OS fails to create a thread; use `Builder::scoped`
-/// to recover from such errors.
-#[unstable(feature = "scoped",
-           reason = "memory unsafe if destructor is avoided, see #24292")]
-#[deprecated(since = "1.2.0",
-             reason = "this unsafe API is unlikely to ever be stabilized \
-                       in this form")]
-#[allow(deprecated)]
-pub fn scoped<'a, T, F>(f: F) -> JoinGuard<'a, T> where
-    T: Send + 'a, F: FnOnce() -> T, F: Send + 'a
-{
-    Builder::new().scoped(f).unwrap()
-}
-
 /// Gets a handle to the thread that invokes it.
 #[stable(feature = "rust1", since = "1.0.0")]
 pub fn current() -> Thread {
@@ -769,7 +695,6 @@ mod tests {
     use result;
     use super::{Builder};
     use thread;
-    use thunk::Thunk;
     use time::Duration;
     use u32;
 
@@ -785,9 +710,9 @@ mod tests {
 
     #[test]
     fn test_named_thread() {
-        Builder::new().name("ada lovelace".to_string()).scoped(move|| {
+        Builder::new().name("ada lovelace".to_string()).spawn(move|| {
             assert!(thread::current().name().unwrap() == "ada lovelace".to_string());
-        }).unwrap().join();
+        }).unwrap().join().unwrap();
     }
 
     #[test]
@@ -800,13 +725,6 @@ mod tests {
     }
 
     #[test]
-    fn test_join_success() {
-        assert!(thread::scoped(move|| -> String {
-            "Success!".to_string()
-        }).join() == "Success!");
-    }
-
-    #[test]
     fn test_join_panic() {
         match thread::spawn(move|| {
             panic!()
@@ -817,26 +735,6 @@ mod tests {
     }
 
     #[test]
-    fn test_scoped_success() {
-        let res = thread::scoped(move|| -> String {
-            "Success!".to_string()
-        }).join();
-        assert!(res == "Success!");
-    }
-
-    #[test]
-    #[should_panic]
-    fn test_scoped_panic() {
-        thread::scoped(|| panic!()).join();
-    }
-
-    #[test]
-    #[should_panic]
-    fn test_scoped_implicit_panic() {
-        let _ = thread::scoped(|| panic!());
-    }
-
-    #[test]
     fn test_spawn_sched() {
         use clone::Clone;
 
@@ -870,7 +768,7 @@ mod tests {
         rx.recv().unwrap();
     }
 
-    fn avoid_copying_the_body<F>(spawnfn: F) where F: FnOnce(Thunk<'static>) {
+    fn avoid_copying_the_body<F>(spawnfn: F) where F: FnOnce(Box<Fn() + Send>) {
         let (tx, rx) = channel();
 
         let x: Box<_> = box 1;
@@ -917,7 +815,7 @@ mod tests {
         // (well, it would if the constant were 8000+ - I lowered it to be more
         // valgrind-friendly. try this at home, instead..!)
         const GENERATIONS: u32 = 16;
-        fn child_no(x: u32) -> Thunk<'static> {
+        fn child_no(x: u32) -> Box<Fn() + Send> {
             return Box::new(move|| {
                 if x < GENERATIONS {
                     thread::spawn(move|| child_no(x+1)());
diff --git a/src/libstd/thunk.rs b/src/libstd/thunk.rs
deleted file mode 100644
index f1dc91f135f..00000000000
--- a/src/libstd/thunk.rs
+++ /dev/null
@@ -1,21 +0,0 @@
-// Copyright 2014 The Rust Project Developers. See the COPYRIGHT
-// file at the top-level directory of this distribution and at
-// http://rust-lang.org/COPYRIGHT.
-//
-// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
-// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
-// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
-// option. This file may not be copied, modified, or distributed
-// except according to those terms.
-
-// Because this module is temporary...
-#![allow(missing_docs)]
-#![unstable(feature = "thunk")]
-#![deprecated(since = "1.2.0", reason = "use FnBox instead")]
-
-use alloc::boxed::{Box, FnBox};
-use core::marker::Send;
-
-pub type Thunk<'a, A=(), R=()> =
-    Box<FnBox<A,Output=R> + Send + 'a>;
-
diff --git a/src/libstd/time/duration.rs b/src/libstd/time/duration.rs
index ba9c3157b02..d16fa83c2af 100644
--- a/src/libstd/time/duration.rs
+++ b/src/libstd/time/duration.rs
@@ -92,14 +92,6 @@ impl Duration {
     #[stable(feature = "duration", since = "1.3.0")]
     pub fn as_secs(&self) -> u64 { self.secs }
 
-    #[deprecated(reason = "renamed to `as_secs`", since = "1.3.0")]
-    #[unstable(feature = "duration_deprecated")]
-    /// Returns the number of whole seconds represented by this duration.
-    ///
-    /// The extra precision represented by this duration is ignored (e.g. extra
-    /// nanoseconds are not represented in the returned value).
-    pub fn secs(&self) -> u64 { self.as_secs() }
-
     /// Returns the nanosecond precision represented by this duration.
     ///
     /// This method does **not** return the length of the duration when
@@ -107,15 +99,6 @@ impl Duration {
     /// fractional portion of a second (e.g. it is less than one billion).
     #[stable(feature = "duration", since = "1.3.0")]
     pub fn subsec_nanos(&self) -> u32 { self.nanos }
-
-    #[deprecated(reason = "renamed to `subsec_nanos`", since = "1.3.0")]
-    #[unstable(feature = "duration_deprecated")]
-    /// Returns the nanosecond precision represented by this duration.
-    ///
-    /// This method does **not** return the length of the duration when
-    /// represented by nanoseconds. The returned number always represents a
-    /// fractional portion of a second (e.g. it is less than one billion).
-    pub fn extra_nanos(&self) -> u32 { self.subsec_nanos() }
 }
 
 impl Add for Duration {
diff --git a/src/libsyntax/attr.rs b/src/libsyntax/attr.rs
index ed3ee768708..399a529af15 100644
--- a/src/libsyntax/attr.rs
+++ b/src/libsyntax/attr.rs
@@ -10,9 +10,6 @@
 
 // Functions dealing with attributes and meta items
 
-// BitSet
-#![allow(deprecated)]
-
 pub use self::StabilityLevel::*;
 pub use self::ReprAttr::*;
 pub use self::IntType::*;
@@ -28,20 +25,33 @@ use parse::token;
 use ptr::P;
 
 use std::cell::{RefCell, Cell};
-use std::collections::BitSet;
 use std::collections::HashSet;
 use std::fmt;
 
-thread_local! { static USED_ATTRS: RefCell<BitSet> = RefCell::new(BitSet::new()) }
+thread_local! {
+    static USED_ATTRS: RefCell<Vec<u64>> = RefCell::new(Vec::new())
+}
 
 pub fn mark_used(attr: &Attribute) {
     let AttrId(id) = attr.node.id;
-    USED_ATTRS.with(|slot| slot.borrow_mut().insert(id));
+    USED_ATTRS.with(|slot| {
+        let idx = (id / 64) as usize;
+        let shift = id % 64;
+        if slot.borrow().len() <= idx {
+            slot.borrow_mut().resize(idx + 1, 0);
+        }
+        slot.borrow_mut()[idx] |= 1 << shift;
+    });
 }
 
 pub fn is_used(attr: &Attribute) -> bool {
     let AttrId(id) = attr.node.id;
-    USED_ATTRS.with(|slot| slot.borrow().contains(&id))
+    USED_ATTRS.with(|slot| {
+        let idx = (id / 64) as usize;
+        let shift = id % 64;
+        slot.borrow().get(idx).map(|bits| bits & (1 << shift) != 0)
+            .unwrap_or(false)
+    })
 }
 
 pub trait AttrMetaMethods {
diff --git a/src/libsyntax/lib.rs b/src/libsyntax/lib.rs
index 94c920406c4..290efb15195 100644
--- a/src/libsyntax/lib.rs
+++ b/src/libsyntax/lib.rs
@@ -26,7 +26,6 @@
        html_root_url = "https://doc.rust-lang.org/nightly/")]
 
 #![feature(associated_consts)]
-#![feature(bitset)]
 #![feature(drain)]
 #![feature(filling_drop)]
 #![feature(libc)]
@@ -38,6 +37,7 @@
 #![feature(str_escape)]
 #![feature(unicode)]
 #![feature(vec_push_all)]
+#![feature(vec_resize)]
 
 extern crate fmt_macros;
 extern crate serialize;
diff --git a/src/test/bench/core-set.rs b/src/test/bench/core-set.rs
index f4ee020d6e7..28ae990e05a 100644
--- a/src/test/bench/core-set.rs
+++ b/src/test/bench/core-set.rs
@@ -17,7 +17,6 @@ extern crate collections;
 extern crate rand;
 
 use std::collections::BTreeSet;
-use std::collections::BitSet;
 use std::collections::HashSet;
 use std::hash::Hash;
 use std::env;
@@ -53,11 +52,6 @@ impl<T: Ord> MutableSet<T> for BTreeSet<T> {
     fn remove(&mut self, k: &T) -> bool { self.remove(k) }
     fn contains(&self, k: &T) -> bool { self.contains(k) }
 }
-impl MutableSet<usize> for BitSet {
-    fn insert(&mut self, k: usize) { self.insert(k); }
-    fn remove(&mut self, k: &usize) -> bool { self.remove(k) }
-    fn contains(&self, k: &usize) -> bool { self.contains(k) }
-}
 
 impl Results {
     pub fn bench_int<T:MutableSet<usize>,
@@ -218,11 +212,4 @@ fn main() {
         });
         write_results("collections::BTreeSet", &results);
     }
-
-    {
-        let mut rng: rand::IsaacRng = rand::SeedableRng::from_seed(seed);
-        let mut results = empty_results();
-        results.bench_int(&mut rng, num_keys, max, || BitSet::new());
-        write_results("collections::bit_vec::BitSet", &results);
-    }
 }
diff --git a/src/test/bench/msgsend-ring-mutex-arcs.rs b/src/test/bench/msgsend-ring-mutex-arcs.rs
index b7f9dc94a0b..843f49d8f05 100644
--- a/src/test/bench/msgsend-ring-mutex-arcs.rs
+++ b/src/test/bench/msgsend-ring-mutex-arcs.rs
@@ -17,11 +17,12 @@
 
 // no-pretty-expanded FIXME #15189
 
-#![feature(duration, duration_span, future)]
+#![feature(duration_span)]
 
 use std::env;
-use std::sync::{Arc, Future, Mutex, Condvar};
+use std::sync::{Arc, Mutex, Condvar};
 use std::time::Duration;
+use std::thread;
 
 // A poor man's pipe.
 type pipe = Arc<(Mutex<Vec<usize>>, Condvar)>;
@@ -89,7 +90,7 @@ fn main() {
             //println!("spawning %?", i);
             let (new_chan, num_port) = init();
             let num_chan_2 = num_chan.clone();
-            let new_future = Future::spawn(move|| {
+            let new_future = thread::spawn(move|| {
                 thread_ring(i, msg_per_task, num_chan_2, num_port)
             });
             futures.push(new_future);
@@ -100,8 +101,8 @@ fn main() {
         thread_ring(0, msg_per_task, num_chan, num_port);
 
         // synchronize
-        for f in &mut futures {
-            f.get()
+        for f in futures {
+            f.join().unwrap()
         }
     });
 
diff --git a/src/test/bench/shootout-k-nucleotide.rs b/src/test/bench/shootout-k-nucleotide.rs
index 8ae07558c16..175ab5badb6 100644
--- a/src/test/bench/shootout-k-nucleotide.rs
+++ b/src/test/bench/shootout-k-nucleotide.rs
@@ -40,9 +40,7 @@
 
 // ignore-android: FIXME(#10393) hangs without output
 
-#![feature(box_syntax, owned_ascii_ext, vec_push_all)]
-
-use std::ascii::OwnedAsciiExt;
+use std::ascii::AsciiExt;
 use std::env;
 use std::fs::File;
 use std::io::prelude::*;
@@ -146,11 +144,11 @@ impl Table {
     fn search_remainder<C:TableCallback>(item: &mut Entry, key: Code, c: C) {
         match item.next {
             None => {
-                let mut entry: Box<_> = box Entry {
+                let mut entry = Box::new(Entry {
                     code: key,
                     count: 0,
                     next: None,
-                };
+                });
                 c.f(&mut *entry);
                 item.next = Some(entry);
             }
@@ -170,11 +168,11 @@ impl Table {
 
         {
             if self.items[index as usize].is_none() {
-                let mut entry: Box<_> = box Entry {
+                let mut entry = Box::new(Entry {
                     code: key,
                     count: 0,
                     next: None,
-                };
+                });
                 c.f(&mut *entry);
                 self.items[index as usize] = Some(entry);
                 return;
@@ -285,13 +283,16 @@ fn print_occurrences(frequencies: &mut Table, occurrence: &'static str) {
 }
 
 fn get_sequence<R: BufRead>(r: &mut R, key: &str) -> Vec<u8> {
-    let mut res = Vec::new();
+    let mut res = Vec::<u8>::new();
     for l in r.lines().map(|l| l.unwrap())
         .skip_while(|l| key != &l[..key.len()]).skip(1)
     {
-        res.push_all(l.trim().as_bytes());
+        res.extend(l.trim().as_bytes());
+    }
+    for s in &mut res {
+        *s = s.to_ascii_uppercase();
     }
-    res.into_ascii_uppercase()
+    return res
 }
 
 fn main() {
diff --git a/src/test/bench/shootout-reverse-complement.rs b/src/test/bench/shootout-reverse-complement.rs
index 523f1549eee..3a0d182ab12 100644
--- a/src/test/bench/shootout-reverse-complement.rs
+++ b/src/test/bench/shootout-reverse-complement.rs
@@ -40,7 +40,7 @@
 
 // ignore-android: FIXME(#10393) hangs without output
 
-#![feature(libc, scoped)]
+#![feature(libc)]
 
 extern crate libc;
 
@@ -195,11 +195,12 @@ fn reverse_complement(seq: &mut [u8], tables: &Tables) {
 
 /// Executes a closure in parallel over the given iterator over mutable slice.
 /// The closure `f` is run in parallel with an element of `iter`.
+// FIXME: replace with thread::scoped when it exists again
 fn parallel<I: Iterator, F>(iter: I, ref f: F)
         where I::Item: Send,
               F: Fn(I::Item) + Sync, {
     iter.map(|x| {
-        thread::scoped(move || f(x))
+        f(x)
     }).collect::<Vec<_>>();
 }
 
diff --git a/src/test/bench/shootout-spectralnorm.rs b/src/test/bench/shootout-spectralnorm.rs
index 7f3f6a3c85f..b3591477022 100644
--- a/src/test/bench/shootout-spectralnorm.rs
+++ b/src/test/bench/shootout-spectralnorm.rs
@@ -114,11 +114,10 @@ fn parallel<'a,T, F>(v: &mut [T], ref f: F)
                   where T: Send + Sync + 'a,
                         F: Fn(usize, &mut [T]) + Sync + 'a {
     // FIXME: pick a more appropriate parallel factor
+    // FIXME: replace with thread::scoped when it exists again
     let parallelism = 4;
     let size = v.len() / parallelism + 1;
     v.chunks_mut(size).enumerate().map(|(i, chunk)| {
-        thread::scoped(move|| {
-            f(i * size, chunk)
-        })
+        f(i * size, chunk)
     }).collect::<Vec<_>>();
 }
diff --git a/src/test/bench/std-smallintmap.rs b/src/test/bench/std-smallintmap.rs
deleted file mode 100644
index 64f2381d1c3..00000000000
--- a/src/test/bench/std-smallintmap.rs
+++ /dev/null
@@ -1,61 +0,0 @@
-// Copyright 2012 The Rust Project Developers. See the COPYRIGHT
-// file at the top-level directory of this distribution and at
-// http://rust-lang.org/COPYRIGHT.
-//
-// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
-// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
-// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
-// option. This file may not be copied, modified, or distributed
-// except according to those terms.
-
-// Microbenchmark for the smallintmap library
-
-#![feature(vecmap, duration, duration_span)]
-
-use std::collections::VecMap;
-use std::env;
-use std::time::Duration;
-
-fn append_sequential(min: usize, max: usize, map: &mut VecMap<usize>) {
-    for i in min..max {
-        map.insert(i, i + 22);
-    }
-}
-
-fn check_sequential(min: usize, max: usize, map: &VecMap<usize>) {
-    for i in min..max {
-        assert_eq!(map[i], i + 22);
-    }
-}
-
-fn main() {
-    let args = env::args();
-    let args = if env::var_os("RUST_BENCH").is_some() {
-        vec!("".to_string(), "100000".to_string(), "100".to_string())
-    } else if args.len() <= 1 {
-        vec!("".to_string(), "10000".to_string(), "50".to_string())
-    } else {
-        args.collect()
-    };
-    let max = args[1].parse::<usize>().unwrap();
-    let rep = args[2].parse::<usize>().unwrap();
-
-    let mut checkf = Duration::new(0, 0);
-    let mut appendf = Duration::new(0, 0);
-
-    for _ in 0..rep {
-        let mut map = VecMap::new();
-        let d1 = Duration::span(|| append_sequential(0, max, &mut map));
-        let d2 = Duration::span(|| check_sequential(0, max, &map));
-
-        checkf = checkf + d2;
-        appendf = appendf + d1;
-    }
-
-    let maxf = max as f64;
-
-    println!("insert(): {:?} seconds\n", checkf);
-    println!("        : {} op/s\n", maxf / checkf.as_secs() as f64);
-    println!("get()   : {:?} seconds\n", appendf);
-    println!("        : {} op/s\n", maxf / appendf.as_secs() as f64);
-}
diff --git a/src/test/compile-fail/borrowck-move-out-of-static-item.rs b/src/test/compile-fail/borrowck-move-out-of-static-item.rs
index 2f81aa8f381..8b83b945fd1 100644
--- a/src/test/compile-fail/borrowck-move-out-of-static-item.rs
+++ b/src/test/compile-fail/borrowck-move-out-of-static-item.rs
@@ -10,14 +10,11 @@
 
 // Ensure that moves out of static items is forbidden
 
-use std::marker;
-
 struct Foo {
     foo: isize,
-    nocopy: marker::NoCopy
 }
 
-static BAR: Foo = Foo{foo: 5, nocopy: marker::NoCopy};
+static BAR: Foo = Foo { foo: 5 };
 
 
 fn test(f: Foo) {
diff --git a/src/test/compile-fail/borrowck-struct-update-with-dtor.rs b/src/test/compile-fail/borrowck-struct-update-with-dtor.rs
index bbfc5f89a8d..bf1497420e2 100644
--- a/src/test/compile-fail/borrowck-struct-update-with-dtor.rs
+++ b/src/test/compile-fail/borrowck-struct-update-with-dtor.rs
@@ -11,11 +11,8 @@
 // Issue 4691: Ensure that functional-struct-update can only copy, not
 // move, when the struct implements Drop.
 
-// NoCopy
-use std::marker::NoCopy as NP;
-
-
-struct S { a: isize, np: NP }
+struct B;
+struct S { a: isize, b: B }
 impl Drop for S { fn drop(&mut self) { } }
 
 struct T { a: isize, mv: Box<isize> }
diff --git a/src/test/compile-fail/future_not_copyable.rs b/src/test/compile-fail/future_not_copyable.rs
deleted file mode 100644
index 6a5bde365b4..00000000000
--- a/src/test/compile-fail/future_not_copyable.rs
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright 2013 The Rust Project Developers. See the COPYRIGHT
-// file at the top-level directory of this distribution and at
-// http://rust-lang.org/COPYRIGHT.
-//
-// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
-// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
-// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
-// option. This file may not be copied, modified, or distributed
-// except according to those terms.
-
-use std::sync::Future;
-
-fn main() {
-    let f = Future::from_value(());
-    let g = f;
-    f.into_inner(); //~ ERROR use of moved value
-}
diff --git a/src/test/compile-fail/issue-13352.rs b/src/test/compile-fail/issue-13352.rs
index a8c8c8b40c1..14128a0e6f7 100644
--- a/src/test/compile-fail/issue-13352.rs
+++ b/src/test/compile-fail/issue-13352.rs
@@ -10,17 +10,11 @@
 
 // pretty-expanded FIXME #23616
 
-#![feature(std_misc, libc)]
-
-extern crate libc;
-
-use std::thunk::Thunk;
-
-fn foo(_: Thunk) {}
+fn foo(_: Box<FnMut()>) {}
 
 fn main() {
     foo(loop {
-        unsafe { libc::exit(0 as libc::c_int); }
+        std::process::exit(0);
     });
     2_usize + (loop {});
     //~^ ERROR E0277
diff --git a/src/test/compile-fail/issue-17718-static-move.rs b/src/test/compile-fail/issue-17718-static-move.rs
index 4f3668b819a..a5a7117956f 100644
--- a/src/test/compile-fail/issue-17718-static-move.rs
+++ b/src/test/compile-fail/issue-17718-static-move.rs
@@ -8,10 +8,8 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-use std::marker;
-
-struct Foo { nc: marker::NoCopy }
-const INIT: Foo = Foo { nc: marker::NoCopy };
+struct Foo;
+const INIT: Foo = Foo;
 static FOO: Foo = INIT;
 
 fn main() {
diff --git a/src/test/compile-fail/marker-no-copy.rs b/src/test/compile-fail/marker-no-copy.rs
deleted file mode 100644
index d9e139cc9db..00000000000
--- a/src/test/compile-fail/marker-no-copy.rs
+++ /dev/null
@@ -1,18 +0,0 @@
-// Copyright 2013 The Rust Project Developers. See the COPYRIGHT
-// file at the top-level directory of this distribution and at
-// http://rust-lang.org/COPYRIGHT.
-//
-// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
-// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
-// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
-// option. This file may not be copied, modified, or distributed
-// except according to those terms.
-
-use std::marker;
-
-fn foo<P:Copy>(p: P) { }
-
-fn main()
-{
-    foo(marker::NoCopy); //~ ERROR the trait `core::marker::Copy` is not implemented
-}
diff --git a/src/test/compile-fail/send-is-not-static-ensures-scoping.rs b/src/test/compile-fail/send-is-not-static-ensures-scoping.rs
index fe03ca8353d..2e401ba6e90 100644
--- a/src/test/compile-fail/send-is-not-static-ensures-scoping.rs
+++ b/src/test/compile-fail/send-is-not-static-ensures-scoping.rs
@@ -8,14 +8,24 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-use std::thread;
+struct Guard<'a> {
+    f: Box<Fn() + Send + 'a>,
+}
+
+fn scoped<'a, F: Fn() + Send + 'a>(f: F) -> Guard<'a> {
+    Guard { f: Box::new(f) }
+}
+
+impl<'a> Guard<'a> {
+    fn join(self) {}
+}
 
 fn main() {
     let bad = {
         let x = 1;
         let y = &x; //~ ERROR `x` does not live long enough
 
-        thread::scoped(|| {
+        scoped(|| {
             //~^ ERROR `y` does not live long enough
             let _z = y;
         })
diff --git a/src/test/compile-fail/static-items-cant-move.rs b/src/test/compile-fail/static-items-cant-move.rs
index 422e95338ed..c8fddeb1214 100644
--- a/src/test/compile-fail/static-items-cant-move.rs
+++ b/src/test/compile-fail/static-items-cant-move.rs
@@ -10,14 +10,14 @@
 
 // Verifies that static items can't be moved
 
-use std::marker;
+struct B;
 
 struct Foo {
     foo: isize,
-    nocopy: marker::NoCopy
+    b: B,
 }
 
-static BAR: Foo = Foo{foo: 5, nocopy: marker::NoCopy};
+static BAR: Foo = Foo { foo: 5, b: B };
 
 
 fn test(f: Foo) {
diff --git a/src/test/run-fail/rt-set-exit-status-panic.rs b/src/test/run-fail/rt-set-exit-status-panic.rs
deleted file mode 100644
index 249e2e1ac2d..00000000000
--- a/src/test/run-fail/rt-set-exit-status-panic.rs
+++ /dev/null
@@ -1,25 +0,0 @@
-// Copyright 2012-2014 The Rust Project Developers. See the COPYRIGHT
-// file at the top-level directory of this distribution and at
-// http://rust-lang.org/COPYRIGHT.
-//
-// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
-// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
-// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
-// option. This file may not be copied, modified, or distributed
-// except according to those terms.
-
-// error-pattern:whatever
-
-#![feature(exit_status, rustc_private)]
-
-#[macro_use] extern crate log;
-use std::env;
-
-fn main() {
-    error!("whatever");
-    // Setting the exit status only works when the scheduler terminates
-    // normally. In this case we're going to panic, so instead of
-    // returning 50 the process will return the typical rt failure code.
-    env::set_exit_status(50);
-    panic!();
-}
diff --git a/src/test/run-fail/rt-set-exit-status-panic2.rs b/src/test/run-fail/rt-set-exit-status-panic2.rs
deleted file mode 100644
index b4f0d7ceb99..00000000000
--- a/src/test/run-fail/rt-set-exit-status-panic2.rs
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright 2012-2014 The Rust Project Developers. See the COPYRIGHT
-// file at the top-level directory of this distribution and at
-// http://rust-lang.org/COPYRIGHT.
-//
-// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
-// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
-// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
-// option. This file may not be copied, modified, or distributed
-// except according to those terms.
-
-// error-pattern:whatever
-
-#![feature(exit_status, rustc_private)]
-
-#[macro_use] extern crate log;
-use std::env;
-use std::thread;
-
-struct r {
-  x:isize,
-}
-
-// Setting the exit status after the runtime has already
-// panicked has no effect and the process exits with the
-// runtime's exit code
-impl Drop for r {
-    fn drop(&mut self) {
-        env::set_exit_status(50);
-    }
-}
-
-fn r(x:isize) -> r {
-    r {
-        x: x
-    }
-}
-
-fn main() {
-    error!("whatever");
-    let _t = thread::spawn(move|| {
-      let _i = r(5);
-    });
-    panic!();
-}
diff --git a/src/test/run-fail/rt-set-exit-status.rs b/src/test/run-fail/rt-set-exit-status.rs
deleted file mode 100644
index f5da0201815..00000000000
--- a/src/test/run-fail/rt-set-exit-status.rs
+++ /dev/null
@@ -1,23 +0,0 @@
-// Copyright 2012-2014 The Rust Project Developers. See the COPYRIGHT
-// file at the top-level directory of this distribution and at
-// http://rust-lang.org/COPYRIGHT.
-//
-// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
-// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
-// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
-// option. This file may not be copied, modified, or distributed
-// except according to those terms.
-
-// error-pattern:whatever
-
-#![feature(rustc_private, exit_status)]
-
-#[macro_use] extern crate log;
-use std::env;
-
-fn main() {
-    error!("whatever");
-    // 101 is the code the runtime uses on thread panic and the value
-    // compiletest expects run-fail tests to return.
-    env::set_exit_status(101);
-}
diff --git a/src/test/run-make/link-path-order/main.rs b/src/test/run-make/link-path-order/main.rs
index c1787eb03f5..450460cf192 100644
--- a/src/test/run-make/link-path-order/main.rs
+++ b/src/test/run-make/link-path-order/main.rs
@@ -23,6 +23,6 @@ fn main() {
     };
 
     if result != 1 {
-        std::env::set_exit_status(255);
+        std::process::exit(255);
     }
 }
diff --git a/src/test/run-pass/bitv-perf-test.rs b/src/test/run-pass/bitv-perf-test.rs
deleted file mode 100644
index 3ab154356c4..00000000000
--- a/src/test/run-pass/bitv-perf-test.rs
+++ /dev/null
@@ -1,25 +0,0 @@
-// Copyright 2012-2014 The Rust Project Developers. See the COPYRIGHT
-// file at the top-level directory of this distribution and at
-// http://rust-lang.org/COPYRIGHT.
-//
-// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
-// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
-// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
-// option. This file may not be copied, modified, or distributed
-// except according to those terms.
-
-// pretty-expanded FIXME #23616
-
-#![feature(bitvec)]
-
-use std::collections::BitVec;
-
-fn bitv_test() {
-    let mut v1 = BitVec::from_elem(31, false);
-    let v2 = BitVec::from_elem(31, true);
-    v1.union(&v2);
-}
-
-pub fn main() {
-    for _ in 0..10000 { bitv_test(); }
-}
diff --git a/src/test/run-pass/deriving-hash.rs b/src/test/run-pass/deriving-hash.rs
index ba1d8228863..69e9816ab94 100644
--- a/src/test/run-pass/deriving-hash.rs
+++ b/src/test/run-pass/deriving-hash.rs
@@ -11,7 +11,7 @@
 
 #![feature(hash_default)]
 
-use std::hash::{Hash, SipHasher};
+use std::hash::{Hash, SipHasher, Hasher};
 
 #[derive(Hash)]
 struct Person {
@@ -21,7 +21,9 @@ struct Person {
 }
 
 fn hash<T: Hash>(t: &T) -> u64 {
-    std::hash::hash::<T, SipHasher>(t)
+    let mut s = SipHasher::new_with_keys(0, 0);
+    t.hash(&mut s);
+    s.finish()
 }
 
 fn main() {
diff --git a/src/test/run-pass/dropck_legal_cycles.rs b/src/test/run-pass/dropck_legal_cycles.rs
index b4f9b3f9458..2770260a10e 100644
--- a/src/test/run-pass/dropck_legal_cycles.rs
+++ b/src/test/run-pass/dropck_legal_cycles.rs
@@ -32,7 +32,6 @@ use std::collections::BinaryHeap;
 use std::collections::HashMap;
 use std::collections::LinkedList;
 use std::collections::VecDeque;
-use std::collections::VecMap;
 use std::collections::btree_map::BTreeMap;
 use std::collections::btree_set::BTreeSet;
 use std::hash::{Hash, Hasher};
@@ -155,16 +154,16 @@ pub fn main() {
     if PRINT { println!(""); }
 
     // Cycle 7: { vm -> (vm0, vm1), {vm0, vm1} -> vm }
-    let mut vm: VecMap<VM> = VecMap::new();
+    let mut vm: HashMap<usize, VM> = HashMap::new();
     vm.insert(0, Named::new("vm0"));
     vm.insert(1, Named::new("vm1"));
-    vm[0].contents.set(Some(&vm));
-    vm[1].contents.set(Some(&vm));
+    vm[&0].contents.set(Some(&vm));
+    vm[&1].contents.set(Some(&vm));
 
     let mut c = c_orig.clone();
     c.curr_mark = 70;
     assert!(!c.saw_prev_marked);
-    vm[0].for_each_child(&mut c);
+    vm[&0].for_each_child(&mut c);
     assert!(c.saw_prev_marked);
 
     if PRINT { println!(""); }
@@ -388,7 +387,7 @@ impl<'a> Marked<u32> for VD<'a> {
 struct VM<'a> {
     name: &'static str,
     mark: Cell<u32>,
-    contents: Cell<Option<&'a VecMap<VM<'a>>>>,
+    contents: Cell<Option<&'a HashMap<usize, VM<'a>>>>,
 }
 
 impl<'a> Named for VM<'a> {
diff --git a/src/test/run-pass/fsu-moves-and-copies.rs b/src/test/run-pass/fsu-moves-and-copies.rs
index dd58787a1de..e6ac8b52c51 100644
--- a/src/test/run-pass/fsu-moves-and-copies.rs
+++ b/src/test/run-pass/fsu-moves-and-copies.rs
@@ -15,10 +15,8 @@
 #![allow(unknown_features)]
 #![feature(box_syntax, core)]
 
-use std::marker::NoCopy as NP;
-
-struct ncint { np: NP, v: isize }
-fn ncint(v: isize) -> ncint { ncint { np: NP, v: v } }
+struct ncint { v: isize }
+fn ncint(v: isize) -> ncint { ncint { v: v } }
 
 struct NoFoo { copied: isize, nocopy: ncint, }
 impl NoFoo {
diff --git a/src/test/run-pass/issue-11709.rs b/src/test/run-pass/issue-11709.rs
index 3eaa5632395..cfff7eb3395 100644
--- a/src/test/run-pass/issue-11709.rs
+++ b/src/test/run-pass/issue-11709.rs
@@ -15,17 +15,13 @@
 // when this bug was opened. The cases where the compiler
 // panics before the fix have a comment.
 
-#![feature(thunk)]
-
-use std::thunk::Thunk;
-
 struct S {x:()}
 
-fn test(slot: &mut Option<Thunk<(),Thunk>>) -> () {
+fn test(slot: &mut Option<Box<FnMut() -> Box<FnMut()>>>) -> () {
   let a = slot.take();
   let _a = match a {
     // `{let .. a(); }` would break
-    Some(a) => { let _a = a(); },
+    Some(mut a) => { let _a = a(); },
     None => (),
   };
 }
diff --git a/src/test/run-pass/issue-11736.rs b/src/test/run-pass/issue-11736.rs
deleted file mode 100644
index 9b30305a196..00000000000
--- a/src/test/run-pass/issue-11736.rs
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright 2014 The Rust Project Developers. See the COPYRIGHT
-// file at the top-level directory of this distribution and at
-// http://rust-lang.org/COPYRIGHT.
-//
-// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
-// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
-// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
-// option. This file may not be copied, modified, or distributed
-// except according to those terms.
-
-// pretty-expanded FIXME #23616
-
-#![feature(bitvec)]
-
-use std::collections::BitVec;
-
-fn main() {
-    // Generate sieve of Eratosthenes for n up to 1e6
-    let n = 1000000;
-    let mut sieve = BitVec::from_elem(n+1, true);
-    let limit: usize = (n as f32).sqrt() as usize;
-    for i in 2..limit+1 {
-        if sieve[i] {
-            let mut j = 0;
-            while i*i + j*i <= n {
-                sieve.set(i*i+j*i, false);
-                j += 1;
-            }
-        }
-    }
-    for i in 2..n+1 {
-        if sieve[i] {
-        }
-    }
-}
diff --git a/src/test/run-pass/issue-16530.rs b/src/test/run-pass/issue-16530.rs
index 1f96f071e9d..bd7e7c85189 100644
--- a/src/test/run-pass/issue-16530.rs
+++ b/src/test/run-pass/issue-16530.rs
@@ -8,13 +8,15 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-#![feature(hash_default)]
-
-use std::hash::{SipHasher, hash};
+use std::hash::{SipHasher, Hasher, Hash};
 
 #[derive(Hash)]
 struct Empty;
 
 pub fn main() {
-    assert_eq!(hash::<_, SipHasher>(&Empty), hash::<_, SipHasher>(&Empty));
+    let mut s1 = SipHasher::new_with_keys(0, 0);
+    Empty.hash(&mut s1);
+    let mut s2 = SipHasher::new_with_keys(0, 0);
+    Empty.hash(&mut s2);
+    assert_eq!(s1.finish(), s2.finish());
 }
diff --git a/src/test/run-pass/issue-17897.rs b/src/test/run-pass/issue-17897.rs
index 227c81e2766..82ecd636130 100644
--- a/src/test/run-pass/issue-17897.rs
+++ b/src/test/run-pass/issue-17897.rs
@@ -8,11 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-#![feature(thunk)]
-
-use std::thunk::Thunk;
-
-fn action(cb: Thunk<(usize,), usize>) -> usize {
+fn action(mut cb: Box<FnMut(usize) -> usize>) -> usize {
     cb(1)
 }
 
diff --git a/src/test/run-pass/issue-18188.rs b/src/test/run-pass/issue-18188.rs
index 5bcb052282c..18088a5f3ec 100644
--- a/src/test/run-pass/issue-18188.rs
+++ b/src/test/run-pass/issue-18188.rs
@@ -10,18 +10,16 @@
 
 // pretty-expanded FIXME #23616
 
-#![feature(thunk)]
-
-use std::thunk::Thunk;
-
 pub trait Promisable: Send + Sync {}
 impl<T: Send + Sync> Promisable for T {}
-pub fn propagate<'a, T, E, F, G>(action: F) -> Thunk<'a, (Result<T, E>,), Result<T, E>>
+
+pub fn propagate<'a, T, E, F, G>(mut action: F)
+    -> Box<FnMut(Result<T, E>) -> Result<T, E> + 'a>
     where
         T: Promisable + Clone + 'a,
         E: Promisable + Clone + 'a,
-        F: FnOnce(&T) -> Result<T, E> + Send + 'a,
-        G: FnOnce(Result<T, E>) -> Result<T, E> + 'a {
+        F: FnMut(&T) -> Result<T, E> + Send + 'a,
+        G: FnMut(Result<T, E>) -> Result<T, E> + 'a {
     Box::new(move |result: Result<T, E>| {
         match result {
             Ok(ref t) => action(t),
diff --git a/src/test/run-pass/issue-2190-1.rs b/src/test/run-pass/issue-2190-1.rs
index eeca4498328..844826c45db 100644
--- a/src/test/run-pass/issue-2190-1.rs
+++ b/src/test/run-pass/issue-2190-1.rs
@@ -10,18 +10,15 @@
 
 // pretty-expanded FIXME #23616
 
-#![feature(thunk)]
-
 use std::thread::Builder;
-use std::thunk::Thunk;
 
 static generations: usize = 1024+256+128+49;
 
-fn spawn(f: Thunk<'static>) {
+fn spawn(mut f: Box<FnMut() + 'static + Send>) {
     Builder::new().stack_size(32 * 1024).spawn(move|| f());
 }
 
-fn child_no(x: usize) -> Thunk<'static> {
+fn child_no(x: usize) -> Box<FnMut() + 'static + Send> {
     Box::new(move|| {
         if x < generations {
             spawn(child_no(x+1));
diff --git a/src/test/run-pass/minmax-stability-issue-23687.rs b/src/test/run-pass/minmax-stability-issue-23687.rs
index 62bde45cd3d..37decb9e748 100644
--- a/src/test/run-pass/minmax-stability-issue-23687.rs
+++ b/src/test/run-pass/minmax-stability-issue-23687.rs
@@ -12,7 +12,6 @@
 
 use std::fmt::Debug;
 use std::cmp::{self, PartialOrd, Ordering};
-use std::iter::MinMaxResult::MinMax;
 
 #[derive(Debug, Copy, Clone, PartialEq, Eq)]
 struct Foo {
@@ -47,21 +46,12 @@ fn main() {
     assert_eq!(data.iter().min_by(|a| a.n), Some(&a));
     assert_eq!(cmp::min(a, b), a);
     assert_eq!(cmp::min(b, a), b);
-    assert_eq!(cmp::partial_min(a, b), Some(a));
-    assert_eq!(cmp::partial_min(b, a), Some(b));
 
     // `max` should return the right when the values are equal
     assert_eq!(data.iter().max(), Some(&f));
     assert_eq!(data.iter().max_by(|a| a.n), Some(&f));
     assert_eq!(cmp::max(e, f), f);
     assert_eq!(cmp::max(f, e), e);
-    assert_eq!(cmp::partial_max(e, f), Some(f));
-    assert_eq!(cmp::partial_max(f, e), Some(e));
-
-    // Similar for `min_max`
-    assert_eq!(data.iter().min_max(), MinMax(&a, &f));
-    assert_eq!(data[1..5].iter().min_max(), MinMax(&b, &e));
-    assert_eq!(data[2..4].iter().min_max(), MinMax(&c, &d));
 
     let mut presorted = data.to_vec();
     presorted.sort();
diff --git a/src/test/run-pass/send-is-not-static-par-for.rs b/src/test/run-pass/send-is-not-static-par-for.rs
index e40f4d30eb9..356a3be3927 100644
--- a/src/test/run-pass/send-is-not-static-par-for.rs
+++ b/src/test/run-pass/send-is-not-static-par-for.rs
@@ -8,21 +8,17 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-#![feature(core, std_misc, scoped)]
 use std::thread;
 use std::sync::Mutex;
 
 fn par_for<I, F>(iter: I, f: F)
     where I: Iterator,
-          <I as Iterator>::Item: Send,
-          F: Fn(<I as Iterator>::Item) + Sync
+          I::Item: Send,
+          F: Fn(I::Item) + Sync
 {
-    let f = &f;
-    let _guards: Vec<_> = iter.map(|elem| {
-        thread::scoped(move || {
-            f(elem)
-        })
-    }).collect();
+    for item in iter {
+        f(item)
+    }
 }
 
 fn sum(x: &[i32]) {
diff --git a/src/test/run-pass/sync-send-iterators-in-libcollections.rs b/src/test/run-pass/sync-send-iterators-in-libcollections.rs
index cdfc4d32027..8160fe56fd0 100644
--- a/src/test/run-pass/sync-send-iterators-in-libcollections.rs
+++ b/src/test/run-pass/sync-send-iterators-in-libcollections.rs
@@ -17,14 +17,12 @@
 extern crate collections;
 
 use collections::BinaryHeap;
-use collections::{BitSet, BitVec};
 use collections::{BTreeMap, BTreeSet};
 use collections::EnumSet;
 use collections::LinkedList;
 use collections::String;
 use collections::Vec;
 use collections::VecDeque;
-use collections::VecMap;
 use std::collections::HashMap;
 use std::collections::HashSet;
 
@@ -60,14 +58,6 @@ fn main() {
     // implementations have where `Sync` and `Send` semantics apply.
     all_sync_send!(BinaryHeap::<usize>::new(), iter, drain, into_iter);
 
-    all_sync_send!(BitVec::new(), iter);
-
-    all_sync_send!(BitSet::new(), iter);
-    is_sync_send!(BitSet::new(), union(&BitSet::new()));
-    is_sync_send!(BitSet::new(), intersection(&BitSet::new()));
-    is_sync_send!(BitSet::new(), difference(&BitSet::new()));
-    is_sync_send!(BitSet::new(), symmetric_difference(&BitSet::new()));
-
     all_sync_send!(BTreeMap::<usize, usize>::new(), iter, iter_mut, into_iter, keys, values);
     is_sync_send!(BTreeMap::<usize, usize>::new(), range(Included(&0), Included(&9)));
     is_sync_send!(BTreeMap::<usize, usize>::new(), range_mut(Included(&0), Included(&9)));
@@ -105,8 +95,6 @@ fn main() {
 
     all_sync_send!(VecDeque::<usize>::new(), iter, iter_mut, drain, into_iter);
 
-    all_sync_send!(VecMap::<usize>::new(), iter, iter_mut, drain, into_iter, keys, values);
-
     all_sync_send!(Vec::<usize>::new(), into_iter);
     is_sync_send!(Vec::<usize>::new(), drain(..));
     is_sync_send!(String::new(), drain(..));
diff --git a/src/test/run-pass/sync-send-iterators-in-libcore.rs b/src/test/run-pass/sync-send-iterators-in-libcore.rs
index d76bf89d053..c4d070f8bfe 100644
--- a/src/test/run-pass/sync-send-iterators-in-libcore.rs
+++ b/src/test/run-pass/sync-send-iterators-in-libcore.rs
@@ -18,7 +18,7 @@
 #![feature(step_by)]
 #![feature(str_escape)]
 
-use std::iter::{empty, once, range_inclusive, repeat, Unfold};
+use std::iter::{empty, once, range_inclusive, repeat};
 
 fn is_sync<T>(_: T) where T: Sync {}
 fn is_send<T>(_: T) where T: Send {}
@@ -97,7 +97,6 @@ fn main() {
                    fuse,
                    inspect(|_| ()));
 
-    is_sync_send!(Unfold::new(Some(1), |&mut v| v));
     is_sync_send!((1..).step_by(2));
     is_sync_send!(range_inclusive(1, 1));
     is_sync_send!((1..2).step_by(2));
diff --git a/src/test/run-pass/typeid-intrinsic.rs b/src/test/run-pass/typeid-intrinsic.rs
index feb43dfb9ad..db53fa855f1 100644
--- a/src/test/run-pass/typeid-intrinsic.rs
+++ b/src/test/run-pass/typeid-intrinsic.rs
@@ -11,13 +11,12 @@
 // aux-build:typeid-intrinsic.rs
 // aux-build:typeid-intrinsic2.rs
 
-
-#![feature(hash_default, core_intrinsics)]
+#![feature(core_intrinsics)]
 
 extern crate typeid_intrinsic as other1;
 extern crate typeid_intrinsic2 as other2;
 
-use std::hash::{self, SipHasher};
+use std::hash::{SipHasher, Hasher, Hash};
 use std::any::TypeId;
 
 struct A;
@@ -72,6 +71,10 @@ pub fn main() {
     // check it has a hash
     let (a, b) = (TypeId::of::<usize>(), TypeId::of::<usize>());
 
-    assert_eq!(hash::hash::<TypeId, SipHasher>(&a),
-               hash::hash::<TypeId, SipHasher>(&b));
+    let mut s1 = SipHasher::new();
+    a.hash(&mut s1);
+    let mut s2 = SipHasher::new();
+    b.hash(&mut s2);
+
+    assert_eq!(s1.finish(), s2.finish());
 }
diff --git a/src/test/run-pass/ufcs-polymorphic-paths.rs b/src/test/run-pass/ufcs-polymorphic-paths.rs
index 27f11d0411c..685ce589bfa 100644
--- a/src/test/run-pass/ufcs-polymorphic-paths.rs
+++ b/src/test/run-pass/ufcs-polymorphic-paths.rs
@@ -8,12 +8,9 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-
-#![feature(collections, rand, into_cow, map_in_place, bitvec)]
-#![allow(warnings)]
+#![feature(into_cow)]
 
 use std::borrow::{Cow, IntoCow};
-use std::collections::BitVec;
 use std::default::Default;
 use std::iter::FromIterator;
 use std::ops::Add;
@@ -24,7 +21,7 @@ use XorShiftRng as DummyRng;
 impl Rng for XorShiftRng {}
 pub trait Rng {}
 pub trait Rand: Default + Sized {
-    fn rand<R: Rng>(rng: &mut R) -> Self { Default::default() }
+    fn rand<R: Rng>(_rng: &mut R) -> Self { Default::default() }
 }
 impl Rand for i32 { }
 
@@ -42,6 +39,25 @@ trait Size: Sized {
 }
 impl<T> Size for T {}
 
+#[derive(PartialEq, Eq)]
+struct BitVec;
+
+impl BitVec {
+    fn from_fn<F>(_: usize, _: F) -> BitVec where F: FnMut(usize) -> bool {
+        BitVec
+    }
+}
+
+#[derive(PartialEq, Eq)]
+struct Foo<T>(T);
+
+impl<T> Foo<T> {
+    fn map_in_place<U, F>(self, mut f: F) -> Foo<U> where F: FnMut(T) -> U {
+        Foo(f(self.0))
+    }
+
+}
+
 macro_rules! tests {
     ($($expr:expr, $ty:ty, ($($test:expr),*);)+) => (pub fn main() {$({
         const C: $ty = $expr;
@@ -76,13 +92,13 @@ tests! {
     BitVec::from_fn::<fn(usize) -> bool>, fn(usize, fn(usize) -> bool) -> BitVec, (5, odd);
 
     // Inherent non-static method.
-    Vec::map_in_place, fn(Vec<u8>, fn(u8) -> i8) -> Vec<i8>, (vec![b'f', b'o', b'o'], u8_as_i8);
-    Vec::map_in_place::<i8, fn(u8) -> i8>, fn(Vec<u8>, fn(u8) -> i8) -> Vec<i8>,
-        (vec![b'f', b'o', b'o'], u8_as_i8);
-    Vec::<u8>::map_in_place, fn(Vec<u8>, fn(u8) -> i8) -> Vec<i8>
-        , (vec![b'f', b'o', b'o'], u8_as_i8);
-    Vec::<u8>::map_in_place::<i8, fn(u8) -> i8>, fn(Vec<u8>, fn(u8) -> i8) -> Vec<i8>
-        , (vec![b'f', b'o', b'o'], u8_as_i8);
+    Foo::map_in_place, fn(Foo<u8>, fn(u8) -> i8) -> Foo<i8>, (Foo(b'f'), u8_as_i8);
+    Foo::map_in_place::<i8, fn(u8) -> i8>, fn(Foo<u8>, fn(u8) -> i8) -> Foo<i8>,
+        (Foo(b'f'), u8_as_i8);
+    Foo::<u8>::map_in_place, fn(Foo<u8>, fn(u8) -> i8) -> Foo<i8>
+        , (Foo(b'f'), u8_as_i8);
+    Foo::<u8>::map_in_place::<i8, fn(u8) -> i8>, fn(Foo<u8>, fn(u8) -> i8) -> Foo<i8>
+        , (Foo(b'f'), u8_as_i8);
 
     // Trait static methods.
     bool::size, fn() -> usize, ();
diff --git a/src/test/run-pass/unfold-cross-crate.rs b/src/test/run-pass/unfold-cross-crate.rs
deleted file mode 100644
index 9d5383fe060..00000000000
--- a/src/test/run-pass/unfold-cross-crate.rs
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright 2013 The Rust Project Developers. See the COPYRIGHT
-// file at the top-level directory of this distribution and at
-// http://rust-lang.org/COPYRIGHT.
-//
-// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
-// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
-// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
-// option. This file may not be copied, modified, or distributed
-// except according to those terms.
-
-#![feature(iter_unfold)]
-
-use std::iter::Unfold;
-
-// Unfold had a bug with 'a that mean it didn't work
-// cross-crate
-
-pub fn main() {
-    fn count(st: &mut usize) -> Option<usize> {
-        if *st < 10 {
-            let ret = Some(*st);
-            *st += 1;
-            ret
-        } else {
-            None
-        }
-    }
-
-    let mut it = Unfold::new(0, count);
-    let mut i = 0;
-    for counted in it {
-        assert_eq!(counted, i);
-        i += 1;
-    }
-    assert_eq!(i, 10);
-}