Jelajahi Sumber

SVI Доработка типов, расширение key-value хранилища; 100.0%

SVI 7 bulan lalu
induk
melakukan
9c5e14ea79
91 mengubah file dengan 3387 tambahan dan 27270 penghapusan
  1. 6 6
      README.md
  2. 5 0
      v2/docs/alias.md
  3. 32 0
      v2/docs/index.md
  4. 3 0
      v2/docs/types.md
  5. 8 8
      v2/go.mod
  6. 16 17
      v2/go.sum
  7. 33 0
      v2/krn/kstore_kv/kstore_kv.go
  8. 22 0
      v2/krn/kstore_kv/kstore_kv_test.go
  9. 2 0
      v2/krn/ktypes/ikernel_store_kv.go
  10. 1 1
      v2/vendor/github.com/clipperhouse/uax29/v2/LICENSE
  11. 82 0
      v2/vendor/github.com/clipperhouse/uax29/v2/graphemes/README.md
  12. 28 0
      v2/vendor/github.com/clipperhouse/uax29/v2/graphemes/iterator.go
  13. 25 0
      v2/vendor/github.com/clipperhouse/uax29/v2/graphemes/reader.go
  14. 174 0
      v2/vendor/github.com/clipperhouse/uax29/v2/graphemes/splitfunc.go
  15. 1409 0
      v2/vendor/github.com/clipperhouse/uax29/v2/graphemes/trie.go
  16. 85 0
      v2/vendor/github.com/clipperhouse/uax29/v2/internal/iterators/iterator.go
  17. 12 8
      v2/vendor/github.com/google/flatbuffers/go/builder.go
  18. 27 3
      v2/vendor/github.com/google/flatbuffers/go/grpc.go
  19. 43 0
      v2/vendor/github.com/mattn/go-runewidth/benchstat.txt
  20. 54 0
      v2/vendor/github.com/mattn/go-runewidth/new.txt
  21. 54 0
      v2/vendor/github.com/mattn/go-runewidth/old.txt
  22. 13 10
      v2/vendor/github.com/mattn/go-runewidth/runewidth.go
  23. 6 0
      v2/vendor/github.com/mattn/go-runewidth/runewidth_windows.go
  24. 0 137
      v2/vendor/github.com/rivo/uniseg/README.md
  25. 0 108
      v2/vendor/github.com/rivo/uniseg/doc.go
  26. 0 2588
      v2/vendor/github.com/rivo/uniseg/eastasianwidth.go
  27. 0 295
      v2/vendor/github.com/rivo/uniseg/emojipresentation.go
  28. 0 215
      v2/vendor/github.com/rivo/uniseg/gen_breaktest.go
  29. 0 261
      v2/vendor/github.com/rivo/uniseg/gen_properties.go
  30. 0 331
      v2/vendor/github.com/rivo/uniseg/grapheme.go
  31. 0 1915
      v2/vendor/github.com/rivo/uniseg/graphemeproperties.go
  32. 0 176
      v2/vendor/github.com/rivo/uniseg/graphemerules.go
  33. 0 134
      v2/vendor/github.com/rivo/uniseg/line.go
  34. 0 3554
      v2/vendor/github.com/rivo/uniseg/lineproperties.go
  35. 0 626
      v2/vendor/github.com/rivo/uniseg/linerules.go
  36. 0 208
      v2/vendor/github.com/rivo/uniseg/properties.go
  37. 0 90
      v2/vendor/github.com/rivo/uniseg/sentence.go
  38. 0 2845
      v2/vendor/github.com/rivo/uniseg/sentenceproperties.go
  39. 0 276
      v2/vendor/github.com/rivo/uniseg/sentencerules.go
  40. 0 242
      v2/vendor/github.com/rivo/uniseg/step.go
  41. 0 61
      v2/vendor/github.com/rivo/uniseg/width.go
  42. 0 89
      v2/vendor/github.com/rivo/uniseg/word.go
  43. 0 1883
      v2/vendor/github.com/rivo/uniseg/wordproperties.go
  44. 0 282
      v2/vendor/github.com/rivo/uniseg/wordrules.go
  45. 2 0
      v2/vendor/github.com/valyala/fasthttp/.golangci.yml
  46. 80 70
      v2/vendor/github.com/valyala/fasthttp/README.md
  47. 2 2
      v2/vendor/github.com/valyala/fasthttp/brotli.go
  48. 3 3
      v2/vendor/github.com/valyala/fasthttp/client.go
  49. 243 44
      v2/vendor/github.com/valyala/fasthttp/fasthttpadaptor/adaptor.go
  50. 1 1
      v2/vendor/github.com/valyala/fasthttp/fasthttputil/pipeconns.go
  51. 30 8
      v2/vendor/github.com/valyala/fasthttp/header.go
  52. 105 147
      v2/vendor/github.com/valyala/fasthttp/headers.go
  53. 2 2
      v2/vendor/github.com/valyala/fasthttp/headerscanner.go
  54. 12 3
      v2/vendor/github.com/valyala/fasthttp/http.go
  55. 195 0
      v2/vendor/github.com/valyala/fasthttp/ipv6.go
  56. 64 52
      v2/vendor/github.com/valyala/fasthttp/server.go
  57. 31 8
      v2/vendor/github.com/valyala/fasthttp/tcpdialer.go
  58. 2 2
      v2/vendor/github.com/valyala/fasthttp/tcplisten/tcplisten_linux.go
  59. 66 5
      v2/vendor/github.com/valyala/fasthttp/uri.go
  60. 1 1
      v2/vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/id.go
  61. 1 1
      v2/vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/number.go
  62. 43 27
      v2/vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/span.go
  63. 6 4
      v2/vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/status.go
  64. 2 2
      v2/vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/traces.go
  65. 6 8
      v2/vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/value.go
  66. 20 5
      v2/vendor/go.opentelemetry.io/auto/sdk/span.go
  67. 23 6
      v2/vendor/go.opentelemetry.io/auto/sdk/tracer.go
  68. 0 3
      v2/vendor/go.opentelemetry.io/otel/semconv/v1.26.0/README.md
  69. 0 8996
      v2/vendor/go.opentelemetry.io/otel/semconv/v1.26.0/attribute_group.go
  70. 0 9
      v2/vendor/go.opentelemetry.io/otel/semconv/v1.26.0/doc.go
  71. 0 9
      v2/vendor/go.opentelemetry.io/otel/semconv/v1.26.0/exception.go
  72. 0 1307
      v2/vendor/go.opentelemetry.io/otel/semconv/v1.26.0/metric.go
  73. 0 9
      v2/vendor/go.opentelemetry.io/otel/semconv/v1.26.0/schema.go
  74. 8 1
      v2/vendor/golang.org/x/sys/unix/affinity_linux.go
  75. 1 3
      v2/vendor/golang.org/x/sys/unix/fdset.go
  76. 1 3
      v2/vendor/golang.org/x/sys/unix/ifreq_linux.go
  77. 1 0
      v2/vendor/golang.org/x/sys/unix/mkall.sh
  78. 1 3
      v2/vendor/golang.org/x/sys/unix/syscall_linux.go
  79. 17 0
      v2/vendor/golang.org/x/sys/unix/syscall_netbsd.go
  80. 1 1
      v2/vendor/golang.org/x/sys/unix/syscall_solaris.go
  81. 4 4
      v2/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go
  82. 41 0
      v2/vendor/golang.org/x/sys/unix/ztypes_linux.go
  83. 2 0
      v2/vendor/golang.org/x/sys/windows/syscall_windows.go
  84. 22 0
      v2/vendor/golang.org/x/sys/windows/types_windows.go
  85. 115 113
      v2/vendor/golang.org/x/sys/windows/zsyscall_windows.go
  86. 35 17
      v2/vendor/google.golang.org/protobuf/internal/filedesc/desc.go
  87. 14 0
      v2/vendor/google.golang.org/protobuf/internal/filedesc/desc_init.go
  88. 20 0
      v2/vendor/google.golang.org/protobuf/internal/filedesc/desc_lazy.go
  89. 7 5
      v2/vendor/google.golang.org/protobuf/internal/filedesc/editions.go
  90. 1 1
      v2/vendor/google.golang.org/protobuf/internal/version/version.go
  91. 16 16
      v2/vendor/modules.txt

+ 6 - 6
README.md

@@ -1,16 +1,16 @@
 # kern
 
-![Coverage](./docs/img/coverage.svg)
+![Coverage](./v2/docs/img/coverage.svg)
 
 ![MX Linux](https://img.shields.io/badge/-MX%20Linux-%23000000?style=for-the-badge&logo=MXlinux&logoColor=white)
 
 ![Go](https://img.shields.io/badge/go-%2300ADD8.svg?style=for-the-badge&logo=go&logoColor=white)
 
-![GitHub](https://img.shields.io/badge/github-%23121011.svg?style=for-the-badge&logo=github&logoColor=white)
+![GitHub](https://img.shields.io/badge/github-%23121011.svg?style=for-the-badge&logo=github&logoColor=white) (устаревшая версия)
 
 ![Visual Studio Code](https://img.shields.io/badge/Visual%20Studio%20Code-0078d7.svg?style=for-the-badge&logo=visual-studio-code&logoColor=white)
 
-![License: UCL](./docs/img/ucl.svg) / ![License: MIT](./docs/img/mit.svg)
+![License: UCL](./v2/docs/img/ucl.svg) / ![License: MIT](./v2/docs/img/mit.svg)
 
 **kern v2** -- фреймворк модульных компонентов ядра с высокой надёжностью для любого микросервиса или модульного монолита. Позволяет создавать изолированные модули в составе монолита (полезно в начале разработки). А затем модули можно выносить в отдельные микросервисы (после отладки).
 
@@ -20,7 +20,7 @@
 
 ## Статус проекта
 
-* готовность: `96%`;
+* готовность: `100%` (проект продолжает развиваться);
 * покрытие тестами: `100%`;
 * линтеры: `no errors`;
 * цикломатическая сложность: `< 11`.
@@ -55,6 +55,6 @@ make test # Запуск тестов
 make lint # Запуск линтеров
 ```
 
-## Различные полезняшки
+## Документация
 
-[смотреть здесь](./docs/helpers.md)
+[Документация](./v2/docs/index.md)

+ 5 - 0
v2/docs/alias.md

@@ -0,0 +1,5 @@
+# Алиасы
+
+Алиасы пользовательских типов служат усилению типизации в ядре, что повышает надёжность в-целом.
+
+*Примечание: алиас пользовательского типа в `go` является самостоятельным типом и требует приведения к базовому, если это необходимо*.

+ 32 - 0
v2/docs/index.md

@@ -0,0 +1,32 @@
+# kern -- модульные компоненты
+
+**kern** позволяет строить проекты на модульном принципе. Этот принцип позволяет бесшовно переходить от модульного монолита к модульным микросервисам. Первый подход (монолит) удобен в стартапах. Второй подход удобен, когда понятно, какие части масштабировать.
+
+## Состав проекта
+
+### Ядро
+
+- [Алиасы](./alias.md)
+- [Типы (интерфейсы)](./types.md)
+- [Шина](./bus.md)
+- [Контекст ядра](./all_context.md)
+- [Модули](./modules.md)
+- [Монолит](./monolit.md)
+- [Сервер HTTP](./server_http.md)
+- [Хранилище key-value](./stjre_kv.md)
+
+## Компоненты
+
+- (Помощники)(./helpers.md)
+- (Локальный контекст)(./local_ctx.md)
+- (Буфер логирования)(./log_buf.md)
+- (Потокобезопасный реактивный `bool`)(./safe_react_bool.md)
+- (Потокобезопасный `int`)(./safe_int.md)
+- (Потокобезопасный `string`)(./safe_string.md)
+
+## Модули
+
+- [Модуль контекста ядра](./module_kern_ctx.md)
+- [Модуль сторожа ядра](./module_kern_keeper.md)
+- [Модуль сервера HTTP](./module_serv_http.md)
+- [Модуль веб-интерфейса](./module_web_interface.md)

+ 3 - 0
v2/docs/types.md

@@ -0,0 +1,3 @@
+# Типы интерфейсов ядра
+
+Интерфейсы введены для ослабления зацепления между объектами и типами.

+ 8 - 8
v2/go.mod

@@ -12,23 +12,23 @@ require (
 require (
 	github.com/andybalholm/brotli v1.2.0 // indirect
 	github.com/cespare/xxhash/v2 v2.3.0 // indirect
+	github.com/clipperhouse/uax29/v2 v2.2.0 // indirect
 	github.com/dgraph-io/ristretto/v2 v2.3.0 // indirect
 	github.com/dustin/go-humanize v1.0.1 // indirect
 	github.com/go-logr/logr v1.4.3 // indirect
 	github.com/go-logr/stdr v1.2.2 // indirect
-	github.com/google/flatbuffers v25.2.10+incompatible // indirect
+	github.com/google/flatbuffers v25.9.23+incompatible // indirect
 	github.com/klauspost/compress v1.18.0 // indirect
 	github.com/mattn/go-colorable v0.1.14 // indirect
 	github.com/mattn/go-isatty v0.0.20 // indirect
-	github.com/mattn/go-runewidth v0.0.16 // indirect
-	github.com/rivo/uniseg v0.4.7 // indirect
+	github.com/mattn/go-runewidth v0.0.19 // indirect
 	github.com/valyala/bytebufferpool v1.0.0 // indirect
-	github.com/valyala/fasthttp v1.65.0 // indirect
-	go.opentelemetry.io/auto/sdk v1.1.0 // indirect
+	github.com/valyala/fasthttp v1.67.0 // indirect
+	go.opentelemetry.io/auto/sdk v1.2.1 // indirect
 	go.opentelemetry.io/otel v1.38.0 // indirect
 	go.opentelemetry.io/otel/metric v1.38.0 // indirect
 	go.opentelemetry.io/otel/trace v1.38.0 // indirect
-	golang.org/x/net v0.43.0 // indirect
-	golang.org/x/sys v0.35.0 // indirect
-	google.golang.org/protobuf v1.36.8 // indirect
+	golang.org/x/net v0.46.0 // indirect
+	golang.org/x/sys v0.37.0 // indirect
+	google.golang.org/protobuf v1.36.10 // indirect
 )

+ 16 - 17
v2/go.sum

@@ -7,6 +7,8 @@ github.com/andybalholm/brotli v1.2.0 h1:ukwgCxwYrmACq68yiUqwIWnGY0cTPox/M94sVwTo
 github.com/andybalholm/brotli v1.2.0/go.mod h1:rzTDkvFWvIrjDXZHkuS16NPggd91W3kUSvPlQ1pLaKY=
 github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
 github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
+github.com/clipperhouse/uax29/v2 v2.2.0 h1:ChwIKnQN3kcZteTXMgb1wztSgaU+ZemkgWdohwgs8tY=
+github.com/clipperhouse/uax29/v2 v2.2.0/go.mod h1:EFJ2TJMRUaplDxHKj1qAEhCtQPW2tJSwu5BF98AuoVM=
 github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/dgraph-io/badger/v4 v4.8.0 h1:JYph1ChBijCw8SLeybvPINizbDKWZ5n/GYbz2yhN/bs=
@@ -24,8 +26,8 @@ github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
 github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
 github.com/gofiber/fiber/v2 v2.52.9 h1:YjKl5DOiyP3j0mO61u3NTmK7or8GzzWzCFzkboyP5cw=
 github.com/gofiber/fiber/v2 v2.52.9/go.mod h1:YEcBbO/FB+5M1IZNBP9FO3J9281zgPAreiI1oqg8nDw=
-github.com/google/flatbuffers v25.2.10+incompatible h1:F3vclr7C3HpB1k9mxCGRMXq6FdUalZ6H/pNX4FP1v0Q=
-github.com/google/flatbuffers v25.2.10+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8=
+github.com/google/flatbuffers v25.9.23+incompatible h1:rGZKv+wOb6QPzIdkM2KxhBZCDrA0DeN6DNmRDrqIsQU=
+github.com/google/flatbuffers v25.9.23+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8=
 github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
 github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
 github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
@@ -37,24 +39,21 @@ github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHP
 github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8=
 github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
 github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
-github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc=
-github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
+github.com/mattn/go-runewidth v0.0.19 h1:v++JhqYnZuu5jSKrk9RbgF5v4CGUjqRfBm05byFGLdw=
+github.com/mattn/go-runewidth v0.0.19/go.mod h1:XBkDxAl56ILZc9knddidhrOlY5R/pDhgLpndooCuJAs=
 github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
-github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ=
-github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
 github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
 github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
 github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=
 github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
-github.com/valyala/fasthttp v1.65.0 h1:j/u3uzFEGFfRxw79iYzJN+TteTJwbYkru9uDp3d0Yf8=
-github.com/valyala/fasthttp v1.65.0/go.mod h1:P/93/YkKPMsKSnATEeELUCkG8a7Y+k99uxNHVbKINr4=
+github.com/valyala/fasthttp v1.67.0 h1:tqKlJMUP6iuNG8hGjK/s9J4kadH7HLV4ijEcPGsezac=
+github.com/valyala/fasthttp v1.67.0/go.mod h1:qYSIpqt/0XNmShgo/8Aq8E3UYWVVwNS2QYmzd8WIEPM=
 github.com/xyproto/randomstring v1.0.5 h1:YtlWPoRdgMu3NZtP45drfy1GKoojuR7hmRcnhZqKjWU=
 github.com/xyproto/randomstring v1.0.5/go.mod h1:rgmS5DeNXLivK7YprL0pY+lTuhNQW3iGxZ18UQApw/E=
 github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
-go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
+go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64=
+go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y=
 go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8=
 go.opentelemetry.io/otel v1.38.0/go.mod h1:zcmtmQ1+YmQM9wrNsTGV/q/uyusom3P8RxwExxkZhjM=
 go.opentelemetry.io/otel/metric v1.38.0 h1:Kl6lzIYGAh5M159u9NgiRkmoMKjvbsKtYRwgfrA6WpA=
@@ -68,8 +67,8 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE=
-golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg=
+golang.org/x/net v0.46.0 h1:giFlY12I07fugqwPuWJi68oOnpfqFnJIJzaIIm2JVV4=
+golang.org/x/net v0.46.0/go.mod h1:Q9BGdFy1y4nkUwiLvT5qtyhAnEHgnQ/zd8PfU6nc210=
 golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -77,8 +76,8 @@ golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7w
 golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI=
-golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
+golang.org/x/sys v0.37.0 h1:fdNQudmxPjkdUTPnLn5mdQv7Zwvbvpaxqs831goi9kQ=
+golang.org/x/sys v0.37.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
@@ -87,8 +86,8 @@ golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
 golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/protobuf v1.36.8 h1:xHScyCOEuuwZEc6UtSOvPbAT4zRh0xcNRYekJwfqyMc=
-google.golang.org/protobuf v1.36.8/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU=
+google.golang.org/protobuf v1.36.10 h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE=
+google.golang.org/protobuf v1.36.10/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
 gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
 gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
 honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las=

+ 33 - 0
v2/krn/kstore_kv/kstore_kv.go

@@ -106,6 +106,39 @@ func (sf *kStoreKv) Get(key string) Result[[]byte] {
 	return NewOk(binVal)
 }
 
+// ByPrefix -- фильтрует ключи по префиксу
+func (sf *kStoreKv) ByPrefix(prefix string) Result[[]string] {
+	var (
+		binKey []byte
+		lstKey = []string{}
+	)
+	// fnValue := func(v []byte) error {
+	// 	fmt.Printf("key=%s, value=%s\n", key, v)
+	// 	return nil
+	// }
+	fnPrefix := func(txn *badger.Txn) error {
+		it := txn.NewIterator(badger.DefaultIteratorOptions)
+		defer it.Close()
+		binPref := []byte(prefix)
+		for it.Seek(binPref); it.ValidForPrefix(binPref); it.Next() {
+			item := it.Item()
+			binKey = item.Key()
+			// err := item.Value(fnValue)
+			// if err != nil {
+			// 	return err
+			// }
+			lstKey = append(lstKey, string(binKey))
+		}
+		return nil
+	}
+	err := sf.db.View(fnPrefix)
+	if err != nil {
+		err := fmt.Errorf("kStoreKv.ByPrefix(): in find, err=\n\t%w", err)
+		return NewErr[[]string](err)
+	}
+	return NewOk(lstKey)
+}
+
 // Delete -- удалить ключ из хранилища
 func (sf *kStoreKv) Delete(key string) Result[bool] {
 	sf.Lock()

+ 22 - 0
v2/krn/kstore_kv/kstore_kv_test.go

@@ -35,6 +35,7 @@ func TestKernelStore(t *testing.T) {
 	sf.new()
 	sf.set()
 	sf.get()
+	sf.byPrefix()
 	sf.del()
 	sf.close()
 	sf.workBad1()
@@ -71,6 +72,23 @@ func (sf *tester) del() {
 	}
 }
 
+// Поиск по префиксу
+func (sf *tester) byPrefix() {
+	sf.t.Log("byPrefix")
+	res0 := kernStore.Set("test_key2", []byte("test_key2"))
+	if res0.IsErr() {
+		sf.t.Fatalf("byPrefix(): err=%v", res0.Err())
+	}
+	res := kernStore.ByPrefix("test")
+	if res.IsErr() {
+		sf.t.Fatalf("byPrefix(): err=%v", res.Err())
+	}
+	lstKey := res.Val()
+	if len(lstKey) != 2 {
+		sf.t.Fatalf("byPrefix(): len(%v)!=2", len(lstKey))
+	}
+}
+
 // Получение значения по ключу
 func (sf *tester) get() {
 	sf.t.Log("get")
@@ -105,6 +123,10 @@ func (sf *tester) close() {
 	go sf.wg.Done("123")
 	sf.wg.Wait()
 	kernStore.close()
+	res_ := kernStore.ByPrefix("test")
+	if res_.IsOk() {
+		sf.t.Fatalf("close(): err==nil")
+	}
 }
 
 // Создаёт новое хранилище ядра

+ 2 - 0
v2/krn/ktypes/ikernel_store.go → v2/krn/ktypes/ikernel_store_kv.go

@@ -4,6 +4,8 @@ package ktypes
 type IKernelStoreKv interface {
 	// Get -- возвращает значение по ключу
 	Get(key string) Result[[]byte]
+	// ByPrefix -- возвращает список ключей по префиксу
+	ByPrefix(prefix string) Result[[]string]
 	// Set -- устанавливает значение по ключу
 	Set(key string, val []byte) Result[bool]
 	// Delete -- удаляет значение по ключу

+ 1 - 1
v2/vendor/github.com/rivo/uniseg/LICENSE.txt → v2/vendor/github.com/clipperhouse/uax29/v2/LICENSE

@@ -1,6 +1,6 @@
 MIT License
 
-Copyright (c) 2019 Oliver Kuederle
+Copyright (c) 2020 Matt Sherman
 
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal

+ 82 - 0
v2/vendor/github.com/clipperhouse/uax29/v2/graphemes/README.md

@@ -0,0 +1,82 @@
+An implementation of grapheme cluster boundaries from [Unicode text segmentation](https://unicode.org/reports/tr29/#Grapheme_Cluster_Boundaries) (UAX 29), for Unicode version 15.0.0.
+
+## Quick start
+
+```
+go get "github.com/clipperhouse/uax29/v2/graphemes"
+```
+
+```go
+import "github.com/clipperhouse/uax29/v2/graphemes"
+
+text := "Hello, 世界. Nice dog! 👍🐶"
+
+tokens := graphemes.FromString(text)
+
+for tokens.Next() {                     // Next() returns true until end of data
+	fmt.Println(tokens.Value())         // Do something with the current grapheme
+}
+```
+
+[![Documentation](https://pkg.go.dev/badge/github.com/clipperhouse/uax29/v2/graphemes.svg)](https://pkg.go.dev/github.com/clipperhouse/uax29/v2/graphemes)
+
+_A grapheme is a “single visible character”, which might be a simple as a single letter, or a complex emoji that consists of several Unicode code points._
+
+## Conformance
+
+We use the Unicode [test suite](https://unicode.org/reports/tr41/tr41-26.html#Tests29). Status:
+
+![Go](https://github.com/clipperhouse/uax29/actions/workflows/gotest.yml/badge.svg)
+
+## APIs
+
+### If you have a `string`
+
+```go
+text := "Hello, 世界. Nice dog! 👍🐶"
+
+tokens := graphemes.FromString(text)
+
+for tokens.Next() {                     // Next() returns true until end of data
+	fmt.Println(tokens.Value())         // Do something with the current grapheme
+}
+```
+
+### If you have an `io.Reader`
+
+`FromReader` embeds a [`bufio.Scanner`](https://pkg.go.dev/bufio#Scanner), so just use those methods.
+
+```go
+r := getYourReader()                        // from a file or network maybe
+tokens := graphemes.FromReader(r)
+
+for tokens.Scan() {                         // Scan() returns true until error or EOF
+	fmt.Println(tokens.Text())              // Do something with the current grapheme
+}
+
+if tokens.Err() != nil {                    // Check the error
+	log.Fatal(tokens.Err())
+}
+```
+
+### If you have a `[]byte`
+
+```go
+b := []byte("Hello, 世界. Nice dog! 👍🐶")
+
+tokens := graphemes.FromBytes(b)
+
+for tokens.Next() {                     // Next() returns true until end of data
+	fmt.Println(tokens.Value())         // Do something with the current grapheme
+}
+```
+
+### Performance
+
+On a Mac M2 laptop, we see around 200MB/s, or around 100 million graphemes per second. You should see ~constant memory, and no allocations.
+
+### Invalid inputs
+
+Invalid UTF-8 input is considered undefined behavior. We test to ensure that bad inputs will not cause pathological outcomes, such as a panic or infinite loop. Callers should expect “garbage-in, garbage-out”.
+
+Your pipeline should probably include a call to [`utf8.Valid()`](https://pkg.go.dev/unicode/utf8#Valid).

+ 28 - 0
v2/vendor/github.com/clipperhouse/uax29/v2/graphemes/iterator.go

@@ -0,0 +1,28 @@
+package graphemes
+
+import "github.com/clipperhouse/uax29/v2/internal/iterators"
+
+type Iterator[T iterators.Stringish] struct {
+	*iterators.Iterator[T]
+}
+
+var (
+	splitFuncString = splitFunc[string]
+	splitFuncBytes  = splitFunc[[]byte]
+)
+
+// FromString returns an iterator for the grapheme clusters in the input string.
+// Iterate while Next() is true, and access the grapheme via Value().
+func FromString(s string) Iterator[string] {
+	return Iterator[string]{
+		iterators.New(splitFuncString, s),
+	}
+}
+
+// FromBytes returns an iterator for the grapheme clusters in the input bytes.
+// Iterate while Next() is true, and access the grapheme via Value().
+func FromBytes(b []byte) Iterator[[]byte] {
+	return Iterator[[]byte]{
+		iterators.New(splitFuncBytes, b),
+	}
+}

+ 25 - 0
v2/vendor/github.com/clipperhouse/uax29/v2/graphemes/reader.go

@@ -0,0 +1,25 @@
+// Package graphemes implements Unicode grapheme cluster boundaries: https://unicode.org/reports/tr29/#Grapheme_Cluster_Boundaries
+package graphemes
+
+import (
+	"bufio"
+	"io"
+)
+
+type Scanner struct {
+	*bufio.Scanner
+}
+
+// FromReader returns a Scanner, to split graphemes per
+// https://unicode.org/reports/tr29/#Grapheme_Cluster_Boundaries.
+//
+// It embeds a [bufio.Scanner], so you can use its methods.
+//
+// Iterate through graphemes by calling Scan() until false, then check Err().
+func FromReader(r io.Reader) *Scanner {
+	sc := bufio.NewScanner(r)
+	sc.Split(SplitFunc)
+	return &Scanner{
+		Scanner: sc,
+	}
+}

+ 174 - 0
v2/vendor/github.com/clipperhouse/uax29/v2/graphemes/splitfunc.go

@@ -0,0 +1,174 @@
+package graphemes
+
+import (
+	"bufio"
+
+	"github.com/clipperhouse/uax29/v2/internal/iterators"
+)
+
+// is determines if lookup intersects propert(ies)
+func (lookup property) is(properties property) bool {
+	return (lookup & properties) != 0
+}
+
+const _Ignore = _Extend
+
+// SplitFunc is a bufio.SplitFunc implementation of Unicode grapheme cluster segmentation, for use with bufio.Scanner.
+//
+// See https://unicode.org/reports/tr29/#Grapheme_Cluster_Boundaries.
+var SplitFunc bufio.SplitFunc = splitFunc[[]byte]
+
+func splitFunc[T iterators.Stringish](data T, atEOF bool) (advance int, token T, err error) {
+	var empty T
+	if len(data) == 0 {
+		return 0, empty, nil
+	}
+
+	// These vars are stateful across loop iterations
+	var pos int
+	var lastExIgnore property = 0     // "last excluding ignored categories"
+	var lastLastExIgnore property = 0 // "last one before that"
+	var regionalIndicatorCount int
+
+	// Rules are usually of the form Cat1 × Cat2; "current" refers to the first property
+	// to the right of the ×, from which we look back or forward
+
+	current, w := lookup(data[pos:])
+	if w == 0 {
+		if !atEOF {
+			// Rune extends past current data, request more
+			return 0, empty, nil
+		}
+		pos = len(data)
+		return pos, data[:pos], nil
+	}
+
+	// https://unicode.org/reports/tr29/#GB1
+	// Start of text always advances
+	pos += w
+
+	for {
+		eot := pos == len(data) // "end of text"
+
+		if eot {
+			if !atEOF {
+				// Token extends past current data, request more
+				return 0, empty, nil
+			}
+
+			// https://unicode.org/reports/tr29/#GB2
+			break
+		}
+
+		/*
+			We've switched the evaluation order of GB1↓ and GB2↑. It's ok:
+			because we've checked for len(data) at the top of this function,
+			sot and eot are mutually exclusive, order doesn't matter.
+		*/
+
+		// Rules are usually of the form Cat1 × Cat2; "current" refers to the first property
+		// to the right of the ×, from which we look back or forward
+
+		// Remember previous properties to avoid lookups/lookbacks
+		last := current
+		if !last.is(_Ignore) {
+			lastLastExIgnore = lastExIgnore
+			lastExIgnore = last
+		}
+
+		current, w = lookup(data[pos:])
+		if w == 0 {
+			if atEOF {
+				// Just return the bytes, we can't do anything with them
+				pos = len(data)
+				break
+			}
+			// Rune extends past current data, request more
+			return 0, empty, nil
+		}
+
+		// Optimization: no rule can possibly apply
+		if current|last == 0 { // i.e. both are zero
+			break
+		}
+
+		// https://unicode.org/reports/tr29/#GB3
+		if current.is(_LF) && last.is(_CR) {
+			pos += w
+			continue
+		}
+
+		// https://unicode.org/reports/tr29/#GB4
+		// https://unicode.org/reports/tr29/#GB5
+		if (current | last).is(_Control | _CR | _LF) {
+			break
+		}
+
+		// https://unicode.org/reports/tr29/#GB6
+		if current.is(_L|_V|_LV|_LVT) && last.is(_L) {
+			pos += w
+			continue
+		}
+
+		// https://unicode.org/reports/tr29/#GB7
+		if current.is(_V|_T) && last.is(_LV|_V) {
+			pos += w
+			continue
+		}
+
+		// https://unicode.org/reports/tr29/#GB8
+		if current.is(_T) && last.is(_LVT|_T) {
+			pos += w
+			continue
+		}
+
+		// https://unicode.org/reports/tr29/#GB9
+		if current.is(_Extend | _ZWJ) {
+			pos += w
+			continue
+		}
+
+		// https://unicode.org/reports/tr29/#GB9a
+		if current.is(_SpacingMark) {
+			pos += w
+			continue
+		}
+
+		// https://unicode.org/reports/tr29/#GB9b
+		if last.is(_Prepend) {
+			pos += w
+			continue
+		}
+
+		// https://unicode.org/reports/tr29/#GB9c
+		// TODO(clipperhouse):
+		// It appears to be added in Unicode 15.1.0:
+		// https://unicode.org/versions/Unicode15.1.0/#Migration
+		// This package currently supports Unicode 15.0.0, so
+		// out of scope for now
+
+		// https://unicode.org/reports/tr29/#GB11
+		if current.is(_ExtendedPictographic) && last.is(_ZWJ) && lastLastExIgnore.is(_ExtendedPictographic) {
+			pos += w
+			continue
+		}
+
+		// https://unicode.org/reports/tr29/#GB12
+		// https://unicode.org/reports/tr29/#GB13
+		if (current & last).is(_RegionalIndicator) {
+			regionalIndicatorCount++
+
+			odd := regionalIndicatorCount%2 == 1
+			if odd {
+				pos += w
+				continue
+			}
+		}
+
+		// If we fall through all the above rules, it's a grapheme cluster break
+		break
+	}
+
+	// Return token
+	return pos, data[:pos], nil
+}

+ 1409 - 0
v2/vendor/github.com/clipperhouse/uax29/v2/graphemes/trie.go

@@ -0,0 +1,1409 @@
+package graphemes
+
+// generated by github.com/clipperhouse/uax29/v2
+// from https://www.unicode.org/Public/15.0.0/ucd/auxiliary/GraphemeBreakProperty.txt
+
+import "github.com/clipperhouse/uax29/v2/internal/iterators"
+
+type property uint16
+
+const (
+	_CR property = 1 << iota
+	_Control
+	_Extend
+	_ExtendedPictographic
+	_L
+	_LF
+	_LV
+	_LVT
+	_Prepend
+	_RegionalIndicator
+	_SpacingMark
+	_T
+	_V
+	_ZWJ
+)
+
+// lookup returns the trie value for the first UTF-8 encoding in s and
+// the width in bytes of this encoding. The size will be 0 if s does not
+// hold enough bytes to complete the encoding. len(s) must be greater than 0.
+func lookup[T iterators.Stringish](s T) (v property, sz int) {
+	c0 := s[0]
+	switch {
+	case c0 < 0x80: // is ASCII
+		return graphemesValues[c0], 1
+	case c0 < 0xC2:
+		return 0, 1 // Illegal UTF-8: not a starter, not ASCII.
+	case c0 < 0xE0: // 2-byte UTF-8
+		if len(s) < 2 {
+			return 0, 0
+		}
+		i := graphemesIndex[c0]
+		c1 := s[1]
+		if c1 < 0x80 || 0xC0 <= c1 {
+			return 0, 1 // Illegal UTF-8: not a continuation byte.
+		}
+		return lookupValue(uint32(i), c1), 2
+	case c0 < 0xF0: // 3-byte UTF-8
+		if len(s) < 3 {
+			return 0, 0
+		}
+		i := graphemesIndex[c0]
+		c1 := s[1]
+		if c1 < 0x80 || 0xC0 <= c1 {
+			return 0, 1 // Illegal UTF-8: not a continuation byte.
+		}
+		o := uint32(i)<<6 + uint32(c1)
+		i = graphemesIndex[o]
+		c2 := s[2]
+		if c2 < 0x80 || 0xC0 <= c2 {
+			return 0, 2 // Illegal UTF-8: not a continuation byte.
+		}
+		return lookupValue(uint32(i), c2), 3
+	case c0 < 0xF8: // 4-byte UTF-8
+		if len(s) < 4 {
+			return 0, 0
+		}
+		i := graphemesIndex[c0]
+		c1 := s[1]
+		if c1 < 0x80 || 0xC0 <= c1 {
+			return 0, 1 // Illegal UTF-8: not a continuation byte.
+		}
+		o := uint32(i)<<6 + uint32(c1)
+		i = graphemesIndex[o]
+		c2 := s[2]
+		if c2 < 0x80 || 0xC0 <= c2 {
+			return 0, 2 // Illegal UTF-8: not a continuation byte.
+		}
+		o = uint32(i)<<6 + uint32(c2)
+		i = graphemesIndex[o]
+		c3 := s[3]
+		if c3 < 0x80 || 0xC0 <= c3 {
+			return 0, 3 // Illegal UTF-8: not a continuation byte.
+		}
+		return lookupValue(uint32(i), c3), 4
+	}
+	// Illegal rune
+	return 0, 1
+}
+
+// graphemesTrie. Total size: 29120 bytes (28.44 KiB). Checksum: 80ad0c5ab9375f7.
+// type graphemesTrie struct { }
+
+// func newGraphemesTrie(i int) *graphemesTrie {
+// 	return &graphemesTrie{}
+// }
+
+// lookupValue determines the type of block n and looks up the value for b.
+func lookupValue(n uint32, b byte) property {
+	switch {
+	default:
+		return property(graphemesValues[n<<6+uint32(b)])
+	}
+}
+
+// graphemesValues: 215 blocks, 13760 entries, 27520 bytes
+// The third block is the zero block.
+var graphemesValues = [13760]property{
+	// Block 0x0, offset 0x0
+	0x00: 0x0002, 0x01: 0x0002, 0x02: 0x0002, 0x03: 0x0002, 0x04: 0x0002, 0x05: 0x0002,
+	0x06: 0x0002, 0x07: 0x0002, 0x08: 0x0002, 0x09: 0x0002, 0x0a: 0x0020, 0x0b: 0x0002,
+	0x0c: 0x0002, 0x0d: 0x0001, 0x0e: 0x0002, 0x0f: 0x0002, 0x10: 0x0002, 0x11: 0x0002,
+	0x12: 0x0002, 0x13: 0x0002, 0x14: 0x0002, 0x15: 0x0002, 0x16: 0x0002, 0x17: 0x0002,
+	0x18: 0x0002, 0x19: 0x0002, 0x1a: 0x0002, 0x1b: 0x0002, 0x1c: 0x0002, 0x1d: 0x0002,
+	0x1e: 0x0002, 0x1f: 0x0002,
+	// Block 0x1, offset 0x40
+	0x7f: 0x0002,
+	// Block 0x2, offset 0x80
+	// Block 0x3, offset 0xc0
+	0xc0: 0x0002, 0xc1: 0x0002, 0xc2: 0x0002, 0xc3: 0x0002, 0xc4: 0x0002, 0xc5: 0x0002,
+	0xc6: 0x0002, 0xc7: 0x0002, 0xc8: 0x0002, 0xc9: 0x0002, 0xca: 0x0002, 0xcb: 0x0002,
+	0xcc: 0x0002, 0xcd: 0x0002, 0xce: 0x0002, 0xcf: 0x0002, 0xd0: 0x0002, 0xd1: 0x0002,
+	0xd2: 0x0002, 0xd3: 0x0002, 0xd4: 0x0002, 0xd5: 0x0002, 0xd6: 0x0002, 0xd7: 0x0002,
+	0xd8: 0x0002, 0xd9: 0x0002, 0xda: 0x0002, 0xdb: 0x0002, 0xdc: 0x0002, 0xdd: 0x0002,
+	0xde: 0x0002, 0xdf: 0x0002,
+	0xe9: 0x0008,
+	0xed: 0x0002, 0xee: 0x0008,
+	// Block 0x4, offset 0x100
+	0x100: 0x0004, 0x101: 0x0004, 0x102: 0x0004, 0x103: 0x0004, 0x104: 0x0004, 0x105: 0x0004,
+	0x106: 0x0004, 0x107: 0x0004, 0x108: 0x0004, 0x109: 0x0004, 0x10a: 0x0004, 0x10b: 0x0004,
+	0x10c: 0x0004, 0x10d: 0x0004, 0x10e: 0x0004, 0x10f: 0x0004, 0x110: 0x0004, 0x111: 0x0004,
+	0x112: 0x0004, 0x113: 0x0004, 0x114: 0x0004, 0x115: 0x0004, 0x116: 0x0004, 0x117: 0x0004,
+	0x118: 0x0004, 0x119: 0x0004, 0x11a: 0x0004, 0x11b: 0x0004, 0x11c: 0x0004, 0x11d: 0x0004,
+	0x11e: 0x0004, 0x11f: 0x0004, 0x120: 0x0004, 0x121: 0x0004, 0x122: 0x0004, 0x123: 0x0004,
+	0x124: 0x0004, 0x125: 0x0004, 0x126: 0x0004, 0x127: 0x0004, 0x128: 0x0004, 0x129: 0x0004,
+	0x12a: 0x0004, 0x12b: 0x0004, 0x12c: 0x0004, 0x12d: 0x0004, 0x12e: 0x0004, 0x12f: 0x0004,
+	0x130: 0x0004, 0x131: 0x0004, 0x132: 0x0004, 0x133: 0x0004, 0x134: 0x0004, 0x135: 0x0004,
+	0x136: 0x0004, 0x137: 0x0004, 0x138: 0x0004, 0x139: 0x0004, 0x13a: 0x0004, 0x13b: 0x0004,
+	0x13c: 0x0004, 0x13d: 0x0004, 0x13e: 0x0004, 0x13f: 0x0004,
+	// Block 0x5, offset 0x140
+	0x140: 0x0004, 0x141: 0x0004, 0x142: 0x0004, 0x143: 0x0004, 0x144: 0x0004, 0x145: 0x0004,
+	0x146: 0x0004, 0x147: 0x0004, 0x148: 0x0004, 0x149: 0x0004, 0x14a: 0x0004, 0x14b: 0x0004,
+	0x14c: 0x0004, 0x14d: 0x0004, 0x14e: 0x0004, 0x14f: 0x0004, 0x150: 0x0004, 0x151: 0x0004,
+	0x152: 0x0004, 0x153: 0x0004, 0x154: 0x0004, 0x155: 0x0004, 0x156: 0x0004, 0x157: 0x0004,
+	0x158: 0x0004, 0x159: 0x0004, 0x15a: 0x0004, 0x15b: 0x0004, 0x15c: 0x0004, 0x15d: 0x0004,
+	0x15e: 0x0004, 0x15f: 0x0004, 0x160: 0x0004, 0x161: 0x0004, 0x162: 0x0004, 0x163: 0x0004,
+	0x164: 0x0004, 0x165: 0x0004, 0x166: 0x0004, 0x167: 0x0004, 0x168: 0x0004, 0x169: 0x0004,
+	0x16a: 0x0004, 0x16b: 0x0004, 0x16c: 0x0004, 0x16d: 0x0004, 0x16e: 0x0004, 0x16f: 0x0004,
+	// Block 0x6, offset 0x180
+	0x183: 0x0004, 0x184: 0x0004, 0x185: 0x0004,
+	0x186: 0x0004, 0x187: 0x0004, 0x188: 0x0004, 0x189: 0x0004,
+	// Block 0x7, offset 0x1c0
+	0x1d1: 0x0004,
+	0x1d2: 0x0004, 0x1d3: 0x0004, 0x1d4: 0x0004, 0x1d5: 0x0004, 0x1d6: 0x0004, 0x1d7: 0x0004,
+	0x1d8: 0x0004, 0x1d9: 0x0004, 0x1da: 0x0004, 0x1db: 0x0004, 0x1dc: 0x0004, 0x1dd: 0x0004,
+	0x1de: 0x0004, 0x1df: 0x0004, 0x1e0: 0x0004, 0x1e1: 0x0004, 0x1e2: 0x0004, 0x1e3: 0x0004,
+	0x1e4: 0x0004, 0x1e5: 0x0004, 0x1e6: 0x0004, 0x1e7: 0x0004, 0x1e8: 0x0004, 0x1e9: 0x0004,
+	0x1ea: 0x0004, 0x1eb: 0x0004, 0x1ec: 0x0004, 0x1ed: 0x0004, 0x1ee: 0x0004, 0x1ef: 0x0004,
+	0x1f0: 0x0004, 0x1f1: 0x0004, 0x1f2: 0x0004, 0x1f3: 0x0004, 0x1f4: 0x0004, 0x1f5: 0x0004,
+	0x1f6: 0x0004, 0x1f7: 0x0004, 0x1f8: 0x0004, 0x1f9: 0x0004, 0x1fa: 0x0004, 0x1fb: 0x0004,
+	0x1fc: 0x0004, 0x1fd: 0x0004, 0x1ff: 0x0004,
+	// Block 0x8, offset 0x200
+	0x201: 0x0004, 0x202: 0x0004, 0x204: 0x0004, 0x205: 0x0004,
+	0x207: 0x0004,
+	// Block 0x9, offset 0x240
+	0x240: 0x0100, 0x241: 0x0100, 0x242: 0x0100, 0x243: 0x0100, 0x244: 0x0100, 0x245: 0x0100,
+	0x250: 0x0004, 0x251: 0x0004,
+	0x252: 0x0004, 0x253: 0x0004, 0x254: 0x0004, 0x255: 0x0004, 0x256: 0x0004, 0x257: 0x0004,
+	0x258: 0x0004, 0x259: 0x0004, 0x25a: 0x0004, 0x25c: 0x0002,
+	// Block 0xa, offset 0x280
+	0x28b: 0x0004,
+	0x28c: 0x0004, 0x28d: 0x0004, 0x28e: 0x0004, 0x28f: 0x0004, 0x290: 0x0004, 0x291: 0x0004,
+	0x292: 0x0004, 0x293: 0x0004, 0x294: 0x0004, 0x295: 0x0004, 0x296: 0x0004, 0x297: 0x0004,
+	0x298: 0x0004, 0x299: 0x0004, 0x29a: 0x0004, 0x29b: 0x0004, 0x29c: 0x0004, 0x29d: 0x0004,
+	0x29e: 0x0004, 0x29f: 0x0004,
+	0x2b0: 0x0004,
+	// Block 0xb, offset 0x2c0
+	0x2d6: 0x0004, 0x2d7: 0x0004,
+	0x2d8: 0x0004, 0x2d9: 0x0004, 0x2da: 0x0004, 0x2db: 0x0004, 0x2dc: 0x0004, 0x2dd: 0x0100,
+	0x2df: 0x0004, 0x2e0: 0x0004, 0x2e1: 0x0004, 0x2e2: 0x0004, 0x2e3: 0x0004,
+	0x2e4: 0x0004, 0x2e7: 0x0004, 0x2e8: 0x0004,
+	0x2ea: 0x0004, 0x2eb: 0x0004, 0x2ec: 0x0004, 0x2ed: 0x0004,
+	// Block 0xc, offset 0x300
+	0x30f: 0x0100, 0x311: 0x0004,
+	0x330: 0x0004, 0x331: 0x0004, 0x332: 0x0004, 0x333: 0x0004, 0x334: 0x0004, 0x335: 0x0004,
+	0x336: 0x0004, 0x337: 0x0004, 0x338: 0x0004, 0x339: 0x0004, 0x33a: 0x0004, 0x33b: 0x0004,
+	0x33c: 0x0004, 0x33d: 0x0004, 0x33e: 0x0004, 0x33f: 0x0004,
+	// Block 0xd, offset 0x340
+	0x340: 0x0004, 0x341: 0x0004, 0x342: 0x0004, 0x343: 0x0004, 0x344: 0x0004, 0x345: 0x0004,
+	0x346: 0x0004, 0x347: 0x0004, 0x348: 0x0004, 0x349: 0x0004, 0x34a: 0x0004,
+	// Block 0xe, offset 0x380
+	0x3a6: 0x0004, 0x3a7: 0x0004, 0x3a8: 0x0004, 0x3a9: 0x0004,
+	0x3aa: 0x0004, 0x3ab: 0x0004, 0x3ac: 0x0004, 0x3ad: 0x0004, 0x3ae: 0x0004, 0x3af: 0x0004,
+	0x3b0: 0x0004,
+	// Block 0xf, offset 0x3c0
+	0x3eb: 0x0004, 0x3ec: 0x0004, 0x3ed: 0x0004, 0x3ee: 0x0004, 0x3ef: 0x0004,
+	0x3f0: 0x0004, 0x3f1: 0x0004, 0x3f2: 0x0004, 0x3f3: 0x0004,
+	0x3fd: 0x0004,
+	// Block 0x10, offset 0x400
+	0x416: 0x0004, 0x417: 0x0004,
+	0x418: 0x0004, 0x419: 0x0004, 0x41b: 0x0004, 0x41c: 0x0004, 0x41d: 0x0004,
+	0x41e: 0x0004, 0x41f: 0x0004, 0x420: 0x0004, 0x421: 0x0004, 0x422: 0x0004, 0x423: 0x0004,
+	0x425: 0x0004, 0x426: 0x0004, 0x427: 0x0004, 0x429: 0x0004,
+	0x42a: 0x0004, 0x42b: 0x0004, 0x42c: 0x0004, 0x42d: 0x0004,
+	// Block 0x11, offset 0x440
+	0x459: 0x0004, 0x45a: 0x0004, 0x45b: 0x0004,
+	// Block 0x12, offset 0x480
+	0x490: 0x0100, 0x491: 0x0100,
+	0x498: 0x0004, 0x499: 0x0004, 0x49a: 0x0004, 0x49b: 0x0004, 0x49c: 0x0004, 0x49d: 0x0004,
+	0x49e: 0x0004, 0x49f: 0x0004,
+	// Block 0x13, offset 0x4c0
+	0x4ca: 0x0004, 0x4cb: 0x0004,
+	0x4cc: 0x0004, 0x4cd: 0x0004, 0x4ce: 0x0004, 0x4cf: 0x0004, 0x4d0: 0x0004, 0x4d1: 0x0004,
+	0x4d2: 0x0004, 0x4d3: 0x0004, 0x4d4: 0x0004, 0x4d5: 0x0004, 0x4d6: 0x0004, 0x4d7: 0x0004,
+	0x4d8: 0x0004, 0x4d9: 0x0004, 0x4da: 0x0004, 0x4db: 0x0004, 0x4dc: 0x0004, 0x4dd: 0x0004,
+	0x4de: 0x0004, 0x4df: 0x0004, 0x4e0: 0x0004, 0x4e1: 0x0004, 0x4e2: 0x0100, 0x4e3: 0x0004,
+	0x4e4: 0x0004, 0x4e5: 0x0004, 0x4e6: 0x0004, 0x4e7: 0x0004, 0x4e8: 0x0004, 0x4e9: 0x0004,
+	0x4ea: 0x0004, 0x4eb: 0x0004, 0x4ec: 0x0004, 0x4ed: 0x0004, 0x4ee: 0x0004, 0x4ef: 0x0004,
+	0x4f0: 0x0004, 0x4f1: 0x0004, 0x4f2: 0x0004, 0x4f3: 0x0004, 0x4f4: 0x0004, 0x4f5: 0x0004,
+	0x4f6: 0x0004, 0x4f7: 0x0004, 0x4f8: 0x0004, 0x4f9: 0x0004, 0x4fa: 0x0004, 0x4fb: 0x0004,
+	0x4fc: 0x0004, 0x4fd: 0x0004, 0x4fe: 0x0004, 0x4ff: 0x0004,
+	// Block 0x14, offset 0x500
+	0x500: 0x0004, 0x501: 0x0004, 0x502: 0x0004, 0x503: 0x0400,
+	0x53a: 0x0004, 0x53b: 0x0400,
+	0x53c: 0x0004, 0x53e: 0x0400, 0x53f: 0x0400,
+	// Block 0x15, offset 0x540
+	0x540: 0x0400, 0x541: 0x0004, 0x542: 0x0004, 0x543: 0x0004, 0x544: 0x0004, 0x545: 0x0004,
+	0x546: 0x0004, 0x547: 0x0004, 0x548: 0x0004, 0x549: 0x0400, 0x54a: 0x0400, 0x54b: 0x0400,
+	0x54c: 0x0400, 0x54d: 0x0004, 0x54e: 0x0400, 0x54f: 0x0400, 0x551: 0x0004,
+	0x552: 0x0004, 0x553: 0x0004, 0x554: 0x0004, 0x555: 0x0004, 0x556: 0x0004, 0x557: 0x0004,
+	0x562: 0x0004, 0x563: 0x0004,
+	// Block 0x16, offset 0x580
+	0x581: 0x0004, 0x582: 0x0400, 0x583: 0x0400,
+	0x5bc: 0x0004, 0x5be: 0x0004, 0x5bf: 0x0400,
+	// Block 0x17, offset 0x5c0
+	0x5c0: 0x0400, 0x5c1: 0x0004, 0x5c2: 0x0004, 0x5c3: 0x0004, 0x5c4: 0x0004,
+	0x5c7: 0x0400, 0x5c8: 0x0400, 0x5cb: 0x0400,
+	0x5cc: 0x0400, 0x5cd: 0x0004,
+	0x5d7: 0x0004,
+	0x5e2: 0x0004, 0x5e3: 0x0004,
+	0x5fe: 0x0004,
+	// Block 0x18, offset 0x600
+	0x601: 0x0004, 0x602: 0x0004, 0x603: 0x0400,
+	0x63c: 0x0004, 0x63e: 0x0400, 0x63f: 0x0400,
+	// Block 0x19, offset 0x640
+	0x640: 0x0400, 0x641: 0x0004, 0x642: 0x0004,
+	0x647: 0x0004, 0x648: 0x0004, 0x64b: 0x0004,
+	0x64c: 0x0004, 0x64d: 0x0004, 0x651: 0x0004,
+	0x670: 0x0004, 0x671: 0x0004, 0x675: 0x0004,
+	// Block 0x1a, offset 0x680
+	0x680: 0x0400, 0x681: 0x0004, 0x682: 0x0004, 0x683: 0x0004, 0x684: 0x0004, 0x685: 0x0004,
+	0x687: 0x0004, 0x688: 0x0004, 0x689: 0x0400, 0x68b: 0x0400,
+	0x68c: 0x0400, 0x68d: 0x0004,
+	0x6a2: 0x0004, 0x6a3: 0x0004,
+	0x6ba: 0x0004, 0x6bb: 0x0004,
+	0x6bc: 0x0004, 0x6bd: 0x0004, 0x6be: 0x0004, 0x6bf: 0x0004,
+	// Block 0x1b, offset 0x6c0
+	0x6c1: 0x0004, 0x6c2: 0x0400, 0x6c3: 0x0400,
+	0x6fc: 0x0004, 0x6fe: 0x0004, 0x6ff: 0x0004,
+	// Block 0x1c, offset 0x700
+	0x700: 0x0400, 0x701: 0x0004, 0x702: 0x0004, 0x703: 0x0004, 0x704: 0x0004,
+	0x707: 0x0400, 0x708: 0x0400, 0x70b: 0x0400,
+	0x70c: 0x0400, 0x70d: 0x0004,
+	0x715: 0x0004, 0x716: 0x0004, 0x717: 0x0004,
+	0x722: 0x0004, 0x723: 0x0004,
+	// Block 0x1d, offset 0x740
+	0x742: 0x0004,
+	0x77e: 0x0004, 0x77f: 0x0400,
+	// Block 0x1e, offset 0x780
+	0x780: 0x0004, 0x781: 0x0400, 0x782: 0x0400,
+	0x786: 0x0400, 0x787: 0x0400, 0x788: 0x0400, 0x78a: 0x0400, 0x78b: 0x0400,
+	0x78c: 0x0400, 0x78d: 0x0004,
+	0x797: 0x0004,
+	// Block 0x1f, offset 0x7c0
+	0x7c0: 0x0004, 0x7c1: 0x0400, 0x7c2: 0x0400, 0x7c3: 0x0400, 0x7c4: 0x0004,
+	0x7fc: 0x0004, 0x7fe: 0x0004, 0x7ff: 0x0004,
+	// Block 0x20, offset 0x800
+	0x800: 0x0004, 0x801: 0x0400, 0x802: 0x0400, 0x803: 0x0400, 0x804: 0x0400,
+	0x806: 0x0004, 0x807: 0x0004, 0x808: 0x0004, 0x80a: 0x0004, 0x80b: 0x0004,
+	0x80c: 0x0004, 0x80d: 0x0004,
+	0x815: 0x0004, 0x816: 0x0004,
+	0x822: 0x0004, 0x823: 0x0004,
+	// Block 0x21, offset 0x840
+	0x841: 0x0004, 0x842: 0x0400, 0x843: 0x0400,
+	0x87c: 0x0004, 0x87e: 0x0400, 0x87f: 0x0004,
+	// Block 0x22, offset 0x880
+	0x880: 0x0400, 0x881: 0x0400, 0x882: 0x0004, 0x883: 0x0400, 0x884: 0x0400,
+	0x886: 0x0004, 0x887: 0x0400, 0x888: 0x0400, 0x88a: 0x0400, 0x88b: 0x0400,
+	0x88c: 0x0004, 0x88d: 0x0004,
+	0x895: 0x0004, 0x896: 0x0004,
+	0x8a2: 0x0004, 0x8a3: 0x0004,
+	0x8b3: 0x0400,
+	// Block 0x23, offset 0x8c0
+	0x8c0: 0x0004, 0x8c1: 0x0004, 0x8c2: 0x0400, 0x8c3: 0x0400,
+	0x8fb: 0x0004,
+	0x8fc: 0x0004, 0x8fe: 0x0004, 0x8ff: 0x0400,
+	// Block 0x24, offset 0x900
+	0x900: 0x0400, 0x901: 0x0004, 0x902: 0x0004, 0x903: 0x0004, 0x904: 0x0004,
+	0x906: 0x0400, 0x907: 0x0400, 0x908: 0x0400, 0x90a: 0x0400, 0x90b: 0x0400,
+	0x90c: 0x0400, 0x90d: 0x0004, 0x90e: 0x0100,
+	0x917: 0x0004,
+	0x922: 0x0004, 0x923: 0x0004,
+	// Block 0x25, offset 0x940
+	0x941: 0x0004, 0x942: 0x0400, 0x943: 0x0400,
+	// Block 0x26, offset 0x980
+	0x98a: 0x0004,
+	0x98f: 0x0004, 0x990: 0x0400, 0x991: 0x0400,
+	0x992: 0x0004, 0x993: 0x0004, 0x994: 0x0004, 0x996: 0x0004,
+	0x998: 0x0400, 0x999: 0x0400, 0x99a: 0x0400, 0x99b: 0x0400, 0x99c: 0x0400, 0x99d: 0x0400,
+	0x99e: 0x0400, 0x99f: 0x0004,
+	0x9b2: 0x0400, 0x9b3: 0x0400,
+	// Block 0x27, offset 0x9c0
+	0x9f1: 0x0004, 0x9f3: 0x0400, 0x9f4: 0x0004, 0x9f5: 0x0004,
+	0x9f6: 0x0004, 0x9f7: 0x0004, 0x9f8: 0x0004, 0x9f9: 0x0004, 0x9fa: 0x0004,
+	// Block 0x28, offset 0xa00
+	0xa07: 0x0004, 0xa08: 0x0004, 0xa09: 0x0004, 0xa0a: 0x0004, 0xa0b: 0x0004,
+	0xa0c: 0x0004, 0xa0d: 0x0004, 0xa0e: 0x0004,
+	// Block 0x29, offset 0xa40
+	0xa71: 0x0004, 0xa73: 0x0400, 0xa74: 0x0004, 0xa75: 0x0004,
+	0xa76: 0x0004, 0xa77: 0x0004, 0xa78: 0x0004, 0xa79: 0x0004, 0xa7a: 0x0004, 0xa7b: 0x0004,
+	0xa7c: 0x0004,
+	// Block 0x2a, offset 0xa80
+	0xa88: 0x0004, 0xa89: 0x0004, 0xa8a: 0x0004, 0xa8b: 0x0004,
+	0xa8c: 0x0004, 0xa8d: 0x0004, 0xa8e: 0x0004,
+	// Block 0x2b, offset 0xac0
+	0xad8: 0x0004, 0xad9: 0x0004,
+	0xaf5: 0x0004,
+	0xaf7: 0x0004, 0xaf9: 0x0004,
+	0xafe: 0x0400, 0xaff: 0x0400,
+	// Block 0x2c, offset 0xb00
+	0xb31: 0x0004, 0xb32: 0x0004, 0xb33: 0x0004, 0xb34: 0x0004, 0xb35: 0x0004,
+	0xb36: 0x0004, 0xb37: 0x0004, 0xb38: 0x0004, 0xb39: 0x0004, 0xb3a: 0x0004, 0xb3b: 0x0004,
+	0xb3c: 0x0004, 0xb3d: 0x0004, 0xb3e: 0x0004, 0xb3f: 0x0400,
+	// Block 0x2d, offset 0xb40
+	0xb40: 0x0004, 0xb41: 0x0004, 0xb42: 0x0004, 0xb43: 0x0004, 0xb44: 0x0004,
+	0xb46: 0x0004, 0xb47: 0x0004,
+	0xb4d: 0x0004, 0xb4e: 0x0004, 0xb4f: 0x0004, 0xb50: 0x0004, 0xb51: 0x0004,
+	0xb52: 0x0004, 0xb53: 0x0004, 0xb54: 0x0004, 0xb55: 0x0004, 0xb56: 0x0004, 0xb57: 0x0004,
+	0xb59: 0x0004, 0xb5a: 0x0004, 0xb5b: 0x0004, 0xb5c: 0x0004, 0xb5d: 0x0004,
+	0xb5e: 0x0004, 0xb5f: 0x0004, 0xb60: 0x0004, 0xb61: 0x0004, 0xb62: 0x0004, 0xb63: 0x0004,
+	0xb64: 0x0004, 0xb65: 0x0004, 0xb66: 0x0004, 0xb67: 0x0004, 0xb68: 0x0004, 0xb69: 0x0004,
+	0xb6a: 0x0004, 0xb6b: 0x0004, 0xb6c: 0x0004, 0xb6d: 0x0004, 0xb6e: 0x0004, 0xb6f: 0x0004,
+	0xb70: 0x0004, 0xb71: 0x0004, 0xb72: 0x0004, 0xb73: 0x0004, 0xb74: 0x0004, 0xb75: 0x0004,
+	0xb76: 0x0004, 0xb77: 0x0004, 0xb78: 0x0004, 0xb79: 0x0004, 0xb7a: 0x0004, 0xb7b: 0x0004,
+	0xb7c: 0x0004,
+	// Block 0x2e, offset 0xb80
+	0xb86: 0x0004,
+	// Block 0x2f, offset 0xbc0
+	0xbed: 0x0004, 0xbee: 0x0004, 0xbef: 0x0004,
+	0xbf0: 0x0004, 0xbf1: 0x0400, 0xbf2: 0x0004, 0xbf3: 0x0004, 0xbf4: 0x0004, 0xbf5: 0x0004,
+	0xbf6: 0x0004, 0xbf7: 0x0004, 0xbf9: 0x0004, 0xbfa: 0x0004, 0xbfb: 0x0400,
+	0xbfc: 0x0400, 0xbfd: 0x0004, 0xbfe: 0x0004,
+	// Block 0x30, offset 0xc00
+	0xc16: 0x0400, 0xc17: 0x0400,
+	0xc18: 0x0004, 0xc19: 0x0004,
+	0xc1e: 0x0004, 0xc1f: 0x0004, 0xc20: 0x0004,
+	0xc31: 0x0004, 0xc32: 0x0004, 0xc33: 0x0004, 0xc34: 0x0004,
+	// Block 0x31, offset 0xc40
+	0xc42: 0x0004, 0xc44: 0x0400, 0xc45: 0x0004,
+	0xc46: 0x0004,
+	0xc4d: 0x0004,
+	0xc5d: 0x0004,
+	// Block 0x32, offset 0xc80
+	0xc80: 0x0010, 0xc81: 0x0010, 0xc82: 0x0010, 0xc83: 0x0010, 0xc84: 0x0010, 0xc85: 0x0010,
+	0xc86: 0x0010, 0xc87: 0x0010, 0xc88: 0x0010, 0xc89: 0x0010, 0xc8a: 0x0010, 0xc8b: 0x0010,
+	0xc8c: 0x0010, 0xc8d: 0x0010, 0xc8e: 0x0010, 0xc8f: 0x0010, 0xc90: 0x0010, 0xc91: 0x0010,
+	0xc92: 0x0010, 0xc93: 0x0010, 0xc94: 0x0010, 0xc95: 0x0010, 0xc96: 0x0010, 0xc97: 0x0010,
+	0xc98: 0x0010, 0xc99: 0x0010, 0xc9a: 0x0010, 0xc9b: 0x0010, 0xc9c: 0x0010, 0xc9d: 0x0010,
+	0xc9e: 0x0010, 0xc9f: 0x0010, 0xca0: 0x0010, 0xca1: 0x0010, 0xca2: 0x0010, 0xca3: 0x0010,
+	0xca4: 0x0010, 0xca5: 0x0010, 0xca6: 0x0010, 0xca7: 0x0010, 0xca8: 0x0010, 0xca9: 0x0010,
+	0xcaa: 0x0010, 0xcab: 0x0010, 0xcac: 0x0010, 0xcad: 0x0010, 0xcae: 0x0010, 0xcaf: 0x0010,
+	0xcb0: 0x0010, 0xcb1: 0x0010, 0xcb2: 0x0010, 0xcb3: 0x0010, 0xcb4: 0x0010, 0xcb5: 0x0010,
+	0xcb6: 0x0010, 0xcb7: 0x0010, 0xcb8: 0x0010, 0xcb9: 0x0010, 0xcba: 0x0010, 0xcbb: 0x0010,
+	0xcbc: 0x0010, 0xcbd: 0x0010, 0xcbe: 0x0010, 0xcbf: 0x0010,
+	// Block 0x33, offset 0xcc0
+	0xcc0: 0x0010, 0xcc1: 0x0010, 0xcc2: 0x0010, 0xcc3: 0x0010, 0xcc4: 0x0010, 0xcc5: 0x0010,
+	0xcc6: 0x0010, 0xcc7: 0x0010, 0xcc8: 0x0010, 0xcc9: 0x0010, 0xcca: 0x0010, 0xccb: 0x0010,
+	0xccc: 0x0010, 0xccd: 0x0010, 0xcce: 0x0010, 0xccf: 0x0010, 0xcd0: 0x0010, 0xcd1: 0x0010,
+	0xcd2: 0x0010, 0xcd3: 0x0010, 0xcd4: 0x0010, 0xcd5: 0x0010, 0xcd6: 0x0010, 0xcd7: 0x0010,
+	0xcd8: 0x0010, 0xcd9: 0x0010, 0xcda: 0x0010, 0xcdb: 0x0010, 0xcdc: 0x0010, 0xcdd: 0x0010,
+	0xcde: 0x0010, 0xcdf: 0x0010, 0xce0: 0x1000, 0xce1: 0x1000, 0xce2: 0x1000, 0xce3: 0x1000,
+	0xce4: 0x1000, 0xce5: 0x1000, 0xce6: 0x1000, 0xce7: 0x1000, 0xce8: 0x1000, 0xce9: 0x1000,
+	0xcea: 0x1000, 0xceb: 0x1000, 0xcec: 0x1000, 0xced: 0x1000, 0xcee: 0x1000, 0xcef: 0x1000,
+	0xcf0: 0x1000, 0xcf1: 0x1000, 0xcf2: 0x1000, 0xcf3: 0x1000, 0xcf4: 0x1000, 0xcf5: 0x1000,
+	0xcf6: 0x1000, 0xcf7: 0x1000, 0xcf8: 0x1000, 0xcf9: 0x1000, 0xcfa: 0x1000, 0xcfb: 0x1000,
+	0xcfc: 0x1000, 0xcfd: 0x1000, 0xcfe: 0x1000, 0xcff: 0x1000,
+	// Block 0x34, offset 0xd00
+	0xd00: 0x1000, 0xd01: 0x1000, 0xd02: 0x1000, 0xd03: 0x1000, 0xd04: 0x1000, 0xd05: 0x1000,
+	0xd06: 0x1000, 0xd07: 0x1000, 0xd08: 0x1000, 0xd09: 0x1000, 0xd0a: 0x1000, 0xd0b: 0x1000,
+	0xd0c: 0x1000, 0xd0d: 0x1000, 0xd0e: 0x1000, 0xd0f: 0x1000, 0xd10: 0x1000, 0xd11: 0x1000,
+	0xd12: 0x1000, 0xd13: 0x1000, 0xd14: 0x1000, 0xd15: 0x1000, 0xd16: 0x1000, 0xd17: 0x1000,
+	0xd18: 0x1000, 0xd19: 0x1000, 0xd1a: 0x1000, 0xd1b: 0x1000, 0xd1c: 0x1000, 0xd1d: 0x1000,
+	0xd1e: 0x1000, 0xd1f: 0x1000, 0xd20: 0x1000, 0xd21: 0x1000, 0xd22: 0x1000, 0xd23: 0x1000,
+	0xd24: 0x1000, 0xd25: 0x1000, 0xd26: 0x1000, 0xd27: 0x1000, 0xd28: 0x0800, 0xd29: 0x0800,
+	0xd2a: 0x0800, 0xd2b: 0x0800, 0xd2c: 0x0800, 0xd2d: 0x0800, 0xd2e: 0x0800, 0xd2f: 0x0800,
+	0xd30: 0x0800, 0xd31: 0x0800, 0xd32: 0x0800, 0xd33: 0x0800, 0xd34: 0x0800, 0xd35: 0x0800,
+	0xd36: 0x0800, 0xd37: 0x0800, 0xd38: 0x0800, 0xd39: 0x0800, 0xd3a: 0x0800, 0xd3b: 0x0800,
+	0xd3c: 0x0800, 0xd3d: 0x0800, 0xd3e: 0x0800, 0xd3f: 0x0800,
+	// Block 0x35, offset 0xd40
+	0xd40: 0x0800, 0xd41: 0x0800, 0xd42: 0x0800, 0xd43: 0x0800, 0xd44: 0x0800, 0xd45: 0x0800,
+	0xd46: 0x0800, 0xd47: 0x0800, 0xd48: 0x0800, 0xd49: 0x0800, 0xd4a: 0x0800, 0xd4b: 0x0800,
+	0xd4c: 0x0800, 0xd4d: 0x0800, 0xd4e: 0x0800, 0xd4f: 0x0800, 0xd50: 0x0800, 0xd51: 0x0800,
+	0xd52: 0x0800, 0xd53: 0x0800, 0xd54: 0x0800, 0xd55: 0x0800, 0xd56: 0x0800, 0xd57: 0x0800,
+	0xd58: 0x0800, 0xd59: 0x0800, 0xd5a: 0x0800, 0xd5b: 0x0800, 0xd5c: 0x0800, 0xd5d: 0x0800,
+	0xd5e: 0x0800, 0xd5f: 0x0800, 0xd60: 0x0800, 0xd61: 0x0800, 0xd62: 0x0800, 0xd63: 0x0800,
+	0xd64: 0x0800, 0xd65: 0x0800, 0xd66: 0x0800, 0xd67: 0x0800, 0xd68: 0x0800, 0xd69: 0x0800,
+	0xd6a: 0x0800, 0xd6b: 0x0800, 0xd6c: 0x0800, 0xd6d: 0x0800, 0xd6e: 0x0800, 0xd6f: 0x0800,
+	0xd70: 0x0800, 0xd71: 0x0800, 0xd72: 0x0800, 0xd73: 0x0800, 0xd74: 0x0800, 0xd75: 0x0800,
+	0xd76: 0x0800, 0xd77: 0x0800, 0xd78: 0x0800, 0xd79: 0x0800, 0xd7a: 0x0800, 0xd7b: 0x0800,
+	0xd7c: 0x0800, 0xd7d: 0x0800, 0xd7e: 0x0800, 0xd7f: 0x0800,
+	// Block 0x36, offset 0xd80
+	0xd9d: 0x0004,
+	0xd9e: 0x0004, 0xd9f: 0x0004,
+	// Block 0x37, offset 0xdc0
+	0xdd2: 0x0004, 0xdd3: 0x0004, 0xdd4: 0x0004, 0xdd5: 0x0400,
+	0xdf2: 0x0004, 0xdf3: 0x0004, 0xdf4: 0x0400,
+	// Block 0x38, offset 0xe00
+	0xe12: 0x0004, 0xe13: 0x0004,
+	0xe32: 0x0004, 0xe33: 0x0004,
+	// Block 0x39, offset 0xe40
+	0xe74: 0x0004, 0xe75: 0x0004,
+	0xe76: 0x0400, 0xe77: 0x0004, 0xe78: 0x0004, 0xe79: 0x0004, 0xe7a: 0x0004, 0xe7b: 0x0004,
+	0xe7c: 0x0004, 0xe7d: 0x0004, 0xe7e: 0x0400, 0xe7f: 0x0400,
+	// Block 0x3a, offset 0xe80
+	0xe80: 0x0400, 0xe81: 0x0400, 0xe82: 0x0400, 0xe83: 0x0400, 0xe84: 0x0400, 0xe85: 0x0400,
+	0xe86: 0x0004, 0xe87: 0x0400, 0xe88: 0x0400, 0xe89: 0x0004, 0xe8a: 0x0004, 0xe8b: 0x0004,
+	0xe8c: 0x0004, 0xe8d: 0x0004, 0xe8e: 0x0004, 0xe8f: 0x0004, 0xe90: 0x0004, 0xe91: 0x0004,
+	0xe92: 0x0004, 0xe93: 0x0004,
+	0xe9d: 0x0004,
+	// Block 0x3b, offset 0xec0
+	0xecb: 0x0004,
+	0xecc: 0x0004, 0xecd: 0x0004, 0xece: 0x0002, 0xecf: 0x0004,
+	// Block 0x3c, offset 0xf00
+	0xf05: 0x0004,
+	0xf06: 0x0004,
+	0xf29: 0x0004,
+	// Block 0x3d, offset 0xf40
+	0xf60: 0x0004, 0xf61: 0x0004, 0xf62: 0x0004, 0xf63: 0x0400,
+	0xf64: 0x0400, 0xf65: 0x0400, 0xf66: 0x0400, 0xf67: 0x0004, 0xf68: 0x0004, 0xf69: 0x0400,
+	0xf6a: 0x0400, 0xf6b: 0x0400,
+	0xf70: 0x0400, 0xf71: 0x0400, 0xf72: 0x0004, 0xf73: 0x0400, 0xf74: 0x0400, 0xf75: 0x0400,
+	0xf76: 0x0400, 0xf77: 0x0400, 0xf78: 0x0400, 0xf79: 0x0004, 0xf7a: 0x0004, 0xf7b: 0x0004,
+	// Block 0x3e, offset 0xf80
+	0xf97: 0x0004,
+	0xf98: 0x0004, 0xf99: 0x0400, 0xf9a: 0x0400, 0xf9b: 0x0004,
+	// Block 0x3f, offset 0xfc0
+	0xfd5: 0x0400, 0xfd6: 0x0004, 0xfd7: 0x0400,
+	0xfd8: 0x0004, 0xfd9: 0x0004, 0xfda: 0x0004, 0xfdb: 0x0004, 0xfdc: 0x0004, 0xfdd: 0x0004,
+	0xfde: 0x0004, 0xfe0: 0x0004, 0xfe2: 0x0004,
+	0xfe5: 0x0004, 0xfe6: 0x0004, 0xfe7: 0x0004, 0xfe8: 0x0004, 0xfe9: 0x0004,
+	0xfea: 0x0004, 0xfeb: 0x0004, 0xfec: 0x0004, 0xfed: 0x0400, 0xfee: 0x0400, 0xfef: 0x0400,
+	0xff0: 0x0400, 0xff1: 0x0400, 0xff2: 0x0400, 0xff3: 0x0004, 0xff4: 0x0004, 0xff5: 0x0004,
+	0xff6: 0x0004, 0xff7: 0x0004, 0xff8: 0x0004, 0xff9: 0x0004, 0xffa: 0x0004, 0xffb: 0x0004,
+	0xffc: 0x0004, 0xfff: 0x0004,
+	// Block 0x40, offset 0x1000
+	0x1030: 0x0004, 0x1031: 0x0004, 0x1032: 0x0004, 0x1033: 0x0004, 0x1034: 0x0004, 0x1035: 0x0004,
+	0x1036: 0x0004, 0x1037: 0x0004, 0x1038: 0x0004, 0x1039: 0x0004, 0x103a: 0x0004, 0x103b: 0x0004,
+	0x103c: 0x0004, 0x103d: 0x0004, 0x103e: 0x0004, 0x103f: 0x0004,
+	// Block 0x41, offset 0x1040
+	0x1040: 0x0004, 0x1041: 0x0004, 0x1042: 0x0004, 0x1043: 0x0004, 0x1044: 0x0004, 0x1045: 0x0004,
+	0x1046: 0x0004, 0x1047: 0x0004, 0x1048: 0x0004, 0x1049: 0x0004, 0x104a: 0x0004, 0x104b: 0x0004,
+	0x104c: 0x0004, 0x104d: 0x0004, 0x104e: 0x0004,
+	// Block 0x42, offset 0x1080
+	0x1080: 0x0004, 0x1081: 0x0004, 0x1082: 0x0004, 0x1083: 0x0004, 0x1084: 0x0400,
+	0x10b4: 0x0004, 0x10b5: 0x0004,
+	0x10b6: 0x0004, 0x10b7: 0x0004, 0x10b8: 0x0004, 0x10b9: 0x0004, 0x10ba: 0x0004, 0x10bb: 0x0400,
+	0x10bc: 0x0004, 0x10bd: 0x0400, 0x10be: 0x0400, 0x10bf: 0x0400,
+	// Block 0x43, offset 0x10c0
+	0x10c0: 0x0400, 0x10c1: 0x0400, 0x10c2: 0x0004, 0x10c3: 0x0400, 0x10c4: 0x0400,
+	0x10eb: 0x0004, 0x10ec: 0x0004, 0x10ed: 0x0004, 0x10ee: 0x0004, 0x10ef: 0x0004,
+	0x10f0: 0x0004, 0x10f1: 0x0004, 0x10f2: 0x0004, 0x10f3: 0x0004,
+	// Block 0x44, offset 0x1100
+	0x1100: 0x0004, 0x1101: 0x0004, 0x1102: 0x0400,
+	0x1121: 0x0400, 0x1122: 0x0004, 0x1123: 0x0004,
+	0x1124: 0x0004, 0x1125: 0x0004, 0x1126: 0x0400, 0x1127: 0x0400, 0x1128: 0x0004, 0x1129: 0x0004,
+	0x112a: 0x0400, 0x112b: 0x0004, 0x112c: 0x0004, 0x112d: 0x0004,
+	// Block 0x45, offset 0x1140
+	0x1166: 0x0004, 0x1167: 0x0400, 0x1168: 0x0004, 0x1169: 0x0004,
+	0x116a: 0x0400, 0x116b: 0x0400, 0x116c: 0x0400, 0x116d: 0x0004, 0x116e: 0x0400, 0x116f: 0x0004,
+	0x1170: 0x0004, 0x1171: 0x0004, 0x1172: 0x0400, 0x1173: 0x0400,
+	// Block 0x46, offset 0x1180
+	0x11a4: 0x0400, 0x11a5: 0x0400, 0x11a6: 0x0400, 0x11a7: 0x0400, 0x11a8: 0x0400, 0x11a9: 0x0400,
+	0x11aa: 0x0400, 0x11ab: 0x0400, 0x11ac: 0x0004, 0x11ad: 0x0004, 0x11ae: 0x0004, 0x11af: 0x0004,
+	0x11b0: 0x0004, 0x11b1: 0x0004, 0x11b2: 0x0004, 0x11b3: 0x0004, 0x11b4: 0x0400, 0x11b5: 0x0400,
+	0x11b6: 0x0004, 0x11b7: 0x0004,
+	// Block 0x47, offset 0x11c0
+	0x11d0: 0x0004, 0x11d1: 0x0004,
+	0x11d2: 0x0004, 0x11d4: 0x0004, 0x11d5: 0x0004, 0x11d6: 0x0004, 0x11d7: 0x0004,
+	0x11d8: 0x0004, 0x11d9: 0x0004, 0x11da: 0x0004, 0x11db: 0x0004, 0x11dc: 0x0004, 0x11dd: 0x0004,
+	0x11de: 0x0004, 0x11df: 0x0004, 0x11e0: 0x0004, 0x11e1: 0x0400, 0x11e2: 0x0004, 0x11e3: 0x0004,
+	0x11e4: 0x0004, 0x11e5: 0x0004, 0x11e6: 0x0004, 0x11e7: 0x0004, 0x11e8: 0x0004,
+	0x11ed: 0x0004,
+	0x11f4: 0x0004,
+	0x11f7: 0x0400, 0x11f8: 0x0004, 0x11f9: 0x0004,
+	// Block 0x48, offset 0x1200
+	0x120b: 0x0002,
+	0x120c: 0x0004, 0x120d: 0x2000, 0x120e: 0x0002, 0x120f: 0x0002,
+	0x1228: 0x0002, 0x1229: 0x0002,
+	0x122a: 0x0002, 0x122b: 0x0002, 0x122c: 0x0002, 0x122d: 0x0002, 0x122e: 0x0002,
+	0x123c: 0x0008,
+	// Block 0x49, offset 0x1240
+	0x1249: 0x0008,
+	0x1260: 0x0002, 0x1261: 0x0002, 0x1262: 0x0002, 0x1263: 0x0002,
+	0x1264: 0x0002, 0x1265: 0x0002, 0x1266: 0x0002, 0x1267: 0x0002, 0x1268: 0x0002, 0x1269: 0x0002,
+	0x126a: 0x0002, 0x126b: 0x0002, 0x126c: 0x0002, 0x126d: 0x0002, 0x126e: 0x0002, 0x126f: 0x0002,
+	// Block 0x4a, offset 0x1280
+	0x1290: 0x0004, 0x1291: 0x0004,
+	0x1292: 0x0004, 0x1293: 0x0004, 0x1294: 0x0004, 0x1295: 0x0004, 0x1296: 0x0004, 0x1297: 0x0004,
+	0x1298: 0x0004, 0x1299: 0x0004, 0x129a: 0x0004, 0x129b: 0x0004, 0x129c: 0x0004, 0x129d: 0x0004,
+	0x129e: 0x0004, 0x129f: 0x0004, 0x12a0: 0x0004, 0x12a1: 0x0004, 0x12a2: 0x0004, 0x12a3: 0x0004,
+	0x12a4: 0x0004, 0x12a5: 0x0004, 0x12a6: 0x0004, 0x12a7: 0x0004, 0x12a8: 0x0004, 0x12a9: 0x0004,
+	0x12aa: 0x0004, 0x12ab: 0x0004, 0x12ac: 0x0004, 0x12ad: 0x0004, 0x12ae: 0x0004, 0x12af: 0x0004,
+	0x12b0: 0x0004,
+	// Block 0x4b, offset 0x12c0
+	0x12e2: 0x0008,
+	0x12f9: 0x0008,
+	// Block 0x4c, offset 0x1300
+	0x1314: 0x0008, 0x1315: 0x0008, 0x1316: 0x0008, 0x1317: 0x0008,
+	0x1318: 0x0008, 0x1319: 0x0008,
+	0x1329: 0x0008,
+	0x132a: 0x0008,
+	// Block 0x4d, offset 0x1340
+	0x135a: 0x0008, 0x135b: 0x0008,
+	0x1368: 0x0008,
+	// Block 0x4e, offset 0x1380
+	0x1388: 0x0008,
+	// Block 0x4f, offset 0x13c0
+	0x13cf: 0x0008,
+	0x13e9: 0x0008,
+	0x13ea: 0x0008, 0x13eb: 0x0008, 0x13ec: 0x0008, 0x13ed: 0x0008, 0x13ee: 0x0008, 0x13ef: 0x0008,
+	0x13f0: 0x0008, 0x13f1: 0x0008, 0x13f2: 0x0008, 0x13f3: 0x0008,
+	0x13f8: 0x0008, 0x13f9: 0x0008, 0x13fa: 0x0008,
+	// Block 0x50, offset 0x1400
+	0x1402: 0x0008,
+	// Block 0x51, offset 0x1440
+	0x146a: 0x0008, 0x146b: 0x0008,
+	0x1476: 0x0008,
+	// Block 0x52, offset 0x1480
+	0x1480: 0x0008,
+	0x14bb: 0x0008,
+	0x14bc: 0x0008, 0x14bd: 0x0008, 0x14be: 0x0008,
+	// Block 0x53, offset 0x14c0
+	0x14c0: 0x0008, 0x14c1: 0x0008, 0x14c2: 0x0008, 0x14c3: 0x0008, 0x14c4: 0x0008, 0x14c5: 0x0008,
+	0x14c7: 0x0008, 0x14c8: 0x0008, 0x14c9: 0x0008, 0x14ca: 0x0008, 0x14cb: 0x0008,
+	0x14cc: 0x0008, 0x14cd: 0x0008, 0x14ce: 0x0008, 0x14cf: 0x0008, 0x14d0: 0x0008, 0x14d1: 0x0008,
+	0x14d2: 0x0008, 0x14d4: 0x0008, 0x14d5: 0x0008, 0x14d6: 0x0008, 0x14d7: 0x0008,
+	0x14d8: 0x0008, 0x14d9: 0x0008, 0x14da: 0x0008, 0x14db: 0x0008, 0x14dc: 0x0008, 0x14dd: 0x0008,
+	0x14de: 0x0008, 0x14df: 0x0008, 0x14e0: 0x0008, 0x14e1: 0x0008, 0x14e2: 0x0008, 0x14e3: 0x0008,
+	0x14e4: 0x0008, 0x14e5: 0x0008, 0x14e6: 0x0008, 0x14e7: 0x0008, 0x14e8: 0x0008, 0x14e9: 0x0008,
+	0x14ea: 0x0008, 0x14eb: 0x0008, 0x14ec: 0x0008, 0x14ed: 0x0008, 0x14ee: 0x0008, 0x14ef: 0x0008,
+	0x14f0: 0x0008, 0x14f1: 0x0008, 0x14f2: 0x0008, 0x14f3: 0x0008, 0x14f4: 0x0008, 0x14f5: 0x0008,
+	0x14f6: 0x0008, 0x14f7: 0x0008, 0x14f8: 0x0008, 0x14f9: 0x0008, 0x14fa: 0x0008, 0x14fb: 0x0008,
+	0x14fc: 0x0008, 0x14fd: 0x0008, 0x14fe: 0x0008, 0x14ff: 0x0008,
+	// Block 0x54, offset 0x1500
+	0x1500: 0x0008, 0x1501: 0x0008, 0x1502: 0x0008, 0x1503: 0x0008, 0x1504: 0x0008, 0x1505: 0x0008,
+	0x1506: 0x0008, 0x1507: 0x0008, 0x1508: 0x0008, 0x1509: 0x0008, 0x150a: 0x0008, 0x150b: 0x0008,
+	0x150c: 0x0008, 0x150d: 0x0008, 0x150e: 0x0008, 0x150f: 0x0008, 0x1510: 0x0008, 0x1511: 0x0008,
+	0x1512: 0x0008, 0x1513: 0x0008, 0x1514: 0x0008, 0x1515: 0x0008, 0x1516: 0x0008, 0x1517: 0x0008,
+	0x1518: 0x0008, 0x1519: 0x0008, 0x151a: 0x0008, 0x151b: 0x0008, 0x151c: 0x0008, 0x151d: 0x0008,
+	0x151e: 0x0008, 0x151f: 0x0008, 0x1520: 0x0008, 0x1521: 0x0008, 0x1522: 0x0008, 0x1523: 0x0008,
+	0x1524: 0x0008, 0x1525: 0x0008, 0x1526: 0x0008, 0x1527: 0x0008, 0x1528: 0x0008, 0x1529: 0x0008,
+	0x152a: 0x0008, 0x152b: 0x0008, 0x152c: 0x0008, 0x152d: 0x0008, 0x152e: 0x0008, 0x152f: 0x0008,
+	0x1530: 0x0008, 0x1531: 0x0008, 0x1532: 0x0008, 0x1533: 0x0008, 0x1534: 0x0008, 0x1535: 0x0008,
+	0x1536: 0x0008, 0x1537: 0x0008, 0x1538: 0x0008, 0x1539: 0x0008, 0x153a: 0x0008, 0x153b: 0x0008,
+	0x153c: 0x0008, 0x153d: 0x0008, 0x153e: 0x0008, 0x153f: 0x0008,
+	// Block 0x55, offset 0x1540
+	0x1540: 0x0008, 0x1541: 0x0008, 0x1542: 0x0008, 0x1543: 0x0008, 0x1544: 0x0008, 0x1545: 0x0008,
+	0x1550: 0x0008, 0x1551: 0x0008,
+	0x1552: 0x0008, 0x1553: 0x0008, 0x1554: 0x0008, 0x1555: 0x0008, 0x1556: 0x0008, 0x1557: 0x0008,
+	0x1558: 0x0008, 0x1559: 0x0008, 0x155a: 0x0008, 0x155b: 0x0008, 0x155c: 0x0008, 0x155d: 0x0008,
+	0x155e: 0x0008, 0x155f: 0x0008, 0x1560: 0x0008, 0x1561: 0x0008, 0x1562: 0x0008, 0x1563: 0x0008,
+	0x1564: 0x0008, 0x1565: 0x0008, 0x1566: 0x0008, 0x1567: 0x0008, 0x1568: 0x0008, 0x1569: 0x0008,
+	0x156a: 0x0008, 0x156b: 0x0008, 0x156c: 0x0008, 0x156d: 0x0008, 0x156e: 0x0008, 0x156f: 0x0008,
+	0x1570: 0x0008, 0x1571: 0x0008, 0x1572: 0x0008, 0x1573: 0x0008, 0x1574: 0x0008, 0x1575: 0x0008,
+	0x1576: 0x0008, 0x1577: 0x0008, 0x1578: 0x0008, 0x1579: 0x0008, 0x157a: 0x0008, 0x157b: 0x0008,
+	0x157c: 0x0008, 0x157d: 0x0008, 0x157e: 0x0008, 0x157f: 0x0008,
+	// Block 0x56, offset 0x1580
+	0x1580: 0x0008, 0x1581: 0x0008, 0x1582: 0x0008, 0x1583: 0x0008, 0x1584: 0x0008, 0x1585: 0x0008,
+	0x1588: 0x0008, 0x1589: 0x0008, 0x158a: 0x0008, 0x158b: 0x0008,
+	0x158c: 0x0008, 0x158d: 0x0008, 0x158e: 0x0008, 0x158f: 0x0008, 0x1590: 0x0008, 0x1591: 0x0008,
+	0x1592: 0x0008, 0x1594: 0x0008, 0x1596: 0x0008,
+	0x159d: 0x0008,
+	0x15a1: 0x0008,
+	0x15a8: 0x0008,
+	0x15b3: 0x0008, 0x15b4: 0x0008,
+	// Block 0x57, offset 0x15c0
+	0x15c4: 0x0008,
+	0x15c7: 0x0008,
+	0x15cc: 0x0008, 0x15ce: 0x0008,
+	0x15d3: 0x0008, 0x15d4: 0x0008, 0x15d5: 0x0008, 0x15d7: 0x0008,
+	0x15e3: 0x0008,
+	0x15e4: 0x0008, 0x15e5: 0x0008, 0x15e6: 0x0008, 0x15e7: 0x0008,
+	// Block 0x58, offset 0x1600
+	0x1615: 0x0008, 0x1616: 0x0008, 0x1617: 0x0008,
+	0x1621: 0x0008,
+	0x1630: 0x0008,
+	0x163f: 0x0008,
+	// Block 0x59, offset 0x1640
+	0x1674: 0x0008, 0x1675: 0x0008,
+	// Block 0x5a, offset 0x1680
+	0x1685: 0x0008,
+	0x1686: 0x0008, 0x1687: 0x0008,
+	0x169b: 0x0008, 0x169c: 0x0008,
+	// Block 0x5b, offset 0x16c0
+	0x16d0: 0x0008,
+	0x16d5: 0x0008,
+	// Block 0x5c, offset 0x1700
+	0x172f: 0x0004,
+	0x1730: 0x0004, 0x1731: 0x0004,
+	// Block 0x5d, offset 0x1740
+	0x177f: 0x0004,
+	// Block 0x5e, offset 0x1780
+	0x17a0: 0x0004, 0x17a1: 0x0004, 0x17a2: 0x0004, 0x17a3: 0x0004,
+	0x17a4: 0x0004, 0x17a5: 0x0004, 0x17a6: 0x0004, 0x17a7: 0x0004, 0x17a8: 0x0004, 0x17a9: 0x0004,
+	0x17aa: 0x0004, 0x17ab: 0x0004, 0x17ac: 0x0004, 0x17ad: 0x0004, 0x17ae: 0x0004, 0x17af: 0x0004,
+	0x17b0: 0x0004, 0x17b1: 0x0004, 0x17b2: 0x0004, 0x17b3: 0x0004, 0x17b4: 0x0004, 0x17b5: 0x0004,
+	0x17b6: 0x0004, 0x17b7: 0x0004, 0x17b8: 0x0004, 0x17b9: 0x0004, 0x17ba: 0x0004, 0x17bb: 0x0004,
+	0x17bc: 0x0004, 0x17bd: 0x0004, 0x17be: 0x0004, 0x17bf: 0x0004,
+	// Block 0x5f, offset 0x17c0
+	0x17ea: 0x0004, 0x17eb: 0x0004, 0x17ec: 0x0004, 0x17ed: 0x0004, 0x17ee: 0x0004, 0x17ef: 0x0004,
+	0x17f0: 0x0008,
+	0x17fd: 0x0008,
+	// Block 0x60, offset 0x1800
+	0x1819: 0x0004, 0x181a: 0x0004,
+	// Block 0x61, offset 0x1840
+	0x1857: 0x0008,
+	0x1859: 0x0008,
+	// Block 0x62, offset 0x1880
+	0x18af: 0x0004,
+	0x18b0: 0x0004, 0x18b1: 0x0004, 0x18b2: 0x0004, 0x18b4: 0x0004, 0x18b5: 0x0004,
+	0x18b6: 0x0004, 0x18b7: 0x0004, 0x18b8: 0x0004, 0x18b9: 0x0004, 0x18ba: 0x0004, 0x18bb: 0x0004,
+	0x18bc: 0x0004, 0x18bd: 0x0004,
+	// Block 0x63, offset 0x18c0
+	0x18de: 0x0004, 0x18df: 0x0004,
+	// Block 0x64, offset 0x1900
+	0x1930: 0x0004, 0x1931: 0x0004,
+	// Block 0x65, offset 0x1940
+	0x1942: 0x0004,
+	0x1946: 0x0004, 0x194b: 0x0004,
+	0x1963: 0x0400,
+	0x1964: 0x0400, 0x1965: 0x0004, 0x1966: 0x0004, 0x1967: 0x0400,
+	0x196c: 0x0004,
+	// Block 0x66, offset 0x1980
+	0x1980: 0x0400, 0x1981: 0x0400,
+	0x19b4: 0x0400, 0x19b5: 0x0400,
+	0x19b6: 0x0400, 0x19b7: 0x0400, 0x19b8: 0x0400, 0x19b9: 0x0400, 0x19ba: 0x0400, 0x19bb: 0x0400,
+	0x19bc: 0x0400, 0x19bd: 0x0400, 0x19be: 0x0400, 0x19bf: 0x0400,
+	// Block 0x67, offset 0x19c0
+	0x19c0: 0x0400, 0x19c1: 0x0400, 0x19c2: 0x0400, 0x19c3: 0x0400, 0x19c4: 0x0004, 0x19c5: 0x0004,
+	0x19e0: 0x0004, 0x19e1: 0x0004, 0x19e2: 0x0004, 0x19e3: 0x0004,
+	0x19e4: 0x0004, 0x19e5: 0x0004, 0x19e6: 0x0004, 0x19e7: 0x0004, 0x19e8: 0x0004, 0x19e9: 0x0004,
+	0x19ea: 0x0004, 0x19eb: 0x0004, 0x19ec: 0x0004, 0x19ed: 0x0004, 0x19ee: 0x0004, 0x19ef: 0x0004,
+	0x19f0: 0x0004, 0x19f1: 0x0004,
+	0x19ff: 0x0004,
+	// Block 0x68, offset 0x1a00
+	0x1a26: 0x0004, 0x1a27: 0x0004, 0x1a28: 0x0004, 0x1a29: 0x0004,
+	0x1a2a: 0x0004, 0x1a2b: 0x0004, 0x1a2c: 0x0004, 0x1a2d: 0x0004,
+	// Block 0x69, offset 0x1a40
+	0x1a47: 0x0004, 0x1a48: 0x0004, 0x1a49: 0x0004, 0x1a4a: 0x0004, 0x1a4b: 0x0004,
+	0x1a4c: 0x0004, 0x1a4d: 0x0004, 0x1a4e: 0x0004, 0x1a4f: 0x0004, 0x1a50: 0x0004, 0x1a51: 0x0004,
+	0x1a52: 0x0400, 0x1a53: 0x0400,
+	0x1a60: 0x0010, 0x1a61: 0x0010, 0x1a62: 0x0010, 0x1a63: 0x0010,
+	0x1a64: 0x0010, 0x1a65: 0x0010, 0x1a66: 0x0010, 0x1a67: 0x0010, 0x1a68: 0x0010, 0x1a69: 0x0010,
+	0x1a6a: 0x0010, 0x1a6b: 0x0010, 0x1a6c: 0x0010, 0x1a6d: 0x0010, 0x1a6e: 0x0010, 0x1a6f: 0x0010,
+	0x1a70: 0x0010, 0x1a71: 0x0010, 0x1a72: 0x0010, 0x1a73: 0x0010, 0x1a74: 0x0010, 0x1a75: 0x0010,
+	0x1a76: 0x0010, 0x1a77: 0x0010, 0x1a78: 0x0010, 0x1a79: 0x0010, 0x1a7a: 0x0010, 0x1a7b: 0x0010,
+	0x1a7c: 0x0010,
+	// Block 0x6a, offset 0x1a80
+	0x1a80: 0x0004, 0x1a81: 0x0004, 0x1a82: 0x0004, 0x1a83: 0x0400,
+	0x1ab3: 0x0004, 0x1ab4: 0x0400, 0x1ab5: 0x0400,
+	0x1ab6: 0x0004, 0x1ab7: 0x0004, 0x1ab8: 0x0004, 0x1ab9: 0x0004, 0x1aba: 0x0400, 0x1abb: 0x0400,
+	0x1abc: 0x0004, 0x1abd: 0x0004, 0x1abe: 0x0400, 0x1abf: 0x0400,
+	// Block 0x6b, offset 0x1ac0
+	0x1ac0: 0x0400,
+	0x1ae5: 0x0004,
+	// Block 0x6c, offset 0x1b00
+	0x1b29: 0x0004,
+	0x1b2a: 0x0004, 0x1b2b: 0x0004, 0x1b2c: 0x0004, 0x1b2d: 0x0004, 0x1b2e: 0x0004, 0x1b2f: 0x0400,
+	0x1b30: 0x0400, 0x1b31: 0x0004, 0x1b32: 0x0004, 0x1b33: 0x0400, 0x1b34: 0x0400, 0x1b35: 0x0004,
+	0x1b36: 0x0004,
+	// Block 0x6d, offset 0x1b40
+	0x1b43: 0x0004,
+	0x1b4c: 0x0004, 0x1b4d: 0x0400,
+	0x1b7c: 0x0004,
+	// Block 0x6e, offset 0x1b80
+	0x1bb0: 0x0004, 0x1bb2: 0x0004, 0x1bb3: 0x0004, 0x1bb4: 0x0004,
+	0x1bb7: 0x0004, 0x1bb8: 0x0004,
+	0x1bbe: 0x0004, 0x1bbf: 0x0004,
+	// Block 0x6f, offset 0x1bc0
+	0x1bc1: 0x0004,
+	0x1beb: 0x0400, 0x1bec: 0x0004, 0x1bed: 0x0004, 0x1bee: 0x0400, 0x1bef: 0x0400,
+	0x1bf5: 0x0400,
+	0x1bf6: 0x0004,
+	// Block 0x70, offset 0x1c00
+	0x1c23: 0x0400,
+	0x1c24: 0x0400, 0x1c25: 0x0004, 0x1c26: 0x0400, 0x1c27: 0x0400, 0x1c28: 0x0004, 0x1c29: 0x0400,
+	0x1c2a: 0x0400, 0x1c2c: 0x0400, 0x1c2d: 0x0004,
+	// Block 0x71, offset 0x1c40
+	0x1c40: 0x0040, 0x1c41: 0x0080, 0x1c42: 0x0080, 0x1c43: 0x0080, 0x1c44: 0x0080, 0x1c45: 0x0080,
+	0x1c46: 0x0080, 0x1c47: 0x0080, 0x1c48: 0x0080, 0x1c49: 0x0080, 0x1c4a: 0x0080, 0x1c4b: 0x0080,
+	0x1c4c: 0x0080, 0x1c4d: 0x0080, 0x1c4e: 0x0080, 0x1c4f: 0x0080, 0x1c50: 0x0080, 0x1c51: 0x0080,
+	0x1c52: 0x0080, 0x1c53: 0x0080, 0x1c54: 0x0080, 0x1c55: 0x0080, 0x1c56: 0x0080, 0x1c57: 0x0080,
+	0x1c58: 0x0080, 0x1c59: 0x0080, 0x1c5a: 0x0080, 0x1c5b: 0x0080, 0x1c5c: 0x0040, 0x1c5d: 0x0080,
+	0x1c5e: 0x0080, 0x1c5f: 0x0080, 0x1c60: 0x0080, 0x1c61: 0x0080, 0x1c62: 0x0080, 0x1c63: 0x0080,
+	0x1c64: 0x0080, 0x1c65: 0x0080, 0x1c66: 0x0080, 0x1c67: 0x0080, 0x1c68: 0x0080, 0x1c69: 0x0080,
+	0x1c6a: 0x0080, 0x1c6b: 0x0080, 0x1c6c: 0x0080, 0x1c6d: 0x0080, 0x1c6e: 0x0080, 0x1c6f: 0x0080,
+	0x1c70: 0x0080, 0x1c71: 0x0080, 0x1c72: 0x0080, 0x1c73: 0x0080, 0x1c74: 0x0080, 0x1c75: 0x0080,
+	0x1c76: 0x0080, 0x1c77: 0x0080, 0x1c78: 0x0040, 0x1c79: 0x0080, 0x1c7a: 0x0080, 0x1c7b: 0x0080,
+	0x1c7c: 0x0080, 0x1c7d: 0x0080, 0x1c7e: 0x0080, 0x1c7f: 0x0080,
+	// Block 0x72, offset 0x1c80
+	0x1c80: 0x0080, 0x1c81: 0x0080, 0x1c82: 0x0080, 0x1c83: 0x0080, 0x1c84: 0x0080, 0x1c85: 0x0080,
+	0x1c86: 0x0080, 0x1c87: 0x0080, 0x1c88: 0x0080, 0x1c89: 0x0080, 0x1c8a: 0x0080, 0x1c8b: 0x0080,
+	0x1c8c: 0x0080, 0x1c8d: 0x0080, 0x1c8e: 0x0080, 0x1c8f: 0x0080, 0x1c90: 0x0080, 0x1c91: 0x0080,
+	0x1c92: 0x0080, 0x1c93: 0x0080, 0x1c94: 0x0040, 0x1c95: 0x0080, 0x1c96: 0x0080, 0x1c97: 0x0080,
+	0x1c98: 0x0080, 0x1c99: 0x0080, 0x1c9a: 0x0080, 0x1c9b: 0x0080, 0x1c9c: 0x0080, 0x1c9d: 0x0080,
+	0x1c9e: 0x0080, 0x1c9f: 0x0080, 0x1ca0: 0x0080, 0x1ca1: 0x0080, 0x1ca2: 0x0080, 0x1ca3: 0x0080,
+	0x1ca4: 0x0080, 0x1ca5: 0x0080, 0x1ca6: 0x0080, 0x1ca7: 0x0080, 0x1ca8: 0x0080, 0x1ca9: 0x0080,
+	0x1caa: 0x0080, 0x1cab: 0x0080, 0x1cac: 0x0080, 0x1cad: 0x0080, 0x1cae: 0x0080, 0x1caf: 0x0080,
+	0x1cb0: 0x0040, 0x1cb1: 0x0080, 0x1cb2: 0x0080, 0x1cb3: 0x0080, 0x1cb4: 0x0080, 0x1cb5: 0x0080,
+	0x1cb6: 0x0080, 0x1cb7: 0x0080, 0x1cb8: 0x0080, 0x1cb9: 0x0080, 0x1cba: 0x0080, 0x1cbb: 0x0080,
+	0x1cbc: 0x0080, 0x1cbd: 0x0080, 0x1cbe: 0x0080, 0x1cbf: 0x0080,
+	// Block 0x73, offset 0x1cc0
+	0x1cc0: 0x0080, 0x1cc1: 0x0080, 0x1cc2: 0x0080, 0x1cc3: 0x0080, 0x1cc4: 0x0080, 0x1cc5: 0x0080,
+	0x1cc6: 0x0080, 0x1cc7: 0x0080, 0x1cc8: 0x0080, 0x1cc9: 0x0080, 0x1cca: 0x0080, 0x1ccb: 0x0080,
+	0x1ccc: 0x0040, 0x1ccd: 0x0080, 0x1cce: 0x0080, 0x1ccf: 0x0080, 0x1cd0: 0x0080, 0x1cd1: 0x0080,
+	0x1cd2: 0x0080, 0x1cd3: 0x0080, 0x1cd4: 0x0080, 0x1cd5: 0x0080, 0x1cd6: 0x0080, 0x1cd7: 0x0080,
+	0x1cd8: 0x0080, 0x1cd9: 0x0080, 0x1cda: 0x0080, 0x1cdb: 0x0080, 0x1cdc: 0x0080, 0x1cdd: 0x0080,
+	0x1cde: 0x0080, 0x1cdf: 0x0080, 0x1ce0: 0x0080, 0x1ce1: 0x0080, 0x1ce2: 0x0080, 0x1ce3: 0x0080,
+	0x1ce4: 0x0080, 0x1ce5: 0x0080, 0x1ce6: 0x0080, 0x1ce7: 0x0080, 0x1ce8: 0x0040, 0x1ce9: 0x0080,
+	0x1cea: 0x0080, 0x1ceb: 0x0080, 0x1cec: 0x0080, 0x1ced: 0x0080, 0x1cee: 0x0080, 0x1cef: 0x0080,
+	0x1cf0: 0x0080, 0x1cf1: 0x0080, 0x1cf2: 0x0080, 0x1cf3: 0x0080, 0x1cf4: 0x0080, 0x1cf5: 0x0080,
+	0x1cf6: 0x0080, 0x1cf7: 0x0080, 0x1cf8: 0x0080, 0x1cf9: 0x0080, 0x1cfa: 0x0080, 0x1cfb: 0x0080,
+	0x1cfc: 0x0080, 0x1cfd: 0x0080, 0x1cfe: 0x0080, 0x1cff: 0x0080,
+	// Block 0x74, offset 0x1d00
+	0x1d00: 0x0080, 0x1d01: 0x0080, 0x1d02: 0x0080, 0x1d03: 0x0080, 0x1d04: 0x0040, 0x1d05: 0x0080,
+	0x1d06: 0x0080, 0x1d07: 0x0080, 0x1d08: 0x0080, 0x1d09: 0x0080, 0x1d0a: 0x0080, 0x1d0b: 0x0080,
+	0x1d0c: 0x0080, 0x1d0d: 0x0080, 0x1d0e: 0x0080, 0x1d0f: 0x0080, 0x1d10: 0x0080, 0x1d11: 0x0080,
+	0x1d12: 0x0080, 0x1d13: 0x0080, 0x1d14: 0x0080, 0x1d15: 0x0080, 0x1d16: 0x0080, 0x1d17: 0x0080,
+	0x1d18: 0x0080, 0x1d19: 0x0080, 0x1d1a: 0x0080, 0x1d1b: 0x0080, 0x1d1c: 0x0080, 0x1d1d: 0x0080,
+	0x1d1e: 0x0080, 0x1d1f: 0x0080, 0x1d20: 0x0040, 0x1d21: 0x0080, 0x1d22: 0x0080, 0x1d23: 0x0080,
+	0x1d24: 0x0080, 0x1d25: 0x0080, 0x1d26: 0x0080, 0x1d27: 0x0080, 0x1d28: 0x0080, 0x1d29: 0x0080,
+	0x1d2a: 0x0080, 0x1d2b: 0x0080, 0x1d2c: 0x0080, 0x1d2d: 0x0080, 0x1d2e: 0x0080, 0x1d2f: 0x0080,
+	0x1d30: 0x0080, 0x1d31: 0x0080, 0x1d32: 0x0080, 0x1d33: 0x0080, 0x1d34: 0x0080, 0x1d35: 0x0080,
+	0x1d36: 0x0080, 0x1d37: 0x0080, 0x1d38: 0x0080, 0x1d39: 0x0080, 0x1d3a: 0x0080, 0x1d3b: 0x0080,
+	0x1d3c: 0x0040, 0x1d3d: 0x0080, 0x1d3e: 0x0080, 0x1d3f: 0x0080,
+	// Block 0x75, offset 0x1d40
+	0x1d40: 0x0080, 0x1d41: 0x0080, 0x1d42: 0x0080, 0x1d43: 0x0080, 0x1d44: 0x0080, 0x1d45: 0x0080,
+	0x1d46: 0x0080, 0x1d47: 0x0080, 0x1d48: 0x0080, 0x1d49: 0x0080, 0x1d4a: 0x0080, 0x1d4b: 0x0080,
+	0x1d4c: 0x0080, 0x1d4d: 0x0080, 0x1d4e: 0x0080, 0x1d4f: 0x0080, 0x1d50: 0x0080, 0x1d51: 0x0080,
+	0x1d52: 0x0080, 0x1d53: 0x0080, 0x1d54: 0x0080, 0x1d55: 0x0080, 0x1d56: 0x0080, 0x1d57: 0x0080,
+	0x1d58: 0x0040, 0x1d59: 0x0080, 0x1d5a: 0x0080, 0x1d5b: 0x0080, 0x1d5c: 0x0080, 0x1d5d: 0x0080,
+	0x1d5e: 0x0080, 0x1d5f: 0x0080, 0x1d60: 0x0080, 0x1d61: 0x0080, 0x1d62: 0x0080, 0x1d63: 0x0080,
+	0x1d64: 0x0080, 0x1d65: 0x0080, 0x1d66: 0x0080, 0x1d67: 0x0080, 0x1d68: 0x0080, 0x1d69: 0x0080,
+	0x1d6a: 0x0080, 0x1d6b: 0x0080, 0x1d6c: 0x0080, 0x1d6d: 0x0080, 0x1d6e: 0x0080, 0x1d6f: 0x0080,
+	0x1d70: 0x0080, 0x1d71: 0x0080, 0x1d72: 0x0080, 0x1d73: 0x0080, 0x1d74: 0x0040, 0x1d75: 0x0080,
+	0x1d76: 0x0080, 0x1d77: 0x0080, 0x1d78: 0x0080, 0x1d79: 0x0080, 0x1d7a: 0x0080, 0x1d7b: 0x0080,
+	0x1d7c: 0x0080, 0x1d7d: 0x0080, 0x1d7e: 0x0080, 0x1d7f: 0x0080,
+	// Block 0x76, offset 0x1d80
+	0x1d80: 0x0080, 0x1d81: 0x0080, 0x1d82: 0x0080, 0x1d83: 0x0080, 0x1d84: 0x0080, 0x1d85: 0x0080,
+	0x1d86: 0x0080, 0x1d87: 0x0080, 0x1d88: 0x0080, 0x1d89: 0x0080, 0x1d8a: 0x0080, 0x1d8b: 0x0080,
+	0x1d8c: 0x0080, 0x1d8d: 0x0080, 0x1d8e: 0x0080, 0x1d8f: 0x0080, 0x1d90: 0x0040, 0x1d91: 0x0080,
+	0x1d92: 0x0080, 0x1d93: 0x0080, 0x1d94: 0x0080, 0x1d95: 0x0080, 0x1d96: 0x0080, 0x1d97: 0x0080,
+	0x1d98: 0x0080, 0x1d99: 0x0080, 0x1d9a: 0x0080, 0x1d9b: 0x0080, 0x1d9c: 0x0080, 0x1d9d: 0x0080,
+	0x1d9e: 0x0080, 0x1d9f: 0x0080, 0x1da0: 0x0080, 0x1da1: 0x0080, 0x1da2: 0x0080, 0x1da3: 0x0080,
+	0x1da4: 0x0080, 0x1da5: 0x0080, 0x1da6: 0x0080, 0x1da7: 0x0080, 0x1da8: 0x0080, 0x1da9: 0x0080,
+	0x1daa: 0x0080, 0x1dab: 0x0080, 0x1dac: 0x0040, 0x1dad: 0x0080, 0x1dae: 0x0080, 0x1daf: 0x0080,
+	0x1db0: 0x0080, 0x1db1: 0x0080, 0x1db2: 0x0080, 0x1db3: 0x0080, 0x1db4: 0x0080, 0x1db5: 0x0080,
+	0x1db6: 0x0080, 0x1db7: 0x0080, 0x1db8: 0x0080, 0x1db9: 0x0080, 0x1dba: 0x0080, 0x1dbb: 0x0080,
+	0x1dbc: 0x0080, 0x1dbd: 0x0080, 0x1dbe: 0x0080, 0x1dbf: 0x0080,
+	// Block 0x77, offset 0x1dc0
+	0x1dc0: 0x0080, 0x1dc1: 0x0080, 0x1dc2: 0x0080, 0x1dc3: 0x0080, 0x1dc4: 0x0080, 0x1dc5: 0x0080,
+	0x1dc6: 0x0080, 0x1dc7: 0x0080, 0x1dc8: 0x0040, 0x1dc9: 0x0080, 0x1dca: 0x0080, 0x1dcb: 0x0080,
+	0x1dcc: 0x0080, 0x1dcd: 0x0080, 0x1dce: 0x0080, 0x1dcf: 0x0080, 0x1dd0: 0x0080, 0x1dd1: 0x0080,
+	0x1dd2: 0x0080, 0x1dd3: 0x0080, 0x1dd4: 0x0080, 0x1dd5: 0x0080, 0x1dd6: 0x0080, 0x1dd7: 0x0080,
+	0x1dd8: 0x0080, 0x1dd9: 0x0080, 0x1dda: 0x0080, 0x1ddb: 0x0080, 0x1ddc: 0x0080, 0x1ddd: 0x0080,
+	0x1dde: 0x0080, 0x1ddf: 0x0080, 0x1de0: 0x0080, 0x1de1: 0x0080, 0x1de2: 0x0080, 0x1de3: 0x0080,
+	0x1de4: 0x0040, 0x1de5: 0x0080, 0x1de6: 0x0080, 0x1de7: 0x0080, 0x1de8: 0x0080, 0x1de9: 0x0080,
+	0x1dea: 0x0080, 0x1deb: 0x0080, 0x1dec: 0x0080, 0x1ded: 0x0080, 0x1dee: 0x0080, 0x1def: 0x0080,
+	0x1df0: 0x0080, 0x1df1: 0x0080, 0x1df2: 0x0080, 0x1df3: 0x0080, 0x1df4: 0x0080, 0x1df5: 0x0080,
+	0x1df6: 0x0080, 0x1df7: 0x0080, 0x1df8: 0x0080, 0x1df9: 0x0080, 0x1dfa: 0x0080, 0x1dfb: 0x0080,
+	0x1dfc: 0x0080, 0x1dfd: 0x0080, 0x1dfe: 0x0080, 0x1dff: 0x0080,
+	// Block 0x78, offset 0x1e00
+	0x1e00: 0x0080, 0x1e01: 0x0080, 0x1e02: 0x0080, 0x1e03: 0x0080, 0x1e04: 0x0080, 0x1e05: 0x0080,
+	0x1e06: 0x0080, 0x1e07: 0x0080, 0x1e08: 0x0040, 0x1e09: 0x0080, 0x1e0a: 0x0080, 0x1e0b: 0x0080,
+	0x1e0c: 0x0080, 0x1e0d: 0x0080, 0x1e0e: 0x0080, 0x1e0f: 0x0080, 0x1e10: 0x0080, 0x1e11: 0x0080,
+	0x1e12: 0x0080, 0x1e13: 0x0080, 0x1e14: 0x0080, 0x1e15: 0x0080, 0x1e16: 0x0080, 0x1e17: 0x0080,
+	0x1e18: 0x0080, 0x1e19: 0x0080, 0x1e1a: 0x0080, 0x1e1b: 0x0080, 0x1e1c: 0x0080, 0x1e1d: 0x0080,
+	0x1e1e: 0x0080, 0x1e1f: 0x0080, 0x1e20: 0x0080, 0x1e21: 0x0080, 0x1e22: 0x0080, 0x1e23: 0x0080,
+	0x1e30: 0x1000, 0x1e31: 0x1000, 0x1e32: 0x1000, 0x1e33: 0x1000, 0x1e34: 0x1000, 0x1e35: 0x1000,
+	0x1e36: 0x1000, 0x1e37: 0x1000, 0x1e38: 0x1000, 0x1e39: 0x1000, 0x1e3a: 0x1000, 0x1e3b: 0x1000,
+	0x1e3c: 0x1000, 0x1e3d: 0x1000, 0x1e3e: 0x1000, 0x1e3f: 0x1000,
+	// Block 0x79, offset 0x1e40
+	0x1e40: 0x1000, 0x1e41: 0x1000, 0x1e42: 0x1000, 0x1e43: 0x1000, 0x1e44: 0x1000, 0x1e45: 0x1000,
+	0x1e46: 0x1000, 0x1e4b: 0x0800,
+	0x1e4c: 0x0800, 0x1e4d: 0x0800, 0x1e4e: 0x0800, 0x1e4f: 0x0800, 0x1e50: 0x0800, 0x1e51: 0x0800,
+	0x1e52: 0x0800, 0x1e53: 0x0800, 0x1e54: 0x0800, 0x1e55: 0x0800, 0x1e56: 0x0800, 0x1e57: 0x0800,
+	0x1e58: 0x0800, 0x1e59: 0x0800, 0x1e5a: 0x0800, 0x1e5b: 0x0800, 0x1e5c: 0x0800, 0x1e5d: 0x0800,
+	0x1e5e: 0x0800, 0x1e5f: 0x0800, 0x1e60: 0x0800, 0x1e61: 0x0800, 0x1e62: 0x0800, 0x1e63: 0x0800,
+	0x1e64: 0x0800, 0x1e65: 0x0800, 0x1e66: 0x0800, 0x1e67: 0x0800, 0x1e68: 0x0800, 0x1e69: 0x0800,
+	0x1e6a: 0x0800, 0x1e6b: 0x0800, 0x1e6c: 0x0800, 0x1e6d: 0x0800, 0x1e6e: 0x0800, 0x1e6f: 0x0800,
+	0x1e70: 0x0800, 0x1e71: 0x0800, 0x1e72: 0x0800, 0x1e73: 0x0800, 0x1e74: 0x0800, 0x1e75: 0x0800,
+	0x1e76: 0x0800, 0x1e77: 0x0800, 0x1e78: 0x0800, 0x1e79: 0x0800, 0x1e7a: 0x0800, 0x1e7b: 0x0800,
+	// Block 0x7a, offset 0x1e80
+	0x1e9e: 0x0004,
+	// Block 0x7b, offset 0x1ec0
+	0x1ec0: 0x0004, 0x1ec1: 0x0004, 0x1ec2: 0x0004, 0x1ec3: 0x0004, 0x1ec4: 0x0004, 0x1ec5: 0x0004,
+	0x1ec6: 0x0004, 0x1ec7: 0x0004, 0x1ec8: 0x0004, 0x1ec9: 0x0004, 0x1eca: 0x0004, 0x1ecb: 0x0004,
+	0x1ecc: 0x0004, 0x1ecd: 0x0004, 0x1ece: 0x0004, 0x1ecf: 0x0004,
+	0x1ee0: 0x0004, 0x1ee1: 0x0004, 0x1ee2: 0x0004, 0x1ee3: 0x0004,
+	0x1ee4: 0x0004, 0x1ee5: 0x0004, 0x1ee6: 0x0004, 0x1ee7: 0x0004, 0x1ee8: 0x0004, 0x1ee9: 0x0004,
+	0x1eea: 0x0004, 0x1eeb: 0x0004, 0x1eec: 0x0004, 0x1eed: 0x0004, 0x1eee: 0x0004, 0x1eef: 0x0004,
+	// Block 0x7c, offset 0x1f00
+	0x1f3f: 0x0002,
+	// Block 0x7d, offset 0x1f40
+	0x1f70: 0x0002, 0x1f71: 0x0002, 0x1f72: 0x0002, 0x1f73: 0x0002, 0x1f74: 0x0002, 0x1f75: 0x0002,
+	0x1f76: 0x0002, 0x1f77: 0x0002, 0x1f78: 0x0002, 0x1f79: 0x0002, 0x1f7a: 0x0002, 0x1f7b: 0x0002,
+	// Block 0x7e, offset 0x1f80
+	0x1fbd: 0x0004,
+	// Block 0x7f, offset 0x1fc0
+	0x1fe0: 0x0004,
+	// Block 0x80, offset 0x2000
+	0x2036: 0x0004, 0x2037: 0x0004, 0x2038: 0x0004, 0x2039: 0x0004, 0x203a: 0x0004,
+	// Block 0x81, offset 0x2040
+	0x2041: 0x0004, 0x2042: 0x0004, 0x2043: 0x0004, 0x2045: 0x0004,
+	0x2046: 0x0004,
+	0x204c: 0x0004, 0x204d: 0x0004, 0x204e: 0x0004, 0x204f: 0x0004,
+	0x2078: 0x0004, 0x2079: 0x0004, 0x207a: 0x0004,
+	0x207f: 0x0004,
+	// Block 0x82, offset 0x2080
+	0x20a5: 0x0004, 0x20a6: 0x0004,
+	// Block 0x83, offset 0x20c0
+	0x20e4: 0x0004, 0x20e5: 0x0004, 0x20e6: 0x0004, 0x20e7: 0x0004,
+	// Block 0x84, offset 0x2100
+	0x212b: 0x0004, 0x212c: 0x0004,
+	// Block 0x85, offset 0x2140
+	0x217d: 0x0004, 0x217e: 0x0004, 0x217f: 0x0004,
+	// Block 0x86, offset 0x2180
+	0x2186: 0x0004, 0x2187: 0x0004, 0x2188: 0x0004, 0x2189: 0x0004, 0x218a: 0x0004, 0x218b: 0x0004,
+	0x218c: 0x0004, 0x218d: 0x0004, 0x218e: 0x0004, 0x218f: 0x0004, 0x2190: 0x0004,
+	// Block 0x87, offset 0x21c0
+	0x21c2: 0x0004, 0x21c3: 0x0004, 0x21c4: 0x0004, 0x21c5: 0x0004,
+	// Block 0x88, offset 0x2200
+	0x2200: 0x0400, 0x2201: 0x0004, 0x2202: 0x0400,
+	0x2238: 0x0004, 0x2239: 0x0004, 0x223a: 0x0004, 0x223b: 0x0004,
+	0x223c: 0x0004, 0x223d: 0x0004, 0x223e: 0x0004, 0x223f: 0x0004,
+	// Block 0x89, offset 0x2240
+	0x2240: 0x0004, 0x2241: 0x0004, 0x2242: 0x0004, 0x2243: 0x0004, 0x2244: 0x0004, 0x2245: 0x0004,
+	0x2246: 0x0004,
+	0x2270: 0x0004, 0x2273: 0x0004, 0x2274: 0x0004,
+	0x227f: 0x0004,
+	// Block 0x8a, offset 0x2280
+	0x2280: 0x0004, 0x2281: 0x0004, 0x2282: 0x0400,
+	0x22b0: 0x0400, 0x22b1: 0x0400, 0x22b2: 0x0400, 0x22b3: 0x0004, 0x22b4: 0x0004, 0x22b5: 0x0004,
+	0x22b6: 0x0004, 0x22b7: 0x0400, 0x22b8: 0x0400, 0x22b9: 0x0004, 0x22ba: 0x0004,
+	0x22bd: 0x0100,
+	// Block 0x8b, offset 0x22c0
+	0x22c2: 0x0004,
+	0x22cd: 0x0100,
+	// Block 0x8c, offset 0x2300
+	0x2300: 0x0004, 0x2301: 0x0004, 0x2302: 0x0004,
+	0x2327: 0x0004, 0x2328: 0x0004, 0x2329: 0x0004,
+	0x232a: 0x0004, 0x232b: 0x0004, 0x232c: 0x0400, 0x232d: 0x0004, 0x232e: 0x0004, 0x232f: 0x0004,
+	0x2330: 0x0004, 0x2331: 0x0004, 0x2332: 0x0004, 0x2333: 0x0004, 0x2334: 0x0004,
+	// Block 0x8d, offset 0x2340
+	0x2345: 0x0400,
+	0x2346: 0x0400,
+	0x2373: 0x0004,
+	// Block 0x8e, offset 0x2380
+	0x2380: 0x0004, 0x2381: 0x0004, 0x2382: 0x0400,
+	0x23b3: 0x0400, 0x23b4: 0x0400, 0x23b5: 0x0400,
+	0x23b6: 0x0004, 0x23b7: 0x0004, 0x23b8: 0x0004, 0x23b9: 0x0004, 0x23ba: 0x0004, 0x23bb: 0x0004,
+	0x23bc: 0x0004, 0x23bd: 0x0004, 0x23be: 0x0004, 0x23bf: 0x0400,
+	// Block 0x8f, offset 0x23c0
+	0x23c0: 0x0400, 0x23c2: 0x0100, 0x23c3: 0x0100,
+	0x23c9: 0x0004, 0x23ca: 0x0004, 0x23cb: 0x0004,
+	0x23cc: 0x0004, 0x23ce: 0x0400, 0x23cf: 0x0004,
+	// Block 0x90, offset 0x2400
+	0x242c: 0x0400, 0x242d: 0x0400, 0x242e: 0x0400, 0x242f: 0x0004,
+	0x2430: 0x0004, 0x2431: 0x0004, 0x2432: 0x0400, 0x2433: 0x0400, 0x2434: 0x0004, 0x2435: 0x0400,
+	0x2436: 0x0004, 0x2437: 0x0004,
+	0x243e: 0x0004,
+	// Block 0x91, offset 0x2440
+	0x2441: 0x0004,
+	// Block 0x92, offset 0x2480
+	0x249f: 0x0004, 0x24a0: 0x0400, 0x24a1: 0x0400, 0x24a2: 0x0400, 0x24a3: 0x0004,
+	0x24a4: 0x0004, 0x24a5: 0x0004, 0x24a6: 0x0004, 0x24a7: 0x0004, 0x24a8: 0x0004, 0x24a9: 0x0004,
+	0x24aa: 0x0004,
+	// Block 0x93, offset 0x24c0
+	0x24c0: 0x0004, 0x24c1: 0x0400, 0x24c2: 0x0400, 0x24c3: 0x0400, 0x24c4: 0x0400,
+	0x24c7: 0x0400, 0x24c8: 0x0400, 0x24cb: 0x0400,
+	0x24cc: 0x0400, 0x24cd: 0x0400,
+	0x24d7: 0x0004,
+	0x24e2: 0x0400, 0x24e3: 0x0400,
+	0x24e6: 0x0004, 0x24e7: 0x0004, 0x24e8: 0x0004, 0x24e9: 0x0004,
+	0x24ea: 0x0004, 0x24eb: 0x0004, 0x24ec: 0x0004,
+	0x24f0: 0x0004, 0x24f1: 0x0004, 0x24f2: 0x0004, 0x24f3: 0x0004, 0x24f4: 0x0004,
+	// Block 0x94, offset 0x2500
+	0x2535: 0x0400,
+	0x2536: 0x0400, 0x2537: 0x0400, 0x2538: 0x0004, 0x2539: 0x0004, 0x253a: 0x0004, 0x253b: 0x0004,
+	0x253c: 0x0004, 0x253d: 0x0004, 0x253e: 0x0004, 0x253f: 0x0004,
+	// Block 0x95, offset 0x2540
+	0x2540: 0x0400, 0x2541: 0x0400, 0x2542: 0x0004, 0x2543: 0x0004, 0x2544: 0x0004, 0x2545: 0x0400,
+	0x2546: 0x0004,
+	0x255e: 0x0004,
+	// Block 0x96, offset 0x2580
+	0x25b0: 0x0004, 0x25b1: 0x0400, 0x25b2: 0x0400, 0x25b3: 0x0004, 0x25b4: 0x0004, 0x25b5: 0x0004,
+	0x25b6: 0x0004, 0x25b7: 0x0004, 0x25b8: 0x0004, 0x25b9: 0x0400, 0x25ba: 0x0004, 0x25bb: 0x0400,
+	0x25bc: 0x0400, 0x25bd: 0x0004, 0x25be: 0x0400, 0x25bf: 0x0004,
+	// Block 0x97, offset 0x25c0
+	0x25c0: 0x0004, 0x25c1: 0x0400, 0x25c2: 0x0004, 0x25c3: 0x0004,
+	// Block 0x98, offset 0x2600
+	0x262f: 0x0004,
+	0x2630: 0x0400, 0x2631: 0x0400, 0x2632: 0x0004, 0x2633: 0x0004, 0x2634: 0x0004, 0x2635: 0x0004,
+	0x2638: 0x0400, 0x2639: 0x0400, 0x263a: 0x0400, 0x263b: 0x0400,
+	0x263c: 0x0004, 0x263d: 0x0004, 0x263e: 0x0400, 0x263f: 0x0004,
+	// Block 0x99, offset 0x2640
+	0x2640: 0x0004,
+	0x265c: 0x0004, 0x265d: 0x0004,
+	// Block 0x9a, offset 0x2680
+	0x26b0: 0x0400, 0x26b1: 0x0400, 0x26b2: 0x0400, 0x26b3: 0x0004, 0x26b4: 0x0004, 0x26b5: 0x0004,
+	0x26b6: 0x0004, 0x26b7: 0x0004, 0x26b8: 0x0004, 0x26b9: 0x0004, 0x26ba: 0x0004, 0x26bb: 0x0400,
+	0x26bc: 0x0400, 0x26bd: 0x0004, 0x26be: 0x0400, 0x26bf: 0x0004,
+	// Block 0x9b, offset 0x26c0
+	0x26c0: 0x0004,
+	// Block 0x9c, offset 0x2700
+	0x272b: 0x0004, 0x272c: 0x0400, 0x272d: 0x0004, 0x272e: 0x0400, 0x272f: 0x0400,
+	0x2730: 0x0004, 0x2731: 0x0004, 0x2732: 0x0004, 0x2733: 0x0004, 0x2734: 0x0004, 0x2735: 0x0004,
+	0x2736: 0x0400, 0x2737: 0x0004,
+	// Block 0x9d, offset 0x2740
+	0x275d: 0x0004,
+	0x275e: 0x0004, 0x275f: 0x0004, 0x2762: 0x0004, 0x2763: 0x0004,
+	0x2764: 0x0004, 0x2765: 0x0004, 0x2766: 0x0400, 0x2767: 0x0004, 0x2768: 0x0004, 0x2769: 0x0004,
+	0x276a: 0x0004, 0x276b: 0x0004,
+	// Block 0x9e, offset 0x2780
+	0x27ac: 0x0400, 0x27ad: 0x0400, 0x27ae: 0x0400, 0x27af: 0x0004,
+	0x27b0: 0x0004, 0x27b1: 0x0004, 0x27b2: 0x0004, 0x27b3: 0x0004, 0x27b4: 0x0004, 0x27b5: 0x0004,
+	0x27b6: 0x0004, 0x27b7: 0x0004, 0x27b8: 0x0400, 0x27b9: 0x0004, 0x27ba: 0x0004,
+	// Block 0x9f, offset 0x27c0
+	0x27f0: 0x0004, 0x27f1: 0x0400, 0x27f2: 0x0400, 0x27f3: 0x0400, 0x27f4: 0x0400, 0x27f5: 0x0400,
+	0x27f7: 0x0400, 0x27f8: 0x0400, 0x27fb: 0x0004,
+	0x27fc: 0x0004, 0x27fd: 0x0400, 0x27fe: 0x0004, 0x27ff: 0x0100,
+	// Block 0xa0, offset 0x2800
+	0x2800: 0x0400, 0x2801: 0x0100, 0x2802: 0x0400, 0x2803: 0x0004,
+	// Block 0xa1, offset 0x2840
+	0x2851: 0x0400,
+	0x2852: 0x0400, 0x2853: 0x0400, 0x2854: 0x0004, 0x2855: 0x0004, 0x2856: 0x0004, 0x2857: 0x0004,
+	0x285a: 0x0004, 0x285b: 0x0004, 0x285c: 0x0400, 0x285d: 0x0400,
+	0x285e: 0x0400, 0x285f: 0x0400, 0x2860: 0x0004,
+	0x2864: 0x0400,
+	// Block 0xa2, offset 0x2880
+	0x2881: 0x0004, 0x2882: 0x0004, 0x2883: 0x0004, 0x2884: 0x0004, 0x2885: 0x0004,
+	0x2886: 0x0004, 0x2887: 0x0004, 0x2888: 0x0004, 0x2889: 0x0004, 0x288a: 0x0004,
+	0x28b3: 0x0004, 0x28b4: 0x0004, 0x28b5: 0x0004,
+	0x28b6: 0x0004, 0x28b7: 0x0004, 0x28b8: 0x0004, 0x28b9: 0x0400, 0x28ba: 0x0100, 0x28bb: 0x0004,
+	0x28bc: 0x0004, 0x28bd: 0x0004, 0x28be: 0x0004,
+	// Block 0xa3, offset 0x28c0
+	0x28c7: 0x0004,
+	0x28d1: 0x0004,
+	0x28d2: 0x0004, 0x28d3: 0x0004, 0x28d4: 0x0004, 0x28d5: 0x0004, 0x28d6: 0x0004, 0x28d7: 0x0400,
+	0x28d8: 0x0400, 0x28d9: 0x0004, 0x28da: 0x0004, 0x28db: 0x0004,
+	// Block 0xa4, offset 0x2900
+	0x2904: 0x0100, 0x2905: 0x0100,
+	0x2906: 0x0100, 0x2907: 0x0100, 0x2908: 0x0100, 0x2909: 0x0100, 0x290a: 0x0004, 0x290b: 0x0004,
+	0x290c: 0x0004, 0x290d: 0x0004, 0x290e: 0x0004, 0x290f: 0x0004, 0x2910: 0x0004, 0x2911: 0x0004,
+	0x2912: 0x0004, 0x2913: 0x0004, 0x2914: 0x0004, 0x2915: 0x0004, 0x2916: 0x0004, 0x2917: 0x0400,
+	0x2918: 0x0004, 0x2919: 0x0004,
+	// Block 0xa5, offset 0x2940
+	0x296f: 0x0400,
+	0x2970: 0x0004, 0x2971: 0x0004, 0x2972: 0x0004, 0x2973: 0x0004, 0x2974: 0x0004, 0x2975: 0x0004,
+	0x2976: 0x0004, 0x2978: 0x0004, 0x2979: 0x0004, 0x297a: 0x0004, 0x297b: 0x0004,
+	0x297c: 0x0004, 0x297d: 0x0004, 0x297e: 0x0400, 0x297f: 0x0004,
+	// Block 0xa6, offset 0x2980
+	0x2992: 0x0004, 0x2993: 0x0004, 0x2994: 0x0004, 0x2995: 0x0004, 0x2996: 0x0004, 0x2997: 0x0004,
+	0x2998: 0x0004, 0x2999: 0x0004, 0x299a: 0x0004, 0x299b: 0x0004, 0x299c: 0x0004, 0x299d: 0x0004,
+	0x299e: 0x0004, 0x299f: 0x0004, 0x29a0: 0x0004, 0x29a1: 0x0004, 0x29a2: 0x0004, 0x29a3: 0x0004,
+	0x29a4: 0x0004, 0x29a5: 0x0004, 0x29a6: 0x0004, 0x29a7: 0x0004, 0x29a9: 0x0400,
+	0x29aa: 0x0004, 0x29ab: 0x0004, 0x29ac: 0x0004, 0x29ad: 0x0004, 0x29ae: 0x0004, 0x29af: 0x0004,
+	0x29b0: 0x0004, 0x29b1: 0x0400, 0x29b2: 0x0004, 0x29b3: 0x0004, 0x29b4: 0x0400, 0x29b5: 0x0004,
+	0x29b6: 0x0004,
+	// Block 0xa7, offset 0x29c0
+	0x29f1: 0x0004, 0x29f2: 0x0004, 0x29f3: 0x0004, 0x29f4: 0x0004, 0x29f5: 0x0004,
+	0x29f6: 0x0004, 0x29fa: 0x0004,
+	0x29fc: 0x0004, 0x29fd: 0x0004, 0x29ff: 0x0004,
+	// Block 0xa8, offset 0x2a00
+	0x2a00: 0x0004, 0x2a01: 0x0004, 0x2a02: 0x0004, 0x2a03: 0x0004, 0x2a04: 0x0004, 0x2a05: 0x0004,
+	0x2a06: 0x0100, 0x2a07: 0x0004,
+	// Block 0xa9, offset 0x2a40
+	0x2a4a: 0x0400, 0x2a4b: 0x0400,
+	0x2a4c: 0x0400, 0x2a4d: 0x0400, 0x2a4e: 0x0400, 0x2a50: 0x0004, 0x2a51: 0x0004,
+	0x2a53: 0x0400, 0x2a54: 0x0400, 0x2a55: 0x0004, 0x2a56: 0x0400, 0x2a57: 0x0004,
+	// Block 0xaa, offset 0x2a80
+	0x2ab3: 0x0004, 0x2ab4: 0x0004, 0x2ab5: 0x0400,
+	0x2ab6: 0x0400,
+	// Block 0xab, offset 0x2ac0
+	0x2ac0: 0x0004, 0x2ac1: 0x0004, 0x2ac2: 0x0100, 0x2ac3: 0x0400,
+	0x2af4: 0x0400, 0x2af5: 0x0400,
+	0x2af6: 0x0004, 0x2af7: 0x0004, 0x2af8: 0x0004, 0x2af9: 0x0004, 0x2afa: 0x0004,
+	0x2afe: 0x0400, 0x2aff: 0x0400,
+	// Block 0xac, offset 0x2b00
+	0x2b00: 0x0004, 0x2b01: 0x0400, 0x2b02: 0x0004,
+	// Block 0xad, offset 0x2b40
+	0x2b70: 0x0002, 0x2b71: 0x0002, 0x2b72: 0x0002, 0x2b73: 0x0002, 0x2b74: 0x0002, 0x2b75: 0x0002,
+	0x2b76: 0x0002, 0x2b77: 0x0002, 0x2b78: 0x0002, 0x2b79: 0x0002, 0x2b7a: 0x0002, 0x2b7b: 0x0002,
+	0x2b7c: 0x0002, 0x2b7d: 0x0002, 0x2b7e: 0x0002, 0x2b7f: 0x0002,
+	// Block 0xae, offset 0x2b80
+	0x2b80: 0x0004,
+	0x2b87: 0x0004, 0x2b88: 0x0004, 0x2b89: 0x0004, 0x2b8a: 0x0004, 0x2b8b: 0x0004,
+	0x2b8c: 0x0004, 0x2b8d: 0x0004, 0x2b8e: 0x0004, 0x2b8f: 0x0004, 0x2b90: 0x0004, 0x2b91: 0x0004,
+	0x2b92: 0x0004, 0x2b93: 0x0004, 0x2b94: 0x0004, 0x2b95: 0x0004,
+	// Block 0xaf, offset 0x2bc0
+	0x2bf0: 0x0004, 0x2bf1: 0x0004, 0x2bf2: 0x0004, 0x2bf3: 0x0004, 0x2bf4: 0x0004,
+	// Block 0xb0, offset 0x2c00
+	0x2c30: 0x0004, 0x2c31: 0x0004, 0x2c32: 0x0004, 0x2c33: 0x0004, 0x2c34: 0x0004, 0x2c35: 0x0004,
+	0x2c36: 0x0004,
+	// Block 0xb1, offset 0x2c40
+	0x2c4f: 0x0004, 0x2c51: 0x0400,
+	0x2c52: 0x0400, 0x2c53: 0x0400, 0x2c54: 0x0400, 0x2c55: 0x0400, 0x2c56: 0x0400, 0x2c57: 0x0400,
+	0x2c58: 0x0400, 0x2c59: 0x0400, 0x2c5a: 0x0400, 0x2c5b: 0x0400, 0x2c5c: 0x0400, 0x2c5d: 0x0400,
+	0x2c5e: 0x0400, 0x2c5f: 0x0400, 0x2c60: 0x0400, 0x2c61: 0x0400, 0x2c62: 0x0400, 0x2c63: 0x0400,
+	0x2c64: 0x0400, 0x2c65: 0x0400, 0x2c66: 0x0400, 0x2c67: 0x0400, 0x2c68: 0x0400, 0x2c69: 0x0400,
+	0x2c6a: 0x0400, 0x2c6b: 0x0400, 0x2c6c: 0x0400, 0x2c6d: 0x0400, 0x2c6e: 0x0400, 0x2c6f: 0x0400,
+	0x2c70: 0x0400, 0x2c71: 0x0400, 0x2c72: 0x0400, 0x2c73: 0x0400, 0x2c74: 0x0400, 0x2c75: 0x0400,
+	0x2c76: 0x0400, 0x2c77: 0x0400, 0x2c78: 0x0400, 0x2c79: 0x0400, 0x2c7a: 0x0400, 0x2c7b: 0x0400,
+	0x2c7c: 0x0400, 0x2c7d: 0x0400, 0x2c7e: 0x0400, 0x2c7f: 0x0400,
+	// Block 0xb2, offset 0x2c80
+	0x2c80: 0x0400, 0x2c81: 0x0400, 0x2c82: 0x0400, 0x2c83: 0x0400, 0x2c84: 0x0400, 0x2c85: 0x0400,
+	0x2c86: 0x0400, 0x2c87: 0x0400,
+	0x2c8f: 0x0004, 0x2c90: 0x0004, 0x2c91: 0x0004,
+	0x2c92: 0x0004,
+	// Block 0xb3, offset 0x2cc0
+	0x2ce4: 0x0004,
+	0x2cf0: 0x0400, 0x2cf1: 0x0400,
+	// Block 0xb4, offset 0x2d00
+	0x2d1d: 0x0004,
+	0x2d1e: 0x0004, 0x2d20: 0x0002, 0x2d21: 0x0002, 0x2d22: 0x0002, 0x2d23: 0x0002,
+	// Block 0xb5, offset 0x2d40
+	0x2d40: 0x0004, 0x2d41: 0x0004, 0x2d42: 0x0004, 0x2d43: 0x0004, 0x2d44: 0x0004, 0x2d45: 0x0004,
+	0x2d46: 0x0004, 0x2d47: 0x0004, 0x2d48: 0x0004, 0x2d49: 0x0004, 0x2d4a: 0x0004, 0x2d4b: 0x0004,
+	0x2d4c: 0x0004, 0x2d4d: 0x0004, 0x2d4e: 0x0004, 0x2d4f: 0x0004, 0x2d50: 0x0004, 0x2d51: 0x0004,
+	0x2d52: 0x0004, 0x2d53: 0x0004, 0x2d54: 0x0004, 0x2d55: 0x0004, 0x2d56: 0x0004, 0x2d57: 0x0004,
+	0x2d58: 0x0004, 0x2d59: 0x0004, 0x2d5a: 0x0004, 0x2d5b: 0x0004, 0x2d5c: 0x0004, 0x2d5d: 0x0004,
+	0x2d5e: 0x0004, 0x2d5f: 0x0004, 0x2d60: 0x0004, 0x2d61: 0x0004, 0x2d62: 0x0004, 0x2d63: 0x0004,
+	0x2d64: 0x0004, 0x2d65: 0x0004, 0x2d66: 0x0004, 0x2d67: 0x0004, 0x2d68: 0x0004, 0x2d69: 0x0004,
+	0x2d6a: 0x0004, 0x2d6b: 0x0004, 0x2d6c: 0x0004, 0x2d6d: 0x0004,
+	0x2d70: 0x0004, 0x2d71: 0x0004, 0x2d72: 0x0004, 0x2d73: 0x0004, 0x2d74: 0x0004, 0x2d75: 0x0004,
+	0x2d76: 0x0004, 0x2d77: 0x0004, 0x2d78: 0x0004, 0x2d79: 0x0004, 0x2d7a: 0x0004, 0x2d7b: 0x0004,
+	0x2d7c: 0x0004, 0x2d7d: 0x0004, 0x2d7e: 0x0004, 0x2d7f: 0x0004,
+	// Block 0xb6, offset 0x2d80
+	0x2d80: 0x0004, 0x2d81: 0x0004, 0x2d82: 0x0004, 0x2d83: 0x0004, 0x2d84: 0x0004, 0x2d85: 0x0004,
+	0x2d86: 0x0004,
+	// Block 0xb7, offset 0x2dc0
+	0x2de5: 0x0004, 0x2de6: 0x0400, 0x2de7: 0x0004, 0x2de8: 0x0004, 0x2de9: 0x0004,
+	0x2ded: 0x0400, 0x2dee: 0x0004, 0x2def: 0x0004,
+	0x2df0: 0x0004, 0x2df1: 0x0004, 0x2df2: 0x0004, 0x2df3: 0x0002, 0x2df4: 0x0002, 0x2df5: 0x0002,
+	0x2df6: 0x0002, 0x2df7: 0x0002, 0x2df8: 0x0002, 0x2df9: 0x0002, 0x2dfa: 0x0002, 0x2dfb: 0x0004,
+	0x2dfc: 0x0004, 0x2dfd: 0x0004, 0x2dfe: 0x0004, 0x2dff: 0x0004,
+	// Block 0xb8, offset 0x2e00
+	0x2e00: 0x0004, 0x2e01: 0x0004, 0x2e02: 0x0004, 0x2e05: 0x0004,
+	0x2e06: 0x0004, 0x2e07: 0x0004, 0x2e08: 0x0004, 0x2e09: 0x0004, 0x2e0a: 0x0004, 0x2e0b: 0x0004,
+	0x2e2a: 0x0004, 0x2e2b: 0x0004, 0x2e2c: 0x0004, 0x2e2d: 0x0004,
+	// Block 0xb9, offset 0x2e40
+	0x2e42: 0x0004, 0x2e43: 0x0004, 0x2e44: 0x0004,
+	// Block 0xba, offset 0x2e80
+	0x2e80: 0x0004, 0x2e81: 0x0004, 0x2e82: 0x0004, 0x2e83: 0x0004, 0x2e84: 0x0004, 0x2e85: 0x0004,
+	0x2e86: 0x0004, 0x2e87: 0x0004, 0x2e88: 0x0004, 0x2e89: 0x0004, 0x2e8a: 0x0004, 0x2e8b: 0x0004,
+	0x2e8c: 0x0004, 0x2e8d: 0x0004, 0x2e8e: 0x0004, 0x2e8f: 0x0004, 0x2e90: 0x0004, 0x2e91: 0x0004,
+	0x2e92: 0x0004, 0x2e93: 0x0004, 0x2e94: 0x0004, 0x2e95: 0x0004, 0x2e96: 0x0004, 0x2e97: 0x0004,
+	0x2e98: 0x0004, 0x2e99: 0x0004, 0x2e9a: 0x0004, 0x2e9b: 0x0004, 0x2e9c: 0x0004, 0x2e9d: 0x0004,
+	0x2e9e: 0x0004, 0x2e9f: 0x0004, 0x2ea0: 0x0004, 0x2ea1: 0x0004, 0x2ea2: 0x0004, 0x2ea3: 0x0004,
+	0x2ea4: 0x0004, 0x2ea5: 0x0004, 0x2ea6: 0x0004, 0x2ea7: 0x0004, 0x2ea8: 0x0004, 0x2ea9: 0x0004,
+	0x2eaa: 0x0004, 0x2eab: 0x0004, 0x2eac: 0x0004, 0x2ead: 0x0004, 0x2eae: 0x0004, 0x2eaf: 0x0004,
+	0x2eb0: 0x0004, 0x2eb1: 0x0004, 0x2eb2: 0x0004, 0x2eb3: 0x0004, 0x2eb4: 0x0004, 0x2eb5: 0x0004,
+	0x2eb6: 0x0004, 0x2ebb: 0x0004,
+	0x2ebc: 0x0004, 0x2ebd: 0x0004, 0x2ebe: 0x0004, 0x2ebf: 0x0004,
+	// Block 0xbb, offset 0x2ec0
+	0x2ec0: 0x0004, 0x2ec1: 0x0004, 0x2ec2: 0x0004, 0x2ec3: 0x0004, 0x2ec4: 0x0004, 0x2ec5: 0x0004,
+	0x2ec6: 0x0004, 0x2ec7: 0x0004, 0x2ec8: 0x0004, 0x2ec9: 0x0004, 0x2eca: 0x0004, 0x2ecb: 0x0004,
+	0x2ecc: 0x0004, 0x2ecd: 0x0004, 0x2ece: 0x0004, 0x2ecf: 0x0004, 0x2ed0: 0x0004, 0x2ed1: 0x0004,
+	0x2ed2: 0x0004, 0x2ed3: 0x0004, 0x2ed4: 0x0004, 0x2ed5: 0x0004, 0x2ed6: 0x0004, 0x2ed7: 0x0004,
+	0x2ed8: 0x0004, 0x2ed9: 0x0004, 0x2eda: 0x0004, 0x2edb: 0x0004, 0x2edc: 0x0004, 0x2edd: 0x0004,
+	0x2ede: 0x0004, 0x2edf: 0x0004, 0x2ee0: 0x0004, 0x2ee1: 0x0004, 0x2ee2: 0x0004, 0x2ee3: 0x0004,
+	0x2ee4: 0x0004, 0x2ee5: 0x0004, 0x2ee6: 0x0004, 0x2ee7: 0x0004, 0x2ee8: 0x0004, 0x2ee9: 0x0004,
+	0x2eea: 0x0004, 0x2eeb: 0x0004, 0x2eec: 0x0004,
+	0x2ef5: 0x0004,
+	// Block 0xbc, offset 0x2f00
+	0x2f04: 0x0004,
+	0x2f1b: 0x0004, 0x2f1c: 0x0004, 0x2f1d: 0x0004,
+	0x2f1e: 0x0004, 0x2f1f: 0x0004, 0x2f21: 0x0004, 0x2f22: 0x0004, 0x2f23: 0x0004,
+	0x2f24: 0x0004, 0x2f25: 0x0004, 0x2f26: 0x0004, 0x2f27: 0x0004, 0x2f28: 0x0004, 0x2f29: 0x0004,
+	0x2f2a: 0x0004, 0x2f2b: 0x0004, 0x2f2c: 0x0004, 0x2f2d: 0x0004, 0x2f2e: 0x0004, 0x2f2f: 0x0004,
+	// Block 0xbd, offset 0x2f40
+	0x2f40: 0x0004, 0x2f41: 0x0004, 0x2f42: 0x0004, 0x2f43: 0x0004, 0x2f44: 0x0004, 0x2f45: 0x0004,
+	0x2f46: 0x0004, 0x2f48: 0x0004, 0x2f49: 0x0004, 0x2f4a: 0x0004, 0x2f4b: 0x0004,
+	0x2f4c: 0x0004, 0x2f4d: 0x0004, 0x2f4e: 0x0004, 0x2f4f: 0x0004, 0x2f50: 0x0004, 0x2f51: 0x0004,
+	0x2f52: 0x0004, 0x2f53: 0x0004, 0x2f54: 0x0004, 0x2f55: 0x0004, 0x2f56: 0x0004, 0x2f57: 0x0004,
+	0x2f58: 0x0004, 0x2f5b: 0x0004, 0x2f5c: 0x0004, 0x2f5d: 0x0004,
+	0x2f5e: 0x0004, 0x2f5f: 0x0004, 0x2f60: 0x0004, 0x2f61: 0x0004, 0x2f63: 0x0004,
+	0x2f64: 0x0004, 0x2f66: 0x0004, 0x2f67: 0x0004, 0x2f68: 0x0004, 0x2f69: 0x0004,
+	0x2f6a: 0x0004,
+	// Block 0xbe, offset 0x2f80
+	0x2f8f: 0x0004,
+	// Block 0xbf, offset 0x2fc0
+	0x2fee: 0x0004,
+	// Block 0xc0, offset 0x3000
+	0x302c: 0x0004, 0x302d: 0x0004, 0x302e: 0x0004, 0x302f: 0x0004,
+	// Block 0xc1, offset 0x3040
+	0x3050: 0x0004, 0x3051: 0x0004,
+	0x3052: 0x0004, 0x3053: 0x0004, 0x3054: 0x0004, 0x3055: 0x0004, 0x3056: 0x0004,
+	// Block 0xc2, offset 0x3080
+	0x3084: 0x0004, 0x3085: 0x0004,
+	0x3086: 0x0004, 0x3087: 0x0004, 0x3088: 0x0004, 0x3089: 0x0004, 0x308a: 0x0004,
+	// Block 0xc3, offset 0x30c0
+	0x30cd: 0x0008, 0x30ce: 0x0008, 0x30cf: 0x0008,
+	0x30ef: 0x0008,
+	// Block 0xc4, offset 0x3100
+	0x312c: 0x0008, 0x312d: 0x0008, 0x312e: 0x0008, 0x312f: 0x0008,
+	0x3130: 0x0008, 0x3131: 0x0008,
+	0x313e: 0x0008, 0x313f: 0x0008,
+	// Block 0xc5, offset 0x3140
+	0x314e: 0x0008, 0x3151: 0x0008,
+	0x3152: 0x0008, 0x3153: 0x0008, 0x3154: 0x0008, 0x3155: 0x0008, 0x3156: 0x0008, 0x3157: 0x0008,
+	0x3158: 0x0008, 0x3159: 0x0008, 0x315a: 0x0008,
+	0x316d: 0x0008, 0x316e: 0x0008, 0x316f: 0x0008,
+	0x3170: 0x0008, 0x3171: 0x0008, 0x3172: 0x0008, 0x3173: 0x0008, 0x3174: 0x0008, 0x3175: 0x0008,
+	0x3176: 0x0008, 0x3177: 0x0008, 0x3178: 0x0008, 0x3179: 0x0008, 0x317a: 0x0008, 0x317b: 0x0008,
+	0x317c: 0x0008, 0x317d: 0x0008, 0x317e: 0x0008, 0x317f: 0x0008,
+	// Block 0xc6, offset 0x3180
+	0x3180: 0x0008, 0x3181: 0x0008, 0x3182: 0x0008, 0x3183: 0x0008, 0x3184: 0x0008, 0x3185: 0x0008,
+	0x3186: 0x0008, 0x3187: 0x0008, 0x3188: 0x0008, 0x3189: 0x0008, 0x318a: 0x0008, 0x318b: 0x0008,
+	0x318c: 0x0008, 0x318d: 0x0008, 0x318e: 0x0008, 0x318f: 0x0008, 0x3190: 0x0008, 0x3191: 0x0008,
+	0x3192: 0x0008, 0x3193: 0x0008, 0x3194: 0x0008, 0x3195: 0x0008, 0x3196: 0x0008, 0x3197: 0x0008,
+	0x3198: 0x0008, 0x3199: 0x0008, 0x319a: 0x0008, 0x319b: 0x0008, 0x319c: 0x0008, 0x319d: 0x0008,
+	0x319e: 0x0008, 0x319f: 0x0008, 0x31a0: 0x0008, 0x31a1: 0x0008, 0x31a2: 0x0008, 0x31a3: 0x0008,
+	0x31a4: 0x0008, 0x31a5: 0x0008, 0x31a6: 0x0200, 0x31a7: 0x0200, 0x31a8: 0x0200, 0x31a9: 0x0200,
+	0x31aa: 0x0200, 0x31ab: 0x0200, 0x31ac: 0x0200, 0x31ad: 0x0200, 0x31ae: 0x0200, 0x31af: 0x0200,
+	0x31b0: 0x0200, 0x31b1: 0x0200, 0x31b2: 0x0200, 0x31b3: 0x0200, 0x31b4: 0x0200, 0x31b5: 0x0200,
+	0x31b6: 0x0200, 0x31b7: 0x0200, 0x31b8: 0x0200, 0x31b9: 0x0200, 0x31ba: 0x0200, 0x31bb: 0x0200,
+	0x31bc: 0x0200, 0x31bd: 0x0200, 0x31be: 0x0200, 0x31bf: 0x0200,
+	// Block 0xc7, offset 0x31c0
+	0x31c1: 0x0008, 0x31c2: 0x0008, 0x31c3: 0x0008, 0x31c4: 0x0008, 0x31c5: 0x0008,
+	0x31c6: 0x0008, 0x31c7: 0x0008, 0x31c8: 0x0008, 0x31c9: 0x0008, 0x31ca: 0x0008, 0x31cb: 0x0008,
+	0x31cc: 0x0008, 0x31cd: 0x0008, 0x31ce: 0x0008, 0x31cf: 0x0008,
+	0x31da: 0x0008,
+	0x31ef: 0x0008,
+	0x31f2: 0x0008, 0x31f3: 0x0008, 0x31f4: 0x0008, 0x31f5: 0x0008,
+	0x31f6: 0x0008, 0x31f7: 0x0008, 0x31f8: 0x0008, 0x31f9: 0x0008, 0x31fa: 0x0008,
+	0x31fc: 0x0008, 0x31fd: 0x0008, 0x31fe: 0x0008, 0x31ff: 0x0008,
+	// Block 0xc8, offset 0x3200
+	0x3209: 0x0008, 0x320a: 0x0008, 0x320b: 0x0008,
+	0x320c: 0x0008, 0x320d: 0x0008, 0x320e: 0x0008, 0x320f: 0x0008, 0x3210: 0x0008, 0x3211: 0x0008,
+	0x3212: 0x0008, 0x3213: 0x0008, 0x3214: 0x0008, 0x3215: 0x0008, 0x3216: 0x0008, 0x3217: 0x0008,
+	0x3218: 0x0008, 0x3219: 0x0008, 0x321a: 0x0008, 0x321b: 0x0008, 0x321c: 0x0008, 0x321d: 0x0008,
+	0x321e: 0x0008, 0x321f: 0x0008, 0x3220: 0x0008, 0x3221: 0x0008, 0x3222: 0x0008, 0x3223: 0x0008,
+	0x3224: 0x0008, 0x3225: 0x0008, 0x3226: 0x0008, 0x3227: 0x0008, 0x3228: 0x0008, 0x3229: 0x0008,
+	0x322a: 0x0008, 0x322b: 0x0008, 0x322c: 0x0008, 0x322d: 0x0008, 0x322e: 0x0008, 0x322f: 0x0008,
+	0x3230: 0x0008, 0x3231: 0x0008, 0x3232: 0x0008, 0x3233: 0x0008, 0x3234: 0x0008, 0x3235: 0x0008,
+	0x3236: 0x0008, 0x3237: 0x0008, 0x3238: 0x0008, 0x3239: 0x0008, 0x323a: 0x0008, 0x323b: 0x0008,
+	0x323c: 0x0008, 0x323d: 0x0008, 0x323e: 0x0008, 0x323f: 0x0008,
+	// Block 0xc9, offset 0x3240
+	0x3240: 0x0008, 0x3241: 0x0008, 0x3242: 0x0008, 0x3243: 0x0008, 0x3244: 0x0008, 0x3245: 0x0008,
+	0x3246: 0x0008, 0x3247: 0x0008, 0x3248: 0x0008, 0x3249: 0x0008, 0x324a: 0x0008, 0x324b: 0x0008,
+	0x324c: 0x0008, 0x324d: 0x0008, 0x324e: 0x0008, 0x324f: 0x0008, 0x3250: 0x0008, 0x3251: 0x0008,
+	0x3252: 0x0008, 0x3253: 0x0008, 0x3254: 0x0008, 0x3255: 0x0008, 0x3256: 0x0008, 0x3257: 0x0008,
+	0x3258: 0x0008, 0x3259: 0x0008, 0x325a: 0x0008, 0x325b: 0x0008, 0x325c: 0x0008, 0x325d: 0x0008,
+	0x325e: 0x0008, 0x325f: 0x0008, 0x3260: 0x0008, 0x3261: 0x0008, 0x3262: 0x0008, 0x3263: 0x0008,
+	0x3264: 0x0008, 0x3265: 0x0008, 0x3266: 0x0008, 0x3267: 0x0008, 0x3268: 0x0008, 0x3269: 0x0008,
+	0x326a: 0x0008, 0x326b: 0x0008, 0x326c: 0x0008, 0x326d: 0x0008, 0x326e: 0x0008, 0x326f: 0x0008,
+	0x3270: 0x0008, 0x3271: 0x0008, 0x3272: 0x0008, 0x3273: 0x0008, 0x3274: 0x0008, 0x3275: 0x0008,
+	0x3276: 0x0008, 0x3277: 0x0008, 0x3278: 0x0008, 0x3279: 0x0008, 0x327a: 0x0008, 0x327b: 0x0004,
+	0x327c: 0x0004, 0x327d: 0x0004, 0x327e: 0x0004, 0x327f: 0x0004,
+	// Block 0xca, offset 0x3280
+	0x3280: 0x0008, 0x3281: 0x0008, 0x3282: 0x0008, 0x3283: 0x0008, 0x3284: 0x0008, 0x3285: 0x0008,
+	0x3286: 0x0008, 0x3287: 0x0008, 0x3288: 0x0008, 0x3289: 0x0008, 0x328a: 0x0008, 0x328b: 0x0008,
+	0x328c: 0x0008, 0x328d: 0x0008, 0x328e: 0x0008, 0x328f: 0x0008, 0x3290: 0x0008, 0x3291: 0x0008,
+	0x3292: 0x0008, 0x3293: 0x0008, 0x3294: 0x0008, 0x3295: 0x0008, 0x3296: 0x0008, 0x3297: 0x0008,
+	0x3298: 0x0008, 0x3299: 0x0008, 0x329a: 0x0008, 0x329b: 0x0008, 0x329c: 0x0008, 0x329d: 0x0008,
+	0x329e: 0x0008, 0x329f: 0x0008, 0x32a0: 0x0008, 0x32a1: 0x0008, 0x32a2: 0x0008, 0x32a3: 0x0008,
+	0x32a4: 0x0008, 0x32a5: 0x0008, 0x32a6: 0x0008, 0x32a7: 0x0008, 0x32a8: 0x0008, 0x32a9: 0x0008,
+	0x32aa: 0x0008, 0x32ab: 0x0008, 0x32ac: 0x0008, 0x32ad: 0x0008, 0x32ae: 0x0008, 0x32af: 0x0008,
+	0x32b0: 0x0008, 0x32b1: 0x0008, 0x32b2: 0x0008, 0x32b3: 0x0008, 0x32b4: 0x0008, 0x32b5: 0x0008,
+	0x32b6: 0x0008, 0x32b7: 0x0008, 0x32b8: 0x0008, 0x32b9: 0x0008, 0x32ba: 0x0008, 0x32bb: 0x0008,
+	0x32bc: 0x0008, 0x32bd: 0x0008,
+	// Block 0xcb, offset 0x32c0
+	0x32c6: 0x0008, 0x32c7: 0x0008, 0x32c8: 0x0008, 0x32c9: 0x0008, 0x32ca: 0x0008, 0x32cb: 0x0008,
+	0x32cc: 0x0008, 0x32cd: 0x0008, 0x32ce: 0x0008, 0x32cf: 0x0008, 0x32d0: 0x0008, 0x32d1: 0x0008,
+	0x32d2: 0x0008, 0x32d3: 0x0008, 0x32d4: 0x0008, 0x32d5: 0x0008, 0x32d6: 0x0008, 0x32d7: 0x0008,
+	0x32d8: 0x0008, 0x32d9: 0x0008, 0x32da: 0x0008, 0x32db: 0x0008, 0x32dc: 0x0008, 0x32dd: 0x0008,
+	0x32de: 0x0008, 0x32df: 0x0008, 0x32e0: 0x0008, 0x32e1: 0x0008, 0x32e2: 0x0008, 0x32e3: 0x0008,
+	0x32e4: 0x0008, 0x32e5: 0x0008, 0x32e6: 0x0008, 0x32e7: 0x0008, 0x32e8: 0x0008, 0x32e9: 0x0008,
+	0x32ea: 0x0008, 0x32eb: 0x0008, 0x32ec: 0x0008, 0x32ed: 0x0008, 0x32ee: 0x0008, 0x32ef: 0x0008,
+	0x32f0: 0x0008, 0x32f1: 0x0008, 0x32f2: 0x0008, 0x32f3: 0x0008, 0x32f4: 0x0008, 0x32f5: 0x0008,
+	0x32f6: 0x0008, 0x32f7: 0x0008, 0x32f8: 0x0008, 0x32f9: 0x0008, 0x32fa: 0x0008, 0x32fb: 0x0008,
+	0x32fc: 0x0008, 0x32fd: 0x0008, 0x32fe: 0x0008, 0x32ff: 0x0008,
+	// Block 0xcc, offset 0x3300
+	0x3300: 0x0008, 0x3301: 0x0008, 0x3302: 0x0008, 0x3303: 0x0008, 0x3304: 0x0008, 0x3305: 0x0008,
+	0x3306: 0x0008, 0x3307: 0x0008, 0x3308: 0x0008, 0x3309: 0x0008, 0x330a: 0x0008, 0x330b: 0x0008,
+	0x330c: 0x0008, 0x330d: 0x0008, 0x330e: 0x0008, 0x330f: 0x0008,
+	// Block 0xcd, offset 0x3340
+	0x3374: 0x0008, 0x3375: 0x0008,
+	0x3376: 0x0008, 0x3377: 0x0008, 0x3378: 0x0008, 0x3379: 0x0008, 0x337a: 0x0008, 0x337b: 0x0008,
+	0x337c: 0x0008, 0x337d: 0x0008, 0x337e: 0x0008, 0x337f: 0x0008,
+	// Block 0xce, offset 0x3380
+	0x3395: 0x0008, 0x3396: 0x0008, 0x3397: 0x0008,
+	0x3398: 0x0008, 0x3399: 0x0008, 0x339a: 0x0008, 0x339b: 0x0008, 0x339c: 0x0008, 0x339d: 0x0008,
+	0x339e: 0x0008, 0x339f: 0x0008, 0x33a0: 0x0008, 0x33a1: 0x0008, 0x33a2: 0x0008, 0x33a3: 0x0008,
+	0x33a4: 0x0008, 0x33a5: 0x0008, 0x33a6: 0x0008, 0x33a7: 0x0008, 0x33a8: 0x0008, 0x33a9: 0x0008,
+	0x33aa: 0x0008, 0x33ab: 0x0008, 0x33ac: 0x0008, 0x33ad: 0x0008, 0x33ae: 0x0008, 0x33af: 0x0008,
+	0x33b0: 0x0008, 0x33b1: 0x0008, 0x33b2: 0x0008, 0x33b3: 0x0008, 0x33b4: 0x0008, 0x33b5: 0x0008,
+	0x33b6: 0x0008, 0x33b7: 0x0008, 0x33b8: 0x0008, 0x33b9: 0x0008, 0x33ba: 0x0008, 0x33bb: 0x0008,
+	0x33bc: 0x0008, 0x33bd: 0x0008, 0x33be: 0x0008, 0x33bf: 0x0008,
+	// Block 0xcf, offset 0x33c0
+	0x33cc: 0x0008, 0x33cd: 0x0008, 0x33ce: 0x0008, 0x33cf: 0x0008,
+	// Block 0xd0, offset 0x3400
+	0x3408: 0x0008, 0x3409: 0x0008, 0x340a: 0x0008, 0x340b: 0x0008,
+	0x340c: 0x0008, 0x340d: 0x0008, 0x340e: 0x0008, 0x340f: 0x0008,
+	0x341a: 0x0008, 0x341b: 0x0008, 0x341c: 0x0008, 0x341d: 0x0008,
+	0x341e: 0x0008, 0x341f: 0x0008,
+	// Block 0xd1, offset 0x3440
+	0x3448: 0x0008, 0x3449: 0x0008, 0x344a: 0x0008, 0x344b: 0x0008,
+	0x344c: 0x0008, 0x344d: 0x0008, 0x344e: 0x0008, 0x344f: 0x0008,
+	0x346e: 0x0008, 0x346f: 0x0008,
+	0x3470: 0x0008, 0x3471: 0x0008, 0x3472: 0x0008, 0x3473: 0x0008, 0x3474: 0x0008, 0x3475: 0x0008,
+	0x3476: 0x0008, 0x3477: 0x0008, 0x3478: 0x0008, 0x3479: 0x0008, 0x347a: 0x0008, 0x347b: 0x0008,
+	0x347c: 0x0008, 0x347d: 0x0008, 0x347e: 0x0008, 0x347f: 0x0008,
+	// Block 0xd2, offset 0x3480
+	0x348c: 0x0008, 0x348d: 0x0008, 0x348e: 0x0008, 0x348f: 0x0008, 0x3490: 0x0008, 0x3491: 0x0008,
+	0x3492: 0x0008, 0x3493: 0x0008, 0x3494: 0x0008, 0x3495: 0x0008, 0x3496: 0x0008, 0x3497: 0x0008,
+	0x3498: 0x0008, 0x3499: 0x0008, 0x349a: 0x0008, 0x349b: 0x0008, 0x349c: 0x0008, 0x349d: 0x0008,
+	0x349e: 0x0008, 0x349f: 0x0008, 0x34a0: 0x0008, 0x34a1: 0x0008, 0x34a2: 0x0008, 0x34a3: 0x0008,
+	0x34a4: 0x0008, 0x34a5: 0x0008, 0x34a6: 0x0008, 0x34a7: 0x0008, 0x34a8: 0x0008, 0x34a9: 0x0008,
+	0x34aa: 0x0008, 0x34ab: 0x0008, 0x34ac: 0x0008, 0x34ad: 0x0008, 0x34ae: 0x0008, 0x34af: 0x0008,
+	0x34b0: 0x0008, 0x34b1: 0x0008, 0x34b2: 0x0008, 0x34b3: 0x0008, 0x34b4: 0x0008, 0x34b5: 0x0008,
+	0x34b6: 0x0008, 0x34b7: 0x0008, 0x34b8: 0x0008, 0x34b9: 0x0008, 0x34ba: 0x0008,
+	0x34bc: 0x0008, 0x34bd: 0x0008, 0x34be: 0x0008, 0x34bf: 0x0008,
+	// Block 0xd3, offset 0x34c0
+	0x34c0: 0x0008, 0x34c1: 0x0008, 0x34c2: 0x0008, 0x34c3: 0x0008, 0x34c4: 0x0008, 0x34c5: 0x0008,
+	0x34c7: 0x0008, 0x34c8: 0x0008, 0x34c9: 0x0008, 0x34ca: 0x0008, 0x34cb: 0x0008,
+	0x34cc: 0x0008, 0x34cd: 0x0008, 0x34ce: 0x0008, 0x34cf: 0x0008, 0x34d0: 0x0008, 0x34d1: 0x0008,
+	0x34d2: 0x0008, 0x34d3: 0x0008, 0x34d4: 0x0008, 0x34d5: 0x0008, 0x34d6: 0x0008, 0x34d7: 0x0008,
+	0x34d8: 0x0008, 0x34d9: 0x0008, 0x34da: 0x0008, 0x34db: 0x0008, 0x34dc: 0x0008, 0x34dd: 0x0008,
+	0x34de: 0x0008, 0x34df: 0x0008, 0x34e0: 0x0008, 0x34e1: 0x0008, 0x34e2: 0x0008, 0x34e3: 0x0008,
+	0x34e4: 0x0008, 0x34e5: 0x0008, 0x34e6: 0x0008, 0x34e7: 0x0008, 0x34e8: 0x0008, 0x34e9: 0x0008,
+	0x34ea: 0x0008, 0x34eb: 0x0008, 0x34ec: 0x0008, 0x34ed: 0x0008, 0x34ee: 0x0008, 0x34ef: 0x0008,
+	0x34f0: 0x0008, 0x34f1: 0x0008, 0x34f2: 0x0008, 0x34f3: 0x0008, 0x34f4: 0x0008, 0x34f5: 0x0008,
+	0x34f6: 0x0008, 0x34f7: 0x0008, 0x34f8: 0x0008, 0x34f9: 0x0008, 0x34fa: 0x0008, 0x34fb: 0x0008,
+	0x34fc: 0x0008, 0x34fd: 0x0008, 0x34fe: 0x0008, 0x34ff: 0x0008,
+	// Block 0xd4, offset 0x3500
+	0x3500: 0x0002, 0x3501: 0x0002, 0x3502: 0x0002, 0x3503: 0x0002, 0x3504: 0x0002, 0x3505: 0x0002,
+	0x3506: 0x0002, 0x3507: 0x0002, 0x3508: 0x0002, 0x3509: 0x0002, 0x350a: 0x0002, 0x350b: 0x0002,
+	0x350c: 0x0002, 0x350d: 0x0002, 0x350e: 0x0002, 0x350f: 0x0002, 0x3510: 0x0002, 0x3511: 0x0002,
+	0x3512: 0x0002, 0x3513: 0x0002, 0x3514: 0x0002, 0x3515: 0x0002, 0x3516: 0x0002, 0x3517: 0x0002,
+	0x3518: 0x0002, 0x3519: 0x0002, 0x351a: 0x0002, 0x351b: 0x0002, 0x351c: 0x0002, 0x351d: 0x0002,
+	0x351e: 0x0002, 0x351f: 0x0002, 0x3520: 0x0004, 0x3521: 0x0004, 0x3522: 0x0004, 0x3523: 0x0004,
+	0x3524: 0x0004, 0x3525: 0x0004, 0x3526: 0x0004, 0x3527: 0x0004, 0x3528: 0x0004, 0x3529: 0x0004,
+	0x352a: 0x0004, 0x352b: 0x0004, 0x352c: 0x0004, 0x352d: 0x0004, 0x352e: 0x0004, 0x352f: 0x0004,
+	0x3530: 0x0004, 0x3531: 0x0004, 0x3532: 0x0004, 0x3533: 0x0004, 0x3534: 0x0004, 0x3535: 0x0004,
+	0x3536: 0x0004, 0x3537: 0x0004, 0x3538: 0x0004, 0x3539: 0x0004, 0x353a: 0x0004, 0x353b: 0x0004,
+	0x353c: 0x0004, 0x353d: 0x0004, 0x353e: 0x0004, 0x353f: 0x0004,
+	// Block 0xd5, offset 0x3540
+	0x3540: 0x0002, 0x3541: 0x0002, 0x3542: 0x0002, 0x3543: 0x0002, 0x3544: 0x0002, 0x3545: 0x0002,
+	0x3546: 0x0002, 0x3547: 0x0002, 0x3548: 0x0002, 0x3549: 0x0002, 0x354a: 0x0002, 0x354b: 0x0002,
+	0x354c: 0x0002, 0x354d: 0x0002, 0x354e: 0x0002, 0x354f: 0x0002, 0x3550: 0x0002, 0x3551: 0x0002,
+	0x3552: 0x0002, 0x3553: 0x0002, 0x3554: 0x0002, 0x3555: 0x0002, 0x3556: 0x0002, 0x3557: 0x0002,
+	0x3558: 0x0002, 0x3559: 0x0002, 0x355a: 0x0002, 0x355b: 0x0002, 0x355c: 0x0002, 0x355d: 0x0002,
+	0x355e: 0x0002, 0x355f: 0x0002, 0x3560: 0x0002, 0x3561: 0x0002, 0x3562: 0x0002, 0x3563: 0x0002,
+	0x3564: 0x0002, 0x3565: 0x0002, 0x3566: 0x0002, 0x3567: 0x0002, 0x3568: 0x0002, 0x3569: 0x0002,
+	0x356a: 0x0002, 0x356b: 0x0002, 0x356c: 0x0002, 0x356d: 0x0002, 0x356e: 0x0002, 0x356f: 0x0002,
+	0x3570: 0x0002, 0x3571: 0x0002, 0x3572: 0x0002, 0x3573: 0x0002, 0x3574: 0x0002, 0x3575: 0x0002,
+	0x3576: 0x0002, 0x3577: 0x0002, 0x3578: 0x0002, 0x3579: 0x0002, 0x357a: 0x0002, 0x357b: 0x0002,
+	0x357c: 0x0002, 0x357d: 0x0002, 0x357e: 0x0002, 0x357f: 0x0002,
+	// Block 0xd6, offset 0x3580
+	0x3580: 0x0004, 0x3581: 0x0004, 0x3582: 0x0004, 0x3583: 0x0004, 0x3584: 0x0004, 0x3585: 0x0004,
+	0x3586: 0x0004, 0x3587: 0x0004, 0x3588: 0x0004, 0x3589: 0x0004, 0x358a: 0x0004, 0x358b: 0x0004,
+	0x358c: 0x0004, 0x358d: 0x0004, 0x358e: 0x0004, 0x358f: 0x0004, 0x3590: 0x0004, 0x3591: 0x0004,
+	0x3592: 0x0004, 0x3593: 0x0004, 0x3594: 0x0004, 0x3595: 0x0004, 0x3596: 0x0004, 0x3597: 0x0004,
+	0x3598: 0x0004, 0x3599: 0x0004, 0x359a: 0x0004, 0x359b: 0x0004, 0x359c: 0x0004, 0x359d: 0x0004,
+	0x359e: 0x0004, 0x359f: 0x0004, 0x35a0: 0x0004, 0x35a1: 0x0004, 0x35a2: 0x0004, 0x35a3: 0x0004,
+	0x35a4: 0x0004, 0x35a5: 0x0004, 0x35a6: 0x0004, 0x35a7: 0x0004, 0x35a8: 0x0004, 0x35a9: 0x0004,
+	0x35aa: 0x0004, 0x35ab: 0x0004, 0x35ac: 0x0004, 0x35ad: 0x0004, 0x35ae: 0x0004, 0x35af: 0x0004,
+	0x35b0: 0x0002, 0x35b1: 0x0002, 0x35b2: 0x0002, 0x35b3: 0x0002, 0x35b4: 0x0002, 0x35b5: 0x0002,
+	0x35b6: 0x0002, 0x35b7: 0x0002, 0x35b8: 0x0002, 0x35b9: 0x0002, 0x35ba: 0x0002, 0x35bb: 0x0002,
+	0x35bc: 0x0002, 0x35bd: 0x0002, 0x35be: 0x0002, 0x35bf: 0x0002,
+}
+
+// graphemesIndex: 25 blocks, 1600 entries, 1600 bytes
+// Block 0 is the zero block.
+var graphemesIndex = [1600]property{
+	// Block 0x0, offset 0x0
+	// Block 0x1, offset 0x40
+	// Block 0x2, offset 0x80
+	// Block 0x3, offset 0xc0
+	0xc2: 0x01,
+	0xcc: 0x02, 0xcd: 0x03,
+	0xd2: 0x04, 0xd6: 0x05, 0xd7: 0x06,
+	0xd8: 0x07, 0xd9: 0x08, 0xdb: 0x09, 0xdc: 0x0a, 0xdd: 0x0b, 0xde: 0x0c, 0xdf: 0x0d,
+	0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05,
+	0xea: 0x06, 0xeb: 0x07, 0xec: 0x08, 0xed: 0x09, 0xef: 0x0a,
+	0xf0: 0x14, 0xf3: 0x16,
+	// Block 0x4, offset 0x100
+	0x120: 0x0e, 0x121: 0x0f, 0x122: 0x10, 0x123: 0x11, 0x124: 0x12, 0x125: 0x13, 0x126: 0x14, 0x127: 0x15,
+	0x128: 0x16, 0x129: 0x17, 0x12a: 0x16, 0x12b: 0x18, 0x12c: 0x19, 0x12d: 0x1a, 0x12e: 0x1b, 0x12f: 0x1c,
+	0x130: 0x1d, 0x131: 0x1e, 0x132: 0x1f, 0x133: 0x20, 0x134: 0x21, 0x135: 0x22, 0x136: 0x23, 0x137: 0x24,
+	0x138: 0x25, 0x139: 0x26, 0x13a: 0x27, 0x13b: 0x28, 0x13c: 0x29, 0x13d: 0x2a, 0x13e: 0x2b, 0x13f: 0x2c,
+	// Block 0x5, offset 0x140
+	0x140: 0x2d, 0x141: 0x2e, 0x142: 0x2f, 0x144: 0x30, 0x145: 0x31, 0x146: 0x32, 0x147: 0x33,
+	0x14d: 0x34,
+	0x15c: 0x35, 0x15d: 0x36, 0x15e: 0x37, 0x15f: 0x38,
+	0x160: 0x39, 0x162: 0x3a, 0x164: 0x3b,
+	0x168: 0x3c, 0x169: 0x3d, 0x16a: 0x3e, 0x16b: 0x3f, 0x16c: 0x40, 0x16d: 0x41, 0x16e: 0x42, 0x16f: 0x43,
+	0x170: 0x44, 0x173: 0x45, 0x177: 0x02,
+	// Block 0x6, offset 0x180
+	0x180: 0x46, 0x181: 0x47, 0x183: 0x48, 0x184: 0x49, 0x186: 0x4a,
+	0x18c: 0x4b, 0x18e: 0x4c, 0x18f: 0x4d,
+	0x193: 0x4e, 0x196: 0x4f, 0x197: 0x50,
+	0x198: 0x51, 0x199: 0x52, 0x19a: 0x53, 0x19b: 0x52, 0x19c: 0x54, 0x19d: 0x55, 0x19e: 0x56,
+	0x1a4: 0x57,
+	0x1ac: 0x58, 0x1ad: 0x59,
+	0x1b3: 0x5a, 0x1b5: 0x5b, 0x1b7: 0x5c,
+	// Block 0x7, offset 0x1c0
+	0x1c0: 0x5d, 0x1c2: 0x5e,
+	0x1ca: 0x5f,
+	// Block 0x8, offset 0x200
+	0x219: 0x60, 0x21a: 0x61, 0x21b: 0x62,
+	0x220: 0x63, 0x222: 0x64, 0x223: 0x65, 0x224: 0x66, 0x225: 0x67, 0x226: 0x68, 0x227: 0x69,
+	0x228: 0x6a, 0x229: 0x6b, 0x22a: 0x6c, 0x22b: 0x6d, 0x22f: 0x6e,
+	0x230: 0x6f, 0x231: 0x70, 0x232: 0x71, 0x233: 0x72, 0x234: 0x73, 0x235: 0x74, 0x236: 0x75, 0x237: 0x6f,
+	0x238: 0x70, 0x239: 0x71, 0x23a: 0x72, 0x23b: 0x73, 0x23c: 0x74, 0x23d: 0x75, 0x23e: 0x6f, 0x23f: 0x70,
+	// Block 0x9, offset 0x240
+	0x240: 0x71, 0x241: 0x72, 0x242: 0x73, 0x243: 0x74, 0x244: 0x75, 0x245: 0x6f, 0x246: 0x70, 0x247: 0x71,
+	0x248: 0x72, 0x249: 0x73, 0x24a: 0x74, 0x24b: 0x75, 0x24c: 0x6f, 0x24d: 0x70, 0x24e: 0x71, 0x24f: 0x72,
+	0x250: 0x73, 0x251: 0x74, 0x252: 0x75, 0x253: 0x6f, 0x254: 0x70, 0x255: 0x71, 0x256: 0x72, 0x257: 0x73,
+	0x258: 0x74, 0x259: 0x75, 0x25a: 0x6f, 0x25b: 0x70, 0x25c: 0x71, 0x25d: 0x72, 0x25e: 0x73, 0x25f: 0x74,
+	0x260: 0x75, 0x261: 0x6f, 0x262: 0x70, 0x263: 0x71, 0x264: 0x72, 0x265: 0x73, 0x266: 0x74, 0x267: 0x75,
+	0x268: 0x6f, 0x269: 0x70, 0x26a: 0x71, 0x26b: 0x72, 0x26c: 0x73, 0x26d: 0x74, 0x26e: 0x75, 0x26f: 0x6f,
+	0x270: 0x70, 0x271: 0x71, 0x272: 0x72, 0x273: 0x73, 0x274: 0x74, 0x275: 0x75, 0x276: 0x6f, 0x277: 0x70,
+	0x278: 0x71, 0x279: 0x72, 0x27a: 0x73, 0x27b: 0x74, 0x27c: 0x75, 0x27d: 0x6f, 0x27e: 0x70, 0x27f: 0x71,
+	// Block 0xa, offset 0x280
+	0x280: 0x72, 0x281: 0x73, 0x282: 0x74, 0x283: 0x75, 0x284: 0x6f, 0x285: 0x70, 0x286: 0x71, 0x287: 0x72,
+	0x288: 0x73, 0x289: 0x74, 0x28a: 0x75, 0x28b: 0x6f, 0x28c: 0x70, 0x28d: 0x71, 0x28e: 0x72, 0x28f: 0x73,
+	0x290: 0x74, 0x291: 0x75, 0x292: 0x6f, 0x293: 0x70, 0x294: 0x71, 0x295: 0x72, 0x296: 0x73, 0x297: 0x74,
+	0x298: 0x75, 0x299: 0x6f, 0x29a: 0x70, 0x29b: 0x71, 0x29c: 0x72, 0x29d: 0x73, 0x29e: 0x74, 0x29f: 0x75,
+	0x2a0: 0x6f, 0x2a1: 0x70, 0x2a2: 0x71, 0x2a3: 0x72, 0x2a4: 0x73, 0x2a5: 0x74, 0x2a6: 0x75, 0x2a7: 0x6f,
+	0x2a8: 0x70, 0x2a9: 0x71, 0x2aa: 0x72, 0x2ab: 0x73, 0x2ac: 0x74, 0x2ad: 0x75, 0x2ae: 0x6f, 0x2af: 0x70,
+	0x2b0: 0x71, 0x2b1: 0x72, 0x2b2: 0x73, 0x2b3: 0x74, 0x2b4: 0x75, 0x2b5: 0x6f, 0x2b6: 0x70, 0x2b7: 0x71,
+	0x2b8: 0x72, 0x2b9: 0x73, 0x2ba: 0x74, 0x2bb: 0x75, 0x2bc: 0x6f, 0x2bd: 0x70, 0x2be: 0x71, 0x2bf: 0x72,
+	// Block 0xb, offset 0x2c0
+	0x2c0: 0x73, 0x2c1: 0x74, 0x2c2: 0x75, 0x2c3: 0x6f, 0x2c4: 0x70, 0x2c5: 0x71, 0x2c6: 0x72, 0x2c7: 0x73,
+	0x2c8: 0x74, 0x2c9: 0x75, 0x2ca: 0x6f, 0x2cb: 0x70, 0x2cc: 0x71, 0x2cd: 0x72, 0x2ce: 0x73, 0x2cf: 0x74,
+	0x2d0: 0x75, 0x2d1: 0x6f, 0x2d2: 0x70, 0x2d3: 0x71, 0x2d4: 0x72, 0x2d5: 0x73, 0x2d6: 0x74, 0x2d7: 0x75,
+	0x2d8: 0x6f, 0x2d9: 0x70, 0x2da: 0x71, 0x2db: 0x72, 0x2dc: 0x73, 0x2dd: 0x74, 0x2de: 0x76, 0x2df: 0x77,
+	// Block 0xc, offset 0x300
+	0x32c: 0x78,
+	0x338: 0x79, 0x33b: 0x7a, 0x33e: 0x61, 0x33f: 0x7b,
+	// Block 0xd, offset 0x340
+	0x347: 0x7c,
+	0x34b: 0x7d, 0x34d: 0x7e,
+	0x368: 0x7f, 0x36b: 0x80,
+	0x374: 0x81,
+	0x37a: 0x82, 0x37b: 0x83, 0x37d: 0x84, 0x37e: 0x85,
+	// Block 0xe, offset 0x380
+	0x380: 0x86, 0x381: 0x87, 0x382: 0x88, 0x383: 0x89, 0x384: 0x8a, 0x385: 0x8b, 0x386: 0x8c, 0x387: 0x8d,
+	0x388: 0x8e, 0x389: 0x8f, 0x38b: 0x90, 0x38c: 0x21, 0x38d: 0x91,
+	0x390: 0x92, 0x391: 0x93, 0x392: 0x94, 0x393: 0x95, 0x396: 0x96, 0x397: 0x97,
+	0x398: 0x98, 0x399: 0x99, 0x39a: 0x9a, 0x39c: 0x9b,
+	0x3a0: 0x9c, 0x3a4: 0x9d, 0x3a5: 0x9e, 0x3a7: 0x9f,
+	0x3a8: 0xa0, 0x3a9: 0xa1, 0x3aa: 0xa2,
+	0x3b0: 0xa3, 0x3b2: 0xa4, 0x3b4: 0xa5, 0x3b5: 0xa6, 0x3b6: 0xa7,
+	0x3bb: 0xa8, 0x3bc: 0xa9, 0x3bd: 0xaa,
+	// Block 0xf, offset 0x3c0
+	0x3d0: 0xab, 0x3d1: 0xac,
+	// Block 0x10, offset 0x400
+	0x42b: 0xad, 0x42c: 0xae,
+	0x43d: 0xaf, 0x43e: 0xb0, 0x43f: 0xb1,
+	// Block 0x11, offset 0x440
+	0x472: 0xb2,
+	// Block 0x12, offset 0x480
+	0x4bc: 0xb3, 0x4bd: 0xb4,
+	// Block 0x13, offset 0x4c0
+	0x4c5: 0xb5, 0x4c6: 0xb6,
+	0x4c9: 0xb7,
+	0x4e8: 0xb8, 0x4e9: 0xb9, 0x4ea: 0xba,
+	// Block 0x14, offset 0x500
+	0x500: 0xbb, 0x502: 0xbc, 0x504: 0xae,
+	0x50a: 0xbd, 0x50b: 0xbe,
+	0x513: 0xbe,
+	0x523: 0xbf, 0x525: 0xc0,
+	// Block 0x15, offset 0x540
+	0x540: 0x52, 0x541: 0x52, 0x542: 0x52, 0x543: 0x52, 0x544: 0xc1, 0x545: 0xc2, 0x546: 0xc3, 0x547: 0xc4,
+	0x548: 0xc5, 0x549: 0xc6, 0x54a: 0x52, 0x54b: 0x52, 0x54c: 0x52, 0x54d: 0x52, 0x54e: 0x52, 0x54f: 0xc7,
+	0x550: 0x52, 0x551: 0x52, 0x552: 0x52, 0x553: 0x52, 0x554: 0xc8, 0x555: 0xc9, 0x556: 0x52, 0x557: 0x52,
+	0x558: 0x52, 0x559: 0xca, 0x55a: 0x52, 0x55b: 0x52, 0x55d: 0xcb, 0x55f: 0xcc,
+	0x560: 0xcd, 0x561: 0xce, 0x562: 0xcf, 0x563: 0x52, 0x564: 0xd0, 0x565: 0xd1, 0x566: 0x52, 0x567: 0x52,
+	0x568: 0x52, 0x569: 0x52, 0x56a: 0x52, 0x56b: 0x52,
+	0x570: 0x52, 0x571: 0x52, 0x572: 0x52, 0x573: 0x52, 0x574: 0x52, 0x575: 0x52, 0x576: 0x52, 0x577: 0x52,
+	0x578: 0x52, 0x579: 0x52, 0x57a: 0x52, 0x57b: 0x52, 0x57c: 0x52, 0x57d: 0x52, 0x57e: 0x52, 0x57f: 0xc8,
+	// Block 0x16, offset 0x580
+	0x590: 0x0b, 0x591: 0x0c, 0x593: 0x0d, 0x596: 0x0e,
+	0x59b: 0x0f, 0x59c: 0x10, 0x59d: 0x11, 0x59e: 0x12, 0x59f: 0x13,
+	// Block 0x17, offset 0x5c0
+	0x5c0: 0xd2, 0x5c1: 0x02, 0x5c2: 0xd3, 0x5c3: 0xd3, 0x5c4: 0x02, 0x5c5: 0x02, 0x5c6: 0x02, 0x5c7: 0xd4,
+	0x5c8: 0xd3, 0x5c9: 0xd3, 0x5ca: 0xd3, 0x5cb: 0xd3, 0x5cc: 0xd3, 0x5cd: 0xd3, 0x5ce: 0xd3, 0x5cf: 0xd3,
+	0x5d0: 0xd3, 0x5d1: 0xd3, 0x5d2: 0xd3, 0x5d3: 0xd3, 0x5d4: 0xd3, 0x5d5: 0xd3, 0x5d6: 0xd3, 0x5d7: 0xd3,
+	0x5d8: 0xd3, 0x5d9: 0xd3, 0x5da: 0xd3, 0x5db: 0xd3, 0x5dc: 0xd3, 0x5dd: 0xd3, 0x5de: 0xd3, 0x5df: 0xd3,
+	0x5e0: 0xd3, 0x5e1: 0xd3, 0x5e2: 0xd3, 0x5e3: 0xd3, 0x5e4: 0xd3, 0x5e5: 0xd3, 0x5e6: 0xd3, 0x5e7: 0xd3,
+	0x5e8: 0xd3, 0x5e9: 0xd3, 0x5ea: 0xd3, 0x5eb: 0xd3, 0x5ec: 0xd3, 0x5ed: 0xd3, 0x5ee: 0xd3, 0x5ef: 0xd3,
+	0x5f0: 0xd3, 0x5f1: 0xd3, 0x5f2: 0xd3, 0x5f3: 0xd3, 0x5f4: 0xd3, 0x5f5: 0xd3, 0x5f6: 0xd3, 0x5f7: 0xd3,
+	0x5f8: 0xd3, 0x5f9: 0xd3, 0x5fa: 0xd3, 0x5fb: 0xd3, 0x5fc: 0xd3, 0x5fd: 0xd3, 0x5fe: 0xd3, 0x5ff: 0xd3,
+	// Block 0x18, offset 0x600
+	0x620: 0x15,
+}

+ 85 - 0
v2/vendor/github.com/clipperhouse/uax29/v2/internal/iterators/iterator.go

@@ -0,0 +1,85 @@
+package iterators
+
+type Stringish interface {
+	[]byte | string
+}
+
+type SplitFunc[T Stringish] func(T, bool) (int, T, error)
+
+// Iterator is a generic iterator for words that are either []byte or string.
+// Iterate while Next() is true, and access the word via Value().
+type Iterator[T Stringish] struct {
+	split SplitFunc[T]
+	data  T
+	start int
+	pos   int
+}
+
+// New creates a new Iterator for the given data and SplitFunc.
+func New[T Stringish](split SplitFunc[T], data T) *Iterator[T] {
+	return &Iterator[T]{
+		split: split,
+		data:  data,
+	}
+}
+
+// SetText sets the text for the iterator to operate on, and resets all state.
+func (iter *Iterator[T]) SetText(data T) {
+	iter.data = data
+	iter.start = 0
+	iter.pos = 0
+}
+
+// Split sets the SplitFunc for the Iterator.
+func (iter *Iterator[T]) Split(split SplitFunc[T]) {
+	iter.split = split
+}
+
+// Next advances the iterator to the next token. It returns false when there
+// are no remaining tokens or an error occurred.
+func (iter *Iterator[T]) Next() bool {
+	if iter.pos == len(iter.data) {
+		return false
+	}
+	if iter.pos > len(iter.data) {
+		panic("SplitFunc advanced beyond the end of the data")
+	}
+
+	iter.start = iter.pos
+
+	advance, _, err := iter.split(iter.data[iter.pos:], true)
+	if err != nil {
+		panic(err)
+	}
+	if advance <= 0 {
+		panic("SplitFunc returned a zero or negative advance")
+	}
+
+	iter.pos += advance
+	if iter.pos > len(iter.data) {
+		panic("SplitFunc advanced beyond the end of the data")
+	}
+
+	return true
+}
+
+// Value returns the current token.
+func (iter *Iterator[T]) Value() T {
+	return iter.data[iter.start:iter.pos]
+}
+
+// Start returns the byte position of the current token in the original data.
+func (iter *Iterator[T]) Start() int {
+	return iter.start
+}
+
+// End returns the byte position after the current token in the original data.
+func (iter *Iterator[T]) End() int {
+	return iter.pos
+}
+
+// Reset resets the iterator to the beginning of the data.
+func (iter *Iterator[T]) Reset() {
+	iter.start = 0
+	iter.pos = 0
+}

+ 12 - 8
v2/vendor/github.com/google/flatbuffers/go/builder.go

@@ -104,15 +104,18 @@ func (b *Builder) StartObject(numfields int) {
 // logically-equal vtables will be deduplicated.
 //
 // A vtable has the following format:
-//   <VOffsetT: size of the vtable in bytes, including this value>
-//   <VOffsetT: size of the object in bytes, including the vtable offset>
-//   <VOffsetT: offset for a field> * N, where N is the number of fields in
-//	        the schema for this type. Includes deprecated fields.
+//
+//	  <VOffsetT: size of the vtable in bytes, including this value>
+//	  <VOffsetT: size of the object in bytes, including the vtable offset>
+//	  <VOffsetT: offset for a field> * N, where N is the number of fields in
+//		        the schema for this type. Includes deprecated fields.
+//
 // Thus, a vtable is made of 2 + N elements, each SizeVOffsetT bytes wide.
 //
 // An object has the following format:
-//   <SOffsetT: offset to this object's vtable (may be negative)>
-//   <byte: data>+
+//
+//	<SOffsetT: offset to this object's vtable (may be negative)>
+//	<byte: data>+
 func (b *Builder) WriteVtable() (n UOffsetT) {
 	// Prepend a zero scalar to the object. Later in this function we'll
 	// write an offset here that points to the object's vtable:
@@ -296,8 +299,9 @@ func (b *Builder) PrependUOffsetT(off UOffsetT) {
 // StartVector initializes bookkeeping for writing a new vector.
 //
 // A vector has the following format:
-//   <UOffsetT: number of elements in this vector>
-//   <T: data>+, where T is the type of elements of this vector.
+//
+//	<UOffsetT: number of elements in this vector>
+//	<T: data>+, where T is the type of elements of this vector.
 func (b *Builder) StartVector(elemSize, numElems, alignment int) UOffsetT {
 	b.assertNotNested()
 	b.nested = true

+ 27 - 3
v2/vendor/github.com/google/flatbuffers/go/grpc.go

@@ -1,7 +1,17 @@
 package flatbuffers
 
-// Codec implements gRPC-go Codec which is used to encode and decode messages.
-var Codec = "flatbuffers"
+import "errors"
+
+var (
+	// Codec implements gRPC-go Codec which is used to encode and decode messages.
+	Codec = "flatbuffers"
+
+	// ErrInsufficientData is returned when the data is too short to read the root UOffsetT.
+	ErrInsufficientData = errors.New("insufficient data")
+
+	// ErrInvalidRootOffset is returned when the root UOffsetT is out of bounds.
+	ErrInvalidRootOffset = errors.New("invalid root offset")
+)
 
 // FlatbuffersCodec defines the interface gRPC uses to encode and decode messages.  Note
 // that implementations of this interface must be thread safe; a Codec's
@@ -15,7 +25,21 @@ func (FlatbuffersCodec) Marshal(v interface{}) ([]byte, error) {
 
 // Unmarshal parses the wire format into v.
 func (FlatbuffersCodec) Unmarshal(data []byte, v interface{}) error {
-	v.(flatbuffersInit).Init(data, GetUOffsetT(data))
+	// Need at least 4 bytes to read the root table offset (UOffsetT).
+	// Vtable soffset_t and metadata are read later during field access.
+	if len(data) < SizeUOffsetT {
+		return ErrInsufficientData
+	}
+
+	off := GetUOffsetT(data)
+
+	// The root UOffsetT must be within the data buffer
+	// Compare in the unsigned domain to avoid signedness pitfalls
+	if off > UOffsetT(len(data)-SizeUOffsetT) {
+		return ErrInvalidRootOffset
+	}
+
+	v.(flatbuffersInit).Init(data, off)
 	return nil
 }
 

+ 43 - 0
v2/vendor/github.com/mattn/go-runewidth/benchstat.txt

@@ -0,0 +1,43 @@
+goos: darwin
+goarch: arm64
+pkg: github.com/mattn/go-runewidth
+cpu: Apple M2
+                                   │   old.txt    │              new.txt               │
+                                   │    sec/op    │   sec/op     vs base               │
+String1WidthAll/regular-8            108.92m ± 0%   35.09m ± 3%  -67.78% (p=0.002 n=6)
+String1WidthAll/lut-8                 93.97m ± 0%   18.70m ± 0%  -80.10% (p=0.002 n=6)
+String1Width768/regular-8             60.62µ ± 1%   11.54µ ± 0%  -80.97% (p=0.002 n=6)
+String1Width768/lut-8                 60.66µ ± 1%   11.43µ ± 0%  -81.16% (p=0.002 n=6)
+String1WidthAllEastAsian/regular-8   115.13m ± 1%   40.79m ± 8%  -64.57% (p=0.002 n=6)
+String1WidthAllEastAsian/lut-8        93.65m ± 0%   18.70m ± 2%  -80.03% (p=0.002 n=6)
+String1Width768EastAsian/regular-8    75.32µ ± 0%   23.49µ ± 0%  -68.82% (p=0.002 n=6)
+String1Width768EastAsian/lut-8        60.76µ ± 0%   11.50µ ± 0%  -81.07% (p=0.002 n=6)
+geomean                               2.562m        604.5µ       -76.41%
+
+                                   │   old.txt    │                 new.txt                 │
+                                   │     B/op     │    B/op      vs base                    │
+String1WidthAll/regular-8            106.3Mi ± 0%    0.0Mi ± 0%  -100.00% (p=0.002 n=6)
+String1WidthAll/lut-8                106.3Mi ± 0%    0.0Mi ± 0%  -100.00% (p=0.002 n=6)
+String1Width768/regular-8            75.00Ki ± 0%   0.00Ki ± 0%  -100.00% (p=0.002 n=6)
+String1Width768/lut-8                75.00Ki ± 0%   0.00Ki ± 0%  -100.00% (p=0.002 n=6)
+String1WidthAllEastAsian/regular-8   106.3Mi ± 0%    0.0Mi ± 0%  -100.00% (p=0.002 n=6)
+String1WidthAllEastAsian/lut-8       106.3Mi ± 0%    0.0Mi ± 0%  -100.00% (p=0.002 n=6)
+String1Width768EastAsian/regular-8   75.00Ki ± 0%   0.00Ki ± 0%  -100.00% (p=0.002 n=6)
+String1Width768EastAsian/lut-8       75.00Ki ± 0%   0.00Ki ± 0%  -100.00% (p=0.002 n=6)
+geomean                              2.790Mi                     ?                      ¹ ²
+¹ summaries must be >0 to compute geomean
+² ratios must be >0 to compute geomean
+
+                                   │   old.txt   │                 new.txt                 │
+                                   │  allocs/op  │  allocs/op   vs base                    │
+String1WidthAll/regular-8            3.342M ± 0%   0.000M ± 0%  -100.00% (p=0.002 n=6)
+String1WidthAll/lut-8                3.342M ± 0%   0.000M ± 0%  -100.00% (p=0.002 n=6)
+String1Width768/regular-8            2.304k ± 0%   0.000k ± 0%  -100.00% (p=0.002 n=6)
+String1Width768/lut-8                2.304k ± 0%   0.000k ± 0%  -100.00% (p=0.002 n=6)
+String1WidthAllEastAsian/regular-8   3.342M ± 0%   0.000M ± 0%  -100.00% (p=0.002 n=6)
+String1WidthAllEastAsian/lut-8       3.342M ± 0%   0.000M ± 0%  -100.00% (p=0.002 n=6)
+String1Width768EastAsian/regular-8   2.304k ± 0%   0.000k ± 0%  -100.00% (p=0.002 n=6)
+String1Width768EastAsian/lut-8       2.304k ± 0%   0.000k ± 0%  -100.00% (p=0.002 n=6)
+geomean                              87.75k                     ?                      ¹ ²
+¹ summaries must be >0 to compute geomean
+² ratios must be >0 to compute geomean

+ 54 - 0
v2/vendor/github.com/mattn/go-runewidth/new.txt

@@ -0,0 +1,54 @@
+goos: darwin
+goarch: arm64
+pkg: github.com/mattn/go-runewidth
+cpu: Apple M2
+BenchmarkString1WidthAll/regular-8    	      33	  35033923 ns/op	       0 B/op	       0 allocs/op
+BenchmarkString1WidthAll/regular-8    	      33	  34965112 ns/op	       0 B/op	       0 allocs/op
+BenchmarkString1WidthAll/regular-8    	      33	  36307234 ns/op	       0 B/op	       0 allocs/op
+BenchmarkString1WidthAll/regular-8    	      33	  35007705 ns/op	       0 B/op	       0 allocs/op
+BenchmarkString1WidthAll/regular-8    	      33	  35154182 ns/op	       0 B/op	       0 allocs/op
+BenchmarkString1WidthAll/regular-8    	      34	  35155400 ns/op	       0 B/op	       0 allocs/op
+BenchmarkString1WidthAll/lut-8        	      63	  18688500 ns/op	       0 B/op	       0 allocs/op
+BenchmarkString1WidthAll/lut-8        	      63	  18712474 ns/op	       0 B/op	       0 allocs/op
+BenchmarkString1WidthAll/lut-8        	      63	  18700211 ns/op	       0 B/op	       0 allocs/op
+BenchmarkString1WidthAll/lut-8        	      62	  18694179 ns/op	       0 B/op	       0 allocs/op
+BenchmarkString1WidthAll/lut-8        	      62	  18708392 ns/op	       0 B/op	       0 allocs/op
+BenchmarkString1WidthAll/lut-8        	      63	  18770608 ns/op	       0 B/op	       0 allocs/op
+BenchmarkString1Width768/regular-8    	  104137	     11526 ns/op	       0 B/op	       0 allocs/op
+BenchmarkString1Width768/regular-8    	  103986	     11540 ns/op	       0 B/op	       0 allocs/op
+BenchmarkString1Width768/regular-8    	  104079	     11552 ns/op	       0 B/op	       0 allocs/op
+BenchmarkString1Width768/regular-8    	  103963	     11530 ns/op	       0 B/op	       0 allocs/op
+BenchmarkString1Width768/regular-8    	  103714	     11538 ns/op	       0 B/op	       0 allocs/op
+BenchmarkString1Width768/regular-8    	  104181	     11537 ns/op	       0 B/op	       0 allocs/op
+BenchmarkString1Width768/lut-8        	  105150	     11420 ns/op	       0 B/op	       0 allocs/op
+BenchmarkString1Width768/lut-8        	  104778	     11423 ns/op	       0 B/op	       0 allocs/op
+BenchmarkString1Width768/lut-8        	  105069	     11422 ns/op	       0 B/op	       0 allocs/op
+BenchmarkString1Width768/lut-8        	  105127	     11475 ns/op	       0 B/op	       0 allocs/op
+BenchmarkString1Width768/lut-8        	  104742	     11433 ns/op	       0 B/op	       0 allocs/op
+BenchmarkString1Width768/lut-8        	  105163	     11432 ns/op	       0 B/op	       0 allocs/op
+BenchmarkString1WidthAllEastAsian/regular-8         	      28	  40723347 ns/op	       0 B/op	       0 allocs/op
+BenchmarkString1WidthAllEastAsian/regular-8         	      28	  40790299 ns/op	       0 B/op	       0 allocs/op
+BenchmarkString1WidthAllEastAsian/regular-8         	      28	  40801338 ns/op	       0 B/op	       0 allocs/op
+BenchmarkString1WidthAllEastAsian/regular-8         	      28	  40798216 ns/op	       0 B/op	       0 allocs/op
+BenchmarkString1WidthAllEastAsian/regular-8         	      28	  44135253 ns/op	       0 B/op	       0 allocs/op
+BenchmarkString1WidthAllEastAsian/regular-8         	      28	  40779546 ns/op	       0 B/op	       0 allocs/op
+BenchmarkString1WidthAllEastAsian/lut-8             	      62	  18694165 ns/op	       0 B/op	       0 allocs/op
+BenchmarkString1WidthAllEastAsian/lut-8             	      62	  18685047 ns/op	       0 B/op	       0 allocs/op
+BenchmarkString1WidthAllEastAsian/lut-8             	      62	  18689273 ns/op	       0 B/op	       0 allocs/op
+BenchmarkString1WidthAllEastAsian/lut-8             	      62	  19150346 ns/op	       0 B/op	       0 allocs/op
+BenchmarkString1WidthAllEastAsian/lut-8             	      63	  19126154 ns/op	       0 B/op	       0 allocs/op
+BenchmarkString1WidthAllEastAsian/lut-8             	      62	  18712619 ns/op	       0 B/op	       0 allocs/op
+BenchmarkString1Width768EastAsian/regular-8         	   50775	     23595 ns/op	       0 B/op	       0 allocs/op
+BenchmarkString1Width768EastAsian/regular-8         	   51061	     23563 ns/op	       0 B/op	       0 allocs/op
+BenchmarkString1Width768EastAsian/regular-8         	   51057	     23492 ns/op	       0 B/op	       0 allocs/op
+BenchmarkString1Width768EastAsian/regular-8         	   51138	     23445 ns/op	       0 B/op	       0 allocs/op
+BenchmarkString1Width768EastAsian/regular-8         	   51195	     23469 ns/op	       0 B/op	       0 allocs/op
+BenchmarkString1Width768EastAsian/regular-8         	   51087	     23482 ns/op	       0 B/op	       0 allocs/op
+BenchmarkString1Width768EastAsian/lut-8             	  104559	     11549 ns/op	       0 B/op	       0 allocs/op
+BenchmarkString1Width768EastAsian/lut-8             	  104508	     11483 ns/op	       0 B/op	       0 allocs/op
+BenchmarkString1Width768EastAsian/lut-8             	  104296	     11503 ns/op	       0 B/op	       0 allocs/op
+BenchmarkString1Width768EastAsian/lut-8             	  104606	     11485 ns/op	       0 B/op	       0 allocs/op
+BenchmarkString1Width768EastAsian/lut-8             	  104588	     11495 ns/op	       0 B/op	       0 allocs/op
+BenchmarkString1Width768EastAsian/lut-8             	  104602	     11518 ns/op	       0 B/op	       0 allocs/op
+PASS
+ok  	github.com/mattn/go-runewidth	64.455s

+ 54 - 0
v2/vendor/github.com/mattn/go-runewidth/old.txt

@@ -0,0 +1,54 @@
+goos: darwin
+goarch: arm64
+pkg: github.com/mattn/go-runewidth
+cpu: Apple M2
+BenchmarkString1WidthAll/regular-8    	      10	 108559258 ns/op	111412145 B/op	 3342342 allocs/op
+BenchmarkString1WidthAll/regular-8    	      10	 108968079 ns/op	111412364 B/op	 3342343 allocs/op
+BenchmarkString1WidthAll/regular-8    	      10	 108890338 ns/op	111412388 B/op	 3342344 allocs/op
+BenchmarkString1WidthAll/regular-8    	      10	 108940704 ns/op	111412584 B/op	 3342346 allocs/op
+BenchmarkString1WidthAll/regular-8    	      10	 108632796 ns/op	111412348 B/op	 3342343 allocs/op
+BenchmarkString1WidthAll/regular-8    	      10	 109354546 ns/op	111412777 B/op	 3342343 allocs/op
+BenchmarkString1WidthAll/lut-8        	      12	  93844406 ns/op	111412569 B/op	 3342345 allocs/op
+BenchmarkString1WidthAll/lut-8        	      12	  93991080 ns/op	111412512 B/op	 3342344 allocs/op
+BenchmarkString1WidthAll/lut-8        	      12	  93980632 ns/op	111412413 B/op	 3342343 allocs/op
+BenchmarkString1WidthAll/lut-8        	      12	  94004083 ns/op	111412396 B/op	 3342343 allocs/op
+BenchmarkString1WidthAll/lut-8        	      12	  93959795 ns/op	111412445 B/op	 3342343 allocs/op
+BenchmarkString1WidthAll/lut-8        	      12	  93846198 ns/op	111412556 B/op	 3342345 allocs/op
+BenchmarkString1Width768/regular-8    	   19785	     60696 ns/op	   76801 B/op	    2304 allocs/op
+BenchmarkString1Width768/regular-8    	   19824	     60520 ns/op	   76801 B/op	    2304 allocs/op
+BenchmarkString1Width768/regular-8    	   19832	     60547 ns/op	   76801 B/op	    2304 allocs/op
+BenchmarkString1Width768/regular-8    	   19778	     60543 ns/op	   76800 B/op	    2304 allocs/op
+BenchmarkString1Width768/regular-8    	   19842	     61142 ns/op	   76801 B/op	    2304 allocs/op
+BenchmarkString1Width768/regular-8    	   19780	     60696 ns/op	   76801 B/op	    2304 allocs/op
+BenchmarkString1Width768/lut-8        	   19598	     61161 ns/op	   76801 B/op	    2304 allocs/op
+BenchmarkString1Width768/lut-8        	   19731	     60707 ns/op	   76801 B/op	    2304 allocs/op
+BenchmarkString1Width768/lut-8        	   19738	     60626 ns/op	   76801 B/op	    2304 allocs/op
+BenchmarkString1Width768/lut-8        	   19764	     60670 ns/op	   76801 B/op	    2304 allocs/op
+BenchmarkString1Width768/lut-8        	   19797	     60642 ns/op	   76801 B/op	    2304 allocs/op
+BenchmarkString1Width768/lut-8        	   19738	     60608 ns/op	   76800 B/op	    2304 allocs/op
+BenchmarkString1WidthAllEastAsian/regular-8         	       9	 115080431 ns/op	111412458 B/op	 3342345 allocs/op
+BenchmarkString1WidthAllEastAsian/regular-8         	       9	 114908880 ns/op	111412476 B/op	 3342345 allocs/op
+BenchmarkString1WidthAllEastAsian/regular-8         	       9	 115077134 ns/op	111412540 B/op	 3342345 allocs/op
+BenchmarkString1WidthAllEastAsian/regular-8         	       9	 115175292 ns/op	111412467 B/op	 3342345 allocs/op
+BenchmarkString1WidthAllEastAsian/regular-8         	       9	 115792653 ns/op	111412362 B/op	 3342344 allocs/op
+BenchmarkString1WidthAllEastAsian/regular-8         	       9	 115255417 ns/op	111412572 B/op	 3342346 allocs/op
+BenchmarkString1WidthAllEastAsian/lut-8             	      12	  93761542 ns/op	111412538 B/op	 3342345 allocs/op
+BenchmarkString1WidthAllEastAsian/lut-8             	      12	  94089990 ns/op	111412440 B/op	 3342343 allocs/op
+BenchmarkString1WidthAllEastAsian/lut-8             	      12	  93721410 ns/op	111412514 B/op	 3342344 allocs/op
+BenchmarkString1WidthAllEastAsian/lut-8             	      12	  93572951 ns/op	111412329 B/op	 3342342 allocs/op
+BenchmarkString1WidthAllEastAsian/lut-8             	      12	  93536052 ns/op	111412206 B/op	 3342341 allocs/op
+BenchmarkString1WidthAllEastAsian/lut-8             	      12	  93532365 ns/op	111412412 B/op	 3342343 allocs/op
+BenchmarkString1Width768EastAsian/regular-8         	   15904	     75401 ns/op	   76800 B/op	    2304 allocs/op
+BenchmarkString1Width768EastAsian/regular-8         	   15932	     75449 ns/op	   76801 B/op	    2304 allocs/op
+BenchmarkString1Width768EastAsian/regular-8         	   15944	     75181 ns/op	   76801 B/op	    2304 allocs/op
+BenchmarkString1Width768EastAsian/regular-8         	   15963	     75311 ns/op	   76801 B/op	    2304 allocs/op
+BenchmarkString1Width768EastAsian/regular-8         	   15879	     75292 ns/op	   76801 B/op	    2304 allocs/op
+BenchmarkString1Width768EastAsian/regular-8         	   15955	     75334 ns/op	   76801 B/op	    2304 allocs/op
+BenchmarkString1Width768EastAsian/lut-8             	   19692	     60692 ns/op	   76801 B/op	    2304 allocs/op
+BenchmarkString1Width768EastAsian/lut-8             	   19712	     60699 ns/op	   76801 B/op	    2304 allocs/op
+BenchmarkString1Width768EastAsian/lut-8             	   19741	     60819 ns/op	   76801 B/op	    2304 allocs/op
+BenchmarkString1Width768EastAsian/lut-8             	   19771	     60653 ns/op	   76801 B/op	    2304 allocs/op
+BenchmarkString1Width768EastAsian/lut-8             	   19737	     61027 ns/op	   76801 B/op	    2304 allocs/op
+BenchmarkString1Width768EastAsian/lut-8             	   19657	     60820 ns/op	   76801 B/op	    2304 allocs/op
+PASS
+ok  	github.com/mattn/go-runewidth	76.165s

+ 13 - 10
v2/vendor/github.com/mattn/go-runewidth/runewidth.go

@@ -4,7 +4,7 @@ import (
 	"os"
 	"strings"
 
-	"github.com/rivo/uniseg"
+	"github.com/clipperhouse/uax29/v2/graphemes"
 )
 
 //go:generate go run script/generate.go
@@ -64,6 +64,9 @@ func inTable(r rune, t table) bool {
 	if r < t[0].first {
 		return false
 	}
+	if r > t[len(t)-1].last {
+		return false
+	}
 
 	bot := 0
 	top := len(t) - 1
@@ -175,10 +178,10 @@ func (c *Condition) CreateLUT() {
 
 // StringWidth return width as you can see
 func (c *Condition) StringWidth(s string) (width int) {
-	g := uniseg.NewGraphemes(s)
+	g := graphemes.FromString(s)
 	for g.Next() {
 		var chWidth int
-		for _, r := range g.Runes() {
+		for _, r := range g.Value() {
 			chWidth = c.RuneWidth(r)
 			if chWidth > 0 {
 				break // Our best guess at this point is to use the width of the first non-zero-width rune.
@@ -197,17 +200,17 @@ func (c *Condition) Truncate(s string, w int, tail string) string {
 	w -= c.StringWidth(tail)
 	var width int
 	pos := len(s)
-	g := uniseg.NewGraphemes(s)
+	g := graphemes.FromString(s)
 	for g.Next() {
 		var chWidth int
-		for _, r := range g.Runes() {
+		for _, r := range g.Value() {
 			chWidth = c.RuneWidth(r)
 			if chWidth > 0 {
 				break // See StringWidth() for details.
 			}
 		}
 		if width+chWidth > w {
-			pos, _ = g.Positions()
+			pos = g.Start()
 			break
 		}
 		width += chWidth
@@ -224,10 +227,10 @@ func (c *Condition) TruncateLeft(s string, w int, prefix string) string {
 	var width int
 	pos := len(s)
 
-	g := uniseg.NewGraphemes(s)
+	g := graphemes.FromString(s)
 	for g.Next() {
 		var chWidth int
-		for _, r := range g.Runes() {
+		for _, r := range g.Value() {
 			chWidth = c.RuneWidth(r)
 			if chWidth > 0 {
 				break // See StringWidth() for details.
@@ -236,10 +239,10 @@ func (c *Condition) TruncateLeft(s string, w int, prefix string) string {
 
 		if width+chWidth > w {
 			if width < w {
-				_, pos = g.Positions()
+				pos = g.End()
 				prefix += strings.Repeat(" ", width+chWidth-w)
 			} else {
-				pos, _ = g.Positions()
+				pos = g.Start()
 			}
 
 			break

+ 6 - 0
v2/vendor/github.com/mattn/go-runewidth/runewidth_windows.go

@@ -4,6 +4,7 @@
 package runewidth
 
 import (
+	"os"
 	"syscall"
 )
 
@@ -14,6 +15,11 @@ var (
 
 // IsEastAsian return true if the current locale is CJK
 func IsEastAsian() bool {
+	if os.Getenv("WT_SESSION") != "" {
+		// Windows Terminal always not use East Asian Ambiguous Width(s).
+		return false
+	}
+
 	r1, _, _ := procGetConsoleOutputCP.Call()
 	if r1 == 0 {
 		return false

+ 0 - 137
v2/vendor/github.com/rivo/uniseg/README.md

@@ -1,137 +0,0 @@
-# Unicode Text Segmentation for Go
-
-[![Go Reference](https://pkg.go.dev/badge/github.com/rivo/uniseg.svg)](https://pkg.go.dev/github.com/rivo/uniseg)
-[![Go Report](https://img.shields.io/badge/go%20report-A%2B-brightgreen.svg)](https://goreportcard.com/report/github.com/rivo/uniseg)
-
-This Go package implements Unicode Text Segmentation according to [Unicode Standard Annex #29](https://unicode.org/reports/tr29/), Unicode Line Breaking according to [Unicode Standard Annex #14](https://unicode.org/reports/tr14/) (Unicode version 15.0.0), and monospace font string width calculation similar to [wcwidth](https://man7.org/linux/man-pages/man3/wcwidth.3.html).
-
-## Background
-
-### Grapheme Clusters
-
-In Go, [strings are read-only slices of bytes](https://go.dev/blog/strings). They can be turned into Unicode code points using the `for` loop or by casting: `[]rune(str)`. However, multiple code points may be combined into one user-perceived character or what the Unicode specification calls "grapheme cluster". Here are some examples:
-
-|String|Bytes (UTF-8)|Code points (runes)|Grapheme clusters|
-|-|-|-|-|
-|Käse|6 bytes: `4b 61 cc 88 73 65`|5 code points: `4b 61 308 73 65`|4 clusters: `[4b],[61 308],[73],[65]`|
-|🏳️‍🌈|14 bytes: `f0 9f 8f b3 ef b8 8f e2 80 8d f0 9f 8c 88`|4 code points: `1f3f3 fe0f 200d 1f308`|1 cluster: `[1f3f3 fe0f 200d 1f308]`|
-|🇩🇪|8 bytes: `f0 9f 87 a9 f0 9f 87 aa`|2 code points: `1f1e9 1f1ea`|1 cluster: `[1f1e9 1f1ea]`|
-
-This package provides tools to iterate over these grapheme clusters. This may be used to determine the number of user-perceived characters, to split strings in their intended places, or to extract individual characters which form a unit.
-
-### Word Boundaries
-
-Word boundaries are used in a number of different contexts. The most familiar ones are selection (double-click mouse selection), cursor movement ("move to next word" control-arrow keys), and the dialog option "Whole Word Search" for search and replace. They are also used in database queries, to determine whether elements are within a certain number of words of one another. Searching may also use word boundaries in determining matching items. This package provides tools to determine word boundaries within strings.
-
-### Sentence Boundaries
-
-Sentence boundaries are often used for triple-click or some other method of selecting or iterating through blocks of text that are larger than single words. They are also used to determine whether words occur within the same sentence in database queries. This package provides tools to determine sentence boundaries within strings.
-
-### Line Breaking
-
-Line breaking, also known as word wrapping, is the process of breaking a section of text into lines such that it will fit in the available width of a page, window or other display area. This package provides tools to determine where a string may or may not be broken and where it must be broken (for example after newline characters).
-
-### Monospace Width
-
-Most terminals or text displays / text editors using a monospace font (for example source code editors) use a fixed width for each character. Some characters such as emojis or characters found in Asian and other languages may take up more than one character cell. This package provides tools to determine the number of cells a string will take up when displayed in a monospace font. See [here](https://pkg.go.dev/github.com/rivo/uniseg#hdr-Monospace_Width) for more information.
-
-## Installation
-
-```bash
-go get github.com/rivo/uniseg
-```
-
-## Examples
-
-### Counting Characters in a String
-
-```go
-n := uniseg.GraphemeClusterCount("🇩🇪🏳️‍🌈")
-fmt.Println(n)
-// 2
-```
-
-### Calculating the Monospace String Width
-
-```go
-width := uniseg.StringWidth("🇩🇪🏳️‍🌈!")
-fmt.Println(width)
-// 5
-```
-
-### Using the [`Graphemes`](https://pkg.go.dev/github.com/rivo/uniseg#Graphemes) Class
-
-This is the most convenient method of iterating over grapheme clusters:
-
-```go
-gr := uniseg.NewGraphemes("👍🏼!")
-for gr.Next() {
-	fmt.Printf("%x ", gr.Runes())
-}
-// [1f44d 1f3fc] [21]
-```
-
-### Using the [`Step`](https://pkg.go.dev/github.com/rivo/uniseg#Step) or [`StepString`](https://pkg.go.dev/github.com/rivo/uniseg#StepString) Function
-
-This avoids allocating a new `Graphemes` object but it requires the handling of states and boundaries:
-
-```go
-str := "🇩🇪🏳️‍🌈"
-state := -1
-var c string
-for len(str) > 0 {
-	c, str, _, state = uniseg.StepString(str, state)
-	fmt.Printf("%x ", []rune(c))
-}
-// [1f1e9 1f1ea] [1f3f3 fe0f 200d 1f308]
-```
-
-### Advanced Examples
-
-The [`Graphemes`](https://pkg.go.dev/github.com/rivo/uniseg#Graphemes) class offers the most convenient way to access all functionality of this package. But in some cases, it may be better to use the specialized functions directly. For example, if you're only interested in word segmentation, use [`FirstWord`](https://pkg.go.dev/github.com/rivo/uniseg#FirstWord) or [`FirstWordInString`](https://pkg.go.dev/github.com/rivo/uniseg#FirstWordInString):
-
-```go
-str := "Hello, world!"
-state := -1
-var c string
-for len(str) > 0 {
-	c, str, state = uniseg.FirstWordInString(str, state)
-	fmt.Printf("(%s)\n", c)
-}
-// (Hello)
-// (,)
-// ( )
-// (world)
-// (!)
-```
-
-Similarly, use
-
-- [`FirstGraphemeCluster`](https://pkg.go.dev/github.com/rivo/uniseg#FirstGraphemeCluster) or [`FirstGraphemeClusterInString`](https://pkg.go.dev/github.com/rivo/uniseg#FirstGraphemeClusterInString) for grapheme cluster determination only,
-- [`FirstSentence`](https://pkg.go.dev/github.com/rivo/uniseg#FirstSentence) or [`FirstSentenceInString`](https://pkg.go.dev/github.com/rivo/uniseg#FirstSentenceInString) for sentence segmentation only, and
-- [`FirstLineSegment`](https://pkg.go.dev/github.com/rivo/uniseg#FirstLineSegment) or [`FirstLineSegmentInString`](https://pkg.go.dev/github.com/rivo/uniseg#FirstLineSegmentInString) for line breaking / word wrapping (although using [`Step`](https://pkg.go.dev/github.com/rivo/uniseg#Step) or [`StepString`](https://pkg.go.dev/github.com/rivo/uniseg#StepString) is preferred as it will observe grapheme cluster boundaries).
-
-If you're only interested in the width of characters, use [`FirstGraphemeCluster`](https://pkg.go.dev/github.com/rivo/uniseg#FirstGraphemeCluster) or [`FirstGraphemeClusterInString`](https://pkg.go.dev/github.com/rivo/uniseg#FirstGraphemeClusterInString). It is much faster than using [`Step`](https://pkg.go.dev/github.com/rivo/uniseg#Step), [`StepString`](https://pkg.go.dev/github.com/rivo/uniseg#StepString), or the [`Graphemes`](https://pkg.go.dev/github.com/rivo/uniseg#Graphemes) class because it does not include the logic for word / sentence / line boundaries.
-
-Finally, if you need to reverse a string while preserving grapheme clusters, use [`ReverseString`](https://pkg.go.dev/github.com/rivo/uniseg#ReverseString):
-
-```go
-fmt.Println(uniseg.ReverseString("🇩🇪🏳️‍🌈"))
-// 🏳️‍🌈🇩🇪
-```
-
-## Documentation
-
-Refer to https://pkg.go.dev/github.com/rivo/uniseg for the package's documentation.
-
-## Dependencies
-
-This package does not depend on any packages outside the standard library.
-
-## Sponsor this Project
-
-[Become a Sponsor on GitHub](https://github.com/sponsors/rivo?metadata_source=uniseg_readme) to support this project!
-
-## Your Feedback
-
-Add your issue here on GitHub, preferably before submitting any PR's. Feel free to get in touch if you have any questions.

+ 0 - 108
v2/vendor/github.com/rivo/uniseg/doc.go

@@ -1,108 +0,0 @@
-/*
-Package uniseg implements Unicode Text Segmentation, Unicode Line Breaking, and
-string width calculation for monospace fonts. Unicode Text Segmentation conforms
-to Unicode Standard Annex #29 (https://unicode.org/reports/tr29/) and Unicode
-Line Breaking conforms to Unicode Standard Annex #14
-(https://unicode.org/reports/tr14/).
-
-In short, using this package, you can split a string into grapheme clusters
-(what people would usually refer to as a "character"), into words, and into
-sentences. Or, in its simplest case, this package allows you to count the number
-of characters in a string, especially when it contains complex characters such
-as emojis, combining characters, or characters from Asian, Arabic, Hebrew, or
-other languages. Additionally, you can use it to implement line breaking (or
-"word wrapping"), that is, to determine where text can be broken over to the
-next line when the width of the line is not big enough to fit the entire text.
-Finally, you can use it to calculate the display width of a string for monospace
-fonts.
-
-# Getting Started
-
-If you just want to count the number of characters in a string, you can use
-[GraphemeClusterCount]. If you want to determine the display width of a string,
-you can use [StringWidth]. If you want to iterate over a string, you can use
-[Step], [StepString], or the [Graphemes] class (more convenient but less
-performant). This will provide you with all information: grapheme clusters,
-word boundaries, sentence boundaries, line breaks, and monospace character
-widths. The specialized functions [FirstGraphemeCluster],
-[FirstGraphemeClusterInString], [FirstWord], [FirstWordInString],
-[FirstSentence], and [FirstSentenceInString] can be used if only one type of
-information is needed.
-
-# Grapheme Clusters
-
-Consider the rainbow flag emoji: 🏳️‍🌈. On most modern systems, it appears as one
-character. But its string representation actually has 14 bytes, so counting
-bytes (or using len("🏳️‍🌈")) will not work as expected. Counting runes won't,
-either: The flag has 4 Unicode code points, thus 4 runes. The stdlib function
-utf8.RuneCountInString("🏳️‍🌈") and len([]rune("🏳️‍🌈")) will both return 4.
-
-The [GraphemeClusterCount] function will return 1 for the rainbow flag emoji.
-The Graphemes class and a variety of functions in this package will allow you to
-split strings into its grapheme clusters.
-
-# Word Boundaries
-
-Word boundaries are used in a number of different contexts. The most familiar
-ones are selection (double-click mouse selection), cursor movement ("move to
-next word" control-arrow keys), and the dialog option "Whole Word Search" for
-search and replace. This package provides methods for determining word
-boundaries.
-
-# Sentence Boundaries
-
-Sentence boundaries are often used for triple-click or some other method of
-selecting or iterating through blocks of text that are larger than single words.
-They are also used to determine whether words occur within the same sentence in
-database queries. This package provides methods for determining sentence
-boundaries.
-
-# Line Breaking
-
-Line breaking, also known as word wrapping, is the process of breaking a section
-of text into lines such that it will fit in the available width of a page,
-window or other display area. This package provides methods to determine the
-positions in a string where a line must be broken, may be broken, or must not be
-broken.
-
-# Monospace Width
-
-Monospace width, as referred to in this package, is the width of a string in a
-monospace font. This is commonly used in terminal user interfaces or text
-displays or editors that don't support proportional fonts. A width of 1
-corresponds to a single character cell. The C function [wcswidth()] and its
-implementation in other programming languages is in widespread use for the same
-purpose. However, there is no standard for the calculation of such widths, and
-this package differs from wcswidth() in a number of ways, presumably to generate
-more visually pleasing results.
-
-To start, we assume that every code point has a width of 1, with the following
-exceptions:
-
-  - Code points with grapheme cluster break properties Control, CR, LF, Extend,
-    and ZWJ have a width of 0.
-  - U+2E3A, Two-Em Dash, has a width of 3.
-  - U+2E3B, Three-Em Dash, has a width of 4.
-  - Characters with the East-Asian Width properties "Fullwidth" (F) and "Wide"
-    (W) have a width of 2. (Properties "Ambiguous" (A) and "Neutral" (N) both
-    have a width of 1.)
-  - Code points with grapheme cluster break property Regional Indicator have a
-    width of 2.
-  - Code points with grapheme cluster break property Extended Pictographic have
-    a width of 2, unless their Emoji Presentation flag is "No", in which case
-    the width is 1.
-
-For Hangul grapheme clusters composed of conjoining Jamo and for Regional
-Indicators (flags), all code points except the first one have a width of 0. For
-grapheme clusters starting with an Extended Pictographic, any additional code
-point will force a total width of 2, except if the Variation Selector-15
-(U+FE0E) is included, in which case the total width is always 1. Grapheme
-clusters ending with Variation Selector-16 (U+FE0F) have a width of 2.
-
-Note that whether these widths appear correct depends on your application's
-render engine, to which extent it conforms to the Unicode Standard, and its
-choice of font.
-
-[wcswidth()]: https://man7.org/linux/man-pages/man3/wcswidth.3.html
-*/
-package uniseg

+ 0 - 2588
v2/vendor/github.com/rivo/uniseg/eastasianwidth.go

@@ -1,2588 +0,0 @@
-// Code generated via go generate from gen_properties.go. DO NOT EDIT.
-
-package uniseg
-
-// eastAsianWidth are taken from
-// https://www.unicode.org/Public/15.0.0/ucd/EastAsianWidth.txt
-// and
-// https://unicode.org/Public/15.0.0/ucd/emoji/emoji-data.txt
-// ("Extended_Pictographic" only)
-// on September 5, 2023. See https://www.unicode.org/license.html for the Unicode
-// license agreement.
-var eastAsianWidth = [][3]int{
-	{0x0000, 0x001F, prN},     // Cc    [32] <control-0000>..<control-001F>
-	{0x0020, 0x0020, prNa},    // Zs         SPACE
-	{0x0021, 0x0023, prNa},    // Po     [3] EXCLAMATION MARK..NUMBER SIGN
-	{0x0024, 0x0024, prNa},    // Sc         DOLLAR SIGN
-	{0x0025, 0x0027, prNa},    // Po     [3] PERCENT SIGN..APOSTROPHE
-	{0x0028, 0x0028, prNa},    // Ps         LEFT PARENTHESIS
-	{0x0029, 0x0029, prNa},    // Pe         RIGHT PARENTHESIS
-	{0x002A, 0x002A, prNa},    // Po         ASTERISK
-	{0x002B, 0x002B, prNa},    // Sm         PLUS SIGN
-	{0x002C, 0x002C, prNa},    // Po         COMMA
-	{0x002D, 0x002D, prNa},    // Pd         HYPHEN-MINUS
-	{0x002E, 0x002F, prNa},    // Po     [2] FULL STOP..SOLIDUS
-	{0x0030, 0x0039, prNa},    // Nd    [10] DIGIT ZERO..DIGIT NINE
-	{0x003A, 0x003B, prNa},    // Po     [2] COLON..SEMICOLON
-	{0x003C, 0x003E, prNa},    // Sm     [3] LESS-THAN SIGN..GREATER-THAN SIGN
-	{0x003F, 0x0040, prNa},    // Po     [2] QUESTION MARK..COMMERCIAL AT
-	{0x0041, 0x005A, prNa},    // Lu    [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z
-	{0x005B, 0x005B, prNa},    // Ps         LEFT SQUARE BRACKET
-	{0x005C, 0x005C, prNa},    // Po         REVERSE SOLIDUS
-	{0x005D, 0x005D, prNa},    // Pe         RIGHT SQUARE BRACKET
-	{0x005E, 0x005E, prNa},    // Sk         CIRCUMFLEX ACCENT
-	{0x005F, 0x005F, prNa},    // Pc         LOW LINE
-	{0x0060, 0x0060, prNa},    // Sk         GRAVE ACCENT
-	{0x0061, 0x007A, prNa},    // Ll    [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z
-	{0x007B, 0x007B, prNa},    // Ps         LEFT CURLY BRACKET
-	{0x007C, 0x007C, prNa},    // Sm         VERTICAL LINE
-	{0x007D, 0x007D, prNa},    // Pe         RIGHT CURLY BRACKET
-	{0x007E, 0x007E, prNa},    // Sm         TILDE
-	{0x007F, 0x007F, prN},     // Cc         <control-007F>
-	{0x0080, 0x009F, prN},     // Cc    [32] <control-0080>..<control-009F>
-	{0x00A0, 0x00A0, prN},     // Zs         NO-BREAK SPACE
-	{0x00A1, 0x00A1, prA},     // Po         INVERTED EXCLAMATION MARK
-	{0x00A2, 0x00A3, prNa},    // Sc     [2] CENT SIGN..POUND SIGN
-	{0x00A4, 0x00A4, prA},     // Sc         CURRENCY SIGN
-	{0x00A5, 0x00A5, prNa},    // Sc         YEN SIGN
-	{0x00A6, 0x00A6, prNa},    // So         BROKEN BAR
-	{0x00A7, 0x00A7, prA},     // Po         SECTION SIGN
-	{0x00A8, 0x00A8, prA},     // Sk         DIAERESIS
-	{0x00A9, 0x00A9, prN},     // So         COPYRIGHT SIGN
-	{0x00AA, 0x00AA, prA},     // Lo         FEMININE ORDINAL INDICATOR
-	{0x00AB, 0x00AB, prN},     // Pi         LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-	{0x00AC, 0x00AC, prNa},    // Sm         NOT SIGN
-	{0x00AD, 0x00AD, prA},     // Cf         SOFT HYPHEN
-	{0x00AE, 0x00AE, prA},     // So         REGISTERED SIGN
-	{0x00AF, 0x00AF, prNa},    // Sk         MACRON
-	{0x00B0, 0x00B0, prA},     // So         DEGREE SIGN
-	{0x00B1, 0x00B1, prA},     // Sm         PLUS-MINUS SIGN
-	{0x00B2, 0x00B3, prA},     // No     [2] SUPERSCRIPT TWO..SUPERSCRIPT THREE
-	{0x00B4, 0x00B4, prA},     // Sk         ACUTE ACCENT
-	{0x00B5, 0x00B5, prN},     // Ll         MICRO SIGN
-	{0x00B6, 0x00B7, prA},     // Po     [2] PILCROW SIGN..MIDDLE DOT
-	{0x00B8, 0x00B8, prA},     // Sk         CEDILLA
-	{0x00B9, 0x00B9, prA},     // No         SUPERSCRIPT ONE
-	{0x00BA, 0x00BA, prA},     // Lo         MASCULINE ORDINAL INDICATOR
-	{0x00BB, 0x00BB, prN},     // Pf         RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-	{0x00BC, 0x00BE, prA},     // No     [3] VULGAR FRACTION ONE QUARTER..VULGAR FRACTION THREE QUARTERS
-	{0x00BF, 0x00BF, prA},     // Po         INVERTED QUESTION MARK
-	{0x00C0, 0x00C5, prN},     // Lu     [6] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER A WITH RING ABOVE
-	{0x00C6, 0x00C6, prA},     // Lu         LATIN CAPITAL LETTER AE
-	{0x00C7, 0x00CF, prN},     // Lu     [9] LATIN CAPITAL LETTER C WITH CEDILLA..LATIN CAPITAL LETTER I WITH DIAERESIS
-	{0x00D0, 0x00D0, prA},     // Lu         LATIN CAPITAL LETTER ETH
-	{0x00D1, 0x00D6, prN},     // Lu     [6] LATIN CAPITAL LETTER N WITH TILDE..LATIN CAPITAL LETTER O WITH DIAERESIS
-	{0x00D7, 0x00D7, prA},     // Sm         MULTIPLICATION SIGN
-	{0x00D8, 0x00D8, prA},     // Lu         LATIN CAPITAL LETTER O WITH STROKE
-	{0x00D9, 0x00DD, prN},     // Lu     [5] LATIN CAPITAL LETTER U WITH GRAVE..LATIN CAPITAL LETTER Y WITH ACUTE
-	{0x00DE, 0x00E1, prA},     // L&     [4] LATIN CAPITAL LETTER THORN..LATIN SMALL LETTER A WITH ACUTE
-	{0x00E2, 0x00E5, prN},     // Ll     [4] LATIN SMALL LETTER A WITH CIRCUMFLEX..LATIN SMALL LETTER A WITH RING ABOVE
-	{0x00E6, 0x00E6, prA},     // Ll         LATIN SMALL LETTER AE
-	{0x00E7, 0x00E7, prN},     // Ll         LATIN SMALL LETTER C WITH CEDILLA
-	{0x00E8, 0x00EA, prA},     // Ll     [3] LATIN SMALL LETTER E WITH GRAVE..LATIN SMALL LETTER E WITH CIRCUMFLEX
-	{0x00EB, 0x00EB, prN},     // Ll         LATIN SMALL LETTER E WITH DIAERESIS
-	{0x00EC, 0x00ED, prA},     // Ll     [2] LATIN SMALL LETTER I WITH GRAVE..LATIN SMALL LETTER I WITH ACUTE
-	{0x00EE, 0x00EF, prN},     // Ll     [2] LATIN SMALL LETTER I WITH CIRCUMFLEX..LATIN SMALL LETTER I WITH DIAERESIS
-	{0x00F0, 0x00F0, prA},     // Ll         LATIN SMALL LETTER ETH
-	{0x00F1, 0x00F1, prN},     // Ll         LATIN SMALL LETTER N WITH TILDE
-	{0x00F2, 0x00F3, prA},     // Ll     [2] LATIN SMALL LETTER O WITH GRAVE..LATIN SMALL LETTER O WITH ACUTE
-	{0x00F4, 0x00F6, prN},     // Ll     [3] LATIN SMALL LETTER O WITH CIRCUMFLEX..LATIN SMALL LETTER O WITH DIAERESIS
-	{0x00F7, 0x00F7, prA},     // Sm         DIVISION SIGN
-	{0x00F8, 0x00FA, prA},     // Ll     [3] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER U WITH ACUTE
-	{0x00FB, 0x00FB, prN},     // Ll         LATIN SMALL LETTER U WITH CIRCUMFLEX
-	{0x00FC, 0x00FC, prA},     // Ll         LATIN SMALL LETTER U WITH DIAERESIS
-	{0x00FD, 0x00FD, prN},     // Ll         LATIN SMALL LETTER Y WITH ACUTE
-	{0x00FE, 0x00FE, prA},     // Ll         LATIN SMALL LETTER THORN
-	{0x00FF, 0x00FF, prN},     // Ll         LATIN SMALL LETTER Y WITH DIAERESIS
-	{0x0100, 0x0100, prN},     // Lu         LATIN CAPITAL LETTER A WITH MACRON
-	{0x0101, 0x0101, prA},     // Ll         LATIN SMALL LETTER A WITH MACRON
-	{0x0102, 0x0110, prN},     // L&    [15] LATIN CAPITAL LETTER A WITH BREVE..LATIN CAPITAL LETTER D WITH STROKE
-	{0x0111, 0x0111, prA},     // Ll         LATIN SMALL LETTER D WITH STROKE
-	{0x0112, 0x0112, prN},     // Lu         LATIN CAPITAL LETTER E WITH MACRON
-	{0x0113, 0x0113, prA},     // Ll         LATIN SMALL LETTER E WITH MACRON
-	{0x0114, 0x011A, prN},     // L&     [7] LATIN CAPITAL LETTER E WITH BREVE..LATIN CAPITAL LETTER E WITH CARON
-	{0x011B, 0x011B, prA},     // Ll         LATIN SMALL LETTER E WITH CARON
-	{0x011C, 0x0125, prN},     // L&    [10] LATIN CAPITAL LETTER G WITH CIRCUMFLEX..LATIN SMALL LETTER H WITH CIRCUMFLEX
-	{0x0126, 0x0127, prA},     // L&     [2] LATIN CAPITAL LETTER H WITH STROKE..LATIN SMALL LETTER H WITH STROKE
-	{0x0128, 0x012A, prN},     // L&     [3] LATIN CAPITAL LETTER I WITH TILDE..LATIN CAPITAL LETTER I WITH MACRON
-	{0x012B, 0x012B, prA},     // Ll         LATIN SMALL LETTER I WITH MACRON
-	{0x012C, 0x0130, prN},     // L&     [5] LATIN CAPITAL LETTER I WITH BREVE..LATIN CAPITAL LETTER I WITH DOT ABOVE
-	{0x0131, 0x0133, prA},     // L&     [3] LATIN SMALL LETTER DOTLESS I..LATIN SMALL LIGATURE IJ
-	{0x0134, 0x0137, prN},     // L&     [4] LATIN CAPITAL LETTER J WITH CIRCUMFLEX..LATIN SMALL LETTER K WITH CEDILLA
-	{0x0138, 0x0138, prA},     // Ll         LATIN SMALL LETTER KRA
-	{0x0139, 0x013E, prN},     // L&     [6] LATIN CAPITAL LETTER L WITH ACUTE..LATIN SMALL LETTER L WITH CARON
-	{0x013F, 0x0142, prA},     // L&     [4] LATIN CAPITAL LETTER L WITH MIDDLE DOT..LATIN SMALL LETTER L WITH STROKE
-	{0x0143, 0x0143, prN},     // Lu         LATIN CAPITAL LETTER N WITH ACUTE
-	{0x0144, 0x0144, prA},     // Ll         LATIN SMALL LETTER N WITH ACUTE
-	{0x0145, 0x0147, prN},     // L&     [3] LATIN CAPITAL LETTER N WITH CEDILLA..LATIN CAPITAL LETTER N WITH CARON
-	{0x0148, 0x014B, prA},     // L&     [4] LATIN SMALL LETTER N WITH CARON..LATIN SMALL LETTER ENG
-	{0x014C, 0x014C, prN},     // Lu         LATIN CAPITAL LETTER O WITH MACRON
-	{0x014D, 0x014D, prA},     // Ll         LATIN SMALL LETTER O WITH MACRON
-	{0x014E, 0x0151, prN},     // L&     [4] LATIN CAPITAL LETTER O WITH BREVE..LATIN SMALL LETTER O WITH DOUBLE ACUTE
-	{0x0152, 0x0153, prA},     // L&     [2] LATIN CAPITAL LIGATURE OE..LATIN SMALL LIGATURE OE
-	{0x0154, 0x0165, prN},     // L&    [18] LATIN CAPITAL LETTER R WITH ACUTE..LATIN SMALL LETTER T WITH CARON
-	{0x0166, 0x0167, prA},     // L&     [2] LATIN CAPITAL LETTER T WITH STROKE..LATIN SMALL LETTER T WITH STROKE
-	{0x0168, 0x016A, prN},     // L&     [3] LATIN CAPITAL LETTER U WITH TILDE..LATIN CAPITAL LETTER U WITH MACRON
-	{0x016B, 0x016B, prA},     // Ll         LATIN SMALL LETTER U WITH MACRON
-	{0x016C, 0x017F, prN},     // L&    [20] LATIN CAPITAL LETTER U WITH BREVE..LATIN SMALL LETTER LONG S
-	{0x0180, 0x01BA, prN},     // L&    [59] LATIN SMALL LETTER B WITH STROKE..LATIN SMALL LETTER EZH WITH TAIL
-	{0x01BB, 0x01BB, prN},     // Lo         LATIN LETTER TWO WITH STROKE
-	{0x01BC, 0x01BF, prN},     // L&     [4] LATIN CAPITAL LETTER TONE FIVE..LATIN LETTER WYNN
-	{0x01C0, 0x01C3, prN},     // Lo     [4] LATIN LETTER DENTAL CLICK..LATIN LETTER RETROFLEX CLICK
-	{0x01C4, 0x01CD, prN},     // L&    [10] LATIN CAPITAL LETTER DZ WITH CARON..LATIN CAPITAL LETTER A WITH CARON
-	{0x01CE, 0x01CE, prA},     // Ll         LATIN SMALL LETTER A WITH CARON
-	{0x01CF, 0x01CF, prN},     // Lu         LATIN CAPITAL LETTER I WITH CARON
-	{0x01D0, 0x01D0, prA},     // Ll         LATIN SMALL LETTER I WITH CARON
-	{0x01D1, 0x01D1, prN},     // Lu         LATIN CAPITAL LETTER O WITH CARON
-	{0x01D2, 0x01D2, prA},     // Ll         LATIN SMALL LETTER O WITH CARON
-	{0x01D3, 0x01D3, prN},     // Lu         LATIN CAPITAL LETTER U WITH CARON
-	{0x01D4, 0x01D4, prA},     // Ll         LATIN SMALL LETTER U WITH CARON
-	{0x01D5, 0x01D5, prN},     // Lu         LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
-	{0x01D6, 0x01D6, prA},     // Ll         LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
-	{0x01D7, 0x01D7, prN},     // Lu         LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
-	{0x01D8, 0x01D8, prA},     // Ll         LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
-	{0x01D9, 0x01D9, prN},     // Lu         LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
-	{0x01DA, 0x01DA, prA},     // Ll         LATIN SMALL LETTER U WITH DIAERESIS AND CARON
-	{0x01DB, 0x01DB, prN},     // Lu         LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
-	{0x01DC, 0x01DC, prA},     // Ll         LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
-	{0x01DD, 0x024F, prN},     // L&   [115] LATIN SMALL LETTER TURNED E..LATIN SMALL LETTER Y WITH STROKE
-	{0x0250, 0x0250, prN},     // Ll         LATIN SMALL LETTER TURNED A
-	{0x0251, 0x0251, prA},     // Ll         LATIN SMALL LETTER ALPHA
-	{0x0252, 0x0260, prN},     // Ll    [15] LATIN SMALL LETTER TURNED ALPHA..LATIN SMALL LETTER G WITH HOOK
-	{0x0261, 0x0261, prA},     // Ll         LATIN SMALL LETTER SCRIPT G
-	{0x0262, 0x0293, prN},     // Ll    [50] LATIN LETTER SMALL CAPITAL G..LATIN SMALL LETTER EZH WITH CURL
-	{0x0294, 0x0294, prN},     // Lo         LATIN LETTER GLOTTAL STOP
-	{0x0295, 0x02AF, prN},     // Ll    [27] LATIN LETTER PHARYNGEAL VOICED FRICATIVE..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL
-	{0x02B0, 0x02C1, prN},     // Lm    [18] MODIFIER LETTER SMALL H..MODIFIER LETTER REVERSED GLOTTAL STOP
-	{0x02C2, 0x02C3, prN},     // Sk     [2] MODIFIER LETTER LEFT ARROWHEAD..MODIFIER LETTER RIGHT ARROWHEAD
-	{0x02C4, 0x02C4, prA},     // Sk         MODIFIER LETTER UP ARROWHEAD
-	{0x02C5, 0x02C5, prN},     // Sk         MODIFIER LETTER DOWN ARROWHEAD
-	{0x02C6, 0x02C6, prN},     // Lm         MODIFIER LETTER CIRCUMFLEX ACCENT
-	{0x02C7, 0x02C7, prA},     // Lm         CARON
-	{0x02C8, 0x02C8, prN},     // Lm         MODIFIER LETTER VERTICAL LINE
-	{0x02C9, 0x02CB, prA},     // Lm     [3] MODIFIER LETTER MACRON..MODIFIER LETTER GRAVE ACCENT
-	{0x02CC, 0x02CC, prN},     // Lm         MODIFIER LETTER LOW VERTICAL LINE
-	{0x02CD, 0x02CD, prA},     // Lm         MODIFIER LETTER LOW MACRON
-	{0x02CE, 0x02CF, prN},     // Lm     [2] MODIFIER LETTER LOW GRAVE ACCENT..MODIFIER LETTER LOW ACUTE ACCENT
-	{0x02D0, 0x02D0, prA},     // Lm         MODIFIER LETTER TRIANGULAR COLON
-	{0x02D1, 0x02D1, prN},     // Lm         MODIFIER LETTER HALF TRIANGULAR COLON
-	{0x02D2, 0x02D7, prN},     // Sk     [6] MODIFIER LETTER CENTRED RIGHT HALF RING..MODIFIER LETTER MINUS SIGN
-	{0x02D8, 0x02DB, prA},     // Sk     [4] BREVE..OGONEK
-	{0x02DC, 0x02DC, prN},     // Sk         SMALL TILDE
-	{0x02DD, 0x02DD, prA},     // Sk         DOUBLE ACUTE ACCENT
-	{0x02DE, 0x02DE, prN},     // Sk         MODIFIER LETTER RHOTIC HOOK
-	{0x02DF, 0x02DF, prA},     // Sk         MODIFIER LETTER CROSS ACCENT
-	{0x02E0, 0x02E4, prN},     // Lm     [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
-	{0x02E5, 0x02EB, prN},     // Sk     [7] MODIFIER LETTER EXTRA-HIGH TONE BAR..MODIFIER LETTER YANG DEPARTING TONE MARK
-	{0x02EC, 0x02EC, prN},     // Lm         MODIFIER LETTER VOICING
-	{0x02ED, 0x02ED, prN},     // Sk         MODIFIER LETTER UNASPIRATED
-	{0x02EE, 0x02EE, prN},     // Lm         MODIFIER LETTER DOUBLE APOSTROPHE
-	{0x02EF, 0x02FF, prN},     // Sk    [17] MODIFIER LETTER LOW DOWN ARROWHEAD..MODIFIER LETTER LOW LEFT ARROW
-	{0x0300, 0x036F, prA},     // Mn   [112] COMBINING GRAVE ACCENT..COMBINING LATIN SMALL LETTER X
-	{0x0370, 0x0373, prN},     // L&     [4] GREEK CAPITAL LETTER HETA..GREEK SMALL LETTER ARCHAIC SAMPI
-	{0x0374, 0x0374, prN},     // Lm         GREEK NUMERAL SIGN
-	{0x0375, 0x0375, prN},     // Sk         GREEK LOWER NUMERAL SIGN
-	{0x0376, 0x0377, prN},     // L&     [2] GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA..GREEK SMALL LETTER PAMPHYLIAN DIGAMMA
-	{0x037A, 0x037A, prN},     // Lm         GREEK YPOGEGRAMMENI
-	{0x037B, 0x037D, prN},     // Ll     [3] GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL
-	{0x037E, 0x037E, prN},     // Po         GREEK QUESTION MARK
-	{0x037F, 0x037F, prN},     // Lu         GREEK CAPITAL LETTER YOT
-	{0x0384, 0x0385, prN},     // Sk     [2] GREEK TONOS..GREEK DIALYTIKA TONOS
-	{0x0386, 0x0386, prN},     // Lu         GREEK CAPITAL LETTER ALPHA WITH TONOS
-	{0x0387, 0x0387, prN},     // Po         GREEK ANO TELEIA
-	{0x0388, 0x038A, prN},     // Lu     [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS
-	{0x038C, 0x038C, prN},     // Lu         GREEK CAPITAL LETTER OMICRON WITH TONOS
-	{0x038E, 0x0390, prN},     // L&     [3] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
-	{0x0391, 0x03A1, prA},     // Lu    [17] GREEK CAPITAL LETTER ALPHA..GREEK CAPITAL LETTER RHO
-	{0x03A3, 0x03A9, prA},     // Lu     [7] GREEK CAPITAL LETTER SIGMA..GREEK CAPITAL LETTER OMEGA
-	{0x03AA, 0x03B0, prN},     // L&     [7] GREEK CAPITAL LETTER IOTA WITH DIALYTIKA..GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
-	{0x03B1, 0x03C1, prA},     // Ll    [17] GREEK SMALL LETTER ALPHA..GREEK SMALL LETTER RHO
-	{0x03C2, 0x03C2, prN},     // Ll         GREEK SMALL LETTER FINAL SIGMA
-	{0x03C3, 0x03C9, prA},     // Ll     [7] GREEK SMALL LETTER SIGMA..GREEK SMALL LETTER OMEGA
-	{0x03CA, 0x03F5, prN},     // L&    [44] GREEK SMALL LETTER IOTA WITH DIALYTIKA..GREEK LUNATE EPSILON SYMBOL
-	{0x03F6, 0x03F6, prN},     // Sm         GREEK REVERSED LUNATE EPSILON SYMBOL
-	{0x03F7, 0x03FF, prN},     // L&     [9] GREEK CAPITAL LETTER SHO..GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL
-	{0x0400, 0x0400, prN},     // Lu         CYRILLIC CAPITAL LETTER IE WITH GRAVE
-	{0x0401, 0x0401, prA},     // Lu         CYRILLIC CAPITAL LETTER IO
-	{0x0402, 0x040F, prN},     // Lu    [14] CYRILLIC CAPITAL LETTER DJE..CYRILLIC CAPITAL LETTER DZHE
-	{0x0410, 0x044F, prA},     // L&    [64] CYRILLIC CAPITAL LETTER A..CYRILLIC SMALL LETTER YA
-	{0x0450, 0x0450, prN},     // Ll         CYRILLIC SMALL LETTER IE WITH GRAVE
-	{0x0451, 0x0451, prA},     // Ll         CYRILLIC SMALL LETTER IO
-	{0x0452, 0x0481, prN},     // L&    [48] CYRILLIC SMALL LETTER DJE..CYRILLIC SMALL LETTER KOPPA
-	{0x0482, 0x0482, prN},     // So         CYRILLIC THOUSANDS SIGN
-	{0x0483, 0x0487, prN},     // Mn     [5] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC POKRYTIE
-	{0x0488, 0x0489, prN},     // Me     [2] COMBINING CYRILLIC HUNDRED THOUSANDS SIGN..COMBINING CYRILLIC MILLIONS SIGN
-	{0x048A, 0x04FF, prN},     // L&   [118] CYRILLIC CAPITAL LETTER SHORT I WITH TAIL..CYRILLIC SMALL LETTER HA WITH STROKE
-	{0x0500, 0x052F, prN},     // L&    [48] CYRILLIC CAPITAL LETTER KOMI DE..CYRILLIC SMALL LETTER EL WITH DESCENDER
-	{0x0531, 0x0556, prN},     // Lu    [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH
-	{0x0559, 0x0559, prN},     // Lm         ARMENIAN MODIFIER LETTER LEFT HALF RING
-	{0x055A, 0x055F, prN},     // Po     [6] ARMENIAN APOSTROPHE..ARMENIAN ABBREVIATION MARK
-	{0x0560, 0x0588, prN},     // Ll    [41] ARMENIAN SMALL LETTER TURNED AYB..ARMENIAN SMALL LETTER YI WITH STROKE
-	{0x0589, 0x0589, prN},     // Po         ARMENIAN FULL STOP
-	{0x058A, 0x058A, prN},     // Pd         ARMENIAN HYPHEN
-	{0x058D, 0x058E, prN},     // So     [2] RIGHT-FACING ARMENIAN ETERNITY SIGN..LEFT-FACING ARMENIAN ETERNITY SIGN
-	{0x058F, 0x058F, prN},     // Sc         ARMENIAN DRAM SIGN
-	{0x0591, 0x05BD, prN},     // Mn    [45] HEBREW ACCENT ETNAHTA..HEBREW POINT METEG
-	{0x05BE, 0x05BE, prN},     // Pd         HEBREW PUNCTUATION MAQAF
-	{0x05BF, 0x05BF, prN},     // Mn         HEBREW POINT RAFE
-	{0x05C0, 0x05C0, prN},     // Po         HEBREW PUNCTUATION PASEQ
-	{0x05C1, 0x05C2, prN},     // Mn     [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT
-	{0x05C3, 0x05C3, prN},     // Po         HEBREW PUNCTUATION SOF PASUQ
-	{0x05C4, 0x05C5, prN},     // Mn     [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT
-	{0x05C6, 0x05C6, prN},     // Po         HEBREW PUNCTUATION NUN HAFUKHA
-	{0x05C7, 0x05C7, prN},     // Mn         HEBREW POINT QAMATS QATAN
-	{0x05D0, 0x05EA, prN},     // Lo    [27] HEBREW LETTER ALEF..HEBREW LETTER TAV
-	{0x05EF, 0x05F2, prN},     // Lo     [4] HEBREW YOD TRIANGLE..HEBREW LIGATURE YIDDISH DOUBLE YOD
-	{0x05F3, 0x05F4, prN},     // Po     [2] HEBREW PUNCTUATION GERESH..HEBREW PUNCTUATION GERSHAYIM
-	{0x0600, 0x0605, prN},     // Cf     [6] ARABIC NUMBER SIGN..ARABIC NUMBER MARK ABOVE
-	{0x0606, 0x0608, prN},     // Sm     [3] ARABIC-INDIC CUBE ROOT..ARABIC RAY
-	{0x0609, 0x060A, prN},     // Po     [2] ARABIC-INDIC PER MILLE SIGN..ARABIC-INDIC PER TEN THOUSAND SIGN
-	{0x060B, 0x060B, prN},     // Sc         AFGHANI SIGN
-	{0x060C, 0x060D, prN},     // Po     [2] ARABIC COMMA..ARABIC DATE SEPARATOR
-	{0x060E, 0x060F, prN},     // So     [2] ARABIC POETIC VERSE SIGN..ARABIC SIGN MISRA
-	{0x0610, 0x061A, prN},     // Mn    [11] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL KASRA
-	{0x061B, 0x061B, prN},     // Po         ARABIC SEMICOLON
-	{0x061C, 0x061C, prN},     // Cf         ARABIC LETTER MARK
-	{0x061D, 0x061F, prN},     // Po     [3] ARABIC END OF TEXT MARK..ARABIC QUESTION MARK
-	{0x0620, 0x063F, prN},     // Lo    [32] ARABIC LETTER KASHMIRI YEH..ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE
-	{0x0640, 0x0640, prN},     // Lm         ARABIC TATWEEL
-	{0x0641, 0x064A, prN},     // Lo    [10] ARABIC LETTER FEH..ARABIC LETTER YEH
-	{0x064B, 0x065F, prN},     // Mn    [21] ARABIC FATHATAN..ARABIC WAVY HAMZA BELOW
-	{0x0660, 0x0669, prN},     // Nd    [10] ARABIC-INDIC DIGIT ZERO..ARABIC-INDIC DIGIT NINE
-	{0x066A, 0x066D, prN},     // Po     [4] ARABIC PERCENT SIGN..ARABIC FIVE POINTED STAR
-	{0x066E, 0x066F, prN},     // Lo     [2] ARABIC LETTER DOTLESS BEH..ARABIC LETTER DOTLESS QAF
-	{0x0670, 0x0670, prN},     // Mn         ARABIC LETTER SUPERSCRIPT ALEF
-	{0x0671, 0x06D3, prN},     // Lo    [99] ARABIC LETTER ALEF WASLA..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE
-	{0x06D4, 0x06D4, prN},     // Po         ARABIC FULL STOP
-	{0x06D5, 0x06D5, prN},     // Lo         ARABIC LETTER AE
-	{0x06D6, 0x06DC, prN},     // Mn     [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN
-	{0x06DD, 0x06DD, prN},     // Cf         ARABIC END OF AYAH
-	{0x06DE, 0x06DE, prN},     // So         ARABIC START OF RUB EL HIZB
-	{0x06DF, 0x06E4, prN},     // Mn     [6] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH MADDA
-	{0x06E5, 0x06E6, prN},     // Lm     [2] ARABIC SMALL WAW..ARABIC SMALL YEH
-	{0x06E7, 0x06E8, prN},     // Mn     [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON
-	{0x06E9, 0x06E9, prN},     // So         ARABIC PLACE OF SAJDAH
-	{0x06EA, 0x06ED, prN},     // Mn     [4] ARABIC EMPTY CENTRE LOW STOP..ARABIC SMALL LOW MEEM
-	{0x06EE, 0x06EF, prN},     // Lo     [2] ARABIC LETTER DAL WITH INVERTED V..ARABIC LETTER REH WITH INVERTED V
-	{0x06F0, 0x06F9, prN},     // Nd    [10] EXTENDED ARABIC-INDIC DIGIT ZERO..EXTENDED ARABIC-INDIC DIGIT NINE
-	{0x06FA, 0x06FC, prN},     // Lo     [3] ARABIC LETTER SHEEN WITH DOT BELOW..ARABIC LETTER GHAIN WITH DOT BELOW
-	{0x06FD, 0x06FE, prN},     // So     [2] ARABIC SIGN SINDHI AMPERSAND..ARABIC SIGN SINDHI POSTPOSITION MEN
-	{0x06FF, 0x06FF, prN},     // Lo         ARABIC LETTER HEH WITH INVERTED V
-	{0x0700, 0x070D, prN},     // Po    [14] SYRIAC END OF PARAGRAPH..SYRIAC HARKLEAN ASTERISCUS
-	{0x070F, 0x070F, prN},     // Cf         SYRIAC ABBREVIATION MARK
-	{0x0710, 0x0710, prN},     // Lo         SYRIAC LETTER ALAPH
-	{0x0711, 0x0711, prN},     // Mn         SYRIAC LETTER SUPERSCRIPT ALAPH
-	{0x0712, 0x072F, prN},     // Lo    [30] SYRIAC LETTER BETH..SYRIAC LETTER PERSIAN DHALATH
-	{0x0730, 0x074A, prN},     // Mn    [27] SYRIAC PTHAHA ABOVE..SYRIAC BARREKH
-	{0x074D, 0x074F, prN},     // Lo     [3] SYRIAC LETTER SOGDIAN ZHAIN..SYRIAC LETTER SOGDIAN FE
-	{0x0750, 0x077F, prN},     // Lo    [48] ARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOW..ARABIC LETTER KAF WITH TWO DOTS ABOVE
-	{0x0780, 0x07A5, prN},     // Lo    [38] THAANA LETTER HAA..THAANA LETTER WAAVU
-	{0x07A6, 0x07B0, prN},     // Mn    [11] THAANA ABAFILI..THAANA SUKUN
-	{0x07B1, 0x07B1, prN},     // Lo         THAANA LETTER NAA
-	{0x07C0, 0x07C9, prN},     // Nd    [10] NKO DIGIT ZERO..NKO DIGIT NINE
-	{0x07CA, 0x07EA, prN},     // Lo    [33] NKO LETTER A..NKO LETTER JONA RA
-	{0x07EB, 0x07F3, prN},     // Mn     [9] NKO COMBINING SHORT HIGH TONE..NKO COMBINING DOUBLE DOT ABOVE
-	{0x07F4, 0x07F5, prN},     // Lm     [2] NKO HIGH TONE APOSTROPHE..NKO LOW TONE APOSTROPHE
-	{0x07F6, 0x07F6, prN},     // So         NKO SYMBOL OO DENNEN
-	{0x07F7, 0x07F9, prN},     // Po     [3] NKO SYMBOL GBAKURUNEN..NKO EXCLAMATION MARK
-	{0x07FA, 0x07FA, prN},     // Lm         NKO LAJANYALAN
-	{0x07FD, 0x07FD, prN},     // Mn         NKO DANTAYALAN
-	{0x07FE, 0x07FF, prN},     // Sc     [2] NKO DOROME SIGN..NKO TAMAN SIGN
-	{0x0800, 0x0815, prN},     // Lo    [22] SAMARITAN LETTER ALAF..SAMARITAN LETTER TAAF
-	{0x0816, 0x0819, prN},     // Mn     [4] SAMARITAN MARK IN..SAMARITAN MARK DAGESH
-	{0x081A, 0x081A, prN},     // Lm         SAMARITAN MODIFIER LETTER EPENTHETIC YUT
-	{0x081B, 0x0823, prN},     // Mn     [9] SAMARITAN MARK EPENTHETIC YUT..SAMARITAN VOWEL SIGN A
-	{0x0824, 0x0824, prN},     // Lm         SAMARITAN MODIFIER LETTER SHORT A
-	{0x0825, 0x0827, prN},     // Mn     [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U
-	{0x0828, 0x0828, prN},     // Lm         SAMARITAN MODIFIER LETTER I
-	{0x0829, 0x082D, prN},     // Mn     [5] SAMARITAN VOWEL SIGN LONG I..SAMARITAN MARK NEQUDAA
-	{0x0830, 0x083E, prN},     // Po    [15] SAMARITAN PUNCTUATION NEQUDAA..SAMARITAN PUNCTUATION ANNAAU
-	{0x0840, 0x0858, prN},     // Lo    [25] MANDAIC LETTER HALQA..MANDAIC LETTER AIN
-	{0x0859, 0x085B, prN},     // Mn     [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK
-	{0x085E, 0x085E, prN},     // Po         MANDAIC PUNCTUATION
-	{0x0860, 0x086A, prN},     // Lo    [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA
-	{0x0870, 0x0887, prN},     // Lo    [24] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC BASELINE ROUND DOT
-	{0x0888, 0x0888, prN},     // Sk         ARABIC RAISED ROUND DOT
-	{0x0889, 0x088E, prN},     // Lo     [6] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC VERTICAL TAIL
-	{0x0890, 0x0891, prN},     // Cf     [2] ARABIC POUND MARK ABOVE..ARABIC PIASTRE MARK ABOVE
-	{0x0898, 0x089F, prN},     // Mn     [8] ARABIC SMALL HIGH WORD AL-JUZ..ARABIC HALF MADDA OVER MADDA
-	{0x08A0, 0x08C8, prN},     // Lo    [41] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER GRAF
-	{0x08C9, 0x08C9, prN},     // Lm         ARABIC SMALL FARSI YEH
-	{0x08CA, 0x08E1, prN},     // Mn    [24] ARABIC SMALL HIGH FARSI YEH..ARABIC SMALL HIGH SIGN SAFHA
-	{0x08E2, 0x08E2, prN},     // Cf         ARABIC DISPUTED END OF AYAH
-	{0x08E3, 0x08FF, prN},     // Mn    [29] ARABIC TURNED DAMMA BELOW..ARABIC MARK SIDEWAYS NOON GHUNNA
-	{0x0900, 0x0902, prN},     // Mn     [3] DEVANAGARI SIGN INVERTED CANDRABINDU..DEVANAGARI SIGN ANUSVARA
-	{0x0903, 0x0903, prN},     // Mc         DEVANAGARI SIGN VISARGA
-	{0x0904, 0x0939, prN},     // Lo    [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA
-	{0x093A, 0x093A, prN},     // Mn         DEVANAGARI VOWEL SIGN OE
-	{0x093B, 0x093B, prN},     // Mc         DEVANAGARI VOWEL SIGN OOE
-	{0x093C, 0x093C, prN},     // Mn         DEVANAGARI SIGN NUKTA
-	{0x093D, 0x093D, prN},     // Lo         DEVANAGARI SIGN AVAGRAHA
-	{0x093E, 0x0940, prN},     // Mc     [3] DEVANAGARI VOWEL SIGN AA..DEVANAGARI VOWEL SIGN II
-	{0x0941, 0x0948, prN},     // Mn     [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI
-	{0x0949, 0x094C, prN},     // Mc     [4] DEVANAGARI VOWEL SIGN CANDRA O..DEVANAGARI VOWEL SIGN AU
-	{0x094D, 0x094D, prN},     // Mn         DEVANAGARI SIGN VIRAMA
-	{0x094E, 0x094F, prN},     // Mc     [2] DEVANAGARI VOWEL SIGN PRISHTHAMATRA E..DEVANAGARI VOWEL SIGN AW
-	{0x0950, 0x0950, prN},     // Lo         DEVANAGARI OM
-	{0x0951, 0x0957, prN},     // Mn     [7] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI VOWEL SIGN UUE
-	{0x0958, 0x0961, prN},     // Lo    [10] DEVANAGARI LETTER QA..DEVANAGARI LETTER VOCALIC LL
-	{0x0962, 0x0963, prN},     // Mn     [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL
-	{0x0964, 0x0965, prN},     // Po     [2] DEVANAGARI DANDA..DEVANAGARI DOUBLE DANDA
-	{0x0966, 0x096F, prN},     // Nd    [10] DEVANAGARI DIGIT ZERO..DEVANAGARI DIGIT NINE
-	{0x0970, 0x0970, prN},     // Po         DEVANAGARI ABBREVIATION SIGN
-	{0x0971, 0x0971, prN},     // Lm         DEVANAGARI SIGN HIGH SPACING DOT
-	{0x0972, 0x097F, prN},     // Lo    [14] DEVANAGARI LETTER CANDRA A..DEVANAGARI LETTER BBA
-	{0x0980, 0x0980, prN},     // Lo         BENGALI ANJI
-	{0x0981, 0x0981, prN},     // Mn         BENGALI SIGN CANDRABINDU
-	{0x0982, 0x0983, prN},     // Mc     [2] BENGALI SIGN ANUSVARA..BENGALI SIGN VISARGA
-	{0x0985, 0x098C, prN},     // Lo     [8] BENGALI LETTER A..BENGALI LETTER VOCALIC L
-	{0x098F, 0x0990, prN},     // Lo     [2] BENGALI LETTER E..BENGALI LETTER AI
-	{0x0993, 0x09A8, prN},     // Lo    [22] BENGALI LETTER O..BENGALI LETTER NA
-	{0x09AA, 0x09B0, prN},     // Lo     [7] BENGALI LETTER PA..BENGALI LETTER RA
-	{0x09B2, 0x09B2, prN},     // Lo         BENGALI LETTER LA
-	{0x09B6, 0x09B9, prN},     // Lo     [4] BENGALI LETTER SHA..BENGALI LETTER HA
-	{0x09BC, 0x09BC, prN},     // Mn         BENGALI SIGN NUKTA
-	{0x09BD, 0x09BD, prN},     // Lo         BENGALI SIGN AVAGRAHA
-	{0x09BE, 0x09C0, prN},     // Mc     [3] BENGALI VOWEL SIGN AA..BENGALI VOWEL SIGN II
-	{0x09C1, 0x09C4, prN},     // Mn     [4] BENGALI VOWEL SIGN U..BENGALI VOWEL SIGN VOCALIC RR
-	{0x09C7, 0x09C8, prN},     // Mc     [2] BENGALI VOWEL SIGN E..BENGALI VOWEL SIGN AI
-	{0x09CB, 0x09CC, prN},     // Mc     [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU
-	{0x09CD, 0x09CD, prN},     // Mn         BENGALI SIGN VIRAMA
-	{0x09CE, 0x09CE, prN},     // Lo         BENGALI LETTER KHANDA TA
-	{0x09D7, 0x09D7, prN},     // Mc         BENGALI AU LENGTH MARK
-	{0x09DC, 0x09DD, prN},     // Lo     [2] BENGALI LETTER RRA..BENGALI LETTER RHA
-	{0x09DF, 0x09E1, prN},     // Lo     [3] BENGALI LETTER YYA..BENGALI LETTER VOCALIC LL
-	{0x09E2, 0x09E3, prN},     // Mn     [2] BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL
-	{0x09E6, 0x09EF, prN},     // Nd    [10] BENGALI DIGIT ZERO..BENGALI DIGIT NINE
-	{0x09F0, 0x09F1, prN},     // Lo     [2] BENGALI LETTER RA WITH MIDDLE DIAGONAL..BENGALI LETTER RA WITH LOWER DIAGONAL
-	{0x09F2, 0x09F3, prN},     // Sc     [2] BENGALI RUPEE MARK..BENGALI RUPEE SIGN
-	{0x09F4, 0x09F9, prN},     // No     [6] BENGALI CURRENCY NUMERATOR ONE..BENGALI CURRENCY DENOMINATOR SIXTEEN
-	{0x09FA, 0x09FA, prN},     // So         BENGALI ISSHAR
-	{0x09FB, 0x09FB, prN},     // Sc         BENGALI GANDA MARK
-	{0x09FC, 0x09FC, prN},     // Lo         BENGALI LETTER VEDIC ANUSVARA
-	{0x09FD, 0x09FD, prN},     // Po         BENGALI ABBREVIATION SIGN
-	{0x09FE, 0x09FE, prN},     // Mn         BENGALI SANDHI MARK
-	{0x0A01, 0x0A02, prN},     // Mn     [2] GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN BINDI
-	{0x0A03, 0x0A03, prN},     // Mc         GURMUKHI SIGN VISARGA
-	{0x0A05, 0x0A0A, prN},     // Lo     [6] GURMUKHI LETTER A..GURMUKHI LETTER UU
-	{0x0A0F, 0x0A10, prN},     // Lo     [2] GURMUKHI LETTER EE..GURMUKHI LETTER AI
-	{0x0A13, 0x0A28, prN},     // Lo    [22] GURMUKHI LETTER OO..GURMUKHI LETTER NA
-	{0x0A2A, 0x0A30, prN},     // Lo     [7] GURMUKHI LETTER PA..GURMUKHI LETTER RA
-	{0x0A32, 0x0A33, prN},     // Lo     [2] GURMUKHI LETTER LA..GURMUKHI LETTER LLA
-	{0x0A35, 0x0A36, prN},     // Lo     [2] GURMUKHI LETTER VA..GURMUKHI LETTER SHA
-	{0x0A38, 0x0A39, prN},     // Lo     [2] GURMUKHI LETTER SA..GURMUKHI LETTER HA
-	{0x0A3C, 0x0A3C, prN},     // Mn         GURMUKHI SIGN NUKTA
-	{0x0A3E, 0x0A40, prN},     // Mc     [3] GURMUKHI VOWEL SIGN AA..GURMUKHI VOWEL SIGN II
-	{0x0A41, 0x0A42, prN},     // Mn     [2] GURMUKHI VOWEL SIGN U..GURMUKHI VOWEL SIGN UU
-	{0x0A47, 0x0A48, prN},     // Mn     [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI
-	{0x0A4B, 0x0A4D, prN},     // Mn     [3] GURMUKHI VOWEL SIGN OO..GURMUKHI SIGN VIRAMA
-	{0x0A51, 0x0A51, prN},     // Mn         GURMUKHI SIGN UDAAT
-	{0x0A59, 0x0A5C, prN},     // Lo     [4] GURMUKHI LETTER KHHA..GURMUKHI LETTER RRA
-	{0x0A5E, 0x0A5E, prN},     // Lo         GURMUKHI LETTER FA
-	{0x0A66, 0x0A6F, prN},     // Nd    [10] GURMUKHI DIGIT ZERO..GURMUKHI DIGIT NINE
-	{0x0A70, 0x0A71, prN},     // Mn     [2] GURMUKHI TIPPI..GURMUKHI ADDAK
-	{0x0A72, 0x0A74, prN},     // Lo     [3] GURMUKHI IRI..GURMUKHI EK ONKAR
-	{0x0A75, 0x0A75, prN},     // Mn         GURMUKHI SIGN YAKASH
-	{0x0A76, 0x0A76, prN},     // Po         GURMUKHI ABBREVIATION SIGN
-	{0x0A81, 0x0A82, prN},     // Mn     [2] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN ANUSVARA
-	{0x0A83, 0x0A83, prN},     // Mc         GUJARATI SIGN VISARGA
-	{0x0A85, 0x0A8D, prN},     // Lo     [9] GUJARATI LETTER A..GUJARATI VOWEL CANDRA E
-	{0x0A8F, 0x0A91, prN},     // Lo     [3] GUJARATI LETTER E..GUJARATI VOWEL CANDRA O
-	{0x0A93, 0x0AA8, prN},     // Lo    [22] GUJARATI LETTER O..GUJARATI LETTER NA
-	{0x0AAA, 0x0AB0, prN},     // Lo     [7] GUJARATI LETTER PA..GUJARATI LETTER RA
-	{0x0AB2, 0x0AB3, prN},     // Lo     [2] GUJARATI LETTER LA..GUJARATI LETTER LLA
-	{0x0AB5, 0x0AB9, prN},     // Lo     [5] GUJARATI LETTER VA..GUJARATI LETTER HA
-	{0x0ABC, 0x0ABC, prN},     // Mn         GUJARATI SIGN NUKTA
-	{0x0ABD, 0x0ABD, prN},     // Lo         GUJARATI SIGN AVAGRAHA
-	{0x0ABE, 0x0AC0, prN},     // Mc     [3] GUJARATI VOWEL SIGN AA..GUJARATI VOWEL SIGN II
-	{0x0AC1, 0x0AC5, prN},     // Mn     [5] GUJARATI VOWEL SIGN U..GUJARATI VOWEL SIGN CANDRA E
-	{0x0AC7, 0x0AC8, prN},     // Mn     [2] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN AI
-	{0x0AC9, 0x0AC9, prN},     // Mc         GUJARATI VOWEL SIGN CANDRA O
-	{0x0ACB, 0x0ACC, prN},     // Mc     [2] GUJARATI VOWEL SIGN O..GUJARATI VOWEL SIGN AU
-	{0x0ACD, 0x0ACD, prN},     // Mn         GUJARATI SIGN VIRAMA
-	{0x0AD0, 0x0AD0, prN},     // Lo         GUJARATI OM
-	{0x0AE0, 0x0AE1, prN},     // Lo     [2] GUJARATI LETTER VOCALIC RR..GUJARATI LETTER VOCALIC LL
-	{0x0AE2, 0x0AE3, prN},     // Mn     [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL
-	{0x0AE6, 0x0AEF, prN},     // Nd    [10] GUJARATI DIGIT ZERO..GUJARATI DIGIT NINE
-	{0x0AF0, 0x0AF0, prN},     // Po         GUJARATI ABBREVIATION SIGN
-	{0x0AF1, 0x0AF1, prN},     // Sc         GUJARATI RUPEE SIGN
-	{0x0AF9, 0x0AF9, prN},     // Lo         GUJARATI LETTER ZHA
-	{0x0AFA, 0x0AFF, prN},     // Mn     [6] GUJARATI SIGN SUKUN..GUJARATI SIGN TWO-CIRCLE NUKTA ABOVE
-	{0x0B01, 0x0B01, prN},     // Mn         ORIYA SIGN CANDRABINDU
-	{0x0B02, 0x0B03, prN},     // Mc     [2] ORIYA SIGN ANUSVARA..ORIYA SIGN VISARGA
-	{0x0B05, 0x0B0C, prN},     // Lo     [8] ORIYA LETTER A..ORIYA LETTER VOCALIC L
-	{0x0B0F, 0x0B10, prN},     // Lo     [2] ORIYA LETTER E..ORIYA LETTER AI
-	{0x0B13, 0x0B28, prN},     // Lo    [22] ORIYA LETTER O..ORIYA LETTER NA
-	{0x0B2A, 0x0B30, prN},     // Lo     [7] ORIYA LETTER PA..ORIYA LETTER RA
-	{0x0B32, 0x0B33, prN},     // Lo     [2] ORIYA LETTER LA..ORIYA LETTER LLA
-	{0x0B35, 0x0B39, prN},     // Lo     [5] ORIYA LETTER VA..ORIYA LETTER HA
-	{0x0B3C, 0x0B3C, prN},     // Mn         ORIYA SIGN NUKTA
-	{0x0B3D, 0x0B3D, prN},     // Lo         ORIYA SIGN AVAGRAHA
-	{0x0B3E, 0x0B3E, prN},     // Mc         ORIYA VOWEL SIGN AA
-	{0x0B3F, 0x0B3F, prN},     // Mn         ORIYA VOWEL SIGN I
-	{0x0B40, 0x0B40, prN},     // Mc         ORIYA VOWEL SIGN II
-	{0x0B41, 0x0B44, prN},     // Mn     [4] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC RR
-	{0x0B47, 0x0B48, prN},     // Mc     [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI
-	{0x0B4B, 0x0B4C, prN},     // Mc     [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU
-	{0x0B4D, 0x0B4D, prN},     // Mn         ORIYA SIGN VIRAMA
-	{0x0B55, 0x0B56, prN},     // Mn     [2] ORIYA SIGN OVERLINE..ORIYA AI LENGTH MARK
-	{0x0B57, 0x0B57, prN},     // Mc         ORIYA AU LENGTH MARK
-	{0x0B5C, 0x0B5D, prN},     // Lo     [2] ORIYA LETTER RRA..ORIYA LETTER RHA
-	{0x0B5F, 0x0B61, prN},     // Lo     [3] ORIYA LETTER YYA..ORIYA LETTER VOCALIC LL
-	{0x0B62, 0x0B63, prN},     // Mn     [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL
-	{0x0B66, 0x0B6F, prN},     // Nd    [10] ORIYA DIGIT ZERO..ORIYA DIGIT NINE
-	{0x0B70, 0x0B70, prN},     // So         ORIYA ISSHAR
-	{0x0B71, 0x0B71, prN},     // Lo         ORIYA LETTER WA
-	{0x0B72, 0x0B77, prN},     // No     [6] ORIYA FRACTION ONE QUARTER..ORIYA FRACTION THREE SIXTEENTHS
-	{0x0B82, 0x0B82, prN},     // Mn         TAMIL SIGN ANUSVARA
-	{0x0B83, 0x0B83, prN},     // Lo         TAMIL SIGN VISARGA
-	{0x0B85, 0x0B8A, prN},     // Lo     [6] TAMIL LETTER A..TAMIL LETTER UU
-	{0x0B8E, 0x0B90, prN},     // Lo     [3] TAMIL LETTER E..TAMIL LETTER AI
-	{0x0B92, 0x0B95, prN},     // Lo     [4] TAMIL LETTER O..TAMIL LETTER KA
-	{0x0B99, 0x0B9A, prN},     // Lo     [2] TAMIL LETTER NGA..TAMIL LETTER CA
-	{0x0B9C, 0x0B9C, prN},     // Lo         TAMIL LETTER JA
-	{0x0B9E, 0x0B9F, prN},     // Lo     [2] TAMIL LETTER NYA..TAMIL LETTER TTA
-	{0x0BA3, 0x0BA4, prN},     // Lo     [2] TAMIL LETTER NNA..TAMIL LETTER TA
-	{0x0BA8, 0x0BAA, prN},     // Lo     [3] TAMIL LETTER NA..TAMIL LETTER PA
-	{0x0BAE, 0x0BB9, prN},     // Lo    [12] TAMIL LETTER MA..TAMIL LETTER HA
-	{0x0BBE, 0x0BBF, prN},     // Mc     [2] TAMIL VOWEL SIGN AA..TAMIL VOWEL SIGN I
-	{0x0BC0, 0x0BC0, prN},     // Mn         TAMIL VOWEL SIGN II
-	{0x0BC1, 0x0BC2, prN},     // Mc     [2] TAMIL VOWEL SIGN U..TAMIL VOWEL SIGN UU
-	{0x0BC6, 0x0BC8, prN},     // Mc     [3] TAMIL VOWEL SIGN E..TAMIL VOWEL SIGN AI
-	{0x0BCA, 0x0BCC, prN},     // Mc     [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU
-	{0x0BCD, 0x0BCD, prN},     // Mn         TAMIL SIGN VIRAMA
-	{0x0BD0, 0x0BD0, prN},     // Lo         TAMIL OM
-	{0x0BD7, 0x0BD7, prN},     // Mc         TAMIL AU LENGTH MARK
-	{0x0BE6, 0x0BEF, prN},     // Nd    [10] TAMIL DIGIT ZERO..TAMIL DIGIT NINE
-	{0x0BF0, 0x0BF2, prN},     // No     [3] TAMIL NUMBER TEN..TAMIL NUMBER ONE THOUSAND
-	{0x0BF3, 0x0BF8, prN},     // So     [6] TAMIL DAY SIGN..TAMIL AS ABOVE SIGN
-	{0x0BF9, 0x0BF9, prN},     // Sc         TAMIL RUPEE SIGN
-	{0x0BFA, 0x0BFA, prN},     // So         TAMIL NUMBER SIGN
-	{0x0C00, 0x0C00, prN},     // Mn         TELUGU SIGN COMBINING CANDRABINDU ABOVE
-	{0x0C01, 0x0C03, prN},     // Mc     [3] TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA
-	{0x0C04, 0x0C04, prN},     // Mn         TELUGU SIGN COMBINING ANUSVARA ABOVE
-	{0x0C05, 0x0C0C, prN},     // Lo     [8] TELUGU LETTER A..TELUGU LETTER VOCALIC L
-	{0x0C0E, 0x0C10, prN},     // Lo     [3] TELUGU LETTER E..TELUGU LETTER AI
-	{0x0C12, 0x0C28, prN},     // Lo    [23] TELUGU LETTER O..TELUGU LETTER NA
-	{0x0C2A, 0x0C39, prN},     // Lo    [16] TELUGU LETTER PA..TELUGU LETTER HA
-	{0x0C3C, 0x0C3C, prN},     // Mn         TELUGU SIGN NUKTA
-	{0x0C3D, 0x0C3D, prN},     // Lo         TELUGU SIGN AVAGRAHA
-	{0x0C3E, 0x0C40, prN},     // Mn     [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II
-	{0x0C41, 0x0C44, prN},     // Mc     [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR
-	{0x0C46, 0x0C48, prN},     // Mn     [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI
-	{0x0C4A, 0x0C4D, prN},     // Mn     [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA
-	{0x0C55, 0x0C56, prN},     // Mn     [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK
-	{0x0C58, 0x0C5A, prN},     // Lo     [3] TELUGU LETTER TSA..TELUGU LETTER RRRA
-	{0x0C5D, 0x0C5D, prN},     // Lo         TELUGU LETTER NAKAARA POLLU
-	{0x0C60, 0x0C61, prN},     // Lo     [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL
-	{0x0C62, 0x0C63, prN},     // Mn     [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL
-	{0x0C66, 0x0C6F, prN},     // Nd    [10] TELUGU DIGIT ZERO..TELUGU DIGIT NINE
-	{0x0C77, 0x0C77, prN},     // Po         TELUGU SIGN SIDDHAM
-	{0x0C78, 0x0C7E, prN},     // No     [7] TELUGU FRACTION DIGIT ZERO FOR ODD POWERS OF FOUR..TELUGU FRACTION DIGIT THREE FOR EVEN POWERS OF FOUR
-	{0x0C7F, 0x0C7F, prN},     // So         TELUGU SIGN TUUMU
-	{0x0C80, 0x0C80, prN},     // Lo         KANNADA SIGN SPACING CANDRABINDU
-	{0x0C81, 0x0C81, prN},     // Mn         KANNADA SIGN CANDRABINDU
-	{0x0C82, 0x0C83, prN},     // Mc     [2] KANNADA SIGN ANUSVARA..KANNADA SIGN VISARGA
-	{0x0C84, 0x0C84, prN},     // Po         KANNADA SIGN SIDDHAM
-	{0x0C85, 0x0C8C, prN},     // Lo     [8] KANNADA LETTER A..KANNADA LETTER VOCALIC L
-	{0x0C8E, 0x0C90, prN},     // Lo     [3] KANNADA LETTER E..KANNADA LETTER AI
-	{0x0C92, 0x0CA8, prN},     // Lo    [23] KANNADA LETTER O..KANNADA LETTER NA
-	{0x0CAA, 0x0CB3, prN},     // Lo    [10] KANNADA LETTER PA..KANNADA LETTER LLA
-	{0x0CB5, 0x0CB9, prN},     // Lo     [5] KANNADA LETTER VA..KANNADA LETTER HA
-	{0x0CBC, 0x0CBC, prN},     // Mn         KANNADA SIGN NUKTA
-	{0x0CBD, 0x0CBD, prN},     // Lo         KANNADA SIGN AVAGRAHA
-	{0x0CBE, 0x0CBE, prN},     // Mc         KANNADA VOWEL SIGN AA
-	{0x0CBF, 0x0CBF, prN},     // Mn         KANNADA VOWEL SIGN I
-	{0x0CC0, 0x0CC4, prN},     // Mc     [5] KANNADA VOWEL SIGN II..KANNADA VOWEL SIGN VOCALIC RR
-	{0x0CC6, 0x0CC6, prN},     // Mn         KANNADA VOWEL SIGN E
-	{0x0CC7, 0x0CC8, prN},     // Mc     [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI
-	{0x0CCA, 0x0CCB, prN},     // Mc     [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO
-	{0x0CCC, 0x0CCD, prN},     // Mn     [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA
-	{0x0CD5, 0x0CD6, prN},     // Mc     [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK
-	{0x0CDD, 0x0CDE, prN},     // Lo     [2] KANNADA LETTER NAKAARA POLLU..KANNADA LETTER FA
-	{0x0CE0, 0x0CE1, prN},     // Lo     [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL
-	{0x0CE2, 0x0CE3, prN},     // Mn     [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL
-	{0x0CE6, 0x0CEF, prN},     // Nd    [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE
-	{0x0CF1, 0x0CF2, prN},     // Lo     [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA
-	{0x0CF3, 0x0CF3, prN},     // Mc         KANNADA SIGN COMBINING ANUSVARA ABOVE RIGHT
-	{0x0D00, 0x0D01, prN},     // Mn     [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU
-	{0x0D02, 0x0D03, prN},     // Mc     [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA
-	{0x0D04, 0x0D0C, prN},     // Lo     [9] MALAYALAM LETTER VEDIC ANUSVARA..MALAYALAM LETTER VOCALIC L
-	{0x0D0E, 0x0D10, prN},     // Lo     [3] MALAYALAM LETTER E..MALAYALAM LETTER AI
-	{0x0D12, 0x0D3A, prN},     // Lo    [41] MALAYALAM LETTER O..MALAYALAM LETTER TTTA
-	{0x0D3B, 0x0D3C, prN},     // Mn     [2] MALAYALAM SIGN VERTICAL BAR VIRAMA..MALAYALAM SIGN CIRCULAR VIRAMA
-	{0x0D3D, 0x0D3D, prN},     // Lo         MALAYALAM SIGN AVAGRAHA
-	{0x0D3E, 0x0D40, prN},     // Mc     [3] MALAYALAM VOWEL SIGN AA..MALAYALAM VOWEL SIGN II
-	{0x0D41, 0x0D44, prN},     // Mn     [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR
-	{0x0D46, 0x0D48, prN},     // Mc     [3] MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI
-	{0x0D4A, 0x0D4C, prN},     // Mc     [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU
-	{0x0D4D, 0x0D4D, prN},     // Mn         MALAYALAM SIGN VIRAMA
-	{0x0D4E, 0x0D4E, prN},     // Lo         MALAYALAM LETTER DOT REPH
-	{0x0D4F, 0x0D4F, prN},     // So         MALAYALAM SIGN PARA
-	{0x0D54, 0x0D56, prN},     // Lo     [3] MALAYALAM LETTER CHILLU M..MALAYALAM LETTER CHILLU LLL
-	{0x0D57, 0x0D57, prN},     // Mc         MALAYALAM AU LENGTH MARK
-	{0x0D58, 0x0D5E, prN},     // No     [7] MALAYALAM FRACTION ONE ONE-HUNDRED-AND-SIXTIETH..MALAYALAM FRACTION ONE FIFTH
-	{0x0D5F, 0x0D61, prN},     // Lo     [3] MALAYALAM LETTER ARCHAIC II..MALAYALAM LETTER VOCALIC LL
-	{0x0D62, 0x0D63, prN},     // Mn     [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL
-	{0x0D66, 0x0D6F, prN},     // Nd    [10] MALAYALAM DIGIT ZERO..MALAYALAM DIGIT NINE
-	{0x0D70, 0x0D78, prN},     // No     [9] MALAYALAM NUMBER TEN..MALAYALAM FRACTION THREE SIXTEENTHS
-	{0x0D79, 0x0D79, prN},     // So         MALAYALAM DATE MARK
-	{0x0D7A, 0x0D7F, prN},     // Lo     [6] MALAYALAM LETTER CHILLU NN..MALAYALAM LETTER CHILLU K
-	{0x0D81, 0x0D81, prN},     // Mn         SINHALA SIGN CANDRABINDU
-	{0x0D82, 0x0D83, prN},     // Mc     [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA
-	{0x0D85, 0x0D96, prN},     // Lo    [18] SINHALA LETTER AYANNA..SINHALA LETTER AUYANNA
-	{0x0D9A, 0x0DB1, prN},     // Lo    [24] SINHALA LETTER ALPAPRAANA KAYANNA..SINHALA LETTER DANTAJA NAYANNA
-	{0x0DB3, 0x0DBB, prN},     // Lo     [9] SINHALA LETTER SANYAKA DAYANNA..SINHALA LETTER RAYANNA
-	{0x0DBD, 0x0DBD, prN},     // Lo         SINHALA LETTER DANTAJA LAYANNA
-	{0x0DC0, 0x0DC6, prN},     // Lo     [7] SINHALA LETTER VAYANNA..SINHALA LETTER FAYANNA
-	{0x0DCA, 0x0DCA, prN},     // Mn         SINHALA SIGN AL-LAKUNA
-	{0x0DCF, 0x0DD1, prN},     // Mc     [3] SINHALA VOWEL SIGN AELA-PILLA..SINHALA VOWEL SIGN DIGA AEDA-PILLA
-	{0x0DD2, 0x0DD4, prN},     // Mn     [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA
-	{0x0DD6, 0x0DD6, prN},     // Mn         SINHALA VOWEL SIGN DIGA PAA-PILLA
-	{0x0DD8, 0x0DDF, prN},     // Mc     [8] SINHALA VOWEL SIGN GAETTA-PILLA..SINHALA VOWEL SIGN GAYANUKITTA
-	{0x0DE6, 0x0DEF, prN},     // Nd    [10] SINHALA LITH DIGIT ZERO..SINHALA LITH DIGIT NINE
-	{0x0DF2, 0x0DF3, prN},     // Mc     [2] SINHALA VOWEL SIGN DIGA GAETTA-PILLA..SINHALA VOWEL SIGN DIGA GAYANUKITTA
-	{0x0DF4, 0x0DF4, prN},     // Po         SINHALA PUNCTUATION KUNDDALIYA
-	{0x0E01, 0x0E30, prN},     // Lo    [48] THAI CHARACTER KO KAI..THAI CHARACTER SARA A
-	{0x0E31, 0x0E31, prN},     // Mn         THAI CHARACTER MAI HAN-AKAT
-	{0x0E32, 0x0E33, prN},     // Lo     [2] THAI CHARACTER SARA AA..THAI CHARACTER SARA AM
-	{0x0E34, 0x0E3A, prN},     // Mn     [7] THAI CHARACTER SARA I..THAI CHARACTER PHINTHU
-	{0x0E3F, 0x0E3F, prN},     // Sc         THAI CURRENCY SYMBOL BAHT
-	{0x0E40, 0x0E45, prN},     // Lo     [6] THAI CHARACTER SARA E..THAI CHARACTER LAKKHANGYAO
-	{0x0E46, 0x0E46, prN},     // Lm         THAI CHARACTER MAIYAMOK
-	{0x0E47, 0x0E4E, prN},     // Mn     [8] THAI CHARACTER MAITAIKHU..THAI CHARACTER YAMAKKAN
-	{0x0E4F, 0x0E4F, prN},     // Po         THAI CHARACTER FONGMAN
-	{0x0E50, 0x0E59, prN},     // Nd    [10] THAI DIGIT ZERO..THAI DIGIT NINE
-	{0x0E5A, 0x0E5B, prN},     // Po     [2] THAI CHARACTER ANGKHANKHU..THAI CHARACTER KHOMUT
-	{0x0E81, 0x0E82, prN},     // Lo     [2] LAO LETTER KO..LAO LETTER KHO SUNG
-	{0x0E84, 0x0E84, prN},     // Lo         LAO LETTER KHO TAM
-	{0x0E86, 0x0E8A, prN},     // Lo     [5] LAO LETTER PALI GHA..LAO LETTER SO TAM
-	{0x0E8C, 0x0EA3, prN},     // Lo    [24] LAO LETTER PALI JHA..LAO LETTER LO LING
-	{0x0EA5, 0x0EA5, prN},     // Lo         LAO LETTER LO LOOT
-	{0x0EA7, 0x0EB0, prN},     // Lo    [10] LAO LETTER WO..LAO VOWEL SIGN A
-	{0x0EB1, 0x0EB1, prN},     // Mn         LAO VOWEL SIGN MAI KAN
-	{0x0EB2, 0x0EB3, prN},     // Lo     [2] LAO VOWEL SIGN AA..LAO VOWEL SIGN AM
-	{0x0EB4, 0x0EBC, prN},     // Mn     [9] LAO VOWEL SIGN I..LAO SEMIVOWEL SIGN LO
-	{0x0EBD, 0x0EBD, prN},     // Lo         LAO SEMIVOWEL SIGN NYO
-	{0x0EC0, 0x0EC4, prN},     // Lo     [5] LAO VOWEL SIGN E..LAO VOWEL SIGN AI
-	{0x0EC6, 0x0EC6, prN},     // Lm         LAO KO LA
-	{0x0EC8, 0x0ECE, prN},     // Mn     [7] LAO TONE MAI EK..LAO YAMAKKAN
-	{0x0ED0, 0x0ED9, prN},     // Nd    [10] LAO DIGIT ZERO..LAO DIGIT NINE
-	{0x0EDC, 0x0EDF, prN},     // Lo     [4] LAO HO NO..LAO LETTER KHMU NYO
-	{0x0F00, 0x0F00, prN},     // Lo         TIBETAN SYLLABLE OM
-	{0x0F01, 0x0F03, prN},     // So     [3] TIBETAN MARK GTER YIG MGO TRUNCATED A..TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA
-	{0x0F04, 0x0F12, prN},     // Po    [15] TIBETAN MARK INITIAL YIG MGO MDUN MA..TIBETAN MARK RGYA GRAM SHAD
-	{0x0F13, 0x0F13, prN},     // So         TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN
-	{0x0F14, 0x0F14, prN},     // Po         TIBETAN MARK GTER TSHEG
-	{0x0F15, 0x0F17, prN},     // So     [3] TIBETAN LOGOTYPE SIGN CHAD RTAGS..TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS
-	{0x0F18, 0x0F19, prN},     // Mn     [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS
-	{0x0F1A, 0x0F1F, prN},     // So     [6] TIBETAN SIGN RDEL DKAR GCIG..TIBETAN SIGN RDEL DKAR RDEL NAG
-	{0x0F20, 0x0F29, prN},     // Nd    [10] TIBETAN DIGIT ZERO..TIBETAN DIGIT NINE
-	{0x0F2A, 0x0F33, prN},     // No    [10] TIBETAN DIGIT HALF ONE..TIBETAN DIGIT HALF ZERO
-	{0x0F34, 0x0F34, prN},     // So         TIBETAN MARK BSDUS RTAGS
-	{0x0F35, 0x0F35, prN},     // Mn         TIBETAN MARK NGAS BZUNG NYI ZLA
-	{0x0F36, 0x0F36, prN},     // So         TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN
-	{0x0F37, 0x0F37, prN},     // Mn         TIBETAN MARK NGAS BZUNG SGOR RTAGS
-	{0x0F38, 0x0F38, prN},     // So         TIBETAN MARK CHE MGO
-	{0x0F39, 0x0F39, prN},     // Mn         TIBETAN MARK TSA -PHRU
-	{0x0F3A, 0x0F3A, prN},     // Ps         TIBETAN MARK GUG RTAGS GYON
-	{0x0F3B, 0x0F3B, prN},     // Pe         TIBETAN MARK GUG RTAGS GYAS
-	{0x0F3C, 0x0F3C, prN},     // Ps         TIBETAN MARK ANG KHANG GYON
-	{0x0F3D, 0x0F3D, prN},     // Pe         TIBETAN MARK ANG KHANG GYAS
-	{0x0F3E, 0x0F3F, prN},     // Mc     [2] TIBETAN SIGN YAR TSHES..TIBETAN SIGN MAR TSHES
-	{0x0F40, 0x0F47, prN},     // Lo     [8] TIBETAN LETTER KA..TIBETAN LETTER JA
-	{0x0F49, 0x0F6C, prN},     // Lo    [36] TIBETAN LETTER NYA..TIBETAN LETTER RRA
-	{0x0F71, 0x0F7E, prN},     // Mn    [14] TIBETAN VOWEL SIGN AA..TIBETAN SIGN RJES SU NGA RO
-	{0x0F7F, 0x0F7F, prN},     // Mc         TIBETAN SIGN RNAM BCAD
-	{0x0F80, 0x0F84, prN},     // Mn     [5] TIBETAN VOWEL SIGN REVERSED I..TIBETAN MARK HALANTA
-	{0x0F85, 0x0F85, prN},     // Po         TIBETAN MARK PALUTA
-	{0x0F86, 0x0F87, prN},     // Mn     [2] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS
-	{0x0F88, 0x0F8C, prN},     // Lo     [5] TIBETAN SIGN LCE TSA CAN..TIBETAN SIGN INVERTED MCHU CAN
-	{0x0F8D, 0x0F97, prN},     // Mn    [11] TIBETAN SUBJOINED SIGN LCE TSA CAN..TIBETAN SUBJOINED LETTER JA
-	{0x0F99, 0x0FBC, prN},     // Mn    [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA
-	{0x0FBE, 0x0FC5, prN},     // So     [8] TIBETAN KU RU KHA..TIBETAN SYMBOL RDO RJE
-	{0x0FC6, 0x0FC6, prN},     // Mn         TIBETAN SYMBOL PADMA GDAN
-	{0x0FC7, 0x0FCC, prN},     // So     [6] TIBETAN SYMBOL RDO RJE RGYA GRAM..TIBETAN SYMBOL NOR BU BZHI -KHYIL
-	{0x0FCE, 0x0FCF, prN},     // So     [2] TIBETAN SIGN RDEL NAG RDEL DKAR..TIBETAN SIGN RDEL NAG GSUM
-	{0x0FD0, 0x0FD4, prN},     // Po     [5] TIBETAN MARK BSKA- SHOG GI MGO RGYAN..TIBETAN MARK CLOSING BRDA RNYING YIG MGO SGAB MA
-	{0x0FD5, 0x0FD8, prN},     // So     [4] RIGHT-FACING SVASTI SIGN..LEFT-FACING SVASTI SIGN WITH DOTS
-	{0x0FD9, 0x0FDA, prN},     // Po     [2] TIBETAN MARK LEADING MCHAN RTAGS..TIBETAN MARK TRAILING MCHAN RTAGS
-	{0x1000, 0x102A, prN},     // Lo    [43] MYANMAR LETTER KA..MYANMAR LETTER AU
-	{0x102B, 0x102C, prN},     // Mc     [2] MYANMAR VOWEL SIGN TALL AA..MYANMAR VOWEL SIGN AA
-	{0x102D, 0x1030, prN},     // Mn     [4] MYANMAR VOWEL SIGN I..MYANMAR VOWEL SIGN UU
-	{0x1031, 0x1031, prN},     // Mc         MYANMAR VOWEL SIGN E
-	{0x1032, 0x1037, prN},     // Mn     [6] MYANMAR VOWEL SIGN AI..MYANMAR SIGN DOT BELOW
-	{0x1038, 0x1038, prN},     // Mc         MYANMAR SIGN VISARGA
-	{0x1039, 0x103A, prN},     // Mn     [2] MYANMAR SIGN VIRAMA..MYANMAR SIGN ASAT
-	{0x103B, 0x103C, prN},     // Mc     [2] MYANMAR CONSONANT SIGN MEDIAL YA..MYANMAR CONSONANT SIGN MEDIAL RA
-	{0x103D, 0x103E, prN},     // Mn     [2] MYANMAR CONSONANT SIGN MEDIAL WA..MYANMAR CONSONANT SIGN MEDIAL HA
-	{0x103F, 0x103F, prN},     // Lo         MYANMAR LETTER GREAT SA
-	{0x1040, 0x1049, prN},     // Nd    [10] MYANMAR DIGIT ZERO..MYANMAR DIGIT NINE
-	{0x104A, 0x104F, prN},     // Po     [6] MYANMAR SIGN LITTLE SECTION..MYANMAR SYMBOL GENITIVE
-	{0x1050, 0x1055, prN},     // Lo     [6] MYANMAR LETTER SHA..MYANMAR LETTER VOCALIC LL
-	{0x1056, 0x1057, prN},     // Mc     [2] MYANMAR VOWEL SIGN VOCALIC R..MYANMAR VOWEL SIGN VOCALIC RR
-	{0x1058, 0x1059, prN},     // Mn     [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL
-	{0x105A, 0x105D, prN},     // Lo     [4] MYANMAR LETTER MON NGA..MYANMAR LETTER MON BBE
-	{0x105E, 0x1060, prN},     // Mn     [3] MYANMAR CONSONANT SIGN MON MEDIAL NA..MYANMAR CONSONANT SIGN MON MEDIAL LA
-	{0x1061, 0x1061, prN},     // Lo         MYANMAR LETTER SGAW KAREN SHA
-	{0x1062, 0x1064, prN},     // Mc     [3] MYANMAR VOWEL SIGN SGAW KAREN EU..MYANMAR TONE MARK SGAW KAREN KE PHO
-	{0x1065, 0x1066, prN},     // Lo     [2] MYANMAR LETTER WESTERN PWO KAREN THA..MYANMAR LETTER WESTERN PWO KAREN PWA
-	{0x1067, 0x106D, prN},     // Mc     [7] MYANMAR VOWEL SIGN WESTERN PWO KAREN EU..MYANMAR SIGN WESTERN PWO KAREN TONE-5
-	{0x106E, 0x1070, prN},     // Lo     [3] MYANMAR LETTER EASTERN PWO KAREN NNA..MYANMAR LETTER EASTERN PWO KAREN GHWA
-	{0x1071, 0x1074, prN},     // Mn     [4] MYANMAR VOWEL SIGN GEBA KAREN I..MYANMAR VOWEL SIGN KAYAH EE
-	{0x1075, 0x1081, prN},     // Lo    [13] MYANMAR LETTER SHAN KA..MYANMAR LETTER SHAN HA
-	{0x1082, 0x1082, prN},     // Mn         MYANMAR CONSONANT SIGN SHAN MEDIAL WA
-	{0x1083, 0x1084, prN},     // Mc     [2] MYANMAR VOWEL SIGN SHAN AA..MYANMAR VOWEL SIGN SHAN E
-	{0x1085, 0x1086, prN},     // Mn     [2] MYANMAR VOWEL SIGN SHAN E ABOVE..MYANMAR VOWEL SIGN SHAN FINAL Y
-	{0x1087, 0x108C, prN},     // Mc     [6] MYANMAR SIGN SHAN TONE-2..MYANMAR SIGN SHAN COUNCIL TONE-3
-	{0x108D, 0x108D, prN},     // Mn         MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE
-	{0x108E, 0x108E, prN},     // Lo         MYANMAR LETTER RUMAI PALAUNG FA
-	{0x108F, 0x108F, prN},     // Mc         MYANMAR SIGN RUMAI PALAUNG TONE-5
-	{0x1090, 0x1099, prN},     // Nd    [10] MYANMAR SHAN DIGIT ZERO..MYANMAR SHAN DIGIT NINE
-	{0x109A, 0x109C, prN},     // Mc     [3] MYANMAR SIGN KHAMTI TONE-1..MYANMAR VOWEL SIGN AITON A
-	{0x109D, 0x109D, prN},     // Mn         MYANMAR VOWEL SIGN AITON AI
-	{0x109E, 0x109F, prN},     // So     [2] MYANMAR SYMBOL SHAN ONE..MYANMAR SYMBOL SHAN EXCLAMATION
-	{0x10A0, 0x10C5, prN},     // Lu    [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE
-	{0x10C7, 0x10C7, prN},     // Lu         GEORGIAN CAPITAL LETTER YN
-	{0x10CD, 0x10CD, prN},     // Lu         GEORGIAN CAPITAL LETTER AEN
-	{0x10D0, 0x10FA, prN},     // Ll    [43] GEORGIAN LETTER AN..GEORGIAN LETTER AIN
-	{0x10FB, 0x10FB, prN},     // Po         GEORGIAN PARAGRAPH SEPARATOR
-	{0x10FC, 0x10FC, prN},     // Lm         MODIFIER LETTER GEORGIAN NAR
-	{0x10FD, 0x10FF, prN},     // Ll     [3] GEORGIAN LETTER AEN..GEORGIAN LETTER LABIAL SIGN
-	{0x1100, 0x115F, prW},     // Lo    [96] HANGUL CHOSEONG KIYEOK..HANGUL CHOSEONG FILLER
-	{0x1160, 0x11FF, prN},     // Lo   [160] HANGUL JUNGSEONG FILLER..HANGUL JONGSEONG SSANGNIEUN
-	{0x1200, 0x1248, prN},     // Lo    [73] ETHIOPIC SYLLABLE HA..ETHIOPIC SYLLABLE QWA
-	{0x124A, 0x124D, prN},     // Lo     [4] ETHIOPIC SYLLABLE QWI..ETHIOPIC SYLLABLE QWE
-	{0x1250, 0x1256, prN},     // Lo     [7] ETHIOPIC SYLLABLE QHA..ETHIOPIC SYLLABLE QHO
-	{0x1258, 0x1258, prN},     // Lo         ETHIOPIC SYLLABLE QHWA
-	{0x125A, 0x125D, prN},     // Lo     [4] ETHIOPIC SYLLABLE QHWI..ETHIOPIC SYLLABLE QHWE
-	{0x1260, 0x1288, prN},     // Lo    [41] ETHIOPIC SYLLABLE BA..ETHIOPIC SYLLABLE XWA
-	{0x128A, 0x128D, prN},     // Lo     [4] ETHIOPIC SYLLABLE XWI..ETHIOPIC SYLLABLE XWE
-	{0x1290, 0x12B0, prN},     // Lo    [33] ETHIOPIC SYLLABLE NA..ETHIOPIC SYLLABLE KWA
-	{0x12B2, 0x12B5, prN},     // Lo     [4] ETHIOPIC SYLLABLE KWI..ETHIOPIC SYLLABLE KWE
-	{0x12B8, 0x12BE, prN},     // Lo     [7] ETHIOPIC SYLLABLE KXA..ETHIOPIC SYLLABLE KXO
-	{0x12C0, 0x12C0, prN},     // Lo         ETHIOPIC SYLLABLE KXWA
-	{0x12C2, 0x12C5, prN},     // Lo     [4] ETHIOPIC SYLLABLE KXWI..ETHIOPIC SYLLABLE KXWE
-	{0x12C8, 0x12D6, prN},     // Lo    [15] ETHIOPIC SYLLABLE WA..ETHIOPIC SYLLABLE PHARYNGEAL O
-	{0x12D8, 0x1310, prN},     // Lo    [57] ETHIOPIC SYLLABLE ZA..ETHIOPIC SYLLABLE GWA
-	{0x1312, 0x1315, prN},     // Lo     [4] ETHIOPIC SYLLABLE GWI..ETHIOPIC SYLLABLE GWE
-	{0x1318, 0x135A, prN},     // Lo    [67] ETHIOPIC SYLLABLE GGA..ETHIOPIC SYLLABLE FYA
-	{0x135D, 0x135F, prN},     // Mn     [3] ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK..ETHIOPIC COMBINING GEMINATION MARK
-	{0x1360, 0x1368, prN},     // Po     [9] ETHIOPIC SECTION MARK..ETHIOPIC PARAGRAPH SEPARATOR
-	{0x1369, 0x137C, prN},     // No    [20] ETHIOPIC DIGIT ONE..ETHIOPIC NUMBER TEN THOUSAND
-	{0x1380, 0x138F, prN},     // Lo    [16] ETHIOPIC SYLLABLE SEBATBEIT MWA..ETHIOPIC SYLLABLE PWE
-	{0x1390, 0x1399, prN},     // So    [10] ETHIOPIC TONAL MARK YIZET..ETHIOPIC TONAL MARK KURT
-	{0x13A0, 0x13F5, prN},     // Lu    [86] CHEROKEE LETTER A..CHEROKEE LETTER MV
-	{0x13F8, 0x13FD, prN},     // Ll     [6] CHEROKEE SMALL LETTER YE..CHEROKEE SMALL LETTER MV
-	{0x1400, 0x1400, prN},     // Pd         CANADIAN SYLLABICS HYPHEN
-	{0x1401, 0x166C, prN},     // Lo   [620] CANADIAN SYLLABICS E..CANADIAN SYLLABICS CARRIER TTSA
-	{0x166D, 0x166D, prN},     // So         CANADIAN SYLLABICS CHI SIGN
-	{0x166E, 0x166E, prN},     // Po         CANADIAN SYLLABICS FULL STOP
-	{0x166F, 0x167F, prN},     // Lo    [17] CANADIAN SYLLABICS QAI..CANADIAN SYLLABICS BLACKFOOT W
-	{0x1680, 0x1680, prN},     // Zs         OGHAM SPACE MARK
-	{0x1681, 0x169A, prN},     // Lo    [26] OGHAM LETTER BEITH..OGHAM LETTER PEITH
-	{0x169B, 0x169B, prN},     // Ps         OGHAM FEATHER MARK
-	{0x169C, 0x169C, prN},     // Pe         OGHAM REVERSED FEATHER MARK
-	{0x16A0, 0x16EA, prN},     // Lo    [75] RUNIC LETTER FEHU FEOH FE F..RUNIC LETTER X
-	{0x16EB, 0x16ED, prN},     // Po     [3] RUNIC SINGLE PUNCTUATION..RUNIC CROSS PUNCTUATION
-	{0x16EE, 0x16F0, prN},     // Nl     [3] RUNIC ARLAUG SYMBOL..RUNIC BELGTHOR SYMBOL
-	{0x16F1, 0x16F8, prN},     // Lo     [8] RUNIC LETTER K..RUNIC LETTER FRANKS CASKET AESC
-	{0x1700, 0x1711, prN},     // Lo    [18] TAGALOG LETTER A..TAGALOG LETTER HA
-	{0x1712, 0x1714, prN},     // Mn     [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA
-	{0x1715, 0x1715, prN},     // Mc         TAGALOG SIGN PAMUDPOD
-	{0x171F, 0x171F, prN},     // Lo         TAGALOG LETTER ARCHAIC RA
-	{0x1720, 0x1731, prN},     // Lo    [18] HANUNOO LETTER A..HANUNOO LETTER HA
-	{0x1732, 0x1733, prN},     // Mn     [2] HANUNOO VOWEL SIGN I..HANUNOO VOWEL SIGN U
-	{0x1734, 0x1734, prN},     // Mc         HANUNOO SIGN PAMUDPOD
-	{0x1735, 0x1736, prN},     // Po     [2] PHILIPPINE SINGLE PUNCTUATION..PHILIPPINE DOUBLE PUNCTUATION
-	{0x1740, 0x1751, prN},     // Lo    [18] BUHID LETTER A..BUHID LETTER HA
-	{0x1752, 0x1753, prN},     // Mn     [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U
-	{0x1760, 0x176C, prN},     // Lo    [13] TAGBANWA LETTER A..TAGBANWA LETTER YA
-	{0x176E, 0x1770, prN},     // Lo     [3] TAGBANWA LETTER LA..TAGBANWA LETTER SA
-	{0x1772, 0x1773, prN},     // Mn     [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U
-	{0x1780, 0x17B3, prN},     // Lo    [52] KHMER LETTER KA..KHMER INDEPENDENT VOWEL QAU
-	{0x17B4, 0x17B5, prN},     // Mn     [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA
-	{0x17B6, 0x17B6, prN},     // Mc         KHMER VOWEL SIGN AA
-	{0x17B7, 0x17BD, prN},     // Mn     [7] KHMER VOWEL SIGN I..KHMER VOWEL SIGN UA
-	{0x17BE, 0x17C5, prN},     // Mc     [8] KHMER VOWEL SIGN OE..KHMER VOWEL SIGN AU
-	{0x17C6, 0x17C6, prN},     // Mn         KHMER SIGN NIKAHIT
-	{0x17C7, 0x17C8, prN},     // Mc     [2] KHMER SIGN REAHMUK..KHMER SIGN YUUKALEAPINTU
-	{0x17C9, 0x17D3, prN},     // Mn    [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT
-	{0x17D4, 0x17D6, prN},     // Po     [3] KHMER SIGN KHAN..KHMER SIGN CAMNUC PII KUUH
-	{0x17D7, 0x17D7, prN},     // Lm         KHMER SIGN LEK TOO
-	{0x17D8, 0x17DA, prN},     // Po     [3] KHMER SIGN BEYYAL..KHMER SIGN KOOMUUT
-	{0x17DB, 0x17DB, prN},     // Sc         KHMER CURRENCY SYMBOL RIEL
-	{0x17DC, 0x17DC, prN},     // Lo         KHMER SIGN AVAKRAHASANYA
-	{0x17DD, 0x17DD, prN},     // Mn         KHMER SIGN ATTHACAN
-	{0x17E0, 0x17E9, prN},     // Nd    [10] KHMER DIGIT ZERO..KHMER DIGIT NINE
-	{0x17F0, 0x17F9, prN},     // No    [10] KHMER SYMBOL LEK ATTAK SON..KHMER SYMBOL LEK ATTAK PRAM-BUON
-	{0x1800, 0x1805, prN},     // Po     [6] MONGOLIAN BIRGA..MONGOLIAN FOUR DOTS
-	{0x1806, 0x1806, prN},     // Pd         MONGOLIAN TODO SOFT HYPHEN
-	{0x1807, 0x180A, prN},     // Po     [4] MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER..MONGOLIAN NIRUGU
-	{0x180B, 0x180D, prN},     // Mn     [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE
-	{0x180E, 0x180E, prN},     // Cf         MONGOLIAN VOWEL SEPARATOR
-	{0x180F, 0x180F, prN},     // Mn         MONGOLIAN FREE VARIATION SELECTOR FOUR
-	{0x1810, 0x1819, prN},     // Nd    [10] MONGOLIAN DIGIT ZERO..MONGOLIAN DIGIT NINE
-	{0x1820, 0x1842, prN},     // Lo    [35] MONGOLIAN LETTER A..MONGOLIAN LETTER CHI
-	{0x1843, 0x1843, prN},     // Lm         MONGOLIAN LETTER TODO LONG VOWEL SIGN
-	{0x1844, 0x1878, prN},     // Lo    [53] MONGOLIAN LETTER TODO E..MONGOLIAN LETTER CHA WITH TWO DOTS
-	{0x1880, 0x1884, prN},     // Lo     [5] MONGOLIAN LETTER ALI GALI ANUSVARA ONE..MONGOLIAN LETTER ALI GALI INVERTED UBADAMA
-	{0x1885, 0x1886, prN},     // Mn     [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA
-	{0x1887, 0x18A8, prN},     // Lo    [34] MONGOLIAN LETTER ALI GALI A..MONGOLIAN LETTER MANCHU ALI GALI BHA
-	{0x18A9, 0x18A9, prN},     // Mn         MONGOLIAN LETTER ALI GALI DAGALGA
-	{0x18AA, 0x18AA, prN},     // Lo         MONGOLIAN LETTER MANCHU ALI GALI LHA
-	{0x18B0, 0x18F5, prN},     // Lo    [70] CANADIAN SYLLABICS OY..CANADIAN SYLLABICS CARRIER DENTAL S
-	{0x1900, 0x191E, prN},     // Lo    [31] LIMBU VOWEL-CARRIER LETTER..LIMBU LETTER TRA
-	{0x1920, 0x1922, prN},     // Mn     [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U
-	{0x1923, 0x1926, prN},     // Mc     [4] LIMBU VOWEL SIGN EE..LIMBU VOWEL SIGN AU
-	{0x1927, 0x1928, prN},     // Mn     [2] LIMBU VOWEL SIGN E..LIMBU VOWEL SIGN O
-	{0x1929, 0x192B, prN},     // Mc     [3] LIMBU SUBJOINED LETTER YA..LIMBU SUBJOINED LETTER WA
-	{0x1930, 0x1931, prN},     // Mc     [2] LIMBU SMALL LETTER KA..LIMBU SMALL LETTER NGA
-	{0x1932, 0x1932, prN},     // Mn         LIMBU SMALL LETTER ANUSVARA
-	{0x1933, 0x1938, prN},     // Mc     [6] LIMBU SMALL LETTER TA..LIMBU SMALL LETTER LA
-	{0x1939, 0x193B, prN},     // Mn     [3] LIMBU SIGN MUKPHRENG..LIMBU SIGN SA-I
-	{0x1940, 0x1940, prN},     // So         LIMBU SIGN LOO
-	{0x1944, 0x1945, prN},     // Po     [2] LIMBU EXCLAMATION MARK..LIMBU QUESTION MARK
-	{0x1946, 0x194F, prN},     // Nd    [10] LIMBU DIGIT ZERO..LIMBU DIGIT NINE
-	{0x1950, 0x196D, prN},     // Lo    [30] TAI LE LETTER KA..TAI LE LETTER AI
-	{0x1970, 0x1974, prN},     // Lo     [5] TAI LE LETTER TONE-2..TAI LE LETTER TONE-6
-	{0x1980, 0x19AB, prN},     // Lo    [44] NEW TAI LUE LETTER HIGH QA..NEW TAI LUE LETTER LOW SUA
-	{0x19B0, 0x19C9, prN},     // Lo    [26] NEW TAI LUE VOWEL SIGN VOWEL SHORTENER..NEW TAI LUE TONE MARK-2
-	{0x19D0, 0x19D9, prN},     // Nd    [10] NEW TAI LUE DIGIT ZERO..NEW TAI LUE DIGIT NINE
-	{0x19DA, 0x19DA, prN},     // No         NEW TAI LUE THAM DIGIT ONE
-	{0x19DE, 0x19DF, prN},     // So     [2] NEW TAI LUE SIGN LAE..NEW TAI LUE SIGN LAEV
-	{0x19E0, 0x19FF, prN},     // So    [32] KHMER SYMBOL PATHAMASAT..KHMER SYMBOL DAP-PRAM ROC
-	{0x1A00, 0x1A16, prN},     // Lo    [23] BUGINESE LETTER KA..BUGINESE LETTER HA
-	{0x1A17, 0x1A18, prN},     // Mn     [2] BUGINESE VOWEL SIGN I..BUGINESE VOWEL SIGN U
-	{0x1A19, 0x1A1A, prN},     // Mc     [2] BUGINESE VOWEL SIGN E..BUGINESE VOWEL SIGN O
-	{0x1A1B, 0x1A1B, prN},     // Mn         BUGINESE VOWEL SIGN AE
-	{0x1A1E, 0x1A1F, prN},     // Po     [2] BUGINESE PALLAWA..BUGINESE END OF SECTION
-	{0x1A20, 0x1A54, prN},     // Lo    [53] TAI THAM LETTER HIGH KA..TAI THAM LETTER GREAT SA
-	{0x1A55, 0x1A55, prN},     // Mc         TAI THAM CONSONANT SIGN MEDIAL RA
-	{0x1A56, 0x1A56, prN},     // Mn         TAI THAM CONSONANT SIGN MEDIAL LA
-	{0x1A57, 0x1A57, prN},     // Mc         TAI THAM CONSONANT SIGN LA TANG LAI
-	{0x1A58, 0x1A5E, prN},     // Mn     [7] TAI THAM SIGN MAI KANG LAI..TAI THAM CONSONANT SIGN SA
-	{0x1A60, 0x1A60, prN},     // Mn         TAI THAM SIGN SAKOT
-	{0x1A61, 0x1A61, prN},     // Mc         TAI THAM VOWEL SIGN A
-	{0x1A62, 0x1A62, prN},     // Mn         TAI THAM VOWEL SIGN MAI SAT
-	{0x1A63, 0x1A64, prN},     // Mc     [2] TAI THAM VOWEL SIGN AA..TAI THAM VOWEL SIGN TALL AA
-	{0x1A65, 0x1A6C, prN},     // Mn     [8] TAI THAM VOWEL SIGN I..TAI THAM VOWEL SIGN OA BELOW
-	{0x1A6D, 0x1A72, prN},     // Mc     [6] TAI THAM VOWEL SIGN OY..TAI THAM VOWEL SIGN THAM AI
-	{0x1A73, 0x1A7C, prN},     // Mn    [10] TAI THAM VOWEL SIGN OA ABOVE..TAI THAM SIGN KHUEN-LUE KARAN
-	{0x1A7F, 0x1A7F, prN},     // Mn         TAI THAM COMBINING CRYPTOGRAMMIC DOT
-	{0x1A80, 0x1A89, prN},     // Nd    [10] TAI THAM HORA DIGIT ZERO..TAI THAM HORA DIGIT NINE
-	{0x1A90, 0x1A99, prN},     // Nd    [10] TAI THAM THAM DIGIT ZERO..TAI THAM THAM DIGIT NINE
-	{0x1AA0, 0x1AA6, prN},     // Po     [7] TAI THAM SIGN WIANG..TAI THAM SIGN REVERSED ROTATED RANA
-	{0x1AA7, 0x1AA7, prN},     // Lm         TAI THAM SIGN MAI YAMOK
-	{0x1AA8, 0x1AAD, prN},     // Po     [6] TAI THAM SIGN KAAN..TAI THAM SIGN CAANG
-	{0x1AB0, 0x1ABD, prN},     // Mn    [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW
-	{0x1ABE, 0x1ABE, prN},     // Me         COMBINING PARENTHESES OVERLAY
-	{0x1ABF, 0x1ACE, prN},     // Mn    [16] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER INSULAR T
-	{0x1B00, 0x1B03, prN},     // Mn     [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG
-	{0x1B04, 0x1B04, prN},     // Mc         BALINESE SIGN BISAH
-	{0x1B05, 0x1B33, prN},     // Lo    [47] BALINESE LETTER AKARA..BALINESE LETTER HA
-	{0x1B34, 0x1B34, prN},     // Mn         BALINESE SIGN REREKAN
-	{0x1B35, 0x1B35, prN},     // Mc         BALINESE VOWEL SIGN TEDUNG
-	{0x1B36, 0x1B3A, prN},     // Mn     [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA
-	{0x1B3B, 0x1B3B, prN},     // Mc         BALINESE VOWEL SIGN RA REPA TEDUNG
-	{0x1B3C, 0x1B3C, prN},     // Mn         BALINESE VOWEL SIGN LA LENGA
-	{0x1B3D, 0x1B41, prN},     // Mc     [5] BALINESE VOWEL SIGN LA LENGA TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG
-	{0x1B42, 0x1B42, prN},     // Mn         BALINESE VOWEL SIGN PEPET
-	{0x1B43, 0x1B44, prN},     // Mc     [2] BALINESE VOWEL SIGN PEPET TEDUNG..BALINESE ADEG ADEG
-	{0x1B45, 0x1B4C, prN},     // Lo     [8] BALINESE LETTER KAF SASAK..BALINESE LETTER ARCHAIC JNYA
-	{0x1B50, 0x1B59, prN},     // Nd    [10] BALINESE DIGIT ZERO..BALINESE DIGIT NINE
-	{0x1B5A, 0x1B60, prN},     // Po     [7] BALINESE PANTI..BALINESE PAMENENG
-	{0x1B61, 0x1B6A, prN},     // So    [10] BALINESE MUSICAL SYMBOL DONG..BALINESE MUSICAL SYMBOL DANG GEDE
-	{0x1B6B, 0x1B73, prN},     // Mn     [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG
-	{0x1B74, 0x1B7C, prN},     // So     [9] BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DUG..BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING
-	{0x1B7D, 0x1B7E, prN},     // Po     [2] BALINESE PANTI LANTANG..BALINESE PAMADA LANTANG
-	{0x1B80, 0x1B81, prN},     // Mn     [2] SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PANGLAYAR
-	{0x1B82, 0x1B82, prN},     // Mc         SUNDANESE SIGN PANGWISAD
-	{0x1B83, 0x1BA0, prN},     // Lo    [30] SUNDANESE LETTER A..SUNDANESE LETTER HA
-	{0x1BA1, 0x1BA1, prN},     // Mc         SUNDANESE CONSONANT SIGN PAMINGKAL
-	{0x1BA2, 0x1BA5, prN},     // Mn     [4] SUNDANESE CONSONANT SIGN PANYAKRA..SUNDANESE VOWEL SIGN PANYUKU
-	{0x1BA6, 0x1BA7, prN},     // Mc     [2] SUNDANESE VOWEL SIGN PANAELAENG..SUNDANESE VOWEL SIGN PANOLONG
-	{0x1BA8, 0x1BA9, prN},     // Mn     [2] SUNDANESE VOWEL SIGN PAMEPET..SUNDANESE VOWEL SIGN PANEULEUNG
-	{0x1BAA, 0x1BAA, prN},     // Mc         SUNDANESE SIGN PAMAAEH
-	{0x1BAB, 0x1BAD, prN},     // Mn     [3] SUNDANESE SIGN VIRAMA..SUNDANESE CONSONANT SIGN PASANGAN WA
-	{0x1BAE, 0x1BAF, prN},     // Lo     [2] SUNDANESE LETTER KHA..SUNDANESE LETTER SYA
-	{0x1BB0, 0x1BB9, prN},     // Nd    [10] SUNDANESE DIGIT ZERO..SUNDANESE DIGIT NINE
-	{0x1BBA, 0x1BBF, prN},     // Lo     [6] SUNDANESE AVAGRAHA..SUNDANESE LETTER FINAL M
-	{0x1BC0, 0x1BE5, prN},     // Lo    [38] BATAK LETTER A..BATAK LETTER U
-	{0x1BE6, 0x1BE6, prN},     // Mn         BATAK SIGN TOMPI
-	{0x1BE7, 0x1BE7, prN},     // Mc         BATAK VOWEL SIGN E
-	{0x1BE8, 0x1BE9, prN},     // Mn     [2] BATAK VOWEL SIGN PAKPAK E..BATAK VOWEL SIGN EE
-	{0x1BEA, 0x1BEC, prN},     // Mc     [3] BATAK VOWEL SIGN I..BATAK VOWEL SIGN O
-	{0x1BED, 0x1BED, prN},     // Mn         BATAK VOWEL SIGN KARO O
-	{0x1BEE, 0x1BEE, prN},     // Mc         BATAK VOWEL SIGN U
-	{0x1BEF, 0x1BF1, prN},     // Mn     [3] BATAK VOWEL SIGN U FOR SIMALUNGUN SA..BATAK CONSONANT SIGN H
-	{0x1BF2, 0x1BF3, prN},     // Mc     [2] BATAK PANGOLAT..BATAK PANONGONAN
-	{0x1BFC, 0x1BFF, prN},     // Po     [4] BATAK SYMBOL BINDU NA METEK..BATAK SYMBOL BINDU PANGOLAT
-	{0x1C00, 0x1C23, prN},     // Lo    [36] LEPCHA LETTER KA..LEPCHA LETTER A
-	{0x1C24, 0x1C2B, prN},     // Mc     [8] LEPCHA SUBJOINED LETTER YA..LEPCHA VOWEL SIGN UU
-	{0x1C2C, 0x1C33, prN},     // Mn     [8] LEPCHA VOWEL SIGN E..LEPCHA CONSONANT SIGN T
-	{0x1C34, 0x1C35, prN},     // Mc     [2] LEPCHA CONSONANT SIGN NYIN-DO..LEPCHA CONSONANT SIGN KANG
-	{0x1C36, 0x1C37, prN},     // Mn     [2] LEPCHA SIGN RAN..LEPCHA SIGN NUKTA
-	{0x1C3B, 0x1C3F, prN},     // Po     [5] LEPCHA PUNCTUATION TA-ROL..LEPCHA PUNCTUATION TSHOOK
-	{0x1C40, 0x1C49, prN},     // Nd    [10] LEPCHA DIGIT ZERO..LEPCHA DIGIT NINE
-	{0x1C4D, 0x1C4F, prN},     // Lo     [3] LEPCHA LETTER TTA..LEPCHA LETTER DDA
-	{0x1C50, 0x1C59, prN},     // Nd    [10] OL CHIKI DIGIT ZERO..OL CHIKI DIGIT NINE
-	{0x1C5A, 0x1C77, prN},     // Lo    [30] OL CHIKI LETTER LA..OL CHIKI LETTER OH
-	{0x1C78, 0x1C7D, prN},     // Lm     [6] OL CHIKI MU TTUDDAG..OL CHIKI AHAD
-	{0x1C7E, 0x1C7F, prN},     // Po     [2] OL CHIKI PUNCTUATION MUCAAD..OL CHIKI PUNCTUATION DOUBLE MUCAAD
-	{0x1C80, 0x1C88, prN},     // Ll     [9] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER UNBLENDED UK
-	{0x1C90, 0x1CBA, prN},     // Lu    [43] GEORGIAN MTAVRULI CAPITAL LETTER AN..GEORGIAN MTAVRULI CAPITAL LETTER AIN
-	{0x1CBD, 0x1CBF, prN},     // Lu     [3] GEORGIAN MTAVRULI CAPITAL LETTER AEN..GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN
-	{0x1CC0, 0x1CC7, prN},     // Po     [8] SUNDANESE PUNCTUATION BINDU SURYA..SUNDANESE PUNCTUATION BINDU BA SATANGA
-	{0x1CD0, 0x1CD2, prN},     // Mn     [3] VEDIC TONE KARSHANA..VEDIC TONE PRENKHA
-	{0x1CD3, 0x1CD3, prN},     // Po         VEDIC SIGN NIHSHVASA
-	{0x1CD4, 0x1CE0, prN},     // Mn    [13] VEDIC SIGN YAJURVEDIC MIDLINE SVARITA..VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA
-	{0x1CE1, 0x1CE1, prN},     // Mc         VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA
-	{0x1CE2, 0x1CE8, prN},     // Mn     [7] VEDIC SIGN VISARGA SVARITA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL
-	{0x1CE9, 0x1CEC, prN},     // Lo     [4] VEDIC SIGN ANUSVARA ANTARGOMUKHA..VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL
-	{0x1CED, 0x1CED, prN},     // Mn         VEDIC SIGN TIRYAK
-	{0x1CEE, 0x1CF3, prN},     // Lo     [6] VEDIC SIGN HEXIFORM LONG ANUSVARA..VEDIC SIGN ROTATED ARDHAVISARGA
-	{0x1CF4, 0x1CF4, prN},     // Mn         VEDIC TONE CANDRA ABOVE
-	{0x1CF5, 0x1CF6, prN},     // Lo     [2] VEDIC SIGN JIHVAMULIYA..VEDIC SIGN UPADHMANIYA
-	{0x1CF7, 0x1CF7, prN},     // Mc         VEDIC SIGN ATIKRAMA
-	{0x1CF8, 0x1CF9, prN},     // Mn     [2] VEDIC TONE RING ABOVE..VEDIC TONE DOUBLE RING ABOVE
-	{0x1CFA, 0x1CFA, prN},     // Lo         VEDIC SIGN DOUBLE ANUSVARA ANTARGOMUKHA
-	{0x1D00, 0x1D2B, prN},     // Ll    [44] LATIN LETTER SMALL CAPITAL A..CYRILLIC LETTER SMALL CAPITAL EL
-	{0x1D2C, 0x1D6A, prN},     // Lm    [63] MODIFIER LETTER CAPITAL A..GREEK SUBSCRIPT SMALL LETTER CHI
-	{0x1D6B, 0x1D77, prN},     // Ll    [13] LATIN SMALL LETTER UE..LATIN SMALL LETTER TURNED G
-	{0x1D78, 0x1D78, prN},     // Lm         MODIFIER LETTER CYRILLIC EN
-	{0x1D79, 0x1D7F, prN},     // Ll     [7] LATIN SMALL LETTER INSULAR G..LATIN SMALL LETTER UPSILON WITH STROKE
-	{0x1D80, 0x1D9A, prN},     // Ll    [27] LATIN SMALL LETTER B WITH PALATAL HOOK..LATIN SMALL LETTER EZH WITH RETROFLEX HOOK
-	{0x1D9B, 0x1DBF, prN},     // Lm    [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA
-	{0x1DC0, 0x1DFF, prN},     // Mn    [64] COMBINING DOTTED GRAVE ACCENT..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW
-	{0x1E00, 0x1EFF, prN},     // L&   [256] LATIN CAPITAL LETTER A WITH RING BELOW..LATIN SMALL LETTER Y WITH LOOP
-	{0x1F00, 0x1F15, prN},     // L&    [22] GREEK SMALL LETTER ALPHA WITH PSILI..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
-	{0x1F18, 0x1F1D, prN},     // Lu     [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
-	{0x1F20, 0x1F45, prN},     // L&    [38] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
-	{0x1F48, 0x1F4D, prN},     // Lu     [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
-	{0x1F50, 0x1F57, prN},     // Ll     [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
-	{0x1F59, 0x1F59, prN},     // Lu         GREEK CAPITAL LETTER UPSILON WITH DASIA
-	{0x1F5B, 0x1F5B, prN},     // Lu         GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
-	{0x1F5D, 0x1F5D, prN},     // Lu         GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
-	{0x1F5F, 0x1F7D, prN},     // L&    [31] GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI..GREEK SMALL LETTER OMEGA WITH OXIA
-	{0x1F80, 0x1FB4, prN},     // L&    [53] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
-	{0x1FB6, 0x1FBC, prN},     // L&     [7] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
-	{0x1FBD, 0x1FBD, prN},     // Sk         GREEK KORONIS
-	{0x1FBE, 0x1FBE, prN},     // Ll         GREEK PROSGEGRAMMENI
-	{0x1FBF, 0x1FC1, prN},     // Sk     [3] GREEK PSILI..GREEK DIALYTIKA AND PERISPOMENI
-	{0x1FC2, 0x1FC4, prN},     // Ll     [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
-	{0x1FC6, 0x1FCC, prN},     // L&     [7] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
-	{0x1FCD, 0x1FCF, prN},     // Sk     [3] GREEK PSILI AND VARIA..GREEK PSILI AND PERISPOMENI
-	{0x1FD0, 0x1FD3, prN},     // Ll     [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
-	{0x1FD6, 0x1FDB, prN},     // L&     [6] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK CAPITAL LETTER IOTA WITH OXIA
-	{0x1FDD, 0x1FDF, prN},     // Sk     [3] GREEK DASIA AND VARIA..GREEK DASIA AND PERISPOMENI
-	{0x1FE0, 0x1FEC, prN},     // L&    [13] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA
-	{0x1FED, 0x1FEF, prN},     // Sk     [3] GREEK DIALYTIKA AND VARIA..GREEK VARIA
-	{0x1FF2, 0x1FF4, prN},     // Ll     [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
-	{0x1FF6, 0x1FFC, prN},     // L&     [7] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
-	{0x1FFD, 0x1FFE, prN},     // Sk     [2] GREEK OXIA..GREEK DASIA
-	{0x2000, 0x200A, prN},     // Zs    [11] EN QUAD..HAIR SPACE
-	{0x200B, 0x200F, prN},     // Cf     [5] ZERO WIDTH SPACE..RIGHT-TO-LEFT MARK
-	{0x2010, 0x2010, prA},     // Pd         HYPHEN
-	{0x2011, 0x2012, prN},     // Pd     [2] NON-BREAKING HYPHEN..FIGURE DASH
-	{0x2013, 0x2015, prA},     // Pd     [3] EN DASH..HORIZONTAL BAR
-	{0x2016, 0x2016, prA},     // Po         DOUBLE VERTICAL LINE
-	{0x2017, 0x2017, prN},     // Po         DOUBLE LOW LINE
-	{0x2018, 0x2018, prA},     // Pi         LEFT SINGLE QUOTATION MARK
-	{0x2019, 0x2019, prA},     // Pf         RIGHT SINGLE QUOTATION MARK
-	{0x201A, 0x201A, prN},     // Ps         SINGLE LOW-9 QUOTATION MARK
-	{0x201B, 0x201B, prN},     // Pi         SINGLE HIGH-REVERSED-9 QUOTATION MARK
-	{0x201C, 0x201C, prA},     // Pi         LEFT DOUBLE QUOTATION MARK
-	{0x201D, 0x201D, prA},     // Pf         RIGHT DOUBLE QUOTATION MARK
-	{0x201E, 0x201E, prN},     // Ps         DOUBLE LOW-9 QUOTATION MARK
-	{0x201F, 0x201F, prN},     // Pi         DOUBLE HIGH-REVERSED-9 QUOTATION MARK
-	{0x2020, 0x2022, prA},     // Po     [3] DAGGER..BULLET
-	{0x2023, 0x2023, prN},     // Po         TRIANGULAR BULLET
-	{0x2024, 0x2027, prA},     // Po     [4] ONE DOT LEADER..HYPHENATION POINT
-	{0x2028, 0x2028, prN},     // Zl         LINE SEPARATOR
-	{0x2029, 0x2029, prN},     // Zp         PARAGRAPH SEPARATOR
-	{0x202A, 0x202E, prN},     // Cf     [5] LEFT-TO-RIGHT EMBEDDING..RIGHT-TO-LEFT OVERRIDE
-	{0x202F, 0x202F, prN},     // Zs         NARROW NO-BREAK SPACE
-	{0x2030, 0x2030, prA},     // Po         PER MILLE SIGN
-	{0x2031, 0x2031, prN},     // Po         PER TEN THOUSAND SIGN
-	{0x2032, 0x2033, prA},     // Po     [2] PRIME..DOUBLE PRIME
-	{0x2034, 0x2034, prN},     // Po         TRIPLE PRIME
-	{0x2035, 0x2035, prA},     // Po         REVERSED PRIME
-	{0x2036, 0x2038, prN},     // Po     [3] REVERSED DOUBLE PRIME..CARET
-	{0x2039, 0x2039, prN},     // Pi         SINGLE LEFT-POINTING ANGLE QUOTATION MARK
-	{0x203A, 0x203A, prN},     // Pf         SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
-	{0x203B, 0x203B, prA},     // Po         REFERENCE MARK
-	{0x203C, 0x203D, prN},     // Po     [2] DOUBLE EXCLAMATION MARK..INTERROBANG
-	{0x203E, 0x203E, prA},     // Po         OVERLINE
-	{0x203F, 0x2040, prN},     // Pc     [2] UNDERTIE..CHARACTER TIE
-	{0x2041, 0x2043, prN},     // Po     [3] CARET INSERTION POINT..HYPHEN BULLET
-	{0x2044, 0x2044, prN},     // Sm         FRACTION SLASH
-	{0x2045, 0x2045, prN},     // Ps         LEFT SQUARE BRACKET WITH QUILL
-	{0x2046, 0x2046, prN},     // Pe         RIGHT SQUARE BRACKET WITH QUILL
-	{0x2047, 0x2051, prN},     // Po    [11] DOUBLE QUESTION MARK..TWO ASTERISKS ALIGNED VERTICALLY
-	{0x2052, 0x2052, prN},     // Sm         COMMERCIAL MINUS SIGN
-	{0x2053, 0x2053, prN},     // Po         SWUNG DASH
-	{0x2054, 0x2054, prN},     // Pc         INVERTED UNDERTIE
-	{0x2055, 0x205E, prN},     // Po    [10] FLOWER PUNCTUATION MARK..VERTICAL FOUR DOTS
-	{0x205F, 0x205F, prN},     // Zs         MEDIUM MATHEMATICAL SPACE
-	{0x2060, 0x2064, prN},     // Cf     [5] WORD JOINER..INVISIBLE PLUS
-	{0x2066, 0x206F, prN},     // Cf    [10] LEFT-TO-RIGHT ISOLATE..NOMINAL DIGIT SHAPES
-	{0x2070, 0x2070, prN},     // No         SUPERSCRIPT ZERO
-	{0x2071, 0x2071, prN},     // Lm         SUPERSCRIPT LATIN SMALL LETTER I
-	{0x2074, 0x2074, prA},     // No         SUPERSCRIPT FOUR
-	{0x2075, 0x2079, prN},     // No     [5] SUPERSCRIPT FIVE..SUPERSCRIPT NINE
-	{0x207A, 0x207C, prN},     // Sm     [3] SUPERSCRIPT PLUS SIGN..SUPERSCRIPT EQUALS SIGN
-	{0x207D, 0x207D, prN},     // Ps         SUPERSCRIPT LEFT PARENTHESIS
-	{0x207E, 0x207E, prN},     // Pe         SUPERSCRIPT RIGHT PARENTHESIS
-	{0x207F, 0x207F, prA},     // Lm         SUPERSCRIPT LATIN SMALL LETTER N
-	{0x2080, 0x2080, prN},     // No         SUBSCRIPT ZERO
-	{0x2081, 0x2084, prA},     // No     [4] SUBSCRIPT ONE..SUBSCRIPT FOUR
-	{0x2085, 0x2089, prN},     // No     [5] SUBSCRIPT FIVE..SUBSCRIPT NINE
-	{0x208A, 0x208C, prN},     // Sm     [3] SUBSCRIPT PLUS SIGN..SUBSCRIPT EQUALS SIGN
-	{0x208D, 0x208D, prN},     // Ps         SUBSCRIPT LEFT PARENTHESIS
-	{0x208E, 0x208E, prN},     // Pe         SUBSCRIPT RIGHT PARENTHESIS
-	{0x2090, 0x209C, prN},     // Lm    [13] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER T
-	{0x20A0, 0x20A8, prN},     // Sc     [9] EURO-CURRENCY SIGN..RUPEE SIGN
-	{0x20A9, 0x20A9, prH},     // Sc         WON SIGN
-	{0x20AA, 0x20AB, prN},     // Sc     [2] NEW SHEQEL SIGN..DONG SIGN
-	{0x20AC, 0x20AC, prA},     // Sc         EURO SIGN
-	{0x20AD, 0x20C0, prN},     // Sc    [20] KIP SIGN..SOM SIGN
-	{0x20D0, 0x20DC, prN},     // Mn    [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE
-	{0x20DD, 0x20E0, prN},     // Me     [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH
-	{0x20E1, 0x20E1, prN},     // Mn         COMBINING LEFT RIGHT ARROW ABOVE
-	{0x20E2, 0x20E4, prN},     // Me     [3] COMBINING ENCLOSING SCREEN..COMBINING ENCLOSING UPWARD POINTING TRIANGLE
-	{0x20E5, 0x20F0, prN},     // Mn    [12] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING ASTERISK ABOVE
-	{0x2100, 0x2101, prN},     // So     [2] ACCOUNT OF..ADDRESSED TO THE SUBJECT
-	{0x2102, 0x2102, prN},     // Lu         DOUBLE-STRUCK CAPITAL C
-	{0x2103, 0x2103, prA},     // So         DEGREE CELSIUS
-	{0x2104, 0x2104, prN},     // So         CENTRE LINE SYMBOL
-	{0x2105, 0x2105, prA},     // So         CARE OF
-	{0x2106, 0x2106, prN},     // So         CADA UNA
-	{0x2107, 0x2107, prN},     // Lu         EULER CONSTANT
-	{0x2108, 0x2108, prN},     // So         SCRUPLE
-	{0x2109, 0x2109, prA},     // So         DEGREE FAHRENHEIT
-	{0x210A, 0x2112, prN},     // L&     [9] SCRIPT SMALL G..SCRIPT CAPITAL L
-	{0x2113, 0x2113, prA},     // Ll         SCRIPT SMALL L
-	{0x2114, 0x2114, prN},     // So         L B BAR SYMBOL
-	{0x2115, 0x2115, prN},     // Lu         DOUBLE-STRUCK CAPITAL N
-	{0x2116, 0x2116, prA},     // So         NUMERO SIGN
-	{0x2117, 0x2117, prN},     // So         SOUND RECORDING COPYRIGHT
-	{0x2118, 0x2118, prN},     // Sm         SCRIPT CAPITAL P
-	{0x2119, 0x211D, prN},     // Lu     [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R
-	{0x211E, 0x2120, prN},     // So     [3] PRESCRIPTION TAKE..SERVICE MARK
-	{0x2121, 0x2122, prA},     // So     [2] TELEPHONE SIGN..TRADE MARK SIGN
-	{0x2123, 0x2123, prN},     // So         VERSICLE
-	{0x2124, 0x2124, prN},     // Lu         DOUBLE-STRUCK CAPITAL Z
-	{0x2125, 0x2125, prN},     // So         OUNCE SIGN
-	{0x2126, 0x2126, prA},     // Lu         OHM SIGN
-	{0x2127, 0x2127, prN},     // So         INVERTED OHM SIGN
-	{0x2128, 0x2128, prN},     // Lu         BLACK-LETTER CAPITAL Z
-	{0x2129, 0x2129, prN},     // So         TURNED GREEK SMALL LETTER IOTA
-	{0x212A, 0x212A, prN},     // Lu         KELVIN SIGN
-	{0x212B, 0x212B, prA},     // Lu         ANGSTROM SIGN
-	{0x212C, 0x212D, prN},     // Lu     [2] SCRIPT CAPITAL B..BLACK-LETTER CAPITAL C
-	{0x212E, 0x212E, prN},     // So         ESTIMATED SYMBOL
-	{0x212F, 0x2134, prN},     // L&     [6] SCRIPT SMALL E..SCRIPT SMALL O
-	{0x2135, 0x2138, prN},     // Lo     [4] ALEF SYMBOL..DALET SYMBOL
-	{0x2139, 0x2139, prN},     // Ll         INFORMATION SOURCE
-	{0x213A, 0x213B, prN},     // So     [2] ROTATED CAPITAL Q..FACSIMILE SIGN
-	{0x213C, 0x213F, prN},     // L&     [4] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK CAPITAL PI
-	{0x2140, 0x2144, prN},     // Sm     [5] DOUBLE-STRUCK N-ARY SUMMATION..TURNED SANS-SERIF CAPITAL Y
-	{0x2145, 0x2149, prN},     // L&     [5] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL J
-	{0x214A, 0x214A, prN},     // So         PROPERTY LINE
-	{0x214B, 0x214B, prN},     // Sm         TURNED AMPERSAND
-	{0x214C, 0x214D, prN},     // So     [2] PER SIGN..AKTIESELSKAB
-	{0x214E, 0x214E, prN},     // Ll         TURNED SMALL F
-	{0x214F, 0x214F, prN},     // So         SYMBOL FOR SAMARITAN SOURCE
-	{0x2150, 0x2152, prN},     // No     [3] VULGAR FRACTION ONE SEVENTH..VULGAR FRACTION ONE TENTH
-	{0x2153, 0x2154, prA},     // No     [2] VULGAR FRACTION ONE THIRD..VULGAR FRACTION TWO THIRDS
-	{0x2155, 0x215A, prN},     // No     [6] VULGAR FRACTION ONE FIFTH..VULGAR FRACTION FIVE SIXTHS
-	{0x215B, 0x215E, prA},     // No     [4] VULGAR FRACTION ONE EIGHTH..VULGAR FRACTION SEVEN EIGHTHS
-	{0x215F, 0x215F, prN},     // No         FRACTION NUMERATOR ONE
-	{0x2160, 0x216B, prA},     // Nl    [12] ROMAN NUMERAL ONE..ROMAN NUMERAL TWELVE
-	{0x216C, 0x216F, prN},     // Nl     [4] ROMAN NUMERAL FIFTY..ROMAN NUMERAL ONE THOUSAND
-	{0x2170, 0x2179, prA},     // Nl    [10] SMALL ROMAN NUMERAL ONE..SMALL ROMAN NUMERAL TEN
-	{0x217A, 0x2182, prN},     // Nl     [9] SMALL ROMAN NUMERAL ELEVEN..ROMAN NUMERAL TEN THOUSAND
-	{0x2183, 0x2184, prN},     // L&     [2] ROMAN NUMERAL REVERSED ONE HUNDRED..LATIN SMALL LETTER REVERSED C
-	{0x2185, 0x2188, prN},     // Nl     [4] ROMAN NUMERAL SIX LATE FORM..ROMAN NUMERAL ONE HUNDRED THOUSAND
-	{0x2189, 0x2189, prA},     // No         VULGAR FRACTION ZERO THIRDS
-	{0x218A, 0x218B, prN},     // So     [2] TURNED DIGIT TWO..TURNED DIGIT THREE
-	{0x2190, 0x2194, prA},     // Sm     [5] LEFTWARDS ARROW..LEFT RIGHT ARROW
-	{0x2195, 0x2199, prA},     // So     [5] UP DOWN ARROW..SOUTH WEST ARROW
-	{0x219A, 0x219B, prN},     // Sm     [2] LEFTWARDS ARROW WITH STROKE..RIGHTWARDS ARROW WITH STROKE
-	{0x219C, 0x219F, prN},     // So     [4] LEFTWARDS WAVE ARROW..UPWARDS TWO HEADED ARROW
-	{0x21A0, 0x21A0, prN},     // Sm         RIGHTWARDS TWO HEADED ARROW
-	{0x21A1, 0x21A2, prN},     // So     [2] DOWNWARDS TWO HEADED ARROW..LEFTWARDS ARROW WITH TAIL
-	{0x21A3, 0x21A3, prN},     // Sm         RIGHTWARDS ARROW WITH TAIL
-	{0x21A4, 0x21A5, prN},     // So     [2] LEFTWARDS ARROW FROM BAR..UPWARDS ARROW FROM BAR
-	{0x21A6, 0x21A6, prN},     // Sm         RIGHTWARDS ARROW FROM BAR
-	{0x21A7, 0x21AD, prN},     // So     [7] DOWNWARDS ARROW FROM BAR..LEFT RIGHT WAVE ARROW
-	{0x21AE, 0x21AE, prN},     // Sm         LEFT RIGHT ARROW WITH STROKE
-	{0x21AF, 0x21B7, prN},     // So     [9] DOWNWARDS ZIGZAG ARROW..CLOCKWISE TOP SEMICIRCLE ARROW
-	{0x21B8, 0x21B9, prA},     // So     [2] NORTH WEST ARROW TO LONG BAR..LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR
-	{0x21BA, 0x21CD, prN},     // So    [20] ANTICLOCKWISE OPEN CIRCLE ARROW..LEFTWARDS DOUBLE ARROW WITH STROKE
-	{0x21CE, 0x21CF, prN},     // Sm     [2] LEFT RIGHT DOUBLE ARROW WITH STROKE..RIGHTWARDS DOUBLE ARROW WITH STROKE
-	{0x21D0, 0x21D1, prN},     // So     [2] LEFTWARDS DOUBLE ARROW..UPWARDS DOUBLE ARROW
-	{0x21D2, 0x21D2, prA},     // Sm         RIGHTWARDS DOUBLE ARROW
-	{0x21D3, 0x21D3, prN},     // So         DOWNWARDS DOUBLE ARROW
-	{0x21D4, 0x21D4, prA},     // Sm         LEFT RIGHT DOUBLE ARROW
-	{0x21D5, 0x21E6, prN},     // So    [18] UP DOWN DOUBLE ARROW..LEFTWARDS WHITE ARROW
-	{0x21E7, 0x21E7, prA},     // So         UPWARDS WHITE ARROW
-	{0x21E8, 0x21F3, prN},     // So    [12] RIGHTWARDS WHITE ARROW..UP DOWN WHITE ARROW
-	{0x21F4, 0x21FF, prN},     // Sm    [12] RIGHT ARROW WITH SMALL CIRCLE..LEFT RIGHT OPEN-HEADED ARROW
-	{0x2200, 0x2200, prA},     // Sm         FOR ALL
-	{0x2201, 0x2201, prN},     // Sm         COMPLEMENT
-	{0x2202, 0x2203, prA},     // Sm     [2] PARTIAL DIFFERENTIAL..THERE EXISTS
-	{0x2204, 0x2206, prN},     // Sm     [3] THERE DOES NOT EXIST..INCREMENT
-	{0x2207, 0x2208, prA},     // Sm     [2] NABLA..ELEMENT OF
-	{0x2209, 0x220A, prN},     // Sm     [2] NOT AN ELEMENT OF..SMALL ELEMENT OF
-	{0x220B, 0x220B, prA},     // Sm         CONTAINS AS MEMBER
-	{0x220C, 0x220E, prN},     // Sm     [3] DOES NOT CONTAIN AS MEMBER..END OF PROOF
-	{0x220F, 0x220F, prA},     // Sm         N-ARY PRODUCT
-	{0x2210, 0x2210, prN},     // Sm         N-ARY COPRODUCT
-	{0x2211, 0x2211, prA},     // Sm         N-ARY SUMMATION
-	{0x2212, 0x2214, prN},     // Sm     [3] MINUS SIGN..DOT PLUS
-	{0x2215, 0x2215, prA},     // Sm         DIVISION SLASH
-	{0x2216, 0x2219, prN},     // Sm     [4] SET MINUS..BULLET OPERATOR
-	{0x221A, 0x221A, prA},     // Sm         SQUARE ROOT
-	{0x221B, 0x221C, prN},     // Sm     [2] CUBE ROOT..FOURTH ROOT
-	{0x221D, 0x2220, prA},     // Sm     [4] PROPORTIONAL TO..ANGLE
-	{0x2221, 0x2222, prN},     // Sm     [2] MEASURED ANGLE..SPHERICAL ANGLE
-	{0x2223, 0x2223, prA},     // Sm         DIVIDES
-	{0x2224, 0x2224, prN},     // Sm         DOES NOT DIVIDE
-	{0x2225, 0x2225, prA},     // Sm         PARALLEL TO
-	{0x2226, 0x2226, prN},     // Sm         NOT PARALLEL TO
-	{0x2227, 0x222C, prA},     // Sm     [6] LOGICAL AND..DOUBLE INTEGRAL
-	{0x222D, 0x222D, prN},     // Sm         TRIPLE INTEGRAL
-	{0x222E, 0x222E, prA},     // Sm         CONTOUR INTEGRAL
-	{0x222F, 0x2233, prN},     // Sm     [5] SURFACE INTEGRAL..ANTICLOCKWISE CONTOUR INTEGRAL
-	{0x2234, 0x2237, prA},     // Sm     [4] THEREFORE..PROPORTION
-	{0x2238, 0x223B, prN},     // Sm     [4] DOT MINUS..HOMOTHETIC
-	{0x223C, 0x223D, prA},     // Sm     [2] TILDE OPERATOR..REVERSED TILDE
-	{0x223E, 0x2247, prN},     // Sm    [10] INVERTED LAZY S..NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO
-	{0x2248, 0x2248, prA},     // Sm         ALMOST EQUAL TO
-	{0x2249, 0x224B, prN},     // Sm     [3] NOT ALMOST EQUAL TO..TRIPLE TILDE
-	{0x224C, 0x224C, prA},     // Sm         ALL EQUAL TO
-	{0x224D, 0x2251, prN},     // Sm     [5] EQUIVALENT TO..GEOMETRICALLY EQUAL TO
-	{0x2252, 0x2252, prA},     // Sm         APPROXIMATELY EQUAL TO OR THE IMAGE OF
-	{0x2253, 0x225F, prN},     // Sm    [13] IMAGE OF OR APPROXIMATELY EQUAL TO..QUESTIONED EQUAL TO
-	{0x2260, 0x2261, prA},     // Sm     [2] NOT EQUAL TO..IDENTICAL TO
-	{0x2262, 0x2263, prN},     // Sm     [2] NOT IDENTICAL TO..STRICTLY EQUIVALENT TO
-	{0x2264, 0x2267, prA},     // Sm     [4] LESS-THAN OR EQUAL TO..GREATER-THAN OVER EQUAL TO
-	{0x2268, 0x2269, prN},     // Sm     [2] LESS-THAN BUT NOT EQUAL TO..GREATER-THAN BUT NOT EQUAL TO
-	{0x226A, 0x226B, prA},     // Sm     [2] MUCH LESS-THAN..MUCH GREATER-THAN
-	{0x226C, 0x226D, prN},     // Sm     [2] BETWEEN..NOT EQUIVALENT TO
-	{0x226E, 0x226F, prA},     // Sm     [2] NOT LESS-THAN..NOT GREATER-THAN
-	{0x2270, 0x2281, prN},     // Sm    [18] NEITHER LESS-THAN NOR EQUAL TO..DOES NOT SUCCEED
-	{0x2282, 0x2283, prA},     // Sm     [2] SUBSET OF..SUPERSET OF
-	{0x2284, 0x2285, prN},     // Sm     [2] NOT A SUBSET OF..NOT A SUPERSET OF
-	{0x2286, 0x2287, prA},     // Sm     [2] SUBSET OF OR EQUAL TO..SUPERSET OF OR EQUAL TO
-	{0x2288, 0x2294, prN},     // Sm    [13] NEITHER A SUBSET OF NOR EQUAL TO..SQUARE CUP
-	{0x2295, 0x2295, prA},     // Sm         CIRCLED PLUS
-	{0x2296, 0x2298, prN},     // Sm     [3] CIRCLED MINUS..CIRCLED DIVISION SLASH
-	{0x2299, 0x2299, prA},     // Sm         CIRCLED DOT OPERATOR
-	{0x229A, 0x22A4, prN},     // Sm    [11] CIRCLED RING OPERATOR..DOWN TACK
-	{0x22A5, 0x22A5, prA},     // Sm         UP TACK
-	{0x22A6, 0x22BE, prN},     // Sm    [25] ASSERTION..RIGHT ANGLE WITH ARC
-	{0x22BF, 0x22BF, prA},     // Sm         RIGHT TRIANGLE
-	{0x22C0, 0x22FF, prN},     // Sm    [64] N-ARY LOGICAL AND..Z NOTATION BAG MEMBERSHIP
-	{0x2300, 0x2307, prN},     // So     [8] DIAMETER SIGN..WAVY LINE
-	{0x2308, 0x2308, prN},     // Ps         LEFT CEILING
-	{0x2309, 0x2309, prN},     // Pe         RIGHT CEILING
-	{0x230A, 0x230A, prN},     // Ps         LEFT FLOOR
-	{0x230B, 0x230B, prN},     // Pe         RIGHT FLOOR
-	{0x230C, 0x2311, prN},     // So     [6] BOTTOM RIGHT CROP..SQUARE LOZENGE
-	{0x2312, 0x2312, prA},     // So         ARC
-	{0x2313, 0x2319, prN},     // So     [7] SEGMENT..TURNED NOT SIGN
-	{0x231A, 0x231B, prW},     // So     [2] WATCH..HOURGLASS
-	{0x231C, 0x231F, prN},     // So     [4] TOP LEFT CORNER..BOTTOM RIGHT CORNER
-	{0x2320, 0x2321, prN},     // Sm     [2] TOP HALF INTEGRAL..BOTTOM HALF INTEGRAL
-	{0x2322, 0x2328, prN},     // So     [7] FROWN..KEYBOARD
-	{0x2329, 0x2329, prW},     // Ps         LEFT-POINTING ANGLE BRACKET
-	{0x232A, 0x232A, prW},     // Pe         RIGHT-POINTING ANGLE BRACKET
-	{0x232B, 0x237B, prN},     // So    [81] ERASE TO THE LEFT..NOT CHECK MARK
-	{0x237C, 0x237C, prN},     // Sm         RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW
-	{0x237D, 0x239A, prN},     // So    [30] SHOULDERED OPEN BOX..CLEAR SCREEN SYMBOL
-	{0x239B, 0x23B3, prN},     // Sm    [25] LEFT PARENTHESIS UPPER HOOK..SUMMATION BOTTOM
-	{0x23B4, 0x23DB, prN},     // So    [40] TOP SQUARE BRACKET..FUSE
-	{0x23DC, 0x23E1, prN},     // Sm     [6] TOP PARENTHESIS..BOTTOM TORTOISE SHELL BRACKET
-	{0x23E2, 0x23E8, prN},     // So     [7] WHITE TRAPEZIUM..DECIMAL EXPONENT SYMBOL
-	{0x23E9, 0x23EC, prW},     // So     [4] BLACK RIGHT-POINTING DOUBLE TRIANGLE..BLACK DOWN-POINTING DOUBLE TRIANGLE
-	{0x23ED, 0x23EF, prN},     // So     [3] BLACK RIGHT-POINTING DOUBLE TRIANGLE WITH VERTICAL BAR..BLACK RIGHT-POINTING TRIANGLE WITH DOUBLE VERTICAL BAR
-	{0x23F0, 0x23F0, prW},     // So         ALARM CLOCK
-	{0x23F1, 0x23F2, prN},     // So     [2] STOPWATCH..TIMER CLOCK
-	{0x23F3, 0x23F3, prW},     // So         HOURGLASS WITH FLOWING SAND
-	{0x23F4, 0x23FF, prN},     // So    [12] BLACK MEDIUM LEFT-POINTING TRIANGLE..OBSERVER EYE SYMBOL
-	{0x2400, 0x2426, prN},     // So    [39] SYMBOL FOR NULL..SYMBOL FOR SUBSTITUTE FORM TWO
-	{0x2440, 0x244A, prN},     // So    [11] OCR HOOK..OCR DOUBLE BACKSLASH
-	{0x2460, 0x249B, prA},     // No    [60] CIRCLED DIGIT ONE..NUMBER TWENTY FULL STOP
-	{0x249C, 0x24E9, prA},     // So    [78] PARENTHESIZED LATIN SMALL LETTER A..CIRCLED LATIN SMALL LETTER Z
-	{0x24EA, 0x24EA, prN},     // No         CIRCLED DIGIT ZERO
-	{0x24EB, 0x24FF, prA},     // No    [21] NEGATIVE CIRCLED NUMBER ELEVEN..NEGATIVE CIRCLED DIGIT ZERO
-	{0x2500, 0x254B, prA},     // So    [76] BOX DRAWINGS LIGHT HORIZONTAL..BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL
-	{0x254C, 0x254F, prN},     // So     [4] BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL..BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL
-	{0x2550, 0x2573, prA},     // So    [36] BOX DRAWINGS DOUBLE HORIZONTAL..BOX DRAWINGS LIGHT DIAGONAL CROSS
-	{0x2574, 0x257F, prN},     // So    [12] BOX DRAWINGS LIGHT LEFT..BOX DRAWINGS HEAVY UP AND LIGHT DOWN
-	{0x2580, 0x258F, prA},     // So    [16] UPPER HALF BLOCK..LEFT ONE EIGHTH BLOCK
-	{0x2590, 0x2591, prN},     // So     [2] RIGHT HALF BLOCK..LIGHT SHADE
-	{0x2592, 0x2595, prA},     // So     [4] MEDIUM SHADE..RIGHT ONE EIGHTH BLOCK
-	{0x2596, 0x259F, prN},     // So    [10] QUADRANT LOWER LEFT..QUADRANT UPPER RIGHT AND LOWER LEFT AND LOWER RIGHT
-	{0x25A0, 0x25A1, prA},     // So     [2] BLACK SQUARE..WHITE SQUARE
-	{0x25A2, 0x25A2, prN},     // So         WHITE SQUARE WITH ROUNDED CORNERS
-	{0x25A3, 0x25A9, prA},     // So     [7] WHITE SQUARE CONTAINING BLACK SMALL SQUARE..SQUARE WITH DIAGONAL CROSSHATCH FILL
-	{0x25AA, 0x25B1, prN},     // So     [8] BLACK SMALL SQUARE..WHITE PARALLELOGRAM
-	{0x25B2, 0x25B3, prA},     // So     [2] BLACK UP-POINTING TRIANGLE..WHITE UP-POINTING TRIANGLE
-	{0x25B4, 0x25B5, prN},     // So     [2] BLACK UP-POINTING SMALL TRIANGLE..WHITE UP-POINTING SMALL TRIANGLE
-	{0x25B6, 0x25B6, prA},     // So         BLACK RIGHT-POINTING TRIANGLE
-	{0x25B7, 0x25B7, prA},     // Sm         WHITE RIGHT-POINTING TRIANGLE
-	{0x25B8, 0x25BB, prN},     // So     [4] BLACK RIGHT-POINTING SMALL TRIANGLE..WHITE RIGHT-POINTING POINTER
-	{0x25BC, 0x25BD, prA},     // So     [2] BLACK DOWN-POINTING TRIANGLE..WHITE DOWN-POINTING TRIANGLE
-	{0x25BE, 0x25BF, prN},     // So     [2] BLACK DOWN-POINTING SMALL TRIANGLE..WHITE DOWN-POINTING SMALL TRIANGLE
-	{0x25C0, 0x25C0, prA},     // So         BLACK LEFT-POINTING TRIANGLE
-	{0x25C1, 0x25C1, prA},     // Sm         WHITE LEFT-POINTING TRIANGLE
-	{0x25C2, 0x25C5, prN},     // So     [4] BLACK LEFT-POINTING SMALL TRIANGLE..WHITE LEFT-POINTING POINTER
-	{0x25C6, 0x25C8, prA},     // So     [3] BLACK DIAMOND..WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND
-	{0x25C9, 0x25CA, prN},     // So     [2] FISHEYE..LOZENGE
-	{0x25CB, 0x25CB, prA},     // So         WHITE CIRCLE
-	{0x25CC, 0x25CD, prN},     // So     [2] DOTTED CIRCLE..CIRCLE WITH VERTICAL FILL
-	{0x25CE, 0x25D1, prA},     // So     [4] BULLSEYE..CIRCLE WITH RIGHT HALF BLACK
-	{0x25D2, 0x25E1, prN},     // So    [16] CIRCLE WITH LOWER HALF BLACK..LOWER HALF CIRCLE
-	{0x25E2, 0x25E5, prA},     // So     [4] BLACK LOWER RIGHT TRIANGLE..BLACK UPPER RIGHT TRIANGLE
-	{0x25E6, 0x25EE, prN},     // So     [9] WHITE BULLET..UP-POINTING TRIANGLE WITH RIGHT HALF BLACK
-	{0x25EF, 0x25EF, prA},     // So         LARGE CIRCLE
-	{0x25F0, 0x25F7, prN},     // So     [8] WHITE SQUARE WITH UPPER LEFT QUADRANT..WHITE CIRCLE WITH UPPER RIGHT QUADRANT
-	{0x25F8, 0x25FC, prN},     // Sm     [5] UPPER LEFT TRIANGLE..BLACK MEDIUM SQUARE
-	{0x25FD, 0x25FE, prW},     // Sm     [2] WHITE MEDIUM SMALL SQUARE..BLACK MEDIUM SMALL SQUARE
-	{0x25FF, 0x25FF, prN},     // Sm         LOWER RIGHT TRIANGLE
-	{0x2600, 0x2604, prN},     // So     [5] BLACK SUN WITH RAYS..COMET
-	{0x2605, 0x2606, prA},     // So     [2] BLACK STAR..WHITE STAR
-	{0x2607, 0x2608, prN},     // So     [2] LIGHTNING..THUNDERSTORM
-	{0x2609, 0x2609, prA},     // So         SUN
-	{0x260A, 0x260D, prN},     // So     [4] ASCENDING NODE..OPPOSITION
-	{0x260E, 0x260F, prA},     // So     [2] BLACK TELEPHONE..WHITE TELEPHONE
-	{0x2610, 0x2613, prN},     // So     [4] BALLOT BOX..SALTIRE
-	{0x2614, 0x2615, prW},     // So     [2] UMBRELLA WITH RAIN DROPS..HOT BEVERAGE
-	{0x2616, 0x261B, prN},     // So     [6] WHITE SHOGI PIECE..BLACK RIGHT POINTING INDEX
-	{0x261C, 0x261C, prA},     // So         WHITE LEFT POINTING INDEX
-	{0x261D, 0x261D, prN},     // So         WHITE UP POINTING INDEX
-	{0x261E, 0x261E, prA},     // So         WHITE RIGHT POINTING INDEX
-	{0x261F, 0x263F, prN},     // So    [33] WHITE DOWN POINTING INDEX..MERCURY
-	{0x2640, 0x2640, prA},     // So         FEMALE SIGN
-	{0x2641, 0x2641, prN},     // So         EARTH
-	{0x2642, 0x2642, prA},     // So         MALE SIGN
-	{0x2643, 0x2647, prN},     // So     [5] JUPITER..PLUTO
-	{0x2648, 0x2653, prW},     // So    [12] ARIES..PISCES
-	{0x2654, 0x265F, prN},     // So    [12] WHITE CHESS KING..BLACK CHESS PAWN
-	{0x2660, 0x2661, prA},     // So     [2] BLACK SPADE SUIT..WHITE HEART SUIT
-	{0x2662, 0x2662, prN},     // So         WHITE DIAMOND SUIT
-	{0x2663, 0x2665, prA},     // So     [3] BLACK CLUB SUIT..BLACK HEART SUIT
-	{0x2666, 0x2666, prN},     // So         BLACK DIAMOND SUIT
-	{0x2667, 0x266A, prA},     // So     [4] WHITE CLUB SUIT..EIGHTH NOTE
-	{0x266B, 0x266B, prN},     // So         BEAMED EIGHTH NOTES
-	{0x266C, 0x266D, prA},     // So     [2] BEAMED SIXTEENTH NOTES..MUSIC FLAT SIGN
-	{0x266E, 0x266E, prN},     // So         MUSIC NATURAL SIGN
-	{0x266F, 0x266F, prA},     // Sm         MUSIC SHARP SIGN
-	{0x2670, 0x267E, prN},     // So    [15] WEST SYRIAC CROSS..PERMANENT PAPER SIGN
-	{0x267F, 0x267F, prW},     // So         WHEELCHAIR SYMBOL
-	{0x2680, 0x2692, prN},     // So    [19] DIE FACE-1..HAMMER AND PICK
-	{0x2693, 0x2693, prW},     // So         ANCHOR
-	{0x2694, 0x269D, prN},     // So    [10] CROSSED SWORDS..OUTLINED WHITE STAR
-	{0x269E, 0x269F, prA},     // So     [2] THREE LINES CONVERGING RIGHT..THREE LINES CONVERGING LEFT
-	{0x26A0, 0x26A0, prN},     // So         WARNING SIGN
-	{0x26A1, 0x26A1, prW},     // So         HIGH VOLTAGE SIGN
-	{0x26A2, 0x26A9, prN},     // So     [8] DOUBLED FEMALE SIGN..HORIZONTAL MALE WITH STROKE SIGN
-	{0x26AA, 0x26AB, prW},     // So     [2] MEDIUM WHITE CIRCLE..MEDIUM BLACK CIRCLE
-	{0x26AC, 0x26BC, prN},     // So    [17] MEDIUM SMALL WHITE CIRCLE..SESQUIQUADRATE
-	{0x26BD, 0x26BE, prW},     // So     [2] SOCCER BALL..BASEBALL
-	{0x26BF, 0x26BF, prA},     // So         SQUARED KEY
-	{0x26C0, 0x26C3, prN},     // So     [4] WHITE DRAUGHTS MAN..BLACK DRAUGHTS KING
-	{0x26C4, 0x26C5, prW},     // So     [2] SNOWMAN WITHOUT SNOW..SUN BEHIND CLOUD
-	{0x26C6, 0x26CD, prA},     // So     [8] RAIN..DISABLED CAR
-	{0x26CE, 0x26CE, prW},     // So         OPHIUCHUS
-	{0x26CF, 0x26D3, prA},     // So     [5] PICK..CHAINS
-	{0x26D4, 0x26D4, prW},     // So         NO ENTRY
-	{0x26D5, 0x26E1, prA},     // So    [13] ALTERNATE ONE-WAY LEFT WAY TRAFFIC..RESTRICTED LEFT ENTRY-2
-	{0x26E2, 0x26E2, prN},     // So         ASTRONOMICAL SYMBOL FOR URANUS
-	{0x26E3, 0x26E3, prA},     // So         HEAVY CIRCLE WITH STROKE AND TWO DOTS ABOVE
-	{0x26E4, 0x26E7, prN},     // So     [4] PENTAGRAM..INVERTED PENTAGRAM
-	{0x26E8, 0x26E9, prA},     // So     [2] BLACK CROSS ON SHIELD..SHINTO SHRINE
-	{0x26EA, 0x26EA, prW},     // So         CHURCH
-	{0x26EB, 0x26F1, prA},     // So     [7] CASTLE..UMBRELLA ON GROUND
-	{0x26F2, 0x26F3, prW},     // So     [2] FOUNTAIN..FLAG IN HOLE
-	{0x26F4, 0x26F4, prA},     // So         FERRY
-	{0x26F5, 0x26F5, prW},     // So         SAILBOAT
-	{0x26F6, 0x26F9, prA},     // So     [4] SQUARE FOUR CORNERS..PERSON WITH BALL
-	{0x26FA, 0x26FA, prW},     // So         TENT
-	{0x26FB, 0x26FC, prA},     // So     [2] JAPANESE BANK SYMBOL..HEADSTONE GRAVEYARD SYMBOL
-	{0x26FD, 0x26FD, prW},     // So         FUEL PUMP
-	{0x26FE, 0x26FF, prA},     // So     [2] CUP ON BLACK SQUARE..WHITE FLAG WITH HORIZONTAL MIDDLE BLACK STRIPE
-	{0x2700, 0x2704, prN},     // So     [5] BLACK SAFETY SCISSORS..WHITE SCISSORS
-	{0x2705, 0x2705, prW},     // So         WHITE HEAVY CHECK MARK
-	{0x2706, 0x2709, prN},     // So     [4] TELEPHONE LOCATION SIGN..ENVELOPE
-	{0x270A, 0x270B, prW},     // So     [2] RAISED FIST..RAISED HAND
-	{0x270C, 0x2727, prN},     // So    [28] VICTORY HAND..WHITE FOUR POINTED STAR
-	{0x2728, 0x2728, prW},     // So         SPARKLES
-	{0x2729, 0x273C, prN},     // So    [20] STRESS OUTLINED WHITE STAR..OPEN CENTRE TEARDROP-SPOKED ASTERISK
-	{0x273D, 0x273D, prA},     // So         HEAVY TEARDROP-SPOKED ASTERISK
-	{0x273E, 0x274B, prN},     // So    [14] SIX PETALLED BLACK AND WHITE FLORETTE..HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK
-	{0x274C, 0x274C, prW},     // So         CROSS MARK
-	{0x274D, 0x274D, prN},     // So         SHADOWED WHITE CIRCLE
-	{0x274E, 0x274E, prW},     // So         NEGATIVE SQUARED CROSS MARK
-	{0x274F, 0x2752, prN},     // So     [4] LOWER RIGHT DROP-SHADOWED WHITE SQUARE..UPPER RIGHT SHADOWED WHITE SQUARE
-	{0x2753, 0x2755, prW},     // So     [3] BLACK QUESTION MARK ORNAMENT..WHITE EXCLAMATION MARK ORNAMENT
-	{0x2756, 0x2756, prN},     // So         BLACK DIAMOND MINUS WHITE X
-	{0x2757, 0x2757, prW},     // So         HEAVY EXCLAMATION MARK SYMBOL
-	{0x2758, 0x2767, prN},     // So    [16] LIGHT VERTICAL BAR..ROTATED FLORAL HEART BULLET
-	{0x2768, 0x2768, prN},     // Ps         MEDIUM LEFT PARENTHESIS ORNAMENT
-	{0x2769, 0x2769, prN},     // Pe         MEDIUM RIGHT PARENTHESIS ORNAMENT
-	{0x276A, 0x276A, prN},     // Ps         MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT
-	{0x276B, 0x276B, prN},     // Pe         MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT
-	{0x276C, 0x276C, prN},     // Ps         MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT
-	{0x276D, 0x276D, prN},     // Pe         MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT
-	{0x276E, 0x276E, prN},     // Ps         HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT
-	{0x276F, 0x276F, prN},     // Pe         HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT
-	{0x2770, 0x2770, prN},     // Ps         HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT
-	{0x2771, 0x2771, prN},     // Pe         HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT
-	{0x2772, 0x2772, prN},     // Ps         LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT
-	{0x2773, 0x2773, prN},     // Pe         LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT
-	{0x2774, 0x2774, prN},     // Ps         MEDIUM LEFT CURLY BRACKET ORNAMENT
-	{0x2775, 0x2775, prN},     // Pe         MEDIUM RIGHT CURLY BRACKET ORNAMENT
-	{0x2776, 0x277F, prA},     // No    [10] DINGBAT NEGATIVE CIRCLED DIGIT ONE..DINGBAT NEGATIVE CIRCLED NUMBER TEN
-	{0x2780, 0x2793, prN},     // No    [20] DINGBAT CIRCLED SANS-SERIF DIGIT ONE..DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN
-	{0x2794, 0x2794, prN},     // So         HEAVY WIDE-HEADED RIGHTWARDS ARROW
-	{0x2795, 0x2797, prW},     // So     [3] HEAVY PLUS SIGN..HEAVY DIVISION SIGN
-	{0x2798, 0x27AF, prN},     // So    [24] HEAVY SOUTH EAST ARROW..NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
-	{0x27B0, 0x27B0, prW},     // So         CURLY LOOP
-	{0x27B1, 0x27BE, prN},     // So    [14] NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW..OPEN-OUTLINED RIGHTWARDS ARROW
-	{0x27BF, 0x27BF, prW},     // So         DOUBLE CURLY LOOP
-	{0x27C0, 0x27C4, prN},     // Sm     [5] THREE DIMENSIONAL ANGLE..OPEN SUPERSET
-	{0x27C5, 0x27C5, prN},     // Ps         LEFT S-SHAPED BAG DELIMITER
-	{0x27C6, 0x27C6, prN},     // Pe         RIGHT S-SHAPED BAG DELIMITER
-	{0x27C7, 0x27E5, prN},     // Sm    [31] OR WITH DOT INSIDE..WHITE SQUARE WITH RIGHTWARDS TICK
-	{0x27E6, 0x27E6, prNa},    // Ps         MATHEMATICAL LEFT WHITE SQUARE BRACKET
-	{0x27E7, 0x27E7, prNa},    // Pe         MATHEMATICAL RIGHT WHITE SQUARE BRACKET
-	{0x27E8, 0x27E8, prNa},    // Ps         MATHEMATICAL LEFT ANGLE BRACKET
-	{0x27E9, 0x27E9, prNa},    // Pe         MATHEMATICAL RIGHT ANGLE BRACKET
-	{0x27EA, 0x27EA, prNa},    // Ps         MATHEMATICAL LEFT DOUBLE ANGLE BRACKET
-	{0x27EB, 0x27EB, prNa},    // Pe         MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET
-	{0x27EC, 0x27EC, prNa},    // Ps         MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET
-	{0x27ED, 0x27ED, prNa},    // Pe         MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET
-	{0x27EE, 0x27EE, prN},     // Ps         MATHEMATICAL LEFT FLATTENED PARENTHESIS
-	{0x27EF, 0x27EF, prN},     // Pe         MATHEMATICAL RIGHT FLATTENED PARENTHESIS
-	{0x27F0, 0x27FF, prN},     // Sm    [16] UPWARDS QUADRUPLE ARROW..LONG RIGHTWARDS SQUIGGLE ARROW
-	{0x2800, 0x28FF, prN},     // So   [256] BRAILLE PATTERN BLANK..BRAILLE PATTERN DOTS-12345678
-	{0x2900, 0x297F, prN},     // Sm   [128] RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE..DOWN FISH TAIL
-	{0x2980, 0x2982, prN},     // Sm     [3] TRIPLE VERTICAL BAR DELIMITER..Z NOTATION TYPE COLON
-	{0x2983, 0x2983, prN},     // Ps         LEFT WHITE CURLY BRACKET
-	{0x2984, 0x2984, prN},     // Pe         RIGHT WHITE CURLY BRACKET
-	{0x2985, 0x2985, prNa},    // Ps         LEFT WHITE PARENTHESIS
-	{0x2986, 0x2986, prNa},    // Pe         RIGHT WHITE PARENTHESIS
-	{0x2987, 0x2987, prN},     // Ps         Z NOTATION LEFT IMAGE BRACKET
-	{0x2988, 0x2988, prN},     // Pe         Z NOTATION RIGHT IMAGE BRACKET
-	{0x2989, 0x2989, prN},     // Ps         Z NOTATION LEFT BINDING BRACKET
-	{0x298A, 0x298A, prN},     // Pe         Z NOTATION RIGHT BINDING BRACKET
-	{0x298B, 0x298B, prN},     // Ps         LEFT SQUARE BRACKET WITH UNDERBAR
-	{0x298C, 0x298C, prN},     // Pe         RIGHT SQUARE BRACKET WITH UNDERBAR
-	{0x298D, 0x298D, prN},     // Ps         LEFT SQUARE BRACKET WITH TICK IN TOP CORNER
-	{0x298E, 0x298E, prN},     // Pe         RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
-	{0x298F, 0x298F, prN},     // Ps         LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
-	{0x2990, 0x2990, prN},     // Pe         RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER
-	{0x2991, 0x2991, prN},     // Ps         LEFT ANGLE BRACKET WITH DOT
-	{0x2992, 0x2992, prN},     // Pe         RIGHT ANGLE BRACKET WITH DOT
-	{0x2993, 0x2993, prN},     // Ps         LEFT ARC LESS-THAN BRACKET
-	{0x2994, 0x2994, prN},     // Pe         RIGHT ARC GREATER-THAN BRACKET
-	{0x2995, 0x2995, prN},     // Ps         DOUBLE LEFT ARC GREATER-THAN BRACKET
-	{0x2996, 0x2996, prN},     // Pe         DOUBLE RIGHT ARC LESS-THAN BRACKET
-	{0x2997, 0x2997, prN},     // Ps         LEFT BLACK TORTOISE SHELL BRACKET
-	{0x2998, 0x2998, prN},     // Pe         RIGHT BLACK TORTOISE SHELL BRACKET
-	{0x2999, 0x29D7, prN},     // Sm    [63] DOTTED FENCE..BLACK HOURGLASS
-	{0x29D8, 0x29D8, prN},     // Ps         LEFT WIGGLY FENCE
-	{0x29D9, 0x29D9, prN},     // Pe         RIGHT WIGGLY FENCE
-	{0x29DA, 0x29DA, prN},     // Ps         LEFT DOUBLE WIGGLY FENCE
-	{0x29DB, 0x29DB, prN},     // Pe         RIGHT DOUBLE WIGGLY FENCE
-	{0x29DC, 0x29FB, prN},     // Sm    [32] INCOMPLETE INFINITY..TRIPLE PLUS
-	{0x29FC, 0x29FC, prN},     // Ps         LEFT-POINTING CURVED ANGLE BRACKET
-	{0x29FD, 0x29FD, prN},     // Pe         RIGHT-POINTING CURVED ANGLE BRACKET
-	{0x29FE, 0x29FF, prN},     // Sm     [2] TINY..MINY
-	{0x2A00, 0x2AFF, prN},     // Sm   [256] N-ARY CIRCLED DOT OPERATOR..N-ARY WHITE VERTICAL BAR
-	{0x2B00, 0x2B1A, prN},     // So    [27] NORTH EAST WHITE ARROW..DOTTED SQUARE
-	{0x2B1B, 0x2B1C, prW},     // So     [2] BLACK LARGE SQUARE..WHITE LARGE SQUARE
-	{0x2B1D, 0x2B2F, prN},     // So    [19] BLACK VERY SMALL SQUARE..WHITE VERTICAL ELLIPSE
-	{0x2B30, 0x2B44, prN},     // Sm    [21] LEFT ARROW WITH SMALL CIRCLE..RIGHTWARDS ARROW THROUGH SUPERSET
-	{0x2B45, 0x2B46, prN},     // So     [2] LEFTWARDS QUADRUPLE ARROW..RIGHTWARDS QUADRUPLE ARROW
-	{0x2B47, 0x2B4C, prN},     // Sm     [6] REVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROW..RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR
-	{0x2B4D, 0x2B4F, prN},     // So     [3] DOWNWARDS TRIANGLE-HEADED ZIGZAG ARROW..SHORT BACKSLANTED SOUTH ARROW
-	{0x2B50, 0x2B50, prW},     // So         WHITE MEDIUM STAR
-	{0x2B51, 0x2B54, prN},     // So     [4] BLACK SMALL STAR..WHITE RIGHT-POINTING PENTAGON
-	{0x2B55, 0x2B55, prW},     // So         HEAVY LARGE CIRCLE
-	{0x2B56, 0x2B59, prA},     // So     [4] HEAVY OVAL WITH OVAL INSIDE..HEAVY CIRCLED SALTIRE
-	{0x2B5A, 0x2B73, prN},     // So    [26] SLANTED NORTH ARROW WITH HOOKED HEAD..DOWNWARDS TRIANGLE-HEADED ARROW TO BAR
-	{0x2B76, 0x2B95, prN},     // So    [32] NORTH WEST TRIANGLE-HEADED ARROW TO BAR..RIGHTWARDS BLACK ARROW
-	{0x2B97, 0x2BFF, prN},     // So   [105] SYMBOL FOR TYPE A ELECTRONICS..HELLSCHREIBER PAUSE SYMBOL
-	{0x2C00, 0x2C5F, prN},     // L&    [96] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC SMALL LETTER CAUDATE CHRIVI
-	{0x2C60, 0x2C7B, prN},     // L&    [28] LATIN CAPITAL LETTER L WITH DOUBLE BAR..LATIN LETTER SMALL CAPITAL TURNED E
-	{0x2C7C, 0x2C7D, prN},     // Lm     [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V
-	{0x2C7E, 0x2C7F, prN},     // Lu     [2] LATIN CAPITAL LETTER S WITH SWASH TAIL..LATIN CAPITAL LETTER Z WITH SWASH TAIL
-	{0x2C80, 0x2CE4, prN},     // L&   [101] COPTIC CAPITAL LETTER ALFA..COPTIC SYMBOL KAI
-	{0x2CE5, 0x2CEA, prN},     // So     [6] COPTIC SYMBOL MI RO..COPTIC SYMBOL SHIMA SIMA
-	{0x2CEB, 0x2CEE, prN},     // L&     [4] COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI..COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA
-	{0x2CEF, 0x2CF1, prN},     // Mn     [3] COPTIC COMBINING NI ABOVE..COPTIC COMBINING SPIRITUS LENIS
-	{0x2CF2, 0x2CF3, prN},     // L&     [2] COPTIC CAPITAL LETTER BOHAIRIC KHEI..COPTIC SMALL LETTER BOHAIRIC KHEI
-	{0x2CF9, 0x2CFC, prN},     // Po     [4] COPTIC OLD NUBIAN FULL STOP..COPTIC OLD NUBIAN VERSE DIVIDER
-	{0x2CFD, 0x2CFD, prN},     // No         COPTIC FRACTION ONE HALF
-	{0x2CFE, 0x2CFF, prN},     // Po     [2] COPTIC FULL STOP..COPTIC MORPHOLOGICAL DIVIDER
-	{0x2D00, 0x2D25, prN},     // Ll    [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE
-	{0x2D27, 0x2D27, prN},     // Ll         GEORGIAN SMALL LETTER YN
-	{0x2D2D, 0x2D2D, prN},     // Ll         GEORGIAN SMALL LETTER AEN
-	{0x2D30, 0x2D67, prN},     // Lo    [56] TIFINAGH LETTER YA..TIFINAGH LETTER YO
-	{0x2D6F, 0x2D6F, prN},     // Lm         TIFINAGH MODIFIER LETTER LABIALIZATION MARK
-	{0x2D70, 0x2D70, prN},     // Po         TIFINAGH SEPARATOR MARK
-	{0x2D7F, 0x2D7F, prN},     // Mn         TIFINAGH CONSONANT JOINER
-	{0x2D80, 0x2D96, prN},     // Lo    [23] ETHIOPIC SYLLABLE LOA..ETHIOPIC SYLLABLE GGWE
-	{0x2DA0, 0x2DA6, prN},     // Lo     [7] ETHIOPIC SYLLABLE SSA..ETHIOPIC SYLLABLE SSO
-	{0x2DA8, 0x2DAE, prN},     // Lo     [7] ETHIOPIC SYLLABLE CCA..ETHIOPIC SYLLABLE CCO
-	{0x2DB0, 0x2DB6, prN},     // Lo     [7] ETHIOPIC SYLLABLE ZZA..ETHIOPIC SYLLABLE ZZO
-	{0x2DB8, 0x2DBE, prN},     // Lo     [7] ETHIOPIC SYLLABLE CCHA..ETHIOPIC SYLLABLE CCHO
-	{0x2DC0, 0x2DC6, prN},     // Lo     [7] ETHIOPIC SYLLABLE QYA..ETHIOPIC SYLLABLE QYO
-	{0x2DC8, 0x2DCE, prN},     // Lo     [7] ETHIOPIC SYLLABLE KYA..ETHIOPIC SYLLABLE KYO
-	{0x2DD0, 0x2DD6, prN},     // Lo     [7] ETHIOPIC SYLLABLE XYA..ETHIOPIC SYLLABLE XYO
-	{0x2DD8, 0x2DDE, prN},     // Lo     [7] ETHIOPIC SYLLABLE GYA..ETHIOPIC SYLLABLE GYO
-	{0x2DE0, 0x2DFF, prN},     // Mn    [32] COMBINING CYRILLIC LETTER BE..COMBINING CYRILLIC LETTER IOTIFIED BIG YUS
-	{0x2E00, 0x2E01, prN},     // Po     [2] RIGHT ANGLE SUBSTITUTION MARKER..RIGHT ANGLE DOTTED SUBSTITUTION MARKER
-	{0x2E02, 0x2E02, prN},     // Pi         LEFT SUBSTITUTION BRACKET
-	{0x2E03, 0x2E03, prN},     // Pf         RIGHT SUBSTITUTION BRACKET
-	{0x2E04, 0x2E04, prN},     // Pi         LEFT DOTTED SUBSTITUTION BRACKET
-	{0x2E05, 0x2E05, prN},     // Pf         RIGHT DOTTED SUBSTITUTION BRACKET
-	{0x2E06, 0x2E08, prN},     // Po     [3] RAISED INTERPOLATION MARKER..DOTTED TRANSPOSITION MARKER
-	{0x2E09, 0x2E09, prN},     // Pi         LEFT TRANSPOSITION BRACKET
-	{0x2E0A, 0x2E0A, prN},     // Pf         RIGHT TRANSPOSITION BRACKET
-	{0x2E0B, 0x2E0B, prN},     // Po         RAISED SQUARE
-	{0x2E0C, 0x2E0C, prN},     // Pi         LEFT RAISED OMISSION BRACKET
-	{0x2E0D, 0x2E0D, prN},     // Pf         RIGHT RAISED OMISSION BRACKET
-	{0x2E0E, 0x2E16, prN},     // Po     [9] EDITORIAL CORONIS..DOTTED RIGHT-POINTING ANGLE
-	{0x2E17, 0x2E17, prN},     // Pd         DOUBLE OBLIQUE HYPHEN
-	{0x2E18, 0x2E19, prN},     // Po     [2] INVERTED INTERROBANG..PALM BRANCH
-	{0x2E1A, 0x2E1A, prN},     // Pd         HYPHEN WITH DIAERESIS
-	{0x2E1B, 0x2E1B, prN},     // Po         TILDE WITH RING ABOVE
-	{0x2E1C, 0x2E1C, prN},     // Pi         LEFT LOW PARAPHRASE BRACKET
-	{0x2E1D, 0x2E1D, prN},     // Pf         RIGHT LOW PARAPHRASE BRACKET
-	{0x2E1E, 0x2E1F, prN},     // Po     [2] TILDE WITH DOT ABOVE..TILDE WITH DOT BELOW
-	{0x2E20, 0x2E20, prN},     // Pi         LEFT VERTICAL BAR WITH QUILL
-	{0x2E21, 0x2E21, prN},     // Pf         RIGHT VERTICAL BAR WITH QUILL
-	{0x2E22, 0x2E22, prN},     // Ps         TOP LEFT HALF BRACKET
-	{0x2E23, 0x2E23, prN},     // Pe         TOP RIGHT HALF BRACKET
-	{0x2E24, 0x2E24, prN},     // Ps         BOTTOM LEFT HALF BRACKET
-	{0x2E25, 0x2E25, prN},     // Pe         BOTTOM RIGHT HALF BRACKET
-	{0x2E26, 0x2E26, prN},     // Ps         LEFT SIDEWAYS U BRACKET
-	{0x2E27, 0x2E27, prN},     // Pe         RIGHT SIDEWAYS U BRACKET
-	{0x2E28, 0x2E28, prN},     // Ps         LEFT DOUBLE PARENTHESIS
-	{0x2E29, 0x2E29, prN},     // Pe         RIGHT DOUBLE PARENTHESIS
-	{0x2E2A, 0x2E2E, prN},     // Po     [5] TWO DOTS OVER ONE DOT PUNCTUATION..REVERSED QUESTION MARK
-	{0x2E2F, 0x2E2F, prN},     // Lm         VERTICAL TILDE
-	{0x2E30, 0x2E39, prN},     // Po    [10] RING POINT..TOP HALF SECTION SIGN
-	{0x2E3A, 0x2E3B, prN},     // Pd     [2] TWO-EM DASH..THREE-EM DASH
-	{0x2E3C, 0x2E3F, prN},     // Po     [4] STENOGRAPHIC FULL STOP..CAPITULUM
-	{0x2E40, 0x2E40, prN},     // Pd         DOUBLE HYPHEN
-	{0x2E41, 0x2E41, prN},     // Po         REVERSED COMMA
-	{0x2E42, 0x2E42, prN},     // Ps         DOUBLE LOW-REVERSED-9 QUOTATION MARK
-	{0x2E43, 0x2E4F, prN},     // Po    [13] DASH WITH LEFT UPTURN..CORNISH VERSE DIVIDER
-	{0x2E50, 0x2E51, prN},     // So     [2] CROSS PATTY WITH RIGHT CROSSBAR..CROSS PATTY WITH LEFT CROSSBAR
-	{0x2E52, 0x2E54, prN},     // Po     [3] TIRONIAN SIGN CAPITAL ET..MEDIEVAL QUESTION MARK
-	{0x2E55, 0x2E55, prN},     // Ps         LEFT SQUARE BRACKET WITH STROKE
-	{0x2E56, 0x2E56, prN},     // Pe         RIGHT SQUARE BRACKET WITH STROKE
-	{0x2E57, 0x2E57, prN},     // Ps         LEFT SQUARE BRACKET WITH DOUBLE STROKE
-	{0x2E58, 0x2E58, prN},     // Pe         RIGHT SQUARE BRACKET WITH DOUBLE STROKE
-	{0x2E59, 0x2E59, prN},     // Ps         TOP HALF LEFT PARENTHESIS
-	{0x2E5A, 0x2E5A, prN},     // Pe         TOP HALF RIGHT PARENTHESIS
-	{0x2E5B, 0x2E5B, prN},     // Ps         BOTTOM HALF LEFT PARENTHESIS
-	{0x2E5C, 0x2E5C, prN},     // Pe         BOTTOM HALF RIGHT PARENTHESIS
-	{0x2E5D, 0x2E5D, prN},     // Pd         OBLIQUE HYPHEN
-	{0x2E80, 0x2E99, prW},     // So    [26] CJK RADICAL REPEAT..CJK RADICAL RAP
-	{0x2E9B, 0x2EF3, prW},     // So    [89] CJK RADICAL CHOKE..CJK RADICAL C-SIMPLIFIED TURTLE
-	{0x2F00, 0x2FD5, prW},     // So   [214] KANGXI RADICAL ONE..KANGXI RADICAL FLUTE
-	{0x2FF0, 0x2FFB, prW},     // So    [12] IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT..IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID
-	{0x3000, 0x3000, prF},     // Zs         IDEOGRAPHIC SPACE
-	{0x3001, 0x3003, prW},     // Po     [3] IDEOGRAPHIC COMMA..DITTO MARK
-	{0x3004, 0x3004, prW},     // So         JAPANESE INDUSTRIAL STANDARD SYMBOL
-	{0x3005, 0x3005, prW},     // Lm         IDEOGRAPHIC ITERATION MARK
-	{0x3006, 0x3006, prW},     // Lo         IDEOGRAPHIC CLOSING MARK
-	{0x3007, 0x3007, prW},     // Nl         IDEOGRAPHIC NUMBER ZERO
-	{0x3008, 0x3008, prW},     // Ps         LEFT ANGLE BRACKET
-	{0x3009, 0x3009, prW},     // Pe         RIGHT ANGLE BRACKET
-	{0x300A, 0x300A, prW},     // Ps         LEFT DOUBLE ANGLE BRACKET
-	{0x300B, 0x300B, prW},     // Pe         RIGHT DOUBLE ANGLE BRACKET
-	{0x300C, 0x300C, prW},     // Ps         LEFT CORNER BRACKET
-	{0x300D, 0x300D, prW},     // Pe         RIGHT CORNER BRACKET
-	{0x300E, 0x300E, prW},     // Ps         LEFT WHITE CORNER BRACKET
-	{0x300F, 0x300F, prW},     // Pe         RIGHT WHITE CORNER BRACKET
-	{0x3010, 0x3010, prW},     // Ps         LEFT BLACK LENTICULAR BRACKET
-	{0x3011, 0x3011, prW},     // Pe         RIGHT BLACK LENTICULAR BRACKET
-	{0x3012, 0x3013, prW},     // So     [2] POSTAL MARK..GETA MARK
-	{0x3014, 0x3014, prW},     // Ps         LEFT TORTOISE SHELL BRACKET
-	{0x3015, 0x3015, prW},     // Pe         RIGHT TORTOISE SHELL BRACKET
-	{0x3016, 0x3016, prW},     // Ps         LEFT WHITE LENTICULAR BRACKET
-	{0x3017, 0x3017, prW},     // Pe         RIGHT WHITE LENTICULAR BRACKET
-	{0x3018, 0x3018, prW},     // Ps         LEFT WHITE TORTOISE SHELL BRACKET
-	{0x3019, 0x3019, prW},     // Pe         RIGHT WHITE TORTOISE SHELL BRACKET
-	{0x301A, 0x301A, prW},     // Ps         LEFT WHITE SQUARE BRACKET
-	{0x301B, 0x301B, prW},     // Pe         RIGHT WHITE SQUARE BRACKET
-	{0x301C, 0x301C, prW},     // Pd         WAVE DASH
-	{0x301D, 0x301D, prW},     // Ps         REVERSED DOUBLE PRIME QUOTATION MARK
-	{0x301E, 0x301F, prW},     // Pe     [2] DOUBLE PRIME QUOTATION MARK..LOW DOUBLE PRIME QUOTATION MARK
-	{0x3020, 0x3020, prW},     // So         POSTAL MARK FACE
-	{0x3021, 0x3029, prW},     // Nl     [9] HANGZHOU NUMERAL ONE..HANGZHOU NUMERAL NINE
-	{0x302A, 0x302D, prW},     // Mn     [4] IDEOGRAPHIC LEVEL TONE MARK..IDEOGRAPHIC ENTERING TONE MARK
-	{0x302E, 0x302F, prW},     // Mc     [2] HANGUL SINGLE DOT TONE MARK..HANGUL DOUBLE DOT TONE MARK
-	{0x3030, 0x3030, prW},     // Pd         WAVY DASH
-	{0x3031, 0x3035, prW},     // Lm     [5] VERTICAL KANA REPEAT MARK..VERTICAL KANA REPEAT MARK LOWER HALF
-	{0x3036, 0x3037, prW},     // So     [2] CIRCLED POSTAL MARK..IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL
-	{0x3038, 0x303A, prW},     // Nl     [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY
-	{0x303B, 0x303B, prW},     // Lm         VERTICAL IDEOGRAPHIC ITERATION MARK
-	{0x303C, 0x303C, prW},     // Lo         MASU MARK
-	{0x303D, 0x303D, prW},     // Po         PART ALTERNATION MARK
-	{0x303E, 0x303E, prW},     // So         IDEOGRAPHIC VARIATION INDICATOR
-	{0x303F, 0x303F, prN},     // So         IDEOGRAPHIC HALF FILL SPACE
-	{0x3041, 0x3096, prW},     // Lo    [86] HIRAGANA LETTER SMALL A..HIRAGANA LETTER SMALL KE
-	{0x3099, 0x309A, prW},     // Mn     [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
-	{0x309B, 0x309C, prW},     // Sk     [2] KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
-	{0x309D, 0x309E, prW},     // Lm     [2] HIRAGANA ITERATION MARK..HIRAGANA VOICED ITERATION MARK
-	{0x309F, 0x309F, prW},     // Lo         HIRAGANA DIGRAPH YORI
-	{0x30A0, 0x30A0, prW},     // Pd         KATAKANA-HIRAGANA DOUBLE HYPHEN
-	{0x30A1, 0x30FA, prW},     // Lo    [90] KATAKANA LETTER SMALL A..KATAKANA LETTER VO
-	{0x30FB, 0x30FB, prW},     // Po         KATAKANA MIDDLE DOT
-	{0x30FC, 0x30FE, prW},     // Lm     [3] KATAKANA-HIRAGANA PROLONGED SOUND MARK..KATAKANA VOICED ITERATION MARK
-	{0x30FF, 0x30FF, prW},     // Lo         KATAKANA DIGRAPH KOTO
-	{0x3105, 0x312F, prW},     // Lo    [43] BOPOMOFO LETTER B..BOPOMOFO LETTER NN
-	{0x3131, 0x318E, prW},     // Lo    [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE
-	{0x3190, 0x3191, prW},     // So     [2] IDEOGRAPHIC ANNOTATION LINKING MARK..IDEOGRAPHIC ANNOTATION REVERSE MARK
-	{0x3192, 0x3195, prW},     // No     [4] IDEOGRAPHIC ANNOTATION ONE MARK..IDEOGRAPHIC ANNOTATION FOUR MARK
-	{0x3196, 0x319F, prW},     // So    [10] IDEOGRAPHIC ANNOTATION TOP MARK..IDEOGRAPHIC ANNOTATION MAN MARK
-	{0x31A0, 0x31BF, prW},     // Lo    [32] BOPOMOFO LETTER BU..BOPOMOFO LETTER AH
-	{0x31C0, 0x31E3, prW},     // So    [36] CJK STROKE T..CJK STROKE Q
-	{0x31F0, 0x31FF, prW},     // Lo    [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO
-	{0x3200, 0x321E, prW},     // So    [31] PARENTHESIZED HANGUL KIYEOK..PARENTHESIZED KOREAN CHARACTER O HU
-	{0x3220, 0x3229, prW},     // No    [10] PARENTHESIZED IDEOGRAPH ONE..PARENTHESIZED IDEOGRAPH TEN
-	{0x322A, 0x3247, prW},     // So    [30] PARENTHESIZED IDEOGRAPH MOON..CIRCLED IDEOGRAPH KOTO
-	{0x3248, 0x324F, prA},     // No     [8] CIRCLED NUMBER TEN ON BLACK SQUARE..CIRCLED NUMBER EIGHTY ON BLACK SQUARE
-	{0x3250, 0x3250, prW},     // So         PARTNERSHIP SIGN
-	{0x3251, 0x325F, prW},     // No    [15] CIRCLED NUMBER TWENTY ONE..CIRCLED NUMBER THIRTY FIVE
-	{0x3260, 0x327F, prW},     // So    [32] CIRCLED HANGUL KIYEOK..KOREAN STANDARD SYMBOL
-	{0x3280, 0x3289, prW},     // No    [10] CIRCLED IDEOGRAPH ONE..CIRCLED IDEOGRAPH TEN
-	{0x328A, 0x32B0, prW},     // So    [39] CIRCLED IDEOGRAPH MOON..CIRCLED IDEOGRAPH NIGHT
-	{0x32B1, 0x32BF, prW},     // No    [15] CIRCLED NUMBER THIRTY SIX..CIRCLED NUMBER FIFTY
-	{0x32C0, 0x32FF, prW},     // So    [64] IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY..SQUARE ERA NAME REIWA
-	{0x3300, 0x33FF, prW},     // So   [256] SQUARE APAATO..SQUARE GAL
-	{0x3400, 0x4DBF, prW},     // Lo  [6592] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DBF
-	{0x4DC0, 0x4DFF, prN},     // So    [64] HEXAGRAM FOR THE CREATIVE HEAVEN..HEXAGRAM FOR BEFORE COMPLETION
-	{0x4E00, 0x9FFF, prW},     // Lo [20992] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FFF
-	{0xA000, 0xA014, prW},     // Lo    [21] YI SYLLABLE IT..YI SYLLABLE E
-	{0xA015, 0xA015, prW},     // Lm         YI SYLLABLE WU
-	{0xA016, 0xA48C, prW},     // Lo  [1143] YI SYLLABLE BIT..YI SYLLABLE YYR
-	{0xA490, 0xA4C6, prW},     // So    [55] YI RADICAL QOT..YI RADICAL KE
-	{0xA4D0, 0xA4F7, prN},     // Lo    [40] LISU LETTER BA..LISU LETTER OE
-	{0xA4F8, 0xA4FD, prN},     // Lm     [6] LISU LETTER TONE MYA TI..LISU LETTER TONE MYA JEU
-	{0xA4FE, 0xA4FF, prN},     // Po     [2] LISU PUNCTUATION COMMA..LISU PUNCTUATION FULL STOP
-	{0xA500, 0xA60B, prN},     // Lo   [268] VAI SYLLABLE EE..VAI SYLLABLE NG
-	{0xA60C, 0xA60C, prN},     // Lm         VAI SYLLABLE LENGTHENER
-	{0xA60D, 0xA60F, prN},     // Po     [3] VAI COMMA..VAI QUESTION MARK
-	{0xA610, 0xA61F, prN},     // Lo    [16] VAI SYLLABLE NDOLE FA..VAI SYMBOL JONG
-	{0xA620, 0xA629, prN},     // Nd    [10] VAI DIGIT ZERO..VAI DIGIT NINE
-	{0xA62A, 0xA62B, prN},     // Lo     [2] VAI SYLLABLE NDOLE MA..VAI SYLLABLE NDOLE DO
-	{0xA640, 0xA66D, prN},     // L&    [46] CYRILLIC CAPITAL LETTER ZEMLYA..CYRILLIC SMALL LETTER DOUBLE MONOCULAR O
-	{0xA66E, 0xA66E, prN},     // Lo         CYRILLIC LETTER MULTIOCULAR O
-	{0xA66F, 0xA66F, prN},     // Mn         COMBINING CYRILLIC VZMET
-	{0xA670, 0xA672, prN},     // Me     [3] COMBINING CYRILLIC TEN MILLIONS SIGN..COMBINING CYRILLIC THOUSAND MILLIONS SIGN
-	{0xA673, 0xA673, prN},     // Po         SLAVONIC ASTERISK
-	{0xA674, 0xA67D, prN},     // Mn    [10] COMBINING CYRILLIC LETTER UKRAINIAN IE..COMBINING CYRILLIC PAYEROK
-	{0xA67E, 0xA67E, prN},     // Po         CYRILLIC KAVYKA
-	{0xA67F, 0xA67F, prN},     // Lm         CYRILLIC PAYEROK
-	{0xA680, 0xA69B, prN},     // L&    [28] CYRILLIC CAPITAL LETTER DWE..CYRILLIC SMALL LETTER CROSSED O
-	{0xA69C, 0xA69D, prN},     // Lm     [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFIER LETTER CYRILLIC SOFT SIGN
-	{0xA69E, 0xA69F, prN},     // Mn     [2] COMBINING CYRILLIC LETTER EF..COMBINING CYRILLIC LETTER IOTIFIED E
-	{0xA6A0, 0xA6E5, prN},     // Lo    [70] BAMUM LETTER A..BAMUM LETTER KI
-	{0xA6E6, 0xA6EF, prN},     // Nl    [10] BAMUM LETTER MO..BAMUM LETTER KOGHOM
-	{0xA6F0, 0xA6F1, prN},     // Mn     [2] BAMUM COMBINING MARK KOQNDON..BAMUM COMBINING MARK TUKWENTIS
-	{0xA6F2, 0xA6F7, prN},     // Po     [6] BAMUM NJAEMLI..BAMUM QUESTION MARK
-	{0xA700, 0xA716, prN},     // Sk    [23] MODIFIER LETTER CHINESE TONE YIN PING..MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR
-	{0xA717, 0xA71F, prN},     // Lm     [9] MODIFIER LETTER DOT VERTICAL BAR..MODIFIER LETTER LOW INVERTED EXCLAMATION MARK
-	{0xA720, 0xA721, prN},     // Sk     [2] MODIFIER LETTER STRESS AND HIGH TONE..MODIFIER LETTER STRESS AND LOW TONE
-	{0xA722, 0xA76F, prN},     // L&    [78] LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF..LATIN SMALL LETTER CON
-	{0xA770, 0xA770, prN},     // Lm         MODIFIER LETTER US
-	{0xA771, 0xA787, prN},     // L&    [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER INSULAR T
-	{0xA788, 0xA788, prN},     // Lm         MODIFIER LETTER LOW CIRCUMFLEX ACCENT
-	{0xA789, 0xA78A, prN},     // Sk     [2] MODIFIER LETTER COLON..MODIFIER LETTER SHORT EQUALS SIGN
-	{0xA78B, 0xA78E, prN},     // L&     [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT
-	{0xA78F, 0xA78F, prN},     // Lo         LATIN LETTER SINOLOGICAL DOT
-	{0xA790, 0xA7CA, prN},     // L&    [59] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY
-	{0xA7D0, 0xA7D1, prN},     // L&     [2] LATIN CAPITAL LETTER CLOSED INSULAR G..LATIN SMALL LETTER CLOSED INSULAR G
-	{0xA7D3, 0xA7D3, prN},     // Ll         LATIN SMALL LETTER DOUBLE THORN
-	{0xA7D5, 0xA7D9, prN},     // L&     [5] LATIN SMALL LETTER DOUBLE WYNN..LATIN SMALL LETTER SIGMOID S
-	{0xA7F2, 0xA7F4, prN},     // Lm     [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q
-	{0xA7F5, 0xA7F6, prN},     // L&     [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H
-	{0xA7F7, 0xA7F7, prN},     // Lo         LATIN EPIGRAPHIC LETTER SIDEWAYS I
-	{0xA7F8, 0xA7F9, prN},     // Lm     [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE
-	{0xA7FA, 0xA7FA, prN},     // Ll         LATIN LETTER SMALL CAPITAL TURNED M
-	{0xA7FB, 0xA7FF, prN},     // Lo     [5] LATIN EPIGRAPHIC LETTER REVERSED F..LATIN EPIGRAPHIC LETTER ARCHAIC M
-	{0xA800, 0xA801, prN},     // Lo     [2] SYLOTI NAGRI LETTER A..SYLOTI NAGRI LETTER I
-	{0xA802, 0xA802, prN},     // Mn         SYLOTI NAGRI SIGN DVISVARA
-	{0xA803, 0xA805, prN},     // Lo     [3] SYLOTI NAGRI LETTER U..SYLOTI NAGRI LETTER O
-	{0xA806, 0xA806, prN},     // Mn         SYLOTI NAGRI SIGN HASANTA
-	{0xA807, 0xA80A, prN},     // Lo     [4] SYLOTI NAGRI LETTER KO..SYLOTI NAGRI LETTER GHO
-	{0xA80B, 0xA80B, prN},     // Mn         SYLOTI NAGRI SIGN ANUSVARA
-	{0xA80C, 0xA822, prN},     // Lo    [23] SYLOTI NAGRI LETTER CO..SYLOTI NAGRI LETTER HO
-	{0xA823, 0xA824, prN},     // Mc     [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN I
-	{0xA825, 0xA826, prN},     // Mn     [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E
-	{0xA827, 0xA827, prN},     // Mc         SYLOTI NAGRI VOWEL SIGN OO
-	{0xA828, 0xA82B, prN},     // So     [4] SYLOTI NAGRI POETRY MARK-1..SYLOTI NAGRI POETRY MARK-4
-	{0xA82C, 0xA82C, prN},     // Mn         SYLOTI NAGRI SIGN ALTERNATE HASANTA
-	{0xA830, 0xA835, prN},     // No     [6] NORTH INDIC FRACTION ONE QUARTER..NORTH INDIC FRACTION THREE SIXTEENTHS
-	{0xA836, 0xA837, prN},     // So     [2] NORTH INDIC QUARTER MARK..NORTH INDIC PLACEHOLDER MARK
-	{0xA838, 0xA838, prN},     // Sc         NORTH INDIC RUPEE MARK
-	{0xA839, 0xA839, prN},     // So         NORTH INDIC QUANTITY MARK
-	{0xA840, 0xA873, prN},     // Lo    [52] PHAGS-PA LETTER KA..PHAGS-PA LETTER CANDRABINDU
-	{0xA874, 0xA877, prN},     // Po     [4] PHAGS-PA SINGLE HEAD MARK..PHAGS-PA MARK DOUBLE SHAD
-	{0xA880, 0xA881, prN},     // Mc     [2] SAURASHTRA SIGN ANUSVARA..SAURASHTRA SIGN VISARGA
-	{0xA882, 0xA8B3, prN},     // Lo    [50] SAURASHTRA LETTER A..SAURASHTRA LETTER LLA
-	{0xA8B4, 0xA8C3, prN},     // Mc    [16] SAURASHTRA CONSONANT SIGN HAARU..SAURASHTRA VOWEL SIGN AU
-	{0xA8C4, 0xA8C5, prN},     // Mn     [2] SAURASHTRA SIGN VIRAMA..SAURASHTRA SIGN CANDRABINDU
-	{0xA8CE, 0xA8CF, prN},     // Po     [2] SAURASHTRA DANDA..SAURASHTRA DOUBLE DANDA
-	{0xA8D0, 0xA8D9, prN},     // Nd    [10] SAURASHTRA DIGIT ZERO..SAURASHTRA DIGIT NINE
-	{0xA8E0, 0xA8F1, prN},     // Mn    [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA
-	{0xA8F2, 0xA8F7, prN},     // Lo     [6] DEVANAGARI SIGN SPACING CANDRABINDU..DEVANAGARI SIGN CANDRABINDU AVAGRAHA
-	{0xA8F8, 0xA8FA, prN},     // Po     [3] DEVANAGARI SIGN PUSHPIKA..DEVANAGARI CARET
-	{0xA8FB, 0xA8FB, prN},     // Lo         DEVANAGARI HEADSTROKE
-	{0xA8FC, 0xA8FC, prN},     // Po         DEVANAGARI SIGN SIDDHAM
-	{0xA8FD, 0xA8FE, prN},     // Lo     [2] DEVANAGARI JAIN OM..DEVANAGARI LETTER AY
-	{0xA8FF, 0xA8FF, prN},     // Mn         DEVANAGARI VOWEL SIGN AY
-	{0xA900, 0xA909, prN},     // Nd    [10] KAYAH LI DIGIT ZERO..KAYAH LI DIGIT NINE
-	{0xA90A, 0xA925, prN},     // Lo    [28] KAYAH LI LETTER KA..KAYAH LI LETTER OO
-	{0xA926, 0xA92D, prN},     // Mn     [8] KAYAH LI VOWEL UE..KAYAH LI TONE CALYA PLOPHU
-	{0xA92E, 0xA92F, prN},     // Po     [2] KAYAH LI SIGN CWI..KAYAH LI SIGN SHYA
-	{0xA930, 0xA946, prN},     // Lo    [23] REJANG LETTER KA..REJANG LETTER A
-	{0xA947, 0xA951, prN},     // Mn    [11] REJANG VOWEL SIGN I..REJANG CONSONANT SIGN R
-	{0xA952, 0xA953, prN},     // Mc     [2] REJANG CONSONANT SIGN H..REJANG VIRAMA
-	{0xA95F, 0xA95F, prN},     // Po         REJANG SECTION MARK
-	{0xA960, 0xA97C, prW},     // Lo    [29] HANGUL CHOSEONG TIKEUT-MIEUM..HANGUL CHOSEONG SSANGYEORINHIEUH
-	{0xA980, 0xA982, prN},     // Mn     [3] JAVANESE SIGN PANYANGGA..JAVANESE SIGN LAYAR
-	{0xA983, 0xA983, prN},     // Mc         JAVANESE SIGN WIGNYAN
-	{0xA984, 0xA9B2, prN},     // Lo    [47] JAVANESE LETTER A..JAVANESE LETTER HA
-	{0xA9B3, 0xA9B3, prN},     // Mn         JAVANESE SIGN CECAK TELU
-	{0xA9B4, 0xA9B5, prN},     // Mc     [2] JAVANESE VOWEL SIGN TARUNG..JAVANESE VOWEL SIGN TOLONG
-	{0xA9B6, 0xA9B9, prN},     // Mn     [4] JAVANESE VOWEL SIGN WULU..JAVANESE VOWEL SIGN SUKU MENDUT
-	{0xA9BA, 0xA9BB, prN},     // Mc     [2] JAVANESE VOWEL SIGN TALING..JAVANESE VOWEL SIGN DIRGA MURE
-	{0xA9BC, 0xA9BD, prN},     // Mn     [2] JAVANESE VOWEL SIGN PEPET..JAVANESE CONSONANT SIGN KERET
-	{0xA9BE, 0xA9C0, prN},     // Mc     [3] JAVANESE CONSONANT SIGN PENGKAL..JAVANESE PANGKON
-	{0xA9C1, 0xA9CD, prN},     // Po    [13] JAVANESE LEFT RERENGGAN..JAVANESE TURNED PADA PISELEH
-	{0xA9CF, 0xA9CF, prN},     // Lm         JAVANESE PANGRANGKEP
-	{0xA9D0, 0xA9D9, prN},     // Nd    [10] JAVANESE DIGIT ZERO..JAVANESE DIGIT NINE
-	{0xA9DE, 0xA9DF, prN},     // Po     [2] JAVANESE PADA TIRTA TUMETES..JAVANESE PADA ISEN-ISEN
-	{0xA9E0, 0xA9E4, prN},     // Lo     [5] MYANMAR LETTER SHAN GHA..MYANMAR LETTER SHAN BHA
-	{0xA9E5, 0xA9E5, prN},     // Mn         MYANMAR SIGN SHAN SAW
-	{0xA9E6, 0xA9E6, prN},     // Lm         MYANMAR MODIFIER LETTER SHAN REDUPLICATION
-	{0xA9E7, 0xA9EF, prN},     // Lo     [9] MYANMAR LETTER TAI LAING NYA..MYANMAR LETTER TAI LAING NNA
-	{0xA9F0, 0xA9F9, prN},     // Nd    [10] MYANMAR TAI LAING DIGIT ZERO..MYANMAR TAI LAING DIGIT NINE
-	{0xA9FA, 0xA9FE, prN},     // Lo     [5] MYANMAR LETTER TAI LAING LLA..MYANMAR LETTER TAI LAING BHA
-	{0xAA00, 0xAA28, prN},     // Lo    [41] CHAM LETTER A..CHAM LETTER HA
-	{0xAA29, 0xAA2E, prN},     // Mn     [6] CHAM VOWEL SIGN AA..CHAM VOWEL SIGN OE
-	{0xAA2F, 0xAA30, prN},     // Mc     [2] CHAM VOWEL SIGN O..CHAM VOWEL SIGN AI
-	{0xAA31, 0xAA32, prN},     // Mn     [2] CHAM VOWEL SIGN AU..CHAM VOWEL SIGN UE
-	{0xAA33, 0xAA34, prN},     // Mc     [2] CHAM CONSONANT SIGN YA..CHAM CONSONANT SIGN RA
-	{0xAA35, 0xAA36, prN},     // Mn     [2] CHAM CONSONANT SIGN LA..CHAM CONSONANT SIGN WA
-	{0xAA40, 0xAA42, prN},     // Lo     [3] CHAM LETTER FINAL K..CHAM LETTER FINAL NG
-	{0xAA43, 0xAA43, prN},     // Mn         CHAM CONSONANT SIGN FINAL NG
-	{0xAA44, 0xAA4B, prN},     // Lo     [8] CHAM LETTER FINAL CH..CHAM LETTER FINAL SS
-	{0xAA4C, 0xAA4C, prN},     // Mn         CHAM CONSONANT SIGN FINAL M
-	{0xAA4D, 0xAA4D, prN},     // Mc         CHAM CONSONANT SIGN FINAL H
-	{0xAA50, 0xAA59, prN},     // Nd    [10] CHAM DIGIT ZERO..CHAM DIGIT NINE
-	{0xAA5C, 0xAA5F, prN},     // Po     [4] CHAM PUNCTUATION SPIRAL..CHAM PUNCTUATION TRIPLE DANDA
-	{0xAA60, 0xAA6F, prN},     // Lo    [16] MYANMAR LETTER KHAMTI GA..MYANMAR LETTER KHAMTI FA
-	{0xAA70, 0xAA70, prN},     // Lm         MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION
-	{0xAA71, 0xAA76, prN},     // Lo     [6] MYANMAR LETTER KHAMTI XA..MYANMAR LOGOGRAM KHAMTI HM
-	{0xAA77, 0xAA79, prN},     // So     [3] MYANMAR SYMBOL AITON EXCLAMATION..MYANMAR SYMBOL AITON TWO
-	{0xAA7A, 0xAA7A, prN},     // Lo         MYANMAR LETTER AITON RA
-	{0xAA7B, 0xAA7B, prN},     // Mc         MYANMAR SIGN PAO KAREN TONE
-	{0xAA7C, 0xAA7C, prN},     // Mn         MYANMAR SIGN TAI LAING TONE-2
-	{0xAA7D, 0xAA7D, prN},     // Mc         MYANMAR SIGN TAI LAING TONE-5
-	{0xAA7E, 0xAA7F, prN},     // Lo     [2] MYANMAR LETTER SHWE PALAUNG CHA..MYANMAR LETTER SHWE PALAUNG SHA
-	{0xAA80, 0xAAAF, prN},     // Lo    [48] TAI VIET LETTER LOW KO..TAI VIET LETTER HIGH O
-	{0xAAB0, 0xAAB0, prN},     // Mn         TAI VIET MAI KANG
-	{0xAAB1, 0xAAB1, prN},     // Lo         TAI VIET VOWEL AA
-	{0xAAB2, 0xAAB4, prN},     // Mn     [3] TAI VIET VOWEL I..TAI VIET VOWEL U
-	{0xAAB5, 0xAAB6, prN},     // Lo     [2] TAI VIET VOWEL E..TAI VIET VOWEL O
-	{0xAAB7, 0xAAB8, prN},     // Mn     [2] TAI VIET MAI KHIT..TAI VIET VOWEL IA
-	{0xAAB9, 0xAABD, prN},     // Lo     [5] TAI VIET VOWEL UEA..TAI VIET VOWEL AN
-	{0xAABE, 0xAABF, prN},     // Mn     [2] TAI VIET VOWEL AM..TAI VIET TONE MAI EK
-	{0xAAC0, 0xAAC0, prN},     // Lo         TAI VIET TONE MAI NUENG
-	{0xAAC1, 0xAAC1, prN},     // Mn         TAI VIET TONE MAI THO
-	{0xAAC2, 0xAAC2, prN},     // Lo         TAI VIET TONE MAI SONG
-	{0xAADB, 0xAADC, prN},     // Lo     [2] TAI VIET SYMBOL KON..TAI VIET SYMBOL NUENG
-	{0xAADD, 0xAADD, prN},     // Lm         TAI VIET SYMBOL SAM
-	{0xAADE, 0xAADF, prN},     // Po     [2] TAI VIET SYMBOL HO HOI..TAI VIET SYMBOL KOI KOI
-	{0xAAE0, 0xAAEA, prN},     // Lo    [11] MEETEI MAYEK LETTER E..MEETEI MAYEK LETTER SSA
-	{0xAAEB, 0xAAEB, prN},     // Mc         MEETEI MAYEK VOWEL SIGN II
-	{0xAAEC, 0xAAED, prN},     // Mn     [2] MEETEI MAYEK VOWEL SIGN UU..MEETEI MAYEK VOWEL SIGN AAI
-	{0xAAEE, 0xAAEF, prN},     // Mc     [2] MEETEI MAYEK VOWEL SIGN AU..MEETEI MAYEK VOWEL SIGN AAU
-	{0xAAF0, 0xAAF1, prN},     // Po     [2] MEETEI MAYEK CHEIKHAN..MEETEI MAYEK AHANG KHUDAM
-	{0xAAF2, 0xAAF2, prN},     // Lo         MEETEI MAYEK ANJI
-	{0xAAF3, 0xAAF4, prN},     // Lm     [2] MEETEI MAYEK SYLLABLE REPETITION MARK..MEETEI MAYEK WORD REPETITION MARK
-	{0xAAF5, 0xAAF5, prN},     // Mc         MEETEI MAYEK VOWEL SIGN VISARGA
-	{0xAAF6, 0xAAF6, prN},     // Mn         MEETEI MAYEK VIRAMA
-	{0xAB01, 0xAB06, prN},     // Lo     [6] ETHIOPIC SYLLABLE TTHU..ETHIOPIC SYLLABLE TTHO
-	{0xAB09, 0xAB0E, prN},     // Lo     [6] ETHIOPIC SYLLABLE DDHU..ETHIOPIC SYLLABLE DDHO
-	{0xAB11, 0xAB16, prN},     // Lo     [6] ETHIOPIC SYLLABLE DZU..ETHIOPIC SYLLABLE DZO
-	{0xAB20, 0xAB26, prN},     // Lo     [7] ETHIOPIC SYLLABLE CCHHA..ETHIOPIC SYLLABLE CCHHO
-	{0xAB28, 0xAB2E, prN},     // Lo     [7] ETHIOPIC SYLLABLE BBA..ETHIOPIC SYLLABLE BBO
-	{0xAB30, 0xAB5A, prN},     // Ll    [43] LATIN SMALL LETTER BARRED ALPHA..LATIN SMALL LETTER Y WITH SHORT RIGHT LEG
-	{0xAB5B, 0xAB5B, prN},     // Sk         MODIFIER BREVE WITH INVERTED BREVE
-	{0xAB5C, 0xAB5F, prN},     // Lm     [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK
-	{0xAB60, 0xAB68, prN},     // Ll     [9] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE
-	{0xAB69, 0xAB69, prN},     // Lm         MODIFIER LETTER SMALL TURNED W
-	{0xAB6A, 0xAB6B, prN},     // Sk     [2] MODIFIER LETTER LEFT TACK..MODIFIER LETTER RIGHT TACK
-	{0xAB70, 0xABBF, prN},     // Ll    [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA
-	{0xABC0, 0xABE2, prN},     // Lo    [35] MEETEI MAYEK LETTER KOK..MEETEI MAYEK LETTER I LONSUM
-	{0xABE3, 0xABE4, prN},     // Mc     [2] MEETEI MAYEK VOWEL SIGN ONAP..MEETEI MAYEK VOWEL SIGN INAP
-	{0xABE5, 0xABE5, prN},     // Mn         MEETEI MAYEK VOWEL SIGN ANAP
-	{0xABE6, 0xABE7, prN},     // Mc     [2] MEETEI MAYEK VOWEL SIGN YENAP..MEETEI MAYEK VOWEL SIGN SOUNAP
-	{0xABE8, 0xABE8, prN},     // Mn         MEETEI MAYEK VOWEL SIGN UNAP
-	{0xABE9, 0xABEA, prN},     // Mc     [2] MEETEI MAYEK VOWEL SIGN CHEINAP..MEETEI MAYEK VOWEL SIGN NUNG
-	{0xABEB, 0xABEB, prN},     // Po         MEETEI MAYEK CHEIKHEI
-	{0xABEC, 0xABEC, prN},     // Mc         MEETEI MAYEK LUM IYEK
-	{0xABED, 0xABED, prN},     // Mn         MEETEI MAYEK APUN IYEK
-	{0xABF0, 0xABF9, prN},     // Nd    [10] MEETEI MAYEK DIGIT ZERO..MEETEI MAYEK DIGIT NINE
-	{0xAC00, 0xD7A3, prW},     // Lo [11172] HANGUL SYLLABLE GA..HANGUL SYLLABLE HIH
-	{0xD7B0, 0xD7C6, prN},     // Lo    [23] HANGUL JUNGSEONG O-YEO..HANGUL JUNGSEONG ARAEA-E
-	{0xD7CB, 0xD7FB, prN},     // Lo    [49] HANGUL JONGSEONG NIEUN-RIEUL..HANGUL JONGSEONG PHIEUPH-THIEUTH
-	{0xD800, 0xDB7F, prN},     // Cs   [896] <surrogate-D800>..<surrogate-DB7F>
-	{0xDB80, 0xDBFF, prN},     // Cs   [128] <surrogate-DB80>..<surrogate-DBFF>
-	{0xDC00, 0xDFFF, prN},     // Cs  [1024] <surrogate-DC00>..<surrogate-DFFF>
-	{0xE000, 0xF8FF, prA},     // Co  [6400] <private-use-E000>..<private-use-F8FF>
-	{0xF900, 0xFA6D, prW},     // Lo   [366] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA6D
-	{0xFA6E, 0xFA6F, prW},     // Cn     [2] <reserved-FA6E>..<reserved-FA6F>
-	{0xFA70, 0xFAD9, prW},     // Lo   [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9
-	{0xFADA, 0xFAFF, prW},     // Cn    [38] <reserved-FADA>..<reserved-FAFF>
-	{0xFB00, 0xFB06, prN},     // Ll     [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST
-	{0xFB13, 0xFB17, prN},     // Ll     [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH
-	{0xFB1D, 0xFB1D, prN},     // Lo         HEBREW LETTER YOD WITH HIRIQ
-	{0xFB1E, 0xFB1E, prN},     // Mn         HEBREW POINT JUDEO-SPANISH VARIKA
-	{0xFB1F, 0xFB28, prN},     // Lo    [10] HEBREW LIGATURE YIDDISH YOD YOD PATAH..HEBREW LETTER WIDE TAV
-	{0xFB29, 0xFB29, prN},     // Sm         HEBREW LETTER ALTERNATIVE PLUS SIGN
-	{0xFB2A, 0xFB36, prN},     // Lo    [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH
-	{0xFB38, 0xFB3C, prN},     // Lo     [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH
-	{0xFB3E, 0xFB3E, prN},     // Lo         HEBREW LETTER MEM WITH DAGESH
-	{0xFB40, 0xFB41, prN},     // Lo     [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH
-	{0xFB43, 0xFB44, prN},     // Lo     [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH
-	{0xFB46, 0xFB4F, prN},     // Lo    [10] HEBREW LETTER TSADI WITH DAGESH..HEBREW LIGATURE ALEF LAMED
-	{0xFB50, 0xFBB1, prN},     // Lo    [98] ARABIC LETTER ALEF WASLA ISOLATED FORM..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM
-	{0xFBB2, 0xFBC2, prN},     // Sk    [17] ARABIC SYMBOL DOT ABOVE..ARABIC SYMBOL WASLA ABOVE
-	{0xFBD3, 0xFD3D, prN},     // Lo   [363] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM
-	{0xFD3E, 0xFD3E, prN},     // Pe         ORNATE LEFT PARENTHESIS
-	{0xFD3F, 0xFD3F, prN},     // Ps         ORNATE RIGHT PARENTHESIS
-	{0xFD40, 0xFD4F, prN},     // So    [16] ARABIC LIGATURE RAHIMAHU ALLAAH..ARABIC LIGATURE RAHIMAHUM ALLAAH
-	{0xFD50, 0xFD8F, prN},     // Lo    [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM
-	{0xFD92, 0xFDC7, prN},     // Lo    [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM
-	{0xFDCF, 0xFDCF, prN},     // So         ARABIC LIGATURE SALAAMUHU ALAYNAA
-	{0xFDF0, 0xFDFB, prN},     // Lo    [12] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE JALLAJALALOUHOU
-	{0xFDFC, 0xFDFC, prN},     // Sc         RIAL SIGN
-	{0xFDFD, 0xFDFF, prN},     // So     [3] ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM..ARABIC LIGATURE AZZA WA JALL
-	{0xFE00, 0xFE0F, prA},     // Mn    [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16
-	{0xFE10, 0xFE16, prW},     // Po     [7] PRESENTATION FORM FOR VERTICAL COMMA..PRESENTATION FORM FOR VERTICAL QUESTION MARK
-	{0xFE17, 0xFE17, prW},     // Ps         PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET
-	{0xFE18, 0xFE18, prW},     // Pe         PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET
-	{0xFE19, 0xFE19, prW},     // Po         PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS
-	{0xFE20, 0xFE2F, prN},     // Mn    [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC TITLO RIGHT HALF
-	{0xFE30, 0xFE30, prW},     // Po         PRESENTATION FORM FOR VERTICAL TWO DOT LEADER
-	{0xFE31, 0xFE32, prW},     // Pd     [2] PRESENTATION FORM FOR VERTICAL EM DASH..PRESENTATION FORM FOR VERTICAL EN DASH
-	{0xFE33, 0xFE34, prW},     // Pc     [2] PRESENTATION FORM FOR VERTICAL LOW LINE..PRESENTATION FORM FOR VERTICAL WAVY LOW LINE
-	{0xFE35, 0xFE35, prW},     // Ps         PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS
-	{0xFE36, 0xFE36, prW},     // Pe         PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS
-	{0xFE37, 0xFE37, prW},     // Ps         PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET
-	{0xFE38, 0xFE38, prW},     // Pe         PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET
-	{0xFE39, 0xFE39, prW},     // Ps         PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET
-	{0xFE3A, 0xFE3A, prW},     // Pe         PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET
-	{0xFE3B, 0xFE3B, prW},     // Ps         PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET
-	{0xFE3C, 0xFE3C, prW},     // Pe         PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET
-	{0xFE3D, 0xFE3D, prW},     // Ps         PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET
-	{0xFE3E, 0xFE3E, prW},     // Pe         PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET
-	{0xFE3F, 0xFE3F, prW},     // Ps         PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET
-	{0xFE40, 0xFE40, prW},     // Pe         PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET
-	{0xFE41, 0xFE41, prW},     // Ps         PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET
-	{0xFE42, 0xFE42, prW},     // Pe         PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET
-	{0xFE43, 0xFE43, prW},     // Ps         PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET
-	{0xFE44, 0xFE44, prW},     // Pe         PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET
-	{0xFE45, 0xFE46, prW},     // Po     [2] SESAME DOT..WHITE SESAME DOT
-	{0xFE47, 0xFE47, prW},     // Ps         PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET
-	{0xFE48, 0xFE48, prW},     // Pe         PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET
-	{0xFE49, 0xFE4C, prW},     // Po     [4] DASHED OVERLINE..DOUBLE WAVY OVERLINE
-	{0xFE4D, 0xFE4F, prW},     // Pc     [3] DASHED LOW LINE..WAVY LOW LINE
-	{0xFE50, 0xFE52, prW},     // Po     [3] SMALL COMMA..SMALL FULL STOP
-	{0xFE54, 0xFE57, prW},     // Po     [4] SMALL SEMICOLON..SMALL EXCLAMATION MARK
-	{0xFE58, 0xFE58, prW},     // Pd         SMALL EM DASH
-	{0xFE59, 0xFE59, prW},     // Ps         SMALL LEFT PARENTHESIS
-	{0xFE5A, 0xFE5A, prW},     // Pe         SMALL RIGHT PARENTHESIS
-	{0xFE5B, 0xFE5B, prW},     // Ps         SMALL LEFT CURLY BRACKET
-	{0xFE5C, 0xFE5C, prW},     // Pe         SMALL RIGHT CURLY BRACKET
-	{0xFE5D, 0xFE5D, prW},     // Ps         SMALL LEFT TORTOISE SHELL BRACKET
-	{0xFE5E, 0xFE5E, prW},     // Pe         SMALL RIGHT TORTOISE SHELL BRACKET
-	{0xFE5F, 0xFE61, prW},     // Po     [3] SMALL NUMBER SIGN..SMALL ASTERISK
-	{0xFE62, 0xFE62, prW},     // Sm         SMALL PLUS SIGN
-	{0xFE63, 0xFE63, prW},     // Pd         SMALL HYPHEN-MINUS
-	{0xFE64, 0xFE66, prW},     // Sm     [3] SMALL LESS-THAN SIGN..SMALL EQUALS SIGN
-	{0xFE68, 0xFE68, prW},     // Po         SMALL REVERSE SOLIDUS
-	{0xFE69, 0xFE69, prW},     // Sc         SMALL DOLLAR SIGN
-	{0xFE6A, 0xFE6B, prW},     // Po     [2] SMALL PERCENT SIGN..SMALL COMMERCIAL AT
-	{0xFE70, 0xFE74, prN},     // Lo     [5] ARABIC FATHATAN ISOLATED FORM..ARABIC KASRATAN ISOLATED FORM
-	{0xFE76, 0xFEFC, prN},     // Lo   [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM
-	{0xFEFF, 0xFEFF, prN},     // Cf         ZERO WIDTH NO-BREAK SPACE
-	{0xFF01, 0xFF03, prF},     // Po     [3] FULLWIDTH EXCLAMATION MARK..FULLWIDTH NUMBER SIGN
-	{0xFF04, 0xFF04, prF},     // Sc         FULLWIDTH DOLLAR SIGN
-	{0xFF05, 0xFF07, prF},     // Po     [3] FULLWIDTH PERCENT SIGN..FULLWIDTH APOSTROPHE
-	{0xFF08, 0xFF08, prF},     // Ps         FULLWIDTH LEFT PARENTHESIS
-	{0xFF09, 0xFF09, prF},     // Pe         FULLWIDTH RIGHT PARENTHESIS
-	{0xFF0A, 0xFF0A, prF},     // Po         FULLWIDTH ASTERISK
-	{0xFF0B, 0xFF0B, prF},     // Sm         FULLWIDTH PLUS SIGN
-	{0xFF0C, 0xFF0C, prF},     // Po         FULLWIDTH COMMA
-	{0xFF0D, 0xFF0D, prF},     // Pd         FULLWIDTH HYPHEN-MINUS
-	{0xFF0E, 0xFF0F, prF},     // Po     [2] FULLWIDTH FULL STOP..FULLWIDTH SOLIDUS
-	{0xFF10, 0xFF19, prF},     // Nd    [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE
-	{0xFF1A, 0xFF1B, prF},     // Po     [2] FULLWIDTH COLON..FULLWIDTH SEMICOLON
-	{0xFF1C, 0xFF1E, prF},     // Sm     [3] FULLWIDTH LESS-THAN SIGN..FULLWIDTH GREATER-THAN SIGN
-	{0xFF1F, 0xFF20, prF},     // Po     [2] FULLWIDTH QUESTION MARK..FULLWIDTH COMMERCIAL AT
-	{0xFF21, 0xFF3A, prF},     // Lu    [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z
-	{0xFF3B, 0xFF3B, prF},     // Ps         FULLWIDTH LEFT SQUARE BRACKET
-	{0xFF3C, 0xFF3C, prF},     // Po         FULLWIDTH REVERSE SOLIDUS
-	{0xFF3D, 0xFF3D, prF},     // Pe         FULLWIDTH RIGHT SQUARE BRACKET
-	{0xFF3E, 0xFF3E, prF},     // Sk         FULLWIDTH CIRCUMFLEX ACCENT
-	{0xFF3F, 0xFF3F, prF},     // Pc         FULLWIDTH LOW LINE
-	{0xFF40, 0xFF40, prF},     // Sk         FULLWIDTH GRAVE ACCENT
-	{0xFF41, 0xFF5A, prF},     // Ll    [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z
-	{0xFF5B, 0xFF5B, prF},     // Ps         FULLWIDTH LEFT CURLY BRACKET
-	{0xFF5C, 0xFF5C, prF},     // Sm         FULLWIDTH VERTICAL LINE
-	{0xFF5D, 0xFF5D, prF},     // Pe         FULLWIDTH RIGHT CURLY BRACKET
-	{0xFF5E, 0xFF5E, prF},     // Sm         FULLWIDTH TILDE
-	{0xFF5F, 0xFF5F, prF},     // Ps         FULLWIDTH LEFT WHITE PARENTHESIS
-	{0xFF60, 0xFF60, prF},     // Pe         FULLWIDTH RIGHT WHITE PARENTHESIS
-	{0xFF61, 0xFF61, prH},     // Po         HALFWIDTH IDEOGRAPHIC FULL STOP
-	{0xFF62, 0xFF62, prH},     // Ps         HALFWIDTH LEFT CORNER BRACKET
-	{0xFF63, 0xFF63, prH},     // Pe         HALFWIDTH RIGHT CORNER BRACKET
-	{0xFF64, 0xFF65, prH},     // Po     [2] HALFWIDTH IDEOGRAPHIC COMMA..HALFWIDTH KATAKANA MIDDLE DOT
-	{0xFF66, 0xFF6F, prH},     // Lo    [10] HALFWIDTH KATAKANA LETTER WO..HALFWIDTH KATAKANA LETTER SMALL TU
-	{0xFF70, 0xFF70, prH},     // Lm         HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK
-	{0xFF71, 0xFF9D, prH},     // Lo    [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAKANA LETTER N
-	{0xFF9E, 0xFF9F, prH},     // Lm     [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
-	{0xFFA0, 0xFFBE, prH},     // Lo    [31] HALFWIDTH HANGUL FILLER..HALFWIDTH HANGUL LETTER HIEUH
-	{0xFFC2, 0xFFC7, prH},     // Lo     [6] HALFWIDTH HANGUL LETTER A..HALFWIDTH HANGUL LETTER E
-	{0xFFCA, 0xFFCF, prH},     // Lo     [6] HALFWIDTH HANGUL LETTER YEO..HALFWIDTH HANGUL LETTER OE
-	{0xFFD2, 0xFFD7, prH},     // Lo     [6] HALFWIDTH HANGUL LETTER YO..HALFWIDTH HANGUL LETTER YU
-	{0xFFDA, 0xFFDC, prH},     // Lo     [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I
-	{0xFFE0, 0xFFE1, prF},     // Sc     [2] FULLWIDTH CENT SIGN..FULLWIDTH POUND SIGN
-	{0xFFE2, 0xFFE2, prF},     // Sm         FULLWIDTH NOT SIGN
-	{0xFFE3, 0xFFE3, prF},     // Sk         FULLWIDTH MACRON
-	{0xFFE4, 0xFFE4, prF},     // So         FULLWIDTH BROKEN BAR
-	{0xFFE5, 0xFFE6, prF},     // Sc     [2] FULLWIDTH YEN SIGN..FULLWIDTH WON SIGN
-	{0xFFE8, 0xFFE8, prH},     // So         HALFWIDTH FORMS LIGHT VERTICAL
-	{0xFFE9, 0xFFEC, prH},     // Sm     [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS ARROW
-	{0xFFED, 0xFFEE, prH},     // So     [2] HALFWIDTH BLACK SQUARE..HALFWIDTH WHITE CIRCLE
-	{0xFFF9, 0xFFFB, prN},     // Cf     [3] INTERLINEAR ANNOTATION ANCHOR..INTERLINEAR ANNOTATION TERMINATOR
-	{0xFFFC, 0xFFFC, prN},     // So         OBJECT REPLACEMENT CHARACTER
-	{0xFFFD, 0xFFFD, prA},     // So         REPLACEMENT CHARACTER
-	{0x10000, 0x1000B, prN},   // Lo    [12] LINEAR B SYLLABLE B008 A..LINEAR B SYLLABLE B046 JE
-	{0x1000D, 0x10026, prN},   // Lo    [26] LINEAR B SYLLABLE B036 JO..LINEAR B SYLLABLE B032 QO
-	{0x10028, 0x1003A, prN},   // Lo    [19] LINEAR B SYLLABLE B060 RA..LINEAR B SYLLABLE B042 WO
-	{0x1003C, 0x1003D, prN},   // Lo     [2] LINEAR B SYLLABLE B017 ZA..LINEAR B SYLLABLE B074 ZE
-	{0x1003F, 0x1004D, prN},   // Lo    [15] LINEAR B SYLLABLE B020 ZO..LINEAR B SYLLABLE B091 TWO
-	{0x10050, 0x1005D, prN},   // Lo    [14] LINEAR B SYMBOL B018..LINEAR B SYMBOL B089
-	{0x10080, 0x100FA, prN},   // Lo   [123] LINEAR B IDEOGRAM B100 MAN..LINEAR B IDEOGRAM VESSEL B305
-	{0x10100, 0x10102, prN},   // Po     [3] AEGEAN WORD SEPARATOR LINE..AEGEAN CHECK MARK
-	{0x10107, 0x10133, prN},   // No    [45] AEGEAN NUMBER ONE..AEGEAN NUMBER NINETY THOUSAND
-	{0x10137, 0x1013F, prN},   // So     [9] AEGEAN WEIGHT BASE UNIT..AEGEAN MEASURE THIRD SUBUNIT
-	{0x10140, 0x10174, prN},   // Nl    [53] GREEK ACROPHONIC ATTIC ONE QUARTER..GREEK ACROPHONIC STRATIAN FIFTY MNAS
-	{0x10175, 0x10178, prN},   // No     [4] GREEK ONE HALF SIGN..GREEK THREE QUARTERS SIGN
-	{0x10179, 0x10189, prN},   // So    [17] GREEK YEAR SIGN..GREEK TRYBLION BASE SIGN
-	{0x1018A, 0x1018B, prN},   // No     [2] GREEK ZERO SIGN..GREEK ONE QUARTER SIGN
-	{0x1018C, 0x1018E, prN},   // So     [3] GREEK SINUSOID SIGN..NOMISMA SIGN
-	{0x10190, 0x1019C, prN},   // So    [13] ROMAN SEXTANS SIGN..ASCIA SYMBOL
-	{0x101A0, 0x101A0, prN},   // So         GREEK SYMBOL TAU RHO
-	{0x101D0, 0x101FC, prN},   // So    [45] PHAISTOS DISC SIGN PEDESTRIAN..PHAISTOS DISC SIGN WAVY BAND
-	{0x101FD, 0x101FD, prN},   // Mn         PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE
-	{0x10280, 0x1029C, prN},   // Lo    [29] LYCIAN LETTER A..LYCIAN LETTER X
-	{0x102A0, 0x102D0, prN},   // Lo    [49] CARIAN LETTER A..CARIAN LETTER UUU3
-	{0x102E0, 0x102E0, prN},   // Mn         COPTIC EPACT THOUSANDS MARK
-	{0x102E1, 0x102FB, prN},   // No    [27] COPTIC EPACT DIGIT ONE..COPTIC EPACT NUMBER NINE HUNDRED
-	{0x10300, 0x1031F, prN},   // Lo    [32] OLD ITALIC LETTER A..OLD ITALIC LETTER ESS
-	{0x10320, 0x10323, prN},   // No     [4] OLD ITALIC NUMERAL ONE..OLD ITALIC NUMERAL FIFTY
-	{0x1032D, 0x1032F, prN},   // Lo     [3] OLD ITALIC LETTER YE..OLD ITALIC LETTER SOUTHERN TSE
-	{0x10330, 0x10340, prN},   // Lo    [17] GOTHIC LETTER AHSA..GOTHIC LETTER PAIRTHRA
-	{0x10341, 0x10341, prN},   // Nl         GOTHIC LETTER NINETY
-	{0x10342, 0x10349, prN},   // Lo     [8] GOTHIC LETTER RAIDA..GOTHIC LETTER OTHAL
-	{0x1034A, 0x1034A, prN},   // Nl         GOTHIC LETTER NINE HUNDRED
-	{0x10350, 0x10375, prN},   // Lo    [38] OLD PERMIC LETTER AN..OLD PERMIC LETTER IA
-	{0x10376, 0x1037A, prN},   // Mn     [5] COMBINING OLD PERMIC LETTER AN..COMBINING OLD PERMIC LETTER SII
-	{0x10380, 0x1039D, prN},   // Lo    [30] UGARITIC LETTER ALPA..UGARITIC LETTER SSU
-	{0x1039F, 0x1039F, prN},   // Po         UGARITIC WORD DIVIDER
-	{0x103A0, 0x103C3, prN},   // Lo    [36] OLD PERSIAN SIGN A..OLD PERSIAN SIGN HA
-	{0x103C8, 0x103CF, prN},   // Lo     [8] OLD PERSIAN SIGN AURAMAZDAA..OLD PERSIAN SIGN BUUMISH
-	{0x103D0, 0x103D0, prN},   // Po         OLD PERSIAN WORD DIVIDER
-	{0x103D1, 0x103D5, prN},   // Nl     [5] OLD PERSIAN NUMBER ONE..OLD PERSIAN NUMBER HUNDRED
-	{0x10400, 0x1044F, prN},   // L&    [80] DESERET CAPITAL LETTER LONG I..DESERET SMALL LETTER EW
-	{0x10450, 0x1047F, prN},   // Lo    [48] SHAVIAN LETTER PEEP..SHAVIAN LETTER YEW
-	{0x10480, 0x1049D, prN},   // Lo    [30] OSMANYA LETTER ALEF..OSMANYA LETTER OO
-	{0x104A0, 0x104A9, prN},   // Nd    [10] OSMANYA DIGIT ZERO..OSMANYA DIGIT NINE
-	{0x104B0, 0x104D3, prN},   // Lu    [36] OSAGE CAPITAL LETTER A..OSAGE CAPITAL LETTER ZHA
-	{0x104D8, 0x104FB, prN},   // Ll    [36] OSAGE SMALL LETTER A..OSAGE SMALL LETTER ZHA
-	{0x10500, 0x10527, prN},   // Lo    [40] ELBASAN LETTER A..ELBASAN LETTER KHE
-	{0x10530, 0x10563, prN},   // Lo    [52] CAUCASIAN ALBANIAN LETTER ALT..CAUCASIAN ALBANIAN LETTER KIW
-	{0x1056F, 0x1056F, prN},   // Po         CAUCASIAN ALBANIAN CITATION MARK
-	{0x10570, 0x1057A, prN},   // Lu    [11] VITHKUQI CAPITAL LETTER A..VITHKUQI CAPITAL LETTER GA
-	{0x1057C, 0x1058A, prN},   // Lu    [15] VITHKUQI CAPITAL LETTER HA..VITHKUQI CAPITAL LETTER RE
-	{0x1058C, 0x10592, prN},   // Lu     [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE
-	{0x10594, 0x10595, prN},   // Lu     [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE
-	{0x10597, 0x105A1, prN},   // Ll    [11] VITHKUQI SMALL LETTER A..VITHKUQI SMALL LETTER GA
-	{0x105A3, 0x105B1, prN},   // Ll    [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE
-	{0x105B3, 0x105B9, prN},   // Ll     [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE
-	{0x105BB, 0x105BC, prN},   // Ll     [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE
-	{0x10600, 0x10736, prN},   // Lo   [311] LINEAR A SIGN AB001..LINEAR A SIGN A664
-	{0x10740, 0x10755, prN},   // Lo    [22] LINEAR A SIGN A701 A..LINEAR A SIGN A732 JE
-	{0x10760, 0x10767, prN},   // Lo     [8] LINEAR A SIGN A800..LINEAR A SIGN A807
-	{0x10780, 0x10785, prN},   // Lm     [6] MODIFIER LETTER SMALL CAPITAL AA..MODIFIER LETTER SMALL B WITH HOOK
-	{0x10787, 0x107B0, prN},   // Lm    [42] MODIFIER LETTER SMALL DZ DIGRAPH..MODIFIER LETTER SMALL V WITH RIGHT HOOK
-	{0x107B2, 0x107BA, prN},   // Lm     [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL
-	{0x10800, 0x10805, prN},   // Lo     [6] CYPRIOT SYLLABLE A..CYPRIOT SYLLABLE JA
-	{0x10808, 0x10808, prN},   // Lo         CYPRIOT SYLLABLE JO
-	{0x1080A, 0x10835, prN},   // Lo    [44] CYPRIOT SYLLABLE KA..CYPRIOT SYLLABLE WO
-	{0x10837, 0x10838, prN},   // Lo     [2] CYPRIOT SYLLABLE XA..CYPRIOT SYLLABLE XE
-	{0x1083C, 0x1083C, prN},   // Lo         CYPRIOT SYLLABLE ZA
-	{0x1083F, 0x1083F, prN},   // Lo         CYPRIOT SYLLABLE ZO
-	{0x10840, 0x10855, prN},   // Lo    [22] IMPERIAL ARAMAIC LETTER ALEPH..IMPERIAL ARAMAIC LETTER TAW
-	{0x10857, 0x10857, prN},   // Po         IMPERIAL ARAMAIC SECTION SIGN
-	{0x10858, 0x1085F, prN},   // No     [8] IMPERIAL ARAMAIC NUMBER ONE..IMPERIAL ARAMAIC NUMBER TEN THOUSAND
-	{0x10860, 0x10876, prN},   // Lo    [23] PALMYRENE LETTER ALEPH..PALMYRENE LETTER TAW
-	{0x10877, 0x10878, prN},   // So     [2] PALMYRENE LEFT-POINTING FLEURON..PALMYRENE RIGHT-POINTING FLEURON
-	{0x10879, 0x1087F, prN},   // No     [7] PALMYRENE NUMBER ONE..PALMYRENE NUMBER TWENTY
-	{0x10880, 0x1089E, prN},   // Lo    [31] NABATAEAN LETTER FINAL ALEPH..NABATAEAN LETTER TAW
-	{0x108A7, 0x108AF, prN},   // No     [9] NABATAEAN NUMBER ONE..NABATAEAN NUMBER ONE HUNDRED
-	{0x108E0, 0x108F2, prN},   // Lo    [19] HATRAN LETTER ALEPH..HATRAN LETTER QOPH
-	{0x108F4, 0x108F5, prN},   // Lo     [2] HATRAN LETTER SHIN..HATRAN LETTER TAW
-	{0x108FB, 0x108FF, prN},   // No     [5] HATRAN NUMBER ONE..HATRAN NUMBER ONE HUNDRED
-	{0x10900, 0x10915, prN},   // Lo    [22] PHOENICIAN LETTER ALF..PHOENICIAN LETTER TAU
-	{0x10916, 0x1091B, prN},   // No     [6] PHOENICIAN NUMBER ONE..PHOENICIAN NUMBER THREE
-	{0x1091F, 0x1091F, prN},   // Po         PHOENICIAN WORD SEPARATOR
-	{0x10920, 0x10939, prN},   // Lo    [26] LYDIAN LETTER A..LYDIAN LETTER C
-	{0x1093F, 0x1093F, prN},   // Po         LYDIAN TRIANGULAR MARK
-	{0x10980, 0x1099F, prN},   // Lo    [32] MEROITIC HIEROGLYPHIC LETTER A..MEROITIC HIEROGLYPHIC SYMBOL VIDJ-2
-	{0x109A0, 0x109B7, prN},   // Lo    [24] MEROITIC CURSIVE LETTER A..MEROITIC CURSIVE LETTER DA
-	{0x109BC, 0x109BD, prN},   // No     [2] MEROITIC CURSIVE FRACTION ELEVEN TWELFTHS..MEROITIC CURSIVE FRACTION ONE HALF
-	{0x109BE, 0x109BF, prN},   // Lo     [2] MEROITIC CURSIVE LOGOGRAM RMT..MEROITIC CURSIVE LOGOGRAM IMN
-	{0x109C0, 0x109CF, prN},   // No    [16] MEROITIC CURSIVE NUMBER ONE..MEROITIC CURSIVE NUMBER SEVENTY
-	{0x109D2, 0x109FF, prN},   // No    [46] MEROITIC CURSIVE NUMBER ONE HUNDRED..MEROITIC CURSIVE FRACTION TEN TWELFTHS
-	{0x10A00, 0x10A00, prN},   // Lo         KHAROSHTHI LETTER A
-	{0x10A01, 0x10A03, prN},   // Mn     [3] KHAROSHTHI VOWEL SIGN I..KHAROSHTHI VOWEL SIGN VOCALIC R
-	{0x10A05, 0x10A06, prN},   // Mn     [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O
-	{0x10A0C, 0x10A0F, prN},   // Mn     [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA
-	{0x10A10, 0x10A13, prN},   // Lo     [4] KHAROSHTHI LETTER KA..KHAROSHTHI LETTER GHA
-	{0x10A15, 0x10A17, prN},   // Lo     [3] KHAROSHTHI LETTER CA..KHAROSHTHI LETTER JA
-	{0x10A19, 0x10A35, prN},   // Lo    [29] KHAROSHTHI LETTER NYA..KHAROSHTHI LETTER VHA
-	{0x10A38, 0x10A3A, prN},   // Mn     [3] KHAROSHTHI SIGN BAR ABOVE..KHAROSHTHI SIGN DOT BELOW
-	{0x10A3F, 0x10A3F, prN},   // Mn         KHAROSHTHI VIRAMA
-	{0x10A40, 0x10A48, prN},   // No     [9] KHAROSHTHI DIGIT ONE..KHAROSHTHI FRACTION ONE HALF
-	{0x10A50, 0x10A58, prN},   // Po     [9] KHAROSHTHI PUNCTUATION DOT..KHAROSHTHI PUNCTUATION LINES
-	{0x10A60, 0x10A7C, prN},   // Lo    [29] OLD SOUTH ARABIAN LETTER HE..OLD SOUTH ARABIAN LETTER THETH
-	{0x10A7D, 0x10A7E, prN},   // No     [2] OLD SOUTH ARABIAN NUMBER ONE..OLD SOUTH ARABIAN NUMBER FIFTY
-	{0x10A7F, 0x10A7F, prN},   // Po         OLD SOUTH ARABIAN NUMERIC INDICATOR
-	{0x10A80, 0x10A9C, prN},   // Lo    [29] OLD NORTH ARABIAN LETTER HEH..OLD NORTH ARABIAN LETTER ZAH
-	{0x10A9D, 0x10A9F, prN},   // No     [3] OLD NORTH ARABIAN NUMBER ONE..OLD NORTH ARABIAN NUMBER TWENTY
-	{0x10AC0, 0x10AC7, prN},   // Lo     [8] MANICHAEAN LETTER ALEPH..MANICHAEAN LETTER WAW
-	{0x10AC8, 0x10AC8, prN},   // So         MANICHAEAN SIGN UD
-	{0x10AC9, 0x10AE4, prN},   // Lo    [28] MANICHAEAN LETTER ZAYIN..MANICHAEAN LETTER TAW
-	{0x10AE5, 0x10AE6, prN},   // Mn     [2] MANICHAEAN ABBREVIATION MARK ABOVE..MANICHAEAN ABBREVIATION MARK BELOW
-	{0x10AEB, 0x10AEF, prN},   // No     [5] MANICHAEAN NUMBER ONE..MANICHAEAN NUMBER ONE HUNDRED
-	{0x10AF0, 0x10AF6, prN},   // Po     [7] MANICHAEAN PUNCTUATION STAR..MANICHAEAN PUNCTUATION LINE FILLER
-	{0x10B00, 0x10B35, prN},   // Lo    [54] AVESTAN LETTER A..AVESTAN LETTER HE
-	{0x10B39, 0x10B3F, prN},   // Po     [7] AVESTAN ABBREVIATION MARK..LARGE ONE RING OVER TWO RINGS PUNCTUATION
-	{0x10B40, 0x10B55, prN},   // Lo    [22] INSCRIPTIONAL PARTHIAN LETTER ALEPH..INSCRIPTIONAL PARTHIAN LETTER TAW
-	{0x10B58, 0x10B5F, prN},   // No     [8] INSCRIPTIONAL PARTHIAN NUMBER ONE..INSCRIPTIONAL PARTHIAN NUMBER ONE THOUSAND
-	{0x10B60, 0x10B72, prN},   // Lo    [19] INSCRIPTIONAL PAHLAVI LETTER ALEPH..INSCRIPTIONAL PAHLAVI LETTER TAW
-	{0x10B78, 0x10B7F, prN},   // No     [8] INSCRIPTIONAL PAHLAVI NUMBER ONE..INSCRIPTIONAL PAHLAVI NUMBER ONE THOUSAND
-	{0x10B80, 0x10B91, prN},   // Lo    [18] PSALTER PAHLAVI LETTER ALEPH..PSALTER PAHLAVI LETTER TAW
-	{0x10B99, 0x10B9C, prN},   // Po     [4] PSALTER PAHLAVI SECTION MARK..PSALTER PAHLAVI FOUR DOTS WITH DOT
-	{0x10BA9, 0x10BAF, prN},   // No     [7] PSALTER PAHLAVI NUMBER ONE..PSALTER PAHLAVI NUMBER ONE HUNDRED
-	{0x10C00, 0x10C48, prN},   // Lo    [73] OLD TURKIC LETTER ORKHON A..OLD TURKIC LETTER ORKHON BASH
-	{0x10C80, 0x10CB2, prN},   // Lu    [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US
-	{0x10CC0, 0x10CF2, prN},   // Ll    [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US
-	{0x10CFA, 0x10CFF, prN},   // No     [6] OLD HUNGARIAN NUMBER ONE..OLD HUNGARIAN NUMBER ONE THOUSAND
-	{0x10D00, 0x10D23, prN},   // Lo    [36] HANIFI ROHINGYA LETTER A..HANIFI ROHINGYA MARK NA KHONNA
-	{0x10D24, 0x10D27, prN},   // Mn     [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI
-	{0x10D30, 0x10D39, prN},   // Nd    [10] HANIFI ROHINGYA DIGIT ZERO..HANIFI ROHINGYA DIGIT NINE
-	{0x10E60, 0x10E7E, prN},   // No    [31] RUMI DIGIT ONE..RUMI FRACTION TWO THIRDS
-	{0x10E80, 0x10EA9, prN},   // Lo    [42] YEZIDI LETTER ELIF..YEZIDI LETTER ET
-	{0x10EAB, 0x10EAC, prN},   // Mn     [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK
-	{0x10EAD, 0x10EAD, prN},   // Pd         YEZIDI HYPHENATION MARK
-	{0x10EB0, 0x10EB1, prN},   // Lo     [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE
-	{0x10EFD, 0x10EFF, prN},   // Mn     [3] ARABIC SMALL LOW WORD SAKTA..ARABIC SMALL LOW WORD MADDA
-	{0x10F00, 0x10F1C, prN},   // Lo    [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL
-	{0x10F1D, 0x10F26, prN},   // No    [10] OLD SOGDIAN NUMBER ONE..OLD SOGDIAN FRACTION ONE HALF
-	{0x10F27, 0x10F27, prN},   // Lo         OLD SOGDIAN LIGATURE AYIN-DALETH
-	{0x10F30, 0x10F45, prN},   // Lo    [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN
-	{0x10F46, 0x10F50, prN},   // Mn    [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW
-	{0x10F51, 0x10F54, prN},   // No     [4] SOGDIAN NUMBER ONE..SOGDIAN NUMBER ONE HUNDRED
-	{0x10F55, 0x10F59, prN},   // Po     [5] SOGDIAN PUNCTUATION TWO VERTICAL BARS..SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT
-	{0x10F70, 0x10F81, prN},   // Lo    [18] OLD UYGHUR LETTER ALEPH..OLD UYGHUR LETTER LESH
-	{0x10F82, 0x10F85, prN},   // Mn     [4] OLD UYGHUR COMBINING DOT ABOVE..OLD UYGHUR COMBINING TWO DOTS BELOW
-	{0x10F86, 0x10F89, prN},   // Po     [4] OLD UYGHUR PUNCTUATION BAR..OLD UYGHUR PUNCTUATION FOUR DOTS
-	{0x10FB0, 0x10FC4, prN},   // Lo    [21] CHORASMIAN LETTER ALEPH..CHORASMIAN LETTER TAW
-	{0x10FC5, 0x10FCB, prN},   // No     [7] CHORASMIAN NUMBER ONE..CHORASMIAN NUMBER ONE HUNDRED
-	{0x10FE0, 0x10FF6, prN},   // Lo    [23] ELYMAIC LETTER ALEPH..ELYMAIC LIGATURE ZAYIN-YODH
-	{0x11000, 0x11000, prN},   // Mc         BRAHMI SIGN CANDRABINDU
-	{0x11001, 0x11001, prN},   // Mn         BRAHMI SIGN ANUSVARA
-	{0x11002, 0x11002, prN},   // Mc         BRAHMI SIGN VISARGA
-	{0x11003, 0x11037, prN},   // Lo    [53] BRAHMI SIGN JIHVAMULIYA..BRAHMI LETTER OLD TAMIL NNNA
-	{0x11038, 0x11046, prN},   // Mn    [15] BRAHMI VOWEL SIGN AA..BRAHMI VIRAMA
-	{0x11047, 0x1104D, prN},   // Po     [7] BRAHMI DANDA..BRAHMI PUNCTUATION LOTUS
-	{0x11052, 0x11065, prN},   // No    [20] BRAHMI NUMBER ONE..BRAHMI NUMBER ONE THOUSAND
-	{0x11066, 0x1106F, prN},   // Nd    [10] BRAHMI DIGIT ZERO..BRAHMI DIGIT NINE
-	{0x11070, 0x11070, prN},   // Mn         BRAHMI SIGN OLD TAMIL VIRAMA
-	{0x11071, 0x11072, prN},   // Lo     [2] BRAHMI LETTER OLD TAMIL SHORT E..BRAHMI LETTER OLD TAMIL SHORT O
-	{0x11073, 0x11074, prN},   // Mn     [2] BRAHMI VOWEL SIGN OLD TAMIL SHORT E..BRAHMI VOWEL SIGN OLD TAMIL SHORT O
-	{0x11075, 0x11075, prN},   // Lo         BRAHMI LETTER OLD TAMIL LLA
-	{0x1107F, 0x1107F, prN},   // Mn         BRAHMI NUMBER JOINER
-	{0x11080, 0x11081, prN},   // Mn     [2] KAITHI SIGN CANDRABINDU..KAITHI SIGN ANUSVARA
-	{0x11082, 0x11082, prN},   // Mc         KAITHI SIGN VISARGA
-	{0x11083, 0x110AF, prN},   // Lo    [45] KAITHI LETTER A..KAITHI LETTER HA
-	{0x110B0, 0x110B2, prN},   // Mc     [3] KAITHI VOWEL SIGN AA..KAITHI VOWEL SIGN II
-	{0x110B3, 0x110B6, prN},   // Mn     [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI
-	{0x110B7, 0x110B8, prN},   // Mc     [2] KAITHI VOWEL SIGN O..KAITHI VOWEL SIGN AU
-	{0x110B9, 0x110BA, prN},   // Mn     [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA
-	{0x110BB, 0x110BC, prN},   // Po     [2] KAITHI ABBREVIATION SIGN..KAITHI ENUMERATION SIGN
-	{0x110BD, 0x110BD, prN},   // Cf         KAITHI NUMBER SIGN
-	{0x110BE, 0x110C1, prN},   // Po     [4] KAITHI SECTION MARK..KAITHI DOUBLE DANDA
-	{0x110C2, 0x110C2, prN},   // Mn         KAITHI VOWEL SIGN VOCALIC R
-	{0x110CD, 0x110CD, prN},   // Cf         KAITHI NUMBER SIGN ABOVE
-	{0x110D0, 0x110E8, prN},   // Lo    [25] SORA SOMPENG LETTER SAH..SORA SOMPENG LETTER MAE
-	{0x110F0, 0x110F9, prN},   // Nd    [10] SORA SOMPENG DIGIT ZERO..SORA SOMPENG DIGIT NINE
-	{0x11100, 0x11102, prN},   // Mn     [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA
-	{0x11103, 0x11126, prN},   // Lo    [36] CHAKMA LETTER AA..CHAKMA LETTER HAA
-	{0x11127, 0x1112B, prN},   // Mn     [5] CHAKMA VOWEL SIGN A..CHAKMA VOWEL SIGN UU
-	{0x1112C, 0x1112C, prN},   // Mc         CHAKMA VOWEL SIGN E
-	{0x1112D, 0x11134, prN},   // Mn     [8] CHAKMA VOWEL SIGN AI..CHAKMA MAAYYAA
-	{0x11136, 0x1113F, prN},   // Nd    [10] CHAKMA DIGIT ZERO..CHAKMA DIGIT NINE
-	{0x11140, 0x11143, prN},   // Po     [4] CHAKMA SECTION MARK..CHAKMA QUESTION MARK
-	{0x11144, 0x11144, prN},   // Lo         CHAKMA LETTER LHAA
-	{0x11145, 0x11146, prN},   // Mc     [2] CHAKMA VOWEL SIGN AA..CHAKMA VOWEL SIGN EI
-	{0x11147, 0x11147, prN},   // Lo         CHAKMA LETTER VAA
-	{0x11150, 0x11172, prN},   // Lo    [35] MAHAJANI LETTER A..MAHAJANI LETTER RRA
-	{0x11173, 0x11173, prN},   // Mn         MAHAJANI SIGN NUKTA
-	{0x11174, 0x11175, prN},   // Po     [2] MAHAJANI ABBREVIATION SIGN..MAHAJANI SECTION MARK
-	{0x11176, 0x11176, prN},   // Lo         MAHAJANI LIGATURE SHRI
-	{0x11180, 0x11181, prN},   // Mn     [2] SHARADA SIGN CANDRABINDU..SHARADA SIGN ANUSVARA
-	{0x11182, 0x11182, prN},   // Mc         SHARADA SIGN VISARGA
-	{0x11183, 0x111B2, prN},   // Lo    [48] SHARADA LETTER A..SHARADA LETTER HA
-	{0x111B3, 0x111B5, prN},   // Mc     [3] SHARADA VOWEL SIGN AA..SHARADA VOWEL SIGN II
-	{0x111B6, 0x111BE, prN},   // Mn     [9] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN O
-	{0x111BF, 0x111C0, prN},   // Mc     [2] SHARADA VOWEL SIGN AU..SHARADA SIGN VIRAMA
-	{0x111C1, 0x111C4, prN},   // Lo     [4] SHARADA SIGN AVAGRAHA..SHARADA OM
-	{0x111C5, 0x111C8, prN},   // Po     [4] SHARADA DANDA..SHARADA SEPARATOR
-	{0x111C9, 0x111CC, prN},   // Mn     [4] SHARADA SANDHI MARK..SHARADA EXTRA SHORT VOWEL MARK
-	{0x111CD, 0x111CD, prN},   // Po         SHARADA SUTRA MARK
-	{0x111CE, 0x111CE, prN},   // Mc         SHARADA VOWEL SIGN PRISHTHAMATRA E
-	{0x111CF, 0x111CF, prN},   // Mn         SHARADA SIGN INVERTED CANDRABINDU
-	{0x111D0, 0x111D9, prN},   // Nd    [10] SHARADA DIGIT ZERO..SHARADA DIGIT NINE
-	{0x111DA, 0x111DA, prN},   // Lo         SHARADA EKAM
-	{0x111DB, 0x111DB, prN},   // Po         SHARADA SIGN SIDDHAM
-	{0x111DC, 0x111DC, prN},   // Lo         SHARADA HEADSTROKE
-	{0x111DD, 0x111DF, prN},   // Po     [3] SHARADA CONTINUATION SIGN..SHARADA SECTION MARK-2
-	{0x111E1, 0x111F4, prN},   // No    [20] SINHALA ARCHAIC DIGIT ONE..SINHALA ARCHAIC NUMBER ONE THOUSAND
-	{0x11200, 0x11211, prN},   // Lo    [18] KHOJKI LETTER A..KHOJKI LETTER JJA
-	{0x11213, 0x1122B, prN},   // Lo    [25] KHOJKI LETTER NYA..KHOJKI LETTER LLA
-	{0x1122C, 0x1122E, prN},   // Mc     [3] KHOJKI VOWEL SIGN AA..KHOJKI VOWEL SIGN II
-	{0x1122F, 0x11231, prN},   // Mn     [3] KHOJKI VOWEL SIGN U..KHOJKI VOWEL SIGN AI
-	{0x11232, 0x11233, prN},   // Mc     [2] KHOJKI VOWEL SIGN O..KHOJKI VOWEL SIGN AU
-	{0x11234, 0x11234, prN},   // Mn         KHOJKI SIGN ANUSVARA
-	{0x11235, 0x11235, prN},   // Mc         KHOJKI SIGN VIRAMA
-	{0x11236, 0x11237, prN},   // Mn     [2] KHOJKI SIGN NUKTA..KHOJKI SIGN SHADDA
-	{0x11238, 0x1123D, prN},   // Po     [6] KHOJKI DANDA..KHOJKI ABBREVIATION SIGN
-	{0x1123E, 0x1123E, prN},   // Mn         KHOJKI SIGN SUKUN
-	{0x1123F, 0x11240, prN},   // Lo     [2] KHOJKI LETTER QA..KHOJKI LETTER SHORT I
-	{0x11241, 0x11241, prN},   // Mn         KHOJKI VOWEL SIGN VOCALIC R
-	{0x11280, 0x11286, prN},   // Lo     [7] MULTANI LETTER A..MULTANI LETTER GA
-	{0x11288, 0x11288, prN},   // Lo         MULTANI LETTER GHA
-	{0x1128A, 0x1128D, prN},   // Lo     [4] MULTANI LETTER CA..MULTANI LETTER JJA
-	{0x1128F, 0x1129D, prN},   // Lo    [15] MULTANI LETTER NYA..MULTANI LETTER BA
-	{0x1129F, 0x112A8, prN},   // Lo    [10] MULTANI LETTER BHA..MULTANI LETTER RHA
-	{0x112A9, 0x112A9, prN},   // Po         MULTANI SECTION MARK
-	{0x112B0, 0x112DE, prN},   // Lo    [47] KHUDAWADI LETTER A..KHUDAWADI LETTER HA
-	{0x112DF, 0x112DF, prN},   // Mn         KHUDAWADI SIGN ANUSVARA
-	{0x112E0, 0x112E2, prN},   // Mc     [3] KHUDAWADI VOWEL SIGN AA..KHUDAWADI VOWEL SIGN II
-	{0x112E3, 0x112EA, prN},   // Mn     [8] KHUDAWADI VOWEL SIGN U..KHUDAWADI SIGN VIRAMA
-	{0x112F0, 0x112F9, prN},   // Nd    [10] KHUDAWADI DIGIT ZERO..KHUDAWADI DIGIT NINE
-	{0x11300, 0x11301, prN},   // Mn     [2] GRANTHA SIGN COMBINING ANUSVARA ABOVE..GRANTHA SIGN CANDRABINDU
-	{0x11302, 0x11303, prN},   // Mc     [2] GRANTHA SIGN ANUSVARA..GRANTHA SIGN VISARGA
-	{0x11305, 0x1130C, prN},   // Lo     [8] GRANTHA LETTER A..GRANTHA LETTER VOCALIC L
-	{0x1130F, 0x11310, prN},   // Lo     [2] GRANTHA LETTER EE..GRANTHA LETTER AI
-	{0x11313, 0x11328, prN},   // Lo    [22] GRANTHA LETTER OO..GRANTHA LETTER NA
-	{0x1132A, 0x11330, prN},   // Lo     [7] GRANTHA LETTER PA..GRANTHA LETTER RA
-	{0x11332, 0x11333, prN},   // Lo     [2] GRANTHA LETTER LA..GRANTHA LETTER LLA
-	{0x11335, 0x11339, prN},   // Lo     [5] GRANTHA LETTER VA..GRANTHA LETTER HA
-	{0x1133B, 0x1133C, prN},   // Mn     [2] COMBINING BINDU BELOW..GRANTHA SIGN NUKTA
-	{0x1133D, 0x1133D, prN},   // Lo         GRANTHA SIGN AVAGRAHA
-	{0x1133E, 0x1133F, prN},   // Mc     [2] GRANTHA VOWEL SIGN AA..GRANTHA VOWEL SIGN I
-	{0x11340, 0x11340, prN},   // Mn         GRANTHA VOWEL SIGN II
-	{0x11341, 0x11344, prN},   // Mc     [4] GRANTHA VOWEL SIGN U..GRANTHA VOWEL SIGN VOCALIC RR
-	{0x11347, 0x11348, prN},   // Mc     [2] GRANTHA VOWEL SIGN EE..GRANTHA VOWEL SIGN AI
-	{0x1134B, 0x1134D, prN},   // Mc     [3] GRANTHA VOWEL SIGN OO..GRANTHA SIGN VIRAMA
-	{0x11350, 0x11350, prN},   // Lo         GRANTHA OM
-	{0x11357, 0x11357, prN},   // Mc         GRANTHA AU LENGTH MARK
-	{0x1135D, 0x11361, prN},   // Lo     [5] GRANTHA SIGN PLUTA..GRANTHA LETTER VOCALIC LL
-	{0x11362, 0x11363, prN},   // Mc     [2] GRANTHA VOWEL SIGN VOCALIC L..GRANTHA VOWEL SIGN VOCALIC LL
-	{0x11366, 0x1136C, prN},   // Mn     [7] COMBINING GRANTHA DIGIT ZERO..COMBINING GRANTHA DIGIT SIX
-	{0x11370, 0x11374, prN},   // Mn     [5] COMBINING GRANTHA LETTER A..COMBINING GRANTHA LETTER PA
-	{0x11400, 0x11434, prN},   // Lo    [53] NEWA LETTER A..NEWA LETTER HA
-	{0x11435, 0x11437, prN},   // Mc     [3] NEWA VOWEL SIGN AA..NEWA VOWEL SIGN II
-	{0x11438, 0x1143F, prN},   // Mn     [8] NEWA VOWEL SIGN U..NEWA VOWEL SIGN AI
-	{0x11440, 0x11441, prN},   // Mc     [2] NEWA VOWEL SIGN O..NEWA VOWEL SIGN AU
-	{0x11442, 0x11444, prN},   // Mn     [3] NEWA SIGN VIRAMA..NEWA SIGN ANUSVARA
-	{0x11445, 0x11445, prN},   // Mc         NEWA SIGN VISARGA
-	{0x11446, 0x11446, prN},   // Mn         NEWA SIGN NUKTA
-	{0x11447, 0x1144A, prN},   // Lo     [4] NEWA SIGN AVAGRAHA..NEWA SIDDHI
-	{0x1144B, 0x1144F, prN},   // Po     [5] NEWA DANDA..NEWA ABBREVIATION SIGN
-	{0x11450, 0x11459, prN},   // Nd    [10] NEWA DIGIT ZERO..NEWA DIGIT NINE
-	{0x1145A, 0x1145B, prN},   // Po     [2] NEWA DOUBLE COMMA..NEWA PLACEHOLDER MARK
-	{0x1145D, 0x1145D, prN},   // Po         NEWA INSERTION SIGN
-	{0x1145E, 0x1145E, prN},   // Mn         NEWA SANDHI MARK
-	{0x1145F, 0x11461, prN},   // Lo     [3] NEWA LETTER VEDIC ANUSVARA..NEWA SIGN UPADHMANIYA
-	{0x11480, 0x114AF, prN},   // Lo    [48] TIRHUTA ANJI..TIRHUTA LETTER HA
-	{0x114B0, 0x114B2, prN},   // Mc     [3] TIRHUTA VOWEL SIGN AA..TIRHUTA VOWEL SIGN II
-	{0x114B3, 0x114B8, prN},   // Mn     [6] TIRHUTA VOWEL SIGN U..TIRHUTA VOWEL SIGN VOCALIC LL
-	{0x114B9, 0x114B9, prN},   // Mc         TIRHUTA VOWEL SIGN E
-	{0x114BA, 0x114BA, prN},   // Mn         TIRHUTA VOWEL SIGN SHORT E
-	{0x114BB, 0x114BE, prN},   // Mc     [4] TIRHUTA VOWEL SIGN AI..TIRHUTA VOWEL SIGN AU
-	{0x114BF, 0x114C0, prN},   // Mn     [2] TIRHUTA SIGN CANDRABINDU..TIRHUTA SIGN ANUSVARA
-	{0x114C1, 0x114C1, prN},   // Mc         TIRHUTA SIGN VISARGA
-	{0x114C2, 0x114C3, prN},   // Mn     [2] TIRHUTA SIGN VIRAMA..TIRHUTA SIGN NUKTA
-	{0x114C4, 0x114C5, prN},   // Lo     [2] TIRHUTA SIGN AVAGRAHA..TIRHUTA GVANG
-	{0x114C6, 0x114C6, prN},   // Po         TIRHUTA ABBREVIATION SIGN
-	{0x114C7, 0x114C7, prN},   // Lo         TIRHUTA OM
-	{0x114D0, 0x114D9, prN},   // Nd    [10] TIRHUTA DIGIT ZERO..TIRHUTA DIGIT NINE
-	{0x11580, 0x115AE, prN},   // Lo    [47] SIDDHAM LETTER A..SIDDHAM LETTER HA
-	{0x115AF, 0x115B1, prN},   // Mc     [3] SIDDHAM VOWEL SIGN AA..SIDDHAM VOWEL SIGN II
-	{0x115B2, 0x115B5, prN},   // Mn     [4] SIDDHAM VOWEL SIGN U..SIDDHAM VOWEL SIGN VOCALIC RR
-	{0x115B8, 0x115BB, prN},   // Mc     [4] SIDDHAM VOWEL SIGN E..SIDDHAM VOWEL SIGN AU
-	{0x115BC, 0x115BD, prN},   // Mn     [2] SIDDHAM SIGN CANDRABINDU..SIDDHAM SIGN ANUSVARA
-	{0x115BE, 0x115BE, prN},   // Mc         SIDDHAM SIGN VISARGA
-	{0x115BF, 0x115C0, prN},   // Mn     [2] SIDDHAM SIGN VIRAMA..SIDDHAM SIGN NUKTA
-	{0x115C1, 0x115D7, prN},   // Po    [23] SIDDHAM SIGN SIDDHAM..SIDDHAM SECTION MARK WITH CIRCLES AND FOUR ENCLOSURES
-	{0x115D8, 0x115DB, prN},   // Lo     [4] SIDDHAM LETTER THREE-CIRCLE ALTERNATE I..SIDDHAM LETTER ALTERNATE U
-	{0x115DC, 0x115DD, prN},   // Mn     [2] SIDDHAM VOWEL SIGN ALTERNATE U..SIDDHAM VOWEL SIGN ALTERNATE UU
-	{0x11600, 0x1162F, prN},   // Lo    [48] MODI LETTER A..MODI LETTER LLA
-	{0x11630, 0x11632, prN},   // Mc     [3] MODI VOWEL SIGN AA..MODI VOWEL SIGN II
-	{0x11633, 0x1163A, prN},   // Mn     [8] MODI VOWEL SIGN U..MODI VOWEL SIGN AI
-	{0x1163B, 0x1163C, prN},   // Mc     [2] MODI VOWEL SIGN O..MODI VOWEL SIGN AU
-	{0x1163D, 0x1163D, prN},   // Mn         MODI SIGN ANUSVARA
-	{0x1163E, 0x1163E, prN},   // Mc         MODI SIGN VISARGA
-	{0x1163F, 0x11640, prN},   // Mn     [2] MODI SIGN VIRAMA..MODI SIGN ARDHACANDRA
-	{0x11641, 0x11643, prN},   // Po     [3] MODI DANDA..MODI ABBREVIATION SIGN
-	{0x11644, 0x11644, prN},   // Lo         MODI SIGN HUVA
-	{0x11650, 0x11659, prN},   // Nd    [10] MODI DIGIT ZERO..MODI DIGIT NINE
-	{0x11660, 0x1166C, prN},   // Po    [13] MONGOLIAN BIRGA WITH ORNAMENT..MONGOLIAN TURNED SWIRL BIRGA WITH DOUBLE ORNAMENT
-	{0x11680, 0x116AA, prN},   // Lo    [43] TAKRI LETTER A..TAKRI LETTER RRA
-	{0x116AB, 0x116AB, prN},   // Mn         TAKRI SIGN ANUSVARA
-	{0x116AC, 0x116AC, prN},   // Mc         TAKRI SIGN VISARGA
-	{0x116AD, 0x116AD, prN},   // Mn         TAKRI VOWEL SIGN AA
-	{0x116AE, 0x116AF, prN},   // Mc     [2] TAKRI VOWEL SIGN I..TAKRI VOWEL SIGN II
-	{0x116B0, 0x116B5, prN},   // Mn     [6] TAKRI VOWEL SIGN U..TAKRI VOWEL SIGN AU
-	{0x116B6, 0x116B6, prN},   // Mc         TAKRI SIGN VIRAMA
-	{0x116B7, 0x116B7, prN},   // Mn         TAKRI SIGN NUKTA
-	{0x116B8, 0x116B8, prN},   // Lo         TAKRI LETTER ARCHAIC KHA
-	{0x116B9, 0x116B9, prN},   // Po         TAKRI ABBREVIATION SIGN
-	{0x116C0, 0x116C9, prN},   // Nd    [10] TAKRI DIGIT ZERO..TAKRI DIGIT NINE
-	{0x11700, 0x1171A, prN},   // Lo    [27] AHOM LETTER KA..AHOM LETTER ALTERNATE BA
-	{0x1171D, 0x1171F, prN},   // Mn     [3] AHOM CONSONANT SIGN MEDIAL LA..AHOM CONSONANT SIGN MEDIAL LIGATING RA
-	{0x11720, 0x11721, prN},   // Mc     [2] AHOM VOWEL SIGN A..AHOM VOWEL SIGN AA
-	{0x11722, 0x11725, prN},   // Mn     [4] AHOM VOWEL SIGN I..AHOM VOWEL SIGN UU
-	{0x11726, 0x11726, prN},   // Mc         AHOM VOWEL SIGN E
-	{0x11727, 0x1172B, prN},   // Mn     [5] AHOM VOWEL SIGN AW..AHOM SIGN KILLER
-	{0x11730, 0x11739, prN},   // Nd    [10] AHOM DIGIT ZERO..AHOM DIGIT NINE
-	{0x1173A, 0x1173B, prN},   // No     [2] AHOM NUMBER TEN..AHOM NUMBER TWENTY
-	{0x1173C, 0x1173E, prN},   // Po     [3] AHOM SIGN SMALL SECTION..AHOM SIGN RULAI
-	{0x1173F, 0x1173F, prN},   // So         AHOM SYMBOL VI
-	{0x11740, 0x11746, prN},   // Lo     [7] AHOM LETTER CA..AHOM LETTER LLA
-	{0x11800, 0x1182B, prN},   // Lo    [44] DOGRA LETTER A..DOGRA LETTER RRA
-	{0x1182C, 0x1182E, prN},   // Mc     [3] DOGRA VOWEL SIGN AA..DOGRA VOWEL SIGN II
-	{0x1182F, 0x11837, prN},   // Mn     [9] DOGRA VOWEL SIGN U..DOGRA SIGN ANUSVARA
-	{0x11838, 0x11838, prN},   // Mc         DOGRA SIGN VISARGA
-	{0x11839, 0x1183A, prN},   // Mn     [2] DOGRA SIGN VIRAMA..DOGRA SIGN NUKTA
-	{0x1183B, 0x1183B, prN},   // Po         DOGRA ABBREVIATION SIGN
-	{0x118A0, 0x118DF, prN},   // L&    [64] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI SMALL LETTER VIYO
-	{0x118E0, 0x118E9, prN},   // Nd    [10] WARANG CITI DIGIT ZERO..WARANG CITI DIGIT NINE
-	{0x118EA, 0x118F2, prN},   // No     [9] WARANG CITI NUMBER TEN..WARANG CITI NUMBER NINETY
-	{0x118FF, 0x118FF, prN},   // Lo         WARANG CITI OM
-	{0x11900, 0x11906, prN},   // Lo     [7] DIVES AKURU LETTER A..DIVES AKURU LETTER E
-	{0x11909, 0x11909, prN},   // Lo         DIVES AKURU LETTER O
-	{0x1190C, 0x11913, prN},   // Lo     [8] DIVES AKURU LETTER KA..DIVES AKURU LETTER JA
-	{0x11915, 0x11916, prN},   // Lo     [2] DIVES AKURU LETTER NYA..DIVES AKURU LETTER TTA
-	{0x11918, 0x1192F, prN},   // Lo    [24] DIVES AKURU LETTER DDA..DIVES AKURU LETTER ZA
-	{0x11930, 0x11935, prN},   // Mc     [6] DIVES AKURU VOWEL SIGN AA..DIVES AKURU VOWEL SIGN E
-	{0x11937, 0x11938, prN},   // Mc     [2] DIVES AKURU VOWEL SIGN AI..DIVES AKURU VOWEL SIGN O
-	{0x1193B, 0x1193C, prN},   // Mn     [2] DIVES AKURU SIGN ANUSVARA..DIVES AKURU SIGN CANDRABINDU
-	{0x1193D, 0x1193D, prN},   // Mc         DIVES AKURU SIGN HALANTA
-	{0x1193E, 0x1193E, prN},   // Mn         DIVES AKURU VIRAMA
-	{0x1193F, 0x1193F, prN},   // Lo         DIVES AKURU PREFIXED NASAL SIGN
-	{0x11940, 0x11940, prN},   // Mc         DIVES AKURU MEDIAL YA
-	{0x11941, 0x11941, prN},   // Lo         DIVES AKURU INITIAL RA
-	{0x11942, 0x11942, prN},   // Mc         DIVES AKURU MEDIAL RA
-	{0x11943, 0x11943, prN},   // Mn         DIVES AKURU SIGN NUKTA
-	{0x11944, 0x11946, prN},   // Po     [3] DIVES AKURU DOUBLE DANDA..DIVES AKURU END OF TEXT MARK
-	{0x11950, 0x11959, prN},   // Nd    [10] DIVES AKURU DIGIT ZERO..DIVES AKURU DIGIT NINE
-	{0x119A0, 0x119A7, prN},   // Lo     [8] NANDINAGARI LETTER A..NANDINAGARI LETTER VOCALIC RR
-	{0x119AA, 0x119D0, prN},   // Lo    [39] NANDINAGARI LETTER E..NANDINAGARI LETTER RRA
-	{0x119D1, 0x119D3, prN},   // Mc     [3] NANDINAGARI VOWEL SIGN AA..NANDINAGARI VOWEL SIGN II
-	{0x119D4, 0x119D7, prN},   // Mn     [4] NANDINAGARI VOWEL SIGN U..NANDINAGARI VOWEL SIGN VOCALIC RR
-	{0x119DA, 0x119DB, prN},   // Mn     [2] NANDINAGARI VOWEL SIGN E..NANDINAGARI VOWEL SIGN AI
-	{0x119DC, 0x119DF, prN},   // Mc     [4] NANDINAGARI VOWEL SIGN O..NANDINAGARI SIGN VISARGA
-	{0x119E0, 0x119E0, prN},   // Mn         NANDINAGARI SIGN VIRAMA
-	{0x119E1, 0x119E1, prN},   // Lo         NANDINAGARI SIGN AVAGRAHA
-	{0x119E2, 0x119E2, prN},   // Po         NANDINAGARI SIGN SIDDHAM
-	{0x119E3, 0x119E3, prN},   // Lo         NANDINAGARI HEADSTROKE
-	{0x119E4, 0x119E4, prN},   // Mc         NANDINAGARI VOWEL SIGN PRISHTHAMATRA E
-	{0x11A00, 0x11A00, prN},   // Lo         ZANABAZAR SQUARE LETTER A
-	{0x11A01, 0x11A0A, prN},   // Mn    [10] ZANABAZAR SQUARE VOWEL SIGN I..ZANABAZAR SQUARE VOWEL LENGTH MARK
-	{0x11A0B, 0x11A32, prN},   // Lo    [40] ZANABAZAR SQUARE LETTER KA..ZANABAZAR SQUARE LETTER KSSA
-	{0x11A33, 0x11A38, prN},   // Mn     [6] ZANABAZAR SQUARE FINAL CONSONANT MARK..ZANABAZAR SQUARE SIGN ANUSVARA
-	{0x11A39, 0x11A39, prN},   // Mc         ZANABAZAR SQUARE SIGN VISARGA
-	{0x11A3A, 0x11A3A, prN},   // Lo         ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA
-	{0x11A3B, 0x11A3E, prN},   // Mn     [4] ZANABAZAR SQUARE CLUSTER-FINAL LETTER YA..ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA
-	{0x11A3F, 0x11A46, prN},   // Po     [8] ZANABAZAR SQUARE INITIAL HEAD MARK..ZANABAZAR SQUARE CLOSING DOUBLE-LINED HEAD MARK
-	{0x11A47, 0x11A47, prN},   // Mn         ZANABAZAR SQUARE SUBJOINER
-	{0x11A50, 0x11A50, prN},   // Lo         SOYOMBO LETTER A
-	{0x11A51, 0x11A56, prN},   // Mn     [6] SOYOMBO VOWEL SIGN I..SOYOMBO VOWEL SIGN OE
-	{0x11A57, 0x11A58, prN},   // Mc     [2] SOYOMBO VOWEL SIGN AI..SOYOMBO VOWEL SIGN AU
-	{0x11A59, 0x11A5B, prN},   // Mn     [3] SOYOMBO VOWEL SIGN VOCALIC R..SOYOMBO VOWEL LENGTH MARK
-	{0x11A5C, 0x11A89, prN},   // Lo    [46] SOYOMBO LETTER KA..SOYOMBO CLUSTER-INITIAL LETTER SA
-	{0x11A8A, 0x11A96, prN},   // Mn    [13] SOYOMBO FINAL CONSONANT SIGN G..SOYOMBO SIGN ANUSVARA
-	{0x11A97, 0x11A97, prN},   // Mc         SOYOMBO SIGN VISARGA
-	{0x11A98, 0x11A99, prN},   // Mn     [2] SOYOMBO GEMINATION MARK..SOYOMBO SUBJOINER
-	{0x11A9A, 0x11A9C, prN},   // Po     [3] SOYOMBO MARK TSHEG..SOYOMBO MARK DOUBLE SHAD
-	{0x11A9D, 0x11A9D, prN},   // Lo         SOYOMBO MARK PLUTA
-	{0x11A9E, 0x11AA2, prN},   // Po     [5] SOYOMBO HEAD MARK WITH MOON AND SUN AND TRIPLE FLAME..SOYOMBO TERMINAL MARK-2
-	{0x11AB0, 0x11ABF, prN},   // Lo    [16] CANADIAN SYLLABICS NATTILIK HI..CANADIAN SYLLABICS SPA
-	{0x11AC0, 0x11AF8, prN},   // Lo    [57] PAU CIN HAU LETTER PA..PAU CIN HAU GLOTTAL STOP FINAL
-	{0x11B00, 0x11B09, prN},   // Po    [10] DEVANAGARI HEAD MARK..DEVANAGARI SIGN MINDU
-	{0x11C00, 0x11C08, prN},   // Lo     [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L
-	{0x11C0A, 0x11C2E, prN},   // Lo    [37] BHAIKSUKI LETTER E..BHAIKSUKI LETTER HA
-	{0x11C2F, 0x11C2F, prN},   // Mc         BHAIKSUKI VOWEL SIGN AA
-	{0x11C30, 0x11C36, prN},   // Mn     [7] BHAIKSUKI VOWEL SIGN I..BHAIKSUKI VOWEL SIGN VOCALIC L
-	{0x11C38, 0x11C3D, prN},   // Mn     [6] BHAIKSUKI VOWEL SIGN E..BHAIKSUKI SIGN ANUSVARA
-	{0x11C3E, 0x11C3E, prN},   // Mc         BHAIKSUKI SIGN VISARGA
-	{0x11C3F, 0x11C3F, prN},   // Mn         BHAIKSUKI SIGN VIRAMA
-	{0x11C40, 0x11C40, prN},   // Lo         BHAIKSUKI SIGN AVAGRAHA
-	{0x11C41, 0x11C45, prN},   // Po     [5] BHAIKSUKI DANDA..BHAIKSUKI GAP FILLER-2
-	{0x11C50, 0x11C59, prN},   // Nd    [10] BHAIKSUKI DIGIT ZERO..BHAIKSUKI DIGIT NINE
-	{0x11C5A, 0x11C6C, prN},   // No    [19] BHAIKSUKI NUMBER ONE..BHAIKSUKI HUNDREDS UNIT MARK
-	{0x11C70, 0x11C71, prN},   // Po     [2] MARCHEN HEAD MARK..MARCHEN MARK SHAD
-	{0x11C72, 0x11C8F, prN},   // Lo    [30] MARCHEN LETTER KA..MARCHEN LETTER A
-	{0x11C92, 0x11CA7, prN},   // Mn    [22] MARCHEN SUBJOINED LETTER KA..MARCHEN SUBJOINED LETTER ZA
-	{0x11CA9, 0x11CA9, prN},   // Mc         MARCHEN SUBJOINED LETTER YA
-	{0x11CAA, 0x11CB0, prN},   // Mn     [7] MARCHEN SUBJOINED LETTER RA..MARCHEN VOWEL SIGN AA
-	{0x11CB1, 0x11CB1, prN},   // Mc         MARCHEN VOWEL SIGN I
-	{0x11CB2, 0x11CB3, prN},   // Mn     [2] MARCHEN VOWEL SIGN U..MARCHEN VOWEL SIGN E
-	{0x11CB4, 0x11CB4, prN},   // Mc         MARCHEN VOWEL SIGN O
-	{0x11CB5, 0x11CB6, prN},   // Mn     [2] MARCHEN SIGN ANUSVARA..MARCHEN SIGN CANDRABINDU
-	{0x11D00, 0x11D06, prN},   // Lo     [7] MASARAM GONDI LETTER A..MASARAM GONDI LETTER E
-	{0x11D08, 0x11D09, prN},   // Lo     [2] MASARAM GONDI LETTER AI..MASARAM GONDI LETTER O
-	{0x11D0B, 0x11D30, prN},   // Lo    [38] MASARAM GONDI LETTER AU..MASARAM GONDI LETTER TRA
-	{0x11D31, 0x11D36, prN},   // Mn     [6] MASARAM GONDI VOWEL SIGN AA..MASARAM GONDI VOWEL SIGN VOCALIC R
-	{0x11D3A, 0x11D3A, prN},   // Mn         MASARAM GONDI VOWEL SIGN E
-	{0x11D3C, 0x11D3D, prN},   // Mn     [2] MASARAM GONDI VOWEL SIGN AI..MASARAM GONDI VOWEL SIGN O
-	{0x11D3F, 0x11D45, prN},   // Mn     [7] MASARAM GONDI VOWEL SIGN AU..MASARAM GONDI VIRAMA
-	{0x11D46, 0x11D46, prN},   // Lo         MASARAM GONDI REPHA
-	{0x11D47, 0x11D47, prN},   // Mn         MASARAM GONDI RA-KARA
-	{0x11D50, 0x11D59, prN},   // Nd    [10] MASARAM GONDI DIGIT ZERO..MASARAM GONDI DIGIT NINE
-	{0x11D60, 0x11D65, prN},   // Lo     [6] GUNJALA GONDI LETTER A..GUNJALA GONDI LETTER UU
-	{0x11D67, 0x11D68, prN},   // Lo     [2] GUNJALA GONDI LETTER EE..GUNJALA GONDI LETTER AI
-	{0x11D6A, 0x11D89, prN},   // Lo    [32] GUNJALA GONDI LETTER OO..GUNJALA GONDI LETTER SA
-	{0x11D8A, 0x11D8E, prN},   // Mc     [5] GUNJALA GONDI VOWEL SIGN AA..GUNJALA GONDI VOWEL SIGN UU
-	{0x11D90, 0x11D91, prN},   // Mn     [2] GUNJALA GONDI VOWEL SIGN EE..GUNJALA GONDI VOWEL SIGN AI
-	{0x11D93, 0x11D94, prN},   // Mc     [2] GUNJALA GONDI VOWEL SIGN OO..GUNJALA GONDI VOWEL SIGN AU
-	{0x11D95, 0x11D95, prN},   // Mn         GUNJALA GONDI SIGN ANUSVARA
-	{0x11D96, 0x11D96, prN},   // Mc         GUNJALA GONDI SIGN VISARGA
-	{0x11D97, 0x11D97, prN},   // Mn         GUNJALA GONDI VIRAMA
-	{0x11D98, 0x11D98, prN},   // Lo         GUNJALA GONDI OM
-	{0x11DA0, 0x11DA9, prN},   // Nd    [10] GUNJALA GONDI DIGIT ZERO..GUNJALA GONDI DIGIT NINE
-	{0x11EE0, 0x11EF2, prN},   // Lo    [19] MAKASAR LETTER KA..MAKASAR ANGKA
-	{0x11EF3, 0x11EF4, prN},   // Mn     [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U
-	{0x11EF5, 0x11EF6, prN},   // Mc     [2] MAKASAR VOWEL SIGN E..MAKASAR VOWEL SIGN O
-	{0x11EF7, 0x11EF8, prN},   // Po     [2] MAKASAR PASSIMBANG..MAKASAR END OF SECTION
-	{0x11F00, 0x11F01, prN},   // Mn     [2] KAWI SIGN CANDRABINDU..KAWI SIGN ANUSVARA
-	{0x11F02, 0x11F02, prN},   // Lo         KAWI SIGN REPHA
-	{0x11F03, 0x11F03, prN},   // Mc         KAWI SIGN VISARGA
-	{0x11F04, 0x11F10, prN},   // Lo    [13] KAWI LETTER A..KAWI LETTER O
-	{0x11F12, 0x11F33, prN},   // Lo    [34] KAWI LETTER KA..KAWI LETTER JNYA
-	{0x11F34, 0x11F35, prN},   // Mc     [2] KAWI VOWEL SIGN AA..KAWI VOWEL SIGN ALTERNATE AA
-	{0x11F36, 0x11F3A, prN},   // Mn     [5] KAWI VOWEL SIGN I..KAWI VOWEL SIGN VOCALIC R
-	{0x11F3E, 0x11F3F, prN},   // Mc     [2] KAWI VOWEL SIGN E..KAWI VOWEL SIGN AI
-	{0x11F40, 0x11F40, prN},   // Mn         KAWI VOWEL SIGN EU
-	{0x11F41, 0x11F41, prN},   // Mc         KAWI SIGN KILLER
-	{0x11F42, 0x11F42, prN},   // Mn         KAWI CONJOINER
-	{0x11F43, 0x11F4F, prN},   // Po    [13] KAWI DANDA..KAWI PUNCTUATION CLOSING SPIRAL
-	{0x11F50, 0x11F59, prN},   // Nd    [10] KAWI DIGIT ZERO..KAWI DIGIT NINE
-	{0x11FB0, 0x11FB0, prN},   // Lo         LISU LETTER YHA
-	{0x11FC0, 0x11FD4, prN},   // No    [21] TAMIL FRACTION ONE THREE-HUNDRED-AND-TWENTIETH..TAMIL FRACTION DOWNSCALING FACTOR KIIZH
-	{0x11FD5, 0x11FDC, prN},   // So     [8] TAMIL SIGN NEL..TAMIL SIGN MUKKURUNI
-	{0x11FDD, 0x11FE0, prN},   // Sc     [4] TAMIL SIGN KAACU..TAMIL SIGN VARAAKAN
-	{0x11FE1, 0x11FF1, prN},   // So    [17] TAMIL SIGN PAARAM..TAMIL SIGN VAKAIYARAA
-	{0x11FFF, 0x11FFF, prN},   // Po         TAMIL PUNCTUATION END OF TEXT
-	{0x12000, 0x12399, prN},   // Lo   [922] CUNEIFORM SIGN A..CUNEIFORM SIGN U U
-	{0x12400, 0x1246E, prN},   // Nl   [111] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM
-	{0x12470, 0x12474, prN},   // Po     [5] CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER..CUNEIFORM PUNCTUATION SIGN DIAGONAL QUADCOLON
-	{0x12480, 0x12543, prN},   // Lo   [196] CUNEIFORM SIGN AB TIMES NUN TENU..CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU
-	{0x12F90, 0x12FF0, prN},   // Lo    [97] CYPRO-MINOAN SIGN CM001..CYPRO-MINOAN SIGN CM114
-	{0x12FF1, 0x12FF2, prN},   // Po     [2] CYPRO-MINOAN SIGN CM301..CYPRO-MINOAN SIGN CM302
-	{0x13000, 0x1342F, prN},   // Lo  [1072] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH V011D
-	{0x13430, 0x1343F, prN},   // Cf    [16] EGYPTIAN HIEROGLYPH VERTICAL JOINER..EGYPTIAN HIEROGLYPH END WALLED ENCLOSURE
-	{0x13440, 0x13440, prN},   // Mn         EGYPTIAN HIEROGLYPH MIRROR HORIZONTALLY
-	{0x13441, 0x13446, prN},   // Lo     [6] EGYPTIAN HIEROGLYPH FULL BLANK..EGYPTIAN HIEROGLYPH WIDE LOST SIGN
-	{0x13447, 0x13455, prN},   // Mn    [15] EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP START..EGYPTIAN HIEROGLYPH MODIFIER DAMAGED
-	{0x14400, 0x14646, prN},   // Lo   [583] ANATOLIAN HIEROGLYPH A001..ANATOLIAN HIEROGLYPH A530
-	{0x16800, 0x16A38, prN},   // Lo   [569] BAMUM LETTER PHASE-A NGKUE MFON..BAMUM LETTER PHASE-F VUEQ
-	{0x16A40, 0x16A5E, prN},   // Lo    [31] MRO LETTER TA..MRO LETTER TEK
-	{0x16A60, 0x16A69, prN},   // Nd    [10] MRO DIGIT ZERO..MRO DIGIT NINE
-	{0x16A6E, 0x16A6F, prN},   // Po     [2] MRO DANDA..MRO DOUBLE DANDA
-	{0x16A70, 0x16ABE, prN},   // Lo    [79] TANGSA LETTER OZ..TANGSA LETTER ZA
-	{0x16AC0, 0x16AC9, prN},   // Nd    [10] TANGSA DIGIT ZERO..TANGSA DIGIT NINE
-	{0x16AD0, 0x16AED, prN},   // Lo    [30] BASSA VAH LETTER ENNI..BASSA VAH LETTER I
-	{0x16AF0, 0x16AF4, prN},   // Mn     [5] BASSA VAH COMBINING HIGH TONE..BASSA VAH COMBINING HIGH-LOW TONE
-	{0x16AF5, 0x16AF5, prN},   // Po         BASSA VAH FULL STOP
-	{0x16B00, 0x16B2F, prN},   // Lo    [48] PAHAWH HMONG VOWEL KEEB..PAHAWH HMONG CONSONANT CAU
-	{0x16B30, 0x16B36, prN},   // Mn     [7] PAHAWH HMONG MARK CIM TUB..PAHAWH HMONG MARK CIM TAUM
-	{0x16B37, 0x16B3B, prN},   // Po     [5] PAHAWH HMONG SIGN VOS THOM..PAHAWH HMONG SIGN VOS FEEM
-	{0x16B3C, 0x16B3F, prN},   // So     [4] PAHAWH HMONG SIGN XYEEM NTXIV..PAHAWH HMONG SIGN XYEEM FAIB
-	{0x16B40, 0x16B43, prN},   // Lm     [4] PAHAWH HMONG SIGN VOS SEEV..PAHAWH HMONG SIGN IB YAM
-	{0x16B44, 0x16B44, prN},   // Po         PAHAWH HMONG SIGN XAUS
-	{0x16B45, 0x16B45, prN},   // So         PAHAWH HMONG SIGN CIM TSOV ROG
-	{0x16B50, 0x16B59, prN},   // Nd    [10] PAHAWH HMONG DIGIT ZERO..PAHAWH HMONG DIGIT NINE
-	{0x16B5B, 0x16B61, prN},   // No     [7] PAHAWH HMONG NUMBER TENS..PAHAWH HMONG NUMBER TRILLIONS
-	{0x16B63, 0x16B77, prN},   // Lo    [21] PAHAWH HMONG SIGN VOS LUB..PAHAWH HMONG SIGN CIM NRES TOS
-	{0x16B7D, 0x16B8F, prN},   // Lo    [19] PAHAWH HMONG CLAN SIGN TSHEEJ..PAHAWH HMONG CLAN SIGN VWJ
-	{0x16E40, 0x16E7F, prN},   // L&    [64] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN SMALL LETTER Y
-	{0x16E80, 0x16E96, prN},   // No    [23] MEDEFAIDRIN DIGIT ZERO..MEDEFAIDRIN DIGIT THREE ALTERNATE FORM
-	{0x16E97, 0x16E9A, prN},   // Po     [4] MEDEFAIDRIN COMMA..MEDEFAIDRIN EXCLAMATION OH
-	{0x16F00, 0x16F4A, prN},   // Lo    [75] MIAO LETTER PA..MIAO LETTER RTE
-	{0x16F4F, 0x16F4F, prN},   // Mn         MIAO SIGN CONSONANT MODIFIER BAR
-	{0x16F50, 0x16F50, prN},   // Lo         MIAO LETTER NASALIZATION
-	{0x16F51, 0x16F87, prN},   // Mc    [55] MIAO SIGN ASPIRATION..MIAO VOWEL SIGN UI
-	{0x16F8F, 0x16F92, prN},   // Mn     [4] MIAO TONE RIGHT..MIAO TONE BELOW
-	{0x16F93, 0x16F9F, prN},   // Lm    [13] MIAO LETTER TONE-2..MIAO LETTER REFORMED TONE-8
-	{0x16FE0, 0x16FE1, prW},   // Lm     [2] TANGUT ITERATION MARK..NUSHU ITERATION MARK
-	{0x16FE2, 0x16FE2, prW},   // Po         OLD CHINESE HOOK MARK
-	{0x16FE3, 0x16FE3, prW},   // Lm         OLD CHINESE ITERATION MARK
-	{0x16FE4, 0x16FE4, prW},   // Mn         KHITAN SMALL SCRIPT FILLER
-	{0x16FF0, 0x16FF1, prW},   // Mc     [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY
-	{0x17000, 0x187F7, prW},   // Lo  [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7
-	{0x18800, 0x18AFF, prW},   // Lo   [768] TANGUT COMPONENT-001..TANGUT COMPONENT-768
-	{0x18B00, 0x18CD5, prW},   // Lo   [470] KHITAN SMALL SCRIPT CHARACTER-18B00..KHITAN SMALL SCRIPT CHARACTER-18CD5
-	{0x18D00, 0x18D08, prW},   // Lo     [9] TANGUT IDEOGRAPH-18D00..TANGUT IDEOGRAPH-18D08
-	{0x1AFF0, 0x1AFF3, prW},   // Lm     [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5
-	{0x1AFF5, 0x1AFFB, prW},   // Lm     [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5
-	{0x1AFFD, 0x1AFFE, prW},   // Lm     [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8
-	{0x1B000, 0x1B0FF, prW},   // Lo   [256] KATAKANA LETTER ARCHAIC E..HENTAIGANA LETTER RE-2
-	{0x1B100, 0x1B122, prW},   // Lo    [35] HENTAIGANA LETTER RE-3..KATAKANA LETTER ARCHAIC WU
-	{0x1B132, 0x1B132, prW},   // Lo         HIRAGANA LETTER SMALL KO
-	{0x1B150, 0x1B152, prW},   // Lo     [3] HIRAGANA LETTER SMALL WI..HIRAGANA LETTER SMALL WO
-	{0x1B155, 0x1B155, prW},   // Lo         KATAKANA LETTER SMALL KO
-	{0x1B164, 0x1B167, prW},   // Lo     [4] KATAKANA LETTER SMALL WI..KATAKANA LETTER SMALL N
-	{0x1B170, 0x1B2FB, prW},   // Lo   [396] NUSHU CHARACTER-1B170..NUSHU CHARACTER-1B2FB
-	{0x1BC00, 0x1BC6A, prN},   // Lo   [107] DUPLOYAN LETTER H..DUPLOYAN LETTER VOCALIC M
-	{0x1BC70, 0x1BC7C, prN},   // Lo    [13] DUPLOYAN AFFIX LEFT HORIZONTAL SECANT..DUPLOYAN AFFIX ATTACHED TANGENT HOOK
-	{0x1BC80, 0x1BC88, prN},   // Lo     [9] DUPLOYAN AFFIX HIGH ACUTE..DUPLOYAN AFFIX HIGH VERTICAL
-	{0x1BC90, 0x1BC99, prN},   // Lo    [10] DUPLOYAN AFFIX LOW ACUTE..DUPLOYAN AFFIX LOW ARROW
-	{0x1BC9C, 0x1BC9C, prN},   // So         DUPLOYAN SIGN O WITH CROSS
-	{0x1BC9D, 0x1BC9E, prN},   // Mn     [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK
-	{0x1BC9F, 0x1BC9F, prN},   // Po         DUPLOYAN PUNCTUATION CHINOOK FULL STOP
-	{0x1BCA0, 0x1BCA3, prN},   // Cf     [4] SHORTHAND FORMAT LETTER OVERLAP..SHORTHAND FORMAT UP STEP
-	{0x1CF00, 0x1CF2D, prN},   // Mn    [46] ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT..ZNAMENNY COMBINING MARK KRYZH ON LEFT
-	{0x1CF30, 0x1CF46, prN},   // Mn    [23] ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO..ZNAMENNY PRIZNAK MODIFIER ROG
-	{0x1CF50, 0x1CFC3, prN},   // So   [116] ZNAMENNY NEUME KRYUK..ZNAMENNY NEUME PAUK
-	{0x1D000, 0x1D0F5, prN},   // So   [246] BYZANTINE MUSICAL SYMBOL PSILI..BYZANTINE MUSICAL SYMBOL GORGON NEO KATO
-	{0x1D100, 0x1D126, prN},   // So    [39] MUSICAL SYMBOL SINGLE BARLINE..MUSICAL SYMBOL DRUM CLEF-2
-	{0x1D129, 0x1D164, prN},   // So    [60] MUSICAL SYMBOL MULTIPLE MEASURE REST..MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE
-	{0x1D165, 0x1D166, prN},   // Mc     [2] MUSICAL SYMBOL COMBINING STEM..MUSICAL SYMBOL COMBINING SPRECHGESANG STEM
-	{0x1D167, 0x1D169, prN},   // Mn     [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3
-	{0x1D16A, 0x1D16C, prN},   // So     [3] MUSICAL SYMBOL FINGERED TREMOLO-1..MUSICAL SYMBOL FINGERED TREMOLO-3
-	{0x1D16D, 0x1D172, prN},   // Mc     [6] MUSICAL SYMBOL COMBINING AUGMENTATION DOT..MUSICAL SYMBOL COMBINING FLAG-5
-	{0x1D173, 0x1D17A, prN},   // Cf     [8] MUSICAL SYMBOL BEGIN BEAM..MUSICAL SYMBOL END PHRASE
-	{0x1D17B, 0x1D182, prN},   // Mn     [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE
-	{0x1D183, 0x1D184, prN},   // So     [2] MUSICAL SYMBOL ARPEGGIATO UP..MUSICAL SYMBOL ARPEGGIATO DOWN
-	{0x1D185, 0x1D18B, prN},   // Mn     [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE
-	{0x1D18C, 0x1D1A9, prN},   // So    [30] MUSICAL SYMBOL RINFORZANDO..MUSICAL SYMBOL DEGREE SLASH
-	{0x1D1AA, 0x1D1AD, prN},   // Mn     [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO
-	{0x1D1AE, 0x1D1EA, prN},   // So    [61] MUSICAL SYMBOL PEDAL MARK..MUSICAL SYMBOL KORON
-	{0x1D200, 0x1D241, prN},   // So    [66] GREEK VOCAL NOTATION SYMBOL-1..GREEK INSTRUMENTAL NOTATION SYMBOL-54
-	{0x1D242, 0x1D244, prN},   // Mn     [3] COMBINING GREEK MUSICAL TRISEME..COMBINING GREEK MUSICAL PENTASEME
-	{0x1D245, 0x1D245, prN},   // So         GREEK MUSICAL LEIMMA
-	{0x1D2C0, 0x1D2D3, prN},   // No    [20] KAKTOVIK NUMERAL ZERO..KAKTOVIK NUMERAL NINETEEN
-	{0x1D2E0, 0x1D2F3, prN},   // No    [20] MAYAN NUMERAL ZERO..MAYAN NUMERAL NINETEEN
-	{0x1D300, 0x1D356, prN},   // So    [87] MONOGRAM FOR EARTH..TETRAGRAM FOR FOSTERING
-	{0x1D360, 0x1D378, prN},   // No    [25] COUNTING ROD UNIT DIGIT ONE..TALLY MARK FIVE
-	{0x1D400, 0x1D454, prN},   // L&    [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G
-	{0x1D456, 0x1D49C, prN},   // L&    [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A
-	{0x1D49E, 0x1D49F, prN},   // Lu     [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D
-	{0x1D4A2, 0x1D4A2, prN},   // Lu         MATHEMATICAL SCRIPT CAPITAL G
-	{0x1D4A5, 0x1D4A6, prN},   // Lu     [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K
-	{0x1D4A9, 0x1D4AC, prN},   // Lu     [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q
-	{0x1D4AE, 0x1D4B9, prN},   // L&    [12] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT SMALL D
-	{0x1D4BB, 0x1D4BB, prN},   // Ll         MATHEMATICAL SCRIPT SMALL F
-	{0x1D4BD, 0x1D4C3, prN},   // Ll     [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N
-	{0x1D4C5, 0x1D505, prN},   // L&    [65] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL FRAKTUR CAPITAL B
-	{0x1D507, 0x1D50A, prN},   // Lu     [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G
-	{0x1D50D, 0x1D514, prN},   // Lu     [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q
-	{0x1D516, 0x1D51C, prN},   // Lu     [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y
-	{0x1D51E, 0x1D539, prN},   // L&    [28] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B
-	{0x1D53B, 0x1D53E, prN},   // Lu     [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G
-	{0x1D540, 0x1D544, prN},   // Lu     [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M
-	{0x1D546, 0x1D546, prN},   // Lu         MATHEMATICAL DOUBLE-STRUCK CAPITAL O
-	{0x1D54A, 0x1D550, prN},   // Lu     [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y
-	{0x1D552, 0x1D6A5, prN},   // L&   [340] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL ITALIC SMALL DOTLESS J
-	{0x1D6A8, 0x1D6C0, prN},   // Lu    [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA
-	{0x1D6C1, 0x1D6C1, prN},   // Sm         MATHEMATICAL BOLD NABLA
-	{0x1D6C2, 0x1D6DA, prN},   // Ll    [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA
-	{0x1D6DB, 0x1D6DB, prN},   // Sm         MATHEMATICAL BOLD PARTIAL DIFFERENTIAL
-	{0x1D6DC, 0x1D6FA, prN},   // L&    [31] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL ITALIC CAPITAL OMEGA
-	{0x1D6FB, 0x1D6FB, prN},   // Sm         MATHEMATICAL ITALIC NABLA
-	{0x1D6FC, 0x1D714, prN},   // Ll    [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA
-	{0x1D715, 0x1D715, prN},   // Sm         MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL
-	{0x1D716, 0x1D734, prN},   // L&    [31] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA
-	{0x1D735, 0x1D735, prN},   // Sm         MATHEMATICAL BOLD ITALIC NABLA
-	{0x1D736, 0x1D74E, prN},   // Ll    [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA
-	{0x1D74F, 0x1D74F, prN},   // Sm         MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL
-	{0x1D750, 0x1D76E, prN},   // L&    [31] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA
-	{0x1D76F, 0x1D76F, prN},   // Sm         MATHEMATICAL SANS-SERIF BOLD NABLA
-	{0x1D770, 0x1D788, prN},   // Ll    [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA
-	{0x1D789, 0x1D789, prN},   // Sm         MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL
-	{0x1D78A, 0x1D7A8, prN},   // L&    [31] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA
-	{0x1D7A9, 0x1D7A9, prN},   // Sm         MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA
-	{0x1D7AA, 0x1D7C2, prN},   // Ll    [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA
-	{0x1D7C3, 0x1D7C3, prN},   // Sm         MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL
-	{0x1D7C4, 0x1D7CB, prN},   // L&     [8] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD SMALL DIGAMMA
-	{0x1D7CE, 0x1D7FF, prN},   // Nd    [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE
-	{0x1D800, 0x1D9FF, prN},   // So   [512] SIGNWRITING HAND-FIST INDEX..SIGNWRITING HEAD
-	{0x1DA00, 0x1DA36, prN},   // Mn    [55] SIGNWRITING HEAD RIM..SIGNWRITING AIR SUCKING IN
-	{0x1DA37, 0x1DA3A, prN},   // So     [4] SIGNWRITING AIR BLOW SMALL ROTATIONS..SIGNWRITING BREATH EXHALE
-	{0x1DA3B, 0x1DA6C, prN},   // Mn    [50] SIGNWRITING MOUTH CLOSED NEUTRAL..SIGNWRITING EXCITEMENT
-	{0x1DA6D, 0x1DA74, prN},   // So     [8] SIGNWRITING SHOULDER HIP SPINE..SIGNWRITING TORSO-FLOORPLANE TWISTING
-	{0x1DA75, 0x1DA75, prN},   // Mn         SIGNWRITING UPPER BODY TILTING FROM HIP JOINTS
-	{0x1DA76, 0x1DA83, prN},   // So    [14] SIGNWRITING LIMB COMBINATION..SIGNWRITING LOCATION DEPTH
-	{0x1DA84, 0x1DA84, prN},   // Mn         SIGNWRITING LOCATION HEAD NECK
-	{0x1DA85, 0x1DA86, prN},   // So     [2] SIGNWRITING LOCATION TORSO..SIGNWRITING LOCATION LIMBS DIGITS
-	{0x1DA87, 0x1DA8B, prN},   // Po     [5] SIGNWRITING COMMA..SIGNWRITING PARENTHESIS
-	{0x1DA9B, 0x1DA9F, prN},   // Mn     [5] SIGNWRITING FILL MODIFIER-2..SIGNWRITING FILL MODIFIER-6
-	{0x1DAA1, 0x1DAAF, prN},   // Mn    [15] SIGNWRITING ROTATION MODIFIER-2..SIGNWRITING ROTATION MODIFIER-16
-	{0x1DF00, 0x1DF09, prN},   // Ll    [10] LATIN SMALL LETTER FENG DIGRAPH WITH TRILL..LATIN SMALL LETTER T WITH HOOK AND RETROFLEX HOOK
-	{0x1DF0A, 0x1DF0A, prN},   // Lo         LATIN LETTER RETROFLEX CLICK WITH RETROFLEX HOOK
-	{0x1DF0B, 0x1DF1E, prN},   // Ll    [20] LATIN SMALL LETTER ESH WITH DOUBLE BAR..LATIN SMALL LETTER S WITH CURL
-	{0x1DF25, 0x1DF2A, prN},   // Ll     [6] LATIN SMALL LETTER D WITH MID-HEIGHT LEFT HOOK..LATIN SMALL LETTER T WITH MID-HEIGHT LEFT HOOK
-	{0x1E000, 0x1E006, prN},   // Mn     [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE
-	{0x1E008, 0x1E018, prN},   // Mn    [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU
-	{0x1E01B, 0x1E021, prN},   // Mn     [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI
-	{0x1E023, 0x1E024, prN},   // Mn     [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS
-	{0x1E026, 0x1E02A, prN},   // Mn     [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA
-	{0x1E030, 0x1E06D, prN},   // Lm    [62] MODIFIER LETTER CYRILLIC SMALL A..MODIFIER LETTER CYRILLIC SMALL STRAIGHT U WITH STROKE
-	{0x1E08F, 0x1E08F, prN},   // Mn         COMBINING CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
-	{0x1E100, 0x1E12C, prN},   // Lo    [45] NYIAKENG PUACHUE HMONG LETTER MA..NYIAKENG PUACHUE HMONG LETTER W
-	{0x1E130, 0x1E136, prN},   // Mn     [7] NYIAKENG PUACHUE HMONG TONE-B..NYIAKENG PUACHUE HMONG TONE-D
-	{0x1E137, 0x1E13D, prN},   // Lm     [7] NYIAKENG PUACHUE HMONG SIGN FOR PERSON..NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER
-	{0x1E140, 0x1E149, prN},   // Nd    [10] NYIAKENG PUACHUE HMONG DIGIT ZERO..NYIAKENG PUACHUE HMONG DIGIT NINE
-	{0x1E14E, 0x1E14E, prN},   // Lo         NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ
-	{0x1E14F, 0x1E14F, prN},   // So         NYIAKENG PUACHUE HMONG CIRCLED CA
-	{0x1E290, 0x1E2AD, prN},   // Lo    [30] TOTO LETTER PA..TOTO LETTER A
-	{0x1E2AE, 0x1E2AE, prN},   // Mn         TOTO SIGN RISING TONE
-	{0x1E2C0, 0x1E2EB, prN},   // Lo    [44] WANCHO LETTER AA..WANCHO LETTER YIH
-	{0x1E2EC, 0x1E2EF, prN},   // Mn     [4] WANCHO TONE TUP..WANCHO TONE KOINI
-	{0x1E2F0, 0x1E2F9, prN},   // Nd    [10] WANCHO DIGIT ZERO..WANCHO DIGIT NINE
-	{0x1E2FF, 0x1E2FF, prN},   // Sc         WANCHO NGUN SIGN
-	{0x1E4D0, 0x1E4EA, prN},   // Lo    [27] NAG MUNDARI LETTER O..NAG MUNDARI LETTER ELL
-	{0x1E4EB, 0x1E4EB, prN},   // Lm         NAG MUNDARI SIGN OJOD
-	{0x1E4EC, 0x1E4EF, prN},   // Mn     [4] NAG MUNDARI SIGN MUHOR..NAG MUNDARI SIGN SUTUH
-	{0x1E4F0, 0x1E4F9, prN},   // Nd    [10] NAG MUNDARI DIGIT ZERO..NAG MUNDARI DIGIT NINE
-	{0x1E7E0, 0x1E7E6, prN},   // Lo     [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO
-	{0x1E7E8, 0x1E7EB, prN},   // Lo     [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE
-	{0x1E7ED, 0x1E7EE, prN},   // Lo     [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE
-	{0x1E7F0, 0x1E7FE, prN},   // Lo    [15] ETHIOPIC SYLLABLE GURAGE QWI..ETHIOPIC SYLLABLE GURAGE PWEE
-	{0x1E800, 0x1E8C4, prN},   // Lo   [197] MENDE KIKAKUI SYLLABLE M001 KI..MENDE KIKAKUI SYLLABLE M060 NYON
-	{0x1E8C7, 0x1E8CF, prN},   // No     [9] MENDE KIKAKUI DIGIT ONE..MENDE KIKAKUI DIGIT NINE
-	{0x1E8D0, 0x1E8D6, prN},   // Mn     [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS
-	{0x1E900, 0x1E943, prN},   // L&    [68] ADLAM CAPITAL LETTER ALIF..ADLAM SMALL LETTER SHA
-	{0x1E944, 0x1E94A, prN},   // Mn     [7] ADLAM ALIF LENGTHENER..ADLAM NUKTA
-	{0x1E94B, 0x1E94B, prN},   // Lm         ADLAM NASALIZATION MARK
-	{0x1E950, 0x1E959, prN},   // Nd    [10] ADLAM DIGIT ZERO..ADLAM DIGIT NINE
-	{0x1E95E, 0x1E95F, prN},   // Po     [2] ADLAM INITIAL EXCLAMATION MARK..ADLAM INITIAL QUESTION MARK
-	{0x1EC71, 0x1ECAB, prN},   // No    [59] INDIC SIYAQ NUMBER ONE..INDIC SIYAQ NUMBER PREFIXED NINE
-	{0x1ECAC, 0x1ECAC, prN},   // So         INDIC SIYAQ PLACEHOLDER
-	{0x1ECAD, 0x1ECAF, prN},   // No     [3] INDIC SIYAQ FRACTION ONE QUARTER..INDIC SIYAQ FRACTION THREE QUARTERS
-	{0x1ECB0, 0x1ECB0, prN},   // Sc         INDIC SIYAQ RUPEE MARK
-	{0x1ECB1, 0x1ECB4, prN},   // No     [4] INDIC SIYAQ NUMBER ALTERNATE ONE..INDIC SIYAQ ALTERNATE LAKH MARK
-	{0x1ED01, 0x1ED2D, prN},   // No    [45] OTTOMAN SIYAQ NUMBER ONE..OTTOMAN SIYAQ NUMBER NINETY THOUSAND
-	{0x1ED2E, 0x1ED2E, prN},   // So         OTTOMAN SIYAQ MARRATAN
-	{0x1ED2F, 0x1ED3D, prN},   // No    [15] OTTOMAN SIYAQ ALTERNATE NUMBER TWO..OTTOMAN SIYAQ FRACTION ONE SIXTH
-	{0x1EE00, 0x1EE03, prN},   // Lo     [4] ARABIC MATHEMATICAL ALEF..ARABIC MATHEMATICAL DAL
-	{0x1EE05, 0x1EE1F, prN},   // Lo    [27] ARABIC MATHEMATICAL WAW..ARABIC MATHEMATICAL DOTLESS QAF
-	{0x1EE21, 0x1EE22, prN},   // Lo     [2] ARABIC MATHEMATICAL INITIAL BEH..ARABIC MATHEMATICAL INITIAL JEEM
-	{0x1EE24, 0x1EE24, prN},   // Lo         ARABIC MATHEMATICAL INITIAL HEH
-	{0x1EE27, 0x1EE27, prN},   // Lo         ARABIC MATHEMATICAL INITIAL HAH
-	{0x1EE29, 0x1EE32, prN},   // Lo    [10] ARABIC MATHEMATICAL INITIAL YEH..ARABIC MATHEMATICAL INITIAL QAF
-	{0x1EE34, 0x1EE37, prN},   // Lo     [4] ARABIC MATHEMATICAL INITIAL SHEEN..ARABIC MATHEMATICAL INITIAL KHAH
-	{0x1EE39, 0x1EE39, prN},   // Lo         ARABIC MATHEMATICAL INITIAL DAD
-	{0x1EE3B, 0x1EE3B, prN},   // Lo         ARABIC MATHEMATICAL INITIAL GHAIN
-	{0x1EE42, 0x1EE42, prN},   // Lo         ARABIC MATHEMATICAL TAILED JEEM
-	{0x1EE47, 0x1EE47, prN},   // Lo         ARABIC MATHEMATICAL TAILED HAH
-	{0x1EE49, 0x1EE49, prN},   // Lo         ARABIC MATHEMATICAL TAILED YEH
-	{0x1EE4B, 0x1EE4B, prN},   // Lo         ARABIC MATHEMATICAL TAILED LAM
-	{0x1EE4D, 0x1EE4F, prN},   // Lo     [3] ARABIC MATHEMATICAL TAILED NOON..ARABIC MATHEMATICAL TAILED AIN
-	{0x1EE51, 0x1EE52, prN},   // Lo     [2] ARABIC MATHEMATICAL TAILED SAD..ARABIC MATHEMATICAL TAILED QAF
-	{0x1EE54, 0x1EE54, prN},   // Lo         ARABIC MATHEMATICAL TAILED SHEEN
-	{0x1EE57, 0x1EE57, prN},   // Lo         ARABIC MATHEMATICAL TAILED KHAH
-	{0x1EE59, 0x1EE59, prN},   // Lo         ARABIC MATHEMATICAL TAILED DAD
-	{0x1EE5B, 0x1EE5B, prN},   // Lo         ARABIC MATHEMATICAL TAILED GHAIN
-	{0x1EE5D, 0x1EE5D, prN},   // Lo         ARABIC MATHEMATICAL TAILED DOTLESS NOON
-	{0x1EE5F, 0x1EE5F, prN},   // Lo         ARABIC MATHEMATICAL TAILED DOTLESS QAF
-	{0x1EE61, 0x1EE62, prN},   // Lo     [2] ARABIC MATHEMATICAL STRETCHED BEH..ARABIC MATHEMATICAL STRETCHED JEEM
-	{0x1EE64, 0x1EE64, prN},   // Lo         ARABIC MATHEMATICAL STRETCHED HEH
-	{0x1EE67, 0x1EE6A, prN},   // Lo     [4] ARABIC MATHEMATICAL STRETCHED HAH..ARABIC MATHEMATICAL STRETCHED KAF
-	{0x1EE6C, 0x1EE72, prN},   // Lo     [7] ARABIC MATHEMATICAL STRETCHED MEEM..ARABIC MATHEMATICAL STRETCHED QAF
-	{0x1EE74, 0x1EE77, prN},   // Lo     [4] ARABIC MATHEMATICAL STRETCHED SHEEN..ARABIC MATHEMATICAL STRETCHED KHAH
-	{0x1EE79, 0x1EE7C, prN},   // Lo     [4] ARABIC MATHEMATICAL STRETCHED DAD..ARABIC MATHEMATICAL STRETCHED DOTLESS BEH
-	{0x1EE7E, 0x1EE7E, prN},   // Lo         ARABIC MATHEMATICAL STRETCHED DOTLESS FEH
-	{0x1EE80, 0x1EE89, prN},   // Lo    [10] ARABIC MATHEMATICAL LOOPED ALEF..ARABIC MATHEMATICAL LOOPED YEH
-	{0x1EE8B, 0x1EE9B, prN},   // Lo    [17] ARABIC MATHEMATICAL LOOPED LAM..ARABIC MATHEMATICAL LOOPED GHAIN
-	{0x1EEA1, 0x1EEA3, prN},   // Lo     [3] ARABIC MATHEMATICAL DOUBLE-STRUCK BEH..ARABIC MATHEMATICAL DOUBLE-STRUCK DAL
-	{0x1EEA5, 0x1EEA9, prN},   // Lo     [5] ARABIC MATHEMATICAL DOUBLE-STRUCK WAW..ARABIC MATHEMATICAL DOUBLE-STRUCK YEH
-	{0x1EEAB, 0x1EEBB, prN},   // Lo    [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN
-	{0x1EEF0, 0x1EEF1, prN},   // Sm     [2] ARABIC MATHEMATICAL OPERATOR MEEM WITH HAH WITH TATWEEL..ARABIC MATHEMATICAL OPERATOR HAH WITH DAL
-	{0x1F000, 0x1F003, prN},   // So     [4] MAHJONG TILE EAST WIND..MAHJONG TILE NORTH WIND
-	{0x1F004, 0x1F004, prW},   // So         MAHJONG TILE RED DRAGON
-	{0x1F005, 0x1F02B, prN},   // So    [39] MAHJONG TILE GREEN DRAGON..MAHJONG TILE BACK
-	{0x1F030, 0x1F093, prN},   // So   [100] DOMINO TILE HORIZONTAL BACK..DOMINO TILE VERTICAL-06-06
-	{0x1F0A0, 0x1F0AE, prN},   // So    [15] PLAYING CARD BACK..PLAYING CARD KING OF SPADES
-	{0x1F0B1, 0x1F0BF, prN},   // So    [15] PLAYING CARD ACE OF HEARTS..PLAYING CARD RED JOKER
-	{0x1F0C1, 0x1F0CE, prN},   // So    [14] PLAYING CARD ACE OF DIAMONDS..PLAYING CARD KING OF DIAMONDS
-	{0x1F0CF, 0x1F0CF, prW},   // So         PLAYING CARD BLACK JOKER
-	{0x1F0D1, 0x1F0F5, prN},   // So    [37] PLAYING CARD ACE OF CLUBS..PLAYING CARD TRUMP-21
-	{0x1F100, 0x1F10A, prA},   // No    [11] DIGIT ZERO FULL STOP..DIGIT NINE COMMA
-	{0x1F10B, 0x1F10C, prN},   // No     [2] DINGBAT CIRCLED SANS-SERIF DIGIT ZERO..DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ZERO
-	{0x1F10D, 0x1F10F, prN},   // So     [3] CIRCLED ZERO WITH SLASH..CIRCLED DOLLAR SIGN WITH OVERLAID BACKSLASH
-	{0x1F110, 0x1F12D, prA},   // So    [30] PARENTHESIZED LATIN CAPITAL LETTER A..CIRCLED CD
-	{0x1F12E, 0x1F12F, prN},   // So     [2] CIRCLED WZ..COPYLEFT SYMBOL
-	{0x1F130, 0x1F169, prA},   // So    [58] SQUARED LATIN CAPITAL LETTER A..NEGATIVE CIRCLED LATIN CAPITAL LETTER Z
-	{0x1F16A, 0x1F16F, prN},   // So     [6] RAISED MC SIGN..CIRCLED HUMAN FIGURE
-	{0x1F170, 0x1F18D, prA},   // So    [30] NEGATIVE SQUARED LATIN CAPITAL LETTER A..NEGATIVE SQUARED SA
-	{0x1F18E, 0x1F18E, prW},   // So         NEGATIVE SQUARED AB
-	{0x1F18F, 0x1F190, prA},   // So     [2] NEGATIVE SQUARED WC..SQUARE DJ
-	{0x1F191, 0x1F19A, prW},   // So    [10] SQUARED CL..SQUARED VS
-	{0x1F19B, 0x1F1AC, prA},   // So    [18] SQUARED THREE D..SQUARED VOD
-	{0x1F1AD, 0x1F1AD, prN},   // So         MASK WORK SYMBOL
-	{0x1F1E6, 0x1F1FF, prN},   // So    [26] REGIONAL INDICATOR SYMBOL LETTER A..REGIONAL INDICATOR SYMBOL LETTER Z
-	{0x1F200, 0x1F202, prW},   // So     [3] SQUARE HIRAGANA HOKA..SQUARED KATAKANA SA
-	{0x1F210, 0x1F23B, prW},   // So    [44] SQUARED CJK UNIFIED IDEOGRAPH-624B..SQUARED CJK UNIFIED IDEOGRAPH-914D
-	{0x1F240, 0x1F248, prW},   // So     [9] TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C..TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557
-	{0x1F250, 0x1F251, prW},   // So     [2] CIRCLED IDEOGRAPH ADVANTAGE..CIRCLED IDEOGRAPH ACCEPT
-	{0x1F260, 0x1F265, prW},   // So     [6] ROUNDED SYMBOL FOR FU..ROUNDED SYMBOL FOR CAI
-	{0x1F300, 0x1F320, prW},   // So    [33] CYCLONE..SHOOTING STAR
-	{0x1F321, 0x1F32C, prN},   // So    [12] THERMOMETER..WIND BLOWING FACE
-	{0x1F32D, 0x1F335, prW},   // So     [9] HOT DOG..CACTUS
-	{0x1F336, 0x1F336, prN},   // So         HOT PEPPER
-	{0x1F337, 0x1F37C, prW},   // So    [70] TULIP..BABY BOTTLE
-	{0x1F37D, 0x1F37D, prN},   // So         FORK AND KNIFE WITH PLATE
-	{0x1F37E, 0x1F393, prW},   // So    [22] BOTTLE WITH POPPING CORK..GRADUATION CAP
-	{0x1F394, 0x1F39F, prN},   // So    [12] HEART WITH TIP ON THE LEFT..ADMISSION TICKETS
-	{0x1F3A0, 0x1F3CA, prW},   // So    [43] CAROUSEL HORSE..SWIMMER
-	{0x1F3CB, 0x1F3CE, prN},   // So     [4] WEIGHT LIFTER..RACING CAR
-	{0x1F3CF, 0x1F3D3, prW},   // So     [5] CRICKET BAT AND BALL..TABLE TENNIS PADDLE AND BALL
-	{0x1F3D4, 0x1F3DF, prN},   // So    [12] SNOW CAPPED MOUNTAIN..STADIUM
-	{0x1F3E0, 0x1F3F0, prW},   // So    [17] HOUSE BUILDING..EUROPEAN CASTLE
-	{0x1F3F1, 0x1F3F3, prN},   // So     [3] WHITE PENNANT..WAVING WHITE FLAG
-	{0x1F3F4, 0x1F3F4, prW},   // So         WAVING BLACK FLAG
-	{0x1F3F5, 0x1F3F7, prN},   // So     [3] ROSETTE..LABEL
-	{0x1F3F8, 0x1F3FA, prW},   // So     [3] BADMINTON RACQUET AND SHUTTLECOCK..AMPHORA
-	{0x1F3FB, 0x1F3FF, prW},   // Sk     [5] EMOJI MODIFIER FITZPATRICK TYPE-1-2..EMOJI MODIFIER FITZPATRICK TYPE-6
-	{0x1F400, 0x1F43E, prW},   // So    [63] RAT..PAW PRINTS
-	{0x1F43F, 0x1F43F, prN},   // So         CHIPMUNK
-	{0x1F440, 0x1F440, prW},   // So         EYES
-	{0x1F441, 0x1F441, prN},   // So         EYE
-	{0x1F442, 0x1F4FC, prW},   // So   [187] EAR..VIDEOCASSETTE
-	{0x1F4FD, 0x1F4FE, prN},   // So     [2] FILM PROJECTOR..PORTABLE STEREO
-	{0x1F4FF, 0x1F53D, prW},   // So    [63] PRAYER BEADS..DOWN-POINTING SMALL RED TRIANGLE
-	{0x1F53E, 0x1F54A, prN},   // So    [13] LOWER RIGHT SHADOWED WHITE CIRCLE..DOVE OF PEACE
-	{0x1F54B, 0x1F54E, prW},   // So     [4] KAABA..MENORAH WITH NINE BRANCHES
-	{0x1F54F, 0x1F54F, prN},   // So         BOWL OF HYGIEIA
-	{0x1F550, 0x1F567, prW},   // So    [24] CLOCK FACE ONE OCLOCK..CLOCK FACE TWELVE-THIRTY
-	{0x1F568, 0x1F579, prN},   // So    [18] RIGHT SPEAKER..JOYSTICK
-	{0x1F57A, 0x1F57A, prW},   // So         MAN DANCING
-	{0x1F57B, 0x1F594, prN},   // So    [26] LEFT HAND TELEPHONE RECEIVER..REVERSED VICTORY HAND
-	{0x1F595, 0x1F596, prW},   // So     [2] REVERSED HAND WITH MIDDLE FINGER EXTENDED..RAISED HAND WITH PART BETWEEN MIDDLE AND RING FINGERS
-	{0x1F597, 0x1F5A3, prN},   // So    [13] WHITE DOWN POINTING LEFT HAND INDEX..BLACK DOWN POINTING BACKHAND INDEX
-	{0x1F5A4, 0x1F5A4, prW},   // So         BLACK HEART
-	{0x1F5A5, 0x1F5FA, prN},   // So    [86] DESKTOP COMPUTER..WORLD MAP
-	{0x1F5FB, 0x1F5FF, prW},   // So     [5] MOUNT FUJI..MOYAI
-	{0x1F600, 0x1F64F, prW},   // So    [80] GRINNING FACE..PERSON WITH FOLDED HANDS
-	{0x1F650, 0x1F67F, prN},   // So    [48] NORTH WEST POINTING LEAF..REVERSE CHECKER BOARD
-	{0x1F680, 0x1F6C5, prW},   // So    [70] ROCKET..LEFT LUGGAGE
-	{0x1F6C6, 0x1F6CB, prN},   // So     [6] TRIANGLE WITH ROUNDED CORNERS..COUCH AND LAMP
-	{0x1F6CC, 0x1F6CC, prW},   // So         SLEEPING ACCOMMODATION
-	{0x1F6CD, 0x1F6CF, prN},   // So     [3] SHOPPING BAGS..BED
-	{0x1F6D0, 0x1F6D2, prW},   // So     [3] PLACE OF WORSHIP..SHOPPING TROLLEY
-	{0x1F6D3, 0x1F6D4, prN},   // So     [2] STUPA..PAGODA
-	{0x1F6D5, 0x1F6D7, prW},   // So     [3] HINDU TEMPLE..ELEVATOR
-	{0x1F6DC, 0x1F6DF, prW},   // So     [4] WIRELESS..RING BUOY
-	{0x1F6E0, 0x1F6EA, prN},   // So    [11] HAMMER AND WRENCH..NORTHEAST-POINTING AIRPLANE
-	{0x1F6EB, 0x1F6EC, prW},   // So     [2] AIRPLANE DEPARTURE..AIRPLANE ARRIVING
-	{0x1F6F0, 0x1F6F3, prN},   // So     [4] SATELLITE..PASSENGER SHIP
-	{0x1F6F4, 0x1F6FC, prW},   // So     [9] SCOOTER..ROLLER SKATE
-	{0x1F700, 0x1F776, prN},   // So   [119] ALCHEMICAL SYMBOL FOR QUINTESSENCE..LUNAR ECLIPSE
-	{0x1F77B, 0x1F77F, prN},   // So     [5] HAUMEA..ORCUS
-	{0x1F780, 0x1F7D9, prN},   // So    [90] BLACK LEFT-POINTING ISOSCELES RIGHT TRIANGLE..NINE POINTED WHITE STAR
-	{0x1F7E0, 0x1F7EB, prW},   // So    [12] LARGE ORANGE CIRCLE..LARGE BROWN SQUARE
-	{0x1F7F0, 0x1F7F0, prW},   // So         HEAVY EQUALS SIGN
-	{0x1F800, 0x1F80B, prN},   // So    [12] LEFTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD..DOWNWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD
-	{0x1F810, 0x1F847, prN},   // So    [56] LEFTWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD..DOWNWARDS HEAVY ARROW
-	{0x1F850, 0x1F859, prN},   // So    [10] LEFTWARDS SANS-SERIF ARROW..UP DOWN SANS-SERIF ARROW
-	{0x1F860, 0x1F887, prN},   // So    [40] WIDE-HEADED LEFTWARDS LIGHT BARB ARROW..WIDE-HEADED SOUTH WEST VERY HEAVY BARB ARROW
-	{0x1F890, 0x1F8AD, prN},   // So    [30] LEFTWARDS TRIANGLE ARROWHEAD..WHITE ARROW SHAFT WIDTH TWO THIRDS
-	{0x1F8B0, 0x1F8B1, prN},   // So     [2] ARROW POINTING UPWARDS THEN NORTH WEST..ARROW POINTING RIGHTWARDS THEN CURVING SOUTH WEST
-	{0x1F900, 0x1F90B, prN},   // So    [12] CIRCLED CROSS FORMEE WITH FOUR DOTS..DOWNWARD FACING NOTCHED HOOK WITH DOT
-	{0x1F90C, 0x1F93A, prW},   // So    [47] PINCHED FINGERS..FENCER
-	{0x1F93B, 0x1F93B, prN},   // So         MODERN PENTATHLON
-	{0x1F93C, 0x1F945, prW},   // So    [10] WRESTLERS..GOAL NET
-	{0x1F946, 0x1F946, prN},   // So         RIFLE
-	{0x1F947, 0x1F9FF, prW},   // So   [185] FIRST PLACE MEDAL..NAZAR AMULET
-	{0x1FA00, 0x1FA53, prN},   // So    [84] NEUTRAL CHESS KING..BLACK CHESS KNIGHT-BISHOP
-	{0x1FA60, 0x1FA6D, prN},   // So    [14] XIANGQI RED GENERAL..XIANGQI BLACK SOLDIER
-	{0x1FA70, 0x1FA7C, prW},   // So    [13] BALLET SHOES..CRUTCH
-	{0x1FA80, 0x1FA88, prW},   // So     [9] YO-YO..FLUTE
-	{0x1FA90, 0x1FABD, prW},   // So    [46] RINGED PLANET..WING
-	{0x1FABF, 0x1FAC5, prW},   // So     [7] GOOSE..PERSON WITH CROWN
-	{0x1FACE, 0x1FADB, prW},   // So    [14] MOOSE..PEA POD
-	{0x1FAE0, 0x1FAE8, prW},   // So     [9] MELTING FACE..SHAKING FACE
-	{0x1FAF0, 0x1FAF8, prW},   // So     [9] HAND WITH INDEX FINGER AND THUMB CROSSED..RIGHTWARDS PUSHING HAND
-	{0x1FB00, 0x1FB92, prN},   // So   [147] BLOCK SEXTANT-1..UPPER HALF INVERSE MEDIUM SHADE AND LOWER HALF BLOCK
-	{0x1FB94, 0x1FBCA, prN},   // So    [55] LEFT HALF INVERSE MEDIUM SHADE AND RIGHT HALF BLOCK..WHITE UP-POINTING CHEVRON
-	{0x1FBF0, 0x1FBF9, prN},   // Nd    [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE
-	{0x20000, 0x2A6DF, prW},   // Lo [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF
-	{0x2A6E0, 0x2A6FF, prW},   // Cn    [32] <reserved-2A6E0>..<reserved-2A6FF>
-	{0x2A700, 0x2B739, prW},   // Lo  [4154] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B739
-	{0x2B73A, 0x2B73F, prW},   // Cn     [6] <reserved-2B73A>..<reserved-2B73F>
-	{0x2B740, 0x2B81D, prW},   // Lo   [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D
-	{0x2B81E, 0x2B81F, prW},   // Cn     [2] <reserved-2B81E>..<reserved-2B81F>
-	{0x2B820, 0x2CEA1, prW},   // Lo  [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1
-	{0x2CEA2, 0x2CEAF, prW},   // Cn    [14] <reserved-2CEA2>..<reserved-2CEAF>
-	{0x2CEB0, 0x2EBE0, prW},   // Lo  [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0
-	{0x2EBE1, 0x2F7FF, prW},   // Cn  [3103] <reserved-2EBE1>..<reserved-2F7FF>
-	{0x2F800, 0x2FA1D, prW},   // Lo   [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
-	{0x2FA1E, 0x2FA1F, prW},   // Cn     [2] <reserved-2FA1E>..<reserved-2FA1F>
-	{0x2FA20, 0x2FFFD, prW},   // Cn  [1502] <reserved-2FA20>..<reserved-2FFFD>
-	{0x30000, 0x3134A, prW},   // Lo  [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A
-	{0x3134B, 0x3134F, prW},   // Cn     [5] <reserved-3134B>..<reserved-3134F>
-	{0x31350, 0x323AF, prW},   // Lo  [4192] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-323AF
-	{0x323B0, 0x3FFFD, prW},   // Cn [56398] <reserved-323B0>..<reserved-3FFFD>
-	{0xE0001, 0xE0001, prN},   // Cf         LANGUAGE TAG
-	{0xE0020, 0xE007F, prN},   // Cf    [96] TAG SPACE..CANCEL TAG
-	{0xE0100, 0xE01EF, prA},   // Mn   [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256
-	{0xF0000, 0xFFFFD, prA},   // Co [65534] <private-use-F0000>..<private-use-FFFFD>
-	{0x100000, 0x10FFFD, prA}, // Co [65534] <private-use-100000>..<private-use-10FFFD>
-}

+ 0 - 295
v2/vendor/github.com/rivo/uniseg/emojipresentation.go

@@ -1,295 +0,0 @@
-// Code generated via go generate from gen_properties.go. DO NOT EDIT.
-
-package uniseg
-
-// emojiPresentation are taken from
-//
-// and
-// https://unicode.org/Public/15.0.0/ucd/emoji/emoji-data.txt
-// ("Extended_Pictographic" only)
-// on September 5, 2023. See https://www.unicode.org/license.html for the Unicode
-// license agreement.
-var emojiPresentation = [][3]int{
-	{0x231A, 0x231B, prEmojiPresentation},   // E0.6   [2] (⌚..⌛)    watch..hourglass done
-	{0x23E9, 0x23EC, prEmojiPresentation},   // E0.6   [4] (⏩..⏬)    fast-forward button..fast down button
-	{0x23F0, 0x23F0, prEmojiPresentation},   // E0.6   [1] (⏰)       alarm clock
-	{0x23F3, 0x23F3, prEmojiPresentation},   // E0.6   [1] (⏳)       hourglass not done
-	{0x25FD, 0x25FE, prEmojiPresentation},   // E0.6   [2] (◽..◾)    white medium-small square..black medium-small square
-	{0x2614, 0x2615, prEmojiPresentation},   // E0.6   [2] (☔..☕)    umbrella with rain drops..hot beverage
-	{0x2648, 0x2653, prEmojiPresentation},   // E0.6  [12] (♈..♓)    Aries..Pisces
-	{0x267F, 0x267F, prEmojiPresentation},   // E0.6   [1] (♿)       wheelchair symbol
-	{0x2693, 0x2693, prEmojiPresentation},   // E0.6   [1] (⚓)       anchor
-	{0x26A1, 0x26A1, prEmojiPresentation},   // E0.6   [1] (⚡)       high voltage
-	{0x26AA, 0x26AB, prEmojiPresentation},   // E0.6   [2] (⚪..⚫)    white circle..black circle
-	{0x26BD, 0x26BE, prEmojiPresentation},   // E0.6   [2] (⚽..⚾)    soccer ball..baseball
-	{0x26C4, 0x26C5, prEmojiPresentation},   // E0.6   [2] (⛄..⛅)    snowman without snow..sun behind cloud
-	{0x26CE, 0x26CE, prEmojiPresentation},   // E0.6   [1] (⛎)       Ophiuchus
-	{0x26D4, 0x26D4, prEmojiPresentation},   // E0.6   [1] (⛔)       no entry
-	{0x26EA, 0x26EA, prEmojiPresentation},   // E0.6   [1] (⛪)       church
-	{0x26F2, 0x26F3, prEmojiPresentation},   // E0.6   [2] (⛲..⛳)    fountain..flag in hole
-	{0x26F5, 0x26F5, prEmojiPresentation},   // E0.6   [1] (⛵)       sailboat
-	{0x26FA, 0x26FA, prEmojiPresentation},   // E0.6   [1] (⛺)       tent
-	{0x26FD, 0x26FD, prEmojiPresentation},   // E0.6   [1] (⛽)       fuel pump
-	{0x2705, 0x2705, prEmojiPresentation},   // E0.6   [1] (✅)       check mark button
-	{0x270A, 0x270B, prEmojiPresentation},   // E0.6   [2] (✊..✋)    raised fist..raised hand
-	{0x2728, 0x2728, prEmojiPresentation},   // E0.6   [1] (✨)       sparkles
-	{0x274C, 0x274C, prEmojiPresentation},   // E0.6   [1] (❌)       cross mark
-	{0x274E, 0x274E, prEmojiPresentation},   // E0.6   [1] (❎)       cross mark button
-	{0x2753, 0x2755, prEmojiPresentation},   // E0.6   [3] (❓..❕)    red question mark..white exclamation mark
-	{0x2757, 0x2757, prEmojiPresentation},   // E0.6   [1] (❗)       red exclamation mark
-	{0x2795, 0x2797, prEmojiPresentation},   // E0.6   [3] (➕..➗)    plus..divide
-	{0x27B0, 0x27B0, prEmojiPresentation},   // E0.6   [1] (➰)       curly loop
-	{0x27BF, 0x27BF, prEmojiPresentation},   // E1.0   [1] (➿)       double curly loop
-	{0x2B1B, 0x2B1C, prEmojiPresentation},   // E0.6   [2] (⬛..⬜)    black large square..white large square
-	{0x2B50, 0x2B50, prEmojiPresentation},   // E0.6   [1] (⭐)       star
-	{0x2B55, 0x2B55, prEmojiPresentation},   // E0.6   [1] (⭕)       hollow red circle
-	{0x1F004, 0x1F004, prEmojiPresentation}, // E0.6   [1] (🀄)       mahjong red dragon
-	{0x1F0CF, 0x1F0CF, prEmojiPresentation}, // E0.6   [1] (🃏)       joker
-	{0x1F18E, 0x1F18E, prEmojiPresentation}, // E0.6   [1] (🆎)       AB button (blood type)
-	{0x1F191, 0x1F19A, prEmojiPresentation}, // E0.6  [10] (🆑..🆚)    CL button..VS button
-	{0x1F1E6, 0x1F1FF, prEmojiPresentation}, // E0.0  [26] (🇦..🇿)    regional indicator symbol letter a..regional indicator symbol letter z
-	{0x1F201, 0x1F201, prEmojiPresentation}, // E0.6   [1] (🈁)       Japanese “here” button
-	{0x1F21A, 0x1F21A, prEmojiPresentation}, // E0.6   [1] (🈚)       Japanese “free of charge” button
-	{0x1F22F, 0x1F22F, prEmojiPresentation}, // E0.6   [1] (🈯)       Japanese “reserved” button
-	{0x1F232, 0x1F236, prEmojiPresentation}, // E0.6   [5] (🈲..🈶)    Japanese “prohibited” button..Japanese “not free of charge” button
-	{0x1F238, 0x1F23A, prEmojiPresentation}, // E0.6   [3] (🈸..🈺)    Japanese “application” button..Japanese “open for business” button
-	{0x1F250, 0x1F251, prEmojiPresentation}, // E0.6   [2] (🉐..🉑)    Japanese “bargain” button..Japanese “acceptable” button
-	{0x1F300, 0x1F30C, prEmojiPresentation}, // E0.6  [13] (🌀..🌌)    cyclone..milky way
-	{0x1F30D, 0x1F30E, prEmojiPresentation}, // E0.7   [2] (🌍..🌎)    globe showing Europe-Africa..globe showing Americas
-	{0x1F30F, 0x1F30F, prEmojiPresentation}, // E0.6   [1] (🌏)       globe showing Asia-Australia
-	{0x1F310, 0x1F310, prEmojiPresentation}, // E1.0   [1] (🌐)       globe with meridians
-	{0x1F311, 0x1F311, prEmojiPresentation}, // E0.6   [1] (🌑)       new moon
-	{0x1F312, 0x1F312, prEmojiPresentation}, // E1.0   [1] (🌒)       waxing crescent moon
-	{0x1F313, 0x1F315, prEmojiPresentation}, // E0.6   [3] (🌓..🌕)    first quarter moon..full moon
-	{0x1F316, 0x1F318, prEmojiPresentation}, // E1.0   [3] (🌖..🌘)    waning gibbous moon..waning crescent moon
-	{0x1F319, 0x1F319, prEmojiPresentation}, // E0.6   [1] (🌙)       crescent moon
-	{0x1F31A, 0x1F31A, prEmojiPresentation}, // E1.0   [1] (🌚)       new moon face
-	{0x1F31B, 0x1F31B, prEmojiPresentation}, // E0.6   [1] (🌛)       first quarter moon face
-	{0x1F31C, 0x1F31C, prEmojiPresentation}, // E0.7   [1] (🌜)       last quarter moon face
-	{0x1F31D, 0x1F31E, prEmojiPresentation}, // E1.0   [2] (🌝..🌞)    full moon face..sun with face
-	{0x1F31F, 0x1F320, prEmojiPresentation}, // E0.6   [2] (🌟..🌠)    glowing star..shooting star
-	{0x1F32D, 0x1F32F, prEmojiPresentation}, // E1.0   [3] (🌭..🌯)    hot dog..burrito
-	{0x1F330, 0x1F331, prEmojiPresentation}, // E0.6   [2] (🌰..🌱)    chestnut..seedling
-	{0x1F332, 0x1F333, prEmojiPresentation}, // E1.0   [2] (🌲..🌳)    evergreen tree..deciduous tree
-	{0x1F334, 0x1F335, prEmojiPresentation}, // E0.6   [2] (🌴..🌵)    palm tree..cactus
-	{0x1F337, 0x1F34A, prEmojiPresentation}, // E0.6  [20] (🌷..🍊)    tulip..tangerine
-	{0x1F34B, 0x1F34B, prEmojiPresentation}, // E1.0   [1] (🍋)       lemon
-	{0x1F34C, 0x1F34F, prEmojiPresentation}, // E0.6   [4] (🍌..🍏)    banana..green apple
-	{0x1F350, 0x1F350, prEmojiPresentation}, // E1.0   [1] (🍐)       pear
-	{0x1F351, 0x1F37B, prEmojiPresentation}, // E0.6  [43] (🍑..🍻)    peach..clinking beer mugs
-	{0x1F37C, 0x1F37C, prEmojiPresentation}, // E1.0   [1] (🍼)       baby bottle
-	{0x1F37E, 0x1F37F, prEmojiPresentation}, // E1.0   [2] (🍾..🍿)    bottle with popping cork..popcorn
-	{0x1F380, 0x1F393, prEmojiPresentation}, // E0.6  [20] (🎀..🎓)    ribbon..graduation cap
-	{0x1F3A0, 0x1F3C4, prEmojiPresentation}, // E0.6  [37] (🎠..🏄)    carousel horse..person surfing
-	{0x1F3C5, 0x1F3C5, prEmojiPresentation}, // E1.0   [1] (🏅)       sports medal
-	{0x1F3C6, 0x1F3C6, prEmojiPresentation}, // E0.6   [1] (🏆)       trophy
-	{0x1F3C7, 0x1F3C7, prEmojiPresentation}, // E1.0   [1] (🏇)       horse racing
-	{0x1F3C8, 0x1F3C8, prEmojiPresentation}, // E0.6   [1] (🏈)       american football
-	{0x1F3C9, 0x1F3C9, prEmojiPresentation}, // E1.0   [1] (🏉)       rugby football
-	{0x1F3CA, 0x1F3CA, prEmojiPresentation}, // E0.6   [1] (🏊)       person swimming
-	{0x1F3CF, 0x1F3D3, prEmojiPresentation}, // E1.0   [5] (🏏..🏓)    cricket game..ping pong
-	{0x1F3E0, 0x1F3E3, prEmojiPresentation}, // E0.6   [4] (🏠..🏣)    house..Japanese post office
-	{0x1F3E4, 0x1F3E4, prEmojiPresentation}, // E1.0   [1] (🏤)       post office
-	{0x1F3E5, 0x1F3F0, prEmojiPresentation}, // E0.6  [12] (🏥..🏰)    hospital..castle
-	{0x1F3F4, 0x1F3F4, prEmojiPresentation}, // E1.0   [1] (🏴)       black flag
-	{0x1F3F8, 0x1F407, prEmojiPresentation}, // E1.0  [16] (🏸..🐇)    badminton..rabbit
-	{0x1F408, 0x1F408, prEmojiPresentation}, // E0.7   [1] (🐈)       cat
-	{0x1F409, 0x1F40B, prEmojiPresentation}, // E1.0   [3] (🐉..🐋)    dragon..whale
-	{0x1F40C, 0x1F40E, prEmojiPresentation}, // E0.6   [3] (🐌..🐎)    snail..horse
-	{0x1F40F, 0x1F410, prEmojiPresentation}, // E1.0   [2] (🐏..🐐)    ram..goat
-	{0x1F411, 0x1F412, prEmojiPresentation}, // E0.6   [2] (🐑..🐒)    ewe..monkey
-	{0x1F413, 0x1F413, prEmojiPresentation}, // E1.0   [1] (🐓)       rooster
-	{0x1F414, 0x1F414, prEmojiPresentation}, // E0.6   [1] (🐔)       chicken
-	{0x1F415, 0x1F415, prEmojiPresentation}, // E0.7   [1] (🐕)       dog
-	{0x1F416, 0x1F416, prEmojiPresentation}, // E1.0   [1] (🐖)       pig
-	{0x1F417, 0x1F429, prEmojiPresentation}, // E0.6  [19] (🐗..🐩)    boar..poodle
-	{0x1F42A, 0x1F42A, prEmojiPresentation}, // E1.0   [1] (🐪)       camel
-	{0x1F42B, 0x1F43E, prEmojiPresentation}, // E0.6  [20] (🐫..🐾)    two-hump camel..paw prints
-	{0x1F440, 0x1F440, prEmojiPresentation}, // E0.6   [1] (👀)       eyes
-	{0x1F442, 0x1F464, prEmojiPresentation}, // E0.6  [35] (👂..👤)    ear..bust in silhouette
-	{0x1F465, 0x1F465, prEmojiPresentation}, // E1.0   [1] (👥)       busts in silhouette
-	{0x1F466, 0x1F46B, prEmojiPresentation}, // E0.6   [6] (👦..👫)    boy..woman and man holding hands
-	{0x1F46C, 0x1F46D, prEmojiPresentation}, // E1.0   [2] (👬..👭)    men holding hands..women holding hands
-	{0x1F46E, 0x1F4AC, prEmojiPresentation}, // E0.6  [63] (👮..💬)    police officer..speech balloon
-	{0x1F4AD, 0x1F4AD, prEmojiPresentation}, // E1.0   [1] (💭)       thought balloon
-	{0x1F4AE, 0x1F4B5, prEmojiPresentation}, // E0.6   [8] (💮..💵)    white flower..dollar banknote
-	{0x1F4B6, 0x1F4B7, prEmojiPresentation}, // E1.0   [2] (💶..💷)    euro banknote..pound banknote
-	{0x1F4B8, 0x1F4EB, prEmojiPresentation}, // E0.6  [52] (💸..📫)    money with wings..closed mailbox with raised flag
-	{0x1F4EC, 0x1F4ED, prEmojiPresentation}, // E0.7   [2] (📬..📭)    open mailbox with raised flag..open mailbox with lowered flag
-	{0x1F4EE, 0x1F4EE, prEmojiPresentation}, // E0.6   [1] (📮)       postbox
-	{0x1F4EF, 0x1F4EF, prEmojiPresentation}, // E1.0   [1] (📯)       postal horn
-	{0x1F4F0, 0x1F4F4, prEmojiPresentation}, // E0.6   [5] (📰..📴)    newspaper..mobile phone off
-	{0x1F4F5, 0x1F4F5, prEmojiPresentation}, // E1.0   [1] (📵)       no mobile phones
-	{0x1F4F6, 0x1F4F7, prEmojiPresentation}, // E0.6   [2] (📶..📷)    antenna bars..camera
-	{0x1F4F8, 0x1F4F8, prEmojiPresentation}, // E1.0   [1] (📸)       camera with flash
-	{0x1F4F9, 0x1F4FC, prEmojiPresentation}, // E0.6   [4] (📹..📼)    video camera..videocassette
-	{0x1F4FF, 0x1F502, prEmojiPresentation}, // E1.0   [4] (📿..🔂)    prayer beads..repeat single button
-	{0x1F503, 0x1F503, prEmojiPresentation}, // E0.6   [1] (🔃)       clockwise vertical arrows
-	{0x1F504, 0x1F507, prEmojiPresentation}, // E1.0   [4] (🔄..🔇)    counterclockwise arrows button..muted speaker
-	{0x1F508, 0x1F508, prEmojiPresentation}, // E0.7   [1] (🔈)       speaker low volume
-	{0x1F509, 0x1F509, prEmojiPresentation}, // E1.0   [1] (🔉)       speaker medium volume
-	{0x1F50A, 0x1F514, prEmojiPresentation}, // E0.6  [11] (🔊..🔔)    speaker high volume..bell
-	{0x1F515, 0x1F515, prEmojiPresentation}, // E1.0   [1] (🔕)       bell with slash
-	{0x1F516, 0x1F52B, prEmojiPresentation}, // E0.6  [22] (🔖..🔫)    bookmark..water pistol
-	{0x1F52C, 0x1F52D, prEmojiPresentation}, // E1.0   [2] (🔬..🔭)    microscope..telescope
-	{0x1F52E, 0x1F53D, prEmojiPresentation}, // E0.6  [16] (🔮..🔽)    crystal ball..downwards button
-	{0x1F54B, 0x1F54E, prEmojiPresentation}, // E1.0   [4] (🕋..🕎)    kaaba..menorah
-	{0x1F550, 0x1F55B, prEmojiPresentation}, // E0.6  [12] (🕐..🕛)    one o’clock..twelve o’clock
-	{0x1F55C, 0x1F567, prEmojiPresentation}, // E0.7  [12] (🕜..🕧)    one-thirty..twelve-thirty
-	{0x1F57A, 0x1F57A, prEmojiPresentation}, // E3.0   [1] (🕺)       man dancing
-	{0x1F595, 0x1F596, prEmojiPresentation}, // E1.0   [2] (🖕..🖖)    middle finger..vulcan salute
-	{0x1F5A4, 0x1F5A4, prEmojiPresentation}, // E3.0   [1] (🖤)       black heart
-	{0x1F5FB, 0x1F5FF, prEmojiPresentation}, // E0.6   [5] (🗻..🗿)    mount fuji..moai
-	{0x1F600, 0x1F600, prEmojiPresentation}, // E1.0   [1] (😀)       grinning face
-	{0x1F601, 0x1F606, prEmojiPresentation}, // E0.6   [6] (😁..😆)    beaming face with smiling eyes..grinning squinting face
-	{0x1F607, 0x1F608, prEmojiPresentation}, // E1.0   [2] (😇..😈)    smiling face with halo..smiling face with horns
-	{0x1F609, 0x1F60D, prEmojiPresentation}, // E0.6   [5] (😉..😍)    winking face..smiling face with heart-eyes
-	{0x1F60E, 0x1F60E, prEmojiPresentation}, // E1.0   [1] (😎)       smiling face with sunglasses
-	{0x1F60F, 0x1F60F, prEmojiPresentation}, // E0.6   [1] (😏)       smirking face
-	{0x1F610, 0x1F610, prEmojiPresentation}, // E0.7   [1] (😐)       neutral face
-	{0x1F611, 0x1F611, prEmojiPresentation}, // E1.0   [1] (😑)       expressionless face
-	{0x1F612, 0x1F614, prEmojiPresentation}, // E0.6   [3] (😒..😔)    unamused face..pensive face
-	{0x1F615, 0x1F615, prEmojiPresentation}, // E1.0   [1] (😕)       confused face
-	{0x1F616, 0x1F616, prEmojiPresentation}, // E0.6   [1] (😖)       confounded face
-	{0x1F617, 0x1F617, prEmojiPresentation}, // E1.0   [1] (😗)       kissing face
-	{0x1F618, 0x1F618, prEmojiPresentation}, // E0.6   [1] (😘)       face blowing a kiss
-	{0x1F619, 0x1F619, prEmojiPresentation}, // E1.0   [1] (😙)       kissing face with smiling eyes
-	{0x1F61A, 0x1F61A, prEmojiPresentation}, // E0.6   [1] (😚)       kissing face with closed eyes
-	{0x1F61B, 0x1F61B, prEmojiPresentation}, // E1.0   [1] (😛)       face with tongue
-	{0x1F61C, 0x1F61E, prEmojiPresentation}, // E0.6   [3] (😜..😞)    winking face with tongue..disappointed face
-	{0x1F61F, 0x1F61F, prEmojiPresentation}, // E1.0   [1] (😟)       worried face
-	{0x1F620, 0x1F625, prEmojiPresentation}, // E0.6   [6] (😠..😥)    angry face..sad but relieved face
-	{0x1F626, 0x1F627, prEmojiPresentation}, // E1.0   [2] (😦..😧)    frowning face with open mouth..anguished face
-	{0x1F628, 0x1F62B, prEmojiPresentation}, // E0.6   [4] (😨..😫)    fearful face..tired face
-	{0x1F62C, 0x1F62C, prEmojiPresentation}, // E1.0   [1] (😬)       grimacing face
-	{0x1F62D, 0x1F62D, prEmojiPresentation}, // E0.6   [1] (😭)       loudly crying face
-	{0x1F62E, 0x1F62F, prEmojiPresentation}, // E1.0   [2] (😮..😯)    face with open mouth..hushed face
-	{0x1F630, 0x1F633, prEmojiPresentation}, // E0.6   [4] (😰..😳)    anxious face with sweat..flushed face
-	{0x1F634, 0x1F634, prEmojiPresentation}, // E1.0   [1] (😴)       sleeping face
-	{0x1F635, 0x1F635, prEmojiPresentation}, // E0.6   [1] (😵)       face with crossed-out eyes
-	{0x1F636, 0x1F636, prEmojiPresentation}, // E1.0   [1] (😶)       face without mouth
-	{0x1F637, 0x1F640, prEmojiPresentation}, // E0.6  [10] (😷..🙀)    face with medical mask..weary cat
-	{0x1F641, 0x1F644, prEmojiPresentation}, // E1.0   [4] (🙁..🙄)    slightly frowning face..face with rolling eyes
-	{0x1F645, 0x1F64F, prEmojiPresentation}, // E0.6  [11] (🙅..🙏)    person gesturing NO..folded hands
-	{0x1F680, 0x1F680, prEmojiPresentation}, // E0.6   [1] (🚀)       rocket
-	{0x1F681, 0x1F682, prEmojiPresentation}, // E1.0   [2] (🚁..🚂)    helicopter..locomotive
-	{0x1F683, 0x1F685, prEmojiPresentation}, // E0.6   [3] (🚃..🚅)    railway car..bullet train
-	{0x1F686, 0x1F686, prEmojiPresentation}, // E1.0   [1] (🚆)       train
-	{0x1F687, 0x1F687, prEmojiPresentation}, // E0.6   [1] (🚇)       metro
-	{0x1F688, 0x1F688, prEmojiPresentation}, // E1.0   [1] (🚈)       light rail
-	{0x1F689, 0x1F689, prEmojiPresentation}, // E0.6   [1] (🚉)       station
-	{0x1F68A, 0x1F68B, prEmojiPresentation}, // E1.0   [2] (🚊..🚋)    tram..tram car
-	{0x1F68C, 0x1F68C, prEmojiPresentation}, // E0.6   [1] (🚌)       bus
-	{0x1F68D, 0x1F68D, prEmojiPresentation}, // E0.7   [1] (🚍)       oncoming bus
-	{0x1F68E, 0x1F68E, prEmojiPresentation}, // E1.0   [1] (🚎)       trolleybus
-	{0x1F68F, 0x1F68F, prEmojiPresentation}, // E0.6   [1] (🚏)       bus stop
-	{0x1F690, 0x1F690, prEmojiPresentation}, // E1.0   [1] (🚐)       minibus
-	{0x1F691, 0x1F693, prEmojiPresentation}, // E0.6   [3] (🚑..🚓)    ambulance..police car
-	{0x1F694, 0x1F694, prEmojiPresentation}, // E0.7   [1] (🚔)       oncoming police car
-	{0x1F695, 0x1F695, prEmojiPresentation}, // E0.6   [1] (🚕)       taxi
-	{0x1F696, 0x1F696, prEmojiPresentation}, // E1.0   [1] (🚖)       oncoming taxi
-	{0x1F697, 0x1F697, prEmojiPresentation}, // E0.6   [1] (🚗)       automobile
-	{0x1F698, 0x1F698, prEmojiPresentation}, // E0.7   [1] (🚘)       oncoming automobile
-	{0x1F699, 0x1F69A, prEmojiPresentation}, // E0.6   [2] (🚙..🚚)    sport utility vehicle..delivery truck
-	{0x1F69B, 0x1F6A1, prEmojiPresentation}, // E1.0   [7] (🚛..🚡)    articulated lorry..aerial tramway
-	{0x1F6A2, 0x1F6A2, prEmojiPresentation}, // E0.6   [1] (🚢)       ship
-	{0x1F6A3, 0x1F6A3, prEmojiPresentation}, // E1.0   [1] (🚣)       person rowing boat
-	{0x1F6A4, 0x1F6A5, prEmojiPresentation}, // E0.6   [2] (🚤..🚥)    speedboat..horizontal traffic light
-	{0x1F6A6, 0x1F6A6, prEmojiPresentation}, // E1.0   [1] (🚦)       vertical traffic light
-	{0x1F6A7, 0x1F6AD, prEmojiPresentation}, // E0.6   [7] (🚧..🚭)    construction..no smoking
-	{0x1F6AE, 0x1F6B1, prEmojiPresentation}, // E1.0   [4] (🚮..🚱)    litter in bin sign..non-potable water
-	{0x1F6B2, 0x1F6B2, prEmojiPresentation}, // E0.6   [1] (🚲)       bicycle
-	{0x1F6B3, 0x1F6B5, prEmojiPresentation}, // E1.0   [3] (🚳..🚵)    no bicycles..person mountain biking
-	{0x1F6B6, 0x1F6B6, prEmojiPresentation}, // E0.6   [1] (🚶)       person walking
-	{0x1F6B7, 0x1F6B8, prEmojiPresentation}, // E1.0   [2] (🚷..🚸)    no pedestrians..children crossing
-	{0x1F6B9, 0x1F6BE, prEmojiPresentation}, // E0.6   [6] (🚹..🚾)    men’s room..water closet
-	{0x1F6BF, 0x1F6BF, prEmojiPresentation}, // E1.0   [1] (🚿)       shower
-	{0x1F6C0, 0x1F6C0, prEmojiPresentation}, // E0.6   [1] (🛀)       person taking bath
-	{0x1F6C1, 0x1F6C5, prEmojiPresentation}, // E1.0   [5] (🛁..🛅)    bathtub..left luggage
-	{0x1F6CC, 0x1F6CC, prEmojiPresentation}, // E1.0   [1] (🛌)       person in bed
-	{0x1F6D0, 0x1F6D0, prEmojiPresentation}, // E1.0   [1] (🛐)       place of worship
-	{0x1F6D1, 0x1F6D2, prEmojiPresentation}, // E3.0   [2] (🛑..🛒)    stop sign..shopping cart
-	{0x1F6D5, 0x1F6D5, prEmojiPresentation}, // E12.0  [1] (🛕)       hindu temple
-	{0x1F6D6, 0x1F6D7, prEmojiPresentation}, // E13.0  [2] (🛖..🛗)    hut..elevator
-	{0x1F6DC, 0x1F6DC, prEmojiPresentation}, // E15.0  [1] (🛜)       wireless
-	{0x1F6DD, 0x1F6DF, prEmojiPresentation}, // E14.0  [3] (🛝..🛟)    playground slide..ring buoy
-	{0x1F6EB, 0x1F6EC, prEmojiPresentation}, // E1.0   [2] (🛫..🛬)    airplane departure..airplane arrival
-	{0x1F6F4, 0x1F6F6, prEmojiPresentation}, // E3.0   [3] (🛴..🛶)    kick scooter..canoe
-	{0x1F6F7, 0x1F6F8, prEmojiPresentation}, // E5.0   [2] (🛷..🛸)    sled..flying saucer
-	{0x1F6F9, 0x1F6F9, prEmojiPresentation}, // E11.0  [1] (🛹)       skateboard
-	{0x1F6FA, 0x1F6FA, prEmojiPresentation}, // E12.0  [1] (🛺)       auto rickshaw
-	{0x1F6FB, 0x1F6FC, prEmojiPresentation}, // E13.0  [2] (🛻..🛼)    pickup truck..roller skate
-	{0x1F7E0, 0x1F7EB, prEmojiPresentation}, // E12.0 [12] (🟠..🟫)    orange circle..brown square
-	{0x1F7F0, 0x1F7F0, prEmojiPresentation}, // E14.0  [1] (🟰)       heavy equals sign
-	{0x1F90C, 0x1F90C, prEmojiPresentation}, // E13.0  [1] (🤌)       pinched fingers
-	{0x1F90D, 0x1F90F, prEmojiPresentation}, // E12.0  [3] (🤍..🤏)    white heart..pinching hand
-	{0x1F910, 0x1F918, prEmojiPresentation}, // E1.0   [9] (🤐..🤘)    zipper-mouth face..sign of the horns
-	{0x1F919, 0x1F91E, prEmojiPresentation}, // E3.0   [6] (🤙..🤞)    call me hand..crossed fingers
-	{0x1F91F, 0x1F91F, prEmojiPresentation}, // E5.0   [1] (🤟)       love-you gesture
-	{0x1F920, 0x1F927, prEmojiPresentation}, // E3.0   [8] (🤠..🤧)    cowboy hat face..sneezing face
-	{0x1F928, 0x1F92F, prEmojiPresentation}, // E5.0   [8] (🤨..🤯)    face with raised eyebrow..exploding head
-	{0x1F930, 0x1F930, prEmojiPresentation}, // E3.0   [1] (🤰)       pregnant woman
-	{0x1F931, 0x1F932, prEmojiPresentation}, // E5.0   [2] (🤱..🤲)    breast-feeding..palms up together
-	{0x1F933, 0x1F93A, prEmojiPresentation}, // E3.0   [8] (🤳..🤺)    selfie..person fencing
-	{0x1F93C, 0x1F93E, prEmojiPresentation}, // E3.0   [3] (🤼..🤾)    people wrestling..person playing handball
-	{0x1F93F, 0x1F93F, prEmojiPresentation}, // E12.0  [1] (🤿)       diving mask
-	{0x1F940, 0x1F945, prEmojiPresentation}, // E3.0   [6] (🥀..🥅)    wilted flower..goal net
-	{0x1F947, 0x1F94B, prEmojiPresentation}, // E3.0   [5] (🥇..🥋)    1st place medal..martial arts uniform
-	{0x1F94C, 0x1F94C, prEmojiPresentation}, // E5.0   [1] (🥌)       curling stone
-	{0x1F94D, 0x1F94F, prEmojiPresentation}, // E11.0  [3] (🥍..🥏)    lacrosse..flying disc
-	{0x1F950, 0x1F95E, prEmojiPresentation}, // E3.0  [15] (🥐..🥞)    croissant..pancakes
-	{0x1F95F, 0x1F96B, prEmojiPresentation}, // E5.0  [13] (🥟..🥫)    dumpling..canned food
-	{0x1F96C, 0x1F970, prEmojiPresentation}, // E11.0  [5] (🥬..🥰)    leafy green..smiling face with hearts
-	{0x1F971, 0x1F971, prEmojiPresentation}, // E12.0  [1] (🥱)       yawning face
-	{0x1F972, 0x1F972, prEmojiPresentation}, // E13.0  [1] (🥲)       smiling face with tear
-	{0x1F973, 0x1F976, prEmojiPresentation}, // E11.0  [4] (🥳..🥶)    partying face..cold face
-	{0x1F977, 0x1F978, prEmojiPresentation}, // E13.0  [2] (🥷..🥸)    ninja..disguised face
-	{0x1F979, 0x1F979, prEmojiPresentation}, // E14.0  [1] (🥹)       face holding back tears
-	{0x1F97A, 0x1F97A, prEmojiPresentation}, // E11.0  [1] (🥺)       pleading face
-	{0x1F97B, 0x1F97B, prEmojiPresentation}, // E12.0  [1] (🥻)       sari
-	{0x1F97C, 0x1F97F, prEmojiPresentation}, // E11.0  [4] (🥼..🥿)    lab coat..flat shoe
-	{0x1F980, 0x1F984, prEmojiPresentation}, // E1.0   [5] (🦀..🦄)    crab..unicorn
-	{0x1F985, 0x1F991, prEmojiPresentation}, // E3.0  [13] (🦅..🦑)    eagle..squid
-	{0x1F992, 0x1F997, prEmojiPresentation}, // E5.0   [6] (🦒..🦗)    giraffe..cricket
-	{0x1F998, 0x1F9A2, prEmojiPresentation}, // E11.0 [11] (🦘..🦢)    kangaroo..swan
-	{0x1F9A3, 0x1F9A4, prEmojiPresentation}, // E13.0  [2] (🦣..🦤)    mammoth..dodo
-	{0x1F9A5, 0x1F9AA, prEmojiPresentation}, // E12.0  [6] (🦥..🦪)    sloth..oyster
-	{0x1F9AB, 0x1F9AD, prEmojiPresentation}, // E13.0  [3] (🦫..🦭)    beaver..seal
-	{0x1F9AE, 0x1F9AF, prEmojiPresentation}, // E12.0  [2] (🦮..🦯)    guide dog..white cane
-	{0x1F9B0, 0x1F9B9, prEmojiPresentation}, // E11.0 [10] (🦰..🦹)    red hair..supervillain
-	{0x1F9BA, 0x1F9BF, prEmojiPresentation}, // E12.0  [6] (🦺..🦿)    safety vest..mechanical leg
-	{0x1F9C0, 0x1F9C0, prEmojiPresentation}, // E1.0   [1] (🧀)       cheese wedge
-	{0x1F9C1, 0x1F9C2, prEmojiPresentation}, // E11.0  [2] (🧁..🧂)    cupcake..salt
-	{0x1F9C3, 0x1F9CA, prEmojiPresentation}, // E12.0  [8] (🧃..🧊)    beverage box..ice
-	{0x1F9CB, 0x1F9CB, prEmojiPresentation}, // E13.0  [1] (🧋)       bubble tea
-	{0x1F9CC, 0x1F9CC, prEmojiPresentation}, // E14.0  [1] (🧌)       troll
-	{0x1F9CD, 0x1F9CF, prEmojiPresentation}, // E12.0  [3] (🧍..🧏)    person standing..deaf person
-	{0x1F9D0, 0x1F9E6, prEmojiPresentation}, // E5.0  [23] (🧐..🧦)    face with monocle..socks
-	{0x1F9E7, 0x1F9FF, prEmojiPresentation}, // E11.0 [25] (🧧..🧿)    red envelope..nazar amulet
-	{0x1FA70, 0x1FA73, prEmojiPresentation}, // E12.0  [4] (🩰..🩳)    ballet shoes..shorts
-	{0x1FA74, 0x1FA74, prEmojiPresentation}, // E13.0  [1] (🩴)       thong sandal
-	{0x1FA75, 0x1FA77, prEmojiPresentation}, // E15.0  [3] (🩵..🩷)    light blue heart..pink heart
-	{0x1FA78, 0x1FA7A, prEmojiPresentation}, // E12.0  [3] (🩸..🩺)    drop of blood..stethoscope
-	{0x1FA7B, 0x1FA7C, prEmojiPresentation}, // E14.0  [2] (🩻..🩼)    x-ray..crutch
-	{0x1FA80, 0x1FA82, prEmojiPresentation}, // E12.0  [3] (🪀..🪂)    yo-yo..parachute
-	{0x1FA83, 0x1FA86, prEmojiPresentation}, // E13.0  [4] (🪃..🪆)    boomerang..nesting dolls
-	{0x1FA87, 0x1FA88, prEmojiPresentation}, // E15.0  [2] (🪇..🪈)    maracas..flute
-	{0x1FA90, 0x1FA95, prEmojiPresentation}, // E12.0  [6] (🪐..🪕)    ringed planet..banjo
-	{0x1FA96, 0x1FAA8, prEmojiPresentation}, // E13.0 [19] (🪖..🪨)    military helmet..rock
-	{0x1FAA9, 0x1FAAC, prEmojiPresentation}, // E14.0  [4] (🪩..🪬)    mirror ball..hamsa
-	{0x1FAAD, 0x1FAAF, prEmojiPresentation}, // E15.0  [3] (🪭..🪯)    folding hand fan..khanda
-	{0x1FAB0, 0x1FAB6, prEmojiPresentation}, // E13.0  [7] (🪰..🪶)    fly..feather
-	{0x1FAB7, 0x1FABA, prEmojiPresentation}, // E14.0  [4] (🪷..🪺)    lotus..nest with eggs
-	{0x1FABB, 0x1FABD, prEmojiPresentation}, // E15.0  [3] (🪻..🪽)    hyacinth..wing
-	{0x1FABF, 0x1FABF, prEmojiPresentation}, // E15.0  [1] (🪿)       goose
-	{0x1FAC0, 0x1FAC2, prEmojiPresentation}, // E13.0  [3] (🫀..🫂)    anatomical heart..people hugging
-	{0x1FAC3, 0x1FAC5, prEmojiPresentation}, // E14.0  [3] (🫃..🫅)    pregnant man..person with crown
-	{0x1FACE, 0x1FACF, prEmojiPresentation}, // E15.0  [2] (🫎..🫏)    moose..donkey
-	{0x1FAD0, 0x1FAD6, prEmojiPresentation}, // E13.0  [7] (🫐..🫖)    blueberries..teapot
-	{0x1FAD7, 0x1FAD9, prEmojiPresentation}, // E14.0  [3] (🫗..🫙)    pouring liquid..jar
-	{0x1FADA, 0x1FADB, prEmojiPresentation}, // E15.0  [2] (🫚..🫛)    ginger root..pea pod
-	{0x1FAE0, 0x1FAE7, prEmojiPresentation}, // E14.0  [8] (🫠..🫧)    melting face..bubbles
-	{0x1FAE8, 0x1FAE8, prEmojiPresentation}, // E15.0  [1] (🫨)       shaking face
-	{0x1FAF0, 0x1FAF6, prEmojiPresentation}, // E14.0  [7] (🫰..🫶)    hand with index finger and thumb crossed..heart hands
-	{0x1FAF7, 0x1FAF8, prEmojiPresentation}, // E15.0  [2] (🫷..🫸)    leftwards pushing hand..rightwards pushing hand
-}

+ 0 - 215
v2/vendor/github.com/rivo/uniseg/gen_breaktest.go

@@ -1,215 +0,0 @@
-//go:build generate
-
-// This program generates a Go containing a slice of test cases based on the
-// Unicode Character Database auxiliary data files. The command line arguments
-// are as follows:
-//
-//   1. The name of the Unicode data file (just the filename, without extension).
-//   2. The name of the locally generated Go file.
-//   3. The name of the slice containing the test cases.
-//   4. The name of the generator, for logging purposes.
-//
-//go:generate go run gen_breaktest.go GraphemeBreakTest graphemebreak_test.go graphemeBreakTestCases graphemes
-//go:generate go run gen_breaktest.go WordBreakTest wordbreak_test.go wordBreakTestCases words
-//go:generate go run gen_breaktest.go SentenceBreakTest sentencebreak_test.go sentenceBreakTestCases sentences
-//go:generate go run gen_breaktest.go LineBreakTest linebreak_test.go lineBreakTestCases lines
-
-package main
-
-import (
-	"bufio"
-	"bytes"
-	"errors"
-	"fmt"
-	"go/format"
-	"io/ioutil"
-	"log"
-	"net/http"
-	"os"
-	"time"
-)
-
-// We want to test against a specific version rather than the latest. When the
-// package is upgraded to a new version, change these to generate new tests.
-const (
-	testCaseURL = `https://www.unicode.org/Public/15.0.0/ucd/auxiliary/%s.txt`
-)
-
-func main() {
-	if len(os.Args) < 5 {
-		fmt.Println("Not enough arguments, see code for details")
-		os.Exit(1)
-	}
-
-	log.SetPrefix("gen_breaktest (" + os.Args[4] + "): ")
-	log.SetFlags(0)
-
-	// Read text of testcases and parse into Go source code.
-	src, err := parse(fmt.Sprintf(testCaseURL, os.Args[1]))
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	// Format the Go code.
-	formatted, err := format.Source(src)
-	if err != nil {
-		log.Fatalln("gofmt:", err)
-	}
-
-	// Write it out.
-	log.Print("Writing to ", os.Args[2])
-	if err := ioutil.WriteFile(os.Args[2], formatted, 0644); err != nil {
-		log.Fatal(err)
-	}
-}
-
-// parse reads a break text file, either from a local file or from a URL. It
-// parses the file data into Go source code representing the test cases.
-func parse(url string) ([]byte, error) {
-	log.Printf("Parsing %s", url)
-	res, err := http.Get(url)
-	if err != nil {
-		return nil, err
-	}
-	body := res.Body
-	defer body.Close()
-
-	buf := new(bytes.Buffer)
-	buf.Grow(120 << 10)
-	buf.WriteString(`// Code generated via go generate from gen_breaktest.go. DO NOT EDIT.
-
-package uniseg
-
-// ` + os.Args[3] + ` are Grapheme testcases taken from
-// ` + url + `
-// on ` + time.Now().Format("January 2, 2006") + `. See
-// https://www.unicode.org/license.html for the Unicode license agreement.
-var ` + os.Args[3] + ` = []testCase {
-`)
-
-	sc := bufio.NewScanner(body)
-	num := 1
-	var line []byte
-	original := make([]byte, 0, 64)
-	expected := make([]byte, 0, 64)
-	for sc.Scan() {
-		num++
-		line = sc.Bytes()
-		if len(line) == 0 || line[0] == '#' {
-			continue
-		}
-		var comment []byte
-		if i := bytes.IndexByte(line, '#'); i >= 0 {
-			comment = bytes.TrimSpace(line[i+1:])
-			line = bytes.TrimSpace(line[:i])
-		}
-		original, expected, err := parseRuneSequence(line, original[:0], expected[:0])
-		if err != nil {
-			return nil, fmt.Errorf(`line %d: %v: %q`, num, err, line)
-		}
-		fmt.Fprintf(buf, "\t{original: \"%s\", expected: %s}, // %s\n", original, expected, comment)
-	}
-	if err := sc.Err(); err != nil {
-		return nil, err
-	}
-
-	// Check for final "# EOF", useful check if we're streaming via HTTP
-	if !bytes.Equal(line, []byte("# EOF")) {
-		return nil, fmt.Errorf(`line %d: exected "# EOF" as final line, got %q`, num, line)
-	}
-	buf.WriteString("}\n")
-	return buf.Bytes(), nil
-}
-
-// Used by parseRuneSequence to match input via bytes.HasPrefix.
-var (
-	prefixBreak     = []byte("÷ ")
-	prefixDontBreak = []byte("× ")
-	breakOk         = []byte("÷")
-	breakNo         = []byte("×")
-)
-
-// parseRuneSequence parses a rune + breaking opportunity sequence from b
-// and appends the Go code for testcase.original to orig
-// and appends the Go code for testcase.expected to exp.
-// It retuns the new orig and exp slices.
-//
-// E.g. for the input b="÷ 0020 × 0308 ÷ 1F1E6 ÷"
-// it will append
-//
-//	"\u0020\u0308\U0001F1E6"
-//
-// and "[][]rune{{0x0020,0x0308},{0x1F1E6},}"
-// to orig and exp respectively.
-//
-// The formatting of exp is expected to be cleaned up by gofmt or format.Source.
-// Note we explicitly require the sequence to start with ÷ and we implicitly
-// require it to end with ÷.
-func parseRuneSequence(b, orig, exp []byte) ([]byte, []byte, error) {
-	// Check for and remove first ÷ or ×.
-	if !bytes.HasPrefix(b, prefixBreak) && !bytes.HasPrefix(b, prefixDontBreak) {
-		return nil, nil, errors.New("expected ÷ or × as first character")
-	}
-	if bytes.HasPrefix(b, prefixBreak) {
-		b = b[len(prefixBreak):]
-	} else {
-		b = b[len(prefixDontBreak):]
-	}
-
-	boundary := true
-	exp = append(exp, "[][]rune{"...)
-	for len(b) > 0 {
-		if boundary {
-			exp = append(exp, '{')
-		}
-		exp = append(exp, "0x"...)
-		// Find end of hex digits.
-		var i int
-		for i = 0; i < len(b) && b[i] != ' '; i++ {
-			if d := b[i]; ('0' <= d || d <= '9') ||
-				('A' <= d || d <= 'F') ||
-				('a' <= d || d <= 'f') {
-				continue
-			}
-			return nil, nil, errors.New("bad hex digit")
-		}
-		switch i {
-		case 4:
-			orig = append(orig, "\\u"...)
-		case 5:
-			orig = append(orig, "\\U000"...)
-		default:
-			return nil, nil, errors.New("unsupport code point hex length")
-		}
-		orig = append(orig, b[:i]...)
-		exp = append(exp, b[:i]...)
-		b = b[i:]
-
-		// Check for space between hex and ÷ or ×.
-		if len(b) < 1 || b[0] != ' ' {
-			return nil, nil, errors.New("bad input")
-		}
-		b = b[1:]
-
-		// Check for next boundary.
-		switch {
-		case bytes.HasPrefix(b, breakOk):
-			boundary = true
-			b = b[len(breakOk):]
-		case bytes.HasPrefix(b, breakNo):
-			boundary = false
-			b = b[len(breakNo):]
-		default:
-			return nil, nil, errors.New("missing ÷ or ×")
-		}
-		if boundary {
-			exp = append(exp, '}')
-		}
-		exp = append(exp, ',')
-		if len(b) > 0 && b[0] == ' ' {
-			b = b[1:]
-		}
-	}
-	exp = append(exp, '}')
-	return orig, exp, nil
-}

+ 0 - 261
v2/vendor/github.com/rivo/uniseg/gen_properties.go

@@ -1,261 +0,0 @@
-//go:build generate
-
-// This program generates a property file in Go file from Unicode Character
-// Database auxiliary data files. The command line arguments are as follows:
-//
-//  1. The name of the Unicode data file (just the filename, without extension).
-//     Can be "-" (to skip) if the emoji flag is included.
-//  2. The name of the locally generated Go file.
-//  3. The name of the slice mapping code points to properties.
-//  4. The name of the generator, for logging purposes.
-//  5. (Optional) Flags, comma-separated. The following flags are available:
-//     - "emojis=<property>": include the specified emoji properties (e.g.
-//     "Extended_Pictographic").
-//     - "gencat": include general category properties.
-//
-//go:generate go run gen_properties.go auxiliary/GraphemeBreakProperty graphemeproperties.go graphemeCodePoints graphemes emojis=Extended_Pictographic
-//go:generate go run gen_properties.go auxiliary/WordBreakProperty wordproperties.go workBreakCodePoints words emojis=Extended_Pictographic
-//go:generate go run gen_properties.go auxiliary/SentenceBreakProperty sentenceproperties.go sentenceBreakCodePoints sentences
-//go:generate go run gen_properties.go LineBreak lineproperties.go lineBreakCodePoints lines gencat
-//go:generate go run gen_properties.go EastAsianWidth eastasianwidth.go eastAsianWidth eastasianwidth
-//go:generate go run gen_properties.go - emojipresentation.go emojiPresentation emojipresentation emojis=Emoji_Presentation
-package main
-
-import (
-	"bufio"
-	"bytes"
-	"errors"
-	"fmt"
-	"go/format"
-	"io/ioutil"
-	"log"
-	"net/http"
-	"os"
-	"regexp"
-	"sort"
-	"strconv"
-	"strings"
-	"time"
-)
-
-// We want to test against a specific version rather than the latest. When the
-// package is upgraded to a new version, change these to generate new tests.
-const (
-	propertyURL = `https://www.unicode.org/Public/15.0.0/ucd/%s.txt`
-	emojiURL    = `https://unicode.org/Public/15.0.0/ucd/emoji/emoji-data.txt`
-)
-
-// The regular expression for a line containing a code point range property.
-var propertyPattern = regexp.MustCompile(`^([0-9A-F]{4,6})(\.\.([0-9A-F]{4,6}))?\s*;\s*([A-Za-z0-9_]+)\s*#\s(.+)$`)
-
-func main() {
-	if len(os.Args) < 5 {
-		fmt.Println("Not enough arguments, see code for details")
-		os.Exit(1)
-	}
-
-	log.SetPrefix("gen_properties (" + os.Args[4] + "): ")
-	log.SetFlags(0)
-
-	// Parse flags.
-	flags := make(map[string]string)
-	if len(os.Args) >= 6 {
-		for _, flag := range strings.Split(os.Args[5], ",") {
-			flagFields := strings.Split(flag, "=")
-			if len(flagFields) == 1 {
-				flags[flagFields[0]] = "yes"
-			} else {
-				flags[flagFields[0]] = flagFields[1]
-			}
-		}
-	}
-
-	// Parse the text file and generate Go source code from it.
-	_, includeGeneralCategory := flags["gencat"]
-	var mainURL string
-	if os.Args[1] != "-" {
-		mainURL = fmt.Sprintf(propertyURL, os.Args[1])
-	}
-	src, err := parse(mainURL, flags["emojis"], includeGeneralCategory)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	// Format the Go code.
-	formatted, err := format.Source([]byte(src))
-	if err != nil {
-		log.Fatal("gofmt:", err)
-	}
-
-	// Save it to the (local) target file.
-	log.Print("Writing to ", os.Args[2])
-	if err := ioutil.WriteFile(os.Args[2], formatted, 0644); err != nil {
-		log.Fatal(err)
-	}
-}
-
-// parse parses the Unicode Properties text files located at the given URLs and
-// returns their equivalent Go source code to be used in the uniseg package. If
-// "emojiProperty" is not an empty string, emoji code points for that emoji
-// property (e.g. "Extended_Pictographic") will be included. In those cases, you
-// may pass an empty "propertyURL" to skip parsing the main properties file. If
-// "includeGeneralCategory" is true, the Unicode General Category property will
-// be extracted from the comments and included in the output.
-func parse(propertyURL, emojiProperty string, includeGeneralCategory bool) (string, error) {
-	if propertyURL == "" && emojiProperty == "" {
-		return "", errors.New("no properties to parse")
-	}
-
-	// Temporary buffer to hold properties.
-	var properties [][4]string
-
-	// Open the first URL.
-	if propertyURL != "" {
-		log.Printf("Parsing %s", propertyURL)
-		res, err := http.Get(propertyURL)
-		if err != nil {
-			return "", err
-		}
-		in1 := res.Body
-		defer in1.Close()
-
-		// Parse it.
-		scanner := bufio.NewScanner(in1)
-		num := 0
-		for scanner.Scan() {
-			num++
-			line := strings.TrimSpace(scanner.Text())
-
-			// Skip comments and empty lines.
-			if strings.HasPrefix(line, "#") || line == "" {
-				continue
-			}
-
-			// Everything else must be a code point range, a property and a comment.
-			from, to, property, comment, err := parseProperty(line)
-			if err != nil {
-				return "", fmt.Errorf("%s line %d: %v", os.Args[4], num, err)
-			}
-			properties = append(properties, [4]string{from, to, property, comment})
-		}
-		if err := scanner.Err(); err != nil {
-			return "", err
-		}
-	}
-
-	// Open the second URL.
-	if emojiProperty != "" {
-		log.Printf("Parsing %s", emojiURL)
-		res, err := http.Get(emojiURL)
-		if err != nil {
-			return "", err
-		}
-		in2 := res.Body
-		defer in2.Close()
-
-		// Parse it.
-		scanner := bufio.NewScanner(in2)
-		num := 0
-		for scanner.Scan() {
-			num++
-			line := scanner.Text()
-
-			// Skip comments, empty lines, and everything not containing
-			// "Extended_Pictographic".
-			if strings.HasPrefix(line, "#") || line == "" || !strings.Contains(line, emojiProperty) {
-				continue
-			}
-
-			// Everything else must be a code point range, a property and a comment.
-			from, to, property, comment, err := parseProperty(line)
-			if err != nil {
-				return "", fmt.Errorf("emojis line %d: %v", num, err)
-			}
-			properties = append(properties, [4]string{from, to, property, comment})
-		}
-		if err := scanner.Err(); err != nil {
-			return "", err
-		}
-	}
-
-	// Avoid overflow during binary search.
-	if len(properties) >= 1<<31 {
-		return "", errors.New("too many properties")
-	}
-
-	// Sort properties.
-	sort.Slice(properties, func(i, j int) bool {
-		left, _ := strconv.ParseUint(properties[i][0], 16, 64)
-		right, _ := strconv.ParseUint(properties[j][0], 16, 64)
-		return left < right
-	})
-
-	// Header.
-	var (
-		buf          bytes.Buffer
-		emojiComment string
-	)
-	columns := 3
-	if includeGeneralCategory {
-		columns = 4
-	}
-	if emojiURL != "" {
-		emojiComment = `
-// and
-// ` + emojiURL + `
-// ("Extended_Pictographic" only)`
-	}
-	buf.WriteString(`// Code generated via go generate from gen_properties.go. DO NOT EDIT.
-
-package uniseg
-
-// ` + os.Args[3] + ` are taken from
-// ` + propertyURL + emojiComment + `
-// on ` + time.Now().Format("January 2, 2006") + `. See https://www.unicode.org/license.html for the Unicode
-// license agreement.
-var ` + os.Args[3] + ` = [][` + strconv.Itoa(columns) + `]int{
-	`)
-
-	// Properties.
-	for _, prop := range properties {
-		if includeGeneralCategory {
-			generalCategory := "gc" + prop[3][:2]
-			if generalCategory == "gcL&" {
-				generalCategory = "gcLC"
-			}
-			prop[3] = prop[3][3:]
-			fmt.Fprintf(&buf, "{0x%s,0x%s,%s,%s}, // %s\n", prop[0], prop[1], translateProperty("pr", prop[2]), generalCategory, prop[3])
-		} else {
-			fmt.Fprintf(&buf, "{0x%s,0x%s,%s}, // %s\n", prop[0], prop[1], translateProperty("pr", prop[2]), prop[3])
-		}
-	}
-
-	// Tail.
-	buf.WriteString("}")
-
-	return buf.String(), nil
-}
-
-// parseProperty parses a line of the Unicode properties text file containing a
-// property for a code point range and returns it along with its comment.
-func parseProperty(line string) (from, to, property, comment string, err error) {
-	fields := propertyPattern.FindStringSubmatch(line)
-	if fields == nil {
-		err = errors.New("no property found")
-		return
-	}
-	from = fields[1]
-	to = fields[3]
-	if to == "" {
-		to = from
-	}
-	property = fields[4]
-	comment = fields[5]
-	return
-}
-
-// translateProperty translates a property name as used in the Unicode data file
-// to a variable used in the Go code.
-func translateProperty(prefix, property string) string {
-	return prefix + strings.ReplaceAll(property, "_", "")
-}

+ 0 - 331
v2/vendor/github.com/rivo/uniseg/grapheme.go

@@ -1,331 +0,0 @@
-package uniseg
-
-import "unicode/utf8"
-
-// Graphemes implements an iterator over Unicode grapheme clusters, or
-// user-perceived characters. While iterating, it also provides information
-// about word boundaries, sentence boundaries, line breaks, and monospace
-// character widths.
-//
-// After constructing the class via [NewGraphemes] for a given string "str",
-// [Graphemes.Next] is called for every grapheme cluster in a loop until it
-// returns false. Inside the loop, information about the grapheme cluster as
-// well as boundary information and character width is available via the various
-// methods (see examples below).
-//
-// This class basically wraps the [StepString] parser and provides a convenient
-// interface to it. If you are only interested in some parts of this package's
-// functionality, using the specialized functions starting with "First" is
-// almost always faster.
-type Graphemes struct {
-	// The original string.
-	original string
-
-	// The remaining string to be parsed.
-	remaining string
-
-	// The current grapheme cluster.
-	cluster string
-
-	// The byte offset of the current grapheme cluster relative to the original
-	// string.
-	offset int
-
-	// The current boundary information of the [Step] parser.
-	boundaries int
-
-	// The current state of the [Step] parser.
-	state int
-}
-
-// NewGraphemes returns a new grapheme cluster iterator.
-func NewGraphemes(str string) *Graphemes {
-	return &Graphemes{
-		original:  str,
-		remaining: str,
-		state:     -1,
-	}
-}
-
-// Next advances the iterator by one grapheme cluster and returns false if no
-// clusters are left. This function must be called before the first cluster is
-// accessed.
-func (g *Graphemes) Next() bool {
-	if len(g.remaining) == 0 {
-		// We're already past the end.
-		g.state = -2
-		g.cluster = ""
-		return false
-	}
-	g.offset += len(g.cluster)
-	g.cluster, g.remaining, g.boundaries, g.state = StepString(g.remaining, g.state)
-	return true
-}
-
-// Runes returns a slice of runes (code points) which corresponds to the current
-// grapheme cluster. If the iterator is already past the end or [Graphemes.Next]
-// has not yet been called, nil is returned.
-func (g *Graphemes) Runes() []rune {
-	if g.state < 0 {
-		return nil
-	}
-	return []rune(g.cluster)
-}
-
-// Str returns a substring of the original string which corresponds to the
-// current grapheme cluster. If the iterator is already past the end or
-// [Graphemes.Next] has not yet been called, an empty string is returned.
-func (g *Graphemes) Str() string {
-	return g.cluster
-}
-
-// Bytes returns a byte slice which corresponds to the current grapheme cluster.
-// If the iterator is already past the end or [Graphemes.Next] has not yet been
-// called, nil is returned.
-func (g *Graphemes) Bytes() []byte {
-	if g.state < 0 {
-		return nil
-	}
-	return []byte(g.cluster)
-}
-
-// Positions returns the interval of the current grapheme cluster as byte
-// positions into the original string. The first returned value "from" indexes
-// the first byte and the second returned value "to" indexes the first byte that
-// is not included anymore, i.e. str[from:to] is the current grapheme cluster of
-// the original string "str". If [Graphemes.Next] has not yet been called, both
-// values are 0. If the iterator is already past the end, both values are 1.
-func (g *Graphemes) Positions() (int, int) {
-	if g.state == -1 {
-		return 0, 0
-	} else if g.state == -2 {
-		return 1, 1
-	}
-	return g.offset, g.offset + len(g.cluster)
-}
-
-// IsWordBoundary returns true if a word ends after the current grapheme
-// cluster.
-func (g *Graphemes) IsWordBoundary() bool {
-	if g.state < 0 {
-		return true
-	}
-	return g.boundaries&MaskWord != 0
-}
-
-// IsSentenceBoundary returns true if a sentence ends after the current
-// grapheme cluster.
-func (g *Graphemes) IsSentenceBoundary() bool {
-	if g.state < 0 {
-		return true
-	}
-	return g.boundaries&MaskSentence != 0
-}
-
-// LineBreak returns whether the line can be broken after the current grapheme
-// cluster. A value of [LineDontBreak] means the line may not be broken, a value
-// of [LineMustBreak] means the line must be broken, and a value of
-// [LineCanBreak] means the line may or may not be broken.
-func (g *Graphemes) LineBreak() int {
-	if g.state == -1 {
-		return LineDontBreak
-	}
-	if g.state == -2 {
-		return LineMustBreak
-	}
-	return g.boundaries & MaskLine
-}
-
-// Width returns the monospace width of the current grapheme cluster.
-func (g *Graphemes) Width() int {
-	if g.state < 0 {
-		return 0
-	}
-	return g.boundaries >> ShiftWidth
-}
-
-// Reset puts the iterator into its initial state such that the next call to
-// [Graphemes.Next] sets it to the first grapheme cluster again.
-func (g *Graphemes) Reset() {
-	g.state = -1
-	g.offset = 0
-	g.cluster = ""
-	g.remaining = g.original
-}
-
-// GraphemeClusterCount returns the number of user-perceived characters
-// (grapheme clusters) for the given string.
-func GraphemeClusterCount(s string) (n int) {
-	state := -1
-	for len(s) > 0 {
-		_, s, _, state = FirstGraphemeClusterInString(s, state)
-		n++
-	}
-	return
-}
-
-// ReverseString reverses the given string while observing grapheme cluster
-// boundaries.
-func ReverseString(s string) string {
-	str := []byte(s)
-	reversed := make([]byte, len(str))
-	state := -1
-	index := len(str)
-	for len(str) > 0 {
-		var cluster []byte
-		cluster, str, _, state = FirstGraphemeCluster(str, state)
-		index -= len(cluster)
-		copy(reversed[index:], cluster)
-		if index <= len(str)/2 {
-			break
-		}
-	}
-	return string(reversed)
-}
-
-// The number of bits the grapheme property must be shifted to make place for
-// grapheme states.
-const shiftGraphemePropState = 4
-
-// FirstGraphemeCluster returns the first grapheme cluster found in the given
-// byte slice according to the rules of [Unicode Standard Annex #29, Grapheme
-// Cluster Boundaries]. This function can be called continuously to extract all
-// grapheme clusters from a byte slice, as illustrated in the example below.
-//
-// If you don't know the current state, for example when calling the function
-// for the first time, you must pass -1. For consecutive calls, pass the state
-// and rest slice returned by the previous call.
-//
-// The "rest" slice is the sub-slice of the original byte slice "b" starting
-// after the last byte of the identified grapheme cluster. If the length of the
-// "rest" slice is 0, the entire byte slice "b" has been processed. The
-// "cluster" byte slice is the sub-slice of the input slice containing the
-// identified grapheme cluster.
-//
-// The returned width is the width of the grapheme cluster for most monospace
-// fonts where a value of 1 represents one character cell.
-//
-// Given an empty byte slice "b", the function returns nil values.
-//
-// While slightly less convenient than using the Graphemes class, this function
-// has much better performance and makes no allocations. It lends itself well to
-// large byte slices.
-//
-// [Unicode Standard Annex #29, Grapheme Cluster Boundaries]: http://unicode.org/reports/tr29/#Grapheme_Cluster_Boundaries
-func FirstGraphemeCluster(b []byte, state int) (cluster, rest []byte, width, newState int) {
-	// An empty byte slice returns nothing.
-	if len(b) == 0 {
-		return
-	}
-
-	// Extract the first rune.
-	r, length := utf8.DecodeRune(b)
-	if len(b) <= length { // If we're already past the end, there is nothing else to parse.
-		var prop int
-		if state < 0 {
-			prop = propertyGraphemes(r)
-		} else {
-			prop = state >> shiftGraphemePropState
-		}
-		return b, nil, runeWidth(r, prop), grAny | (prop << shiftGraphemePropState)
-	}
-
-	// If we don't know the state, determine it now.
-	var firstProp int
-	if state < 0 {
-		state, firstProp, _ = transitionGraphemeState(state, r)
-	} else {
-		firstProp = state >> shiftGraphemePropState
-	}
-	width += runeWidth(r, firstProp)
-
-	// Transition until we find a boundary.
-	for {
-		var (
-			prop     int
-			boundary bool
-		)
-
-		r, l := utf8.DecodeRune(b[length:])
-		state, prop, boundary = transitionGraphemeState(state&maskGraphemeState, r)
-
-		if boundary {
-			return b[:length], b[length:], width, state | (prop << shiftGraphemePropState)
-		}
-
-		if firstProp == prExtendedPictographic {
-			if r == vs15 {
-				width = 1
-			} else if r == vs16 {
-				width = 2
-			}
-		} else if firstProp != prRegionalIndicator && firstProp != prL {
-			width += runeWidth(r, prop)
-		}
-
-		length += l
-		if len(b) <= length {
-			return b, nil, width, grAny | (prop << shiftGraphemePropState)
-		}
-	}
-}
-
-// FirstGraphemeClusterInString is like [FirstGraphemeCluster] but its input and
-// outputs are strings.
-func FirstGraphemeClusterInString(str string, state int) (cluster, rest string, width, newState int) {
-	// An empty string returns nothing.
-	if len(str) == 0 {
-		return
-	}
-
-	// Extract the first rune.
-	r, length := utf8.DecodeRuneInString(str)
-	if len(str) <= length { // If we're already past the end, there is nothing else to parse.
-		var prop int
-		if state < 0 {
-			prop = propertyGraphemes(r)
-		} else {
-			prop = state >> shiftGraphemePropState
-		}
-		return str, "", runeWidth(r, prop), grAny | (prop << shiftGraphemePropState)
-	}
-
-	// If we don't know the state, determine it now.
-	var firstProp int
-	if state < 0 {
-		state, firstProp, _ = transitionGraphemeState(state, r)
-	} else {
-		firstProp = state >> shiftGraphemePropState
-	}
-	width += runeWidth(r, firstProp)
-
-	// Transition until we find a boundary.
-	for {
-		var (
-			prop     int
-			boundary bool
-		)
-
-		r, l := utf8.DecodeRuneInString(str[length:])
-		state, prop, boundary = transitionGraphemeState(state&maskGraphemeState, r)
-
-		if boundary {
-			return str[:length], str[length:], width, state | (prop << shiftGraphemePropState)
-		}
-
-		if firstProp == prExtendedPictographic {
-			if r == vs15 {
-				width = 1
-			} else if r == vs16 {
-				width = 2
-			}
-		} else if firstProp != prRegionalIndicator && firstProp != prL {
-			width += runeWidth(r, prop)
-		}
-
-		length += l
-		if len(str) <= length {
-			return str, "", width, grAny | (prop << shiftGraphemePropState)
-		}
-	}
-}

+ 0 - 1915
v2/vendor/github.com/rivo/uniseg/graphemeproperties.go

@@ -1,1915 +0,0 @@
-// Code generated via go generate from gen_properties.go. DO NOT EDIT.
-
-package uniseg
-
-// graphemeCodePoints are taken from
-// https://www.unicode.org/Public/15.0.0/ucd/auxiliary/GraphemeBreakProperty.txt
-// and
-// https://unicode.org/Public/15.0.0/ucd/emoji/emoji-data.txt
-// ("Extended_Pictographic" only)
-// on September 5, 2023. See https://www.unicode.org/license.html for the Unicode
-// license agreement.
-var graphemeCodePoints = [][3]int{
-	{0x0000, 0x0009, prControl},                // Cc  [10] <control-0000>..<control-0009>
-	{0x000A, 0x000A, prLF},                     // Cc       <control-000A>
-	{0x000B, 0x000C, prControl},                // Cc   [2] <control-000B>..<control-000C>
-	{0x000D, 0x000D, prCR},                     // Cc       <control-000D>
-	{0x000E, 0x001F, prControl},                // Cc  [18] <control-000E>..<control-001F>
-	{0x007F, 0x009F, prControl},                // Cc  [33] <control-007F>..<control-009F>
-	{0x00A9, 0x00A9, prExtendedPictographic},   // E0.6   [1] (©️)       copyright
-	{0x00AD, 0x00AD, prControl},                // Cf       SOFT HYPHEN
-	{0x00AE, 0x00AE, prExtendedPictographic},   // E0.6   [1] (®️)       registered
-	{0x0300, 0x036F, prExtend},                 // Mn [112] COMBINING GRAVE ACCENT..COMBINING LATIN SMALL LETTER X
-	{0x0483, 0x0487, prExtend},                 // Mn   [5] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC POKRYTIE
-	{0x0488, 0x0489, prExtend},                 // Me   [2] COMBINING CYRILLIC HUNDRED THOUSANDS SIGN..COMBINING CYRILLIC MILLIONS SIGN
-	{0x0591, 0x05BD, prExtend},                 // Mn  [45] HEBREW ACCENT ETNAHTA..HEBREW POINT METEG
-	{0x05BF, 0x05BF, prExtend},                 // Mn       HEBREW POINT RAFE
-	{0x05C1, 0x05C2, prExtend},                 // Mn   [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT
-	{0x05C4, 0x05C5, prExtend},                 // Mn   [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT
-	{0x05C7, 0x05C7, prExtend},                 // Mn       HEBREW POINT QAMATS QATAN
-	{0x0600, 0x0605, prPrepend},                // Cf   [6] ARABIC NUMBER SIGN..ARABIC NUMBER MARK ABOVE
-	{0x0610, 0x061A, prExtend},                 // Mn  [11] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL KASRA
-	{0x061C, 0x061C, prControl},                // Cf       ARABIC LETTER MARK
-	{0x064B, 0x065F, prExtend},                 // Mn  [21] ARABIC FATHATAN..ARABIC WAVY HAMZA BELOW
-	{0x0670, 0x0670, prExtend},                 // Mn       ARABIC LETTER SUPERSCRIPT ALEF
-	{0x06D6, 0x06DC, prExtend},                 // Mn   [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN
-	{0x06DD, 0x06DD, prPrepend},                // Cf       ARABIC END OF AYAH
-	{0x06DF, 0x06E4, prExtend},                 // Mn   [6] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH MADDA
-	{0x06E7, 0x06E8, prExtend},                 // Mn   [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON
-	{0x06EA, 0x06ED, prExtend},                 // Mn   [4] ARABIC EMPTY CENTRE LOW STOP..ARABIC SMALL LOW MEEM
-	{0x070F, 0x070F, prPrepend},                // Cf       SYRIAC ABBREVIATION MARK
-	{0x0711, 0x0711, prExtend},                 // Mn       SYRIAC LETTER SUPERSCRIPT ALAPH
-	{0x0730, 0x074A, prExtend},                 // Mn  [27] SYRIAC PTHAHA ABOVE..SYRIAC BARREKH
-	{0x07A6, 0x07B0, prExtend},                 // Mn  [11] THAANA ABAFILI..THAANA SUKUN
-	{0x07EB, 0x07F3, prExtend},                 // Mn   [9] NKO COMBINING SHORT HIGH TONE..NKO COMBINING DOUBLE DOT ABOVE
-	{0x07FD, 0x07FD, prExtend},                 // Mn       NKO DANTAYALAN
-	{0x0816, 0x0819, prExtend},                 // Mn   [4] SAMARITAN MARK IN..SAMARITAN MARK DAGESH
-	{0x081B, 0x0823, prExtend},                 // Mn   [9] SAMARITAN MARK EPENTHETIC YUT..SAMARITAN VOWEL SIGN A
-	{0x0825, 0x0827, prExtend},                 // Mn   [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U
-	{0x0829, 0x082D, prExtend},                 // Mn   [5] SAMARITAN VOWEL SIGN LONG I..SAMARITAN MARK NEQUDAA
-	{0x0859, 0x085B, prExtend},                 // Mn   [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK
-	{0x0890, 0x0891, prPrepend},                // Cf   [2] ARABIC POUND MARK ABOVE..ARABIC PIASTRE MARK ABOVE
-	{0x0898, 0x089F, prExtend},                 // Mn   [8] ARABIC SMALL HIGH WORD AL-JUZ..ARABIC HALF MADDA OVER MADDA
-	{0x08CA, 0x08E1, prExtend},                 // Mn  [24] ARABIC SMALL HIGH FARSI YEH..ARABIC SMALL HIGH SIGN SAFHA
-	{0x08E2, 0x08E2, prPrepend},                // Cf       ARABIC DISPUTED END OF AYAH
-	{0x08E3, 0x0902, prExtend},                 // Mn  [32] ARABIC TURNED DAMMA BELOW..DEVANAGARI SIGN ANUSVARA
-	{0x0903, 0x0903, prSpacingMark},            // Mc       DEVANAGARI SIGN VISARGA
-	{0x093A, 0x093A, prExtend},                 // Mn       DEVANAGARI VOWEL SIGN OE
-	{0x093B, 0x093B, prSpacingMark},            // Mc       DEVANAGARI VOWEL SIGN OOE
-	{0x093C, 0x093C, prExtend},                 // Mn       DEVANAGARI SIGN NUKTA
-	{0x093E, 0x0940, prSpacingMark},            // Mc   [3] DEVANAGARI VOWEL SIGN AA..DEVANAGARI VOWEL SIGN II
-	{0x0941, 0x0948, prExtend},                 // Mn   [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI
-	{0x0949, 0x094C, prSpacingMark},            // Mc   [4] DEVANAGARI VOWEL SIGN CANDRA O..DEVANAGARI VOWEL SIGN AU
-	{0x094D, 0x094D, prExtend},                 // Mn       DEVANAGARI SIGN VIRAMA
-	{0x094E, 0x094F, prSpacingMark},            // Mc   [2] DEVANAGARI VOWEL SIGN PRISHTHAMATRA E..DEVANAGARI VOWEL SIGN AW
-	{0x0951, 0x0957, prExtend},                 // Mn   [7] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI VOWEL SIGN UUE
-	{0x0962, 0x0963, prExtend},                 // Mn   [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL
-	{0x0981, 0x0981, prExtend},                 // Mn       BENGALI SIGN CANDRABINDU
-	{0x0982, 0x0983, prSpacingMark},            // Mc   [2] BENGALI SIGN ANUSVARA..BENGALI SIGN VISARGA
-	{0x09BC, 0x09BC, prExtend},                 // Mn       BENGALI SIGN NUKTA
-	{0x09BE, 0x09BE, prExtend},                 // Mc       BENGALI VOWEL SIGN AA
-	{0x09BF, 0x09C0, prSpacingMark},            // Mc   [2] BENGALI VOWEL SIGN I..BENGALI VOWEL SIGN II
-	{0x09C1, 0x09C4, prExtend},                 // Mn   [4] BENGALI VOWEL SIGN U..BENGALI VOWEL SIGN VOCALIC RR
-	{0x09C7, 0x09C8, prSpacingMark},            // Mc   [2] BENGALI VOWEL SIGN E..BENGALI VOWEL SIGN AI
-	{0x09CB, 0x09CC, prSpacingMark},            // Mc   [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU
-	{0x09CD, 0x09CD, prExtend},                 // Mn       BENGALI SIGN VIRAMA
-	{0x09D7, 0x09D7, prExtend},                 // Mc       BENGALI AU LENGTH MARK
-	{0x09E2, 0x09E3, prExtend},                 // Mn   [2] BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL
-	{0x09FE, 0x09FE, prExtend},                 // Mn       BENGALI SANDHI MARK
-	{0x0A01, 0x0A02, prExtend},                 // Mn   [2] GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN BINDI
-	{0x0A03, 0x0A03, prSpacingMark},            // Mc       GURMUKHI SIGN VISARGA
-	{0x0A3C, 0x0A3C, prExtend},                 // Mn       GURMUKHI SIGN NUKTA
-	{0x0A3E, 0x0A40, prSpacingMark},            // Mc   [3] GURMUKHI VOWEL SIGN AA..GURMUKHI VOWEL SIGN II
-	{0x0A41, 0x0A42, prExtend},                 // Mn   [2] GURMUKHI VOWEL SIGN U..GURMUKHI VOWEL SIGN UU
-	{0x0A47, 0x0A48, prExtend},                 // Mn   [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI
-	{0x0A4B, 0x0A4D, prExtend},                 // Mn   [3] GURMUKHI VOWEL SIGN OO..GURMUKHI SIGN VIRAMA
-	{0x0A51, 0x0A51, prExtend},                 // Mn       GURMUKHI SIGN UDAAT
-	{0x0A70, 0x0A71, prExtend},                 // Mn   [2] GURMUKHI TIPPI..GURMUKHI ADDAK
-	{0x0A75, 0x0A75, prExtend},                 // Mn       GURMUKHI SIGN YAKASH
-	{0x0A81, 0x0A82, prExtend},                 // Mn   [2] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN ANUSVARA
-	{0x0A83, 0x0A83, prSpacingMark},            // Mc       GUJARATI SIGN VISARGA
-	{0x0ABC, 0x0ABC, prExtend},                 // Mn       GUJARATI SIGN NUKTA
-	{0x0ABE, 0x0AC0, prSpacingMark},            // Mc   [3] GUJARATI VOWEL SIGN AA..GUJARATI VOWEL SIGN II
-	{0x0AC1, 0x0AC5, prExtend},                 // Mn   [5] GUJARATI VOWEL SIGN U..GUJARATI VOWEL SIGN CANDRA E
-	{0x0AC7, 0x0AC8, prExtend},                 // Mn   [2] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN AI
-	{0x0AC9, 0x0AC9, prSpacingMark},            // Mc       GUJARATI VOWEL SIGN CANDRA O
-	{0x0ACB, 0x0ACC, prSpacingMark},            // Mc   [2] GUJARATI VOWEL SIGN O..GUJARATI VOWEL SIGN AU
-	{0x0ACD, 0x0ACD, prExtend},                 // Mn       GUJARATI SIGN VIRAMA
-	{0x0AE2, 0x0AE3, prExtend},                 // Mn   [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL
-	{0x0AFA, 0x0AFF, prExtend},                 // Mn   [6] GUJARATI SIGN SUKUN..GUJARATI SIGN TWO-CIRCLE NUKTA ABOVE
-	{0x0B01, 0x0B01, prExtend},                 // Mn       ORIYA SIGN CANDRABINDU
-	{0x0B02, 0x0B03, prSpacingMark},            // Mc   [2] ORIYA SIGN ANUSVARA..ORIYA SIGN VISARGA
-	{0x0B3C, 0x0B3C, prExtend},                 // Mn       ORIYA SIGN NUKTA
-	{0x0B3E, 0x0B3E, prExtend},                 // Mc       ORIYA VOWEL SIGN AA
-	{0x0B3F, 0x0B3F, prExtend},                 // Mn       ORIYA VOWEL SIGN I
-	{0x0B40, 0x0B40, prSpacingMark},            // Mc       ORIYA VOWEL SIGN II
-	{0x0B41, 0x0B44, prExtend},                 // Mn   [4] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC RR
-	{0x0B47, 0x0B48, prSpacingMark},            // Mc   [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI
-	{0x0B4B, 0x0B4C, prSpacingMark},            // Mc   [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU
-	{0x0B4D, 0x0B4D, prExtend},                 // Mn       ORIYA SIGN VIRAMA
-	{0x0B55, 0x0B56, prExtend},                 // Mn   [2] ORIYA SIGN OVERLINE..ORIYA AI LENGTH MARK
-	{0x0B57, 0x0B57, prExtend},                 // Mc       ORIYA AU LENGTH MARK
-	{0x0B62, 0x0B63, prExtend},                 // Mn   [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL
-	{0x0B82, 0x0B82, prExtend},                 // Mn       TAMIL SIGN ANUSVARA
-	{0x0BBE, 0x0BBE, prExtend},                 // Mc       TAMIL VOWEL SIGN AA
-	{0x0BBF, 0x0BBF, prSpacingMark},            // Mc       TAMIL VOWEL SIGN I
-	{0x0BC0, 0x0BC0, prExtend},                 // Mn       TAMIL VOWEL SIGN II
-	{0x0BC1, 0x0BC2, prSpacingMark},            // Mc   [2] TAMIL VOWEL SIGN U..TAMIL VOWEL SIGN UU
-	{0x0BC6, 0x0BC8, prSpacingMark},            // Mc   [3] TAMIL VOWEL SIGN E..TAMIL VOWEL SIGN AI
-	{0x0BCA, 0x0BCC, prSpacingMark},            // Mc   [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU
-	{0x0BCD, 0x0BCD, prExtend},                 // Mn       TAMIL SIGN VIRAMA
-	{0x0BD7, 0x0BD7, prExtend},                 // Mc       TAMIL AU LENGTH MARK
-	{0x0C00, 0x0C00, prExtend},                 // Mn       TELUGU SIGN COMBINING CANDRABINDU ABOVE
-	{0x0C01, 0x0C03, prSpacingMark},            // Mc   [3] TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA
-	{0x0C04, 0x0C04, prExtend},                 // Mn       TELUGU SIGN COMBINING ANUSVARA ABOVE
-	{0x0C3C, 0x0C3C, prExtend},                 // Mn       TELUGU SIGN NUKTA
-	{0x0C3E, 0x0C40, prExtend},                 // Mn   [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II
-	{0x0C41, 0x0C44, prSpacingMark},            // Mc   [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR
-	{0x0C46, 0x0C48, prExtend},                 // Mn   [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI
-	{0x0C4A, 0x0C4D, prExtend},                 // Mn   [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA
-	{0x0C55, 0x0C56, prExtend},                 // Mn   [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK
-	{0x0C62, 0x0C63, prExtend},                 // Mn   [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL
-	{0x0C81, 0x0C81, prExtend},                 // Mn       KANNADA SIGN CANDRABINDU
-	{0x0C82, 0x0C83, prSpacingMark},            // Mc   [2] KANNADA SIGN ANUSVARA..KANNADA SIGN VISARGA
-	{0x0CBC, 0x0CBC, prExtend},                 // Mn       KANNADA SIGN NUKTA
-	{0x0CBE, 0x0CBE, prSpacingMark},            // Mc       KANNADA VOWEL SIGN AA
-	{0x0CBF, 0x0CBF, prExtend},                 // Mn       KANNADA VOWEL SIGN I
-	{0x0CC0, 0x0CC1, prSpacingMark},            // Mc   [2] KANNADA VOWEL SIGN II..KANNADA VOWEL SIGN U
-	{0x0CC2, 0x0CC2, prExtend},                 // Mc       KANNADA VOWEL SIGN UU
-	{0x0CC3, 0x0CC4, prSpacingMark},            // Mc   [2] KANNADA VOWEL SIGN VOCALIC R..KANNADA VOWEL SIGN VOCALIC RR
-	{0x0CC6, 0x0CC6, prExtend},                 // Mn       KANNADA VOWEL SIGN E
-	{0x0CC7, 0x0CC8, prSpacingMark},            // Mc   [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI
-	{0x0CCA, 0x0CCB, prSpacingMark},            // Mc   [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO
-	{0x0CCC, 0x0CCD, prExtend},                 // Mn   [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA
-	{0x0CD5, 0x0CD6, prExtend},                 // Mc   [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK
-	{0x0CE2, 0x0CE3, prExtend},                 // Mn   [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL
-	{0x0CF3, 0x0CF3, prSpacingMark},            // Mc       KANNADA SIGN COMBINING ANUSVARA ABOVE RIGHT
-	{0x0D00, 0x0D01, prExtend},                 // Mn   [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU
-	{0x0D02, 0x0D03, prSpacingMark},            // Mc   [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA
-	{0x0D3B, 0x0D3C, prExtend},                 // Mn   [2] MALAYALAM SIGN VERTICAL BAR VIRAMA..MALAYALAM SIGN CIRCULAR VIRAMA
-	{0x0D3E, 0x0D3E, prExtend},                 // Mc       MALAYALAM VOWEL SIGN AA
-	{0x0D3F, 0x0D40, prSpacingMark},            // Mc   [2] MALAYALAM VOWEL SIGN I..MALAYALAM VOWEL SIGN II
-	{0x0D41, 0x0D44, prExtend},                 // Mn   [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR
-	{0x0D46, 0x0D48, prSpacingMark},            // Mc   [3] MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI
-	{0x0D4A, 0x0D4C, prSpacingMark},            // Mc   [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU
-	{0x0D4D, 0x0D4D, prExtend},                 // Mn       MALAYALAM SIGN VIRAMA
-	{0x0D4E, 0x0D4E, prPrepend},                // Lo       MALAYALAM LETTER DOT REPH
-	{0x0D57, 0x0D57, prExtend},                 // Mc       MALAYALAM AU LENGTH MARK
-	{0x0D62, 0x0D63, prExtend},                 // Mn   [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL
-	{0x0D81, 0x0D81, prExtend},                 // Mn       SINHALA SIGN CANDRABINDU
-	{0x0D82, 0x0D83, prSpacingMark},            // Mc   [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA
-	{0x0DCA, 0x0DCA, prExtend},                 // Mn       SINHALA SIGN AL-LAKUNA
-	{0x0DCF, 0x0DCF, prExtend},                 // Mc       SINHALA VOWEL SIGN AELA-PILLA
-	{0x0DD0, 0x0DD1, prSpacingMark},            // Mc   [2] SINHALA VOWEL SIGN KETTI AEDA-PILLA..SINHALA VOWEL SIGN DIGA AEDA-PILLA
-	{0x0DD2, 0x0DD4, prExtend},                 // Mn   [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA
-	{0x0DD6, 0x0DD6, prExtend},                 // Mn       SINHALA VOWEL SIGN DIGA PAA-PILLA
-	{0x0DD8, 0x0DDE, prSpacingMark},            // Mc   [7] SINHALA VOWEL SIGN GAETTA-PILLA..SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA
-	{0x0DDF, 0x0DDF, prExtend},                 // Mc       SINHALA VOWEL SIGN GAYANUKITTA
-	{0x0DF2, 0x0DF3, prSpacingMark},            // Mc   [2] SINHALA VOWEL SIGN DIGA GAETTA-PILLA..SINHALA VOWEL SIGN DIGA GAYANUKITTA
-	{0x0E31, 0x0E31, prExtend},                 // Mn       THAI CHARACTER MAI HAN-AKAT
-	{0x0E33, 0x0E33, prSpacingMark},            // Lo       THAI CHARACTER SARA AM
-	{0x0E34, 0x0E3A, prExtend},                 // Mn   [7] THAI CHARACTER SARA I..THAI CHARACTER PHINTHU
-	{0x0E47, 0x0E4E, prExtend},                 // Mn   [8] THAI CHARACTER MAITAIKHU..THAI CHARACTER YAMAKKAN
-	{0x0EB1, 0x0EB1, prExtend},                 // Mn       LAO VOWEL SIGN MAI KAN
-	{0x0EB3, 0x0EB3, prSpacingMark},            // Lo       LAO VOWEL SIGN AM
-	{0x0EB4, 0x0EBC, prExtend},                 // Mn   [9] LAO VOWEL SIGN I..LAO SEMIVOWEL SIGN LO
-	{0x0EC8, 0x0ECE, prExtend},                 // Mn   [7] LAO TONE MAI EK..LAO YAMAKKAN
-	{0x0F18, 0x0F19, prExtend},                 // Mn   [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS
-	{0x0F35, 0x0F35, prExtend},                 // Mn       TIBETAN MARK NGAS BZUNG NYI ZLA
-	{0x0F37, 0x0F37, prExtend},                 // Mn       TIBETAN MARK NGAS BZUNG SGOR RTAGS
-	{0x0F39, 0x0F39, prExtend},                 // Mn       TIBETAN MARK TSA -PHRU
-	{0x0F3E, 0x0F3F, prSpacingMark},            // Mc   [2] TIBETAN SIGN YAR TSHES..TIBETAN SIGN MAR TSHES
-	{0x0F71, 0x0F7E, prExtend},                 // Mn  [14] TIBETAN VOWEL SIGN AA..TIBETAN SIGN RJES SU NGA RO
-	{0x0F7F, 0x0F7F, prSpacingMark},            // Mc       TIBETAN SIGN RNAM BCAD
-	{0x0F80, 0x0F84, prExtend},                 // Mn   [5] TIBETAN VOWEL SIGN REVERSED I..TIBETAN MARK HALANTA
-	{0x0F86, 0x0F87, prExtend},                 // Mn   [2] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS
-	{0x0F8D, 0x0F97, prExtend},                 // Mn  [11] TIBETAN SUBJOINED SIGN LCE TSA CAN..TIBETAN SUBJOINED LETTER JA
-	{0x0F99, 0x0FBC, prExtend},                 // Mn  [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA
-	{0x0FC6, 0x0FC6, prExtend},                 // Mn       TIBETAN SYMBOL PADMA GDAN
-	{0x102D, 0x1030, prExtend},                 // Mn   [4] MYANMAR VOWEL SIGN I..MYANMAR VOWEL SIGN UU
-	{0x1031, 0x1031, prSpacingMark},            // Mc       MYANMAR VOWEL SIGN E
-	{0x1032, 0x1037, prExtend},                 // Mn   [6] MYANMAR VOWEL SIGN AI..MYANMAR SIGN DOT BELOW
-	{0x1039, 0x103A, prExtend},                 // Mn   [2] MYANMAR SIGN VIRAMA..MYANMAR SIGN ASAT
-	{0x103B, 0x103C, prSpacingMark},            // Mc   [2] MYANMAR CONSONANT SIGN MEDIAL YA..MYANMAR CONSONANT SIGN MEDIAL RA
-	{0x103D, 0x103E, prExtend},                 // Mn   [2] MYANMAR CONSONANT SIGN MEDIAL WA..MYANMAR CONSONANT SIGN MEDIAL HA
-	{0x1056, 0x1057, prSpacingMark},            // Mc   [2] MYANMAR VOWEL SIGN VOCALIC R..MYANMAR VOWEL SIGN VOCALIC RR
-	{0x1058, 0x1059, prExtend},                 // Mn   [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL
-	{0x105E, 0x1060, prExtend},                 // Mn   [3] MYANMAR CONSONANT SIGN MON MEDIAL NA..MYANMAR CONSONANT SIGN MON MEDIAL LA
-	{0x1071, 0x1074, prExtend},                 // Mn   [4] MYANMAR VOWEL SIGN GEBA KAREN I..MYANMAR VOWEL SIGN KAYAH EE
-	{0x1082, 0x1082, prExtend},                 // Mn       MYANMAR CONSONANT SIGN SHAN MEDIAL WA
-	{0x1084, 0x1084, prSpacingMark},            // Mc       MYANMAR VOWEL SIGN SHAN E
-	{0x1085, 0x1086, prExtend},                 // Mn   [2] MYANMAR VOWEL SIGN SHAN E ABOVE..MYANMAR VOWEL SIGN SHAN FINAL Y
-	{0x108D, 0x108D, prExtend},                 // Mn       MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE
-	{0x109D, 0x109D, prExtend},                 // Mn       MYANMAR VOWEL SIGN AITON AI
-	{0x1100, 0x115F, prL},                      // Lo  [96] HANGUL CHOSEONG KIYEOK..HANGUL CHOSEONG FILLER
-	{0x1160, 0x11A7, prV},                      // Lo  [72] HANGUL JUNGSEONG FILLER..HANGUL JUNGSEONG O-YAE
-	{0x11A8, 0x11FF, prT},                      // Lo  [88] HANGUL JONGSEONG KIYEOK..HANGUL JONGSEONG SSANGNIEUN
-	{0x135D, 0x135F, prExtend},                 // Mn   [3] ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK..ETHIOPIC COMBINING GEMINATION MARK
-	{0x1712, 0x1714, prExtend},                 // Mn   [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA
-	{0x1715, 0x1715, prSpacingMark},            // Mc       TAGALOG SIGN PAMUDPOD
-	{0x1732, 0x1733, prExtend},                 // Mn   [2] HANUNOO VOWEL SIGN I..HANUNOO VOWEL SIGN U
-	{0x1734, 0x1734, prSpacingMark},            // Mc       HANUNOO SIGN PAMUDPOD
-	{0x1752, 0x1753, prExtend},                 // Mn   [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U
-	{0x1772, 0x1773, prExtend},                 // Mn   [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U
-	{0x17B4, 0x17B5, prExtend},                 // Mn   [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA
-	{0x17B6, 0x17B6, prSpacingMark},            // Mc       KHMER VOWEL SIGN AA
-	{0x17B7, 0x17BD, prExtend},                 // Mn   [7] KHMER VOWEL SIGN I..KHMER VOWEL SIGN UA
-	{0x17BE, 0x17C5, prSpacingMark},            // Mc   [8] KHMER VOWEL SIGN OE..KHMER VOWEL SIGN AU
-	{0x17C6, 0x17C6, prExtend},                 // Mn       KHMER SIGN NIKAHIT
-	{0x17C7, 0x17C8, prSpacingMark},            // Mc   [2] KHMER SIGN REAHMUK..KHMER SIGN YUUKALEAPINTU
-	{0x17C9, 0x17D3, prExtend},                 // Mn  [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT
-	{0x17DD, 0x17DD, prExtend},                 // Mn       KHMER SIGN ATTHACAN
-	{0x180B, 0x180D, prExtend},                 // Mn   [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE
-	{0x180E, 0x180E, prControl},                // Cf       MONGOLIAN VOWEL SEPARATOR
-	{0x180F, 0x180F, prExtend},                 // Mn       MONGOLIAN FREE VARIATION SELECTOR FOUR
-	{0x1885, 0x1886, prExtend},                 // Mn   [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA
-	{0x18A9, 0x18A9, prExtend},                 // Mn       MONGOLIAN LETTER ALI GALI DAGALGA
-	{0x1920, 0x1922, prExtend},                 // Mn   [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U
-	{0x1923, 0x1926, prSpacingMark},            // Mc   [4] LIMBU VOWEL SIGN EE..LIMBU VOWEL SIGN AU
-	{0x1927, 0x1928, prExtend},                 // Mn   [2] LIMBU VOWEL SIGN E..LIMBU VOWEL SIGN O
-	{0x1929, 0x192B, prSpacingMark},            // Mc   [3] LIMBU SUBJOINED LETTER YA..LIMBU SUBJOINED LETTER WA
-	{0x1930, 0x1931, prSpacingMark},            // Mc   [2] LIMBU SMALL LETTER KA..LIMBU SMALL LETTER NGA
-	{0x1932, 0x1932, prExtend},                 // Mn       LIMBU SMALL LETTER ANUSVARA
-	{0x1933, 0x1938, prSpacingMark},            // Mc   [6] LIMBU SMALL LETTER TA..LIMBU SMALL LETTER LA
-	{0x1939, 0x193B, prExtend},                 // Mn   [3] LIMBU SIGN MUKPHRENG..LIMBU SIGN SA-I
-	{0x1A17, 0x1A18, prExtend},                 // Mn   [2] BUGINESE VOWEL SIGN I..BUGINESE VOWEL SIGN U
-	{0x1A19, 0x1A1A, prSpacingMark},            // Mc   [2] BUGINESE VOWEL SIGN E..BUGINESE VOWEL SIGN O
-	{0x1A1B, 0x1A1B, prExtend},                 // Mn       BUGINESE VOWEL SIGN AE
-	{0x1A55, 0x1A55, prSpacingMark},            // Mc       TAI THAM CONSONANT SIGN MEDIAL RA
-	{0x1A56, 0x1A56, prExtend},                 // Mn       TAI THAM CONSONANT SIGN MEDIAL LA
-	{0x1A57, 0x1A57, prSpacingMark},            // Mc       TAI THAM CONSONANT SIGN LA TANG LAI
-	{0x1A58, 0x1A5E, prExtend},                 // Mn   [7] TAI THAM SIGN MAI KANG LAI..TAI THAM CONSONANT SIGN SA
-	{0x1A60, 0x1A60, prExtend},                 // Mn       TAI THAM SIGN SAKOT
-	{0x1A62, 0x1A62, prExtend},                 // Mn       TAI THAM VOWEL SIGN MAI SAT
-	{0x1A65, 0x1A6C, prExtend},                 // Mn   [8] TAI THAM VOWEL SIGN I..TAI THAM VOWEL SIGN OA BELOW
-	{0x1A6D, 0x1A72, prSpacingMark},            // Mc   [6] TAI THAM VOWEL SIGN OY..TAI THAM VOWEL SIGN THAM AI
-	{0x1A73, 0x1A7C, prExtend},                 // Mn  [10] TAI THAM VOWEL SIGN OA ABOVE..TAI THAM SIGN KHUEN-LUE KARAN
-	{0x1A7F, 0x1A7F, prExtend},                 // Mn       TAI THAM COMBINING CRYPTOGRAMMIC DOT
-	{0x1AB0, 0x1ABD, prExtend},                 // Mn  [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW
-	{0x1ABE, 0x1ABE, prExtend},                 // Me       COMBINING PARENTHESES OVERLAY
-	{0x1ABF, 0x1ACE, prExtend},                 // Mn  [16] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER INSULAR T
-	{0x1B00, 0x1B03, prExtend},                 // Mn   [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG
-	{0x1B04, 0x1B04, prSpacingMark},            // Mc       BALINESE SIGN BISAH
-	{0x1B34, 0x1B34, prExtend},                 // Mn       BALINESE SIGN REREKAN
-	{0x1B35, 0x1B35, prExtend},                 // Mc       BALINESE VOWEL SIGN TEDUNG
-	{0x1B36, 0x1B3A, prExtend},                 // Mn   [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA
-	{0x1B3B, 0x1B3B, prSpacingMark},            // Mc       BALINESE VOWEL SIGN RA REPA TEDUNG
-	{0x1B3C, 0x1B3C, prExtend},                 // Mn       BALINESE VOWEL SIGN LA LENGA
-	{0x1B3D, 0x1B41, prSpacingMark},            // Mc   [5] BALINESE VOWEL SIGN LA LENGA TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG
-	{0x1B42, 0x1B42, prExtend},                 // Mn       BALINESE VOWEL SIGN PEPET
-	{0x1B43, 0x1B44, prSpacingMark},            // Mc   [2] BALINESE VOWEL SIGN PEPET TEDUNG..BALINESE ADEG ADEG
-	{0x1B6B, 0x1B73, prExtend},                 // Mn   [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG
-	{0x1B80, 0x1B81, prExtend},                 // Mn   [2] SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PANGLAYAR
-	{0x1B82, 0x1B82, prSpacingMark},            // Mc       SUNDANESE SIGN PANGWISAD
-	{0x1BA1, 0x1BA1, prSpacingMark},            // Mc       SUNDANESE CONSONANT SIGN PAMINGKAL
-	{0x1BA2, 0x1BA5, prExtend},                 // Mn   [4] SUNDANESE CONSONANT SIGN PANYAKRA..SUNDANESE VOWEL SIGN PANYUKU
-	{0x1BA6, 0x1BA7, prSpacingMark},            // Mc   [2] SUNDANESE VOWEL SIGN PANAELAENG..SUNDANESE VOWEL SIGN PANOLONG
-	{0x1BA8, 0x1BA9, prExtend},                 // Mn   [2] SUNDANESE VOWEL SIGN PAMEPET..SUNDANESE VOWEL SIGN PANEULEUNG
-	{0x1BAA, 0x1BAA, prSpacingMark},            // Mc       SUNDANESE SIGN PAMAAEH
-	{0x1BAB, 0x1BAD, prExtend},                 // Mn   [3] SUNDANESE SIGN VIRAMA..SUNDANESE CONSONANT SIGN PASANGAN WA
-	{0x1BE6, 0x1BE6, prExtend},                 // Mn       BATAK SIGN TOMPI
-	{0x1BE7, 0x1BE7, prSpacingMark},            // Mc       BATAK VOWEL SIGN E
-	{0x1BE8, 0x1BE9, prExtend},                 // Mn   [2] BATAK VOWEL SIGN PAKPAK E..BATAK VOWEL SIGN EE
-	{0x1BEA, 0x1BEC, prSpacingMark},            // Mc   [3] BATAK VOWEL SIGN I..BATAK VOWEL SIGN O
-	{0x1BED, 0x1BED, prExtend},                 // Mn       BATAK VOWEL SIGN KARO O
-	{0x1BEE, 0x1BEE, prSpacingMark},            // Mc       BATAK VOWEL SIGN U
-	{0x1BEF, 0x1BF1, prExtend},                 // Mn   [3] BATAK VOWEL SIGN U FOR SIMALUNGUN SA..BATAK CONSONANT SIGN H
-	{0x1BF2, 0x1BF3, prSpacingMark},            // Mc   [2] BATAK PANGOLAT..BATAK PANONGONAN
-	{0x1C24, 0x1C2B, prSpacingMark},            // Mc   [8] LEPCHA SUBJOINED LETTER YA..LEPCHA VOWEL SIGN UU
-	{0x1C2C, 0x1C33, prExtend},                 // Mn   [8] LEPCHA VOWEL SIGN E..LEPCHA CONSONANT SIGN T
-	{0x1C34, 0x1C35, prSpacingMark},            // Mc   [2] LEPCHA CONSONANT SIGN NYIN-DO..LEPCHA CONSONANT SIGN KANG
-	{0x1C36, 0x1C37, prExtend},                 // Mn   [2] LEPCHA SIGN RAN..LEPCHA SIGN NUKTA
-	{0x1CD0, 0x1CD2, prExtend},                 // Mn   [3] VEDIC TONE KARSHANA..VEDIC TONE PRENKHA
-	{0x1CD4, 0x1CE0, prExtend},                 // Mn  [13] VEDIC SIGN YAJURVEDIC MIDLINE SVARITA..VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA
-	{0x1CE1, 0x1CE1, prSpacingMark},            // Mc       VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA
-	{0x1CE2, 0x1CE8, prExtend},                 // Mn   [7] VEDIC SIGN VISARGA SVARITA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL
-	{0x1CED, 0x1CED, prExtend},                 // Mn       VEDIC SIGN TIRYAK
-	{0x1CF4, 0x1CF4, prExtend},                 // Mn       VEDIC TONE CANDRA ABOVE
-	{0x1CF7, 0x1CF7, prSpacingMark},            // Mc       VEDIC SIGN ATIKRAMA
-	{0x1CF8, 0x1CF9, prExtend},                 // Mn   [2] VEDIC TONE RING ABOVE..VEDIC TONE DOUBLE RING ABOVE
-	{0x1DC0, 0x1DFF, prExtend},                 // Mn  [64] COMBINING DOTTED GRAVE ACCENT..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW
-	{0x200B, 0x200B, prControl},                // Cf       ZERO WIDTH SPACE
-	{0x200C, 0x200C, prExtend},                 // Cf       ZERO WIDTH NON-JOINER
-	{0x200D, 0x200D, prZWJ},                    // Cf       ZERO WIDTH JOINER
-	{0x200E, 0x200F, prControl},                // Cf   [2] LEFT-TO-RIGHT MARK..RIGHT-TO-LEFT MARK
-	{0x2028, 0x2028, prControl},                // Zl       LINE SEPARATOR
-	{0x2029, 0x2029, prControl},                // Zp       PARAGRAPH SEPARATOR
-	{0x202A, 0x202E, prControl},                // Cf   [5] LEFT-TO-RIGHT EMBEDDING..RIGHT-TO-LEFT OVERRIDE
-	{0x203C, 0x203C, prExtendedPictographic},   // E0.6   [1] (‼️)       double exclamation mark
-	{0x2049, 0x2049, prExtendedPictographic},   // E0.6   [1] (⁉️)       exclamation question mark
-	{0x2060, 0x2064, prControl},                // Cf   [5] WORD JOINER..INVISIBLE PLUS
-	{0x2065, 0x2065, prControl},                // Cn       <reserved-2065>
-	{0x2066, 0x206F, prControl},                // Cf  [10] LEFT-TO-RIGHT ISOLATE..NOMINAL DIGIT SHAPES
-	{0x20D0, 0x20DC, prExtend},                 // Mn  [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE
-	{0x20DD, 0x20E0, prExtend},                 // Me   [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH
-	{0x20E1, 0x20E1, prExtend},                 // Mn       COMBINING LEFT RIGHT ARROW ABOVE
-	{0x20E2, 0x20E4, prExtend},                 // Me   [3] COMBINING ENCLOSING SCREEN..COMBINING ENCLOSING UPWARD POINTING TRIANGLE
-	{0x20E5, 0x20F0, prExtend},                 // Mn  [12] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING ASTERISK ABOVE
-	{0x2122, 0x2122, prExtendedPictographic},   // E0.6   [1] (™️)       trade mark
-	{0x2139, 0x2139, prExtendedPictographic},   // E0.6   [1] (ℹ️)       information
-	{0x2194, 0x2199, prExtendedPictographic},   // E0.6   [6] (↔️..↙️)    left-right arrow..down-left arrow
-	{0x21A9, 0x21AA, prExtendedPictographic},   // E0.6   [2] (↩️..↪️)    right arrow curving left..left arrow curving right
-	{0x231A, 0x231B, prExtendedPictographic},   // E0.6   [2] (⌚..⌛)    watch..hourglass done
-	{0x2328, 0x2328, prExtendedPictographic},   // E1.0   [1] (⌨️)       keyboard
-	{0x2388, 0x2388, prExtendedPictographic},   // E0.0   [1] (⎈)       HELM SYMBOL
-	{0x23CF, 0x23CF, prExtendedPictographic},   // E1.0   [1] (⏏️)       eject button
-	{0x23E9, 0x23EC, prExtendedPictographic},   // E0.6   [4] (⏩..⏬)    fast-forward button..fast down button
-	{0x23ED, 0x23EE, prExtendedPictographic},   // E0.7   [2] (⏭️..⏮️)    next track button..last track button
-	{0x23EF, 0x23EF, prExtendedPictographic},   // E1.0   [1] (⏯️)       play or pause button
-	{0x23F0, 0x23F0, prExtendedPictographic},   // E0.6   [1] (⏰)       alarm clock
-	{0x23F1, 0x23F2, prExtendedPictographic},   // E1.0   [2] (⏱️..⏲️)    stopwatch..timer clock
-	{0x23F3, 0x23F3, prExtendedPictographic},   // E0.6   [1] (⏳)       hourglass not done
-	{0x23F8, 0x23FA, prExtendedPictographic},   // E0.7   [3] (⏸️..⏺️)    pause button..record button
-	{0x24C2, 0x24C2, prExtendedPictographic},   // E0.6   [1] (Ⓜ️)       circled M
-	{0x25AA, 0x25AB, prExtendedPictographic},   // E0.6   [2] (▪️..▫️)    black small square..white small square
-	{0x25B6, 0x25B6, prExtendedPictographic},   // E0.6   [1] (▶️)       play button
-	{0x25C0, 0x25C0, prExtendedPictographic},   // E0.6   [1] (◀️)       reverse button
-	{0x25FB, 0x25FE, prExtendedPictographic},   // E0.6   [4] (◻️..◾)    white medium square..black medium-small square
-	{0x2600, 0x2601, prExtendedPictographic},   // E0.6   [2] (☀️..☁️)    sun..cloud
-	{0x2602, 0x2603, prExtendedPictographic},   // E0.7   [2] (☂️..☃️)    umbrella..snowman
-	{0x2604, 0x2604, prExtendedPictographic},   // E1.0   [1] (☄️)       comet
-	{0x2605, 0x2605, prExtendedPictographic},   // E0.0   [1] (★)       BLACK STAR
-	{0x2607, 0x260D, prExtendedPictographic},   // E0.0   [7] (☇..☍)    LIGHTNING..OPPOSITION
-	{0x260E, 0x260E, prExtendedPictographic},   // E0.6   [1] (☎️)       telephone
-	{0x260F, 0x2610, prExtendedPictographic},   // E0.0   [2] (☏..☐)    WHITE TELEPHONE..BALLOT BOX
-	{0x2611, 0x2611, prExtendedPictographic},   // E0.6   [1] (☑️)       check box with check
-	{0x2612, 0x2612, prExtendedPictographic},   // E0.0   [1] (☒)       BALLOT BOX WITH X
-	{0x2614, 0x2615, prExtendedPictographic},   // E0.6   [2] (☔..☕)    umbrella with rain drops..hot beverage
-	{0x2616, 0x2617, prExtendedPictographic},   // E0.0   [2] (☖..☗)    WHITE SHOGI PIECE..BLACK SHOGI PIECE
-	{0x2618, 0x2618, prExtendedPictographic},   // E1.0   [1] (☘️)       shamrock
-	{0x2619, 0x261C, prExtendedPictographic},   // E0.0   [4] (☙..☜)    REVERSED ROTATED FLORAL HEART BULLET..WHITE LEFT POINTING INDEX
-	{0x261D, 0x261D, prExtendedPictographic},   // E0.6   [1] (☝️)       index pointing up
-	{0x261E, 0x261F, prExtendedPictographic},   // E0.0   [2] (☞..☟)    WHITE RIGHT POINTING INDEX..WHITE DOWN POINTING INDEX
-	{0x2620, 0x2620, prExtendedPictographic},   // E1.0   [1] (☠️)       skull and crossbones
-	{0x2621, 0x2621, prExtendedPictographic},   // E0.0   [1] (☡)       CAUTION SIGN
-	{0x2622, 0x2623, prExtendedPictographic},   // E1.0   [2] (☢️..☣️)    radioactive..biohazard
-	{0x2624, 0x2625, prExtendedPictographic},   // E0.0   [2] (☤..☥)    CADUCEUS..ANKH
-	{0x2626, 0x2626, prExtendedPictographic},   // E1.0   [1] (☦️)       orthodox cross
-	{0x2627, 0x2629, prExtendedPictographic},   // E0.0   [3] (☧..☩)    CHI RHO..CROSS OF JERUSALEM
-	{0x262A, 0x262A, prExtendedPictographic},   // E0.7   [1] (☪️)       star and crescent
-	{0x262B, 0x262D, prExtendedPictographic},   // E0.0   [3] (☫..☭)    FARSI SYMBOL..HAMMER AND SICKLE
-	{0x262E, 0x262E, prExtendedPictographic},   // E1.0   [1] (☮️)       peace symbol
-	{0x262F, 0x262F, prExtendedPictographic},   // E0.7   [1] (☯️)       yin yang
-	{0x2630, 0x2637, prExtendedPictographic},   // E0.0   [8] (☰..☷)    TRIGRAM FOR HEAVEN..TRIGRAM FOR EARTH
-	{0x2638, 0x2639, prExtendedPictographic},   // E0.7   [2] (☸️..☹️)    wheel of dharma..frowning face
-	{0x263A, 0x263A, prExtendedPictographic},   // E0.6   [1] (☺️)       smiling face
-	{0x263B, 0x263F, prExtendedPictographic},   // E0.0   [5] (☻..☿)    BLACK SMILING FACE..MERCURY
-	{0x2640, 0x2640, prExtendedPictographic},   // E4.0   [1] (♀️)       female sign
-	{0x2641, 0x2641, prExtendedPictographic},   // E0.0   [1] (♁)       EARTH
-	{0x2642, 0x2642, prExtendedPictographic},   // E4.0   [1] (♂️)       male sign
-	{0x2643, 0x2647, prExtendedPictographic},   // E0.0   [5] (♃..♇)    JUPITER..PLUTO
-	{0x2648, 0x2653, prExtendedPictographic},   // E0.6  [12] (♈..♓)    Aries..Pisces
-	{0x2654, 0x265E, prExtendedPictographic},   // E0.0  [11] (♔..♞)    WHITE CHESS KING..BLACK CHESS KNIGHT
-	{0x265F, 0x265F, prExtendedPictographic},   // E11.0  [1] (♟️)       chess pawn
-	{0x2660, 0x2660, prExtendedPictographic},   // E0.6   [1] (♠️)       spade suit
-	{0x2661, 0x2662, prExtendedPictographic},   // E0.0   [2] (♡..♢)    WHITE HEART SUIT..WHITE DIAMOND SUIT
-	{0x2663, 0x2663, prExtendedPictographic},   // E0.6   [1] (♣️)       club suit
-	{0x2664, 0x2664, prExtendedPictographic},   // E0.0   [1] (♤)       WHITE SPADE SUIT
-	{0x2665, 0x2666, prExtendedPictographic},   // E0.6   [2] (♥️..♦️)    heart suit..diamond suit
-	{0x2667, 0x2667, prExtendedPictographic},   // E0.0   [1] (♧)       WHITE CLUB SUIT
-	{0x2668, 0x2668, prExtendedPictographic},   // E0.6   [1] (♨️)       hot springs
-	{0x2669, 0x267A, prExtendedPictographic},   // E0.0  [18] (♩..♺)    QUARTER NOTE..RECYCLING SYMBOL FOR GENERIC MATERIALS
-	{0x267B, 0x267B, prExtendedPictographic},   // E0.6   [1] (♻️)       recycling symbol
-	{0x267C, 0x267D, prExtendedPictographic},   // E0.0   [2] (♼..♽)    RECYCLED PAPER SYMBOL..PARTIALLY-RECYCLED PAPER SYMBOL
-	{0x267E, 0x267E, prExtendedPictographic},   // E11.0  [1] (♾️)       infinity
-	{0x267F, 0x267F, prExtendedPictographic},   // E0.6   [1] (♿)       wheelchair symbol
-	{0x2680, 0x2685, prExtendedPictographic},   // E0.0   [6] (⚀..⚅)    DIE FACE-1..DIE FACE-6
-	{0x2690, 0x2691, prExtendedPictographic},   // E0.0   [2] (⚐..⚑)    WHITE FLAG..BLACK FLAG
-	{0x2692, 0x2692, prExtendedPictographic},   // E1.0   [1] (⚒️)       hammer and pick
-	{0x2693, 0x2693, prExtendedPictographic},   // E0.6   [1] (⚓)       anchor
-	{0x2694, 0x2694, prExtendedPictographic},   // E1.0   [1] (⚔️)       crossed swords
-	{0x2695, 0x2695, prExtendedPictographic},   // E4.0   [1] (⚕️)       medical symbol
-	{0x2696, 0x2697, prExtendedPictographic},   // E1.0   [2] (⚖️..⚗️)    balance scale..alembic
-	{0x2698, 0x2698, prExtendedPictographic},   // E0.0   [1] (⚘)       FLOWER
-	{0x2699, 0x2699, prExtendedPictographic},   // E1.0   [1] (⚙️)       gear
-	{0x269A, 0x269A, prExtendedPictographic},   // E0.0   [1] (⚚)       STAFF OF HERMES
-	{0x269B, 0x269C, prExtendedPictographic},   // E1.0   [2] (⚛️..⚜️)    atom symbol..fleur-de-lis
-	{0x269D, 0x269F, prExtendedPictographic},   // E0.0   [3] (⚝..⚟)    OUTLINED WHITE STAR..THREE LINES CONVERGING LEFT
-	{0x26A0, 0x26A1, prExtendedPictographic},   // E0.6   [2] (⚠️..⚡)    warning..high voltage
-	{0x26A2, 0x26A6, prExtendedPictographic},   // E0.0   [5] (⚢..⚦)    DOUBLED FEMALE SIGN..MALE WITH STROKE SIGN
-	{0x26A7, 0x26A7, prExtendedPictographic},   // E13.0  [1] (⚧️)       transgender symbol
-	{0x26A8, 0x26A9, prExtendedPictographic},   // E0.0   [2] (⚨..⚩)    VERTICAL MALE WITH STROKE SIGN..HORIZONTAL MALE WITH STROKE SIGN
-	{0x26AA, 0x26AB, prExtendedPictographic},   // E0.6   [2] (⚪..⚫)    white circle..black circle
-	{0x26AC, 0x26AF, prExtendedPictographic},   // E0.0   [4] (⚬..⚯)    MEDIUM SMALL WHITE CIRCLE..UNMARRIED PARTNERSHIP SYMBOL
-	{0x26B0, 0x26B1, prExtendedPictographic},   // E1.0   [2] (⚰️..⚱️)    coffin..funeral urn
-	{0x26B2, 0x26BC, prExtendedPictographic},   // E0.0  [11] (⚲..⚼)    NEUTER..SESQUIQUADRATE
-	{0x26BD, 0x26BE, prExtendedPictographic},   // E0.6   [2] (⚽..⚾)    soccer ball..baseball
-	{0x26BF, 0x26C3, prExtendedPictographic},   // E0.0   [5] (⚿..⛃)    SQUARED KEY..BLACK DRAUGHTS KING
-	{0x26C4, 0x26C5, prExtendedPictographic},   // E0.6   [2] (⛄..⛅)    snowman without snow..sun behind cloud
-	{0x26C6, 0x26C7, prExtendedPictographic},   // E0.0   [2] (⛆..⛇)    RAIN..BLACK SNOWMAN
-	{0x26C8, 0x26C8, prExtendedPictographic},   // E0.7   [1] (⛈️)       cloud with lightning and rain
-	{0x26C9, 0x26CD, prExtendedPictographic},   // E0.0   [5] (⛉..⛍)    TURNED WHITE SHOGI PIECE..DISABLED CAR
-	{0x26CE, 0x26CE, prExtendedPictographic},   // E0.6   [1] (⛎)       Ophiuchus
-	{0x26CF, 0x26CF, prExtendedPictographic},   // E0.7   [1] (⛏️)       pick
-	{0x26D0, 0x26D0, prExtendedPictographic},   // E0.0   [1] (⛐)       CAR SLIDING
-	{0x26D1, 0x26D1, prExtendedPictographic},   // E0.7   [1] (⛑️)       rescue worker’s helmet
-	{0x26D2, 0x26D2, prExtendedPictographic},   // E0.0   [1] (⛒)       CIRCLED CROSSING LANES
-	{0x26D3, 0x26D3, prExtendedPictographic},   // E0.7   [1] (⛓️)       chains
-	{0x26D4, 0x26D4, prExtendedPictographic},   // E0.6   [1] (⛔)       no entry
-	{0x26D5, 0x26E8, prExtendedPictographic},   // E0.0  [20] (⛕..⛨)    ALTERNATE ONE-WAY LEFT WAY TRAFFIC..BLACK CROSS ON SHIELD
-	{0x26E9, 0x26E9, prExtendedPictographic},   // E0.7   [1] (⛩️)       shinto shrine
-	{0x26EA, 0x26EA, prExtendedPictographic},   // E0.6   [1] (⛪)       church
-	{0x26EB, 0x26EF, prExtendedPictographic},   // E0.0   [5] (⛫..⛯)    CASTLE..MAP SYMBOL FOR LIGHTHOUSE
-	{0x26F0, 0x26F1, prExtendedPictographic},   // E0.7   [2] (⛰️..⛱️)    mountain..umbrella on ground
-	{0x26F2, 0x26F3, prExtendedPictographic},   // E0.6   [2] (⛲..⛳)    fountain..flag in hole
-	{0x26F4, 0x26F4, prExtendedPictographic},   // E0.7   [1] (⛴️)       ferry
-	{0x26F5, 0x26F5, prExtendedPictographic},   // E0.6   [1] (⛵)       sailboat
-	{0x26F6, 0x26F6, prExtendedPictographic},   // E0.0   [1] (⛶)       SQUARE FOUR CORNERS
-	{0x26F7, 0x26F9, prExtendedPictographic},   // E0.7   [3] (⛷️..⛹️)    skier..person bouncing ball
-	{0x26FA, 0x26FA, prExtendedPictographic},   // E0.6   [1] (⛺)       tent
-	{0x26FB, 0x26FC, prExtendedPictographic},   // E0.0   [2] (⛻..⛼)    JAPANESE BANK SYMBOL..HEADSTONE GRAVEYARD SYMBOL
-	{0x26FD, 0x26FD, prExtendedPictographic},   // E0.6   [1] (⛽)       fuel pump
-	{0x26FE, 0x2701, prExtendedPictographic},   // E0.0   [4] (⛾..✁)    CUP ON BLACK SQUARE..UPPER BLADE SCISSORS
-	{0x2702, 0x2702, prExtendedPictographic},   // E0.6   [1] (✂️)       scissors
-	{0x2703, 0x2704, prExtendedPictographic},   // E0.0   [2] (✃..✄)    LOWER BLADE SCISSORS..WHITE SCISSORS
-	{0x2705, 0x2705, prExtendedPictographic},   // E0.6   [1] (✅)       check mark button
-	{0x2708, 0x270C, prExtendedPictographic},   // E0.6   [5] (✈️..✌️)    airplane..victory hand
-	{0x270D, 0x270D, prExtendedPictographic},   // E0.7   [1] (✍️)       writing hand
-	{0x270E, 0x270E, prExtendedPictographic},   // E0.0   [1] (✎)       LOWER RIGHT PENCIL
-	{0x270F, 0x270F, prExtendedPictographic},   // E0.6   [1] (✏️)       pencil
-	{0x2710, 0x2711, prExtendedPictographic},   // E0.0   [2] (✐..✑)    UPPER RIGHT PENCIL..WHITE NIB
-	{0x2712, 0x2712, prExtendedPictographic},   // E0.6   [1] (✒️)       black nib
-	{0x2714, 0x2714, prExtendedPictographic},   // E0.6   [1] (✔️)       check mark
-	{0x2716, 0x2716, prExtendedPictographic},   // E0.6   [1] (✖️)       multiply
-	{0x271D, 0x271D, prExtendedPictographic},   // E0.7   [1] (✝️)       latin cross
-	{0x2721, 0x2721, prExtendedPictographic},   // E0.7   [1] (✡️)       star of David
-	{0x2728, 0x2728, prExtendedPictographic},   // E0.6   [1] (✨)       sparkles
-	{0x2733, 0x2734, prExtendedPictographic},   // E0.6   [2] (✳️..✴️)    eight-spoked asterisk..eight-pointed star
-	{0x2744, 0x2744, prExtendedPictographic},   // E0.6   [1] (❄️)       snowflake
-	{0x2747, 0x2747, prExtendedPictographic},   // E0.6   [1] (❇️)       sparkle
-	{0x274C, 0x274C, prExtendedPictographic},   // E0.6   [1] (❌)       cross mark
-	{0x274E, 0x274E, prExtendedPictographic},   // E0.6   [1] (❎)       cross mark button
-	{0x2753, 0x2755, prExtendedPictographic},   // E0.6   [3] (❓..❕)    red question mark..white exclamation mark
-	{0x2757, 0x2757, prExtendedPictographic},   // E0.6   [1] (❗)       red exclamation mark
-	{0x2763, 0x2763, prExtendedPictographic},   // E1.0   [1] (❣️)       heart exclamation
-	{0x2764, 0x2764, prExtendedPictographic},   // E0.6   [1] (❤️)       red heart
-	{0x2765, 0x2767, prExtendedPictographic},   // E0.0   [3] (❥..❧)    ROTATED HEAVY BLACK HEART BULLET..ROTATED FLORAL HEART BULLET
-	{0x2795, 0x2797, prExtendedPictographic},   // E0.6   [3] (➕..➗)    plus..divide
-	{0x27A1, 0x27A1, prExtendedPictographic},   // E0.6   [1] (➡️)       right arrow
-	{0x27B0, 0x27B0, prExtendedPictographic},   // E0.6   [1] (➰)       curly loop
-	{0x27BF, 0x27BF, prExtendedPictographic},   // E1.0   [1] (➿)       double curly loop
-	{0x2934, 0x2935, prExtendedPictographic},   // E0.6   [2] (⤴️..⤵️)    right arrow curving up..right arrow curving down
-	{0x2B05, 0x2B07, prExtendedPictographic},   // E0.6   [3] (⬅️..⬇️)    left arrow..down arrow
-	{0x2B1B, 0x2B1C, prExtendedPictographic},   // E0.6   [2] (⬛..⬜)    black large square..white large square
-	{0x2B50, 0x2B50, prExtendedPictographic},   // E0.6   [1] (⭐)       star
-	{0x2B55, 0x2B55, prExtendedPictographic},   // E0.6   [1] (⭕)       hollow red circle
-	{0x2CEF, 0x2CF1, prExtend},                 // Mn   [3] COPTIC COMBINING NI ABOVE..COPTIC COMBINING SPIRITUS LENIS
-	{0x2D7F, 0x2D7F, prExtend},                 // Mn       TIFINAGH CONSONANT JOINER
-	{0x2DE0, 0x2DFF, prExtend},                 // Mn  [32] COMBINING CYRILLIC LETTER BE..COMBINING CYRILLIC LETTER IOTIFIED BIG YUS
-	{0x302A, 0x302D, prExtend},                 // Mn   [4] IDEOGRAPHIC LEVEL TONE MARK..IDEOGRAPHIC ENTERING TONE MARK
-	{0x302E, 0x302F, prExtend},                 // Mc   [2] HANGUL SINGLE DOT TONE MARK..HANGUL DOUBLE DOT TONE MARK
-	{0x3030, 0x3030, prExtendedPictographic},   // E0.6   [1] (〰️)       wavy dash
-	{0x303D, 0x303D, prExtendedPictographic},   // E0.6   [1] (〽️)       part alternation mark
-	{0x3099, 0x309A, prExtend},                 // Mn   [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
-	{0x3297, 0x3297, prExtendedPictographic},   // E0.6   [1] (㊗️)       Japanese “congratulations” button
-	{0x3299, 0x3299, prExtendedPictographic},   // E0.6   [1] (㊙️)       Japanese “secret” button
-	{0xA66F, 0xA66F, prExtend},                 // Mn       COMBINING CYRILLIC VZMET
-	{0xA670, 0xA672, prExtend},                 // Me   [3] COMBINING CYRILLIC TEN MILLIONS SIGN..COMBINING CYRILLIC THOUSAND MILLIONS SIGN
-	{0xA674, 0xA67D, prExtend},                 // Mn  [10] COMBINING CYRILLIC LETTER UKRAINIAN IE..COMBINING CYRILLIC PAYEROK
-	{0xA69E, 0xA69F, prExtend},                 // Mn   [2] COMBINING CYRILLIC LETTER EF..COMBINING CYRILLIC LETTER IOTIFIED E
-	{0xA6F0, 0xA6F1, prExtend},                 // Mn   [2] BAMUM COMBINING MARK KOQNDON..BAMUM COMBINING MARK TUKWENTIS
-	{0xA802, 0xA802, prExtend},                 // Mn       SYLOTI NAGRI SIGN DVISVARA
-	{0xA806, 0xA806, prExtend},                 // Mn       SYLOTI NAGRI SIGN HASANTA
-	{0xA80B, 0xA80B, prExtend},                 // Mn       SYLOTI NAGRI SIGN ANUSVARA
-	{0xA823, 0xA824, prSpacingMark},            // Mc   [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN I
-	{0xA825, 0xA826, prExtend},                 // Mn   [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E
-	{0xA827, 0xA827, prSpacingMark},            // Mc       SYLOTI NAGRI VOWEL SIGN OO
-	{0xA82C, 0xA82C, prExtend},                 // Mn       SYLOTI NAGRI SIGN ALTERNATE HASANTA
-	{0xA880, 0xA881, prSpacingMark},            // Mc   [2] SAURASHTRA SIGN ANUSVARA..SAURASHTRA SIGN VISARGA
-	{0xA8B4, 0xA8C3, prSpacingMark},            // Mc  [16] SAURASHTRA CONSONANT SIGN HAARU..SAURASHTRA VOWEL SIGN AU
-	{0xA8C4, 0xA8C5, prExtend},                 // Mn   [2] SAURASHTRA SIGN VIRAMA..SAURASHTRA SIGN CANDRABINDU
-	{0xA8E0, 0xA8F1, prExtend},                 // Mn  [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA
-	{0xA8FF, 0xA8FF, prExtend},                 // Mn       DEVANAGARI VOWEL SIGN AY
-	{0xA926, 0xA92D, prExtend},                 // Mn   [8] KAYAH LI VOWEL UE..KAYAH LI TONE CALYA PLOPHU
-	{0xA947, 0xA951, prExtend},                 // Mn  [11] REJANG VOWEL SIGN I..REJANG CONSONANT SIGN R
-	{0xA952, 0xA953, prSpacingMark},            // Mc   [2] REJANG CONSONANT SIGN H..REJANG VIRAMA
-	{0xA960, 0xA97C, prL},                      // Lo  [29] HANGUL CHOSEONG TIKEUT-MIEUM..HANGUL CHOSEONG SSANGYEORINHIEUH
-	{0xA980, 0xA982, prExtend},                 // Mn   [3] JAVANESE SIGN PANYANGGA..JAVANESE SIGN LAYAR
-	{0xA983, 0xA983, prSpacingMark},            // Mc       JAVANESE SIGN WIGNYAN
-	{0xA9B3, 0xA9B3, prExtend},                 // Mn       JAVANESE SIGN CECAK TELU
-	{0xA9B4, 0xA9B5, prSpacingMark},            // Mc   [2] JAVANESE VOWEL SIGN TARUNG..JAVANESE VOWEL SIGN TOLONG
-	{0xA9B6, 0xA9B9, prExtend},                 // Mn   [4] JAVANESE VOWEL SIGN WULU..JAVANESE VOWEL SIGN SUKU MENDUT
-	{0xA9BA, 0xA9BB, prSpacingMark},            // Mc   [2] JAVANESE VOWEL SIGN TALING..JAVANESE VOWEL SIGN DIRGA MURE
-	{0xA9BC, 0xA9BD, prExtend},                 // Mn   [2] JAVANESE VOWEL SIGN PEPET..JAVANESE CONSONANT SIGN KERET
-	{0xA9BE, 0xA9C0, prSpacingMark},            // Mc   [3] JAVANESE CONSONANT SIGN PENGKAL..JAVANESE PANGKON
-	{0xA9E5, 0xA9E5, prExtend},                 // Mn       MYANMAR SIGN SHAN SAW
-	{0xAA29, 0xAA2E, prExtend},                 // Mn   [6] CHAM VOWEL SIGN AA..CHAM VOWEL SIGN OE
-	{0xAA2F, 0xAA30, prSpacingMark},            // Mc   [2] CHAM VOWEL SIGN O..CHAM VOWEL SIGN AI
-	{0xAA31, 0xAA32, prExtend},                 // Mn   [2] CHAM VOWEL SIGN AU..CHAM VOWEL SIGN UE
-	{0xAA33, 0xAA34, prSpacingMark},            // Mc   [2] CHAM CONSONANT SIGN YA..CHAM CONSONANT SIGN RA
-	{0xAA35, 0xAA36, prExtend},                 // Mn   [2] CHAM CONSONANT SIGN LA..CHAM CONSONANT SIGN WA
-	{0xAA43, 0xAA43, prExtend},                 // Mn       CHAM CONSONANT SIGN FINAL NG
-	{0xAA4C, 0xAA4C, prExtend},                 // Mn       CHAM CONSONANT SIGN FINAL M
-	{0xAA4D, 0xAA4D, prSpacingMark},            // Mc       CHAM CONSONANT SIGN FINAL H
-	{0xAA7C, 0xAA7C, prExtend},                 // Mn       MYANMAR SIGN TAI LAING TONE-2
-	{0xAAB0, 0xAAB0, prExtend},                 // Mn       TAI VIET MAI KANG
-	{0xAAB2, 0xAAB4, prExtend},                 // Mn   [3] TAI VIET VOWEL I..TAI VIET VOWEL U
-	{0xAAB7, 0xAAB8, prExtend},                 // Mn   [2] TAI VIET MAI KHIT..TAI VIET VOWEL IA
-	{0xAABE, 0xAABF, prExtend},                 // Mn   [2] TAI VIET VOWEL AM..TAI VIET TONE MAI EK
-	{0xAAC1, 0xAAC1, prExtend},                 // Mn       TAI VIET TONE MAI THO
-	{0xAAEB, 0xAAEB, prSpacingMark},            // Mc       MEETEI MAYEK VOWEL SIGN II
-	{0xAAEC, 0xAAED, prExtend},                 // Mn   [2] MEETEI MAYEK VOWEL SIGN UU..MEETEI MAYEK VOWEL SIGN AAI
-	{0xAAEE, 0xAAEF, prSpacingMark},            // Mc   [2] MEETEI MAYEK VOWEL SIGN AU..MEETEI MAYEK VOWEL SIGN AAU
-	{0xAAF5, 0xAAF5, prSpacingMark},            // Mc       MEETEI MAYEK VOWEL SIGN VISARGA
-	{0xAAF6, 0xAAF6, prExtend},                 // Mn       MEETEI MAYEK VIRAMA
-	{0xABE3, 0xABE4, prSpacingMark},            // Mc   [2] MEETEI MAYEK VOWEL SIGN ONAP..MEETEI MAYEK VOWEL SIGN INAP
-	{0xABE5, 0xABE5, prExtend},                 // Mn       MEETEI MAYEK VOWEL SIGN ANAP
-	{0xABE6, 0xABE7, prSpacingMark},            // Mc   [2] MEETEI MAYEK VOWEL SIGN YENAP..MEETEI MAYEK VOWEL SIGN SOUNAP
-	{0xABE8, 0xABE8, prExtend},                 // Mn       MEETEI MAYEK VOWEL SIGN UNAP
-	{0xABE9, 0xABEA, prSpacingMark},            // Mc   [2] MEETEI MAYEK VOWEL SIGN CHEINAP..MEETEI MAYEK VOWEL SIGN NUNG
-	{0xABEC, 0xABEC, prSpacingMark},            // Mc       MEETEI MAYEK LUM IYEK
-	{0xABED, 0xABED, prExtend},                 // Mn       MEETEI MAYEK APUN IYEK
-	{0xAC00, 0xAC00, prLV},                     // Lo       HANGUL SYLLABLE GA
-	{0xAC01, 0xAC1B, prLVT},                    // Lo  [27] HANGUL SYLLABLE GAG..HANGUL SYLLABLE GAH
-	{0xAC1C, 0xAC1C, prLV},                     // Lo       HANGUL SYLLABLE GAE
-	{0xAC1D, 0xAC37, prLVT},                    // Lo  [27] HANGUL SYLLABLE GAEG..HANGUL SYLLABLE GAEH
-	{0xAC38, 0xAC38, prLV},                     // Lo       HANGUL SYLLABLE GYA
-	{0xAC39, 0xAC53, prLVT},                    // Lo  [27] HANGUL SYLLABLE GYAG..HANGUL SYLLABLE GYAH
-	{0xAC54, 0xAC54, prLV},                     // Lo       HANGUL SYLLABLE GYAE
-	{0xAC55, 0xAC6F, prLVT},                    // Lo  [27] HANGUL SYLLABLE GYAEG..HANGUL SYLLABLE GYAEH
-	{0xAC70, 0xAC70, prLV},                     // Lo       HANGUL SYLLABLE GEO
-	{0xAC71, 0xAC8B, prLVT},                    // Lo  [27] HANGUL SYLLABLE GEOG..HANGUL SYLLABLE GEOH
-	{0xAC8C, 0xAC8C, prLV},                     // Lo       HANGUL SYLLABLE GE
-	{0xAC8D, 0xACA7, prLVT},                    // Lo  [27] HANGUL SYLLABLE GEG..HANGUL SYLLABLE GEH
-	{0xACA8, 0xACA8, prLV},                     // Lo       HANGUL SYLLABLE GYEO
-	{0xACA9, 0xACC3, prLVT},                    // Lo  [27] HANGUL SYLLABLE GYEOG..HANGUL SYLLABLE GYEOH
-	{0xACC4, 0xACC4, prLV},                     // Lo       HANGUL SYLLABLE GYE
-	{0xACC5, 0xACDF, prLVT},                    // Lo  [27] HANGUL SYLLABLE GYEG..HANGUL SYLLABLE GYEH
-	{0xACE0, 0xACE0, prLV},                     // Lo       HANGUL SYLLABLE GO
-	{0xACE1, 0xACFB, prLVT},                    // Lo  [27] HANGUL SYLLABLE GOG..HANGUL SYLLABLE GOH
-	{0xACFC, 0xACFC, prLV},                     // Lo       HANGUL SYLLABLE GWA
-	{0xACFD, 0xAD17, prLVT},                    // Lo  [27] HANGUL SYLLABLE GWAG..HANGUL SYLLABLE GWAH
-	{0xAD18, 0xAD18, prLV},                     // Lo       HANGUL SYLLABLE GWAE
-	{0xAD19, 0xAD33, prLVT},                    // Lo  [27] HANGUL SYLLABLE GWAEG..HANGUL SYLLABLE GWAEH
-	{0xAD34, 0xAD34, prLV},                     // Lo       HANGUL SYLLABLE GOE
-	{0xAD35, 0xAD4F, prLVT},                    // Lo  [27] HANGUL SYLLABLE GOEG..HANGUL SYLLABLE GOEH
-	{0xAD50, 0xAD50, prLV},                     // Lo       HANGUL SYLLABLE GYO
-	{0xAD51, 0xAD6B, prLVT},                    // Lo  [27] HANGUL SYLLABLE GYOG..HANGUL SYLLABLE GYOH
-	{0xAD6C, 0xAD6C, prLV},                     // Lo       HANGUL SYLLABLE GU
-	{0xAD6D, 0xAD87, prLVT},                    // Lo  [27] HANGUL SYLLABLE GUG..HANGUL SYLLABLE GUH
-	{0xAD88, 0xAD88, prLV},                     // Lo       HANGUL SYLLABLE GWEO
-	{0xAD89, 0xADA3, prLVT},                    // Lo  [27] HANGUL SYLLABLE GWEOG..HANGUL SYLLABLE GWEOH
-	{0xADA4, 0xADA4, prLV},                     // Lo       HANGUL SYLLABLE GWE
-	{0xADA5, 0xADBF, prLVT},                    // Lo  [27] HANGUL SYLLABLE GWEG..HANGUL SYLLABLE GWEH
-	{0xADC0, 0xADC0, prLV},                     // Lo       HANGUL SYLLABLE GWI
-	{0xADC1, 0xADDB, prLVT},                    // Lo  [27] HANGUL SYLLABLE GWIG..HANGUL SYLLABLE GWIH
-	{0xADDC, 0xADDC, prLV},                     // Lo       HANGUL SYLLABLE GYU
-	{0xADDD, 0xADF7, prLVT},                    // Lo  [27] HANGUL SYLLABLE GYUG..HANGUL SYLLABLE GYUH
-	{0xADF8, 0xADF8, prLV},                     // Lo       HANGUL SYLLABLE GEU
-	{0xADF9, 0xAE13, prLVT},                    // Lo  [27] HANGUL SYLLABLE GEUG..HANGUL SYLLABLE GEUH
-	{0xAE14, 0xAE14, prLV},                     // Lo       HANGUL SYLLABLE GYI
-	{0xAE15, 0xAE2F, prLVT},                    // Lo  [27] HANGUL SYLLABLE GYIG..HANGUL SYLLABLE GYIH
-	{0xAE30, 0xAE30, prLV},                     // Lo       HANGUL SYLLABLE GI
-	{0xAE31, 0xAE4B, prLVT},                    // Lo  [27] HANGUL SYLLABLE GIG..HANGUL SYLLABLE GIH
-	{0xAE4C, 0xAE4C, prLV},                     // Lo       HANGUL SYLLABLE GGA
-	{0xAE4D, 0xAE67, prLVT},                    // Lo  [27] HANGUL SYLLABLE GGAG..HANGUL SYLLABLE GGAH
-	{0xAE68, 0xAE68, prLV},                     // Lo       HANGUL SYLLABLE GGAE
-	{0xAE69, 0xAE83, prLVT},                    // Lo  [27] HANGUL SYLLABLE GGAEG..HANGUL SYLLABLE GGAEH
-	{0xAE84, 0xAE84, prLV},                     // Lo       HANGUL SYLLABLE GGYA
-	{0xAE85, 0xAE9F, prLVT},                    // Lo  [27] HANGUL SYLLABLE GGYAG..HANGUL SYLLABLE GGYAH
-	{0xAEA0, 0xAEA0, prLV},                     // Lo       HANGUL SYLLABLE GGYAE
-	{0xAEA1, 0xAEBB, prLVT},                    // Lo  [27] HANGUL SYLLABLE GGYAEG..HANGUL SYLLABLE GGYAEH
-	{0xAEBC, 0xAEBC, prLV},                     // Lo       HANGUL SYLLABLE GGEO
-	{0xAEBD, 0xAED7, prLVT},                    // Lo  [27] HANGUL SYLLABLE GGEOG..HANGUL SYLLABLE GGEOH
-	{0xAED8, 0xAED8, prLV},                     // Lo       HANGUL SYLLABLE GGE
-	{0xAED9, 0xAEF3, prLVT},                    // Lo  [27] HANGUL SYLLABLE GGEG..HANGUL SYLLABLE GGEH
-	{0xAEF4, 0xAEF4, prLV},                     // Lo       HANGUL SYLLABLE GGYEO
-	{0xAEF5, 0xAF0F, prLVT},                    // Lo  [27] HANGUL SYLLABLE GGYEOG..HANGUL SYLLABLE GGYEOH
-	{0xAF10, 0xAF10, prLV},                     // Lo       HANGUL SYLLABLE GGYE
-	{0xAF11, 0xAF2B, prLVT},                    // Lo  [27] HANGUL SYLLABLE GGYEG..HANGUL SYLLABLE GGYEH
-	{0xAF2C, 0xAF2C, prLV},                     // Lo       HANGUL SYLLABLE GGO
-	{0xAF2D, 0xAF47, prLVT},                    // Lo  [27] HANGUL SYLLABLE GGOG..HANGUL SYLLABLE GGOH
-	{0xAF48, 0xAF48, prLV},                     // Lo       HANGUL SYLLABLE GGWA
-	{0xAF49, 0xAF63, prLVT},                    // Lo  [27] HANGUL SYLLABLE GGWAG..HANGUL SYLLABLE GGWAH
-	{0xAF64, 0xAF64, prLV},                     // Lo       HANGUL SYLLABLE GGWAE
-	{0xAF65, 0xAF7F, prLVT},                    // Lo  [27] HANGUL SYLLABLE GGWAEG..HANGUL SYLLABLE GGWAEH
-	{0xAF80, 0xAF80, prLV},                     // Lo       HANGUL SYLLABLE GGOE
-	{0xAF81, 0xAF9B, prLVT},                    // Lo  [27] HANGUL SYLLABLE GGOEG..HANGUL SYLLABLE GGOEH
-	{0xAF9C, 0xAF9C, prLV},                     // Lo       HANGUL SYLLABLE GGYO
-	{0xAF9D, 0xAFB7, prLVT},                    // Lo  [27] HANGUL SYLLABLE GGYOG..HANGUL SYLLABLE GGYOH
-	{0xAFB8, 0xAFB8, prLV},                     // Lo       HANGUL SYLLABLE GGU
-	{0xAFB9, 0xAFD3, prLVT},                    // Lo  [27] HANGUL SYLLABLE GGUG..HANGUL SYLLABLE GGUH
-	{0xAFD4, 0xAFD4, prLV},                     // Lo       HANGUL SYLLABLE GGWEO
-	{0xAFD5, 0xAFEF, prLVT},                    // Lo  [27] HANGUL SYLLABLE GGWEOG..HANGUL SYLLABLE GGWEOH
-	{0xAFF0, 0xAFF0, prLV},                     // Lo       HANGUL SYLLABLE GGWE
-	{0xAFF1, 0xB00B, prLVT},                    // Lo  [27] HANGUL SYLLABLE GGWEG..HANGUL SYLLABLE GGWEH
-	{0xB00C, 0xB00C, prLV},                     // Lo       HANGUL SYLLABLE GGWI
-	{0xB00D, 0xB027, prLVT},                    // Lo  [27] HANGUL SYLLABLE GGWIG..HANGUL SYLLABLE GGWIH
-	{0xB028, 0xB028, prLV},                     // Lo       HANGUL SYLLABLE GGYU
-	{0xB029, 0xB043, prLVT},                    // Lo  [27] HANGUL SYLLABLE GGYUG..HANGUL SYLLABLE GGYUH
-	{0xB044, 0xB044, prLV},                     // Lo       HANGUL SYLLABLE GGEU
-	{0xB045, 0xB05F, prLVT},                    // Lo  [27] HANGUL SYLLABLE GGEUG..HANGUL SYLLABLE GGEUH
-	{0xB060, 0xB060, prLV},                     // Lo       HANGUL SYLLABLE GGYI
-	{0xB061, 0xB07B, prLVT},                    // Lo  [27] HANGUL SYLLABLE GGYIG..HANGUL SYLLABLE GGYIH
-	{0xB07C, 0xB07C, prLV},                     // Lo       HANGUL SYLLABLE GGI
-	{0xB07D, 0xB097, prLVT},                    // Lo  [27] HANGUL SYLLABLE GGIG..HANGUL SYLLABLE GGIH
-	{0xB098, 0xB098, prLV},                     // Lo       HANGUL SYLLABLE NA
-	{0xB099, 0xB0B3, prLVT},                    // Lo  [27] HANGUL SYLLABLE NAG..HANGUL SYLLABLE NAH
-	{0xB0B4, 0xB0B4, prLV},                     // Lo       HANGUL SYLLABLE NAE
-	{0xB0B5, 0xB0CF, prLVT},                    // Lo  [27] HANGUL SYLLABLE NAEG..HANGUL SYLLABLE NAEH
-	{0xB0D0, 0xB0D0, prLV},                     // Lo       HANGUL SYLLABLE NYA
-	{0xB0D1, 0xB0EB, prLVT},                    // Lo  [27] HANGUL SYLLABLE NYAG..HANGUL SYLLABLE NYAH
-	{0xB0EC, 0xB0EC, prLV},                     // Lo       HANGUL SYLLABLE NYAE
-	{0xB0ED, 0xB107, prLVT},                    // Lo  [27] HANGUL SYLLABLE NYAEG..HANGUL SYLLABLE NYAEH
-	{0xB108, 0xB108, prLV},                     // Lo       HANGUL SYLLABLE NEO
-	{0xB109, 0xB123, prLVT},                    // Lo  [27] HANGUL SYLLABLE NEOG..HANGUL SYLLABLE NEOH
-	{0xB124, 0xB124, prLV},                     // Lo       HANGUL SYLLABLE NE
-	{0xB125, 0xB13F, prLVT},                    // Lo  [27] HANGUL SYLLABLE NEG..HANGUL SYLLABLE NEH
-	{0xB140, 0xB140, prLV},                     // Lo       HANGUL SYLLABLE NYEO
-	{0xB141, 0xB15B, prLVT},                    // Lo  [27] HANGUL SYLLABLE NYEOG..HANGUL SYLLABLE NYEOH
-	{0xB15C, 0xB15C, prLV},                     // Lo       HANGUL SYLLABLE NYE
-	{0xB15D, 0xB177, prLVT},                    // Lo  [27] HANGUL SYLLABLE NYEG..HANGUL SYLLABLE NYEH
-	{0xB178, 0xB178, prLV},                     // Lo       HANGUL SYLLABLE NO
-	{0xB179, 0xB193, prLVT},                    // Lo  [27] HANGUL SYLLABLE NOG..HANGUL SYLLABLE NOH
-	{0xB194, 0xB194, prLV},                     // Lo       HANGUL SYLLABLE NWA
-	{0xB195, 0xB1AF, prLVT},                    // Lo  [27] HANGUL SYLLABLE NWAG..HANGUL SYLLABLE NWAH
-	{0xB1B0, 0xB1B0, prLV},                     // Lo       HANGUL SYLLABLE NWAE
-	{0xB1B1, 0xB1CB, prLVT},                    // Lo  [27] HANGUL SYLLABLE NWAEG..HANGUL SYLLABLE NWAEH
-	{0xB1CC, 0xB1CC, prLV},                     // Lo       HANGUL SYLLABLE NOE
-	{0xB1CD, 0xB1E7, prLVT},                    // Lo  [27] HANGUL SYLLABLE NOEG..HANGUL SYLLABLE NOEH
-	{0xB1E8, 0xB1E8, prLV},                     // Lo       HANGUL SYLLABLE NYO
-	{0xB1E9, 0xB203, prLVT},                    // Lo  [27] HANGUL SYLLABLE NYOG..HANGUL SYLLABLE NYOH
-	{0xB204, 0xB204, prLV},                     // Lo       HANGUL SYLLABLE NU
-	{0xB205, 0xB21F, prLVT},                    // Lo  [27] HANGUL SYLLABLE NUG..HANGUL SYLLABLE NUH
-	{0xB220, 0xB220, prLV},                     // Lo       HANGUL SYLLABLE NWEO
-	{0xB221, 0xB23B, prLVT},                    // Lo  [27] HANGUL SYLLABLE NWEOG..HANGUL SYLLABLE NWEOH
-	{0xB23C, 0xB23C, prLV},                     // Lo       HANGUL SYLLABLE NWE
-	{0xB23D, 0xB257, prLVT},                    // Lo  [27] HANGUL SYLLABLE NWEG..HANGUL SYLLABLE NWEH
-	{0xB258, 0xB258, prLV},                     // Lo       HANGUL SYLLABLE NWI
-	{0xB259, 0xB273, prLVT},                    // Lo  [27] HANGUL SYLLABLE NWIG..HANGUL SYLLABLE NWIH
-	{0xB274, 0xB274, prLV},                     // Lo       HANGUL SYLLABLE NYU
-	{0xB275, 0xB28F, prLVT},                    // Lo  [27] HANGUL SYLLABLE NYUG..HANGUL SYLLABLE NYUH
-	{0xB290, 0xB290, prLV},                     // Lo       HANGUL SYLLABLE NEU
-	{0xB291, 0xB2AB, prLVT},                    // Lo  [27] HANGUL SYLLABLE NEUG..HANGUL SYLLABLE NEUH
-	{0xB2AC, 0xB2AC, prLV},                     // Lo       HANGUL SYLLABLE NYI
-	{0xB2AD, 0xB2C7, prLVT},                    // Lo  [27] HANGUL SYLLABLE NYIG..HANGUL SYLLABLE NYIH
-	{0xB2C8, 0xB2C8, prLV},                     // Lo       HANGUL SYLLABLE NI
-	{0xB2C9, 0xB2E3, prLVT},                    // Lo  [27] HANGUL SYLLABLE NIG..HANGUL SYLLABLE NIH
-	{0xB2E4, 0xB2E4, prLV},                     // Lo       HANGUL SYLLABLE DA
-	{0xB2E5, 0xB2FF, prLVT},                    // Lo  [27] HANGUL SYLLABLE DAG..HANGUL SYLLABLE DAH
-	{0xB300, 0xB300, prLV},                     // Lo       HANGUL SYLLABLE DAE
-	{0xB301, 0xB31B, prLVT},                    // Lo  [27] HANGUL SYLLABLE DAEG..HANGUL SYLLABLE DAEH
-	{0xB31C, 0xB31C, prLV},                     // Lo       HANGUL SYLLABLE DYA
-	{0xB31D, 0xB337, prLVT},                    // Lo  [27] HANGUL SYLLABLE DYAG..HANGUL SYLLABLE DYAH
-	{0xB338, 0xB338, prLV},                     // Lo       HANGUL SYLLABLE DYAE
-	{0xB339, 0xB353, prLVT},                    // Lo  [27] HANGUL SYLLABLE DYAEG..HANGUL SYLLABLE DYAEH
-	{0xB354, 0xB354, prLV},                     // Lo       HANGUL SYLLABLE DEO
-	{0xB355, 0xB36F, prLVT},                    // Lo  [27] HANGUL SYLLABLE DEOG..HANGUL SYLLABLE DEOH
-	{0xB370, 0xB370, prLV},                     // Lo       HANGUL SYLLABLE DE
-	{0xB371, 0xB38B, prLVT},                    // Lo  [27] HANGUL SYLLABLE DEG..HANGUL SYLLABLE DEH
-	{0xB38C, 0xB38C, prLV},                     // Lo       HANGUL SYLLABLE DYEO
-	{0xB38D, 0xB3A7, prLVT},                    // Lo  [27] HANGUL SYLLABLE DYEOG..HANGUL SYLLABLE DYEOH
-	{0xB3A8, 0xB3A8, prLV},                     // Lo       HANGUL SYLLABLE DYE
-	{0xB3A9, 0xB3C3, prLVT},                    // Lo  [27] HANGUL SYLLABLE DYEG..HANGUL SYLLABLE DYEH
-	{0xB3C4, 0xB3C4, prLV},                     // Lo       HANGUL SYLLABLE DO
-	{0xB3C5, 0xB3DF, prLVT},                    // Lo  [27] HANGUL SYLLABLE DOG..HANGUL SYLLABLE DOH
-	{0xB3E0, 0xB3E0, prLV},                     // Lo       HANGUL SYLLABLE DWA
-	{0xB3E1, 0xB3FB, prLVT},                    // Lo  [27] HANGUL SYLLABLE DWAG..HANGUL SYLLABLE DWAH
-	{0xB3FC, 0xB3FC, prLV},                     // Lo       HANGUL SYLLABLE DWAE
-	{0xB3FD, 0xB417, prLVT},                    // Lo  [27] HANGUL SYLLABLE DWAEG..HANGUL SYLLABLE DWAEH
-	{0xB418, 0xB418, prLV},                     // Lo       HANGUL SYLLABLE DOE
-	{0xB419, 0xB433, prLVT},                    // Lo  [27] HANGUL SYLLABLE DOEG..HANGUL SYLLABLE DOEH
-	{0xB434, 0xB434, prLV},                     // Lo       HANGUL SYLLABLE DYO
-	{0xB435, 0xB44F, prLVT},                    // Lo  [27] HANGUL SYLLABLE DYOG..HANGUL SYLLABLE DYOH
-	{0xB450, 0xB450, prLV},                     // Lo       HANGUL SYLLABLE DU
-	{0xB451, 0xB46B, prLVT},                    // Lo  [27] HANGUL SYLLABLE DUG..HANGUL SYLLABLE DUH
-	{0xB46C, 0xB46C, prLV},                     // Lo       HANGUL SYLLABLE DWEO
-	{0xB46D, 0xB487, prLVT},                    // Lo  [27] HANGUL SYLLABLE DWEOG..HANGUL SYLLABLE DWEOH
-	{0xB488, 0xB488, prLV},                     // Lo       HANGUL SYLLABLE DWE
-	{0xB489, 0xB4A3, prLVT},                    // Lo  [27] HANGUL SYLLABLE DWEG..HANGUL SYLLABLE DWEH
-	{0xB4A4, 0xB4A4, prLV},                     // Lo       HANGUL SYLLABLE DWI
-	{0xB4A5, 0xB4BF, prLVT},                    // Lo  [27] HANGUL SYLLABLE DWIG..HANGUL SYLLABLE DWIH
-	{0xB4C0, 0xB4C0, prLV},                     // Lo       HANGUL SYLLABLE DYU
-	{0xB4C1, 0xB4DB, prLVT},                    // Lo  [27] HANGUL SYLLABLE DYUG..HANGUL SYLLABLE DYUH
-	{0xB4DC, 0xB4DC, prLV},                     // Lo       HANGUL SYLLABLE DEU
-	{0xB4DD, 0xB4F7, prLVT},                    // Lo  [27] HANGUL SYLLABLE DEUG..HANGUL SYLLABLE DEUH
-	{0xB4F8, 0xB4F8, prLV},                     // Lo       HANGUL SYLLABLE DYI
-	{0xB4F9, 0xB513, prLVT},                    // Lo  [27] HANGUL SYLLABLE DYIG..HANGUL SYLLABLE DYIH
-	{0xB514, 0xB514, prLV},                     // Lo       HANGUL SYLLABLE DI
-	{0xB515, 0xB52F, prLVT},                    // Lo  [27] HANGUL SYLLABLE DIG..HANGUL SYLLABLE DIH
-	{0xB530, 0xB530, prLV},                     // Lo       HANGUL SYLLABLE DDA
-	{0xB531, 0xB54B, prLVT},                    // Lo  [27] HANGUL SYLLABLE DDAG..HANGUL SYLLABLE DDAH
-	{0xB54C, 0xB54C, prLV},                     // Lo       HANGUL SYLLABLE DDAE
-	{0xB54D, 0xB567, prLVT},                    // Lo  [27] HANGUL SYLLABLE DDAEG..HANGUL SYLLABLE DDAEH
-	{0xB568, 0xB568, prLV},                     // Lo       HANGUL SYLLABLE DDYA
-	{0xB569, 0xB583, prLVT},                    // Lo  [27] HANGUL SYLLABLE DDYAG..HANGUL SYLLABLE DDYAH
-	{0xB584, 0xB584, prLV},                     // Lo       HANGUL SYLLABLE DDYAE
-	{0xB585, 0xB59F, prLVT},                    // Lo  [27] HANGUL SYLLABLE DDYAEG..HANGUL SYLLABLE DDYAEH
-	{0xB5A0, 0xB5A0, prLV},                     // Lo       HANGUL SYLLABLE DDEO
-	{0xB5A1, 0xB5BB, prLVT},                    // Lo  [27] HANGUL SYLLABLE DDEOG..HANGUL SYLLABLE DDEOH
-	{0xB5BC, 0xB5BC, prLV},                     // Lo       HANGUL SYLLABLE DDE
-	{0xB5BD, 0xB5D7, prLVT},                    // Lo  [27] HANGUL SYLLABLE DDEG..HANGUL SYLLABLE DDEH
-	{0xB5D8, 0xB5D8, prLV},                     // Lo       HANGUL SYLLABLE DDYEO
-	{0xB5D9, 0xB5F3, prLVT},                    // Lo  [27] HANGUL SYLLABLE DDYEOG..HANGUL SYLLABLE DDYEOH
-	{0xB5F4, 0xB5F4, prLV},                     // Lo       HANGUL SYLLABLE DDYE
-	{0xB5F5, 0xB60F, prLVT},                    // Lo  [27] HANGUL SYLLABLE DDYEG..HANGUL SYLLABLE DDYEH
-	{0xB610, 0xB610, prLV},                     // Lo       HANGUL SYLLABLE DDO
-	{0xB611, 0xB62B, prLVT},                    // Lo  [27] HANGUL SYLLABLE DDOG..HANGUL SYLLABLE DDOH
-	{0xB62C, 0xB62C, prLV},                     // Lo       HANGUL SYLLABLE DDWA
-	{0xB62D, 0xB647, prLVT},                    // Lo  [27] HANGUL SYLLABLE DDWAG..HANGUL SYLLABLE DDWAH
-	{0xB648, 0xB648, prLV},                     // Lo       HANGUL SYLLABLE DDWAE
-	{0xB649, 0xB663, prLVT},                    // Lo  [27] HANGUL SYLLABLE DDWAEG..HANGUL SYLLABLE DDWAEH
-	{0xB664, 0xB664, prLV},                     // Lo       HANGUL SYLLABLE DDOE
-	{0xB665, 0xB67F, prLVT},                    // Lo  [27] HANGUL SYLLABLE DDOEG..HANGUL SYLLABLE DDOEH
-	{0xB680, 0xB680, prLV},                     // Lo       HANGUL SYLLABLE DDYO
-	{0xB681, 0xB69B, prLVT},                    // Lo  [27] HANGUL SYLLABLE DDYOG..HANGUL SYLLABLE DDYOH
-	{0xB69C, 0xB69C, prLV},                     // Lo       HANGUL SYLLABLE DDU
-	{0xB69D, 0xB6B7, prLVT},                    // Lo  [27] HANGUL SYLLABLE DDUG..HANGUL SYLLABLE DDUH
-	{0xB6B8, 0xB6B8, prLV},                     // Lo       HANGUL SYLLABLE DDWEO
-	{0xB6B9, 0xB6D3, prLVT},                    // Lo  [27] HANGUL SYLLABLE DDWEOG..HANGUL SYLLABLE DDWEOH
-	{0xB6D4, 0xB6D4, prLV},                     // Lo       HANGUL SYLLABLE DDWE
-	{0xB6D5, 0xB6EF, prLVT},                    // Lo  [27] HANGUL SYLLABLE DDWEG..HANGUL SYLLABLE DDWEH
-	{0xB6F0, 0xB6F0, prLV},                     // Lo       HANGUL SYLLABLE DDWI
-	{0xB6F1, 0xB70B, prLVT},                    // Lo  [27] HANGUL SYLLABLE DDWIG..HANGUL SYLLABLE DDWIH
-	{0xB70C, 0xB70C, prLV},                     // Lo       HANGUL SYLLABLE DDYU
-	{0xB70D, 0xB727, prLVT},                    // Lo  [27] HANGUL SYLLABLE DDYUG..HANGUL SYLLABLE DDYUH
-	{0xB728, 0xB728, prLV},                     // Lo       HANGUL SYLLABLE DDEU
-	{0xB729, 0xB743, prLVT},                    // Lo  [27] HANGUL SYLLABLE DDEUG..HANGUL SYLLABLE DDEUH
-	{0xB744, 0xB744, prLV},                     // Lo       HANGUL SYLLABLE DDYI
-	{0xB745, 0xB75F, prLVT},                    // Lo  [27] HANGUL SYLLABLE DDYIG..HANGUL SYLLABLE DDYIH
-	{0xB760, 0xB760, prLV},                     // Lo       HANGUL SYLLABLE DDI
-	{0xB761, 0xB77B, prLVT},                    // Lo  [27] HANGUL SYLLABLE DDIG..HANGUL SYLLABLE DDIH
-	{0xB77C, 0xB77C, prLV},                     // Lo       HANGUL SYLLABLE RA
-	{0xB77D, 0xB797, prLVT},                    // Lo  [27] HANGUL SYLLABLE RAG..HANGUL SYLLABLE RAH
-	{0xB798, 0xB798, prLV},                     // Lo       HANGUL SYLLABLE RAE
-	{0xB799, 0xB7B3, prLVT},                    // Lo  [27] HANGUL SYLLABLE RAEG..HANGUL SYLLABLE RAEH
-	{0xB7B4, 0xB7B4, prLV},                     // Lo       HANGUL SYLLABLE RYA
-	{0xB7B5, 0xB7CF, prLVT},                    // Lo  [27] HANGUL SYLLABLE RYAG..HANGUL SYLLABLE RYAH
-	{0xB7D0, 0xB7D0, prLV},                     // Lo       HANGUL SYLLABLE RYAE
-	{0xB7D1, 0xB7EB, prLVT},                    // Lo  [27] HANGUL SYLLABLE RYAEG..HANGUL SYLLABLE RYAEH
-	{0xB7EC, 0xB7EC, prLV},                     // Lo       HANGUL SYLLABLE REO
-	{0xB7ED, 0xB807, prLVT},                    // Lo  [27] HANGUL SYLLABLE REOG..HANGUL SYLLABLE REOH
-	{0xB808, 0xB808, prLV},                     // Lo       HANGUL SYLLABLE RE
-	{0xB809, 0xB823, prLVT},                    // Lo  [27] HANGUL SYLLABLE REG..HANGUL SYLLABLE REH
-	{0xB824, 0xB824, prLV},                     // Lo       HANGUL SYLLABLE RYEO
-	{0xB825, 0xB83F, prLVT},                    // Lo  [27] HANGUL SYLLABLE RYEOG..HANGUL SYLLABLE RYEOH
-	{0xB840, 0xB840, prLV},                     // Lo       HANGUL SYLLABLE RYE
-	{0xB841, 0xB85B, prLVT},                    // Lo  [27] HANGUL SYLLABLE RYEG..HANGUL SYLLABLE RYEH
-	{0xB85C, 0xB85C, prLV},                     // Lo       HANGUL SYLLABLE RO
-	{0xB85D, 0xB877, prLVT},                    // Lo  [27] HANGUL SYLLABLE ROG..HANGUL SYLLABLE ROH
-	{0xB878, 0xB878, prLV},                     // Lo       HANGUL SYLLABLE RWA
-	{0xB879, 0xB893, prLVT},                    // Lo  [27] HANGUL SYLLABLE RWAG..HANGUL SYLLABLE RWAH
-	{0xB894, 0xB894, prLV},                     // Lo       HANGUL SYLLABLE RWAE
-	{0xB895, 0xB8AF, prLVT},                    // Lo  [27] HANGUL SYLLABLE RWAEG..HANGUL SYLLABLE RWAEH
-	{0xB8B0, 0xB8B0, prLV},                     // Lo       HANGUL SYLLABLE ROE
-	{0xB8B1, 0xB8CB, prLVT},                    // Lo  [27] HANGUL SYLLABLE ROEG..HANGUL SYLLABLE ROEH
-	{0xB8CC, 0xB8CC, prLV},                     // Lo       HANGUL SYLLABLE RYO
-	{0xB8CD, 0xB8E7, prLVT},                    // Lo  [27] HANGUL SYLLABLE RYOG..HANGUL SYLLABLE RYOH
-	{0xB8E8, 0xB8E8, prLV},                     // Lo       HANGUL SYLLABLE RU
-	{0xB8E9, 0xB903, prLVT},                    // Lo  [27] HANGUL SYLLABLE RUG..HANGUL SYLLABLE RUH
-	{0xB904, 0xB904, prLV},                     // Lo       HANGUL SYLLABLE RWEO
-	{0xB905, 0xB91F, prLVT},                    // Lo  [27] HANGUL SYLLABLE RWEOG..HANGUL SYLLABLE RWEOH
-	{0xB920, 0xB920, prLV},                     // Lo       HANGUL SYLLABLE RWE
-	{0xB921, 0xB93B, prLVT},                    // Lo  [27] HANGUL SYLLABLE RWEG..HANGUL SYLLABLE RWEH
-	{0xB93C, 0xB93C, prLV},                     // Lo       HANGUL SYLLABLE RWI
-	{0xB93D, 0xB957, prLVT},                    // Lo  [27] HANGUL SYLLABLE RWIG..HANGUL SYLLABLE RWIH
-	{0xB958, 0xB958, prLV},                     // Lo       HANGUL SYLLABLE RYU
-	{0xB959, 0xB973, prLVT},                    // Lo  [27] HANGUL SYLLABLE RYUG..HANGUL SYLLABLE RYUH
-	{0xB974, 0xB974, prLV},                     // Lo       HANGUL SYLLABLE REU
-	{0xB975, 0xB98F, prLVT},                    // Lo  [27] HANGUL SYLLABLE REUG..HANGUL SYLLABLE REUH
-	{0xB990, 0xB990, prLV},                     // Lo       HANGUL SYLLABLE RYI
-	{0xB991, 0xB9AB, prLVT},                    // Lo  [27] HANGUL SYLLABLE RYIG..HANGUL SYLLABLE RYIH
-	{0xB9AC, 0xB9AC, prLV},                     // Lo       HANGUL SYLLABLE RI
-	{0xB9AD, 0xB9C7, prLVT},                    // Lo  [27] HANGUL SYLLABLE RIG..HANGUL SYLLABLE RIH
-	{0xB9C8, 0xB9C8, prLV},                     // Lo       HANGUL SYLLABLE MA
-	{0xB9C9, 0xB9E3, prLVT},                    // Lo  [27] HANGUL SYLLABLE MAG..HANGUL SYLLABLE MAH
-	{0xB9E4, 0xB9E4, prLV},                     // Lo       HANGUL SYLLABLE MAE
-	{0xB9E5, 0xB9FF, prLVT},                    // Lo  [27] HANGUL SYLLABLE MAEG..HANGUL SYLLABLE MAEH
-	{0xBA00, 0xBA00, prLV},                     // Lo       HANGUL SYLLABLE MYA
-	{0xBA01, 0xBA1B, prLVT},                    // Lo  [27] HANGUL SYLLABLE MYAG..HANGUL SYLLABLE MYAH
-	{0xBA1C, 0xBA1C, prLV},                     // Lo       HANGUL SYLLABLE MYAE
-	{0xBA1D, 0xBA37, prLVT},                    // Lo  [27] HANGUL SYLLABLE MYAEG..HANGUL SYLLABLE MYAEH
-	{0xBA38, 0xBA38, prLV},                     // Lo       HANGUL SYLLABLE MEO
-	{0xBA39, 0xBA53, prLVT},                    // Lo  [27] HANGUL SYLLABLE MEOG..HANGUL SYLLABLE MEOH
-	{0xBA54, 0xBA54, prLV},                     // Lo       HANGUL SYLLABLE ME
-	{0xBA55, 0xBA6F, prLVT},                    // Lo  [27] HANGUL SYLLABLE MEG..HANGUL SYLLABLE MEH
-	{0xBA70, 0xBA70, prLV},                     // Lo       HANGUL SYLLABLE MYEO
-	{0xBA71, 0xBA8B, prLVT},                    // Lo  [27] HANGUL SYLLABLE MYEOG..HANGUL SYLLABLE MYEOH
-	{0xBA8C, 0xBA8C, prLV},                     // Lo       HANGUL SYLLABLE MYE
-	{0xBA8D, 0xBAA7, prLVT},                    // Lo  [27] HANGUL SYLLABLE MYEG..HANGUL SYLLABLE MYEH
-	{0xBAA8, 0xBAA8, prLV},                     // Lo       HANGUL SYLLABLE MO
-	{0xBAA9, 0xBAC3, prLVT},                    // Lo  [27] HANGUL SYLLABLE MOG..HANGUL SYLLABLE MOH
-	{0xBAC4, 0xBAC4, prLV},                     // Lo       HANGUL SYLLABLE MWA
-	{0xBAC5, 0xBADF, prLVT},                    // Lo  [27] HANGUL SYLLABLE MWAG..HANGUL SYLLABLE MWAH
-	{0xBAE0, 0xBAE0, prLV},                     // Lo       HANGUL SYLLABLE MWAE
-	{0xBAE1, 0xBAFB, prLVT},                    // Lo  [27] HANGUL SYLLABLE MWAEG..HANGUL SYLLABLE MWAEH
-	{0xBAFC, 0xBAFC, prLV},                     // Lo       HANGUL SYLLABLE MOE
-	{0xBAFD, 0xBB17, prLVT},                    // Lo  [27] HANGUL SYLLABLE MOEG..HANGUL SYLLABLE MOEH
-	{0xBB18, 0xBB18, prLV},                     // Lo       HANGUL SYLLABLE MYO
-	{0xBB19, 0xBB33, prLVT},                    // Lo  [27] HANGUL SYLLABLE MYOG..HANGUL SYLLABLE MYOH
-	{0xBB34, 0xBB34, prLV},                     // Lo       HANGUL SYLLABLE MU
-	{0xBB35, 0xBB4F, prLVT},                    // Lo  [27] HANGUL SYLLABLE MUG..HANGUL SYLLABLE MUH
-	{0xBB50, 0xBB50, prLV},                     // Lo       HANGUL SYLLABLE MWEO
-	{0xBB51, 0xBB6B, prLVT},                    // Lo  [27] HANGUL SYLLABLE MWEOG..HANGUL SYLLABLE MWEOH
-	{0xBB6C, 0xBB6C, prLV},                     // Lo       HANGUL SYLLABLE MWE
-	{0xBB6D, 0xBB87, prLVT},                    // Lo  [27] HANGUL SYLLABLE MWEG..HANGUL SYLLABLE MWEH
-	{0xBB88, 0xBB88, prLV},                     // Lo       HANGUL SYLLABLE MWI
-	{0xBB89, 0xBBA3, prLVT},                    // Lo  [27] HANGUL SYLLABLE MWIG..HANGUL SYLLABLE MWIH
-	{0xBBA4, 0xBBA4, prLV},                     // Lo       HANGUL SYLLABLE MYU
-	{0xBBA5, 0xBBBF, prLVT},                    // Lo  [27] HANGUL SYLLABLE MYUG..HANGUL SYLLABLE MYUH
-	{0xBBC0, 0xBBC0, prLV},                     // Lo       HANGUL SYLLABLE MEU
-	{0xBBC1, 0xBBDB, prLVT},                    // Lo  [27] HANGUL SYLLABLE MEUG..HANGUL SYLLABLE MEUH
-	{0xBBDC, 0xBBDC, prLV},                     // Lo       HANGUL SYLLABLE MYI
-	{0xBBDD, 0xBBF7, prLVT},                    // Lo  [27] HANGUL SYLLABLE MYIG..HANGUL SYLLABLE MYIH
-	{0xBBF8, 0xBBF8, prLV},                     // Lo       HANGUL SYLLABLE MI
-	{0xBBF9, 0xBC13, prLVT},                    // Lo  [27] HANGUL SYLLABLE MIG..HANGUL SYLLABLE MIH
-	{0xBC14, 0xBC14, prLV},                     // Lo       HANGUL SYLLABLE BA
-	{0xBC15, 0xBC2F, prLVT},                    // Lo  [27] HANGUL SYLLABLE BAG..HANGUL SYLLABLE BAH
-	{0xBC30, 0xBC30, prLV},                     // Lo       HANGUL SYLLABLE BAE
-	{0xBC31, 0xBC4B, prLVT},                    // Lo  [27] HANGUL SYLLABLE BAEG..HANGUL SYLLABLE BAEH
-	{0xBC4C, 0xBC4C, prLV},                     // Lo       HANGUL SYLLABLE BYA
-	{0xBC4D, 0xBC67, prLVT},                    // Lo  [27] HANGUL SYLLABLE BYAG..HANGUL SYLLABLE BYAH
-	{0xBC68, 0xBC68, prLV},                     // Lo       HANGUL SYLLABLE BYAE
-	{0xBC69, 0xBC83, prLVT},                    // Lo  [27] HANGUL SYLLABLE BYAEG..HANGUL SYLLABLE BYAEH
-	{0xBC84, 0xBC84, prLV},                     // Lo       HANGUL SYLLABLE BEO
-	{0xBC85, 0xBC9F, prLVT},                    // Lo  [27] HANGUL SYLLABLE BEOG..HANGUL SYLLABLE BEOH
-	{0xBCA0, 0xBCA0, prLV},                     // Lo       HANGUL SYLLABLE BE
-	{0xBCA1, 0xBCBB, prLVT},                    // Lo  [27] HANGUL SYLLABLE BEG..HANGUL SYLLABLE BEH
-	{0xBCBC, 0xBCBC, prLV},                     // Lo       HANGUL SYLLABLE BYEO
-	{0xBCBD, 0xBCD7, prLVT},                    // Lo  [27] HANGUL SYLLABLE BYEOG..HANGUL SYLLABLE BYEOH
-	{0xBCD8, 0xBCD8, prLV},                     // Lo       HANGUL SYLLABLE BYE
-	{0xBCD9, 0xBCF3, prLVT},                    // Lo  [27] HANGUL SYLLABLE BYEG..HANGUL SYLLABLE BYEH
-	{0xBCF4, 0xBCF4, prLV},                     // Lo       HANGUL SYLLABLE BO
-	{0xBCF5, 0xBD0F, prLVT},                    // Lo  [27] HANGUL SYLLABLE BOG..HANGUL SYLLABLE BOH
-	{0xBD10, 0xBD10, prLV},                     // Lo       HANGUL SYLLABLE BWA
-	{0xBD11, 0xBD2B, prLVT},                    // Lo  [27] HANGUL SYLLABLE BWAG..HANGUL SYLLABLE BWAH
-	{0xBD2C, 0xBD2C, prLV},                     // Lo       HANGUL SYLLABLE BWAE
-	{0xBD2D, 0xBD47, prLVT},                    // Lo  [27] HANGUL SYLLABLE BWAEG..HANGUL SYLLABLE BWAEH
-	{0xBD48, 0xBD48, prLV},                     // Lo       HANGUL SYLLABLE BOE
-	{0xBD49, 0xBD63, prLVT},                    // Lo  [27] HANGUL SYLLABLE BOEG..HANGUL SYLLABLE BOEH
-	{0xBD64, 0xBD64, prLV},                     // Lo       HANGUL SYLLABLE BYO
-	{0xBD65, 0xBD7F, prLVT},                    // Lo  [27] HANGUL SYLLABLE BYOG..HANGUL SYLLABLE BYOH
-	{0xBD80, 0xBD80, prLV},                     // Lo       HANGUL SYLLABLE BU
-	{0xBD81, 0xBD9B, prLVT},                    // Lo  [27] HANGUL SYLLABLE BUG..HANGUL SYLLABLE BUH
-	{0xBD9C, 0xBD9C, prLV},                     // Lo       HANGUL SYLLABLE BWEO
-	{0xBD9D, 0xBDB7, prLVT},                    // Lo  [27] HANGUL SYLLABLE BWEOG..HANGUL SYLLABLE BWEOH
-	{0xBDB8, 0xBDB8, prLV},                     // Lo       HANGUL SYLLABLE BWE
-	{0xBDB9, 0xBDD3, prLVT},                    // Lo  [27] HANGUL SYLLABLE BWEG..HANGUL SYLLABLE BWEH
-	{0xBDD4, 0xBDD4, prLV},                     // Lo       HANGUL SYLLABLE BWI
-	{0xBDD5, 0xBDEF, prLVT},                    // Lo  [27] HANGUL SYLLABLE BWIG..HANGUL SYLLABLE BWIH
-	{0xBDF0, 0xBDF0, prLV},                     // Lo       HANGUL SYLLABLE BYU
-	{0xBDF1, 0xBE0B, prLVT},                    // Lo  [27] HANGUL SYLLABLE BYUG..HANGUL SYLLABLE BYUH
-	{0xBE0C, 0xBE0C, prLV},                     // Lo       HANGUL SYLLABLE BEU
-	{0xBE0D, 0xBE27, prLVT},                    // Lo  [27] HANGUL SYLLABLE BEUG..HANGUL SYLLABLE BEUH
-	{0xBE28, 0xBE28, prLV},                     // Lo       HANGUL SYLLABLE BYI
-	{0xBE29, 0xBE43, prLVT},                    // Lo  [27] HANGUL SYLLABLE BYIG..HANGUL SYLLABLE BYIH
-	{0xBE44, 0xBE44, prLV},                     // Lo       HANGUL SYLLABLE BI
-	{0xBE45, 0xBE5F, prLVT},                    // Lo  [27] HANGUL SYLLABLE BIG..HANGUL SYLLABLE BIH
-	{0xBE60, 0xBE60, prLV},                     // Lo       HANGUL SYLLABLE BBA
-	{0xBE61, 0xBE7B, prLVT},                    // Lo  [27] HANGUL SYLLABLE BBAG..HANGUL SYLLABLE BBAH
-	{0xBE7C, 0xBE7C, prLV},                     // Lo       HANGUL SYLLABLE BBAE
-	{0xBE7D, 0xBE97, prLVT},                    // Lo  [27] HANGUL SYLLABLE BBAEG..HANGUL SYLLABLE BBAEH
-	{0xBE98, 0xBE98, prLV},                     // Lo       HANGUL SYLLABLE BBYA
-	{0xBE99, 0xBEB3, prLVT},                    // Lo  [27] HANGUL SYLLABLE BBYAG..HANGUL SYLLABLE BBYAH
-	{0xBEB4, 0xBEB4, prLV},                     // Lo       HANGUL SYLLABLE BBYAE
-	{0xBEB5, 0xBECF, prLVT},                    // Lo  [27] HANGUL SYLLABLE BBYAEG..HANGUL SYLLABLE BBYAEH
-	{0xBED0, 0xBED0, prLV},                     // Lo       HANGUL SYLLABLE BBEO
-	{0xBED1, 0xBEEB, prLVT},                    // Lo  [27] HANGUL SYLLABLE BBEOG..HANGUL SYLLABLE BBEOH
-	{0xBEEC, 0xBEEC, prLV},                     // Lo       HANGUL SYLLABLE BBE
-	{0xBEED, 0xBF07, prLVT},                    // Lo  [27] HANGUL SYLLABLE BBEG..HANGUL SYLLABLE BBEH
-	{0xBF08, 0xBF08, prLV},                     // Lo       HANGUL SYLLABLE BBYEO
-	{0xBF09, 0xBF23, prLVT},                    // Lo  [27] HANGUL SYLLABLE BBYEOG..HANGUL SYLLABLE BBYEOH
-	{0xBF24, 0xBF24, prLV},                     // Lo       HANGUL SYLLABLE BBYE
-	{0xBF25, 0xBF3F, prLVT},                    // Lo  [27] HANGUL SYLLABLE BBYEG..HANGUL SYLLABLE BBYEH
-	{0xBF40, 0xBF40, prLV},                     // Lo       HANGUL SYLLABLE BBO
-	{0xBF41, 0xBF5B, prLVT},                    // Lo  [27] HANGUL SYLLABLE BBOG..HANGUL SYLLABLE BBOH
-	{0xBF5C, 0xBF5C, prLV},                     // Lo       HANGUL SYLLABLE BBWA
-	{0xBF5D, 0xBF77, prLVT},                    // Lo  [27] HANGUL SYLLABLE BBWAG..HANGUL SYLLABLE BBWAH
-	{0xBF78, 0xBF78, prLV},                     // Lo       HANGUL SYLLABLE BBWAE
-	{0xBF79, 0xBF93, prLVT},                    // Lo  [27] HANGUL SYLLABLE BBWAEG..HANGUL SYLLABLE BBWAEH
-	{0xBF94, 0xBF94, prLV},                     // Lo       HANGUL SYLLABLE BBOE
-	{0xBF95, 0xBFAF, prLVT},                    // Lo  [27] HANGUL SYLLABLE BBOEG..HANGUL SYLLABLE BBOEH
-	{0xBFB0, 0xBFB0, prLV},                     // Lo       HANGUL SYLLABLE BBYO
-	{0xBFB1, 0xBFCB, prLVT},                    // Lo  [27] HANGUL SYLLABLE BBYOG..HANGUL SYLLABLE BBYOH
-	{0xBFCC, 0xBFCC, prLV},                     // Lo       HANGUL SYLLABLE BBU
-	{0xBFCD, 0xBFE7, prLVT},                    // Lo  [27] HANGUL SYLLABLE BBUG..HANGUL SYLLABLE BBUH
-	{0xBFE8, 0xBFE8, prLV},                     // Lo       HANGUL SYLLABLE BBWEO
-	{0xBFE9, 0xC003, prLVT},                    // Lo  [27] HANGUL SYLLABLE BBWEOG..HANGUL SYLLABLE BBWEOH
-	{0xC004, 0xC004, prLV},                     // Lo       HANGUL SYLLABLE BBWE
-	{0xC005, 0xC01F, prLVT},                    // Lo  [27] HANGUL SYLLABLE BBWEG..HANGUL SYLLABLE BBWEH
-	{0xC020, 0xC020, prLV},                     // Lo       HANGUL SYLLABLE BBWI
-	{0xC021, 0xC03B, prLVT},                    // Lo  [27] HANGUL SYLLABLE BBWIG..HANGUL SYLLABLE BBWIH
-	{0xC03C, 0xC03C, prLV},                     // Lo       HANGUL SYLLABLE BBYU
-	{0xC03D, 0xC057, prLVT},                    // Lo  [27] HANGUL SYLLABLE BBYUG..HANGUL SYLLABLE BBYUH
-	{0xC058, 0xC058, prLV},                     // Lo       HANGUL SYLLABLE BBEU
-	{0xC059, 0xC073, prLVT},                    // Lo  [27] HANGUL SYLLABLE BBEUG..HANGUL SYLLABLE BBEUH
-	{0xC074, 0xC074, prLV},                     // Lo       HANGUL SYLLABLE BBYI
-	{0xC075, 0xC08F, prLVT},                    // Lo  [27] HANGUL SYLLABLE BBYIG..HANGUL SYLLABLE BBYIH
-	{0xC090, 0xC090, prLV},                     // Lo       HANGUL SYLLABLE BBI
-	{0xC091, 0xC0AB, prLVT},                    // Lo  [27] HANGUL SYLLABLE BBIG..HANGUL SYLLABLE BBIH
-	{0xC0AC, 0xC0AC, prLV},                     // Lo       HANGUL SYLLABLE SA
-	{0xC0AD, 0xC0C7, prLVT},                    // Lo  [27] HANGUL SYLLABLE SAG..HANGUL SYLLABLE SAH
-	{0xC0C8, 0xC0C8, prLV},                     // Lo       HANGUL SYLLABLE SAE
-	{0xC0C9, 0xC0E3, prLVT},                    // Lo  [27] HANGUL SYLLABLE SAEG..HANGUL SYLLABLE SAEH
-	{0xC0E4, 0xC0E4, prLV},                     // Lo       HANGUL SYLLABLE SYA
-	{0xC0E5, 0xC0FF, prLVT},                    // Lo  [27] HANGUL SYLLABLE SYAG..HANGUL SYLLABLE SYAH
-	{0xC100, 0xC100, prLV},                     // Lo       HANGUL SYLLABLE SYAE
-	{0xC101, 0xC11B, prLVT},                    // Lo  [27] HANGUL SYLLABLE SYAEG..HANGUL SYLLABLE SYAEH
-	{0xC11C, 0xC11C, prLV},                     // Lo       HANGUL SYLLABLE SEO
-	{0xC11D, 0xC137, prLVT},                    // Lo  [27] HANGUL SYLLABLE SEOG..HANGUL SYLLABLE SEOH
-	{0xC138, 0xC138, prLV},                     // Lo       HANGUL SYLLABLE SE
-	{0xC139, 0xC153, prLVT},                    // Lo  [27] HANGUL SYLLABLE SEG..HANGUL SYLLABLE SEH
-	{0xC154, 0xC154, prLV},                     // Lo       HANGUL SYLLABLE SYEO
-	{0xC155, 0xC16F, prLVT},                    // Lo  [27] HANGUL SYLLABLE SYEOG..HANGUL SYLLABLE SYEOH
-	{0xC170, 0xC170, prLV},                     // Lo       HANGUL SYLLABLE SYE
-	{0xC171, 0xC18B, prLVT},                    // Lo  [27] HANGUL SYLLABLE SYEG..HANGUL SYLLABLE SYEH
-	{0xC18C, 0xC18C, prLV},                     // Lo       HANGUL SYLLABLE SO
-	{0xC18D, 0xC1A7, prLVT},                    // Lo  [27] HANGUL SYLLABLE SOG..HANGUL SYLLABLE SOH
-	{0xC1A8, 0xC1A8, prLV},                     // Lo       HANGUL SYLLABLE SWA
-	{0xC1A9, 0xC1C3, prLVT},                    // Lo  [27] HANGUL SYLLABLE SWAG..HANGUL SYLLABLE SWAH
-	{0xC1C4, 0xC1C4, prLV},                     // Lo       HANGUL SYLLABLE SWAE
-	{0xC1C5, 0xC1DF, prLVT},                    // Lo  [27] HANGUL SYLLABLE SWAEG..HANGUL SYLLABLE SWAEH
-	{0xC1E0, 0xC1E0, prLV},                     // Lo       HANGUL SYLLABLE SOE
-	{0xC1E1, 0xC1FB, prLVT},                    // Lo  [27] HANGUL SYLLABLE SOEG..HANGUL SYLLABLE SOEH
-	{0xC1FC, 0xC1FC, prLV},                     // Lo       HANGUL SYLLABLE SYO
-	{0xC1FD, 0xC217, prLVT},                    // Lo  [27] HANGUL SYLLABLE SYOG..HANGUL SYLLABLE SYOH
-	{0xC218, 0xC218, prLV},                     // Lo       HANGUL SYLLABLE SU
-	{0xC219, 0xC233, prLVT},                    // Lo  [27] HANGUL SYLLABLE SUG..HANGUL SYLLABLE SUH
-	{0xC234, 0xC234, prLV},                     // Lo       HANGUL SYLLABLE SWEO
-	{0xC235, 0xC24F, prLVT},                    // Lo  [27] HANGUL SYLLABLE SWEOG..HANGUL SYLLABLE SWEOH
-	{0xC250, 0xC250, prLV},                     // Lo       HANGUL SYLLABLE SWE
-	{0xC251, 0xC26B, prLVT},                    // Lo  [27] HANGUL SYLLABLE SWEG..HANGUL SYLLABLE SWEH
-	{0xC26C, 0xC26C, prLV},                     // Lo       HANGUL SYLLABLE SWI
-	{0xC26D, 0xC287, prLVT},                    // Lo  [27] HANGUL SYLLABLE SWIG..HANGUL SYLLABLE SWIH
-	{0xC288, 0xC288, prLV},                     // Lo       HANGUL SYLLABLE SYU
-	{0xC289, 0xC2A3, prLVT},                    // Lo  [27] HANGUL SYLLABLE SYUG..HANGUL SYLLABLE SYUH
-	{0xC2A4, 0xC2A4, prLV},                     // Lo       HANGUL SYLLABLE SEU
-	{0xC2A5, 0xC2BF, prLVT},                    // Lo  [27] HANGUL SYLLABLE SEUG..HANGUL SYLLABLE SEUH
-	{0xC2C0, 0xC2C0, prLV},                     // Lo       HANGUL SYLLABLE SYI
-	{0xC2C1, 0xC2DB, prLVT},                    // Lo  [27] HANGUL SYLLABLE SYIG..HANGUL SYLLABLE SYIH
-	{0xC2DC, 0xC2DC, prLV},                     // Lo       HANGUL SYLLABLE SI
-	{0xC2DD, 0xC2F7, prLVT},                    // Lo  [27] HANGUL SYLLABLE SIG..HANGUL SYLLABLE SIH
-	{0xC2F8, 0xC2F8, prLV},                     // Lo       HANGUL SYLLABLE SSA
-	{0xC2F9, 0xC313, prLVT},                    // Lo  [27] HANGUL SYLLABLE SSAG..HANGUL SYLLABLE SSAH
-	{0xC314, 0xC314, prLV},                     // Lo       HANGUL SYLLABLE SSAE
-	{0xC315, 0xC32F, prLVT},                    // Lo  [27] HANGUL SYLLABLE SSAEG..HANGUL SYLLABLE SSAEH
-	{0xC330, 0xC330, prLV},                     // Lo       HANGUL SYLLABLE SSYA
-	{0xC331, 0xC34B, prLVT},                    // Lo  [27] HANGUL SYLLABLE SSYAG..HANGUL SYLLABLE SSYAH
-	{0xC34C, 0xC34C, prLV},                     // Lo       HANGUL SYLLABLE SSYAE
-	{0xC34D, 0xC367, prLVT},                    // Lo  [27] HANGUL SYLLABLE SSYAEG..HANGUL SYLLABLE SSYAEH
-	{0xC368, 0xC368, prLV},                     // Lo       HANGUL SYLLABLE SSEO
-	{0xC369, 0xC383, prLVT},                    // Lo  [27] HANGUL SYLLABLE SSEOG..HANGUL SYLLABLE SSEOH
-	{0xC384, 0xC384, prLV},                     // Lo       HANGUL SYLLABLE SSE
-	{0xC385, 0xC39F, prLVT},                    // Lo  [27] HANGUL SYLLABLE SSEG..HANGUL SYLLABLE SSEH
-	{0xC3A0, 0xC3A0, prLV},                     // Lo       HANGUL SYLLABLE SSYEO
-	{0xC3A1, 0xC3BB, prLVT},                    // Lo  [27] HANGUL SYLLABLE SSYEOG..HANGUL SYLLABLE SSYEOH
-	{0xC3BC, 0xC3BC, prLV},                     // Lo       HANGUL SYLLABLE SSYE
-	{0xC3BD, 0xC3D7, prLVT},                    // Lo  [27] HANGUL SYLLABLE SSYEG..HANGUL SYLLABLE SSYEH
-	{0xC3D8, 0xC3D8, prLV},                     // Lo       HANGUL SYLLABLE SSO
-	{0xC3D9, 0xC3F3, prLVT},                    // Lo  [27] HANGUL SYLLABLE SSOG..HANGUL SYLLABLE SSOH
-	{0xC3F4, 0xC3F4, prLV},                     // Lo       HANGUL SYLLABLE SSWA
-	{0xC3F5, 0xC40F, prLVT},                    // Lo  [27] HANGUL SYLLABLE SSWAG..HANGUL SYLLABLE SSWAH
-	{0xC410, 0xC410, prLV},                     // Lo       HANGUL SYLLABLE SSWAE
-	{0xC411, 0xC42B, prLVT},                    // Lo  [27] HANGUL SYLLABLE SSWAEG..HANGUL SYLLABLE SSWAEH
-	{0xC42C, 0xC42C, prLV},                     // Lo       HANGUL SYLLABLE SSOE
-	{0xC42D, 0xC447, prLVT},                    // Lo  [27] HANGUL SYLLABLE SSOEG..HANGUL SYLLABLE SSOEH
-	{0xC448, 0xC448, prLV},                     // Lo       HANGUL SYLLABLE SSYO
-	{0xC449, 0xC463, prLVT},                    // Lo  [27] HANGUL SYLLABLE SSYOG..HANGUL SYLLABLE SSYOH
-	{0xC464, 0xC464, prLV},                     // Lo       HANGUL SYLLABLE SSU
-	{0xC465, 0xC47F, prLVT},                    // Lo  [27] HANGUL SYLLABLE SSUG..HANGUL SYLLABLE SSUH
-	{0xC480, 0xC480, prLV},                     // Lo       HANGUL SYLLABLE SSWEO
-	{0xC481, 0xC49B, prLVT},                    // Lo  [27] HANGUL SYLLABLE SSWEOG..HANGUL SYLLABLE SSWEOH
-	{0xC49C, 0xC49C, prLV},                     // Lo       HANGUL SYLLABLE SSWE
-	{0xC49D, 0xC4B7, prLVT},                    // Lo  [27] HANGUL SYLLABLE SSWEG..HANGUL SYLLABLE SSWEH
-	{0xC4B8, 0xC4B8, prLV},                     // Lo       HANGUL SYLLABLE SSWI
-	{0xC4B9, 0xC4D3, prLVT},                    // Lo  [27] HANGUL SYLLABLE SSWIG..HANGUL SYLLABLE SSWIH
-	{0xC4D4, 0xC4D4, prLV},                     // Lo       HANGUL SYLLABLE SSYU
-	{0xC4D5, 0xC4EF, prLVT},                    // Lo  [27] HANGUL SYLLABLE SSYUG..HANGUL SYLLABLE SSYUH
-	{0xC4F0, 0xC4F0, prLV},                     // Lo       HANGUL SYLLABLE SSEU
-	{0xC4F1, 0xC50B, prLVT},                    // Lo  [27] HANGUL SYLLABLE SSEUG..HANGUL SYLLABLE SSEUH
-	{0xC50C, 0xC50C, prLV},                     // Lo       HANGUL SYLLABLE SSYI
-	{0xC50D, 0xC527, prLVT},                    // Lo  [27] HANGUL SYLLABLE SSYIG..HANGUL SYLLABLE SSYIH
-	{0xC528, 0xC528, prLV},                     // Lo       HANGUL SYLLABLE SSI
-	{0xC529, 0xC543, prLVT},                    // Lo  [27] HANGUL SYLLABLE SSIG..HANGUL SYLLABLE SSIH
-	{0xC544, 0xC544, prLV},                     // Lo       HANGUL SYLLABLE A
-	{0xC545, 0xC55F, prLVT},                    // Lo  [27] HANGUL SYLLABLE AG..HANGUL SYLLABLE AH
-	{0xC560, 0xC560, prLV},                     // Lo       HANGUL SYLLABLE AE
-	{0xC561, 0xC57B, prLVT},                    // Lo  [27] HANGUL SYLLABLE AEG..HANGUL SYLLABLE AEH
-	{0xC57C, 0xC57C, prLV},                     // Lo       HANGUL SYLLABLE YA
-	{0xC57D, 0xC597, prLVT},                    // Lo  [27] HANGUL SYLLABLE YAG..HANGUL SYLLABLE YAH
-	{0xC598, 0xC598, prLV},                     // Lo       HANGUL SYLLABLE YAE
-	{0xC599, 0xC5B3, prLVT},                    // Lo  [27] HANGUL SYLLABLE YAEG..HANGUL SYLLABLE YAEH
-	{0xC5B4, 0xC5B4, prLV},                     // Lo       HANGUL SYLLABLE EO
-	{0xC5B5, 0xC5CF, prLVT},                    // Lo  [27] HANGUL SYLLABLE EOG..HANGUL SYLLABLE EOH
-	{0xC5D0, 0xC5D0, prLV},                     // Lo       HANGUL SYLLABLE E
-	{0xC5D1, 0xC5EB, prLVT},                    // Lo  [27] HANGUL SYLLABLE EG..HANGUL SYLLABLE EH
-	{0xC5EC, 0xC5EC, prLV},                     // Lo       HANGUL SYLLABLE YEO
-	{0xC5ED, 0xC607, prLVT},                    // Lo  [27] HANGUL SYLLABLE YEOG..HANGUL SYLLABLE YEOH
-	{0xC608, 0xC608, prLV},                     // Lo       HANGUL SYLLABLE YE
-	{0xC609, 0xC623, prLVT},                    // Lo  [27] HANGUL SYLLABLE YEG..HANGUL SYLLABLE YEH
-	{0xC624, 0xC624, prLV},                     // Lo       HANGUL SYLLABLE O
-	{0xC625, 0xC63F, prLVT},                    // Lo  [27] HANGUL SYLLABLE OG..HANGUL SYLLABLE OH
-	{0xC640, 0xC640, prLV},                     // Lo       HANGUL SYLLABLE WA
-	{0xC641, 0xC65B, prLVT},                    // Lo  [27] HANGUL SYLLABLE WAG..HANGUL SYLLABLE WAH
-	{0xC65C, 0xC65C, prLV},                     // Lo       HANGUL SYLLABLE WAE
-	{0xC65D, 0xC677, prLVT},                    // Lo  [27] HANGUL SYLLABLE WAEG..HANGUL SYLLABLE WAEH
-	{0xC678, 0xC678, prLV},                     // Lo       HANGUL SYLLABLE OE
-	{0xC679, 0xC693, prLVT},                    // Lo  [27] HANGUL SYLLABLE OEG..HANGUL SYLLABLE OEH
-	{0xC694, 0xC694, prLV},                     // Lo       HANGUL SYLLABLE YO
-	{0xC695, 0xC6AF, prLVT},                    // Lo  [27] HANGUL SYLLABLE YOG..HANGUL SYLLABLE YOH
-	{0xC6B0, 0xC6B0, prLV},                     // Lo       HANGUL SYLLABLE U
-	{0xC6B1, 0xC6CB, prLVT},                    // Lo  [27] HANGUL SYLLABLE UG..HANGUL SYLLABLE UH
-	{0xC6CC, 0xC6CC, prLV},                     // Lo       HANGUL SYLLABLE WEO
-	{0xC6CD, 0xC6E7, prLVT},                    // Lo  [27] HANGUL SYLLABLE WEOG..HANGUL SYLLABLE WEOH
-	{0xC6E8, 0xC6E8, prLV},                     // Lo       HANGUL SYLLABLE WE
-	{0xC6E9, 0xC703, prLVT},                    // Lo  [27] HANGUL SYLLABLE WEG..HANGUL SYLLABLE WEH
-	{0xC704, 0xC704, prLV},                     // Lo       HANGUL SYLLABLE WI
-	{0xC705, 0xC71F, prLVT},                    // Lo  [27] HANGUL SYLLABLE WIG..HANGUL SYLLABLE WIH
-	{0xC720, 0xC720, prLV},                     // Lo       HANGUL SYLLABLE YU
-	{0xC721, 0xC73B, prLVT},                    // Lo  [27] HANGUL SYLLABLE YUG..HANGUL SYLLABLE YUH
-	{0xC73C, 0xC73C, prLV},                     // Lo       HANGUL SYLLABLE EU
-	{0xC73D, 0xC757, prLVT},                    // Lo  [27] HANGUL SYLLABLE EUG..HANGUL SYLLABLE EUH
-	{0xC758, 0xC758, prLV},                     // Lo       HANGUL SYLLABLE YI
-	{0xC759, 0xC773, prLVT},                    // Lo  [27] HANGUL SYLLABLE YIG..HANGUL SYLLABLE YIH
-	{0xC774, 0xC774, prLV},                     // Lo       HANGUL SYLLABLE I
-	{0xC775, 0xC78F, prLVT},                    // Lo  [27] HANGUL SYLLABLE IG..HANGUL SYLLABLE IH
-	{0xC790, 0xC790, prLV},                     // Lo       HANGUL SYLLABLE JA
-	{0xC791, 0xC7AB, prLVT},                    // Lo  [27] HANGUL SYLLABLE JAG..HANGUL SYLLABLE JAH
-	{0xC7AC, 0xC7AC, prLV},                     // Lo       HANGUL SYLLABLE JAE
-	{0xC7AD, 0xC7C7, prLVT},                    // Lo  [27] HANGUL SYLLABLE JAEG..HANGUL SYLLABLE JAEH
-	{0xC7C8, 0xC7C8, prLV},                     // Lo       HANGUL SYLLABLE JYA
-	{0xC7C9, 0xC7E3, prLVT},                    // Lo  [27] HANGUL SYLLABLE JYAG..HANGUL SYLLABLE JYAH
-	{0xC7E4, 0xC7E4, prLV},                     // Lo       HANGUL SYLLABLE JYAE
-	{0xC7E5, 0xC7FF, prLVT},                    // Lo  [27] HANGUL SYLLABLE JYAEG..HANGUL SYLLABLE JYAEH
-	{0xC800, 0xC800, prLV},                     // Lo       HANGUL SYLLABLE JEO
-	{0xC801, 0xC81B, prLVT},                    // Lo  [27] HANGUL SYLLABLE JEOG..HANGUL SYLLABLE JEOH
-	{0xC81C, 0xC81C, prLV},                     // Lo       HANGUL SYLLABLE JE
-	{0xC81D, 0xC837, prLVT},                    // Lo  [27] HANGUL SYLLABLE JEG..HANGUL SYLLABLE JEH
-	{0xC838, 0xC838, prLV},                     // Lo       HANGUL SYLLABLE JYEO
-	{0xC839, 0xC853, prLVT},                    // Lo  [27] HANGUL SYLLABLE JYEOG..HANGUL SYLLABLE JYEOH
-	{0xC854, 0xC854, prLV},                     // Lo       HANGUL SYLLABLE JYE
-	{0xC855, 0xC86F, prLVT},                    // Lo  [27] HANGUL SYLLABLE JYEG..HANGUL SYLLABLE JYEH
-	{0xC870, 0xC870, prLV},                     // Lo       HANGUL SYLLABLE JO
-	{0xC871, 0xC88B, prLVT},                    // Lo  [27] HANGUL SYLLABLE JOG..HANGUL SYLLABLE JOH
-	{0xC88C, 0xC88C, prLV},                     // Lo       HANGUL SYLLABLE JWA
-	{0xC88D, 0xC8A7, prLVT},                    // Lo  [27] HANGUL SYLLABLE JWAG..HANGUL SYLLABLE JWAH
-	{0xC8A8, 0xC8A8, prLV},                     // Lo       HANGUL SYLLABLE JWAE
-	{0xC8A9, 0xC8C3, prLVT},                    // Lo  [27] HANGUL SYLLABLE JWAEG..HANGUL SYLLABLE JWAEH
-	{0xC8C4, 0xC8C4, prLV},                     // Lo       HANGUL SYLLABLE JOE
-	{0xC8C5, 0xC8DF, prLVT},                    // Lo  [27] HANGUL SYLLABLE JOEG..HANGUL SYLLABLE JOEH
-	{0xC8E0, 0xC8E0, prLV},                     // Lo       HANGUL SYLLABLE JYO
-	{0xC8E1, 0xC8FB, prLVT},                    // Lo  [27] HANGUL SYLLABLE JYOG..HANGUL SYLLABLE JYOH
-	{0xC8FC, 0xC8FC, prLV},                     // Lo       HANGUL SYLLABLE JU
-	{0xC8FD, 0xC917, prLVT},                    // Lo  [27] HANGUL SYLLABLE JUG..HANGUL SYLLABLE JUH
-	{0xC918, 0xC918, prLV},                     // Lo       HANGUL SYLLABLE JWEO
-	{0xC919, 0xC933, prLVT},                    // Lo  [27] HANGUL SYLLABLE JWEOG..HANGUL SYLLABLE JWEOH
-	{0xC934, 0xC934, prLV},                     // Lo       HANGUL SYLLABLE JWE
-	{0xC935, 0xC94F, prLVT},                    // Lo  [27] HANGUL SYLLABLE JWEG..HANGUL SYLLABLE JWEH
-	{0xC950, 0xC950, prLV},                     // Lo       HANGUL SYLLABLE JWI
-	{0xC951, 0xC96B, prLVT},                    // Lo  [27] HANGUL SYLLABLE JWIG..HANGUL SYLLABLE JWIH
-	{0xC96C, 0xC96C, prLV},                     // Lo       HANGUL SYLLABLE JYU
-	{0xC96D, 0xC987, prLVT},                    // Lo  [27] HANGUL SYLLABLE JYUG..HANGUL SYLLABLE JYUH
-	{0xC988, 0xC988, prLV},                     // Lo       HANGUL SYLLABLE JEU
-	{0xC989, 0xC9A3, prLVT},                    // Lo  [27] HANGUL SYLLABLE JEUG..HANGUL SYLLABLE JEUH
-	{0xC9A4, 0xC9A4, prLV},                     // Lo       HANGUL SYLLABLE JYI
-	{0xC9A5, 0xC9BF, prLVT},                    // Lo  [27] HANGUL SYLLABLE JYIG..HANGUL SYLLABLE JYIH
-	{0xC9C0, 0xC9C0, prLV},                     // Lo       HANGUL SYLLABLE JI
-	{0xC9C1, 0xC9DB, prLVT},                    // Lo  [27] HANGUL SYLLABLE JIG..HANGUL SYLLABLE JIH
-	{0xC9DC, 0xC9DC, prLV},                     // Lo       HANGUL SYLLABLE JJA
-	{0xC9DD, 0xC9F7, prLVT},                    // Lo  [27] HANGUL SYLLABLE JJAG..HANGUL SYLLABLE JJAH
-	{0xC9F8, 0xC9F8, prLV},                     // Lo       HANGUL SYLLABLE JJAE
-	{0xC9F9, 0xCA13, prLVT},                    // Lo  [27] HANGUL SYLLABLE JJAEG..HANGUL SYLLABLE JJAEH
-	{0xCA14, 0xCA14, prLV},                     // Lo       HANGUL SYLLABLE JJYA
-	{0xCA15, 0xCA2F, prLVT},                    // Lo  [27] HANGUL SYLLABLE JJYAG..HANGUL SYLLABLE JJYAH
-	{0xCA30, 0xCA30, prLV},                     // Lo       HANGUL SYLLABLE JJYAE
-	{0xCA31, 0xCA4B, prLVT},                    // Lo  [27] HANGUL SYLLABLE JJYAEG..HANGUL SYLLABLE JJYAEH
-	{0xCA4C, 0xCA4C, prLV},                     // Lo       HANGUL SYLLABLE JJEO
-	{0xCA4D, 0xCA67, prLVT},                    // Lo  [27] HANGUL SYLLABLE JJEOG..HANGUL SYLLABLE JJEOH
-	{0xCA68, 0xCA68, prLV},                     // Lo       HANGUL SYLLABLE JJE
-	{0xCA69, 0xCA83, prLVT},                    // Lo  [27] HANGUL SYLLABLE JJEG..HANGUL SYLLABLE JJEH
-	{0xCA84, 0xCA84, prLV},                     // Lo       HANGUL SYLLABLE JJYEO
-	{0xCA85, 0xCA9F, prLVT},                    // Lo  [27] HANGUL SYLLABLE JJYEOG..HANGUL SYLLABLE JJYEOH
-	{0xCAA0, 0xCAA0, prLV},                     // Lo       HANGUL SYLLABLE JJYE
-	{0xCAA1, 0xCABB, prLVT},                    // Lo  [27] HANGUL SYLLABLE JJYEG..HANGUL SYLLABLE JJYEH
-	{0xCABC, 0xCABC, prLV},                     // Lo       HANGUL SYLLABLE JJO
-	{0xCABD, 0xCAD7, prLVT},                    // Lo  [27] HANGUL SYLLABLE JJOG..HANGUL SYLLABLE JJOH
-	{0xCAD8, 0xCAD8, prLV},                     // Lo       HANGUL SYLLABLE JJWA
-	{0xCAD9, 0xCAF3, prLVT},                    // Lo  [27] HANGUL SYLLABLE JJWAG..HANGUL SYLLABLE JJWAH
-	{0xCAF4, 0xCAF4, prLV},                     // Lo       HANGUL SYLLABLE JJWAE
-	{0xCAF5, 0xCB0F, prLVT},                    // Lo  [27] HANGUL SYLLABLE JJWAEG..HANGUL SYLLABLE JJWAEH
-	{0xCB10, 0xCB10, prLV},                     // Lo       HANGUL SYLLABLE JJOE
-	{0xCB11, 0xCB2B, prLVT},                    // Lo  [27] HANGUL SYLLABLE JJOEG..HANGUL SYLLABLE JJOEH
-	{0xCB2C, 0xCB2C, prLV},                     // Lo       HANGUL SYLLABLE JJYO
-	{0xCB2D, 0xCB47, prLVT},                    // Lo  [27] HANGUL SYLLABLE JJYOG..HANGUL SYLLABLE JJYOH
-	{0xCB48, 0xCB48, prLV},                     // Lo       HANGUL SYLLABLE JJU
-	{0xCB49, 0xCB63, prLVT},                    // Lo  [27] HANGUL SYLLABLE JJUG..HANGUL SYLLABLE JJUH
-	{0xCB64, 0xCB64, prLV},                     // Lo       HANGUL SYLLABLE JJWEO
-	{0xCB65, 0xCB7F, prLVT},                    // Lo  [27] HANGUL SYLLABLE JJWEOG..HANGUL SYLLABLE JJWEOH
-	{0xCB80, 0xCB80, prLV},                     // Lo       HANGUL SYLLABLE JJWE
-	{0xCB81, 0xCB9B, prLVT},                    // Lo  [27] HANGUL SYLLABLE JJWEG..HANGUL SYLLABLE JJWEH
-	{0xCB9C, 0xCB9C, prLV},                     // Lo       HANGUL SYLLABLE JJWI
-	{0xCB9D, 0xCBB7, prLVT},                    // Lo  [27] HANGUL SYLLABLE JJWIG..HANGUL SYLLABLE JJWIH
-	{0xCBB8, 0xCBB8, prLV},                     // Lo       HANGUL SYLLABLE JJYU
-	{0xCBB9, 0xCBD3, prLVT},                    // Lo  [27] HANGUL SYLLABLE JJYUG..HANGUL SYLLABLE JJYUH
-	{0xCBD4, 0xCBD4, prLV},                     // Lo       HANGUL SYLLABLE JJEU
-	{0xCBD5, 0xCBEF, prLVT},                    // Lo  [27] HANGUL SYLLABLE JJEUG..HANGUL SYLLABLE JJEUH
-	{0xCBF0, 0xCBF0, prLV},                     // Lo       HANGUL SYLLABLE JJYI
-	{0xCBF1, 0xCC0B, prLVT},                    // Lo  [27] HANGUL SYLLABLE JJYIG..HANGUL SYLLABLE JJYIH
-	{0xCC0C, 0xCC0C, prLV},                     // Lo       HANGUL SYLLABLE JJI
-	{0xCC0D, 0xCC27, prLVT},                    // Lo  [27] HANGUL SYLLABLE JJIG..HANGUL SYLLABLE JJIH
-	{0xCC28, 0xCC28, prLV},                     // Lo       HANGUL SYLLABLE CA
-	{0xCC29, 0xCC43, prLVT},                    // Lo  [27] HANGUL SYLLABLE CAG..HANGUL SYLLABLE CAH
-	{0xCC44, 0xCC44, prLV},                     // Lo       HANGUL SYLLABLE CAE
-	{0xCC45, 0xCC5F, prLVT},                    // Lo  [27] HANGUL SYLLABLE CAEG..HANGUL SYLLABLE CAEH
-	{0xCC60, 0xCC60, prLV},                     // Lo       HANGUL SYLLABLE CYA
-	{0xCC61, 0xCC7B, prLVT},                    // Lo  [27] HANGUL SYLLABLE CYAG..HANGUL SYLLABLE CYAH
-	{0xCC7C, 0xCC7C, prLV},                     // Lo       HANGUL SYLLABLE CYAE
-	{0xCC7D, 0xCC97, prLVT},                    // Lo  [27] HANGUL SYLLABLE CYAEG..HANGUL SYLLABLE CYAEH
-	{0xCC98, 0xCC98, prLV},                     // Lo       HANGUL SYLLABLE CEO
-	{0xCC99, 0xCCB3, prLVT},                    // Lo  [27] HANGUL SYLLABLE CEOG..HANGUL SYLLABLE CEOH
-	{0xCCB4, 0xCCB4, prLV},                     // Lo       HANGUL SYLLABLE CE
-	{0xCCB5, 0xCCCF, prLVT},                    // Lo  [27] HANGUL SYLLABLE CEG..HANGUL SYLLABLE CEH
-	{0xCCD0, 0xCCD0, prLV},                     // Lo       HANGUL SYLLABLE CYEO
-	{0xCCD1, 0xCCEB, prLVT},                    // Lo  [27] HANGUL SYLLABLE CYEOG..HANGUL SYLLABLE CYEOH
-	{0xCCEC, 0xCCEC, prLV},                     // Lo       HANGUL SYLLABLE CYE
-	{0xCCED, 0xCD07, prLVT},                    // Lo  [27] HANGUL SYLLABLE CYEG..HANGUL SYLLABLE CYEH
-	{0xCD08, 0xCD08, prLV},                     // Lo       HANGUL SYLLABLE CO
-	{0xCD09, 0xCD23, prLVT},                    // Lo  [27] HANGUL SYLLABLE COG..HANGUL SYLLABLE COH
-	{0xCD24, 0xCD24, prLV},                     // Lo       HANGUL SYLLABLE CWA
-	{0xCD25, 0xCD3F, prLVT},                    // Lo  [27] HANGUL SYLLABLE CWAG..HANGUL SYLLABLE CWAH
-	{0xCD40, 0xCD40, prLV},                     // Lo       HANGUL SYLLABLE CWAE
-	{0xCD41, 0xCD5B, prLVT},                    // Lo  [27] HANGUL SYLLABLE CWAEG..HANGUL SYLLABLE CWAEH
-	{0xCD5C, 0xCD5C, prLV},                     // Lo       HANGUL SYLLABLE COE
-	{0xCD5D, 0xCD77, prLVT},                    // Lo  [27] HANGUL SYLLABLE COEG..HANGUL SYLLABLE COEH
-	{0xCD78, 0xCD78, prLV},                     // Lo       HANGUL SYLLABLE CYO
-	{0xCD79, 0xCD93, prLVT},                    // Lo  [27] HANGUL SYLLABLE CYOG..HANGUL SYLLABLE CYOH
-	{0xCD94, 0xCD94, prLV},                     // Lo       HANGUL SYLLABLE CU
-	{0xCD95, 0xCDAF, prLVT},                    // Lo  [27] HANGUL SYLLABLE CUG..HANGUL SYLLABLE CUH
-	{0xCDB0, 0xCDB0, prLV},                     // Lo       HANGUL SYLLABLE CWEO
-	{0xCDB1, 0xCDCB, prLVT},                    // Lo  [27] HANGUL SYLLABLE CWEOG..HANGUL SYLLABLE CWEOH
-	{0xCDCC, 0xCDCC, prLV},                     // Lo       HANGUL SYLLABLE CWE
-	{0xCDCD, 0xCDE7, prLVT},                    // Lo  [27] HANGUL SYLLABLE CWEG..HANGUL SYLLABLE CWEH
-	{0xCDE8, 0xCDE8, prLV},                     // Lo       HANGUL SYLLABLE CWI
-	{0xCDE9, 0xCE03, prLVT},                    // Lo  [27] HANGUL SYLLABLE CWIG..HANGUL SYLLABLE CWIH
-	{0xCE04, 0xCE04, prLV},                     // Lo       HANGUL SYLLABLE CYU
-	{0xCE05, 0xCE1F, prLVT},                    // Lo  [27] HANGUL SYLLABLE CYUG..HANGUL SYLLABLE CYUH
-	{0xCE20, 0xCE20, prLV},                     // Lo       HANGUL SYLLABLE CEU
-	{0xCE21, 0xCE3B, prLVT},                    // Lo  [27] HANGUL SYLLABLE CEUG..HANGUL SYLLABLE CEUH
-	{0xCE3C, 0xCE3C, prLV},                     // Lo       HANGUL SYLLABLE CYI
-	{0xCE3D, 0xCE57, prLVT},                    // Lo  [27] HANGUL SYLLABLE CYIG..HANGUL SYLLABLE CYIH
-	{0xCE58, 0xCE58, prLV},                     // Lo       HANGUL SYLLABLE CI
-	{0xCE59, 0xCE73, prLVT},                    // Lo  [27] HANGUL SYLLABLE CIG..HANGUL SYLLABLE CIH
-	{0xCE74, 0xCE74, prLV},                     // Lo       HANGUL SYLLABLE KA
-	{0xCE75, 0xCE8F, prLVT},                    // Lo  [27] HANGUL SYLLABLE KAG..HANGUL SYLLABLE KAH
-	{0xCE90, 0xCE90, prLV},                     // Lo       HANGUL SYLLABLE KAE
-	{0xCE91, 0xCEAB, prLVT},                    // Lo  [27] HANGUL SYLLABLE KAEG..HANGUL SYLLABLE KAEH
-	{0xCEAC, 0xCEAC, prLV},                     // Lo       HANGUL SYLLABLE KYA
-	{0xCEAD, 0xCEC7, prLVT},                    // Lo  [27] HANGUL SYLLABLE KYAG..HANGUL SYLLABLE KYAH
-	{0xCEC8, 0xCEC8, prLV},                     // Lo       HANGUL SYLLABLE KYAE
-	{0xCEC9, 0xCEE3, prLVT},                    // Lo  [27] HANGUL SYLLABLE KYAEG..HANGUL SYLLABLE KYAEH
-	{0xCEE4, 0xCEE4, prLV},                     // Lo       HANGUL SYLLABLE KEO
-	{0xCEE5, 0xCEFF, prLVT},                    // Lo  [27] HANGUL SYLLABLE KEOG..HANGUL SYLLABLE KEOH
-	{0xCF00, 0xCF00, prLV},                     // Lo       HANGUL SYLLABLE KE
-	{0xCF01, 0xCF1B, prLVT},                    // Lo  [27] HANGUL SYLLABLE KEG..HANGUL SYLLABLE KEH
-	{0xCF1C, 0xCF1C, prLV},                     // Lo       HANGUL SYLLABLE KYEO
-	{0xCF1D, 0xCF37, prLVT},                    // Lo  [27] HANGUL SYLLABLE KYEOG..HANGUL SYLLABLE KYEOH
-	{0xCF38, 0xCF38, prLV},                     // Lo       HANGUL SYLLABLE KYE
-	{0xCF39, 0xCF53, prLVT},                    // Lo  [27] HANGUL SYLLABLE KYEG..HANGUL SYLLABLE KYEH
-	{0xCF54, 0xCF54, prLV},                     // Lo       HANGUL SYLLABLE KO
-	{0xCF55, 0xCF6F, prLVT},                    // Lo  [27] HANGUL SYLLABLE KOG..HANGUL SYLLABLE KOH
-	{0xCF70, 0xCF70, prLV},                     // Lo       HANGUL SYLLABLE KWA
-	{0xCF71, 0xCF8B, prLVT},                    // Lo  [27] HANGUL SYLLABLE KWAG..HANGUL SYLLABLE KWAH
-	{0xCF8C, 0xCF8C, prLV},                     // Lo       HANGUL SYLLABLE KWAE
-	{0xCF8D, 0xCFA7, prLVT},                    // Lo  [27] HANGUL SYLLABLE KWAEG..HANGUL SYLLABLE KWAEH
-	{0xCFA8, 0xCFA8, prLV},                     // Lo       HANGUL SYLLABLE KOE
-	{0xCFA9, 0xCFC3, prLVT},                    // Lo  [27] HANGUL SYLLABLE KOEG..HANGUL SYLLABLE KOEH
-	{0xCFC4, 0xCFC4, prLV},                     // Lo       HANGUL SYLLABLE KYO
-	{0xCFC5, 0xCFDF, prLVT},                    // Lo  [27] HANGUL SYLLABLE KYOG..HANGUL SYLLABLE KYOH
-	{0xCFE0, 0xCFE0, prLV},                     // Lo       HANGUL SYLLABLE KU
-	{0xCFE1, 0xCFFB, prLVT},                    // Lo  [27] HANGUL SYLLABLE KUG..HANGUL SYLLABLE KUH
-	{0xCFFC, 0xCFFC, prLV},                     // Lo       HANGUL SYLLABLE KWEO
-	{0xCFFD, 0xD017, prLVT},                    // Lo  [27] HANGUL SYLLABLE KWEOG..HANGUL SYLLABLE KWEOH
-	{0xD018, 0xD018, prLV},                     // Lo       HANGUL SYLLABLE KWE
-	{0xD019, 0xD033, prLVT},                    // Lo  [27] HANGUL SYLLABLE KWEG..HANGUL SYLLABLE KWEH
-	{0xD034, 0xD034, prLV},                     // Lo       HANGUL SYLLABLE KWI
-	{0xD035, 0xD04F, prLVT},                    // Lo  [27] HANGUL SYLLABLE KWIG..HANGUL SYLLABLE KWIH
-	{0xD050, 0xD050, prLV},                     // Lo       HANGUL SYLLABLE KYU
-	{0xD051, 0xD06B, prLVT},                    // Lo  [27] HANGUL SYLLABLE KYUG..HANGUL SYLLABLE KYUH
-	{0xD06C, 0xD06C, prLV},                     // Lo       HANGUL SYLLABLE KEU
-	{0xD06D, 0xD087, prLVT},                    // Lo  [27] HANGUL SYLLABLE KEUG..HANGUL SYLLABLE KEUH
-	{0xD088, 0xD088, prLV},                     // Lo       HANGUL SYLLABLE KYI
-	{0xD089, 0xD0A3, prLVT},                    // Lo  [27] HANGUL SYLLABLE KYIG..HANGUL SYLLABLE KYIH
-	{0xD0A4, 0xD0A4, prLV},                     // Lo       HANGUL SYLLABLE KI
-	{0xD0A5, 0xD0BF, prLVT},                    // Lo  [27] HANGUL SYLLABLE KIG..HANGUL SYLLABLE KIH
-	{0xD0C0, 0xD0C0, prLV},                     // Lo       HANGUL SYLLABLE TA
-	{0xD0C1, 0xD0DB, prLVT},                    // Lo  [27] HANGUL SYLLABLE TAG..HANGUL SYLLABLE TAH
-	{0xD0DC, 0xD0DC, prLV},                     // Lo       HANGUL SYLLABLE TAE
-	{0xD0DD, 0xD0F7, prLVT},                    // Lo  [27] HANGUL SYLLABLE TAEG..HANGUL SYLLABLE TAEH
-	{0xD0F8, 0xD0F8, prLV},                     // Lo       HANGUL SYLLABLE TYA
-	{0xD0F9, 0xD113, prLVT},                    // Lo  [27] HANGUL SYLLABLE TYAG..HANGUL SYLLABLE TYAH
-	{0xD114, 0xD114, prLV},                     // Lo       HANGUL SYLLABLE TYAE
-	{0xD115, 0xD12F, prLVT},                    // Lo  [27] HANGUL SYLLABLE TYAEG..HANGUL SYLLABLE TYAEH
-	{0xD130, 0xD130, prLV},                     // Lo       HANGUL SYLLABLE TEO
-	{0xD131, 0xD14B, prLVT},                    // Lo  [27] HANGUL SYLLABLE TEOG..HANGUL SYLLABLE TEOH
-	{0xD14C, 0xD14C, prLV},                     // Lo       HANGUL SYLLABLE TE
-	{0xD14D, 0xD167, prLVT},                    // Lo  [27] HANGUL SYLLABLE TEG..HANGUL SYLLABLE TEH
-	{0xD168, 0xD168, prLV},                     // Lo       HANGUL SYLLABLE TYEO
-	{0xD169, 0xD183, prLVT},                    // Lo  [27] HANGUL SYLLABLE TYEOG..HANGUL SYLLABLE TYEOH
-	{0xD184, 0xD184, prLV},                     // Lo       HANGUL SYLLABLE TYE
-	{0xD185, 0xD19F, prLVT},                    // Lo  [27] HANGUL SYLLABLE TYEG..HANGUL SYLLABLE TYEH
-	{0xD1A0, 0xD1A0, prLV},                     // Lo       HANGUL SYLLABLE TO
-	{0xD1A1, 0xD1BB, prLVT},                    // Lo  [27] HANGUL SYLLABLE TOG..HANGUL SYLLABLE TOH
-	{0xD1BC, 0xD1BC, prLV},                     // Lo       HANGUL SYLLABLE TWA
-	{0xD1BD, 0xD1D7, prLVT},                    // Lo  [27] HANGUL SYLLABLE TWAG..HANGUL SYLLABLE TWAH
-	{0xD1D8, 0xD1D8, prLV},                     // Lo       HANGUL SYLLABLE TWAE
-	{0xD1D9, 0xD1F3, prLVT},                    // Lo  [27] HANGUL SYLLABLE TWAEG..HANGUL SYLLABLE TWAEH
-	{0xD1F4, 0xD1F4, prLV},                     // Lo       HANGUL SYLLABLE TOE
-	{0xD1F5, 0xD20F, prLVT},                    // Lo  [27] HANGUL SYLLABLE TOEG..HANGUL SYLLABLE TOEH
-	{0xD210, 0xD210, prLV},                     // Lo       HANGUL SYLLABLE TYO
-	{0xD211, 0xD22B, prLVT},                    // Lo  [27] HANGUL SYLLABLE TYOG..HANGUL SYLLABLE TYOH
-	{0xD22C, 0xD22C, prLV},                     // Lo       HANGUL SYLLABLE TU
-	{0xD22D, 0xD247, prLVT},                    // Lo  [27] HANGUL SYLLABLE TUG..HANGUL SYLLABLE TUH
-	{0xD248, 0xD248, prLV},                     // Lo       HANGUL SYLLABLE TWEO
-	{0xD249, 0xD263, prLVT},                    // Lo  [27] HANGUL SYLLABLE TWEOG..HANGUL SYLLABLE TWEOH
-	{0xD264, 0xD264, prLV},                     // Lo       HANGUL SYLLABLE TWE
-	{0xD265, 0xD27F, prLVT},                    // Lo  [27] HANGUL SYLLABLE TWEG..HANGUL SYLLABLE TWEH
-	{0xD280, 0xD280, prLV},                     // Lo       HANGUL SYLLABLE TWI
-	{0xD281, 0xD29B, prLVT},                    // Lo  [27] HANGUL SYLLABLE TWIG..HANGUL SYLLABLE TWIH
-	{0xD29C, 0xD29C, prLV},                     // Lo       HANGUL SYLLABLE TYU
-	{0xD29D, 0xD2B7, prLVT},                    // Lo  [27] HANGUL SYLLABLE TYUG..HANGUL SYLLABLE TYUH
-	{0xD2B8, 0xD2B8, prLV},                     // Lo       HANGUL SYLLABLE TEU
-	{0xD2B9, 0xD2D3, prLVT},                    // Lo  [27] HANGUL SYLLABLE TEUG..HANGUL SYLLABLE TEUH
-	{0xD2D4, 0xD2D4, prLV},                     // Lo       HANGUL SYLLABLE TYI
-	{0xD2D5, 0xD2EF, prLVT},                    // Lo  [27] HANGUL SYLLABLE TYIG..HANGUL SYLLABLE TYIH
-	{0xD2F0, 0xD2F0, prLV},                     // Lo       HANGUL SYLLABLE TI
-	{0xD2F1, 0xD30B, prLVT},                    // Lo  [27] HANGUL SYLLABLE TIG..HANGUL SYLLABLE TIH
-	{0xD30C, 0xD30C, prLV},                     // Lo       HANGUL SYLLABLE PA
-	{0xD30D, 0xD327, prLVT},                    // Lo  [27] HANGUL SYLLABLE PAG..HANGUL SYLLABLE PAH
-	{0xD328, 0xD328, prLV},                     // Lo       HANGUL SYLLABLE PAE
-	{0xD329, 0xD343, prLVT},                    // Lo  [27] HANGUL SYLLABLE PAEG..HANGUL SYLLABLE PAEH
-	{0xD344, 0xD344, prLV},                     // Lo       HANGUL SYLLABLE PYA
-	{0xD345, 0xD35F, prLVT},                    // Lo  [27] HANGUL SYLLABLE PYAG..HANGUL SYLLABLE PYAH
-	{0xD360, 0xD360, prLV},                     // Lo       HANGUL SYLLABLE PYAE
-	{0xD361, 0xD37B, prLVT},                    // Lo  [27] HANGUL SYLLABLE PYAEG..HANGUL SYLLABLE PYAEH
-	{0xD37C, 0xD37C, prLV},                     // Lo       HANGUL SYLLABLE PEO
-	{0xD37D, 0xD397, prLVT},                    // Lo  [27] HANGUL SYLLABLE PEOG..HANGUL SYLLABLE PEOH
-	{0xD398, 0xD398, prLV},                     // Lo       HANGUL SYLLABLE PE
-	{0xD399, 0xD3B3, prLVT},                    // Lo  [27] HANGUL SYLLABLE PEG..HANGUL SYLLABLE PEH
-	{0xD3B4, 0xD3B4, prLV},                     // Lo       HANGUL SYLLABLE PYEO
-	{0xD3B5, 0xD3CF, prLVT},                    // Lo  [27] HANGUL SYLLABLE PYEOG..HANGUL SYLLABLE PYEOH
-	{0xD3D0, 0xD3D0, prLV},                     // Lo       HANGUL SYLLABLE PYE
-	{0xD3D1, 0xD3EB, prLVT},                    // Lo  [27] HANGUL SYLLABLE PYEG..HANGUL SYLLABLE PYEH
-	{0xD3EC, 0xD3EC, prLV},                     // Lo       HANGUL SYLLABLE PO
-	{0xD3ED, 0xD407, prLVT},                    // Lo  [27] HANGUL SYLLABLE POG..HANGUL SYLLABLE POH
-	{0xD408, 0xD408, prLV},                     // Lo       HANGUL SYLLABLE PWA
-	{0xD409, 0xD423, prLVT},                    // Lo  [27] HANGUL SYLLABLE PWAG..HANGUL SYLLABLE PWAH
-	{0xD424, 0xD424, prLV},                     // Lo       HANGUL SYLLABLE PWAE
-	{0xD425, 0xD43F, prLVT},                    // Lo  [27] HANGUL SYLLABLE PWAEG..HANGUL SYLLABLE PWAEH
-	{0xD440, 0xD440, prLV},                     // Lo       HANGUL SYLLABLE POE
-	{0xD441, 0xD45B, prLVT},                    // Lo  [27] HANGUL SYLLABLE POEG..HANGUL SYLLABLE POEH
-	{0xD45C, 0xD45C, prLV},                     // Lo       HANGUL SYLLABLE PYO
-	{0xD45D, 0xD477, prLVT},                    // Lo  [27] HANGUL SYLLABLE PYOG..HANGUL SYLLABLE PYOH
-	{0xD478, 0xD478, prLV},                     // Lo       HANGUL SYLLABLE PU
-	{0xD479, 0xD493, prLVT},                    // Lo  [27] HANGUL SYLLABLE PUG..HANGUL SYLLABLE PUH
-	{0xD494, 0xD494, prLV},                     // Lo       HANGUL SYLLABLE PWEO
-	{0xD495, 0xD4AF, prLVT},                    // Lo  [27] HANGUL SYLLABLE PWEOG..HANGUL SYLLABLE PWEOH
-	{0xD4B0, 0xD4B0, prLV},                     // Lo       HANGUL SYLLABLE PWE
-	{0xD4B1, 0xD4CB, prLVT},                    // Lo  [27] HANGUL SYLLABLE PWEG..HANGUL SYLLABLE PWEH
-	{0xD4CC, 0xD4CC, prLV},                     // Lo       HANGUL SYLLABLE PWI
-	{0xD4CD, 0xD4E7, prLVT},                    // Lo  [27] HANGUL SYLLABLE PWIG..HANGUL SYLLABLE PWIH
-	{0xD4E8, 0xD4E8, prLV},                     // Lo       HANGUL SYLLABLE PYU
-	{0xD4E9, 0xD503, prLVT},                    // Lo  [27] HANGUL SYLLABLE PYUG..HANGUL SYLLABLE PYUH
-	{0xD504, 0xD504, prLV},                     // Lo       HANGUL SYLLABLE PEU
-	{0xD505, 0xD51F, prLVT},                    // Lo  [27] HANGUL SYLLABLE PEUG..HANGUL SYLLABLE PEUH
-	{0xD520, 0xD520, prLV},                     // Lo       HANGUL SYLLABLE PYI
-	{0xD521, 0xD53B, prLVT},                    // Lo  [27] HANGUL SYLLABLE PYIG..HANGUL SYLLABLE PYIH
-	{0xD53C, 0xD53C, prLV},                     // Lo       HANGUL SYLLABLE PI
-	{0xD53D, 0xD557, prLVT},                    // Lo  [27] HANGUL SYLLABLE PIG..HANGUL SYLLABLE PIH
-	{0xD558, 0xD558, prLV},                     // Lo       HANGUL SYLLABLE HA
-	{0xD559, 0xD573, prLVT},                    // Lo  [27] HANGUL SYLLABLE HAG..HANGUL SYLLABLE HAH
-	{0xD574, 0xD574, prLV},                     // Lo       HANGUL SYLLABLE HAE
-	{0xD575, 0xD58F, prLVT},                    // Lo  [27] HANGUL SYLLABLE HAEG..HANGUL SYLLABLE HAEH
-	{0xD590, 0xD590, prLV},                     // Lo       HANGUL SYLLABLE HYA
-	{0xD591, 0xD5AB, prLVT},                    // Lo  [27] HANGUL SYLLABLE HYAG..HANGUL SYLLABLE HYAH
-	{0xD5AC, 0xD5AC, prLV},                     // Lo       HANGUL SYLLABLE HYAE
-	{0xD5AD, 0xD5C7, prLVT},                    // Lo  [27] HANGUL SYLLABLE HYAEG..HANGUL SYLLABLE HYAEH
-	{0xD5C8, 0xD5C8, prLV},                     // Lo       HANGUL SYLLABLE HEO
-	{0xD5C9, 0xD5E3, prLVT},                    // Lo  [27] HANGUL SYLLABLE HEOG..HANGUL SYLLABLE HEOH
-	{0xD5E4, 0xD5E4, prLV},                     // Lo       HANGUL SYLLABLE HE
-	{0xD5E5, 0xD5FF, prLVT},                    // Lo  [27] HANGUL SYLLABLE HEG..HANGUL SYLLABLE HEH
-	{0xD600, 0xD600, prLV},                     // Lo       HANGUL SYLLABLE HYEO
-	{0xD601, 0xD61B, prLVT},                    // Lo  [27] HANGUL SYLLABLE HYEOG..HANGUL SYLLABLE HYEOH
-	{0xD61C, 0xD61C, prLV},                     // Lo       HANGUL SYLLABLE HYE
-	{0xD61D, 0xD637, prLVT},                    // Lo  [27] HANGUL SYLLABLE HYEG..HANGUL SYLLABLE HYEH
-	{0xD638, 0xD638, prLV},                     // Lo       HANGUL SYLLABLE HO
-	{0xD639, 0xD653, prLVT},                    // Lo  [27] HANGUL SYLLABLE HOG..HANGUL SYLLABLE HOH
-	{0xD654, 0xD654, prLV},                     // Lo       HANGUL SYLLABLE HWA
-	{0xD655, 0xD66F, prLVT},                    // Lo  [27] HANGUL SYLLABLE HWAG..HANGUL SYLLABLE HWAH
-	{0xD670, 0xD670, prLV},                     // Lo       HANGUL SYLLABLE HWAE
-	{0xD671, 0xD68B, prLVT},                    // Lo  [27] HANGUL SYLLABLE HWAEG..HANGUL SYLLABLE HWAEH
-	{0xD68C, 0xD68C, prLV},                     // Lo       HANGUL SYLLABLE HOE
-	{0xD68D, 0xD6A7, prLVT},                    // Lo  [27] HANGUL SYLLABLE HOEG..HANGUL SYLLABLE HOEH
-	{0xD6A8, 0xD6A8, prLV},                     // Lo       HANGUL SYLLABLE HYO
-	{0xD6A9, 0xD6C3, prLVT},                    // Lo  [27] HANGUL SYLLABLE HYOG..HANGUL SYLLABLE HYOH
-	{0xD6C4, 0xD6C4, prLV},                     // Lo       HANGUL SYLLABLE HU
-	{0xD6C5, 0xD6DF, prLVT},                    // Lo  [27] HANGUL SYLLABLE HUG..HANGUL SYLLABLE HUH
-	{0xD6E0, 0xD6E0, prLV},                     // Lo       HANGUL SYLLABLE HWEO
-	{0xD6E1, 0xD6FB, prLVT},                    // Lo  [27] HANGUL SYLLABLE HWEOG..HANGUL SYLLABLE HWEOH
-	{0xD6FC, 0xD6FC, prLV},                     // Lo       HANGUL SYLLABLE HWE
-	{0xD6FD, 0xD717, prLVT},                    // Lo  [27] HANGUL SYLLABLE HWEG..HANGUL SYLLABLE HWEH
-	{0xD718, 0xD718, prLV},                     // Lo       HANGUL SYLLABLE HWI
-	{0xD719, 0xD733, prLVT},                    // Lo  [27] HANGUL SYLLABLE HWIG..HANGUL SYLLABLE HWIH
-	{0xD734, 0xD734, prLV},                     // Lo       HANGUL SYLLABLE HYU
-	{0xD735, 0xD74F, prLVT},                    // Lo  [27] HANGUL SYLLABLE HYUG..HANGUL SYLLABLE HYUH
-	{0xD750, 0xD750, prLV},                     // Lo       HANGUL SYLLABLE HEU
-	{0xD751, 0xD76B, prLVT},                    // Lo  [27] HANGUL SYLLABLE HEUG..HANGUL SYLLABLE HEUH
-	{0xD76C, 0xD76C, prLV},                     // Lo       HANGUL SYLLABLE HYI
-	{0xD76D, 0xD787, prLVT},                    // Lo  [27] HANGUL SYLLABLE HYIG..HANGUL SYLLABLE HYIH
-	{0xD788, 0xD788, prLV},                     // Lo       HANGUL SYLLABLE HI
-	{0xD789, 0xD7A3, prLVT},                    // Lo  [27] HANGUL SYLLABLE HIG..HANGUL SYLLABLE HIH
-	{0xD7B0, 0xD7C6, prV},                      // Lo  [23] HANGUL JUNGSEONG O-YEO..HANGUL JUNGSEONG ARAEA-E
-	{0xD7CB, 0xD7FB, prT},                      // Lo  [49] HANGUL JONGSEONG NIEUN-RIEUL..HANGUL JONGSEONG PHIEUPH-THIEUTH
-	{0xFB1E, 0xFB1E, prExtend},                 // Mn       HEBREW POINT JUDEO-SPANISH VARIKA
-	{0xFE00, 0xFE0F, prExtend},                 // Mn  [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16
-	{0xFE20, 0xFE2F, prExtend},                 // Mn  [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC TITLO RIGHT HALF
-	{0xFEFF, 0xFEFF, prControl},                // Cf       ZERO WIDTH NO-BREAK SPACE
-	{0xFF9E, 0xFF9F, prExtend},                 // Lm   [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
-	{0xFFF0, 0xFFF8, prControl},                // Cn   [9] <reserved-FFF0>..<reserved-FFF8>
-	{0xFFF9, 0xFFFB, prControl},                // Cf   [3] INTERLINEAR ANNOTATION ANCHOR..INTERLINEAR ANNOTATION TERMINATOR
-	{0x101FD, 0x101FD, prExtend},               // Mn       PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE
-	{0x102E0, 0x102E0, prExtend},               // Mn       COPTIC EPACT THOUSANDS MARK
-	{0x10376, 0x1037A, prExtend},               // Mn   [5] COMBINING OLD PERMIC LETTER AN..COMBINING OLD PERMIC LETTER SII
-	{0x10A01, 0x10A03, prExtend},               // Mn   [3] KHAROSHTHI VOWEL SIGN I..KHAROSHTHI VOWEL SIGN VOCALIC R
-	{0x10A05, 0x10A06, prExtend},               // Mn   [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O
-	{0x10A0C, 0x10A0F, prExtend},               // Mn   [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA
-	{0x10A38, 0x10A3A, prExtend},               // Mn   [3] KHAROSHTHI SIGN BAR ABOVE..KHAROSHTHI SIGN DOT BELOW
-	{0x10A3F, 0x10A3F, prExtend},               // Mn       KHAROSHTHI VIRAMA
-	{0x10AE5, 0x10AE6, prExtend},               // Mn   [2] MANICHAEAN ABBREVIATION MARK ABOVE..MANICHAEAN ABBREVIATION MARK BELOW
-	{0x10D24, 0x10D27, prExtend},               // Mn   [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI
-	{0x10EAB, 0x10EAC, prExtend},               // Mn   [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK
-	{0x10EFD, 0x10EFF, prExtend},               // Mn   [3] ARABIC SMALL LOW WORD SAKTA..ARABIC SMALL LOW WORD MADDA
-	{0x10F46, 0x10F50, prExtend},               // Mn  [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW
-	{0x10F82, 0x10F85, prExtend},               // Mn   [4] OLD UYGHUR COMBINING DOT ABOVE..OLD UYGHUR COMBINING TWO DOTS BELOW
-	{0x11000, 0x11000, prSpacingMark},          // Mc       BRAHMI SIGN CANDRABINDU
-	{0x11001, 0x11001, prExtend},               // Mn       BRAHMI SIGN ANUSVARA
-	{0x11002, 0x11002, prSpacingMark},          // Mc       BRAHMI SIGN VISARGA
-	{0x11038, 0x11046, prExtend},               // Mn  [15] BRAHMI VOWEL SIGN AA..BRAHMI VIRAMA
-	{0x11070, 0x11070, prExtend},               // Mn       BRAHMI SIGN OLD TAMIL VIRAMA
-	{0x11073, 0x11074, prExtend},               // Mn   [2] BRAHMI VOWEL SIGN OLD TAMIL SHORT E..BRAHMI VOWEL SIGN OLD TAMIL SHORT O
-	{0x1107F, 0x11081, prExtend},               // Mn   [3] BRAHMI NUMBER JOINER..KAITHI SIGN ANUSVARA
-	{0x11082, 0x11082, prSpacingMark},          // Mc       KAITHI SIGN VISARGA
-	{0x110B0, 0x110B2, prSpacingMark},          // Mc   [3] KAITHI VOWEL SIGN AA..KAITHI VOWEL SIGN II
-	{0x110B3, 0x110B6, prExtend},               // Mn   [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI
-	{0x110B7, 0x110B8, prSpacingMark},          // Mc   [2] KAITHI VOWEL SIGN O..KAITHI VOWEL SIGN AU
-	{0x110B9, 0x110BA, prExtend},               // Mn   [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA
-	{0x110BD, 0x110BD, prPrepend},              // Cf       KAITHI NUMBER SIGN
-	{0x110C2, 0x110C2, prExtend},               // Mn       KAITHI VOWEL SIGN VOCALIC R
-	{0x110CD, 0x110CD, prPrepend},              // Cf       KAITHI NUMBER SIGN ABOVE
-	{0x11100, 0x11102, prExtend},               // Mn   [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA
-	{0x11127, 0x1112B, prExtend},               // Mn   [5] CHAKMA VOWEL SIGN A..CHAKMA VOWEL SIGN UU
-	{0x1112C, 0x1112C, prSpacingMark},          // Mc       CHAKMA VOWEL SIGN E
-	{0x1112D, 0x11134, prExtend},               // Mn   [8] CHAKMA VOWEL SIGN AI..CHAKMA MAAYYAA
-	{0x11145, 0x11146, prSpacingMark},          // Mc   [2] CHAKMA VOWEL SIGN AA..CHAKMA VOWEL SIGN EI
-	{0x11173, 0x11173, prExtend},               // Mn       MAHAJANI SIGN NUKTA
-	{0x11180, 0x11181, prExtend},               // Mn   [2] SHARADA SIGN CANDRABINDU..SHARADA SIGN ANUSVARA
-	{0x11182, 0x11182, prSpacingMark},          // Mc       SHARADA SIGN VISARGA
-	{0x111B3, 0x111B5, prSpacingMark},          // Mc   [3] SHARADA VOWEL SIGN AA..SHARADA VOWEL SIGN II
-	{0x111B6, 0x111BE, prExtend},               // Mn   [9] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN O
-	{0x111BF, 0x111C0, prSpacingMark},          // Mc   [2] SHARADA VOWEL SIGN AU..SHARADA SIGN VIRAMA
-	{0x111C2, 0x111C3, prPrepend},              // Lo   [2] SHARADA SIGN JIHVAMULIYA..SHARADA SIGN UPADHMANIYA
-	{0x111C9, 0x111CC, prExtend},               // Mn   [4] SHARADA SANDHI MARK..SHARADA EXTRA SHORT VOWEL MARK
-	{0x111CE, 0x111CE, prSpacingMark},          // Mc       SHARADA VOWEL SIGN PRISHTHAMATRA E
-	{0x111CF, 0x111CF, prExtend},               // Mn       SHARADA SIGN INVERTED CANDRABINDU
-	{0x1122C, 0x1122E, prSpacingMark},          // Mc   [3] KHOJKI VOWEL SIGN AA..KHOJKI VOWEL SIGN II
-	{0x1122F, 0x11231, prExtend},               // Mn   [3] KHOJKI VOWEL SIGN U..KHOJKI VOWEL SIGN AI
-	{0x11232, 0x11233, prSpacingMark},          // Mc   [2] KHOJKI VOWEL SIGN O..KHOJKI VOWEL SIGN AU
-	{0x11234, 0x11234, prExtend},               // Mn       KHOJKI SIGN ANUSVARA
-	{0x11235, 0x11235, prSpacingMark},          // Mc       KHOJKI SIGN VIRAMA
-	{0x11236, 0x11237, prExtend},               // Mn   [2] KHOJKI SIGN NUKTA..KHOJKI SIGN SHADDA
-	{0x1123E, 0x1123E, prExtend},               // Mn       KHOJKI SIGN SUKUN
-	{0x11241, 0x11241, prExtend},               // Mn       KHOJKI VOWEL SIGN VOCALIC R
-	{0x112DF, 0x112DF, prExtend},               // Mn       KHUDAWADI SIGN ANUSVARA
-	{0x112E0, 0x112E2, prSpacingMark},          // Mc   [3] KHUDAWADI VOWEL SIGN AA..KHUDAWADI VOWEL SIGN II
-	{0x112E3, 0x112EA, prExtend},               // Mn   [8] KHUDAWADI VOWEL SIGN U..KHUDAWADI SIGN VIRAMA
-	{0x11300, 0x11301, prExtend},               // Mn   [2] GRANTHA SIGN COMBINING ANUSVARA ABOVE..GRANTHA SIGN CANDRABINDU
-	{0x11302, 0x11303, prSpacingMark},          // Mc   [2] GRANTHA SIGN ANUSVARA..GRANTHA SIGN VISARGA
-	{0x1133B, 0x1133C, prExtend},               // Mn   [2] COMBINING BINDU BELOW..GRANTHA SIGN NUKTA
-	{0x1133E, 0x1133E, prExtend},               // Mc       GRANTHA VOWEL SIGN AA
-	{0x1133F, 0x1133F, prSpacingMark},          // Mc       GRANTHA VOWEL SIGN I
-	{0x11340, 0x11340, prExtend},               // Mn       GRANTHA VOWEL SIGN II
-	{0x11341, 0x11344, prSpacingMark},          // Mc   [4] GRANTHA VOWEL SIGN U..GRANTHA VOWEL SIGN VOCALIC RR
-	{0x11347, 0x11348, prSpacingMark},          // Mc   [2] GRANTHA VOWEL SIGN EE..GRANTHA VOWEL SIGN AI
-	{0x1134B, 0x1134D, prSpacingMark},          // Mc   [3] GRANTHA VOWEL SIGN OO..GRANTHA SIGN VIRAMA
-	{0x11357, 0x11357, prExtend},               // Mc       GRANTHA AU LENGTH MARK
-	{0x11362, 0x11363, prSpacingMark},          // Mc   [2] GRANTHA VOWEL SIGN VOCALIC L..GRANTHA VOWEL SIGN VOCALIC LL
-	{0x11366, 0x1136C, prExtend},               // Mn   [7] COMBINING GRANTHA DIGIT ZERO..COMBINING GRANTHA DIGIT SIX
-	{0x11370, 0x11374, prExtend},               // Mn   [5] COMBINING GRANTHA LETTER A..COMBINING GRANTHA LETTER PA
-	{0x11435, 0x11437, prSpacingMark},          // Mc   [3] NEWA VOWEL SIGN AA..NEWA VOWEL SIGN II
-	{0x11438, 0x1143F, prExtend},               // Mn   [8] NEWA VOWEL SIGN U..NEWA VOWEL SIGN AI
-	{0x11440, 0x11441, prSpacingMark},          // Mc   [2] NEWA VOWEL SIGN O..NEWA VOWEL SIGN AU
-	{0x11442, 0x11444, prExtend},               // Mn   [3] NEWA SIGN VIRAMA..NEWA SIGN ANUSVARA
-	{0x11445, 0x11445, prSpacingMark},          // Mc       NEWA SIGN VISARGA
-	{0x11446, 0x11446, prExtend},               // Mn       NEWA SIGN NUKTA
-	{0x1145E, 0x1145E, prExtend},               // Mn       NEWA SANDHI MARK
-	{0x114B0, 0x114B0, prExtend},               // Mc       TIRHUTA VOWEL SIGN AA
-	{0x114B1, 0x114B2, prSpacingMark},          // Mc   [2] TIRHUTA VOWEL SIGN I..TIRHUTA VOWEL SIGN II
-	{0x114B3, 0x114B8, prExtend},               // Mn   [6] TIRHUTA VOWEL SIGN U..TIRHUTA VOWEL SIGN VOCALIC LL
-	{0x114B9, 0x114B9, prSpacingMark},          // Mc       TIRHUTA VOWEL SIGN E
-	{0x114BA, 0x114BA, prExtend},               // Mn       TIRHUTA VOWEL SIGN SHORT E
-	{0x114BB, 0x114BC, prSpacingMark},          // Mc   [2] TIRHUTA VOWEL SIGN AI..TIRHUTA VOWEL SIGN O
-	{0x114BD, 0x114BD, prExtend},               // Mc       TIRHUTA VOWEL SIGN SHORT O
-	{0x114BE, 0x114BE, prSpacingMark},          // Mc       TIRHUTA VOWEL SIGN AU
-	{0x114BF, 0x114C0, prExtend},               // Mn   [2] TIRHUTA SIGN CANDRABINDU..TIRHUTA SIGN ANUSVARA
-	{0x114C1, 0x114C1, prSpacingMark},          // Mc       TIRHUTA SIGN VISARGA
-	{0x114C2, 0x114C3, prExtend},               // Mn   [2] TIRHUTA SIGN VIRAMA..TIRHUTA SIGN NUKTA
-	{0x115AF, 0x115AF, prExtend},               // Mc       SIDDHAM VOWEL SIGN AA
-	{0x115B0, 0x115B1, prSpacingMark},          // Mc   [2] SIDDHAM VOWEL SIGN I..SIDDHAM VOWEL SIGN II
-	{0x115B2, 0x115B5, prExtend},               // Mn   [4] SIDDHAM VOWEL SIGN U..SIDDHAM VOWEL SIGN VOCALIC RR
-	{0x115B8, 0x115BB, prSpacingMark},          // Mc   [4] SIDDHAM VOWEL SIGN E..SIDDHAM VOWEL SIGN AU
-	{0x115BC, 0x115BD, prExtend},               // Mn   [2] SIDDHAM SIGN CANDRABINDU..SIDDHAM SIGN ANUSVARA
-	{0x115BE, 0x115BE, prSpacingMark},          // Mc       SIDDHAM SIGN VISARGA
-	{0x115BF, 0x115C0, prExtend},               // Mn   [2] SIDDHAM SIGN VIRAMA..SIDDHAM SIGN NUKTA
-	{0x115DC, 0x115DD, prExtend},               // Mn   [2] SIDDHAM VOWEL SIGN ALTERNATE U..SIDDHAM VOWEL SIGN ALTERNATE UU
-	{0x11630, 0x11632, prSpacingMark},          // Mc   [3] MODI VOWEL SIGN AA..MODI VOWEL SIGN II
-	{0x11633, 0x1163A, prExtend},               // Mn   [8] MODI VOWEL SIGN U..MODI VOWEL SIGN AI
-	{0x1163B, 0x1163C, prSpacingMark},          // Mc   [2] MODI VOWEL SIGN O..MODI VOWEL SIGN AU
-	{0x1163D, 0x1163D, prExtend},               // Mn       MODI SIGN ANUSVARA
-	{0x1163E, 0x1163E, prSpacingMark},          // Mc       MODI SIGN VISARGA
-	{0x1163F, 0x11640, prExtend},               // Mn   [2] MODI SIGN VIRAMA..MODI SIGN ARDHACANDRA
-	{0x116AB, 0x116AB, prExtend},               // Mn       TAKRI SIGN ANUSVARA
-	{0x116AC, 0x116AC, prSpacingMark},          // Mc       TAKRI SIGN VISARGA
-	{0x116AD, 0x116AD, prExtend},               // Mn       TAKRI VOWEL SIGN AA
-	{0x116AE, 0x116AF, prSpacingMark},          // Mc   [2] TAKRI VOWEL SIGN I..TAKRI VOWEL SIGN II
-	{0x116B0, 0x116B5, prExtend},               // Mn   [6] TAKRI VOWEL SIGN U..TAKRI VOWEL SIGN AU
-	{0x116B6, 0x116B6, prSpacingMark},          // Mc       TAKRI SIGN VIRAMA
-	{0x116B7, 0x116B7, prExtend},               // Mn       TAKRI SIGN NUKTA
-	{0x1171D, 0x1171F, prExtend},               // Mn   [3] AHOM CONSONANT SIGN MEDIAL LA..AHOM CONSONANT SIGN MEDIAL LIGATING RA
-	{0x11722, 0x11725, prExtend},               // Mn   [4] AHOM VOWEL SIGN I..AHOM VOWEL SIGN UU
-	{0x11726, 0x11726, prSpacingMark},          // Mc       AHOM VOWEL SIGN E
-	{0x11727, 0x1172B, prExtend},               // Mn   [5] AHOM VOWEL SIGN AW..AHOM SIGN KILLER
-	{0x1182C, 0x1182E, prSpacingMark},          // Mc   [3] DOGRA VOWEL SIGN AA..DOGRA VOWEL SIGN II
-	{0x1182F, 0x11837, prExtend},               // Mn   [9] DOGRA VOWEL SIGN U..DOGRA SIGN ANUSVARA
-	{0x11838, 0x11838, prSpacingMark},          // Mc       DOGRA SIGN VISARGA
-	{0x11839, 0x1183A, prExtend},               // Mn   [2] DOGRA SIGN VIRAMA..DOGRA SIGN NUKTA
-	{0x11930, 0x11930, prExtend},               // Mc       DIVES AKURU VOWEL SIGN AA
-	{0x11931, 0x11935, prSpacingMark},          // Mc   [5] DIVES AKURU VOWEL SIGN I..DIVES AKURU VOWEL SIGN E
-	{0x11937, 0x11938, prSpacingMark},          // Mc   [2] DIVES AKURU VOWEL SIGN AI..DIVES AKURU VOWEL SIGN O
-	{0x1193B, 0x1193C, prExtend},               // Mn   [2] DIVES AKURU SIGN ANUSVARA..DIVES AKURU SIGN CANDRABINDU
-	{0x1193D, 0x1193D, prSpacingMark},          // Mc       DIVES AKURU SIGN HALANTA
-	{0x1193E, 0x1193E, prExtend},               // Mn       DIVES AKURU VIRAMA
-	{0x1193F, 0x1193F, prPrepend},              // Lo       DIVES AKURU PREFIXED NASAL SIGN
-	{0x11940, 0x11940, prSpacingMark},          // Mc       DIVES AKURU MEDIAL YA
-	{0x11941, 0x11941, prPrepend},              // Lo       DIVES AKURU INITIAL RA
-	{0x11942, 0x11942, prSpacingMark},          // Mc       DIVES AKURU MEDIAL RA
-	{0x11943, 0x11943, prExtend},               // Mn       DIVES AKURU SIGN NUKTA
-	{0x119D1, 0x119D3, prSpacingMark},          // Mc   [3] NANDINAGARI VOWEL SIGN AA..NANDINAGARI VOWEL SIGN II
-	{0x119D4, 0x119D7, prExtend},               // Mn   [4] NANDINAGARI VOWEL SIGN U..NANDINAGARI VOWEL SIGN VOCALIC RR
-	{0x119DA, 0x119DB, prExtend},               // Mn   [2] NANDINAGARI VOWEL SIGN E..NANDINAGARI VOWEL SIGN AI
-	{0x119DC, 0x119DF, prSpacingMark},          // Mc   [4] NANDINAGARI VOWEL SIGN O..NANDINAGARI SIGN VISARGA
-	{0x119E0, 0x119E0, prExtend},               // Mn       NANDINAGARI SIGN VIRAMA
-	{0x119E4, 0x119E4, prSpacingMark},          // Mc       NANDINAGARI VOWEL SIGN PRISHTHAMATRA E
-	{0x11A01, 0x11A0A, prExtend},               // Mn  [10] ZANABAZAR SQUARE VOWEL SIGN I..ZANABAZAR SQUARE VOWEL LENGTH MARK
-	{0x11A33, 0x11A38, prExtend},               // Mn   [6] ZANABAZAR SQUARE FINAL CONSONANT MARK..ZANABAZAR SQUARE SIGN ANUSVARA
-	{0x11A39, 0x11A39, prSpacingMark},          // Mc       ZANABAZAR SQUARE SIGN VISARGA
-	{0x11A3A, 0x11A3A, prPrepend},              // Lo       ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA
-	{0x11A3B, 0x11A3E, prExtend},               // Mn   [4] ZANABAZAR SQUARE CLUSTER-FINAL LETTER YA..ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA
-	{0x11A47, 0x11A47, prExtend},               // Mn       ZANABAZAR SQUARE SUBJOINER
-	{0x11A51, 0x11A56, prExtend},               // Mn   [6] SOYOMBO VOWEL SIGN I..SOYOMBO VOWEL SIGN OE
-	{0x11A57, 0x11A58, prSpacingMark},          // Mc   [2] SOYOMBO VOWEL SIGN AI..SOYOMBO VOWEL SIGN AU
-	{0x11A59, 0x11A5B, prExtend},               // Mn   [3] SOYOMBO VOWEL SIGN VOCALIC R..SOYOMBO VOWEL LENGTH MARK
-	{0x11A84, 0x11A89, prPrepend},              // Lo   [6] SOYOMBO SIGN JIHVAMULIYA..SOYOMBO CLUSTER-INITIAL LETTER SA
-	{0x11A8A, 0x11A96, prExtend},               // Mn  [13] SOYOMBO FINAL CONSONANT SIGN G..SOYOMBO SIGN ANUSVARA
-	{0x11A97, 0x11A97, prSpacingMark},          // Mc       SOYOMBO SIGN VISARGA
-	{0x11A98, 0x11A99, prExtend},               // Mn   [2] SOYOMBO GEMINATION MARK..SOYOMBO SUBJOINER
-	{0x11C2F, 0x11C2F, prSpacingMark},          // Mc       BHAIKSUKI VOWEL SIGN AA
-	{0x11C30, 0x11C36, prExtend},               // Mn   [7] BHAIKSUKI VOWEL SIGN I..BHAIKSUKI VOWEL SIGN VOCALIC L
-	{0x11C38, 0x11C3D, prExtend},               // Mn   [6] BHAIKSUKI VOWEL SIGN E..BHAIKSUKI SIGN ANUSVARA
-	{0x11C3E, 0x11C3E, prSpacingMark},          // Mc       BHAIKSUKI SIGN VISARGA
-	{0x11C3F, 0x11C3F, prExtend},               // Mn       BHAIKSUKI SIGN VIRAMA
-	{0x11C92, 0x11CA7, prExtend},               // Mn  [22] MARCHEN SUBJOINED LETTER KA..MARCHEN SUBJOINED LETTER ZA
-	{0x11CA9, 0x11CA9, prSpacingMark},          // Mc       MARCHEN SUBJOINED LETTER YA
-	{0x11CAA, 0x11CB0, prExtend},               // Mn   [7] MARCHEN SUBJOINED LETTER RA..MARCHEN VOWEL SIGN AA
-	{0x11CB1, 0x11CB1, prSpacingMark},          // Mc       MARCHEN VOWEL SIGN I
-	{0x11CB2, 0x11CB3, prExtend},               // Mn   [2] MARCHEN VOWEL SIGN U..MARCHEN VOWEL SIGN E
-	{0x11CB4, 0x11CB4, prSpacingMark},          // Mc       MARCHEN VOWEL SIGN O
-	{0x11CB5, 0x11CB6, prExtend},               // Mn   [2] MARCHEN SIGN ANUSVARA..MARCHEN SIGN CANDRABINDU
-	{0x11D31, 0x11D36, prExtend},               // Mn   [6] MASARAM GONDI VOWEL SIGN AA..MASARAM GONDI VOWEL SIGN VOCALIC R
-	{0x11D3A, 0x11D3A, prExtend},               // Mn       MASARAM GONDI VOWEL SIGN E
-	{0x11D3C, 0x11D3D, prExtend},               // Mn   [2] MASARAM GONDI VOWEL SIGN AI..MASARAM GONDI VOWEL SIGN O
-	{0x11D3F, 0x11D45, prExtend},               // Mn   [7] MASARAM GONDI VOWEL SIGN AU..MASARAM GONDI VIRAMA
-	{0x11D46, 0x11D46, prPrepend},              // Lo       MASARAM GONDI REPHA
-	{0x11D47, 0x11D47, prExtend},               // Mn       MASARAM GONDI RA-KARA
-	{0x11D8A, 0x11D8E, prSpacingMark},          // Mc   [5] GUNJALA GONDI VOWEL SIGN AA..GUNJALA GONDI VOWEL SIGN UU
-	{0x11D90, 0x11D91, prExtend},               // Mn   [2] GUNJALA GONDI VOWEL SIGN EE..GUNJALA GONDI VOWEL SIGN AI
-	{0x11D93, 0x11D94, prSpacingMark},          // Mc   [2] GUNJALA GONDI VOWEL SIGN OO..GUNJALA GONDI VOWEL SIGN AU
-	{0x11D95, 0x11D95, prExtend},               // Mn       GUNJALA GONDI SIGN ANUSVARA
-	{0x11D96, 0x11D96, prSpacingMark},          // Mc       GUNJALA GONDI SIGN VISARGA
-	{0x11D97, 0x11D97, prExtend},               // Mn       GUNJALA GONDI VIRAMA
-	{0x11EF3, 0x11EF4, prExtend},               // Mn   [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U
-	{0x11EF5, 0x11EF6, prSpacingMark},          // Mc   [2] MAKASAR VOWEL SIGN E..MAKASAR VOWEL SIGN O
-	{0x11F00, 0x11F01, prExtend},               // Mn   [2] KAWI SIGN CANDRABINDU..KAWI SIGN ANUSVARA
-	{0x11F02, 0x11F02, prPrepend},              // Lo       KAWI SIGN REPHA
-	{0x11F03, 0x11F03, prSpacingMark},          // Mc       KAWI SIGN VISARGA
-	{0x11F34, 0x11F35, prSpacingMark},          // Mc   [2] KAWI VOWEL SIGN AA..KAWI VOWEL SIGN ALTERNATE AA
-	{0x11F36, 0x11F3A, prExtend},               // Mn   [5] KAWI VOWEL SIGN I..KAWI VOWEL SIGN VOCALIC R
-	{0x11F3E, 0x11F3F, prSpacingMark},          // Mc   [2] KAWI VOWEL SIGN E..KAWI VOWEL SIGN AI
-	{0x11F40, 0x11F40, prExtend},               // Mn       KAWI VOWEL SIGN EU
-	{0x11F41, 0x11F41, prSpacingMark},          // Mc       KAWI SIGN KILLER
-	{0x11F42, 0x11F42, prExtend},               // Mn       KAWI CONJOINER
-	{0x13430, 0x1343F, prControl},              // Cf  [16] EGYPTIAN HIEROGLYPH VERTICAL JOINER..EGYPTIAN HIEROGLYPH END WALLED ENCLOSURE
-	{0x13440, 0x13440, prExtend},               // Mn       EGYPTIAN HIEROGLYPH MIRROR HORIZONTALLY
-	{0x13447, 0x13455, prExtend},               // Mn  [15] EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP START..EGYPTIAN HIEROGLYPH MODIFIER DAMAGED
-	{0x16AF0, 0x16AF4, prExtend},               // Mn   [5] BASSA VAH COMBINING HIGH TONE..BASSA VAH COMBINING HIGH-LOW TONE
-	{0x16B30, 0x16B36, prExtend},               // Mn   [7] PAHAWH HMONG MARK CIM TUB..PAHAWH HMONG MARK CIM TAUM
-	{0x16F4F, 0x16F4F, prExtend},               // Mn       MIAO SIGN CONSONANT MODIFIER BAR
-	{0x16F51, 0x16F87, prSpacingMark},          // Mc  [55] MIAO SIGN ASPIRATION..MIAO VOWEL SIGN UI
-	{0x16F8F, 0x16F92, prExtend},               // Mn   [4] MIAO TONE RIGHT..MIAO TONE BELOW
-	{0x16FE4, 0x16FE4, prExtend},               // Mn       KHITAN SMALL SCRIPT FILLER
-	{0x16FF0, 0x16FF1, prSpacingMark},          // Mc   [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY
-	{0x1BC9D, 0x1BC9E, prExtend},               // Mn   [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK
-	{0x1BCA0, 0x1BCA3, prControl},              // Cf   [4] SHORTHAND FORMAT LETTER OVERLAP..SHORTHAND FORMAT UP STEP
-	{0x1CF00, 0x1CF2D, prExtend},               // Mn  [46] ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT..ZNAMENNY COMBINING MARK KRYZH ON LEFT
-	{0x1CF30, 0x1CF46, prExtend},               // Mn  [23] ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO..ZNAMENNY PRIZNAK MODIFIER ROG
-	{0x1D165, 0x1D165, prExtend},               // Mc       MUSICAL SYMBOL COMBINING STEM
-	{0x1D166, 0x1D166, prSpacingMark},          // Mc       MUSICAL SYMBOL COMBINING SPRECHGESANG STEM
-	{0x1D167, 0x1D169, prExtend},               // Mn   [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3
-	{0x1D16D, 0x1D16D, prSpacingMark},          // Mc       MUSICAL SYMBOL COMBINING AUGMENTATION DOT
-	{0x1D16E, 0x1D172, prExtend},               // Mc   [5] MUSICAL SYMBOL COMBINING FLAG-1..MUSICAL SYMBOL COMBINING FLAG-5
-	{0x1D173, 0x1D17A, prControl},              // Cf   [8] MUSICAL SYMBOL BEGIN BEAM..MUSICAL SYMBOL END PHRASE
-	{0x1D17B, 0x1D182, prExtend},               // Mn   [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE
-	{0x1D185, 0x1D18B, prExtend},               // Mn   [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE
-	{0x1D1AA, 0x1D1AD, prExtend},               // Mn   [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO
-	{0x1D242, 0x1D244, prExtend},               // Mn   [3] COMBINING GREEK MUSICAL TRISEME..COMBINING GREEK MUSICAL PENTASEME
-	{0x1DA00, 0x1DA36, prExtend},               // Mn  [55] SIGNWRITING HEAD RIM..SIGNWRITING AIR SUCKING IN
-	{0x1DA3B, 0x1DA6C, prExtend},               // Mn  [50] SIGNWRITING MOUTH CLOSED NEUTRAL..SIGNWRITING EXCITEMENT
-	{0x1DA75, 0x1DA75, prExtend},               // Mn       SIGNWRITING UPPER BODY TILTING FROM HIP JOINTS
-	{0x1DA84, 0x1DA84, prExtend},               // Mn       SIGNWRITING LOCATION HEAD NECK
-	{0x1DA9B, 0x1DA9F, prExtend},               // Mn   [5] SIGNWRITING FILL MODIFIER-2..SIGNWRITING FILL MODIFIER-6
-	{0x1DAA1, 0x1DAAF, prExtend},               // Mn  [15] SIGNWRITING ROTATION MODIFIER-2..SIGNWRITING ROTATION MODIFIER-16
-	{0x1E000, 0x1E006, prExtend},               // Mn   [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE
-	{0x1E008, 0x1E018, prExtend},               // Mn  [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU
-	{0x1E01B, 0x1E021, prExtend},               // Mn   [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI
-	{0x1E023, 0x1E024, prExtend},               // Mn   [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS
-	{0x1E026, 0x1E02A, prExtend},               // Mn   [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA
-	{0x1E08F, 0x1E08F, prExtend},               // Mn       COMBINING CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
-	{0x1E130, 0x1E136, prExtend},               // Mn   [7] NYIAKENG PUACHUE HMONG TONE-B..NYIAKENG PUACHUE HMONG TONE-D
-	{0x1E2AE, 0x1E2AE, prExtend},               // Mn       TOTO SIGN RISING TONE
-	{0x1E2EC, 0x1E2EF, prExtend},               // Mn   [4] WANCHO TONE TUP..WANCHO TONE KOINI
-	{0x1E4EC, 0x1E4EF, prExtend},               // Mn   [4] NAG MUNDARI SIGN MUHOR..NAG MUNDARI SIGN SUTUH
-	{0x1E8D0, 0x1E8D6, prExtend},               // Mn   [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS
-	{0x1E944, 0x1E94A, prExtend},               // Mn   [7] ADLAM ALIF LENGTHENER..ADLAM NUKTA
-	{0x1F000, 0x1F003, prExtendedPictographic}, // E0.0   [4] (🀀..🀃)    MAHJONG TILE EAST WIND..MAHJONG TILE NORTH WIND
-	{0x1F004, 0x1F004, prExtendedPictographic}, // E0.6   [1] (🀄)       mahjong red dragon
-	{0x1F005, 0x1F0CE, prExtendedPictographic}, // E0.0 [202] (🀅..🃎)    MAHJONG TILE GREEN DRAGON..PLAYING CARD KING OF DIAMONDS
-	{0x1F0CF, 0x1F0CF, prExtendedPictographic}, // E0.6   [1] (🃏)       joker
-	{0x1F0D0, 0x1F0FF, prExtendedPictographic}, // E0.0  [48] (🃐..🃿)    <reserved-1F0D0>..<reserved-1F0FF>
-	{0x1F10D, 0x1F10F, prExtendedPictographic}, // E0.0   [3] (🄍..🄏)    CIRCLED ZERO WITH SLASH..CIRCLED DOLLAR SIGN WITH OVERLAID BACKSLASH
-	{0x1F12F, 0x1F12F, prExtendedPictographic}, // E0.0   [1] (🄯)       COPYLEFT SYMBOL
-	{0x1F16C, 0x1F16F, prExtendedPictographic}, // E0.0   [4] (🅬..🅯)    RAISED MR SIGN..CIRCLED HUMAN FIGURE
-	{0x1F170, 0x1F171, prExtendedPictographic}, // E0.6   [2] (🅰️..🅱️)    A button (blood type)..B button (blood type)
-	{0x1F17E, 0x1F17F, prExtendedPictographic}, // E0.6   [2] (🅾️..🅿️)    O button (blood type)..P button
-	{0x1F18E, 0x1F18E, prExtendedPictographic}, // E0.6   [1] (🆎)       AB button (blood type)
-	{0x1F191, 0x1F19A, prExtendedPictographic}, // E0.6  [10] (🆑..🆚)    CL button..VS button
-	{0x1F1AD, 0x1F1E5, prExtendedPictographic}, // E0.0  [57] (🆭..🇥)    MASK WORK SYMBOL..<reserved-1F1E5>
-	{0x1F1E6, 0x1F1FF, prRegionalIndicator},    // So  [26] REGIONAL INDICATOR SYMBOL LETTER A..REGIONAL INDICATOR SYMBOL LETTER Z
-	{0x1F201, 0x1F202, prExtendedPictographic}, // E0.6   [2] (🈁..🈂️)    Japanese “here” button..Japanese “service charge” button
-	{0x1F203, 0x1F20F, prExtendedPictographic}, // E0.0  [13] (🈃..🈏)    <reserved-1F203>..<reserved-1F20F>
-	{0x1F21A, 0x1F21A, prExtendedPictographic}, // E0.6   [1] (🈚)       Japanese “free of charge” button
-	{0x1F22F, 0x1F22F, prExtendedPictographic}, // E0.6   [1] (🈯)       Japanese “reserved” button
-	{0x1F232, 0x1F23A, prExtendedPictographic}, // E0.6   [9] (🈲..🈺)    Japanese “prohibited” button..Japanese “open for business” button
-	{0x1F23C, 0x1F23F, prExtendedPictographic}, // E0.0   [4] (🈼..🈿)    <reserved-1F23C>..<reserved-1F23F>
-	{0x1F249, 0x1F24F, prExtendedPictographic}, // E0.0   [7] (🉉..🉏)    <reserved-1F249>..<reserved-1F24F>
-	{0x1F250, 0x1F251, prExtendedPictographic}, // E0.6   [2] (🉐..🉑)    Japanese “bargain” button..Japanese “acceptable” button
-	{0x1F252, 0x1F2FF, prExtendedPictographic}, // E0.0 [174] (🉒..🋿)    <reserved-1F252>..<reserved-1F2FF>
-	{0x1F300, 0x1F30C, prExtendedPictographic}, // E0.6  [13] (🌀..🌌)    cyclone..milky way
-	{0x1F30D, 0x1F30E, prExtendedPictographic}, // E0.7   [2] (🌍..🌎)    globe showing Europe-Africa..globe showing Americas
-	{0x1F30F, 0x1F30F, prExtendedPictographic}, // E0.6   [1] (🌏)       globe showing Asia-Australia
-	{0x1F310, 0x1F310, prExtendedPictographic}, // E1.0   [1] (🌐)       globe with meridians
-	{0x1F311, 0x1F311, prExtendedPictographic}, // E0.6   [1] (🌑)       new moon
-	{0x1F312, 0x1F312, prExtendedPictographic}, // E1.0   [1] (🌒)       waxing crescent moon
-	{0x1F313, 0x1F315, prExtendedPictographic}, // E0.6   [3] (🌓..🌕)    first quarter moon..full moon
-	{0x1F316, 0x1F318, prExtendedPictographic}, // E1.0   [3] (🌖..🌘)    waning gibbous moon..waning crescent moon
-	{0x1F319, 0x1F319, prExtendedPictographic}, // E0.6   [1] (🌙)       crescent moon
-	{0x1F31A, 0x1F31A, prExtendedPictographic}, // E1.0   [1] (🌚)       new moon face
-	{0x1F31B, 0x1F31B, prExtendedPictographic}, // E0.6   [1] (🌛)       first quarter moon face
-	{0x1F31C, 0x1F31C, prExtendedPictographic}, // E0.7   [1] (🌜)       last quarter moon face
-	{0x1F31D, 0x1F31E, prExtendedPictographic}, // E1.0   [2] (🌝..🌞)    full moon face..sun with face
-	{0x1F31F, 0x1F320, prExtendedPictographic}, // E0.6   [2] (🌟..🌠)    glowing star..shooting star
-	{0x1F321, 0x1F321, prExtendedPictographic}, // E0.7   [1] (🌡️)       thermometer
-	{0x1F322, 0x1F323, prExtendedPictographic}, // E0.0   [2] (🌢..🌣)    BLACK DROPLET..WHITE SUN
-	{0x1F324, 0x1F32C, prExtendedPictographic}, // E0.7   [9] (🌤️..🌬️)    sun behind small cloud..wind face
-	{0x1F32D, 0x1F32F, prExtendedPictographic}, // E1.0   [3] (🌭..🌯)    hot dog..burrito
-	{0x1F330, 0x1F331, prExtendedPictographic}, // E0.6   [2] (🌰..🌱)    chestnut..seedling
-	{0x1F332, 0x1F333, prExtendedPictographic}, // E1.0   [2] (🌲..🌳)    evergreen tree..deciduous tree
-	{0x1F334, 0x1F335, prExtendedPictographic}, // E0.6   [2] (🌴..🌵)    palm tree..cactus
-	{0x1F336, 0x1F336, prExtendedPictographic}, // E0.7   [1] (🌶️)       hot pepper
-	{0x1F337, 0x1F34A, prExtendedPictographic}, // E0.6  [20] (🌷..🍊)    tulip..tangerine
-	{0x1F34B, 0x1F34B, prExtendedPictographic}, // E1.0   [1] (🍋)       lemon
-	{0x1F34C, 0x1F34F, prExtendedPictographic}, // E0.6   [4] (🍌..🍏)    banana..green apple
-	{0x1F350, 0x1F350, prExtendedPictographic}, // E1.0   [1] (🍐)       pear
-	{0x1F351, 0x1F37B, prExtendedPictographic}, // E0.6  [43] (🍑..🍻)    peach..clinking beer mugs
-	{0x1F37C, 0x1F37C, prExtendedPictographic}, // E1.0   [1] (🍼)       baby bottle
-	{0x1F37D, 0x1F37D, prExtendedPictographic}, // E0.7   [1] (🍽️)       fork and knife with plate
-	{0x1F37E, 0x1F37F, prExtendedPictographic}, // E1.0   [2] (🍾..🍿)    bottle with popping cork..popcorn
-	{0x1F380, 0x1F393, prExtendedPictographic}, // E0.6  [20] (🎀..🎓)    ribbon..graduation cap
-	{0x1F394, 0x1F395, prExtendedPictographic}, // E0.0   [2] (🎔..🎕)    HEART WITH TIP ON THE LEFT..BOUQUET OF FLOWERS
-	{0x1F396, 0x1F397, prExtendedPictographic}, // E0.7   [2] (🎖️..🎗️)    military medal..reminder ribbon
-	{0x1F398, 0x1F398, prExtendedPictographic}, // E0.0   [1] (🎘)       MUSICAL KEYBOARD WITH JACKS
-	{0x1F399, 0x1F39B, prExtendedPictographic}, // E0.7   [3] (🎙️..🎛️)    studio microphone..control knobs
-	{0x1F39C, 0x1F39D, prExtendedPictographic}, // E0.0   [2] (🎜..🎝)    BEAMED ASCENDING MUSICAL NOTES..BEAMED DESCENDING MUSICAL NOTES
-	{0x1F39E, 0x1F39F, prExtendedPictographic}, // E0.7   [2] (🎞️..🎟️)    film frames..admission tickets
-	{0x1F3A0, 0x1F3C4, prExtendedPictographic}, // E0.6  [37] (🎠..🏄)    carousel horse..person surfing
-	{0x1F3C5, 0x1F3C5, prExtendedPictographic}, // E1.0   [1] (🏅)       sports medal
-	{0x1F3C6, 0x1F3C6, prExtendedPictographic}, // E0.6   [1] (🏆)       trophy
-	{0x1F3C7, 0x1F3C7, prExtendedPictographic}, // E1.0   [1] (🏇)       horse racing
-	{0x1F3C8, 0x1F3C8, prExtendedPictographic}, // E0.6   [1] (🏈)       american football
-	{0x1F3C9, 0x1F3C9, prExtendedPictographic}, // E1.0   [1] (🏉)       rugby football
-	{0x1F3CA, 0x1F3CA, prExtendedPictographic}, // E0.6   [1] (🏊)       person swimming
-	{0x1F3CB, 0x1F3CE, prExtendedPictographic}, // E0.7   [4] (🏋️..🏎️)    person lifting weights..racing car
-	{0x1F3CF, 0x1F3D3, prExtendedPictographic}, // E1.0   [5] (🏏..🏓)    cricket game..ping pong
-	{0x1F3D4, 0x1F3DF, prExtendedPictographic}, // E0.7  [12] (🏔️..🏟️)    snow-capped mountain..stadium
-	{0x1F3E0, 0x1F3E3, prExtendedPictographic}, // E0.6   [4] (🏠..🏣)    house..Japanese post office
-	{0x1F3E4, 0x1F3E4, prExtendedPictographic}, // E1.0   [1] (🏤)       post office
-	{0x1F3E5, 0x1F3F0, prExtendedPictographic}, // E0.6  [12] (🏥..🏰)    hospital..castle
-	{0x1F3F1, 0x1F3F2, prExtendedPictographic}, // E0.0   [2] (🏱..🏲)    WHITE PENNANT..BLACK PENNANT
-	{0x1F3F3, 0x1F3F3, prExtendedPictographic}, // E0.7   [1] (🏳️)       white flag
-	{0x1F3F4, 0x1F3F4, prExtendedPictographic}, // E1.0   [1] (🏴)       black flag
-	{0x1F3F5, 0x1F3F5, prExtendedPictographic}, // E0.7   [1] (🏵️)       rosette
-	{0x1F3F6, 0x1F3F6, prExtendedPictographic}, // E0.0   [1] (🏶)       BLACK ROSETTE
-	{0x1F3F7, 0x1F3F7, prExtendedPictographic}, // E0.7   [1] (🏷️)       label
-	{0x1F3F8, 0x1F3FA, prExtendedPictographic}, // E1.0   [3] (🏸..🏺)    badminton..amphora
-	{0x1F3FB, 0x1F3FF, prExtend},               // Sk   [5] EMOJI MODIFIER FITZPATRICK TYPE-1-2..EMOJI MODIFIER FITZPATRICK TYPE-6
-	{0x1F400, 0x1F407, prExtendedPictographic}, // E1.0   [8] (🐀..🐇)    rat..rabbit
-	{0x1F408, 0x1F408, prExtendedPictographic}, // E0.7   [1] (🐈)       cat
-	{0x1F409, 0x1F40B, prExtendedPictographic}, // E1.0   [3] (🐉..🐋)    dragon..whale
-	{0x1F40C, 0x1F40E, prExtendedPictographic}, // E0.6   [3] (🐌..🐎)    snail..horse
-	{0x1F40F, 0x1F410, prExtendedPictographic}, // E1.0   [2] (🐏..🐐)    ram..goat
-	{0x1F411, 0x1F412, prExtendedPictographic}, // E0.6   [2] (🐑..🐒)    ewe..monkey
-	{0x1F413, 0x1F413, prExtendedPictographic}, // E1.0   [1] (🐓)       rooster
-	{0x1F414, 0x1F414, prExtendedPictographic}, // E0.6   [1] (🐔)       chicken
-	{0x1F415, 0x1F415, prExtendedPictographic}, // E0.7   [1] (🐕)       dog
-	{0x1F416, 0x1F416, prExtendedPictographic}, // E1.0   [1] (🐖)       pig
-	{0x1F417, 0x1F429, prExtendedPictographic}, // E0.6  [19] (🐗..🐩)    boar..poodle
-	{0x1F42A, 0x1F42A, prExtendedPictographic}, // E1.0   [1] (🐪)       camel
-	{0x1F42B, 0x1F43E, prExtendedPictographic}, // E0.6  [20] (🐫..🐾)    two-hump camel..paw prints
-	{0x1F43F, 0x1F43F, prExtendedPictographic}, // E0.7   [1] (🐿️)       chipmunk
-	{0x1F440, 0x1F440, prExtendedPictographic}, // E0.6   [1] (👀)       eyes
-	{0x1F441, 0x1F441, prExtendedPictographic}, // E0.7   [1] (👁️)       eye
-	{0x1F442, 0x1F464, prExtendedPictographic}, // E0.6  [35] (👂..👤)    ear..bust in silhouette
-	{0x1F465, 0x1F465, prExtendedPictographic}, // E1.0   [1] (👥)       busts in silhouette
-	{0x1F466, 0x1F46B, prExtendedPictographic}, // E0.6   [6] (👦..👫)    boy..woman and man holding hands
-	{0x1F46C, 0x1F46D, prExtendedPictographic}, // E1.0   [2] (👬..👭)    men holding hands..women holding hands
-	{0x1F46E, 0x1F4AC, prExtendedPictographic}, // E0.6  [63] (👮..💬)    police officer..speech balloon
-	{0x1F4AD, 0x1F4AD, prExtendedPictographic}, // E1.0   [1] (💭)       thought balloon
-	{0x1F4AE, 0x1F4B5, prExtendedPictographic}, // E0.6   [8] (💮..💵)    white flower..dollar banknote
-	{0x1F4B6, 0x1F4B7, prExtendedPictographic}, // E1.0   [2] (💶..💷)    euro banknote..pound banknote
-	{0x1F4B8, 0x1F4EB, prExtendedPictographic}, // E0.6  [52] (💸..📫)    money with wings..closed mailbox with raised flag
-	{0x1F4EC, 0x1F4ED, prExtendedPictographic}, // E0.7   [2] (📬..📭)    open mailbox with raised flag..open mailbox with lowered flag
-	{0x1F4EE, 0x1F4EE, prExtendedPictographic}, // E0.6   [1] (📮)       postbox
-	{0x1F4EF, 0x1F4EF, prExtendedPictographic}, // E1.0   [1] (📯)       postal horn
-	{0x1F4F0, 0x1F4F4, prExtendedPictographic}, // E0.6   [5] (📰..📴)    newspaper..mobile phone off
-	{0x1F4F5, 0x1F4F5, prExtendedPictographic}, // E1.0   [1] (📵)       no mobile phones
-	{0x1F4F6, 0x1F4F7, prExtendedPictographic}, // E0.6   [2] (📶..📷)    antenna bars..camera
-	{0x1F4F8, 0x1F4F8, prExtendedPictographic}, // E1.0   [1] (📸)       camera with flash
-	{0x1F4F9, 0x1F4FC, prExtendedPictographic}, // E0.6   [4] (📹..📼)    video camera..videocassette
-	{0x1F4FD, 0x1F4FD, prExtendedPictographic}, // E0.7   [1] (📽️)       film projector
-	{0x1F4FE, 0x1F4FE, prExtendedPictographic}, // E0.0   [1] (📾)       PORTABLE STEREO
-	{0x1F4FF, 0x1F502, prExtendedPictographic}, // E1.0   [4] (📿..🔂)    prayer beads..repeat single button
-	{0x1F503, 0x1F503, prExtendedPictographic}, // E0.6   [1] (🔃)       clockwise vertical arrows
-	{0x1F504, 0x1F507, prExtendedPictographic}, // E1.0   [4] (🔄..🔇)    counterclockwise arrows button..muted speaker
-	{0x1F508, 0x1F508, prExtendedPictographic}, // E0.7   [1] (🔈)       speaker low volume
-	{0x1F509, 0x1F509, prExtendedPictographic}, // E1.0   [1] (🔉)       speaker medium volume
-	{0x1F50A, 0x1F514, prExtendedPictographic}, // E0.6  [11] (🔊..🔔)    speaker high volume..bell
-	{0x1F515, 0x1F515, prExtendedPictographic}, // E1.0   [1] (🔕)       bell with slash
-	{0x1F516, 0x1F52B, prExtendedPictographic}, // E0.6  [22] (🔖..🔫)    bookmark..water pistol
-	{0x1F52C, 0x1F52D, prExtendedPictographic}, // E1.0   [2] (🔬..🔭)    microscope..telescope
-	{0x1F52E, 0x1F53D, prExtendedPictographic}, // E0.6  [16] (🔮..🔽)    crystal ball..downwards button
-	{0x1F546, 0x1F548, prExtendedPictographic}, // E0.0   [3] (🕆..🕈)    WHITE LATIN CROSS..CELTIC CROSS
-	{0x1F549, 0x1F54A, prExtendedPictographic}, // E0.7   [2] (🕉️..🕊️)    om..dove
-	{0x1F54B, 0x1F54E, prExtendedPictographic}, // E1.0   [4] (🕋..🕎)    kaaba..menorah
-	{0x1F54F, 0x1F54F, prExtendedPictographic}, // E0.0   [1] (🕏)       BOWL OF HYGIEIA
-	{0x1F550, 0x1F55B, prExtendedPictographic}, // E0.6  [12] (🕐..🕛)    one o’clock..twelve o’clock
-	{0x1F55C, 0x1F567, prExtendedPictographic}, // E0.7  [12] (🕜..🕧)    one-thirty..twelve-thirty
-	{0x1F568, 0x1F56E, prExtendedPictographic}, // E0.0   [7] (🕨..🕮)    RIGHT SPEAKER..BOOK
-	{0x1F56F, 0x1F570, prExtendedPictographic}, // E0.7   [2] (🕯️..🕰️)    candle..mantelpiece clock
-	{0x1F571, 0x1F572, prExtendedPictographic}, // E0.0   [2] (🕱..🕲)    BLACK SKULL AND CROSSBONES..NO PIRACY
-	{0x1F573, 0x1F579, prExtendedPictographic}, // E0.7   [7] (🕳️..🕹️)    hole..joystick
-	{0x1F57A, 0x1F57A, prExtendedPictographic}, // E3.0   [1] (🕺)       man dancing
-	{0x1F57B, 0x1F586, prExtendedPictographic}, // E0.0  [12] (🕻..🖆)    LEFT HAND TELEPHONE RECEIVER..PEN OVER STAMPED ENVELOPE
-	{0x1F587, 0x1F587, prExtendedPictographic}, // E0.7   [1] (🖇️)       linked paperclips
-	{0x1F588, 0x1F589, prExtendedPictographic}, // E0.0   [2] (🖈..🖉)    BLACK PUSHPIN..LOWER LEFT PENCIL
-	{0x1F58A, 0x1F58D, prExtendedPictographic}, // E0.7   [4] (🖊️..🖍️)    pen..crayon
-	{0x1F58E, 0x1F58F, prExtendedPictographic}, // E0.0   [2] (🖎..🖏)    LEFT WRITING HAND..TURNED OK HAND SIGN
-	{0x1F590, 0x1F590, prExtendedPictographic}, // E0.7   [1] (🖐️)       hand with fingers splayed
-	{0x1F591, 0x1F594, prExtendedPictographic}, // E0.0   [4] (🖑..🖔)    REVERSED RAISED HAND WITH FINGERS SPLAYED..REVERSED VICTORY HAND
-	{0x1F595, 0x1F596, prExtendedPictographic}, // E1.0   [2] (🖕..🖖)    middle finger..vulcan salute
-	{0x1F597, 0x1F5A3, prExtendedPictographic}, // E0.0  [13] (🖗..🖣)    WHITE DOWN POINTING LEFT HAND INDEX..BLACK DOWN POINTING BACKHAND INDEX
-	{0x1F5A4, 0x1F5A4, prExtendedPictographic}, // E3.0   [1] (🖤)       black heart
-	{0x1F5A5, 0x1F5A5, prExtendedPictographic}, // E0.7   [1] (🖥️)       desktop computer
-	{0x1F5A6, 0x1F5A7, prExtendedPictographic}, // E0.0   [2] (🖦..🖧)    KEYBOARD AND MOUSE..THREE NETWORKED COMPUTERS
-	{0x1F5A8, 0x1F5A8, prExtendedPictographic}, // E0.7   [1] (🖨️)       printer
-	{0x1F5A9, 0x1F5B0, prExtendedPictographic}, // E0.0   [8] (🖩..🖰)    POCKET CALCULATOR..TWO BUTTON MOUSE
-	{0x1F5B1, 0x1F5B2, prExtendedPictographic}, // E0.7   [2] (🖱️..🖲️)    computer mouse..trackball
-	{0x1F5B3, 0x1F5BB, prExtendedPictographic}, // E0.0   [9] (🖳..🖻)    OLD PERSONAL COMPUTER..DOCUMENT WITH PICTURE
-	{0x1F5BC, 0x1F5BC, prExtendedPictographic}, // E0.7   [1] (🖼️)       framed picture
-	{0x1F5BD, 0x1F5C1, prExtendedPictographic}, // E0.0   [5] (🖽..🗁)    FRAME WITH TILES..OPEN FOLDER
-	{0x1F5C2, 0x1F5C4, prExtendedPictographic}, // E0.7   [3] (🗂️..🗄️)    card index dividers..file cabinet
-	{0x1F5C5, 0x1F5D0, prExtendedPictographic}, // E0.0  [12] (🗅..🗐)    EMPTY NOTE..PAGES
-	{0x1F5D1, 0x1F5D3, prExtendedPictographic}, // E0.7   [3] (🗑️..🗓️)    wastebasket..spiral calendar
-	{0x1F5D4, 0x1F5DB, prExtendedPictographic}, // E0.0   [8] (🗔..🗛)    DESKTOP WINDOW..DECREASE FONT SIZE SYMBOL
-	{0x1F5DC, 0x1F5DE, prExtendedPictographic}, // E0.7   [3] (🗜️..🗞️)    clamp..rolled-up newspaper
-	{0x1F5DF, 0x1F5E0, prExtendedPictographic}, // E0.0   [2] (🗟..🗠)    PAGE WITH CIRCLED TEXT..STOCK CHART
-	{0x1F5E1, 0x1F5E1, prExtendedPictographic}, // E0.7   [1] (🗡️)       dagger
-	{0x1F5E2, 0x1F5E2, prExtendedPictographic}, // E0.0   [1] (🗢)       LIPS
-	{0x1F5E3, 0x1F5E3, prExtendedPictographic}, // E0.7   [1] (🗣️)       speaking head
-	{0x1F5E4, 0x1F5E7, prExtendedPictographic}, // E0.0   [4] (🗤..🗧)    THREE RAYS ABOVE..THREE RAYS RIGHT
-	{0x1F5E8, 0x1F5E8, prExtendedPictographic}, // E2.0   [1] (🗨️)       left speech bubble
-	{0x1F5E9, 0x1F5EE, prExtendedPictographic}, // E0.0   [6] (🗩..🗮)    RIGHT SPEECH BUBBLE..LEFT ANGER BUBBLE
-	{0x1F5EF, 0x1F5EF, prExtendedPictographic}, // E0.7   [1] (🗯️)       right anger bubble
-	{0x1F5F0, 0x1F5F2, prExtendedPictographic}, // E0.0   [3] (🗰..🗲)    MOOD BUBBLE..LIGHTNING MOOD
-	{0x1F5F3, 0x1F5F3, prExtendedPictographic}, // E0.7   [1] (🗳️)       ballot box with ballot
-	{0x1F5F4, 0x1F5F9, prExtendedPictographic}, // E0.0   [6] (🗴..🗹)    BALLOT SCRIPT X..BALLOT BOX WITH BOLD CHECK
-	{0x1F5FA, 0x1F5FA, prExtendedPictographic}, // E0.7   [1] (🗺️)       world map
-	{0x1F5FB, 0x1F5FF, prExtendedPictographic}, // E0.6   [5] (🗻..🗿)    mount fuji..moai
-	{0x1F600, 0x1F600, prExtendedPictographic}, // E1.0   [1] (😀)       grinning face
-	{0x1F601, 0x1F606, prExtendedPictographic}, // E0.6   [6] (😁..😆)    beaming face with smiling eyes..grinning squinting face
-	{0x1F607, 0x1F608, prExtendedPictographic}, // E1.0   [2] (😇..😈)    smiling face with halo..smiling face with horns
-	{0x1F609, 0x1F60D, prExtendedPictographic}, // E0.6   [5] (😉..😍)    winking face..smiling face with heart-eyes
-	{0x1F60E, 0x1F60E, prExtendedPictographic}, // E1.0   [1] (😎)       smiling face with sunglasses
-	{0x1F60F, 0x1F60F, prExtendedPictographic}, // E0.6   [1] (😏)       smirking face
-	{0x1F610, 0x1F610, prExtendedPictographic}, // E0.7   [1] (😐)       neutral face
-	{0x1F611, 0x1F611, prExtendedPictographic}, // E1.0   [1] (😑)       expressionless face
-	{0x1F612, 0x1F614, prExtendedPictographic}, // E0.6   [3] (😒..😔)    unamused face..pensive face
-	{0x1F615, 0x1F615, prExtendedPictographic}, // E1.0   [1] (😕)       confused face
-	{0x1F616, 0x1F616, prExtendedPictographic}, // E0.6   [1] (😖)       confounded face
-	{0x1F617, 0x1F617, prExtendedPictographic}, // E1.0   [1] (😗)       kissing face
-	{0x1F618, 0x1F618, prExtendedPictographic}, // E0.6   [1] (😘)       face blowing a kiss
-	{0x1F619, 0x1F619, prExtendedPictographic}, // E1.0   [1] (😙)       kissing face with smiling eyes
-	{0x1F61A, 0x1F61A, prExtendedPictographic}, // E0.6   [1] (😚)       kissing face with closed eyes
-	{0x1F61B, 0x1F61B, prExtendedPictographic}, // E1.0   [1] (😛)       face with tongue
-	{0x1F61C, 0x1F61E, prExtendedPictographic}, // E0.6   [3] (😜..😞)    winking face with tongue..disappointed face
-	{0x1F61F, 0x1F61F, prExtendedPictographic}, // E1.0   [1] (😟)       worried face
-	{0x1F620, 0x1F625, prExtendedPictographic}, // E0.6   [6] (😠..😥)    angry face..sad but relieved face
-	{0x1F626, 0x1F627, prExtendedPictographic}, // E1.0   [2] (😦..😧)    frowning face with open mouth..anguished face
-	{0x1F628, 0x1F62B, prExtendedPictographic}, // E0.6   [4] (😨..😫)    fearful face..tired face
-	{0x1F62C, 0x1F62C, prExtendedPictographic}, // E1.0   [1] (😬)       grimacing face
-	{0x1F62D, 0x1F62D, prExtendedPictographic}, // E0.6   [1] (😭)       loudly crying face
-	{0x1F62E, 0x1F62F, prExtendedPictographic}, // E1.0   [2] (😮..😯)    face with open mouth..hushed face
-	{0x1F630, 0x1F633, prExtendedPictographic}, // E0.6   [4] (😰..😳)    anxious face with sweat..flushed face
-	{0x1F634, 0x1F634, prExtendedPictographic}, // E1.0   [1] (😴)       sleeping face
-	{0x1F635, 0x1F635, prExtendedPictographic}, // E0.6   [1] (😵)       face with crossed-out eyes
-	{0x1F636, 0x1F636, prExtendedPictographic}, // E1.0   [1] (😶)       face without mouth
-	{0x1F637, 0x1F640, prExtendedPictographic}, // E0.6  [10] (😷..🙀)    face with medical mask..weary cat
-	{0x1F641, 0x1F644, prExtendedPictographic}, // E1.0   [4] (🙁..🙄)    slightly frowning face..face with rolling eyes
-	{0x1F645, 0x1F64F, prExtendedPictographic}, // E0.6  [11] (🙅..🙏)    person gesturing NO..folded hands
-	{0x1F680, 0x1F680, prExtendedPictographic}, // E0.6   [1] (🚀)       rocket
-	{0x1F681, 0x1F682, prExtendedPictographic}, // E1.0   [2] (🚁..🚂)    helicopter..locomotive
-	{0x1F683, 0x1F685, prExtendedPictographic}, // E0.6   [3] (🚃..🚅)    railway car..bullet train
-	{0x1F686, 0x1F686, prExtendedPictographic}, // E1.0   [1] (🚆)       train
-	{0x1F687, 0x1F687, prExtendedPictographic}, // E0.6   [1] (🚇)       metro
-	{0x1F688, 0x1F688, prExtendedPictographic}, // E1.0   [1] (🚈)       light rail
-	{0x1F689, 0x1F689, prExtendedPictographic}, // E0.6   [1] (🚉)       station
-	{0x1F68A, 0x1F68B, prExtendedPictographic}, // E1.0   [2] (🚊..🚋)    tram..tram car
-	{0x1F68C, 0x1F68C, prExtendedPictographic}, // E0.6   [1] (🚌)       bus
-	{0x1F68D, 0x1F68D, prExtendedPictographic}, // E0.7   [1] (🚍)       oncoming bus
-	{0x1F68E, 0x1F68E, prExtendedPictographic}, // E1.0   [1] (🚎)       trolleybus
-	{0x1F68F, 0x1F68F, prExtendedPictographic}, // E0.6   [1] (🚏)       bus stop
-	{0x1F690, 0x1F690, prExtendedPictographic}, // E1.0   [1] (🚐)       minibus
-	{0x1F691, 0x1F693, prExtendedPictographic}, // E0.6   [3] (🚑..🚓)    ambulance..police car
-	{0x1F694, 0x1F694, prExtendedPictographic}, // E0.7   [1] (🚔)       oncoming police car
-	{0x1F695, 0x1F695, prExtendedPictographic}, // E0.6   [1] (🚕)       taxi
-	{0x1F696, 0x1F696, prExtendedPictographic}, // E1.0   [1] (🚖)       oncoming taxi
-	{0x1F697, 0x1F697, prExtendedPictographic}, // E0.6   [1] (🚗)       automobile
-	{0x1F698, 0x1F698, prExtendedPictographic}, // E0.7   [1] (🚘)       oncoming automobile
-	{0x1F699, 0x1F69A, prExtendedPictographic}, // E0.6   [2] (🚙..🚚)    sport utility vehicle..delivery truck
-	{0x1F69B, 0x1F6A1, prExtendedPictographic}, // E1.0   [7] (🚛..🚡)    articulated lorry..aerial tramway
-	{0x1F6A2, 0x1F6A2, prExtendedPictographic}, // E0.6   [1] (🚢)       ship
-	{0x1F6A3, 0x1F6A3, prExtendedPictographic}, // E1.0   [1] (🚣)       person rowing boat
-	{0x1F6A4, 0x1F6A5, prExtendedPictographic}, // E0.6   [2] (🚤..🚥)    speedboat..horizontal traffic light
-	{0x1F6A6, 0x1F6A6, prExtendedPictographic}, // E1.0   [1] (🚦)       vertical traffic light
-	{0x1F6A7, 0x1F6AD, prExtendedPictographic}, // E0.6   [7] (🚧..🚭)    construction..no smoking
-	{0x1F6AE, 0x1F6B1, prExtendedPictographic}, // E1.0   [4] (🚮..🚱)    litter in bin sign..non-potable water
-	{0x1F6B2, 0x1F6B2, prExtendedPictographic}, // E0.6   [1] (🚲)       bicycle
-	{0x1F6B3, 0x1F6B5, prExtendedPictographic}, // E1.0   [3] (🚳..🚵)    no bicycles..person mountain biking
-	{0x1F6B6, 0x1F6B6, prExtendedPictographic}, // E0.6   [1] (🚶)       person walking
-	{0x1F6B7, 0x1F6B8, prExtendedPictographic}, // E1.0   [2] (🚷..🚸)    no pedestrians..children crossing
-	{0x1F6B9, 0x1F6BE, prExtendedPictographic}, // E0.6   [6] (🚹..🚾)    men’s room..water closet
-	{0x1F6BF, 0x1F6BF, prExtendedPictographic}, // E1.0   [1] (🚿)       shower
-	{0x1F6C0, 0x1F6C0, prExtendedPictographic}, // E0.6   [1] (🛀)       person taking bath
-	{0x1F6C1, 0x1F6C5, prExtendedPictographic}, // E1.0   [5] (🛁..🛅)    bathtub..left luggage
-	{0x1F6C6, 0x1F6CA, prExtendedPictographic}, // E0.0   [5] (🛆..🛊)    TRIANGLE WITH ROUNDED CORNERS..GIRLS SYMBOL
-	{0x1F6CB, 0x1F6CB, prExtendedPictographic}, // E0.7   [1] (🛋️)       couch and lamp
-	{0x1F6CC, 0x1F6CC, prExtendedPictographic}, // E1.0   [1] (🛌)       person in bed
-	{0x1F6CD, 0x1F6CF, prExtendedPictographic}, // E0.7   [3] (🛍️..🛏️)    shopping bags..bed
-	{0x1F6D0, 0x1F6D0, prExtendedPictographic}, // E1.0   [1] (🛐)       place of worship
-	{0x1F6D1, 0x1F6D2, prExtendedPictographic}, // E3.0   [2] (🛑..🛒)    stop sign..shopping cart
-	{0x1F6D3, 0x1F6D4, prExtendedPictographic}, // E0.0   [2] (🛓..🛔)    STUPA..PAGODA
-	{0x1F6D5, 0x1F6D5, prExtendedPictographic}, // E12.0  [1] (🛕)       hindu temple
-	{0x1F6D6, 0x1F6D7, prExtendedPictographic}, // E13.0  [2] (🛖..🛗)    hut..elevator
-	{0x1F6D8, 0x1F6DB, prExtendedPictographic}, // E0.0   [4] (🛘..🛛)    <reserved-1F6D8>..<reserved-1F6DB>
-	{0x1F6DC, 0x1F6DC, prExtendedPictographic}, // E15.0  [1] (🛜)       wireless
-	{0x1F6DD, 0x1F6DF, prExtendedPictographic}, // E14.0  [3] (🛝..🛟)    playground slide..ring buoy
-	{0x1F6E0, 0x1F6E5, prExtendedPictographic}, // E0.7   [6] (🛠️..🛥️)    hammer and wrench..motor boat
-	{0x1F6E6, 0x1F6E8, prExtendedPictographic}, // E0.0   [3] (🛦..🛨)    UP-POINTING MILITARY AIRPLANE..UP-POINTING SMALL AIRPLANE
-	{0x1F6E9, 0x1F6E9, prExtendedPictographic}, // E0.7   [1] (🛩️)       small airplane
-	{0x1F6EA, 0x1F6EA, prExtendedPictographic}, // E0.0   [1] (🛪)       NORTHEAST-POINTING AIRPLANE
-	{0x1F6EB, 0x1F6EC, prExtendedPictographic}, // E1.0   [2] (🛫..🛬)    airplane departure..airplane arrival
-	{0x1F6ED, 0x1F6EF, prExtendedPictographic}, // E0.0   [3] (🛭..🛯)    <reserved-1F6ED>..<reserved-1F6EF>
-	{0x1F6F0, 0x1F6F0, prExtendedPictographic}, // E0.7   [1] (🛰️)       satellite
-	{0x1F6F1, 0x1F6F2, prExtendedPictographic}, // E0.0   [2] (🛱..🛲)    ONCOMING FIRE ENGINE..DIESEL LOCOMOTIVE
-	{0x1F6F3, 0x1F6F3, prExtendedPictographic}, // E0.7   [1] (🛳️)       passenger ship
-	{0x1F6F4, 0x1F6F6, prExtendedPictographic}, // E3.0   [3] (🛴..🛶)    kick scooter..canoe
-	{0x1F6F7, 0x1F6F8, prExtendedPictographic}, // E5.0   [2] (🛷..🛸)    sled..flying saucer
-	{0x1F6F9, 0x1F6F9, prExtendedPictographic}, // E11.0  [1] (🛹)       skateboard
-	{0x1F6FA, 0x1F6FA, prExtendedPictographic}, // E12.0  [1] (🛺)       auto rickshaw
-	{0x1F6FB, 0x1F6FC, prExtendedPictographic}, // E13.0  [2] (🛻..🛼)    pickup truck..roller skate
-	{0x1F6FD, 0x1F6FF, prExtendedPictographic}, // E0.0   [3] (🛽..🛿)    <reserved-1F6FD>..<reserved-1F6FF>
-	{0x1F774, 0x1F77F, prExtendedPictographic}, // E0.0  [12] (🝴..🝿)    LOT OF FORTUNE..ORCUS
-	{0x1F7D5, 0x1F7DF, prExtendedPictographic}, // E0.0  [11] (🟕..🟟)    CIRCLED TRIANGLE..<reserved-1F7DF>
-	{0x1F7E0, 0x1F7EB, prExtendedPictographic}, // E12.0 [12] (🟠..🟫)    orange circle..brown square
-	{0x1F7EC, 0x1F7EF, prExtendedPictographic}, // E0.0   [4] (🟬..🟯)    <reserved-1F7EC>..<reserved-1F7EF>
-	{0x1F7F0, 0x1F7F0, prExtendedPictographic}, // E14.0  [1] (🟰)       heavy equals sign
-	{0x1F7F1, 0x1F7FF, prExtendedPictographic}, // E0.0  [15] (🟱..🟿)    <reserved-1F7F1>..<reserved-1F7FF>
-	{0x1F80C, 0x1F80F, prExtendedPictographic}, // E0.0   [4] (🠌..🠏)    <reserved-1F80C>..<reserved-1F80F>
-	{0x1F848, 0x1F84F, prExtendedPictographic}, // E0.0   [8] (🡈..🡏)    <reserved-1F848>..<reserved-1F84F>
-	{0x1F85A, 0x1F85F, prExtendedPictographic}, // E0.0   [6] (🡚..🡟)    <reserved-1F85A>..<reserved-1F85F>
-	{0x1F888, 0x1F88F, prExtendedPictographic}, // E0.0   [8] (🢈..🢏)    <reserved-1F888>..<reserved-1F88F>
-	{0x1F8AE, 0x1F8FF, prExtendedPictographic}, // E0.0  [82] (🢮..🣿)    <reserved-1F8AE>..<reserved-1F8FF>
-	{0x1F90C, 0x1F90C, prExtendedPictographic}, // E13.0  [1] (🤌)       pinched fingers
-	{0x1F90D, 0x1F90F, prExtendedPictographic}, // E12.0  [3] (🤍..🤏)    white heart..pinching hand
-	{0x1F910, 0x1F918, prExtendedPictographic}, // E1.0   [9] (🤐..🤘)    zipper-mouth face..sign of the horns
-	{0x1F919, 0x1F91E, prExtendedPictographic}, // E3.0   [6] (🤙..🤞)    call me hand..crossed fingers
-	{0x1F91F, 0x1F91F, prExtendedPictographic}, // E5.0   [1] (🤟)       love-you gesture
-	{0x1F920, 0x1F927, prExtendedPictographic}, // E3.0   [8] (🤠..🤧)    cowboy hat face..sneezing face
-	{0x1F928, 0x1F92F, prExtendedPictographic}, // E5.0   [8] (🤨..🤯)    face with raised eyebrow..exploding head
-	{0x1F930, 0x1F930, prExtendedPictographic}, // E3.0   [1] (🤰)       pregnant woman
-	{0x1F931, 0x1F932, prExtendedPictographic}, // E5.0   [2] (🤱..🤲)    breast-feeding..palms up together
-	{0x1F933, 0x1F93A, prExtendedPictographic}, // E3.0   [8] (🤳..🤺)    selfie..person fencing
-	{0x1F93C, 0x1F93E, prExtendedPictographic}, // E3.0   [3] (🤼..🤾)    people wrestling..person playing handball
-	{0x1F93F, 0x1F93F, prExtendedPictographic}, // E12.0  [1] (🤿)       diving mask
-	{0x1F940, 0x1F945, prExtendedPictographic}, // E3.0   [6] (🥀..🥅)    wilted flower..goal net
-	{0x1F947, 0x1F94B, prExtendedPictographic}, // E3.0   [5] (🥇..🥋)    1st place medal..martial arts uniform
-	{0x1F94C, 0x1F94C, prExtendedPictographic}, // E5.0   [1] (🥌)       curling stone
-	{0x1F94D, 0x1F94F, prExtendedPictographic}, // E11.0  [3] (🥍..🥏)    lacrosse..flying disc
-	{0x1F950, 0x1F95E, prExtendedPictographic}, // E3.0  [15] (🥐..🥞)    croissant..pancakes
-	{0x1F95F, 0x1F96B, prExtendedPictographic}, // E5.0  [13] (🥟..🥫)    dumpling..canned food
-	{0x1F96C, 0x1F970, prExtendedPictographic}, // E11.0  [5] (🥬..🥰)    leafy green..smiling face with hearts
-	{0x1F971, 0x1F971, prExtendedPictographic}, // E12.0  [1] (🥱)       yawning face
-	{0x1F972, 0x1F972, prExtendedPictographic}, // E13.0  [1] (🥲)       smiling face with tear
-	{0x1F973, 0x1F976, prExtendedPictographic}, // E11.0  [4] (🥳..🥶)    partying face..cold face
-	{0x1F977, 0x1F978, prExtendedPictographic}, // E13.0  [2] (🥷..🥸)    ninja..disguised face
-	{0x1F979, 0x1F979, prExtendedPictographic}, // E14.0  [1] (🥹)       face holding back tears
-	{0x1F97A, 0x1F97A, prExtendedPictographic}, // E11.0  [1] (🥺)       pleading face
-	{0x1F97B, 0x1F97B, prExtendedPictographic}, // E12.0  [1] (🥻)       sari
-	{0x1F97C, 0x1F97F, prExtendedPictographic}, // E11.0  [4] (🥼..🥿)    lab coat..flat shoe
-	{0x1F980, 0x1F984, prExtendedPictographic}, // E1.0   [5] (🦀..🦄)    crab..unicorn
-	{0x1F985, 0x1F991, prExtendedPictographic}, // E3.0  [13] (🦅..🦑)    eagle..squid
-	{0x1F992, 0x1F997, prExtendedPictographic}, // E5.0   [6] (🦒..🦗)    giraffe..cricket
-	{0x1F998, 0x1F9A2, prExtendedPictographic}, // E11.0 [11] (🦘..🦢)    kangaroo..swan
-	{0x1F9A3, 0x1F9A4, prExtendedPictographic}, // E13.0  [2] (🦣..🦤)    mammoth..dodo
-	{0x1F9A5, 0x1F9AA, prExtendedPictographic}, // E12.0  [6] (🦥..🦪)    sloth..oyster
-	{0x1F9AB, 0x1F9AD, prExtendedPictographic}, // E13.0  [3] (🦫..🦭)    beaver..seal
-	{0x1F9AE, 0x1F9AF, prExtendedPictographic}, // E12.0  [2] (🦮..🦯)    guide dog..white cane
-	{0x1F9B0, 0x1F9B9, prExtendedPictographic}, // E11.0 [10] (🦰..🦹)    red hair..supervillain
-	{0x1F9BA, 0x1F9BF, prExtendedPictographic}, // E12.0  [6] (🦺..🦿)    safety vest..mechanical leg
-	{0x1F9C0, 0x1F9C0, prExtendedPictographic}, // E1.0   [1] (🧀)       cheese wedge
-	{0x1F9C1, 0x1F9C2, prExtendedPictographic}, // E11.0  [2] (🧁..🧂)    cupcake..salt
-	{0x1F9C3, 0x1F9CA, prExtendedPictographic}, // E12.0  [8] (🧃..🧊)    beverage box..ice
-	{0x1F9CB, 0x1F9CB, prExtendedPictographic}, // E13.0  [1] (🧋)       bubble tea
-	{0x1F9CC, 0x1F9CC, prExtendedPictographic}, // E14.0  [1] (🧌)       troll
-	{0x1F9CD, 0x1F9CF, prExtendedPictographic}, // E12.0  [3] (🧍..🧏)    person standing..deaf person
-	{0x1F9D0, 0x1F9E6, prExtendedPictographic}, // E5.0  [23] (🧐..🧦)    face with monocle..socks
-	{0x1F9E7, 0x1F9FF, prExtendedPictographic}, // E11.0 [25] (🧧..🧿)    red envelope..nazar amulet
-	{0x1FA00, 0x1FA6F, prExtendedPictographic}, // E0.0 [112] (🨀..🩯)    NEUTRAL CHESS KING..<reserved-1FA6F>
-	{0x1FA70, 0x1FA73, prExtendedPictographic}, // E12.0  [4] (🩰..🩳)    ballet shoes..shorts
-	{0x1FA74, 0x1FA74, prExtendedPictographic}, // E13.0  [1] (🩴)       thong sandal
-	{0x1FA75, 0x1FA77, prExtendedPictographic}, // E15.0  [3] (🩵..🩷)    light blue heart..pink heart
-	{0x1FA78, 0x1FA7A, prExtendedPictographic}, // E12.0  [3] (🩸..🩺)    drop of blood..stethoscope
-	{0x1FA7B, 0x1FA7C, prExtendedPictographic}, // E14.0  [2] (🩻..🩼)    x-ray..crutch
-	{0x1FA7D, 0x1FA7F, prExtendedPictographic}, // E0.0   [3] (🩽..🩿)    <reserved-1FA7D>..<reserved-1FA7F>
-	{0x1FA80, 0x1FA82, prExtendedPictographic}, // E12.0  [3] (🪀..🪂)    yo-yo..parachute
-	{0x1FA83, 0x1FA86, prExtendedPictographic}, // E13.0  [4] (🪃..🪆)    boomerang..nesting dolls
-	{0x1FA87, 0x1FA88, prExtendedPictographic}, // E15.0  [2] (🪇..🪈)    maracas..flute
-	{0x1FA89, 0x1FA8F, prExtendedPictographic}, // E0.0   [7] (🪉..🪏)    <reserved-1FA89>..<reserved-1FA8F>
-	{0x1FA90, 0x1FA95, prExtendedPictographic}, // E12.0  [6] (🪐..🪕)    ringed planet..banjo
-	{0x1FA96, 0x1FAA8, prExtendedPictographic}, // E13.0 [19] (🪖..🪨)    military helmet..rock
-	{0x1FAA9, 0x1FAAC, prExtendedPictographic}, // E14.0  [4] (🪩..🪬)    mirror ball..hamsa
-	{0x1FAAD, 0x1FAAF, prExtendedPictographic}, // E15.0  [3] (🪭..🪯)    folding hand fan..khanda
-	{0x1FAB0, 0x1FAB6, prExtendedPictographic}, // E13.0  [7] (🪰..🪶)    fly..feather
-	{0x1FAB7, 0x1FABA, prExtendedPictographic}, // E14.0  [4] (🪷..🪺)    lotus..nest with eggs
-	{0x1FABB, 0x1FABD, prExtendedPictographic}, // E15.0  [3] (🪻..🪽)    hyacinth..wing
-	{0x1FABE, 0x1FABE, prExtendedPictographic}, // E0.0   [1] (🪾)       <reserved-1FABE>
-	{0x1FABF, 0x1FABF, prExtendedPictographic}, // E15.0  [1] (🪿)       goose
-	{0x1FAC0, 0x1FAC2, prExtendedPictographic}, // E13.0  [3] (🫀..🫂)    anatomical heart..people hugging
-	{0x1FAC3, 0x1FAC5, prExtendedPictographic}, // E14.0  [3] (🫃..🫅)    pregnant man..person with crown
-	{0x1FAC6, 0x1FACD, prExtendedPictographic}, // E0.0   [8] (🫆..🫍)    <reserved-1FAC6>..<reserved-1FACD>
-	{0x1FACE, 0x1FACF, prExtendedPictographic}, // E15.0  [2] (🫎..🫏)    moose..donkey
-	{0x1FAD0, 0x1FAD6, prExtendedPictographic}, // E13.0  [7] (🫐..🫖)    blueberries..teapot
-	{0x1FAD7, 0x1FAD9, prExtendedPictographic}, // E14.0  [3] (🫗..🫙)    pouring liquid..jar
-	{0x1FADA, 0x1FADB, prExtendedPictographic}, // E15.0  [2] (🫚..🫛)    ginger root..pea pod
-	{0x1FADC, 0x1FADF, prExtendedPictographic}, // E0.0   [4] (🫜..🫟)    <reserved-1FADC>..<reserved-1FADF>
-	{0x1FAE0, 0x1FAE7, prExtendedPictographic}, // E14.0  [8] (🫠..🫧)    melting face..bubbles
-	{0x1FAE8, 0x1FAE8, prExtendedPictographic}, // E15.0  [1] (🫨)       shaking face
-	{0x1FAE9, 0x1FAEF, prExtendedPictographic}, // E0.0   [7] (🫩..🫯)    <reserved-1FAE9>..<reserved-1FAEF>
-	{0x1FAF0, 0x1FAF6, prExtendedPictographic}, // E14.0  [7] (🫰..🫶)    hand with index finger and thumb crossed..heart hands
-	{0x1FAF7, 0x1FAF8, prExtendedPictographic}, // E15.0  [2] (🫷..🫸)    leftwards pushing hand..rightwards pushing hand
-	{0x1FAF9, 0x1FAFF, prExtendedPictographic}, // E0.0   [7] (🫹..🫿)    <reserved-1FAF9>..<reserved-1FAFF>
-	{0x1FC00, 0x1FFFD, prExtendedPictographic}, // E0.0[1022] (🰀..🿽)    <reserved-1FC00>..<reserved-1FFFD>
-	{0xE0000, 0xE0000, prControl},              // Cn       <reserved-E0000>
-	{0xE0001, 0xE0001, prControl},              // Cf       LANGUAGE TAG
-	{0xE0002, 0xE001F, prControl},              // Cn  [30] <reserved-E0002>..<reserved-E001F>
-	{0xE0020, 0xE007F, prExtend},               // Cf  [96] TAG SPACE..CANCEL TAG
-	{0xE0080, 0xE00FF, prControl},              // Cn [128] <reserved-E0080>..<reserved-E00FF>
-	{0xE0100, 0xE01EF, prExtend},               // Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256
-	{0xE01F0, 0xE0FFF, prControl},              // Cn [3600] <reserved-E01F0>..<reserved-E0FFF>
-}

+ 0 - 176
v2/vendor/github.com/rivo/uniseg/graphemerules.go

@@ -1,176 +0,0 @@
-package uniseg
-
-// The states of the grapheme cluster parser.
-const (
-	grAny = iota
-	grCR
-	grControlLF
-	grL
-	grLVV
-	grLVTT
-	grPrepend
-	grExtendedPictographic
-	grExtendedPictographicZWJ
-	grRIOdd
-	grRIEven
-)
-
-// The grapheme cluster parser's breaking instructions.
-const (
-	grNoBoundary = iota
-	grBoundary
-)
-
-// grTransitions implements the grapheme cluster parser's state transitions.
-// Maps state and property to a new state, a breaking instruction, and rule
-// number. The breaking instruction always refers to the boundary between the
-// last and next code point. Returns negative values if no transition is found.
-//
-// This function is used as follows:
-//
-//  1. Find specific state + specific property. Stop if found.
-//  2. Find specific state + any property.
-//  3. Find any state + specific property.
-//  4. If only (2) or (3) (but not both) was found, stop.
-//  5. If both (2) and (3) were found, use state from (3) and breaking instruction
-//     from the transition with the lower rule number, prefer (3) if rule numbers
-//     are equal. Stop.
-//  6. Assume grAny and grBoundary.
-//
-// Unicode version 15.0.0.
-func grTransitions(state, prop int) (newState int, newProp int, boundary int) {
-	// It turns out that using a big switch statement is much faster than using
-	// a map.
-
-	switch uint64(state) | uint64(prop)<<32 {
-	// GB5
-	case grAny | prCR<<32:
-		return grCR, grBoundary, 50
-	case grAny | prLF<<32:
-		return grControlLF, grBoundary, 50
-	case grAny | prControl<<32:
-		return grControlLF, grBoundary, 50
-
-	// GB4
-	case grCR | prAny<<32:
-		return grAny, grBoundary, 40
-	case grControlLF | prAny<<32:
-		return grAny, grBoundary, 40
-
-	// GB3
-	case grCR | prLF<<32:
-		return grControlLF, grNoBoundary, 30
-
-	// GB6
-	case grAny | prL<<32:
-		return grL, grBoundary, 9990
-	case grL | prL<<32:
-		return grL, grNoBoundary, 60
-	case grL | prV<<32:
-		return grLVV, grNoBoundary, 60
-	case grL | prLV<<32:
-		return grLVV, grNoBoundary, 60
-	case grL | prLVT<<32:
-		return grLVTT, grNoBoundary, 60
-
-	// GB7
-	case grAny | prLV<<32:
-		return grLVV, grBoundary, 9990
-	case grAny | prV<<32:
-		return grLVV, grBoundary, 9990
-	case grLVV | prV<<32:
-		return grLVV, grNoBoundary, 70
-	case grLVV | prT<<32:
-		return grLVTT, grNoBoundary, 70
-
-	// GB8
-	case grAny | prLVT<<32:
-		return grLVTT, grBoundary, 9990
-	case grAny | prT<<32:
-		return grLVTT, grBoundary, 9990
-	case grLVTT | prT<<32:
-		return grLVTT, grNoBoundary, 80
-
-	// GB9
-	case grAny | prExtend<<32:
-		return grAny, grNoBoundary, 90
-	case grAny | prZWJ<<32:
-		return grAny, grNoBoundary, 90
-
-	// GB9a
-	case grAny | prSpacingMark<<32:
-		return grAny, grNoBoundary, 91
-
-	// GB9b
-	case grAny | prPrepend<<32:
-		return grPrepend, grBoundary, 9990
-	case grPrepend | prAny<<32:
-		return grAny, grNoBoundary, 92
-
-	// GB11
-	case grAny | prExtendedPictographic<<32:
-		return grExtendedPictographic, grBoundary, 9990
-	case grExtendedPictographic | prExtend<<32:
-		return grExtendedPictographic, grNoBoundary, 110
-	case grExtendedPictographic | prZWJ<<32:
-		return grExtendedPictographicZWJ, grNoBoundary, 110
-	case grExtendedPictographicZWJ | prExtendedPictographic<<32:
-		return grExtendedPictographic, grNoBoundary, 110
-
-	// GB12 / GB13
-	case grAny | prRegionalIndicator<<32:
-		return grRIOdd, grBoundary, 9990
-	case grRIOdd | prRegionalIndicator<<32:
-		return grRIEven, grNoBoundary, 120
-	case grRIEven | prRegionalIndicator<<32:
-		return grRIOdd, grBoundary, 120
-	default:
-		return -1, -1, -1
-	}
-}
-
-// transitionGraphemeState determines the new state of the grapheme cluster
-// parser given the current state and the next code point. It also returns the
-// code point's grapheme property (the value mapped by the [graphemeCodePoints]
-// table) and whether a cluster boundary was detected.
-func transitionGraphemeState(state int, r rune) (newState, prop int, boundary bool) {
-	// Determine the property of the next character.
-	prop = propertyGraphemes(r)
-
-	// Find the applicable transition.
-	nextState, nextProp, _ := grTransitions(state, prop)
-	if nextState >= 0 {
-		// We have a specific transition. We'll use it.
-		return nextState, prop, nextProp == grBoundary
-	}
-
-	// No specific transition found. Try the less specific ones.
-	anyPropState, anyPropProp, anyPropRule := grTransitions(state, prAny)
-	anyStateState, anyStateProp, anyStateRule := grTransitions(grAny, prop)
-	if anyPropState >= 0 && anyStateState >= 0 {
-		// Both apply. We'll use a mix (see comments for grTransitions).
-		newState = anyStateState
-		boundary = anyStateProp == grBoundary
-		if anyPropRule < anyStateRule {
-			boundary = anyPropProp == grBoundary
-		}
-		return
-	}
-
-	if anyPropState >= 0 {
-		// We only have a specific state.
-		return anyPropState, prop, anyPropProp == grBoundary
-		// This branch will probably never be reached because okAnyState will
-		// always be true given the current transition map. But we keep it here
-		// for future modifications to the transition map where this may not be
-		// true anymore.
-	}
-
-	if anyStateState >= 0 {
-		// We only have a specific property.
-		return anyStateState, prop, anyStateProp == grBoundary
-	}
-
-	// No known transition. GB999: Any ÷ Any.
-	return grAny, prop, true
-}

+ 0 - 134
v2/vendor/github.com/rivo/uniseg/line.go

@@ -1,134 +0,0 @@
-package uniseg
-
-import "unicode/utf8"
-
-// FirstLineSegment returns the prefix of the given byte slice after which a
-// decision to break the string over to the next line can or must be made,
-// according to the rules of [Unicode Standard Annex #14]. This is used to
-// implement line breaking.
-//
-// Line breaking, also known as word wrapping, is the process of breaking a
-// section of text into lines such that it will fit in the available width of a
-// page, window or other display area.
-//
-// The returned "segment" may not be broken into smaller parts, unless no other
-// breaking opportunities present themselves, in which case you may break by
-// grapheme clusters (using the [FirstGraphemeCluster] function to determine the
-// grapheme clusters).
-//
-// The "mustBreak" flag indicates whether you MUST break the line after the
-// given segment (true), for example after newline characters, or you MAY break
-// the line after the given segment (false).
-//
-// This function can be called continuously to extract all non-breaking sub-sets
-// from a byte slice, as illustrated in the example below.
-//
-// If you don't know the current state, for example when calling the function
-// for the first time, you must pass -1. For consecutive calls, pass the state
-// and rest slice returned by the previous call.
-//
-// The "rest" slice is the sub-slice of the original byte slice "b" starting
-// after the last byte of the identified line segment. If the length of the
-// "rest" slice is 0, the entire byte slice "b" has been processed. The
-// "segment" byte slice is the sub-slice of the input slice containing the
-// identified line segment.
-//
-// Given an empty byte slice "b", the function returns nil values.
-//
-// Note that in accordance with [UAX #14 LB3], the final segment will end with
-// "mustBreak" set to true. You can choose to ignore this by checking if the
-// length of the "rest" slice is 0 and calling [HasTrailingLineBreak] or
-// [HasTrailingLineBreakInString] on the last rune.
-//
-// Note also that this algorithm may break within grapheme clusters. This is
-// addressed in Section 8.2 Example 6 of UAX #14. To avoid this, you can use
-// the [Step] function instead.
-//
-// [Unicode Standard Annex #14]: https://www.unicode.org/reports/tr14/
-// [UAX #14 LB3]: https://www.unicode.org/reports/tr14/#Algorithm
-func FirstLineSegment(b []byte, state int) (segment, rest []byte, mustBreak bool, newState int) {
-	// An empty byte slice returns nothing.
-	if len(b) == 0 {
-		return
-	}
-
-	// Extract the first rune.
-	r, length := utf8.DecodeRune(b)
-	if len(b) <= length { // If we're already past the end, there is nothing else to parse.
-		return b, nil, true, lbAny // LB3.
-	}
-
-	// If we don't know the state, determine it now.
-	if state < 0 {
-		state, _ = transitionLineBreakState(state, r, b[length:], "")
-	}
-
-	// Transition until we find a boundary.
-	var boundary int
-	for {
-		r, l := utf8.DecodeRune(b[length:])
-		state, boundary = transitionLineBreakState(state, r, b[length+l:], "")
-
-		if boundary != LineDontBreak {
-			return b[:length], b[length:], boundary == LineMustBreak, state
-		}
-
-		length += l
-		if len(b) <= length {
-			return b, nil, true, lbAny // LB3
-		}
-	}
-}
-
-// FirstLineSegmentInString is like [FirstLineSegment] but its input and outputs
-// are strings.
-func FirstLineSegmentInString(str string, state int) (segment, rest string, mustBreak bool, newState int) {
-	// An empty byte slice returns nothing.
-	if len(str) == 0 {
-		return
-	}
-
-	// Extract the first rune.
-	r, length := utf8.DecodeRuneInString(str)
-	if len(str) <= length { // If we're already past the end, there is nothing else to parse.
-		return str, "", true, lbAny // LB3.
-	}
-
-	// If we don't know the state, determine it now.
-	if state < 0 {
-		state, _ = transitionLineBreakState(state, r, nil, str[length:])
-	}
-
-	// Transition until we find a boundary.
-	var boundary int
-	for {
-		r, l := utf8.DecodeRuneInString(str[length:])
-		state, boundary = transitionLineBreakState(state, r, nil, str[length+l:])
-
-		if boundary != LineDontBreak {
-			return str[:length], str[length:], boundary == LineMustBreak, state
-		}
-
-		length += l
-		if len(str) <= length {
-			return str, "", true, lbAny // LB3.
-		}
-	}
-}
-
-// HasTrailingLineBreak returns true if the last rune in the given byte slice is
-// one of the hard line break code points defined in LB4 and LB5 of [UAX #14].
-//
-// [UAX #14]: https://www.unicode.org/reports/tr14/#Algorithm
-func HasTrailingLineBreak(b []byte) bool {
-	r, _ := utf8.DecodeLastRune(b)
-	property, _ := propertyLineBreak(r)
-	return property == prBK || property == prCR || property == prLF || property == prNL
-}
-
-// HasTrailingLineBreakInString is like [HasTrailingLineBreak] but for a string.
-func HasTrailingLineBreakInString(str string) bool {
-	r, _ := utf8.DecodeLastRuneInString(str)
-	property, _ := propertyLineBreak(r)
-	return property == prBK || property == prCR || property == prLF || property == prNL
-}

+ 0 - 3554
v2/vendor/github.com/rivo/uniseg/lineproperties.go

@@ -1,3554 +0,0 @@
-// Code generated via go generate from gen_properties.go. DO NOT EDIT.
-
-package uniseg
-
-// lineBreakCodePoints are taken from
-// https://www.unicode.org/Public/15.0.0/ucd/LineBreak.txt
-// and
-// https://unicode.org/Public/15.0.0/ucd/emoji/emoji-data.txt
-// ("Extended_Pictographic" only)
-// on September 5, 2023. See https://www.unicode.org/license.html for the Unicode
-// license agreement.
-var lineBreakCodePoints = [][4]int{
-	{0x0000, 0x0008, prCM, gcCc},     //     [9] <control-0000>..<control-0008>
-	{0x0009, 0x0009, prBA, gcCc},     //         <control-0009>
-	{0x000A, 0x000A, prLF, gcCc},     //         <control-000A>
-	{0x000B, 0x000C, prBK, gcCc},     //     [2] <control-000B>..<control-000C>
-	{0x000D, 0x000D, prCR, gcCc},     //         <control-000D>
-	{0x000E, 0x001F, prCM, gcCc},     //    [18] <control-000E>..<control-001F>
-	{0x0020, 0x0020, prSP, gcZs},     //         SPACE
-	{0x0021, 0x0021, prEX, gcPo},     //         EXCLAMATION MARK
-	{0x0022, 0x0022, prQU, gcPo},     //         QUOTATION MARK
-	{0x0023, 0x0023, prAL, gcPo},     //         NUMBER SIGN
-	{0x0024, 0x0024, prPR, gcSc},     //         DOLLAR SIGN
-	{0x0025, 0x0025, prPO, gcPo},     //         PERCENT SIGN
-	{0x0026, 0x0026, prAL, gcPo},     //         AMPERSAND
-	{0x0027, 0x0027, prQU, gcPo},     //         APOSTROPHE
-	{0x0028, 0x0028, prOP, gcPs},     //         LEFT PARENTHESIS
-	{0x0029, 0x0029, prCP, gcPe},     //         RIGHT PARENTHESIS
-	{0x002A, 0x002A, prAL, gcPo},     //         ASTERISK
-	{0x002B, 0x002B, prPR, gcSm},     //         PLUS SIGN
-	{0x002C, 0x002C, prIS, gcPo},     //         COMMA
-	{0x002D, 0x002D, prHY, gcPd},     //         HYPHEN-MINUS
-	{0x002E, 0x002E, prIS, gcPo},     //         FULL STOP
-	{0x002F, 0x002F, prSY, gcPo},     //         SOLIDUS
-	{0x0030, 0x0039, prNU, gcNd},     //    [10] DIGIT ZERO..DIGIT NINE
-	{0x003A, 0x003B, prIS, gcPo},     //     [2] COLON..SEMICOLON
-	{0x003C, 0x003E, prAL, gcSm},     //     [3] LESS-THAN SIGN..GREATER-THAN SIGN
-	{0x003F, 0x003F, prEX, gcPo},     //         QUESTION MARK
-	{0x0040, 0x0040, prAL, gcPo},     //         COMMERCIAL AT
-	{0x0041, 0x005A, prAL, gcLu},     //    [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z
-	{0x005B, 0x005B, prOP, gcPs},     //         LEFT SQUARE BRACKET
-	{0x005C, 0x005C, prPR, gcPo},     //         REVERSE SOLIDUS
-	{0x005D, 0x005D, prCP, gcPe},     //         RIGHT SQUARE BRACKET
-	{0x005E, 0x005E, prAL, gcSk},     //         CIRCUMFLEX ACCENT
-	{0x005F, 0x005F, prAL, gcPc},     //         LOW LINE
-	{0x0060, 0x0060, prAL, gcSk},     //         GRAVE ACCENT
-	{0x0061, 0x007A, prAL, gcLl},     //    [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z
-	{0x007B, 0x007B, prOP, gcPs},     //         LEFT CURLY BRACKET
-	{0x007C, 0x007C, prBA, gcSm},     //         VERTICAL LINE
-	{0x007D, 0x007D, prCL, gcPe},     //         RIGHT CURLY BRACKET
-	{0x007E, 0x007E, prAL, gcSm},     //         TILDE
-	{0x007F, 0x007F, prCM, gcCc},     //         <control-007F>
-	{0x0080, 0x0084, prCM, gcCc},     //     [5] <control-0080>..<control-0084>
-	{0x0085, 0x0085, prNL, gcCc},     //         <control-0085>
-	{0x0086, 0x009F, prCM, gcCc},     //    [26] <control-0086>..<control-009F>
-	{0x00A0, 0x00A0, prGL, gcZs},     //         NO-BREAK SPACE
-	{0x00A1, 0x00A1, prOP, gcPo},     //         INVERTED EXCLAMATION MARK
-	{0x00A2, 0x00A2, prPO, gcSc},     //         CENT SIGN
-	{0x00A3, 0x00A5, prPR, gcSc},     //     [3] POUND SIGN..YEN SIGN
-	{0x00A6, 0x00A6, prAL, gcSo},     //         BROKEN BAR
-	{0x00A7, 0x00A7, prAI, gcPo},     //         SECTION SIGN
-	{0x00A8, 0x00A8, prAI, gcSk},     //         DIAERESIS
-	{0x00A9, 0x00A9, prAL, gcSo},     //         COPYRIGHT SIGN
-	{0x00AA, 0x00AA, prAI, gcLo},     //         FEMININE ORDINAL INDICATOR
-	{0x00AB, 0x00AB, prQU, gcPi},     //         LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-	{0x00AC, 0x00AC, prAL, gcSm},     //         NOT SIGN
-	{0x00AD, 0x00AD, prBA, gcCf},     //         SOFT HYPHEN
-	{0x00AE, 0x00AE, prAL, gcSo},     //         REGISTERED SIGN
-	{0x00AF, 0x00AF, prAL, gcSk},     //         MACRON
-	{0x00B0, 0x00B0, prPO, gcSo},     //         DEGREE SIGN
-	{0x00B1, 0x00B1, prPR, gcSm},     //         PLUS-MINUS SIGN
-	{0x00B2, 0x00B3, prAI, gcNo},     //     [2] SUPERSCRIPT TWO..SUPERSCRIPT THREE
-	{0x00B4, 0x00B4, prBB, gcSk},     //         ACUTE ACCENT
-	{0x00B5, 0x00B5, prAL, gcLl},     //         MICRO SIGN
-	{0x00B6, 0x00B7, prAI, gcPo},     //     [2] PILCROW SIGN..MIDDLE DOT
-	{0x00B8, 0x00B8, prAI, gcSk},     //         CEDILLA
-	{0x00B9, 0x00B9, prAI, gcNo},     //         SUPERSCRIPT ONE
-	{0x00BA, 0x00BA, prAI, gcLo},     //         MASCULINE ORDINAL INDICATOR
-	{0x00BB, 0x00BB, prQU, gcPf},     //         RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-	{0x00BC, 0x00BE, prAI, gcNo},     //     [3] VULGAR FRACTION ONE QUARTER..VULGAR FRACTION THREE QUARTERS
-	{0x00BF, 0x00BF, prOP, gcPo},     //         INVERTED QUESTION MARK
-	{0x00C0, 0x00D6, prAL, gcLu},     //    [23] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER O WITH DIAERESIS
-	{0x00D7, 0x00D7, prAI, gcSm},     //         MULTIPLICATION SIGN
-	{0x00D8, 0x00F6, prAL, gcLC},     //    [31] LATIN CAPITAL LETTER O WITH STROKE..LATIN SMALL LETTER O WITH DIAERESIS
-	{0x00F7, 0x00F7, prAI, gcSm},     //         DIVISION SIGN
-	{0x00F8, 0x00FF, prAL, gcLl},     //     [8] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER Y WITH DIAERESIS
-	{0x0100, 0x017F, prAL, gcLC},     //   [128] LATIN CAPITAL LETTER A WITH MACRON..LATIN SMALL LETTER LONG S
-	{0x0180, 0x01BA, prAL, gcLC},     //    [59] LATIN SMALL LETTER B WITH STROKE..LATIN SMALL LETTER EZH WITH TAIL
-	{0x01BB, 0x01BB, prAL, gcLo},     //         LATIN LETTER TWO WITH STROKE
-	{0x01BC, 0x01BF, prAL, gcLC},     //     [4] LATIN CAPITAL LETTER TONE FIVE..LATIN LETTER WYNN
-	{0x01C0, 0x01C3, prAL, gcLo},     //     [4] LATIN LETTER DENTAL CLICK..LATIN LETTER RETROFLEX CLICK
-	{0x01C4, 0x024F, prAL, gcLC},     //   [140] LATIN CAPITAL LETTER DZ WITH CARON..LATIN SMALL LETTER Y WITH STROKE
-	{0x0250, 0x0293, prAL, gcLl},     //    [68] LATIN SMALL LETTER TURNED A..LATIN SMALL LETTER EZH WITH CURL
-	{0x0294, 0x0294, prAL, gcLo},     //         LATIN LETTER GLOTTAL STOP
-	{0x0295, 0x02AF, prAL, gcLl},     //    [27] LATIN LETTER PHARYNGEAL VOICED FRICATIVE..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL
-	{0x02B0, 0x02C1, prAL, gcLm},     //    [18] MODIFIER LETTER SMALL H..MODIFIER LETTER REVERSED GLOTTAL STOP
-	{0x02C2, 0x02C5, prAL, gcSk},     //     [4] MODIFIER LETTER LEFT ARROWHEAD..MODIFIER LETTER DOWN ARROWHEAD
-	{0x02C6, 0x02C6, prAL, gcLm},     //         MODIFIER LETTER CIRCUMFLEX ACCENT
-	{0x02C7, 0x02C7, prAI, gcLm},     //         CARON
-	{0x02C8, 0x02C8, prBB, gcLm},     //         MODIFIER LETTER VERTICAL LINE
-	{0x02C9, 0x02CB, prAI, gcLm},     //     [3] MODIFIER LETTER MACRON..MODIFIER LETTER GRAVE ACCENT
-	{0x02CC, 0x02CC, prBB, gcLm},     //         MODIFIER LETTER LOW VERTICAL LINE
-	{0x02CD, 0x02CD, prAI, gcLm},     //         MODIFIER LETTER LOW MACRON
-	{0x02CE, 0x02CF, prAL, gcLm},     //     [2] MODIFIER LETTER LOW GRAVE ACCENT..MODIFIER LETTER LOW ACUTE ACCENT
-	{0x02D0, 0x02D0, prAI, gcLm},     //         MODIFIER LETTER TRIANGULAR COLON
-	{0x02D1, 0x02D1, prAL, gcLm},     //         MODIFIER LETTER HALF TRIANGULAR COLON
-	{0x02D2, 0x02D7, prAL, gcSk},     //     [6] MODIFIER LETTER CENTRED RIGHT HALF RING..MODIFIER LETTER MINUS SIGN
-	{0x02D8, 0x02DB, prAI, gcSk},     //     [4] BREVE..OGONEK
-	{0x02DC, 0x02DC, prAL, gcSk},     //         SMALL TILDE
-	{0x02DD, 0x02DD, prAI, gcSk},     //         DOUBLE ACUTE ACCENT
-	{0x02DE, 0x02DE, prAL, gcSk},     //         MODIFIER LETTER RHOTIC HOOK
-	{0x02DF, 0x02DF, prBB, gcSk},     //         MODIFIER LETTER CROSS ACCENT
-	{0x02E0, 0x02E4, prAL, gcLm},     //     [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
-	{0x02E5, 0x02EB, prAL, gcSk},     //     [7] MODIFIER LETTER EXTRA-HIGH TONE BAR..MODIFIER LETTER YANG DEPARTING TONE MARK
-	{0x02EC, 0x02EC, prAL, gcLm},     //         MODIFIER LETTER VOICING
-	{0x02ED, 0x02ED, prAL, gcSk},     //         MODIFIER LETTER UNASPIRATED
-	{0x02EE, 0x02EE, prAL, gcLm},     //         MODIFIER LETTER DOUBLE APOSTROPHE
-	{0x02EF, 0x02FF, prAL, gcSk},     //    [17] MODIFIER LETTER LOW DOWN ARROWHEAD..MODIFIER LETTER LOW LEFT ARROW
-	{0x0300, 0x034E, prCM, gcMn},     //    [79] COMBINING GRAVE ACCENT..COMBINING UPWARDS ARROW BELOW
-	{0x034F, 0x034F, prGL, gcMn},     //         COMBINING GRAPHEME JOINER
-	{0x0350, 0x035B, prCM, gcMn},     //    [12] COMBINING RIGHT ARROWHEAD ABOVE..COMBINING ZIGZAG ABOVE
-	{0x035C, 0x0362, prGL, gcMn},     //     [7] COMBINING DOUBLE BREVE BELOW..COMBINING DOUBLE RIGHTWARDS ARROW BELOW
-	{0x0363, 0x036F, prCM, gcMn},     //    [13] COMBINING LATIN SMALL LETTER A..COMBINING LATIN SMALL LETTER X
-	{0x0370, 0x0373, prAL, gcLC},     //     [4] GREEK CAPITAL LETTER HETA..GREEK SMALL LETTER ARCHAIC SAMPI
-	{0x0374, 0x0374, prAL, gcLm},     //         GREEK NUMERAL SIGN
-	{0x0375, 0x0375, prAL, gcSk},     //         GREEK LOWER NUMERAL SIGN
-	{0x0376, 0x0377, prAL, gcLC},     //     [2] GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA..GREEK SMALL LETTER PAMPHYLIAN DIGAMMA
-	{0x037A, 0x037A, prAL, gcLm},     //         GREEK YPOGEGRAMMENI
-	{0x037B, 0x037D, prAL, gcLl},     //     [3] GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL
-	{0x037E, 0x037E, prIS, gcPo},     //         GREEK QUESTION MARK
-	{0x037F, 0x037F, prAL, gcLu},     //         GREEK CAPITAL LETTER YOT
-	{0x0384, 0x0385, prAL, gcSk},     //     [2] GREEK TONOS..GREEK DIALYTIKA TONOS
-	{0x0386, 0x0386, prAL, gcLu},     //         GREEK CAPITAL LETTER ALPHA WITH TONOS
-	{0x0387, 0x0387, prAL, gcPo},     //         GREEK ANO TELEIA
-	{0x0388, 0x038A, prAL, gcLu},     //     [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS
-	{0x038C, 0x038C, prAL, gcLu},     //         GREEK CAPITAL LETTER OMICRON WITH TONOS
-	{0x038E, 0x03A1, prAL, gcLC},     //    [20] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK CAPITAL LETTER RHO
-	{0x03A3, 0x03F5, prAL, gcLC},     //    [83] GREEK CAPITAL LETTER SIGMA..GREEK LUNATE EPSILON SYMBOL
-	{0x03F6, 0x03F6, prAL, gcSm},     //         GREEK REVERSED LUNATE EPSILON SYMBOL
-	{0x03F7, 0x03FF, prAL, gcLC},     //     [9] GREEK CAPITAL LETTER SHO..GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL
-	{0x0400, 0x0481, prAL, gcLC},     //   [130] CYRILLIC CAPITAL LETTER IE WITH GRAVE..CYRILLIC SMALL LETTER KOPPA
-	{0x0482, 0x0482, prAL, gcSo},     //         CYRILLIC THOUSANDS SIGN
-	{0x0483, 0x0487, prCM, gcMn},     //     [5] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC POKRYTIE
-	{0x0488, 0x0489, prCM, gcMe},     //     [2] COMBINING CYRILLIC HUNDRED THOUSANDS SIGN..COMBINING CYRILLIC MILLIONS SIGN
-	{0x048A, 0x04FF, prAL, gcLC},     //   [118] CYRILLIC CAPITAL LETTER SHORT I WITH TAIL..CYRILLIC SMALL LETTER HA WITH STROKE
-	{0x0500, 0x052F, prAL, gcLC},     //    [48] CYRILLIC CAPITAL LETTER KOMI DE..CYRILLIC SMALL LETTER EL WITH DESCENDER
-	{0x0531, 0x0556, prAL, gcLu},     //    [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH
-	{0x0559, 0x0559, prAL, gcLm},     //         ARMENIAN MODIFIER LETTER LEFT HALF RING
-	{0x055A, 0x055F, prAL, gcPo},     //     [6] ARMENIAN APOSTROPHE..ARMENIAN ABBREVIATION MARK
-	{0x0560, 0x0588, prAL, gcLl},     //    [41] ARMENIAN SMALL LETTER TURNED AYB..ARMENIAN SMALL LETTER YI WITH STROKE
-	{0x0589, 0x0589, prIS, gcPo},     //         ARMENIAN FULL STOP
-	{0x058A, 0x058A, prBA, gcPd},     //         ARMENIAN HYPHEN
-	{0x058D, 0x058E, prAL, gcSo},     //     [2] RIGHT-FACING ARMENIAN ETERNITY SIGN..LEFT-FACING ARMENIAN ETERNITY SIGN
-	{0x058F, 0x058F, prPR, gcSc},     //         ARMENIAN DRAM SIGN
-	{0x0591, 0x05BD, prCM, gcMn},     //    [45] HEBREW ACCENT ETNAHTA..HEBREW POINT METEG
-	{0x05BE, 0x05BE, prBA, gcPd},     //         HEBREW PUNCTUATION MAQAF
-	{0x05BF, 0x05BF, prCM, gcMn},     //         HEBREW POINT RAFE
-	{0x05C0, 0x05C0, prAL, gcPo},     //         HEBREW PUNCTUATION PASEQ
-	{0x05C1, 0x05C2, prCM, gcMn},     //     [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT
-	{0x05C3, 0x05C3, prAL, gcPo},     //         HEBREW PUNCTUATION SOF PASUQ
-	{0x05C4, 0x05C5, prCM, gcMn},     //     [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT
-	{0x05C6, 0x05C6, prEX, gcPo},     //         HEBREW PUNCTUATION NUN HAFUKHA
-	{0x05C7, 0x05C7, prCM, gcMn},     //         HEBREW POINT QAMATS QATAN
-	{0x05D0, 0x05EA, prHL, gcLo},     //    [27] HEBREW LETTER ALEF..HEBREW LETTER TAV
-	{0x05EF, 0x05F2, prHL, gcLo},     //     [4] HEBREW YOD TRIANGLE..HEBREW LIGATURE YIDDISH DOUBLE YOD
-	{0x05F3, 0x05F4, prAL, gcPo},     //     [2] HEBREW PUNCTUATION GERESH..HEBREW PUNCTUATION GERSHAYIM
-	{0x0600, 0x0605, prAL, gcCf},     //     [6] ARABIC NUMBER SIGN..ARABIC NUMBER MARK ABOVE
-	{0x0606, 0x0608, prAL, gcSm},     //     [3] ARABIC-INDIC CUBE ROOT..ARABIC RAY
-	{0x0609, 0x060A, prPO, gcPo},     //     [2] ARABIC-INDIC PER MILLE SIGN..ARABIC-INDIC PER TEN THOUSAND SIGN
-	{0x060B, 0x060B, prPO, gcSc},     //         AFGHANI SIGN
-	{0x060C, 0x060D, prIS, gcPo},     //     [2] ARABIC COMMA..ARABIC DATE SEPARATOR
-	{0x060E, 0x060F, prAL, gcSo},     //     [2] ARABIC POETIC VERSE SIGN..ARABIC SIGN MISRA
-	{0x0610, 0x061A, prCM, gcMn},     //    [11] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL KASRA
-	{0x061B, 0x061B, prEX, gcPo},     //         ARABIC SEMICOLON
-	{0x061C, 0x061C, prCM, gcCf},     //         ARABIC LETTER MARK
-	{0x061D, 0x061F, prEX, gcPo},     //     [3] ARABIC END OF TEXT MARK..ARABIC QUESTION MARK
-	{0x0620, 0x063F, prAL, gcLo},     //    [32] ARABIC LETTER KASHMIRI YEH..ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE
-	{0x0640, 0x0640, prAL, gcLm},     //         ARABIC TATWEEL
-	{0x0641, 0x064A, prAL, gcLo},     //    [10] ARABIC LETTER FEH..ARABIC LETTER YEH
-	{0x064B, 0x065F, prCM, gcMn},     //    [21] ARABIC FATHATAN..ARABIC WAVY HAMZA BELOW
-	{0x0660, 0x0669, prNU, gcNd},     //    [10] ARABIC-INDIC DIGIT ZERO..ARABIC-INDIC DIGIT NINE
-	{0x066A, 0x066A, prPO, gcPo},     //         ARABIC PERCENT SIGN
-	{0x066B, 0x066C, prNU, gcPo},     //     [2] ARABIC DECIMAL SEPARATOR..ARABIC THOUSANDS SEPARATOR
-	{0x066D, 0x066D, prAL, gcPo},     //         ARABIC FIVE POINTED STAR
-	{0x066E, 0x066F, prAL, gcLo},     //     [2] ARABIC LETTER DOTLESS BEH..ARABIC LETTER DOTLESS QAF
-	{0x0670, 0x0670, prCM, gcMn},     //         ARABIC LETTER SUPERSCRIPT ALEF
-	{0x0671, 0x06D3, prAL, gcLo},     //    [99] ARABIC LETTER ALEF WASLA..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE
-	{0x06D4, 0x06D4, prEX, gcPo},     //         ARABIC FULL STOP
-	{0x06D5, 0x06D5, prAL, gcLo},     //         ARABIC LETTER AE
-	{0x06D6, 0x06DC, prCM, gcMn},     //     [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN
-	{0x06DD, 0x06DD, prAL, gcCf},     //         ARABIC END OF AYAH
-	{0x06DE, 0x06DE, prAL, gcSo},     //         ARABIC START OF RUB EL HIZB
-	{0x06DF, 0x06E4, prCM, gcMn},     //     [6] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH MADDA
-	{0x06E5, 0x06E6, prAL, gcLm},     //     [2] ARABIC SMALL WAW..ARABIC SMALL YEH
-	{0x06E7, 0x06E8, prCM, gcMn},     //     [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON
-	{0x06E9, 0x06E9, prAL, gcSo},     //         ARABIC PLACE OF SAJDAH
-	{0x06EA, 0x06ED, prCM, gcMn},     //     [4] ARABIC EMPTY CENTRE LOW STOP..ARABIC SMALL LOW MEEM
-	{0x06EE, 0x06EF, prAL, gcLo},     //     [2] ARABIC LETTER DAL WITH INVERTED V..ARABIC LETTER REH WITH INVERTED V
-	{0x06F0, 0x06F9, prNU, gcNd},     //    [10] EXTENDED ARABIC-INDIC DIGIT ZERO..EXTENDED ARABIC-INDIC DIGIT NINE
-	{0x06FA, 0x06FC, prAL, gcLo},     //     [3] ARABIC LETTER SHEEN WITH DOT BELOW..ARABIC LETTER GHAIN WITH DOT BELOW
-	{0x06FD, 0x06FE, prAL, gcSo},     //     [2] ARABIC SIGN SINDHI AMPERSAND..ARABIC SIGN SINDHI POSTPOSITION MEN
-	{0x06FF, 0x06FF, prAL, gcLo},     //         ARABIC LETTER HEH WITH INVERTED V
-	{0x0700, 0x070D, prAL, gcPo},     //    [14] SYRIAC END OF PARAGRAPH..SYRIAC HARKLEAN ASTERISCUS
-	{0x070F, 0x070F, prAL, gcCf},     //         SYRIAC ABBREVIATION MARK
-	{0x0710, 0x0710, prAL, gcLo},     //         SYRIAC LETTER ALAPH
-	{0x0711, 0x0711, prCM, gcMn},     //         SYRIAC LETTER SUPERSCRIPT ALAPH
-	{0x0712, 0x072F, prAL, gcLo},     //    [30] SYRIAC LETTER BETH..SYRIAC LETTER PERSIAN DHALATH
-	{0x0730, 0x074A, prCM, gcMn},     //    [27] SYRIAC PTHAHA ABOVE..SYRIAC BARREKH
-	{0x074D, 0x074F, prAL, gcLo},     //     [3] SYRIAC LETTER SOGDIAN ZHAIN..SYRIAC LETTER SOGDIAN FE
-	{0x0750, 0x077F, prAL, gcLo},     //    [48] ARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOW..ARABIC LETTER KAF WITH TWO DOTS ABOVE
-	{0x0780, 0x07A5, prAL, gcLo},     //    [38] THAANA LETTER HAA..THAANA LETTER WAAVU
-	{0x07A6, 0x07B0, prCM, gcMn},     //    [11] THAANA ABAFILI..THAANA SUKUN
-	{0x07B1, 0x07B1, prAL, gcLo},     //         THAANA LETTER NAA
-	{0x07C0, 0x07C9, prNU, gcNd},     //    [10] NKO DIGIT ZERO..NKO DIGIT NINE
-	{0x07CA, 0x07EA, prAL, gcLo},     //    [33] NKO LETTER A..NKO LETTER JONA RA
-	{0x07EB, 0x07F3, prCM, gcMn},     //     [9] NKO COMBINING SHORT HIGH TONE..NKO COMBINING DOUBLE DOT ABOVE
-	{0x07F4, 0x07F5, prAL, gcLm},     //     [2] NKO HIGH TONE APOSTROPHE..NKO LOW TONE APOSTROPHE
-	{0x07F6, 0x07F6, prAL, gcSo},     //         NKO SYMBOL OO DENNEN
-	{0x07F7, 0x07F7, prAL, gcPo},     //         NKO SYMBOL GBAKURUNEN
-	{0x07F8, 0x07F8, prIS, gcPo},     //         NKO COMMA
-	{0x07F9, 0x07F9, prEX, gcPo},     //         NKO EXCLAMATION MARK
-	{0x07FA, 0x07FA, prAL, gcLm},     //         NKO LAJANYALAN
-	{0x07FD, 0x07FD, prCM, gcMn},     //         NKO DANTAYALAN
-	{0x07FE, 0x07FF, prPR, gcSc},     //     [2] NKO DOROME SIGN..NKO TAMAN SIGN
-	{0x0800, 0x0815, prAL, gcLo},     //    [22] SAMARITAN LETTER ALAF..SAMARITAN LETTER TAAF
-	{0x0816, 0x0819, prCM, gcMn},     //     [4] SAMARITAN MARK IN..SAMARITAN MARK DAGESH
-	{0x081A, 0x081A, prAL, gcLm},     //         SAMARITAN MODIFIER LETTER EPENTHETIC YUT
-	{0x081B, 0x0823, prCM, gcMn},     //     [9] SAMARITAN MARK EPENTHETIC YUT..SAMARITAN VOWEL SIGN A
-	{0x0824, 0x0824, prAL, gcLm},     //         SAMARITAN MODIFIER LETTER SHORT A
-	{0x0825, 0x0827, prCM, gcMn},     //     [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U
-	{0x0828, 0x0828, prAL, gcLm},     //         SAMARITAN MODIFIER LETTER I
-	{0x0829, 0x082D, prCM, gcMn},     //     [5] SAMARITAN VOWEL SIGN LONG I..SAMARITAN MARK NEQUDAA
-	{0x0830, 0x083E, prAL, gcPo},     //    [15] SAMARITAN PUNCTUATION NEQUDAA..SAMARITAN PUNCTUATION ANNAAU
-	{0x0840, 0x0858, prAL, gcLo},     //    [25] MANDAIC LETTER HALQA..MANDAIC LETTER AIN
-	{0x0859, 0x085B, prCM, gcMn},     //     [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK
-	{0x085E, 0x085E, prAL, gcPo},     //         MANDAIC PUNCTUATION
-	{0x0860, 0x086A, prAL, gcLo},     //    [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA
-	{0x0870, 0x0887, prAL, gcLo},     //    [24] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC BASELINE ROUND DOT
-	{0x0888, 0x0888, prAL, gcSk},     //         ARABIC RAISED ROUND DOT
-	{0x0889, 0x088E, prAL, gcLo},     //     [6] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC VERTICAL TAIL
-	{0x0890, 0x0891, prAL, gcCf},     //     [2] ARABIC POUND MARK ABOVE..ARABIC PIASTRE MARK ABOVE
-	{0x0898, 0x089F, prCM, gcMn},     //     [8] ARABIC SMALL HIGH WORD AL-JUZ..ARABIC HALF MADDA OVER MADDA
-	{0x08A0, 0x08C8, prAL, gcLo},     //    [41] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER GRAF
-	{0x08C9, 0x08C9, prAL, gcLm},     //         ARABIC SMALL FARSI YEH
-	{0x08CA, 0x08E1, prCM, gcMn},     //    [24] ARABIC SMALL HIGH FARSI YEH..ARABIC SMALL HIGH SIGN SAFHA
-	{0x08E2, 0x08E2, prAL, gcCf},     //         ARABIC DISPUTED END OF AYAH
-	{0x08E3, 0x08FF, prCM, gcMn},     //    [29] ARABIC TURNED DAMMA BELOW..ARABIC MARK SIDEWAYS NOON GHUNNA
-	{0x0900, 0x0902, prCM, gcMn},     //     [3] DEVANAGARI SIGN INVERTED CANDRABINDU..DEVANAGARI SIGN ANUSVARA
-	{0x0903, 0x0903, prCM, gcMc},     //         DEVANAGARI SIGN VISARGA
-	{0x0904, 0x0939, prAL, gcLo},     //    [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA
-	{0x093A, 0x093A, prCM, gcMn},     //         DEVANAGARI VOWEL SIGN OE
-	{0x093B, 0x093B, prCM, gcMc},     //         DEVANAGARI VOWEL SIGN OOE
-	{0x093C, 0x093C, prCM, gcMn},     //         DEVANAGARI SIGN NUKTA
-	{0x093D, 0x093D, prAL, gcLo},     //         DEVANAGARI SIGN AVAGRAHA
-	{0x093E, 0x0940, prCM, gcMc},     //     [3] DEVANAGARI VOWEL SIGN AA..DEVANAGARI VOWEL SIGN II
-	{0x0941, 0x0948, prCM, gcMn},     //     [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI
-	{0x0949, 0x094C, prCM, gcMc},     //     [4] DEVANAGARI VOWEL SIGN CANDRA O..DEVANAGARI VOWEL SIGN AU
-	{0x094D, 0x094D, prCM, gcMn},     //         DEVANAGARI SIGN VIRAMA
-	{0x094E, 0x094F, prCM, gcMc},     //     [2] DEVANAGARI VOWEL SIGN PRISHTHAMATRA E..DEVANAGARI VOWEL SIGN AW
-	{0x0950, 0x0950, prAL, gcLo},     //         DEVANAGARI OM
-	{0x0951, 0x0957, prCM, gcMn},     //     [7] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI VOWEL SIGN UUE
-	{0x0958, 0x0961, prAL, gcLo},     //    [10] DEVANAGARI LETTER QA..DEVANAGARI LETTER VOCALIC LL
-	{0x0962, 0x0963, prCM, gcMn},     //     [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL
-	{0x0964, 0x0965, prBA, gcPo},     //     [2] DEVANAGARI DANDA..DEVANAGARI DOUBLE DANDA
-	{0x0966, 0x096F, prNU, gcNd},     //    [10] DEVANAGARI DIGIT ZERO..DEVANAGARI DIGIT NINE
-	{0x0970, 0x0970, prAL, gcPo},     //         DEVANAGARI ABBREVIATION SIGN
-	{0x0971, 0x0971, prAL, gcLm},     //         DEVANAGARI SIGN HIGH SPACING DOT
-	{0x0972, 0x097F, prAL, gcLo},     //    [14] DEVANAGARI LETTER CANDRA A..DEVANAGARI LETTER BBA
-	{0x0980, 0x0980, prAL, gcLo},     //         BENGALI ANJI
-	{0x0981, 0x0981, prCM, gcMn},     //         BENGALI SIGN CANDRABINDU
-	{0x0982, 0x0983, prCM, gcMc},     //     [2] BENGALI SIGN ANUSVARA..BENGALI SIGN VISARGA
-	{0x0985, 0x098C, prAL, gcLo},     //     [8] BENGALI LETTER A..BENGALI LETTER VOCALIC L
-	{0x098F, 0x0990, prAL, gcLo},     //     [2] BENGALI LETTER E..BENGALI LETTER AI
-	{0x0993, 0x09A8, prAL, gcLo},     //    [22] BENGALI LETTER O..BENGALI LETTER NA
-	{0x09AA, 0x09B0, prAL, gcLo},     //     [7] BENGALI LETTER PA..BENGALI LETTER RA
-	{0x09B2, 0x09B2, prAL, gcLo},     //         BENGALI LETTER LA
-	{0x09B6, 0x09B9, prAL, gcLo},     //     [4] BENGALI LETTER SHA..BENGALI LETTER HA
-	{0x09BC, 0x09BC, prCM, gcMn},     //         BENGALI SIGN NUKTA
-	{0x09BD, 0x09BD, prAL, gcLo},     //         BENGALI SIGN AVAGRAHA
-	{0x09BE, 0x09C0, prCM, gcMc},     //     [3] BENGALI VOWEL SIGN AA..BENGALI VOWEL SIGN II
-	{0x09C1, 0x09C4, prCM, gcMn},     //     [4] BENGALI VOWEL SIGN U..BENGALI VOWEL SIGN VOCALIC RR
-	{0x09C7, 0x09C8, prCM, gcMc},     //     [2] BENGALI VOWEL SIGN E..BENGALI VOWEL SIGN AI
-	{0x09CB, 0x09CC, prCM, gcMc},     //     [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU
-	{0x09CD, 0x09CD, prCM, gcMn},     //         BENGALI SIGN VIRAMA
-	{0x09CE, 0x09CE, prAL, gcLo},     //         BENGALI LETTER KHANDA TA
-	{0x09D7, 0x09D7, prCM, gcMc},     //         BENGALI AU LENGTH MARK
-	{0x09DC, 0x09DD, prAL, gcLo},     //     [2] BENGALI LETTER RRA..BENGALI LETTER RHA
-	{0x09DF, 0x09E1, prAL, gcLo},     //     [3] BENGALI LETTER YYA..BENGALI LETTER VOCALIC LL
-	{0x09E2, 0x09E3, prCM, gcMn},     //     [2] BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL
-	{0x09E6, 0x09EF, prNU, gcNd},     //    [10] BENGALI DIGIT ZERO..BENGALI DIGIT NINE
-	{0x09F0, 0x09F1, prAL, gcLo},     //     [2] BENGALI LETTER RA WITH MIDDLE DIAGONAL..BENGALI LETTER RA WITH LOWER DIAGONAL
-	{0x09F2, 0x09F3, prPO, gcSc},     //     [2] BENGALI RUPEE MARK..BENGALI RUPEE SIGN
-	{0x09F4, 0x09F8, prAL, gcNo},     //     [5] BENGALI CURRENCY NUMERATOR ONE..BENGALI CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR
-	{0x09F9, 0x09F9, prPO, gcNo},     //         BENGALI CURRENCY DENOMINATOR SIXTEEN
-	{0x09FA, 0x09FA, prAL, gcSo},     //         BENGALI ISSHAR
-	{0x09FB, 0x09FB, prPR, gcSc},     //         BENGALI GANDA MARK
-	{0x09FC, 0x09FC, prAL, gcLo},     //         BENGALI LETTER VEDIC ANUSVARA
-	{0x09FD, 0x09FD, prAL, gcPo},     //         BENGALI ABBREVIATION SIGN
-	{0x09FE, 0x09FE, prCM, gcMn},     //         BENGALI SANDHI MARK
-	{0x0A01, 0x0A02, prCM, gcMn},     //     [2] GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN BINDI
-	{0x0A03, 0x0A03, prCM, gcMc},     //         GURMUKHI SIGN VISARGA
-	{0x0A05, 0x0A0A, prAL, gcLo},     //     [6] GURMUKHI LETTER A..GURMUKHI LETTER UU
-	{0x0A0F, 0x0A10, prAL, gcLo},     //     [2] GURMUKHI LETTER EE..GURMUKHI LETTER AI
-	{0x0A13, 0x0A28, prAL, gcLo},     //    [22] GURMUKHI LETTER OO..GURMUKHI LETTER NA
-	{0x0A2A, 0x0A30, prAL, gcLo},     //     [7] GURMUKHI LETTER PA..GURMUKHI LETTER RA
-	{0x0A32, 0x0A33, prAL, gcLo},     //     [2] GURMUKHI LETTER LA..GURMUKHI LETTER LLA
-	{0x0A35, 0x0A36, prAL, gcLo},     //     [2] GURMUKHI LETTER VA..GURMUKHI LETTER SHA
-	{0x0A38, 0x0A39, prAL, gcLo},     //     [2] GURMUKHI LETTER SA..GURMUKHI LETTER HA
-	{0x0A3C, 0x0A3C, prCM, gcMn},     //         GURMUKHI SIGN NUKTA
-	{0x0A3E, 0x0A40, prCM, gcMc},     //     [3] GURMUKHI VOWEL SIGN AA..GURMUKHI VOWEL SIGN II
-	{0x0A41, 0x0A42, prCM, gcMn},     //     [2] GURMUKHI VOWEL SIGN U..GURMUKHI VOWEL SIGN UU
-	{0x0A47, 0x0A48, prCM, gcMn},     //     [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI
-	{0x0A4B, 0x0A4D, prCM, gcMn},     //     [3] GURMUKHI VOWEL SIGN OO..GURMUKHI SIGN VIRAMA
-	{0x0A51, 0x0A51, prCM, gcMn},     //         GURMUKHI SIGN UDAAT
-	{0x0A59, 0x0A5C, prAL, gcLo},     //     [4] GURMUKHI LETTER KHHA..GURMUKHI LETTER RRA
-	{0x0A5E, 0x0A5E, prAL, gcLo},     //         GURMUKHI LETTER FA
-	{0x0A66, 0x0A6F, prNU, gcNd},     //    [10] GURMUKHI DIGIT ZERO..GURMUKHI DIGIT NINE
-	{0x0A70, 0x0A71, prCM, gcMn},     //     [2] GURMUKHI TIPPI..GURMUKHI ADDAK
-	{0x0A72, 0x0A74, prAL, gcLo},     //     [3] GURMUKHI IRI..GURMUKHI EK ONKAR
-	{0x0A75, 0x0A75, prCM, gcMn},     //         GURMUKHI SIGN YAKASH
-	{0x0A76, 0x0A76, prAL, gcPo},     //         GURMUKHI ABBREVIATION SIGN
-	{0x0A81, 0x0A82, prCM, gcMn},     //     [2] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN ANUSVARA
-	{0x0A83, 0x0A83, prCM, gcMc},     //         GUJARATI SIGN VISARGA
-	{0x0A85, 0x0A8D, prAL, gcLo},     //     [9] GUJARATI LETTER A..GUJARATI VOWEL CANDRA E
-	{0x0A8F, 0x0A91, prAL, gcLo},     //     [3] GUJARATI LETTER E..GUJARATI VOWEL CANDRA O
-	{0x0A93, 0x0AA8, prAL, gcLo},     //    [22] GUJARATI LETTER O..GUJARATI LETTER NA
-	{0x0AAA, 0x0AB0, prAL, gcLo},     //     [7] GUJARATI LETTER PA..GUJARATI LETTER RA
-	{0x0AB2, 0x0AB3, prAL, gcLo},     //     [2] GUJARATI LETTER LA..GUJARATI LETTER LLA
-	{0x0AB5, 0x0AB9, prAL, gcLo},     //     [5] GUJARATI LETTER VA..GUJARATI LETTER HA
-	{0x0ABC, 0x0ABC, prCM, gcMn},     //         GUJARATI SIGN NUKTA
-	{0x0ABD, 0x0ABD, prAL, gcLo},     //         GUJARATI SIGN AVAGRAHA
-	{0x0ABE, 0x0AC0, prCM, gcMc},     //     [3] GUJARATI VOWEL SIGN AA..GUJARATI VOWEL SIGN II
-	{0x0AC1, 0x0AC5, prCM, gcMn},     //     [5] GUJARATI VOWEL SIGN U..GUJARATI VOWEL SIGN CANDRA E
-	{0x0AC7, 0x0AC8, prCM, gcMn},     //     [2] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN AI
-	{0x0AC9, 0x0AC9, prCM, gcMc},     //         GUJARATI VOWEL SIGN CANDRA O
-	{0x0ACB, 0x0ACC, prCM, gcMc},     //     [2] GUJARATI VOWEL SIGN O..GUJARATI VOWEL SIGN AU
-	{0x0ACD, 0x0ACD, prCM, gcMn},     //         GUJARATI SIGN VIRAMA
-	{0x0AD0, 0x0AD0, prAL, gcLo},     //         GUJARATI OM
-	{0x0AE0, 0x0AE1, prAL, gcLo},     //     [2] GUJARATI LETTER VOCALIC RR..GUJARATI LETTER VOCALIC LL
-	{0x0AE2, 0x0AE3, prCM, gcMn},     //     [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL
-	{0x0AE6, 0x0AEF, prNU, gcNd},     //    [10] GUJARATI DIGIT ZERO..GUJARATI DIGIT NINE
-	{0x0AF0, 0x0AF0, prAL, gcPo},     //         GUJARATI ABBREVIATION SIGN
-	{0x0AF1, 0x0AF1, prPR, gcSc},     //         GUJARATI RUPEE SIGN
-	{0x0AF9, 0x0AF9, prAL, gcLo},     //         GUJARATI LETTER ZHA
-	{0x0AFA, 0x0AFF, prCM, gcMn},     //     [6] GUJARATI SIGN SUKUN..GUJARATI SIGN TWO-CIRCLE NUKTA ABOVE
-	{0x0B01, 0x0B01, prCM, gcMn},     //         ORIYA SIGN CANDRABINDU
-	{0x0B02, 0x0B03, prCM, gcMc},     //     [2] ORIYA SIGN ANUSVARA..ORIYA SIGN VISARGA
-	{0x0B05, 0x0B0C, prAL, gcLo},     //     [8] ORIYA LETTER A..ORIYA LETTER VOCALIC L
-	{0x0B0F, 0x0B10, prAL, gcLo},     //     [2] ORIYA LETTER E..ORIYA LETTER AI
-	{0x0B13, 0x0B28, prAL, gcLo},     //    [22] ORIYA LETTER O..ORIYA LETTER NA
-	{0x0B2A, 0x0B30, prAL, gcLo},     //     [7] ORIYA LETTER PA..ORIYA LETTER RA
-	{0x0B32, 0x0B33, prAL, gcLo},     //     [2] ORIYA LETTER LA..ORIYA LETTER LLA
-	{0x0B35, 0x0B39, prAL, gcLo},     //     [5] ORIYA LETTER VA..ORIYA LETTER HA
-	{0x0B3C, 0x0B3C, prCM, gcMn},     //         ORIYA SIGN NUKTA
-	{0x0B3D, 0x0B3D, prAL, gcLo},     //         ORIYA SIGN AVAGRAHA
-	{0x0B3E, 0x0B3E, prCM, gcMc},     //         ORIYA VOWEL SIGN AA
-	{0x0B3F, 0x0B3F, prCM, gcMn},     //         ORIYA VOWEL SIGN I
-	{0x0B40, 0x0B40, prCM, gcMc},     //         ORIYA VOWEL SIGN II
-	{0x0B41, 0x0B44, prCM, gcMn},     //     [4] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC RR
-	{0x0B47, 0x0B48, prCM, gcMc},     //     [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI
-	{0x0B4B, 0x0B4C, prCM, gcMc},     //     [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU
-	{0x0B4D, 0x0B4D, prCM, gcMn},     //         ORIYA SIGN VIRAMA
-	{0x0B55, 0x0B56, prCM, gcMn},     //     [2] ORIYA SIGN OVERLINE..ORIYA AI LENGTH MARK
-	{0x0B57, 0x0B57, prCM, gcMc},     //         ORIYA AU LENGTH MARK
-	{0x0B5C, 0x0B5D, prAL, gcLo},     //     [2] ORIYA LETTER RRA..ORIYA LETTER RHA
-	{0x0B5F, 0x0B61, prAL, gcLo},     //     [3] ORIYA LETTER YYA..ORIYA LETTER VOCALIC LL
-	{0x0B62, 0x0B63, prCM, gcMn},     //     [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL
-	{0x0B66, 0x0B6F, prNU, gcNd},     //    [10] ORIYA DIGIT ZERO..ORIYA DIGIT NINE
-	{0x0B70, 0x0B70, prAL, gcSo},     //         ORIYA ISSHAR
-	{0x0B71, 0x0B71, prAL, gcLo},     //         ORIYA LETTER WA
-	{0x0B72, 0x0B77, prAL, gcNo},     //     [6] ORIYA FRACTION ONE QUARTER..ORIYA FRACTION THREE SIXTEENTHS
-	{0x0B82, 0x0B82, prCM, gcMn},     //         TAMIL SIGN ANUSVARA
-	{0x0B83, 0x0B83, prAL, gcLo},     //         TAMIL SIGN VISARGA
-	{0x0B85, 0x0B8A, prAL, gcLo},     //     [6] TAMIL LETTER A..TAMIL LETTER UU
-	{0x0B8E, 0x0B90, prAL, gcLo},     //     [3] TAMIL LETTER E..TAMIL LETTER AI
-	{0x0B92, 0x0B95, prAL, gcLo},     //     [4] TAMIL LETTER O..TAMIL LETTER KA
-	{0x0B99, 0x0B9A, prAL, gcLo},     //     [2] TAMIL LETTER NGA..TAMIL LETTER CA
-	{0x0B9C, 0x0B9C, prAL, gcLo},     //         TAMIL LETTER JA
-	{0x0B9E, 0x0B9F, prAL, gcLo},     //     [2] TAMIL LETTER NYA..TAMIL LETTER TTA
-	{0x0BA3, 0x0BA4, prAL, gcLo},     //     [2] TAMIL LETTER NNA..TAMIL LETTER TA
-	{0x0BA8, 0x0BAA, prAL, gcLo},     //     [3] TAMIL LETTER NA..TAMIL LETTER PA
-	{0x0BAE, 0x0BB9, prAL, gcLo},     //    [12] TAMIL LETTER MA..TAMIL LETTER HA
-	{0x0BBE, 0x0BBF, prCM, gcMc},     //     [2] TAMIL VOWEL SIGN AA..TAMIL VOWEL SIGN I
-	{0x0BC0, 0x0BC0, prCM, gcMn},     //         TAMIL VOWEL SIGN II
-	{0x0BC1, 0x0BC2, prCM, gcMc},     //     [2] TAMIL VOWEL SIGN U..TAMIL VOWEL SIGN UU
-	{0x0BC6, 0x0BC8, prCM, gcMc},     //     [3] TAMIL VOWEL SIGN E..TAMIL VOWEL SIGN AI
-	{0x0BCA, 0x0BCC, prCM, gcMc},     //     [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU
-	{0x0BCD, 0x0BCD, prCM, gcMn},     //         TAMIL SIGN VIRAMA
-	{0x0BD0, 0x0BD0, prAL, gcLo},     //         TAMIL OM
-	{0x0BD7, 0x0BD7, prCM, gcMc},     //         TAMIL AU LENGTH MARK
-	{0x0BE6, 0x0BEF, prNU, gcNd},     //    [10] TAMIL DIGIT ZERO..TAMIL DIGIT NINE
-	{0x0BF0, 0x0BF2, prAL, gcNo},     //     [3] TAMIL NUMBER TEN..TAMIL NUMBER ONE THOUSAND
-	{0x0BF3, 0x0BF8, prAL, gcSo},     //     [6] TAMIL DAY SIGN..TAMIL AS ABOVE SIGN
-	{0x0BF9, 0x0BF9, prPR, gcSc},     //         TAMIL RUPEE SIGN
-	{0x0BFA, 0x0BFA, prAL, gcSo},     //         TAMIL NUMBER SIGN
-	{0x0C00, 0x0C00, prCM, gcMn},     //         TELUGU SIGN COMBINING CANDRABINDU ABOVE
-	{0x0C01, 0x0C03, prCM, gcMc},     //     [3] TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA
-	{0x0C04, 0x0C04, prCM, gcMn},     //         TELUGU SIGN COMBINING ANUSVARA ABOVE
-	{0x0C05, 0x0C0C, prAL, gcLo},     //     [8] TELUGU LETTER A..TELUGU LETTER VOCALIC L
-	{0x0C0E, 0x0C10, prAL, gcLo},     //     [3] TELUGU LETTER E..TELUGU LETTER AI
-	{0x0C12, 0x0C28, prAL, gcLo},     //    [23] TELUGU LETTER O..TELUGU LETTER NA
-	{0x0C2A, 0x0C39, prAL, gcLo},     //    [16] TELUGU LETTER PA..TELUGU LETTER HA
-	{0x0C3C, 0x0C3C, prCM, gcMn},     //         TELUGU SIGN NUKTA
-	{0x0C3D, 0x0C3D, prAL, gcLo},     //         TELUGU SIGN AVAGRAHA
-	{0x0C3E, 0x0C40, prCM, gcMn},     //     [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II
-	{0x0C41, 0x0C44, prCM, gcMc},     //     [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR
-	{0x0C46, 0x0C48, prCM, gcMn},     //     [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI
-	{0x0C4A, 0x0C4D, prCM, gcMn},     //     [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA
-	{0x0C55, 0x0C56, prCM, gcMn},     //     [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK
-	{0x0C58, 0x0C5A, prAL, gcLo},     //     [3] TELUGU LETTER TSA..TELUGU LETTER RRRA
-	{0x0C5D, 0x0C5D, prAL, gcLo},     //         TELUGU LETTER NAKAARA POLLU
-	{0x0C60, 0x0C61, prAL, gcLo},     //     [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL
-	{0x0C62, 0x0C63, prCM, gcMn},     //     [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL
-	{0x0C66, 0x0C6F, prNU, gcNd},     //    [10] TELUGU DIGIT ZERO..TELUGU DIGIT NINE
-	{0x0C77, 0x0C77, prBB, gcPo},     //         TELUGU SIGN SIDDHAM
-	{0x0C78, 0x0C7E, prAL, gcNo},     //     [7] TELUGU FRACTION DIGIT ZERO FOR ODD POWERS OF FOUR..TELUGU FRACTION DIGIT THREE FOR EVEN POWERS OF FOUR
-	{0x0C7F, 0x0C7F, prAL, gcSo},     //         TELUGU SIGN TUUMU
-	{0x0C80, 0x0C80, prAL, gcLo},     //         KANNADA SIGN SPACING CANDRABINDU
-	{0x0C81, 0x0C81, prCM, gcMn},     //         KANNADA SIGN CANDRABINDU
-	{0x0C82, 0x0C83, prCM, gcMc},     //     [2] KANNADA SIGN ANUSVARA..KANNADA SIGN VISARGA
-	{0x0C84, 0x0C84, prBB, gcPo},     //         KANNADA SIGN SIDDHAM
-	{0x0C85, 0x0C8C, prAL, gcLo},     //     [8] KANNADA LETTER A..KANNADA LETTER VOCALIC L
-	{0x0C8E, 0x0C90, prAL, gcLo},     //     [3] KANNADA LETTER E..KANNADA LETTER AI
-	{0x0C92, 0x0CA8, prAL, gcLo},     //    [23] KANNADA LETTER O..KANNADA LETTER NA
-	{0x0CAA, 0x0CB3, prAL, gcLo},     //    [10] KANNADA LETTER PA..KANNADA LETTER LLA
-	{0x0CB5, 0x0CB9, prAL, gcLo},     //     [5] KANNADA LETTER VA..KANNADA LETTER HA
-	{0x0CBC, 0x0CBC, prCM, gcMn},     //         KANNADA SIGN NUKTA
-	{0x0CBD, 0x0CBD, prAL, gcLo},     //         KANNADA SIGN AVAGRAHA
-	{0x0CBE, 0x0CBE, prCM, gcMc},     //         KANNADA VOWEL SIGN AA
-	{0x0CBF, 0x0CBF, prCM, gcMn},     //         KANNADA VOWEL SIGN I
-	{0x0CC0, 0x0CC4, prCM, gcMc},     //     [5] KANNADA VOWEL SIGN II..KANNADA VOWEL SIGN VOCALIC RR
-	{0x0CC6, 0x0CC6, prCM, gcMn},     //         KANNADA VOWEL SIGN E
-	{0x0CC7, 0x0CC8, prCM, gcMc},     //     [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI
-	{0x0CCA, 0x0CCB, prCM, gcMc},     //     [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO
-	{0x0CCC, 0x0CCD, prCM, gcMn},     //     [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA
-	{0x0CD5, 0x0CD6, prCM, gcMc},     //     [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK
-	{0x0CDD, 0x0CDE, prAL, gcLo},     //     [2] KANNADA LETTER NAKAARA POLLU..KANNADA LETTER FA
-	{0x0CE0, 0x0CE1, prAL, gcLo},     //     [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL
-	{0x0CE2, 0x0CE3, prCM, gcMn},     //     [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL
-	{0x0CE6, 0x0CEF, prNU, gcNd},     //    [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE
-	{0x0CF1, 0x0CF2, prAL, gcLo},     //     [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA
-	{0x0CF3, 0x0CF3, prCM, gcMc},     //         KANNADA SIGN COMBINING ANUSVARA ABOVE RIGHT
-	{0x0D00, 0x0D01, prCM, gcMn},     //     [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU
-	{0x0D02, 0x0D03, prCM, gcMc},     //     [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA
-	{0x0D04, 0x0D0C, prAL, gcLo},     //     [9] MALAYALAM LETTER VEDIC ANUSVARA..MALAYALAM LETTER VOCALIC L
-	{0x0D0E, 0x0D10, prAL, gcLo},     //     [3] MALAYALAM LETTER E..MALAYALAM LETTER AI
-	{0x0D12, 0x0D3A, prAL, gcLo},     //    [41] MALAYALAM LETTER O..MALAYALAM LETTER TTTA
-	{0x0D3B, 0x0D3C, prCM, gcMn},     //     [2] MALAYALAM SIGN VERTICAL BAR VIRAMA..MALAYALAM SIGN CIRCULAR VIRAMA
-	{0x0D3D, 0x0D3D, prAL, gcLo},     //         MALAYALAM SIGN AVAGRAHA
-	{0x0D3E, 0x0D40, prCM, gcMc},     //     [3] MALAYALAM VOWEL SIGN AA..MALAYALAM VOWEL SIGN II
-	{0x0D41, 0x0D44, prCM, gcMn},     //     [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR
-	{0x0D46, 0x0D48, prCM, gcMc},     //     [3] MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI
-	{0x0D4A, 0x0D4C, prCM, gcMc},     //     [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU
-	{0x0D4D, 0x0D4D, prCM, gcMn},     //         MALAYALAM SIGN VIRAMA
-	{0x0D4E, 0x0D4E, prAL, gcLo},     //         MALAYALAM LETTER DOT REPH
-	{0x0D4F, 0x0D4F, prAL, gcSo},     //         MALAYALAM SIGN PARA
-	{0x0D54, 0x0D56, prAL, gcLo},     //     [3] MALAYALAM LETTER CHILLU M..MALAYALAM LETTER CHILLU LLL
-	{0x0D57, 0x0D57, prCM, gcMc},     //         MALAYALAM AU LENGTH MARK
-	{0x0D58, 0x0D5E, prAL, gcNo},     //     [7] MALAYALAM FRACTION ONE ONE-HUNDRED-AND-SIXTIETH..MALAYALAM FRACTION ONE FIFTH
-	{0x0D5F, 0x0D61, prAL, gcLo},     //     [3] MALAYALAM LETTER ARCHAIC II..MALAYALAM LETTER VOCALIC LL
-	{0x0D62, 0x0D63, prCM, gcMn},     //     [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL
-	{0x0D66, 0x0D6F, prNU, gcNd},     //    [10] MALAYALAM DIGIT ZERO..MALAYALAM DIGIT NINE
-	{0x0D70, 0x0D78, prAL, gcNo},     //     [9] MALAYALAM NUMBER TEN..MALAYALAM FRACTION THREE SIXTEENTHS
-	{0x0D79, 0x0D79, prPO, gcSo},     //         MALAYALAM DATE MARK
-	{0x0D7A, 0x0D7F, prAL, gcLo},     //     [6] MALAYALAM LETTER CHILLU NN..MALAYALAM LETTER CHILLU K
-	{0x0D81, 0x0D81, prCM, gcMn},     //         SINHALA SIGN CANDRABINDU
-	{0x0D82, 0x0D83, prCM, gcMc},     //     [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA
-	{0x0D85, 0x0D96, prAL, gcLo},     //    [18] SINHALA LETTER AYANNA..SINHALA LETTER AUYANNA
-	{0x0D9A, 0x0DB1, prAL, gcLo},     //    [24] SINHALA LETTER ALPAPRAANA KAYANNA..SINHALA LETTER DANTAJA NAYANNA
-	{0x0DB3, 0x0DBB, prAL, gcLo},     //     [9] SINHALA LETTER SANYAKA DAYANNA..SINHALA LETTER RAYANNA
-	{0x0DBD, 0x0DBD, prAL, gcLo},     //         SINHALA LETTER DANTAJA LAYANNA
-	{0x0DC0, 0x0DC6, prAL, gcLo},     //     [7] SINHALA LETTER VAYANNA..SINHALA LETTER FAYANNA
-	{0x0DCA, 0x0DCA, prCM, gcMn},     //         SINHALA SIGN AL-LAKUNA
-	{0x0DCF, 0x0DD1, prCM, gcMc},     //     [3] SINHALA VOWEL SIGN AELA-PILLA..SINHALA VOWEL SIGN DIGA AEDA-PILLA
-	{0x0DD2, 0x0DD4, prCM, gcMn},     //     [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA
-	{0x0DD6, 0x0DD6, prCM, gcMn},     //         SINHALA VOWEL SIGN DIGA PAA-PILLA
-	{0x0DD8, 0x0DDF, prCM, gcMc},     //     [8] SINHALA VOWEL SIGN GAETTA-PILLA..SINHALA VOWEL SIGN GAYANUKITTA
-	{0x0DE6, 0x0DEF, prNU, gcNd},     //    [10] SINHALA LITH DIGIT ZERO..SINHALA LITH DIGIT NINE
-	{0x0DF2, 0x0DF3, prCM, gcMc},     //     [2] SINHALA VOWEL SIGN DIGA GAETTA-PILLA..SINHALA VOWEL SIGN DIGA GAYANUKITTA
-	{0x0DF4, 0x0DF4, prAL, gcPo},     //         SINHALA PUNCTUATION KUNDDALIYA
-	{0x0E01, 0x0E30, prSA, gcLo},     //    [48] THAI CHARACTER KO KAI..THAI CHARACTER SARA A
-	{0x0E31, 0x0E31, prSA, gcMn},     //         THAI CHARACTER MAI HAN-AKAT
-	{0x0E32, 0x0E33, prSA, gcLo},     //     [2] THAI CHARACTER SARA AA..THAI CHARACTER SARA AM
-	{0x0E34, 0x0E3A, prSA, gcMn},     //     [7] THAI CHARACTER SARA I..THAI CHARACTER PHINTHU
-	{0x0E3F, 0x0E3F, prPR, gcSc},     //         THAI CURRENCY SYMBOL BAHT
-	{0x0E40, 0x0E45, prSA, gcLo},     //     [6] THAI CHARACTER SARA E..THAI CHARACTER LAKKHANGYAO
-	{0x0E46, 0x0E46, prSA, gcLm},     //         THAI CHARACTER MAIYAMOK
-	{0x0E47, 0x0E4E, prSA, gcMn},     //     [8] THAI CHARACTER MAITAIKHU..THAI CHARACTER YAMAKKAN
-	{0x0E4F, 0x0E4F, prAL, gcPo},     //         THAI CHARACTER FONGMAN
-	{0x0E50, 0x0E59, prNU, gcNd},     //    [10] THAI DIGIT ZERO..THAI DIGIT NINE
-	{0x0E5A, 0x0E5B, prBA, gcPo},     //     [2] THAI CHARACTER ANGKHANKHU..THAI CHARACTER KHOMUT
-	{0x0E81, 0x0E82, prSA, gcLo},     //     [2] LAO LETTER KO..LAO LETTER KHO SUNG
-	{0x0E84, 0x0E84, prSA, gcLo},     //         LAO LETTER KHO TAM
-	{0x0E86, 0x0E8A, prSA, gcLo},     //     [5] LAO LETTER PALI GHA..LAO LETTER SO TAM
-	{0x0E8C, 0x0EA3, prSA, gcLo},     //    [24] LAO LETTER PALI JHA..LAO LETTER LO LING
-	{0x0EA5, 0x0EA5, prSA, gcLo},     //         LAO LETTER LO LOOT
-	{0x0EA7, 0x0EB0, prSA, gcLo},     //    [10] LAO LETTER WO..LAO VOWEL SIGN A
-	{0x0EB1, 0x0EB1, prSA, gcMn},     //         LAO VOWEL SIGN MAI KAN
-	{0x0EB2, 0x0EB3, prSA, gcLo},     //     [2] LAO VOWEL SIGN AA..LAO VOWEL SIGN AM
-	{0x0EB4, 0x0EBC, prSA, gcMn},     //     [9] LAO VOWEL SIGN I..LAO SEMIVOWEL SIGN LO
-	{0x0EBD, 0x0EBD, prSA, gcLo},     //         LAO SEMIVOWEL SIGN NYO
-	{0x0EC0, 0x0EC4, prSA, gcLo},     //     [5] LAO VOWEL SIGN E..LAO VOWEL SIGN AI
-	{0x0EC6, 0x0EC6, prSA, gcLm},     //         LAO KO LA
-	{0x0EC8, 0x0ECE, prSA, gcMn},     //     [7] LAO TONE MAI EK..LAO YAMAKKAN
-	{0x0ED0, 0x0ED9, prNU, gcNd},     //    [10] LAO DIGIT ZERO..LAO DIGIT NINE
-	{0x0EDC, 0x0EDF, prSA, gcLo},     //     [4] LAO HO NO..LAO LETTER KHMU NYO
-	{0x0F00, 0x0F00, prAL, gcLo},     //         TIBETAN SYLLABLE OM
-	{0x0F01, 0x0F03, prBB, gcSo},     //     [3] TIBETAN MARK GTER YIG MGO TRUNCATED A..TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA
-	{0x0F04, 0x0F04, prBB, gcPo},     //         TIBETAN MARK INITIAL YIG MGO MDUN MA
-	{0x0F05, 0x0F05, prAL, gcPo},     //         TIBETAN MARK CLOSING YIG MGO SGAB MA
-	{0x0F06, 0x0F07, prBB, gcPo},     //     [2] TIBETAN MARK CARET YIG MGO PHUR SHAD MA..TIBETAN MARK YIG MGO TSHEG SHAD MA
-	{0x0F08, 0x0F08, prGL, gcPo},     //         TIBETAN MARK SBRUL SHAD
-	{0x0F09, 0x0F0A, prBB, gcPo},     //     [2] TIBETAN MARK BSKUR YIG MGO..TIBETAN MARK BKA- SHOG YIG MGO
-	{0x0F0B, 0x0F0B, prBA, gcPo},     //         TIBETAN MARK INTERSYLLABIC TSHEG
-	{0x0F0C, 0x0F0C, prGL, gcPo},     //         TIBETAN MARK DELIMITER TSHEG BSTAR
-	{0x0F0D, 0x0F11, prEX, gcPo},     //     [5] TIBETAN MARK SHAD..TIBETAN MARK RIN CHEN SPUNGS SHAD
-	{0x0F12, 0x0F12, prGL, gcPo},     //         TIBETAN MARK RGYA GRAM SHAD
-	{0x0F13, 0x0F13, prAL, gcSo},     //         TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN
-	{0x0F14, 0x0F14, prEX, gcPo},     //         TIBETAN MARK GTER TSHEG
-	{0x0F15, 0x0F17, prAL, gcSo},     //     [3] TIBETAN LOGOTYPE SIGN CHAD RTAGS..TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS
-	{0x0F18, 0x0F19, prCM, gcMn},     //     [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS
-	{0x0F1A, 0x0F1F, prAL, gcSo},     //     [6] TIBETAN SIGN RDEL DKAR GCIG..TIBETAN SIGN RDEL DKAR RDEL NAG
-	{0x0F20, 0x0F29, prNU, gcNd},     //    [10] TIBETAN DIGIT ZERO..TIBETAN DIGIT NINE
-	{0x0F2A, 0x0F33, prAL, gcNo},     //    [10] TIBETAN DIGIT HALF ONE..TIBETAN DIGIT HALF ZERO
-	{0x0F34, 0x0F34, prBA, gcSo},     //         TIBETAN MARK BSDUS RTAGS
-	{0x0F35, 0x0F35, prCM, gcMn},     //         TIBETAN MARK NGAS BZUNG NYI ZLA
-	{0x0F36, 0x0F36, prAL, gcSo},     //         TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN
-	{0x0F37, 0x0F37, prCM, gcMn},     //         TIBETAN MARK NGAS BZUNG SGOR RTAGS
-	{0x0F38, 0x0F38, prAL, gcSo},     //         TIBETAN MARK CHE MGO
-	{0x0F39, 0x0F39, prCM, gcMn},     //         TIBETAN MARK TSA -PHRU
-	{0x0F3A, 0x0F3A, prOP, gcPs},     //         TIBETAN MARK GUG RTAGS GYON
-	{0x0F3B, 0x0F3B, prCL, gcPe},     //         TIBETAN MARK GUG RTAGS GYAS
-	{0x0F3C, 0x0F3C, prOP, gcPs},     //         TIBETAN MARK ANG KHANG GYON
-	{0x0F3D, 0x0F3D, prCL, gcPe},     //         TIBETAN MARK ANG KHANG GYAS
-	{0x0F3E, 0x0F3F, prCM, gcMc},     //     [2] TIBETAN SIGN YAR TSHES..TIBETAN SIGN MAR TSHES
-	{0x0F40, 0x0F47, prAL, gcLo},     //     [8] TIBETAN LETTER KA..TIBETAN LETTER JA
-	{0x0F49, 0x0F6C, prAL, gcLo},     //    [36] TIBETAN LETTER NYA..TIBETAN LETTER RRA
-	{0x0F71, 0x0F7E, prCM, gcMn},     //    [14] TIBETAN VOWEL SIGN AA..TIBETAN SIGN RJES SU NGA RO
-	{0x0F7F, 0x0F7F, prBA, gcMc},     //         TIBETAN SIGN RNAM BCAD
-	{0x0F80, 0x0F84, prCM, gcMn},     //     [5] TIBETAN VOWEL SIGN REVERSED I..TIBETAN MARK HALANTA
-	{0x0F85, 0x0F85, prBA, gcPo},     //         TIBETAN MARK PALUTA
-	{0x0F86, 0x0F87, prCM, gcMn},     //     [2] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS
-	{0x0F88, 0x0F8C, prAL, gcLo},     //     [5] TIBETAN SIGN LCE TSA CAN..TIBETAN SIGN INVERTED MCHU CAN
-	{0x0F8D, 0x0F97, prCM, gcMn},     //    [11] TIBETAN SUBJOINED SIGN LCE TSA CAN..TIBETAN SUBJOINED LETTER JA
-	{0x0F99, 0x0FBC, prCM, gcMn},     //    [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA
-	{0x0FBE, 0x0FBF, prBA, gcSo},     //     [2] TIBETAN KU RU KHA..TIBETAN KU RU KHA BZHI MIG CAN
-	{0x0FC0, 0x0FC5, prAL, gcSo},     //     [6] TIBETAN CANTILLATION SIGN HEAVY BEAT..TIBETAN SYMBOL RDO RJE
-	{0x0FC6, 0x0FC6, prCM, gcMn},     //         TIBETAN SYMBOL PADMA GDAN
-	{0x0FC7, 0x0FCC, prAL, gcSo},     //     [6] TIBETAN SYMBOL RDO RJE RGYA GRAM..TIBETAN SYMBOL NOR BU BZHI -KHYIL
-	{0x0FCE, 0x0FCF, prAL, gcSo},     //     [2] TIBETAN SIGN RDEL NAG RDEL DKAR..TIBETAN SIGN RDEL NAG GSUM
-	{0x0FD0, 0x0FD1, prBB, gcPo},     //     [2] TIBETAN MARK BSKA- SHOG GI MGO RGYAN..TIBETAN MARK MNYAM YIG GI MGO RGYAN
-	{0x0FD2, 0x0FD2, prBA, gcPo},     //         TIBETAN MARK NYIS TSHEG
-	{0x0FD3, 0x0FD3, prBB, gcPo},     //         TIBETAN MARK INITIAL BRDA RNYING YIG MGO MDUN MA
-	{0x0FD4, 0x0FD4, prAL, gcPo},     //         TIBETAN MARK CLOSING BRDA RNYING YIG MGO SGAB MA
-	{0x0FD5, 0x0FD8, prAL, gcSo},     //     [4] RIGHT-FACING SVASTI SIGN..LEFT-FACING SVASTI SIGN WITH DOTS
-	{0x0FD9, 0x0FDA, prGL, gcPo},     //     [2] TIBETAN MARK LEADING MCHAN RTAGS..TIBETAN MARK TRAILING MCHAN RTAGS
-	{0x1000, 0x102A, prSA, gcLo},     //    [43] MYANMAR LETTER KA..MYANMAR LETTER AU
-	{0x102B, 0x102C, prSA, gcMc},     //     [2] MYANMAR VOWEL SIGN TALL AA..MYANMAR VOWEL SIGN AA
-	{0x102D, 0x1030, prSA, gcMn},     //     [4] MYANMAR VOWEL SIGN I..MYANMAR VOWEL SIGN UU
-	{0x1031, 0x1031, prSA, gcMc},     //         MYANMAR VOWEL SIGN E
-	{0x1032, 0x1037, prSA, gcMn},     //     [6] MYANMAR VOWEL SIGN AI..MYANMAR SIGN DOT BELOW
-	{0x1038, 0x1038, prSA, gcMc},     //         MYANMAR SIGN VISARGA
-	{0x1039, 0x103A, prSA, gcMn},     //     [2] MYANMAR SIGN VIRAMA..MYANMAR SIGN ASAT
-	{0x103B, 0x103C, prSA, gcMc},     //     [2] MYANMAR CONSONANT SIGN MEDIAL YA..MYANMAR CONSONANT SIGN MEDIAL RA
-	{0x103D, 0x103E, prSA, gcMn},     //     [2] MYANMAR CONSONANT SIGN MEDIAL WA..MYANMAR CONSONANT SIGN MEDIAL HA
-	{0x103F, 0x103F, prSA, gcLo},     //         MYANMAR LETTER GREAT SA
-	{0x1040, 0x1049, prNU, gcNd},     //    [10] MYANMAR DIGIT ZERO..MYANMAR DIGIT NINE
-	{0x104A, 0x104B, prBA, gcPo},     //     [2] MYANMAR SIGN LITTLE SECTION..MYANMAR SIGN SECTION
-	{0x104C, 0x104F, prAL, gcPo},     //     [4] MYANMAR SYMBOL LOCATIVE..MYANMAR SYMBOL GENITIVE
-	{0x1050, 0x1055, prSA, gcLo},     //     [6] MYANMAR LETTER SHA..MYANMAR LETTER VOCALIC LL
-	{0x1056, 0x1057, prSA, gcMc},     //     [2] MYANMAR VOWEL SIGN VOCALIC R..MYANMAR VOWEL SIGN VOCALIC RR
-	{0x1058, 0x1059, prSA, gcMn},     //     [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL
-	{0x105A, 0x105D, prSA, gcLo},     //     [4] MYANMAR LETTER MON NGA..MYANMAR LETTER MON BBE
-	{0x105E, 0x1060, prSA, gcMn},     //     [3] MYANMAR CONSONANT SIGN MON MEDIAL NA..MYANMAR CONSONANT SIGN MON MEDIAL LA
-	{0x1061, 0x1061, prSA, gcLo},     //         MYANMAR LETTER SGAW KAREN SHA
-	{0x1062, 0x1064, prSA, gcMc},     //     [3] MYANMAR VOWEL SIGN SGAW KAREN EU..MYANMAR TONE MARK SGAW KAREN KE PHO
-	{0x1065, 0x1066, prSA, gcLo},     //     [2] MYANMAR LETTER WESTERN PWO KAREN THA..MYANMAR LETTER WESTERN PWO KAREN PWA
-	{0x1067, 0x106D, prSA, gcMc},     //     [7] MYANMAR VOWEL SIGN WESTERN PWO KAREN EU..MYANMAR SIGN WESTERN PWO KAREN TONE-5
-	{0x106E, 0x1070, prSA, gcLo},     //     [3] MYANMAR LETTER EASTERN PWO KAREN NNA..MYANMAR LETTER EASTERN PWO KAREN GHWA
-	{0x1071, 0x1074, prSA, gcMn},     //     [4] MYANMAR VOWEL SIGN GEBA KAREN I..MYANMAR VOWEL SIGN KAYAH EE
-	{0x1075, 0x1081, prSA, gcLo},     //    [13] MYANMAR LETTER SHAN KA..MYANMAR LETTER SHAN HA
-	{0x1082, 0x1082, prSA, gcMn},     //         MYANMAR CONSONANT SIGN SHAN MEDIAL WA
-	{0x1083, 0x1084, prSA, gcMc},     //     [2] MYANMAR VOWEL SIGN SHAN AA..MYANMAR VOWEL SIGN SHAN E
-	{0x1085, 0x1086, prSA, gcMn},     //     [2] MYANMAR VOWEL SIGN SHAN E ABOVE..MYANMAR VOWEL SIGN SHAN FINAL Y
-	{0x1087, 0x108C, prSA, gcMc},     //     [6] MYANMAR SIGN SHAN TONE-2..MYANMAR SIGN SHAN COUNCIL TONE-3
-	{0x108D, 0x108D, prSA, gcMn},     //         MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE
-	{0x108E, 0x108E, prSA, gcLo},     //         MYANMAR LETTER RUMAI PALAUNG FA
-	{0x108F, 0x108F, prSA, gcMc},     //         MYANMAR SIGN RUMAI PALAUNG TONE-5
-	{0x1090, 0x1099, prNU, gcNd},     //    [10] MYANMAR SHAN DIGIT ZERO..MYANMAR SHAN DIGIT NINE
-	{0x109A, 0x109C, prSA, gcMc},     //     [3] MYANMAR SIGN KHAMTI TONE-1..MYANMAR VOWEL SIGN AITON A
-	{0x109D, 0x109D, prSA, gcMn},     //         MYANMAR VOWEL SIGN AITON AI
-	{0x109E, 0x109F, prSA, gcSo},     //     [2] MYANMAR SYMBOL SHAN ONE..MYANMAR SYMBOL SHAN EXCLAMATION
-	{0x10A0, 0x10C5, prAL, gcLu},     //    [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE
-	{0x10C7, 0x10C7, prAL, gcLu},     //         GEORGIAN CAPITAL LETTER YN
-	{0x10CD, 0x10CD, prAL, gcLu},     //         GEORGIAN CAPITAL LETTER AEN
-	{0x10D0, 0x10FA, prAL, gcLl},     //    [43] GEORGIAN LETTER AN..GEORGIAN LETTER AIN
-	{0x10FB, 0x10FB, prAL, gcPo},     //         GEORGIAN PARAGRAPH SEPARATOR
-	{0x10FC, 0x10FC, prAL, gcLm},     //         MODIFIER LETTER GEORGIAN NAR
-	{0x10FD, 0x10FF, prAL, gcLl},     //     [3] GEORGIAN LETTER AEN..GEORGIAN LETTER LABIAL SIGN
-	{0x1100, 0x115F, prJL, gcLo},     //    [96] HANGUL CHOSEONG KIYEOK..HANGUL CHOSEONG FILLER
-	{0x1160, 0x11A7, prJV, gcLo},     //    [72] HANGUL JUNGSEONG FILLER..HANGUL JUNGSEONG O-YAE
-	{0x11A8, 0x11FF, prJT, gcLo},     //    [88] HANGUL JONGSEONG KIYEOK..HANGUL JONGSEONG SSANGNIEUN
-	{0x1200, 0x1248, prAL, gcLo},     //    [73] ETHIOPIC SYLLABLE HA..ETHIOPIC SYLLABLE QWA
-	{0x124A, 0x124D, prAL, gcLo},     //     [4] ETHIOPIC SYLLABLE QWI..ETHIOPIC SYLLABLE QWE
-	{0x1250, 0x1256, prAL, gcLo},     //     [7] ETHIOPIC SYLLABLE QHA..ETHIOPIC SYLLABLE QHO
-	{0x1258, 0x1258, prAL, gcLo},     //         ETHIOPIC SYLLABLE QHWA
-	{0x125A, 0x125D, prAL, gcLo},     //     [4] ETHIOPIC SYLLABLE QHWI..ETHIOPIC SYLLABLE QHWE
-	{0x1260, 0x1288, prAL, gcLo},     //    [41] ETHIOPIC SYLLABLE BA..ETHIOPIC SYLLABLE XWA
-	{0x128A, 0x128D, prAL, gcLo},     //     [4] ETHIOPIC SYLLABLE XWI..ETHIOPIC SYLLABLE XWE
-	{0x1290, 0x12B0, prAL, gcLo},     //    [33] ETHIOPIC SYLLABLE NA..ETHIOPIC SYLLABLE KWA
-	{0x12B2, 0x12B5, prAL, gcLo},     //     [4] ETHIOPIC SYLLABLE KWI..ETHIOPIC SYLLABLE KWE
-	{0x12B8, 0x12BE, prAL, gcLo},     //     [7] ETHIOPIC SYLLABLE KXA..ETHIOPIC SYLLABLE KXO
-	{0x12C0, 0x12C0, prAL, gcLo},     //         ETHIOPIC SYLLABLE KXWA
-	{0x12C2, 0x12C5, prAL, gcLo},     //     [4] ETHIOPIC SYLLABLE KXWI..ETHIOPIC SYLLABLE KXWE
-	{0x12C8, 0x12D6, prAL, gcLo},     //    [15] ETHIOPIC SYLLABLE WA..ETHIOPIC SYLLABLE PHARYNGEAL O
-	{0x12D8, 0x1310, prAL, gcLo},     //    [57] ETHIOPIC SYLLABLE ZA..ETHIOPIC SYLLABLE GWA
-	{0x1312, 0x1315, prAL, gcLo},     //     [4] ETHIOPIC SYLLABLE GWI..ETHIOPIC SYLLABLE GWE
-	{0x1318, 0x135A, prAL, gcLo},     //    [67] ETHIOPIC SYLLABLE GGA..ETHIOPIC SYLLABLE FYA
-	{0x135D, 0x135F, prCM, gcMn},     //     [3] ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK..ETHIOPIC COMBINING GEMINATION MARK
-	{0x1360, 0x1360, prAL, gcPo},     //         ETHIOPIC SECTION MARK
-	{0x1361, 0x1361, prBA, gcPo},     //         ETHIOPIC WORDSPACE
-	{0x1362, 0x1368, prAL, gcPo},     //     [7] ETHIOPIC FULL STOP..ETHIOPIC PARAGRAPH SEPARATOR
-	{0x1369, 0x137C, prAL, gcNo},     //    [20] ETHIOPIC DIGIT ONE..ETHIOPIC NUMBER TEN THOUSAND
-	{0x1380, 0x138F, prAL, gcLo},     //    [16] ETHIOPIC SYLLABLE SEBATBEIT MWA..ETHIOPIC SYLLABLE PWE
-	{0x1390, 0x1399, prAL, gcSo},     //    [10] ETHIOPIC TONAL MARK YIZET..ETHIOPIC TONAL MARK KURT
-	{0x13A0, 0x13F5, prAL, gcLu},     //    [86] CHEROKEE LETTER A..CHEROKEE LETTER MV
-	{0x13F8, 0x13FD, prAL, gcLl},     //     [6] CHEROKEE SMALL LETTER YE..CHEROKEE SMALL LETTER MV
-	{0x1400, 0x1400, prBA, gcPd},     //         CANADIAN SYLLABICS HYPHEN
-	{0x1401, 0x166C, prAL, gcLo},     //   [620] CANADIAN SYLLABICS E..CANADIAN SYLLABICS CARRIER TTSA
-	{0x166D, 0x166D, prAL, gcSo},     //         CANADIAN SYLLABICS CHI SIGN
-	{0x166E, 0x166E, prAL, gcPo},     //         CANADIAN SYLLABICS FULL STOP
-	{0x166F, 0x167F, prAL, gcLo},     //    [17] CANADIAN SYLLABICS QAI..CANADIAN SYLLABICS BLACKFOOT W
-	{0x1680, 0x1680, prBA, gcZs},     //         OGHAM SPACE MARK
-	{0x1681, 0x169A, prAL, gcLo},     //    [26] OGHAM LETTER BEITH..OGHAM LETTER PEITH
-	{0x169B, 0x169B, prOP, gcPs},     //         OGHAM FEATHER MARK
-	{0x169C, 0x169C, prCL, gcPe},     //         OGHAM REVERSED FEATHER MARK
-	{0x16A0, 0x16EA, prAL, gcLo},     //    [75] RUNIC LETTER FEHU FEOH FE F..RUNIC LETTER X
-	{0x16EB, 0x16ED, prBA, gcPo},     //     [3] RUNIC SINGLE PUNCTUATION..RUNIC CROSS PUNCTUATION
-	{0x16EE, 0x16F0, prAL, gcNl},     //     [3] RUNIC ARLAUG SYMBOL..RUNIC BELGTHOR SYMBOL
-	{0x16F1, 0x16F8, prAL, gcLo},     //     [8] RUNIC LETTER K..RUNIC LETTER FRANKS CASKET AESC
-	{0x1700, 0x1711, prAL, gcLo},     //    [18] TAGALOG LETTER A..TAGALOG LETTER HA
-	{0x1712, 0x1714, prCM, gcMn},     //     [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA
-	{0x1715, 0x1715, prCM, gcMc},     //         TAGALOG SIGN PAMUDPOD
-	{0x171F, 0x171F, prAL, gcLo},     //         TAGALOG LETTER ARCHAIC RA
-	{0x1720, 0x1731, prAL, gcLo},     //    [18] HANUNOO LETTER A..HANUNOO LETTER HA
-	{0x1732, 0x1733, prCM, gcMn},     //     [2] HANUNOO VOWEL SIGN I..HANUNOO VOWEL SIGN U
-	{0x1734, 0x1734, prCM, gcMc},     //         HANUNOO SIGN PAMUDPOD
-	{0x1735, 0x1736, prBA, gcPo},     //     [2] PHILIPPINE SINGLE PUNCTUATION..PHILIPPINE DOUBLE PUNCTUATION
-	{0x1740, 0x1751, prAL, gcLo},     //    [18] BUHID LETTER A..BUHID LETTER HA
-	{0x1752, 0x1753, prCM, gcMn},     //     [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U
-	{0x1760, 0x176C, prAL, gcLo},     //    [13] TAGBANWA LETTER A..TAGBANWA LETTER YA
-	{0x176E, 0x1770, prAL, gcLo},     //     [3] TAGBANWA LETTER LA..TAGBANWA LETTER SA
-	{0x1772, 0x1773, prCM, gcMn},     //     [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U
-	{0x1780, 0x17B3, prSA, gcLo},     //    [52] KHMER LETTER KA..KHMER INDEPENDENT VOWEL QAU
-	{0x17B4, 0x17B5, prSA, gcMn},     //     [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA
-	{0x17B6, 0x17B6, prSA, gcMc},     //         KHMER VOWEL SIGN AA
-	{0x17B7, 0x17BD, prSA, gcMn},     //     [7] KHMER VOWEL SIGN I..KHMER VOWEL SIGN UA
-	{0x17BE, 0x17C5, prSA, gcMc},     //     [8] KHMER VOWEL SIGN OE..KHMER VOWEL SIGN AU
-	{0x17C6, 0x17C6, prSA, gcMn},     //         KHMER SIGN NIKAHIT
-	{0x17C7, 0x17C8, prSA, gcMc},     //     [2] KHMER SIGN REAHMUK..KHMER SIGN YUUKALEAPINTU
-	{0x17C9, 0x17D3, prSA, gcMn},     //    [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT
-	{0x17D4, 0x17D5, prBA, gcPo},     //     [2] KHMER SIGN KHAN..KHMER SIGN BARIYOOSAN
-	{0x17D6, 0x17D6, prNS, gcPo},     //         KHMER SIGN CAMNUC PII KUUH
-	{0x17D7, 0x17D7, prSA, gcLm},     //         KHMER SIGN LEK TOO
-	{0x17D8, 0x17D8, prBA, gcPo},     //         KHMER SIGN BEYYAL
-	{0x17D9, 0x17D9, prAL, gcPo},     //         KHMER SIGN PHNAEK MUAN
-	{0x17DA, 0x17DA, prBA, gcPo},     //         KHMER SIGN KOOMUUT
-	{0x17DB, 0x17DB, prPR, gcSc},     //         KHMER CURRENCY SYMBOL RIEL
-	{0x17DC, 0x17DC, prSA, gcLo},     //         KHMER SIGN AVAKRAHASANYA
-	{0x17DD, 0x17DD, prSA, gcMn},     //         KHMER SIGN ATTHACAN
-	{0x17E0, 0x17E9, prNU, gcNd},     //    [10] KHMER DIGIT ZERO..KHMER DIGIT NINE
-	{0x17F0, 0x17F9, prAL, gcNo},     //    [10] KHMER SYMBOL LEK ATTAK SON..KHMER SYMBOL LEK ATTAK PRAM-BUON
-	{0x1800, 0x1801, prAL, gcPo},     //     [2] MONGOLIAN BIRGA..MONGOLIAN ELLIPSIS
-	{0x1802, 0x1803, prEX, gcPo},     //     [2] MONGOLIAN COMMA..MONGOLIAN FULL STOP
-	{0x1804, 0x1805, prBA, gcPo},     //     [2] MONGOLIAN COLON..MONGOLIAN FOUR DOTS
-	{0x1806, 0x1806, prBB, gcPd},     //         MONGOLIAN TODO SOFT HYPHEN
-	{0x1807, 0x1807, prAL, gcPo},     //         MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER
-	{0x1808, 0x1809, prEX, gcPo},     //     [2] MONGOLIAN MANCHU COMMA..MONGOLIAN MANCHU FULL STOP
-	{0x180A, 0x180A, prAL, gcPo},     //         MONGOLIAN NIRUGU
-	{0x180B, 0x180D, prCM, gcMn},     //     [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE
-	{0x180E, 0x180E, prGL, gcCf},     //         MONGOLIAN VOWEL SEPARATOR
-	{0x180F, 0x180F, prCM, gcMn},     //         MONGOLIAN FREE VARIATION SELECTOR FOUR
-	{0x1810, 0x1819, prNU, gcNd},     //    [10] MONGOLIAN DIGIT ZERO..MONGOLIAN DIGIT NINE
-	{0x1820, 0x1842, prAL, gcLo},     //    [35] MONGOLIAN LETTER A..MONGOLIAN LETTER CHI
-	{0x1843, 0x1843, prAL, gcLm},     //         MONGOLIAN LETTER TODO LONG VOWEL SIGN
-	{0x1844, 0x1878, prAL, gcLo},     //    [53] MONGOLIAN LETTER TODO E..MONGOLIAN LETTER CHA WITH TWO DOTS
-	{0x1880, 0x1884, prAL, gcLo},     //     [5] MONGOLIAN LETTER ALI GALI ANUSVARA ONE..MONGOLIAN LETTER ALI GALI INVERTED UBADAMA
-	{0x1885, 0x1886, prCM, gcMn},     //     [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA
-	{0x1887, 0x18A8, prAL, gcLo},     //    [34] MONGOLIAN LETTER ALI GALI A..MONGOLIAN LETTER MANCHU ALI GALI BHA
-	{0x18A9, 0x18A9, prCM, gcMn},     //         MONGOLIAN LETTER ALI GALI DAGALGA
-	{0x18AA, 0x18AA, prAL, gcLo},     //         MONGOLIAN LETTER MANCHU ALI GALI LHA
-	{0x18B0, 0x18F5, prAL, gcLo},     //    [70] CANADIAN SYLLABICS OY..CANADIAN SYLLABICS CARRIER DENTAL S
-	{0x1900, 0x191E, prAL, gcLo},     //    [31] LIMBU VOWEL-CARRIER LETTER..LIMBU LETTER TRA
-	{0x1920, 0x1922, prCM, gcMn},     //     [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U
-	{0x1923, 0x1926, prCM, gcMc},     //     [4] LIMBU VOWEL SIGN EE..LIMBU VOWEL SIGN AU
-	{0x1927, 0x1928, prCM, gcMn},     //     [2] LIMBU VOWEL SIGN E..LIMBU VOWEL SIGN O
-	{0x1929, 0x192B, prCM, gcMc},     //     [3] LIMBU SUBJOINED LETTER YA..LIMBU SUBJOINED LETTER WA
-	{0x1930, 0x1931, prCM, gcMc},     //     [2] LIMBU SMALL LETTER KA..LIMBU SMALL LETTER NGA
-	{0x1932, 0x1932, prCM, gcMn},     //         LIMBU SMALL LETTER ANUSVARA
-	{0x1933, 0x1938, prCM, gcMc},     //     [6] LIMBU SMALL LETTER TA..LIMBU SMALL LETTER LA
-	{0x1939, 0x193B, prCM, gcMn},     //     [3] LIMBU SIGN MUKPHRENG..LIMBU SIGN SA-I
-	{0x1940, 0x1940, prAL, gcSo},     //         LIMBU SIGN LOO
-	{0x1944, 0x1945, prEX, gcPo},     //     [2] LIMBU EXCLAMATION MARK..LIMBU QUESTION MARK
-	{0x1946, 0x194F, prNU, gcNd},     //    [10] LIMBU DIGIT ZERO..LIMBU DIGIT NINE
-	{0x1950, 0x196D, prSA, gcLo},     //    [30] TAI LE LETTER KA..TAI LE LETTER AI
-	{0x1970, 0x1974, prSA, gcLo},     //     [5] TAI LE LETTER TONE-2..TAI LE LETTER TONE-6
-	{0x1980, 0x19AB, prSA, gcLo},     //    [44] NEW TAI LUE LETTER HIGH QA..NEW TAI LUE LETTER LOW SUA
-	{0x19B0, 0x19C9, prSA, gcLo},     //    [26] NEW TAI LUE VOWEL SIGN VOWEL SHORTENER..NEW TAI LUE TONE MARK-2
-	{0x19D0, 0x19D9, prNU, gcNd},     //    [10] NEW TAI LUE DIGIT ZERO..NEW TAI LUE DIGIT NINE
-	{0x19DA, 0x19DA, prSA, gcNo},     //         NEW TAI LUE THAM DIGIT ONE
-	{0x19DE, 0x19DF, prSA, gcSo},     //     [2] NEW TAI LUE SIGN LAE..NEW TAI LUE SIGN LAEV
-	{0x19E0, 0x19FF, prAL, gcSo},     //    [32] KHMER SYMBOL PATHAMASAT..KHMER SYMBOL DAP-PRAM ROC
-	{0x1A00, 0x1A16, prAL, gcLo},     //    [23] BUGINESE LETTER KA..BUGINESE LETTER HA
-	{0x1A17, 0x1A18, prCM, gcMn},     //     [2] BUGINESE VOWEL SIGN I..BUGINESE VOWEL SIGN U
-	{0x1A19, 0x1A1A, prCM, gcMc},     //     [2] BUGINESE VOWEL SIGN E..BUGINESE VOWEL SIGN O
-	{0x1A1B, 0x1A1B, prCM, gcMn},     //         BUGINESE VOWEL SIGN AE
-	{0x1A1E, 0x1A1F, prAL, gcPo},     //     [2] BUGINESE PALLAWA..BUGINESE END OF SECTION
-	{0x1A20, 0x1A54, prSA, gcLo},     //    [53] TAI THAM LETTER HIGH KA..TAI THAM LETTER GREAT SA
-	{0x1A55, 0x1A55, prSA, gcMc},     //         TAI THAM CONSONANT SIGN MEDIAL RA
-	{0x1A56, 0x1A56, prSA, gcMn},     //         TAI THAM CONSONANT SIGN MEDIAL LA
-	{0x1A57, 0x1A57, prSA, gcMc},     //         TAI THAM CONSONANT SIGN LA TANG LAI
-	{0x1A58, 0x1A5E, prSA, gcMn},     //     [7] TAI THAM SIGN MAI KANG LAI..TAI THAM CONSONANT SIGN SA
-	{0x1A60, 0x1A60, prSA, gcMn},     //         TAI THAM SIGN SAKOT
-	{0x1A61, 0x1A61, prSA, gcMc},     //         TAI THAM VOWEL SIGN A
-	{0x1A62, 0x1A62, prSA, gcMn},     //         TAI THAM VOWEL SIGN MAI SAT
-	{0x1A63, 0x1A64, prSA, gcMc},     //     [2] TAI THAM VOWEL SIGN AA..TAI THAM VOWEL SIGN TALL AA
-	{0x1A65, 0x1A6C, prSA, gcMn},     //     [8] TAI THAM VOWEL SIGN I..TAI THAM VOWEL SIGN OA BELOW
-	{0x1A6D, 0x1A72, prSA, gcMc},     //     [6] TAI THAM VOWEL SIGN OY..TAI THAM VOWEL SIGN THAM AI
-	{0x1A73, 0x1A7C, prSA, gcMn},     //    [10] TAI THAM VOWEL SIGN OA ABOVE..TAI THAM SIGN KHUEN-LUE KARAN
-	{0x1A7F, 0x1A7F, prCM, gcMn},     //         TAI THAM COMBINING CRYPTOGRAMMIC DOT
-	{0x1A80, 0x1A89, prNU, gcNd},     //    [10] TAI THAM HORA DIGIT ZERO..TAI THAM HORA DIGIT NINE
-	{0x1A90, 0x1A99, prNU, gcNd},     //    [10] TAI THAM THAM DIGIT ZERO..TAI THAM THAM DIGIT NINE
-	{0x1AA0, 0x1AA6, prSA, gcPo},     //     [7] TAI THAM SIGN WIANG..TAI THAM SIGN REVERSED ROTATED RANA
-	{0x1AA7, 0x1AA7, prSA, gcLm},     //         TAI THAM SIGN MAI YAMOK
-	{0x1AA8, 0x1AAD, prSA, gcPo},     //     [6] TAI THAM SIGN KAAN..TAI THAM SIGN CAANG
-	{0x1AB0, 0x1ABD, prCM, gcMn},     //    [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW
-	{0x1ABE, 0x1ABE, prCM, gcMe},     //         COMBINING PARENTHESES OVERLAY
-	{0x1ABF, 0x1ACE, prCM, gcMn},     //    [16] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER INSULAR T
-	{0x1B00, 0x1B03, prCM, gcMn},     //     [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG
-	{0x1B04, 0x1B04, prCM, gcMc},     //         BALINESE SIGN BISAH
-	{0x1B05, 0x1B33, prAL, gcLo},     //    [47] BALINESE LETTER AKARA..BALINESE LETTER HA
-	{0x1B34, 0x1B34, prCM, gcMn},     //         BALINESE SIGN REREKAN
-	{0x1B35, 0x1B35, prCM, gcMc},     //         BALINESE VOWEL SIGN TEDUNG
-	{0x1B36, 0x1B3A, prCM, gcMn},     //     [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA
-	{0x1B3B, 0x1B3B, prCM, gcMc},     //         BALINESE VOWEL SIGN RA REPA TEDUNG
-	{0x1B3C, 0x1B3C, prCM, gcMn},     //         BALINESE VOWEL SIGN LA LENGA
-	{0x1B3D, 0x1B41, prCM, gcMc},     //     [5] BALINESE VOWEL SIGN LA LENGA TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG
-	{0x1B42, 0x1B42, prCM, gcMn},     //         BALINESE VOWEL SIGN PEPET
-	{0x1B43, 0x1B44, prCM, gcMc},     //     [2] BALINESE VOWEL SIGN PEPET TEDUNG..BALINESE ADEG ADEG
-	{0x1B45, 0x1B4C, prAL, gcLo},     //     [8] BALINESE LETTER KAF SASAK..BALINESE LETTER ARCHAIC JNYA
-	{0x1B50, 0x1B59, prNU, gcNd},     //    [10] BALINESE DIGIT ZERO..BALINESE DIGIT NINE
-	{0x1B5A, 0x1B5B, prBA, gcPo},     //     [2] BALINESE PANTI..BALINESE PAMADA
-	{0x1B5C, 0x1B5C, prAL, gcPo},     //         BALINESE WINDU
-	{0x1B5D, 0x1B60, prBA, gcPo},     //     [4] BALINESE CARIK PAMUNGKAH..BALINESE PAMENENG
-	{0x1B61, 0x1B6A, prAL, gcSo},     //    [10] BALINESE MUSICAL SYMBOL DONG..BALINESE MUSICAL SYMBOL DANG GEDE
-	{0x1B6B, 0x1B73, prCM, gcMn},     //     [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG
-	{0x1B74, 0x1B7C, prAL, gcSo},     //     [9] BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DUG..BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING
-	{0x1B7D, 0x1B7E, prBA, gcPo},     //     [2] BALINESE PANTI LANTANG..BALINESE PAMADA LANTANG
-	{0x1B80, 0x1B81, prCM, gcMn},     //     [2] SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PANGLAYAR
-	{0x1B82, 0x1B82, prCM, gcMc},     //         SUNDANESE SIGN PANGWISAD
-	{0x1B83, 0x1BA0, prAL, gcLo},     //    [30] SUNDANESE LETTER A..SUNDANESE LETTER HA
-	{0x1BA1, 0x1BA1, prCM, gcMc},     //         SUNDANESE CONSONANT SIGN PAMINGKAL
-	{0x1BA2, 0x1BA5, prCM, gcMn},     //     [4] SUNDANESE CONSONANT SIGN PANYAKRA..SUNDANESE VOWEL SIGN PANYUKU
-	{0x1BA6, 0x1BA7, prCM, gcMc},     //     [2] SUNDANESE VOWEL SIGN PANAELAENG..SUNDANESE VOWEL SIGN PANOLONG
-	{0x1BA8, 0x1BA9, prCM, gcMn},     //     [2] SUNDANESE VOWEL SIGN PAMEPET..SUNDANESE VOWEL SIGN PANEULEUNG
-	{0x1BAA, 0x1BAA, prCM, gcMc},     //         SUNDANESE SIGN PAMAAEH
-	{0x1BAB, 0x1BAD, prCM, gcMn},     //     [3] SUNDANESE SIGN VIRAMA..SUNDANESE CONSONANT SIGN PASANGAN WA
-	{0x1BAE, 0x1BAF, prAL, gcLo},     //     [2] SUNDANESE LETTER KHA..SUNDANESE LETTER SYA
-	{0x1BB0, 0x1BB9, prNU, gcNd},     //    [10] SUNDANESE DIGIT ZERO..SUNDANESE DIGIT NINE
-	{0x1BBA, 0x1BBF, prAL, gcLo},     //     [6] SUNDANESE AVAGRAHA..SUNDANESE LETTER FINAL M
-	{0x1BC0, 0x1BE5, prAL, gcLo},     //    [38] BATAK LETTER A..BATAK LETTER U
-	{0x1BE6, 0x1BE6, prCM, gcMn},     //         BATAK SIGN TOMPI
-	{0x1BE7, 0x1BE7, prCM, gcMc},     //         BATAK VOWEL SIGN E
-	{0x1BE8, 0x1BE9, prCM, gcMn},     //     [2] BATAK VOWEL SIGN PAKPAK E..BATAK VOWEL SIGN EE
-	{0x1BEA, 0x1BEC, prCM, gcMc},     //     [3] BATAK VOWEL SIGN I..BATAK VOWEL SIGN O
-	{0x1BED, 0x1BED, prCM, gcMn},     //         BATAK VOWEL SIGN KARO O
-	{0x1BEE, 0x1BEE, prCM, gcMc},     //         BATAK VOWEL SIGN U
-	{0x1BEF, 0x1BF1, prCM, gcMn},     //     [3] BATAK VOWEL SIGN U FOR SIMALUNGUN SA..BATAK CONSONANT SIGN H
-	{0x1BF2, 0x1BF3, prCM, gcMc},     //     [2] BATAK PANGOLAT..BATAK PANONGONAN
-	{0x1BFC, 0x1BFF, prAL, gcPo},     //     [4] BATAK SYMBOL BINDU NA METEK..BATAK SYMBOL BINDU PANGOLAT
-	{0x1C00, 0x1C23, prAL, gcLo},     //    [36] LEPCHA LETTER KA..LEPCHA LETTER A
-	{0x1C24, 0x1C2B, prCM, gcMc},     //     [8] LEPCHA SUBJOINED LETTER YA..LEPCHA VOWEL SIGN UU
-	{0x1C2C, 0x1C33, prCM, gcMn},     //     [8] LEPCHA VOWEL SIGN E..LEPCHA CONSONANT SIGN T
-	{0x1C34, 0x1C35, prCM, gcMc},     //     [2] LEPCHA CONSONANT SIGN NYIN-DO..LEPCHA CONSONANT SIGN KANG
-	{0x1C36, 0x1C37, prCM, gcMn},     //     [2] LEPCHA SIGN RAN..LEPCHA SIGN NUKTA
-	{0x1C3B, 0x1C3F, prBA, gcPo},     //     [5] LEPCHA PUNCTUATION TA-ROL..LEPCHA PUNCTUATION TSHOOK
-	{0x1C40, 0x1C49, prNU, gcNd},     //    [10] LEPCHA DIGIT ZERO..LEPCHA DIGIT NINE
-	{0x1C4D, 0x1C4F, prAL, gcLo},     //     [3] LEPCHA LETTER TTA..LEPCHA LETTER DDA
-	{0x1C50, 0x1C59, prNU, gcNd},     //    [10] OL CHIKI DIGIT ZERO..OL CHIKI DIGIT NINE
-	{0x1C5A, 0x1C77, prAL, gcLo},     //    [30] OL CHIKI LETTER LA..OL CHIKI LETTER OH
-	{0x1C78, 0x1C7D, prAL, gcLm},     //     [6] OL CHIKI MU TTUDDAG..OL CHIKI AHAD
-	{0x1C7E, 0x1C7F, prBA, gcPo},     //     [2] OL CHIKI PUNCTUATION MUCAAD..OL CHIKI PUNCTUATION DOUBLE MUCAAD
-	{0x1C80, 0x1C88, prAL, gcLl},     //     [9] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER UNBLENDED UK
-	{0x1C90, 0x1CBA, prAL, gcLu},     //    [43] GEORGIAN MTAVRULI CAPITAL LETTER AN..GEORGIAN MTAVRULI CAPITAL LETTER AIN
-	{0x1CBD, 0x1CBF, prAL, gcLu},     //     [3] GEORGIAN MTAVRULI CAPITAL LETTER AEN..GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN
-	{0x1CC0, 0x1CC7, prAL, gcPo},     //     [8] SUNDANESE PUNCTUATION BINDU SURYA..SUNDANESE PUNCTUATION BINDU BA SATANGA
-	{0x1CD0, 0x1CD2, prCM, gcMn},     //     [3] VEDIC TONE KARSHANA..VEDIC TONE PRENKHA
-	{0x1CD3, 0x1CD3, prAL, gcPo},     //         VEDIC SIGN NIHSHVASA
-	{0x1CD4, 0x1CE0, prCM, gcMn},     //    [13] VEDIC SIGN YAJURVEDIC MIDLINE SVARITA..VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA
-	{0x1CE1, 0x1CE1, prCM, gcMc},     //         VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA
-	{0x1CE2, 0x1CE8, prCM, gcMn},     //     [7] VEDIC SIGN VISARGA SVARITA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL
-	{0x1CE9, 0x1CEC, prAL, gcLo},     //     [4] VEDIC SIGN ANUSVARA ANTARGOMUKHA..VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL
-	{0x1CED, 0x1CED, prCM, gcMn},     //         VEDIC SIGN TIRYAK
-	{0x1CEE, 0x1CF3, prAL, gcLo},     //     [6] VEDIC SIGN HEXIFORM LONG ANUSVARA..VEDIC SIGN ROTATED ARDHAVISARGA
-	{0x1CF4, 0x1CF4, prCM, gcMn},     //         VEDIC TONE CANDRA ABOVE
-	{0x1CF5, 0x1CF6, prAL, gcLo},     //     [2] VEDIC SIGN JIHVAMULIYA..VEDIC SIGN UPADHMANIYA
-	{0x1CF7, 0x1CF7, prCM, gcMc},     //         VEDIC SIGN ATIKRAMA
-	{0x1CF8, 0x1CF9, prCM, gcMn},     //     [2] VEDIC TONE RING ABOVE..VEDIC TONE DOUBLE RING ABOVE
-	{0x1CFA, 0x1CFA, prAL, gcLo},     //         VEDIC SIGN DOUBLE ANUSVARA ANTARGOMUKHA
-	{0x1D00, 0x1D2B, prAL, gcLl},     //    [44] LATIN LETTER SMALL CAPITAL A..CYRILLIC LETTER SMALL CAPITAL EL
-	{0x1D2C, 0x1D6A, prAL, gcLm},     //    [63] MODIFIER LETTER CAPITAL A..GREEK SUBSCRIPT SMALL LETTER CHI
-	{0x1D6B, 0x1D77, prAL, gcLl},     //    [13] LATIN SMALL LETTER UE..LATIN SMALL LETTER TURNED G
-	{0x1D78, 0x1D78, prAL, gcLm},     //         MODIFIER LETTER CYRILLIC EN
-	{0x1D79, 0x1D7F, prAL, gcLl},     //     [7] LATIN SMALL LETTER INSULAR G..LATIN SMALL LETTER UPSILON WITH STROKE
-	{0x1D80, 0x1D9A, prAL, gcLl},     //    [27] LATIN SMALL LETTER B WITH PALATAL HOOK..LATIN SMALL LETTER EZH WITH RETROFLEX HOOK
-	{0x1D9B, 0x1DBF, prAL, gcLm},     //    [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA
-	{0x1DC0, 0x1DCC, prCM, gcMn},     //    [13] COMBINING DOTTED GRAVE ACCENT..COMBINING MACRON-BREVE
-	{0x1DCD, 0x1DCD, prGL, gcMn},     //         COMBINING DOUBLE CIRCUMFLEX ABOVE
-	{0x1DCE, 0x1DFB, prCM, gcMn},     //    [46] COMBINING OGONEK ABOVE..COMBINING DELETION MARK
-	{0x1DFC, 0x1DFC, prGL, gcMn},     //         COMBINING DOUBLE INVERTED BREVE BELOW
-	{0x1DFD, 0x1DFF, prCM, gcMn},     //     [3] COMBINING ALMOST EQUAL TO BELOW..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW
-	{0x1E00, 0x1EFF, prAL, gcLC},     //   [256] LATIN CAPITAL LETTER A WITH RING BELOW..LATIN SMALL LETTER Y WITH LOOP
-	{0x1F00, 0x1F15, prAL, gcLC},     //    [22] GREEK SMALL LETTER ALPHA WITH PSILI..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
-	{0x1F18, 0x1F1D, prAL, gcLu},     //     [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
-	{0x1F20, 0x1F45, prAL, gcLC},     //    [38] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
-	{0x1F48, 0x1F4D, prAL, gcLu},     //     [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
-	{0x1F50, 0x1F57, prAL, gcLl},     //     [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
-	{0x1F59, 0x1F59, prAL, gcLu},     //         GREEK CAPITAL LETTER UPSILON WITH DASIA
-	{0x1F5B, 0x1F5B, prAL, gcLu},     //         GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
-	{0x1F5D, 0x1F5D, prAL, gcLu},     //         GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
-	{0x1F5F, 0x1F7D, prAL, gcLC},     //    [31] GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI..GREEK SMALL LETTER OMEGA WITH OXIA
-	{0x1F80, 0x1FB4, prAL, gcLC},     //    [53] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
-	{0x1FB6, 0x1FBC, prAL, gcLC},     //     [7] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
-	{0x1FBD, 0x1FBD, prAL, gcSk},     //         GREEK KORONIS
-	{0x1FBE, 0x1FBE, prAL, gcLl},     //         GREEK PROSGEGRAMMENI
-	{0x1FBF, 0x1FC1, prAL, gcSk},     //     [3] GREEK PSILI..GREEK DIALYTIKA AND PERISPOMENI
-	{0x1FC2, 0x1FC4, prAL, gcLl},     //     [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
-	{0x1FC6, 0x1FCC, prAL, gcLC},     //     [7] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
-	{0x1FCD, 0x1FCF, prAL, gcSk},     //     [3] GREEK PSILI AND VARIA..GREEK PSILI AND PERISPOMENI
-	{0x1FD0, 0x1FD3, prAL, gcLl},     //     [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
-	{0x1FD6, 0x1FDB, prAL, gcLC},     //     [6] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK CAPITAL LETTER IOTA WITH OXIA
-	{0x1FDD, 0x1FDF, prAL, gcSk},     //     [3] GREEK DASIA AND VARIA..GREEK DASIA AND PERISPOMENI
-	{0x1FE0, 0x1FEC, prAL, gcLC},     //    [13] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA
-	{0x1FED, 0x1FEF, prAL, gcSk},     //     [3] GREEK DIALYTIKA AND VARIA..GREEK VARIA
-	{0x1FF2, 0x1FF4, prAL, gcLl},     //     [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
-	{0x1FF6, 0x1FFC, prAL, gcLC},     //     [7] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
-	{0x1FFD, 0x1FFD, prBB, gcSk},     //         GREEK OXIA
-	{0x1FFE, 0x1FFE, prAL, gcSk},     //         GREEK DASIA
-	{0x2000, 0x2006, prBA, gcZs},     //     [7] EN QUAD..SIX-PER-EM SPACE
-	{0x2007, 0x2007, prGL, gcZs},     //         FIGURE SPACE
-	{0x2008, 0x200A, prBA, gcZs},     //     [3] PUNCTUATION SPACE..HAIR SPACE
-	{0x200B, 0x200B, prZW, gcCf},     //         ZERO WIDTH SPACE
-	{0x200C, 0x200C, prCM, gcCf},     //         ZERO WIDTH NON-JOINER
-	{0x200D, 0x200D, prZWJ, gcCf},    //         ZERO WIDTH JOINER
-	{0x200E, 0x200F, prCM, gcCf},     //     [2] LEFT-TO-RIGHT MARK..RIGHT-TO-LEFT MARK
-	{0x2010, 0x2010, prBA, gcPd},     //         HYPHEN
-	{0x2011, 0x2011, prGL, gcPd},     //         NON-BREAKING HYPHEN
-	{0x2012, 0x2013, prBA, gcPd},     //     [2] FIGURE DASH..EN DASH
-	{0x2014, 0x2014, prB2, gcPd},     //         EM DASH
-	{0x2015, 0x2015, prAI, gcPd},     //         HORIZONTAL BAR
-	{0x2016, 0x2016, prAI, gcPo},     //         DOUBLE VERTICAL LINE
-	{0x2017, 0x2017, prAL, gcPo},     //         DOUBLE LOW LINE
-	{0x2018, 0x2018, prQU, gcPi},     //         LEFT SINGLE QUOTATION MARK
-	{0x2019, 0x2019, prQU, gcPf},     //         RIGHT SINGLE QUOTATION MARK
-	{0x201A, 0x201A, prOP, gcPs},     //         SINGLE LOW-9 QUOTATION MARK
-	{0x201B, 0x201C, prQU, gcPi},     //     [2] SINGLE HIGH-REVERSED-9 QUOTATION MARK..LEFT DOUBLE QUOTATION MARK
-	{0x201D, 0x201D, prQU, gcPf},     //         RIGHT DOUBLE QUOTATION MARK
-	{0x201E, 0x201E, prOP, gcPs},     //         DOUBLE LOW-9 QUOTATION MARK
-	{0x201F, 0x201F, prQU, gcPi},     //         DOUBLE HIGH-REVERSED-9 QUOTATION MARK
-	{0x2020, 0x2021, prAI, gcPo},     //     [2] DAGGER..DOUBLE DAGGER
-	{0x2022, 0x2023, prAL, gcPo},     //     [2] BULLET..TRIANGULAR BULLET
-	{0x2024, 0x2026, prIN, gcPo},     //     [3] ONE DOT LEADER..HORIZONTAL ELLIPSIS
-	{0x2027, 0x2027, prBA, gcPo},     //         HYPHENATION POINT
-	{0x2028, 0x2028, prBK, gcZl},     //         LINE SEPARATOR
-	{0x2029, 0x2029, prBK, gcZp},     //         PARAGRAPH SEPARATOR
-	{0x202A, 0x202E, prCM, gcCf},     //     [5] LEFT-TO-RIGHT EMBEDDING..RIGHT-TO-LEFT OVERRIDE
-	{0x202F, 0x202F, prGL, gcZs},     //         NARROW NO-BREAK SPACE
-	{0x2030, 0x2037, prPO, gcPo},     //     [8] PER MILLE SIGN..REVERSED TRIPLE PRIME
-	{0x2038, 0x2038, prAL, gcPo},     //         CARET
-	{0x2039, 0x2039, prQU, gcPi},     //         SINGLE LEFT-POINTING ANGLE QUOTATION MARK
-	{0x203A, 0x203A, prQU, gcPf},     //         SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
-	{0x203B, 0x203B, prAI, gcPo},     //         REFERENCE MARK
-	{0x203C, 0x203D, prNS, gcPo},     //     [2] DOUBLE EXCLAMATION MARK..INTERROBANG
-	{0x203E, 0x203E, prAL, gcPo},     //         OVERLINE
-	{0x203F, 0x2040, prAL, gcPc},     //     [2] UNDERTIE..CHARACTER TIE
-	{0x2041, 0x2043, prAL, gcPo},     //     [3] CARET INSERTION POINT..HYPHEN BULLET
-	{0x2044, 0x2044, prIS, gcSm},     //         FRACTION SLASH
-	{0x2045, 0x2045, prOP, gcPs},     //         LEFT SQUARE BRACKET WITH QUILL
-	{0x2046, 0x2046, prCL, gcPe},     //         RIGHT SQUARE BRACKET WITH QUILL
-	{0x2047, 0x2049, prNS, gcPo},     //     [3] DOUBLE QUESTION MARK..EXCLAMATION QUESTION MARK
-	{0x204A, 0x2051, prAL, gcPo},     //     [8] TIRONIAN SIGN ET..TWO ASTERISKS ALIGNED VERTICALLY
-	{0x2052, 0x2052, prAL, gcSm},     //         COMMERCIAL MINUS SIGN
-	{0x2053, 0x2053, prAL, gcPo},     //         SWUNG DASH
-	{0x2054, 0x2054, prAL, gcPc},     //         INVERTED UNDERTIE
-	{0x2055, 0x2055, prAL, gcPo},     //         FLOWER PUNCTUATION MARK
-	{0x2056, 0x2056, prBA, gcPo},     //         THREE DOT PUNCTUATION
-	{0x2057, 0x2057, prPO, gcPo},     //         QUADRUPLE PRIME
-	{0x2058, 0x205B, prBA, gcPo},     //     [4] FOUR DOT PUNCTUATION..FOUR DOT MARK
-	{0x205C, 0x205C, prAL, gcPo},     //         DOTTED CROSS
-	{0x205D, 0x205E, prBA, gcPo},     //     [2] TRICOLON..VERTICAL FOUR DOTS
-	{0x205F, 0x205F, prBA, gcZs},     //         MEDIUM MATHEMATICAL SPACE
-	{0x2060, 0x2060, prWJ, gcCf},     //         WORD JOINER
-	{0x2061, 0x2064, prAL, gcCf},     //     [4] FUNCTION APPLICATION..INVISIBLE PLUS
-	{0x2066, 0x206F, prCM, gcCf},     //    [10] LEFT-TO-RIGHT ISOLATE..NOMINAL DIGIT SHAPES
-	{0x2070, 0x2070, prAL, gcNo},     //         SUPERSCRIPT ZERO
-	{0x2071, 0x2071, prAL, gcLm},     //         SUPERSCRIPT LATIN SMALL LETTER I
-	{0x2074, 0x2074, prAI, gcNo},     //         SUPERSCRIPT FOUR
-	{0x2075, 0x2079, prAL, gcNo},     //     [5] SUPERSCRIPT FIVE..SUPERSCRIPT NINE
-	{0x207A, 0x207C, prAL, gcSm},     //     [3] SUPERSCRIPT PLUS SIGN..SUPERSCRIPT EQUALS SIGN
-	{0x207D, 0x207D, prOP, gcPs},     //         SUPERSCRIPT LEFT PARENTHESIS
-	{0x207E, 0x207E, prCL, gcPe},     //         SUPERSCRIPT RIGHT PARENTHESIS
-	{0x207F, 0x207F, prAI, gcLm},     //         SUPERSCRIPT LATIN SMALL LETTER N
-	{0x2080, 0x2080, prAL, gcNo},     //         SUBSCRIPT ZERO
-	{0x2081, 0x2084, prAI, gcNo},     //     [4] SUBSCRIPT ONE..SUBSCRIPT FOUR
-	{0x2085, 0x2089, prAL, gcNo},     //     [5] SUBSCRIPT FIVE..SUBSCRIPT NINE
-	{0x208A, 0x208C, prAL, gcSm},     //     [3] SUBSCRIPT PLUS SIGN..SUBSCRIPT EQUALS SIGN
-	{0x208D, 0x208D, prOP, gcPs},     //         SUBSCRIPT LEFT PARENTHESIS
-	{0x208E, 0x208E, prCL, gcPe},     //         SUBSCRIPT RIGHT PARENTHESIS
-	{0x2090, 0x209C, prAL, gcLm},     //    [13] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER T
-	{0x20A0, 0x20A6, prPR, gcSc},     //     [7] EURO-CURRENCY SIGN..NAIRA SIGN
-	{0x20A7, 0x20A7, prPO, gcSc},     //         PESETA SIGN
-	{0x20A8, 0x20B5, prPR, gcSc},     //    [14] RUPEE SIGN..CEDI SIGN
-	{0x20B6, 0x20B6, prPO, gcSc},     //         LIVRE TOURNOIS SIGN
-	{0x20B7, 0x20BA, prPR, gcSc},     //     [4] SPESMILO SIGN..TURKISH LIRA SIGN
-	{0x20BB, 0x20BB, prPO, gcSc},     //         NORDIC MARK SIGN
-	{0x20BC, 0x20BD, prPR, gcSc},     //     [2] MANAT SIGN..RUBLE SIGN
-	{0x20BE, 0x20BE, prPO, gcSc},     //         LARI SIGN
-	{0x20BF, 0x20BF, prPR, gcSc},     //         BITCOIN SIGN
-	{0x20C0, 0x20C0, prPO, gcSc},     //         SOM SIGN
-	{0x20C1, 0x20CF, prPR, gcCn},     //    [15] <reserved-20C1>..<reserved-20CF>
-	{0x20D0, 0x20DC, prCM, gcMn},     //    [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE
-	{0x20DD, 0x20E0, prCM, gcMe},     //     [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH
-	{0x20E1, 0x20E1, prCM, gcMn},     //         COMBINING LEFT RIGHT ARROW ABOVE
-	{0x20E2, 0x20E4, prCM, gcMe},     //     [3] COMBINING ENCLOSING SCREEN..COMBINING ENCLOSING UPWARD POINTING TRIANGLE
-	{0x20E5, 0x20F0, prCM, gcMn},     //    [12] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING ASTERISK ABOVE
-	{0x2100, 0x2101, prAL, gcSo},     //     [2] ACCOUNT OF..ADDRESSED TO THE SUBJECT
-	{0x2102, 0x2102, prAL, gcLu},     //         DOUBLE-STRUCK CAPITAL C
-	{0x2103, 0x2103, prPO, gcSo},     //         DEGREE CELSIUS
-	{0x2104, 0x2104, prAL, gcSo},     //         CENTRE LINE SYMBOL
-	{0x2105, 0x2105, prAI, gcSo},     //         CARE OF
-	{0x2106, 0x2106, prAL, gcSo},     //         CADA UNA
-	{0x2107, 0x2107, prAL, gcLu},     //         EULER CONSTANT
-	{0x2108, 0x2108, prAL, gcSo},     //         SCRUPLE
-	{0x2109, 0x2109, prPO, gcSo},     //         DEGREE FAHRENHEIT
-	{0x210A, 0x2112, prAL, gcLC},     //     [9] SCRIPT SMALL G..SCRIPT CAPITAL L
-	{0x2113, 0x2113, prAI, gcLl},     //         SCRIPT SMALL L
-	{0x2114, 0x2114, prAL, gcSo},     //         L B BAR SYMBOL
-	{0x2115, 0x2115, prAL, gcLu},     //         DOUBLE-STRUCK CAPITAL N
-	{0x2116, 0x2116, prPR, gcSo},     //         NUMERO SIGN
-	{0x2117, 0x2117, prAL, gcSo},     //         SOUND RECORDING COPYRIGHT
-	{0x2118, 0x2118, prAL, gcSm},     //         SCRIPT CAPITAL P
-	{0x2119, 0x211D, prAL, gcLu},     //     [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R
-	{0x211E, 0x2120, prAL, gcSo},     //     [3] PRESCRIPTION TAKE..SERVICE MARK
-	{0x2121, 0x2122, prAI, gcSo},     //     [2] TELEPHONE SIGN..TRADE MARK SIGN
-	{0x2123, 0x2123, prAL, gcSo},     //         VERSICLE
-	{0x2124, 0x2124, prAL, gcLu},     //         DOUBLE-STRUCK CAPITAL Z
-	{0x2125, 0x2125, prAL, gcSo},     //         OUNCE SIGN
-	{0x2126, 0x2126, prAL, gcLu},     //         OHM SIGN
-	{0x2127, 0x2127, prAL, gcSo},     //         INVERTED OHM SIGN
-	{0x2128, 0x2128, prAL, gcLu},     //         BLACK-LETTER CAPITAL Z
-	{0x2129, 0x2129, prAL, gcSo},     //         TURNED GREEK SMALL LETTER IOTA
-	{0x212A, 0x212A, prAL, gcLu},     //         KELVIN SIGN
-	{0x212B, 0x212B, prAI, gcLu},     //         ANGSTROM SIGN
-	{0x212C, 0x212D, prAL, gcLu},     //     [2] SCRIPT CAPITAL B..BLACK-LETTER CAPITAL C
-	{0x212E, 0x212E, prAL, gcSo},     //         ESTIMATED SYMBOL
-	{0x212F, 0x2134, prAL, gcLC},     //     [6] SCRIPT SMALL E..SCRIPT SMALL O
-	{0x2135, 0x2138, prAL, gcLo},     //     [4] ALEF SYMBOL..DALET SYMBOL
-	{0x2139, 0x2139, prAL, gcLl},     //         INFORMATION SOURCE
-	{0x213A, 0x213B, prAL, gcSo},     //     [2] ROTATED CAPITAL Q..FACSIMILE SIGN
-	{0x213C, 0x213F, prAL, gcLC},     //     [4] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK CAPITAL PI
-	{0x2140, 0x2144, prAL, gcSm},     //     [5] DOUBLE-STRUCK N-ARY SUMMATION..TURNED SANS-SERIF CAPITAL Y
-	{0x2145, 0x2149, prAL, gcLC},     //     [5] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL J
-	{0x214A, 0x214A, prAL, gcSo},     //         PROPERTY LINE
-	{0x214B, 0x214B, prAL, gcSm},     //         TURNED AMPERSAND
-	{0x214C, 0x214D, prAL, gcSo},     //     [2] PER SIGN..AKTIESELSKAB
-	{0x214E, 0x214E, prAL, gcLl},     //         TURNED SMALL F
-	{0x214F, 0x214F, prAL, gcSo},     //         SYMBOL FOR SAMARITAN SOURCE
-	{0x2150, 0x2153, prAL, gcNo},     //     [4] VULGAR FRACTION ONE SEVENTH..VULGAR FRACTION ONE THIRD
-	{0x2154, 0x2155, prAI, gcNo},     //     [2] VULGAR FRACTION TWO THIRDS..VULGAR FRACTION ONE FIFTH
-	{0x2156, 0x215A, prAL, gcNo},     //     [5] VULGAR FRACTION TWO FIFTHS..VULGAR FRACTION FIVE SIXTHS
-	{0x215B, 0x215B, prAI, gcNo},     //         VULGAR FRACTION ONE EIGHTH
-	{0x215C, 0x215D, prAL, gcNo},     //     [2] VULGAR FRACTION THREE EIGHTHS..VULGAR FRACTION FIVE EIGHTHS
-	{0x215E, 0x215E, prAI, gcNo},     //         VULGAR FRACTION SEVEN EIGHTHS
-	{0x215F, 0x215F, prAL, gcNo},     //         FRACTION NUMERATOR ONE
-	{0x2160, 0x216B, prAI, gcNl},     //    [12] ROMAN NUMERAL ONE..ROMAN NUMERAL TWELVE
-	{0x216C, 0x216F, prAL, gcNl},     //     [4] ROMAN NUMERAL FIFTY..ROMAN NUMERAL ONE THOUSAND
-	{0x2170, 0x2179, prAI, gcNl},     //    [10] SMALL ROMAN NUMERAL ONE..SMALL ROMAN NUMERAL TEN
-	{0x217A, 0x2182, prAL, gcNl},     //     [9] SMALL ROMAN NUMERAL ELEVEN..ROMAN NUMERAL TEN THOUSAND
-	{0x2183, 0x2184, prAL, gcLC},     //     [2] ROMAN NUMERAL REVERSED ONE HUNDRED..LATIN SMALL LETTER REVERSED C
-	{0x2185, 0x2188, prAL, gcNl},     //     [4] ROMAN NUMERAL SIX LATE FORM..ROMAN NUMERAL ONE HUNDRED THOUSAND
-	{0x2189, 0x2189, prAI, gcNo},     //         VULGAR FRACTION ZERO THIRDS
-	{0x218A, 0x218B, prAL, gcSo},     //     [2] TURNED DIGIT TWO..TURNED DIGIT THREE
-	{0x2190, 0x2194, prAI, gcSm},     //     [5] LEFTWARDS ARROW..LEFT RIGHT ARROW
-	{0x2195, 0x2199, prAI, gcSo},     //     [5] UP DOWN ARROW..SOUTH WEST ARROW
-	{0x219A, 0x219B, prAL, gcSm},     //     [2] LEFTWARDS ARROW WITH STROKE..RIGHTWARDS ARROW WITH STROKE
-	{0x219C, 0x219F, prAL, gcSo},     //     [4] LEFTWARDS WAVE ARROW..UPWARDS TWO HEADED ARROW
-	{0x21A0, 0x21A0, prAL, gcSm},     //         RIGHTWARDS TWO HEADED ARROW
-	{0x21A1, 0x21A2, prAL, gcSo},     //     [2] DOWNWARDS TWO HEADED ARROW..LEFTWARDS ARROW WITH TAIL
-	{0x21A3, 0x21A3, prAL, gcSm},     //         RIGHTWARDS ARROW WITH TAIL
-	{0x21A4, 0x21A5, prAL, gcSo},     //     [2] LEFTWARDS ARROW FROM BAR..UPWARDS ARROW FROM BAR
-	{0x21A6, 0x21A6, prAL, gcSm},     //         RIGHTWARDS ARROW FROM BAR
-	{0x21A7, 0x21AD, prAL, gcSo},     //     [7] DOWNWARDS ARROW FROM BAR..LEFT RIGHT WAVE ARROW
-	{0x21AE, 0x21AE, prAL, gcSm},     //         LEFT RIGHT ARROW WITH STROKE
-	{0x21AF, 0x21CD, prAL, gcSo},     //    [31] DOWNWARDS ZIGZAG ARROW..LEFTWARDS DOUBLE ARROW WITH STROKE
-	{0x21CE, 0x21CF, prAL, gcSm},     //     [2] LEFT RIGHT DOUBLE ARROW WITH STROKE..RIGHTWARDS DOUBLE ARROW WITH STROKE
-	{0x21D0, 0x21D1, prAL, gcSo},     //     [2] LEFTWARDS DOUBLE ARROW..UPWARDS DOUBLE ARROW
-	{0x21D2, 0x21D2, prAI, gcSm},     //         RIGHTWARDS DOUBLE ARROW
-	{0x21D3, 0x21D3, prAL, gcSo},     //         DOWNWARDS DOUBLE ARROW
-	{0x21D4, 0x21D4, prAI, gcSm},     //         LEFT RIGHT DOUBLE ARROW
-	{0x21D5, 0x21F3, prAL, gcSo},     //    [31] UP DOWN DOUBLE ARROW..UP DOWN WHITE ARROW
-	{0x21F4, 0x21FF, prAL, gcSm},     //    [12] RIGHT ARROW WITH SMALL CIRCLE..LEFT RIGHT OPEN-HEADED ARROW
-	{0x2200, 0x2200, prAI, gcSm},     //         FOR ALL
-	{0x2201, 0x2201, prAL, gcSm},     //         COMPLEMENT
-	{0x2202, 0x2203, prAI, gcSm},     //     [2] PARTIAL DIFFERENTIAL..THERE EXISTS
-	{0x2204, 0x2206, prAL, gcSm},     //     [3] THERE DOES NOT EXIST..INCREMENT
-	{0x2207, 0x2208, prAI, gcSm},     //     [2] NABLA..ELEMENT OF
-	{0x2209, 0x220A, prAL, gcSm},     //     [2] NOT AN ELEMENT OF..SMALL ELEMENT OF
-	{0x220B, 0x220B, prAI, gcSm},     //         CONTAINS AS MEMBER
-	{0x220C, 0x220E, prAL, gcSm},     //     [3] DOES NOT CONTAIN AS MEMBER..END OF PROOF
-	{0x220F, 0x220F, prAI, gcSm},     //         N-ARY PRODUCT
-	{0x2210, 0x2210, prAL, gcSm},     //         N-ARY COPRODUCT
-	{0x2211, 0x2211, prAI, gcSm},     //         N-ARY SUMMATION
-	{0x2212, 0x2213, prPR, gcSm},     //     [2] MINUS SIGN..MINUS-OR-PLUS SIGN
-	{0x2214, 0x2214, prAL, gcSm},     //         DOT PLUS
-	{0x2215, 0x2215, prAI, gcSm},     //         DIVISION SLASH
-	{0x2216, 0x2219, prAL, gcSm},     //     [4] SET MINUS..BULLET OPERATOR
-	{0x221A, 0x221A, prAI, gcSm},     //         SQUARE ROOT
-	{0x221B, 0x221C, prAL, gcSm},     //     [2] CUBE ROOT..FOURTH ROOT
-	{0x221D, 0x2220, prAI, gcSm},     //     [4] PROPORTIONAL TO..ANGLE
-	{0x2221, 0x2222, prAL, gcSm},     //     [2] MEASURED ANGLE..SPHERICAL ANGLE
-	{0x2223, 0x2223, prAI, gcSm},     //         DIVIDES
-	{0x2224, 0x2224, prAL, gcSm},     //         DOES NOT DIVIDE
-	{0x2225, 0x2225, prAI, gcSm},     //         PARALLEL TO
-	{0x2226, 0x2226, prAL, gcSm},     //         NOT PARALLEL TO
-	{0x2227, 0x222C, prAI, gcSm},     //     [6] LOGICAL AND..DOUBLE INTEGRAL
-	{0x222D, 0x222D, prAL, gcSm},     //         TRIPLE INTEGRAL
-	{0x222E, 0x222E, prAI, gcSm},     //         CONTOUR INTEGRAL
-	{0x222F, 0x2233, prAL, gcSm},     //     [5] SURFACE INTEGRAL..ANTICLOCKWISE CONTOUR INTEGRAL
-	{0x2234, 0x2237, prAI, gcSm},     //     [4] THEREFORE..PROPORTION
-	{0x2238, 0x223B, prAL, gcSm},     //     [4] DOT MINUS..HOMOTHETIC
-	{0x223C, 0x223D, prAI, gcSm},     //     [2] TILDE OPERATOR..REVERSED TILDE
-	{0x223E, 0x2247, prAL, gcSm},     //    [10] INVERTED LAZY S..NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO
-	{0x2248, 0x2248, prAI, gcSm},     //         ALMOST EQUAL TO
-	{0x2249, 0x224B, prAL, gcSm},     //     [3] NOT ALMOST EQUAL TO..TRIPLE TILDE
-	{0x224C, 0x224C, prAI, gcSm},     //         ALL EQUAL TO
-	{0x224D, 0x2251, prAL, gcSm},     //     [5] EQUIVALENT TO..GEOMETRICALLY EQUAL TO
-	{0x2252, 0x2252, prAI, gcSm},     //         APPROXIMATELY EQUAL TO OR THE IMAGE OF
-	{0x2253, 0x225F, prAL, gcSm},     //    [13] IMAGE OF OR APPROXIMATELY EQUAL TO..QUESTIONED EQUAL TO
-	{0x2260, 0x2261, prAI, gcSm},     //     [2] NOT EQUAL TO..IDENTICAL TO
-	{0x2262, 0x2263, prAL, gcSm},     //     [2] NOT IDENTICAL TO..STRICTLY EQUIVALENT TO
-	{0x2264, 0x2267, prAI, gcSm},     //     [4] LESS-THAN OR EQUAL TO..GREATER-THAN OVER EQUAL TO
-	{0x2268, 0x2269, prAL, gcSm},     //     [2] LESS-THAN BUT NOT EQUAL TO..GREATER-THAN BUT NOT EQUAL TO
-	{0x226A, 0x226B, prAI, gcSm},     //     [2] MUCH LESS-THAN..MUCH GREATER-THAN
-	{0x226C, 0x226D, prAL, gcSm},     //     [2] BETWEEN..NOT EQUIVALENT TO
-	{0x226E, 0x226F, prAI, gcSm},     //     [2] NOT LESS-THAN..NOT GREATER-THAN
-	{0x2270, 0x2281, prAL, gcSm},     //    [18] NEITHER LESS-THAN NOR EQUAL TO..DOES NOT SUCCEED
-	{0x2282, 0x2283, prAI, gcSm},     //     [2] SUBSET OF..SUPERSET OF
-	{0x2284, 0x2285, prAL, gcSm},     //     [2] NOT A SUBSET OF..NOT A SUPERSET OF
-	{0x2286, 0x2287, prAI, gcSm},     //     [2] SUBSET OF OR EQUAL TO..SUPERSET OF OR EQUAL TO
-	{0x2288, 0x2294, prAL, gcSm},     //    [13] NEITHER A SUBSET OF NOR EQUAL TO..SQUARE CUP
-	{0x2295, 0x2295, prAI, gcSm},     //         CIRCLED PLUS
-	{0x2296, 0x2298, prAL, gcSm},     //     [3] CIRCLED MINUS..CIRCLED DIVISION SLASH
-	{0x2299, 0x2299, prAI, gcSm},     //         CIRCLED DOT OPERATOR
-	{0x229A, 0x22A4, prAL, gcSm},     //    [11] CIRCLED RING OPERATOR..DOWN TACK
-	{0x22A5, 0x22A5, prAI, gcSm},     //         UP TACK
-	{0x22A6, 0x22BE, prAL, gcSm},     //    [25] ASSERTION..RIGHT ANGLE WITH ARC
-	{0x22BF, 0x22BF, prAI, gcSm},     //         RIGHT TRIANGLE
-	{0x22C0, 0x22EE, prAL, gcSm},     //    [47] N-ARY LOGICAL AND..VERTICAL ELLIPSIS
-	{0x22EF, 0x22EF, prIN, gcSm},     //         MIDLINE HORIZONTAL ELLIPSIS
-	{0x22F0, 0x22FF, prAL, gcSm},     //    [16] UP RIGHT DIAGONAL ELLIPSIS..Z NOTATION BAG MEMBERSHIP
-	{0x2300, 0x2307, prAL, gcSo},     //     [8] DIAMETER SIGN..WAVY LINE
-	{0x2308, 0x2308, prOP, gcPs},     //         LEFT CEILING
-	{0x2309, 0x2309, prCL, gcPe},     //         RIGHT CEILING
-	{0x230A, 0x230A, prOP, gcPs},     //         LEFT FLOOR
-	{0x230B, 0x230B, prCL, gcPe},     //         RIGHT FLOOR
-	{0x230C, 0x2311, prAL, gcSo},     //     [6] BOTTOM RIGHT CROP..SQUARE LOZENGE
-	{0x2312, 0x2312, prAI, gcSo},     //         ARC
-	{0x2313, 0x2319, prAL, gcSo},     //     [7] SEGMENT..TURNED NOT SIGN
-	{0x231A, 0x231B, prID, gcSo},     //     [2] WATCH..HOURGLASS
-	{0x231C, 0x231F, prAL, gcSo},     //     [4] TOP LEFT CORNER..BOTTOM RIGHT CORNER
-	{0x2320, 0x2321, prAL, gcSm},     //     [2] TOP HALF INTEGRAL..BOTTOM HALF INTEGRAL
-	{0x2322, 0x2328, prAL, gcSo},     //     [7] FROWN..KEYBOARD
-	{0x2329, 0x2329, prOP, gcPs},     //         LEFT-POINTING ANGLE BRACKET
-	{0x232A, 0x232A, prCL, gcPe},     //         RIGHT-POINTING ANGLE BRACKET
-	{0x232B, 0x237B, prAL, gcSo},     //    [81] ERASE TO THE LEFT..NOT CHECK MARK
-	{0x237C, 0x237C, prAL, gcSm},     //         RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW
-	{0x237D, 0x239A, prAL, gcSo},     //    [30] SHOULDERED OPEN BOX..CLEAR SCREEN SYMBOL
-	{0x239B, 0x23B3, prAL, gcSm},     //    [25] LEFT PARENTHESIS UPPER HOOK..SUMMATION BOTTOM
-	{0x23B4, 0x23DB, prAL, gcSo},     //    [40] TOP SQUARE BRACKET..FUSE
-	{0x23DC, 0x23E1, prAL, gcSm},     //     [6] TOP PARENTHESIS..BOTTOM TORTOISE SHELL BRACKET
-	{0x23E2, 0x23EF, prAL, gcSo},     //    [14] WHITE TRAPEZIUM..BLACK RIGHT-POINTING TRIANGLE WITH DOUBLE VERTICAL BAR
-	{0x23F0, 0x23F3, prID, gcSo},     //     [4] ALARM CLOCK..HOURGLASS WITH FLOWING SAND
-	{0x23F4, 0x23FF, prAL, gcSo},     //    [12] BLACK MEDIUM LEFT-POINTING TRIANGLE..OBSERVER EYE SYMBOL
-	{0x2400, 0x2426, prAL, gcSo},     //    [39] SYMBOL FOR NULL..SYMBOL FOR SUBSTITUTE FORM TWO
-	{0x2440, 0x244A, prAL, gcSo},     //    [11] OCR HOOK..OCR DOUBLE BACKSLASH
-	{0x2460, 0x249B, prAI, gcNo},     //    [60] CIRCLED DIGIT ONE..NUMBER TWENTY FULL STOP
-	{0x249C, 0x24E9, prAI, gcSo},     //    [78] PARENTHESIZED LATIN SMALL LETTER A..CIRCLED LATIN SMALL LETTER Z
-	{0x24EA, 0x24FE, prAI, gcNo},     //    [21] CIRCLED DIGIT ZERO..DOUBLE CIRCLED NUMBER TEN
-	{0x24FF, 0x24FF, prAL, gcNo},     //         NEGATIVE CIRCLED DIGIT ZERO
-	{0x2500, 0x254B, prAI, gcSo},     //    [76] BOX DRAWINGS LIGHT HORIZONTAL..BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL
-	{0x254C, 0x254F, prAL, gcSo},     //     [4] BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL..BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL
-	{0x2550, 0x2574, prAI, gcSo},     //    [37] BOX DRAWINGS DOUBLE HORIZONTAL..BOX DRAWINGS LIGHT LEFT
-	{0x2575, 0x257F, prAL, gcSo},     //    [11] BOX DRAWINGS LIGHT UP..BOX DRAWINGS HEAVY UP AND LIGHT DOWN
-	{0x2580, 0x258F, prAI, gcSo},     //    [16] UPPER HALF BLOCK..LEFT ONE EIGHTH BLOCK
-	{0x2590, 0x2591, prAL, gcSo},     //     [2] RIGHT HALF BLOCK..LIGHT SHADE
-	{0x2592, 0x2595, prAI, gcSo},     //     [4] MEDIUM SHADE..RIGHT ONE EIGHTH BLOCK
-	{0x2596, 0x259F, prAL, gcSo},     //    [10] QUADRANT LOWER LEFT..QUADRANT UPPER RIGHT AND LOWER LEFT AND LOWER RIGHT
-	{0x25A0, 0x25A1, prAI, gcSo},     //     [2] BLACK SQUARE..WHITE SQUARE
-	{0x25A2, 0x25A2, prAL, gcSo},     //         WHITE SQUARE WITH ROUNDED CORNERS
-	{0x25A3, 0x25A9, prAI, gcSo},     //     [7] WHITE SQUARE CONTAINING BLACK SMALL SQUARE..SQUARE WITH DIAGONAL CROSSHATCH FILL
-	{0x25AA, 0x25B1, prAL, gcSo},     //     [8] BLACK SMALL SQUARE..WHITE PARALLELOGRAM
-	{0x25B2, 0x25B3, prAI, gcSo},     //     [2] BLACK UP-POINTING TRIANGLE..WHITE UP-POINTING TRIANGLE
-	{0x25B4, 0x25B5, prAL, gcSo},     //     [2] BLACK UP-POINTING SMALL TRIANGLE..WHITE UP-POINTING SMALL TRIANGLE
-	{0x25B6, 0x25B6, prAI, gcSo},     //         BLACK RIGHT-POINTING TRIANGLE
-	{0x25B7, 0x25B7, prAI, gcSm},     //         WHITE RIGHT-POINTING TRIANGLE
-	{0x25B8, 0x25BB, prAL, gcSo},     //     [4] BLACK RIGHT-POINTING SMALL TRIANGLE..WHITE RIGHT-POINTING POINTER
-	{0x25BC, 0x25BD, prAI, gcSo},     //     [2] BLACK DOWN-POINTING TRIANGLE..WHITE DOWN-POINTING TRIANGLE
-	{0x25BE, 0x25BF, prAL, gcSo},     //     [2] BLACK DOWN-POINTING SMALL TRIANGLE..WHITE DOWN-POINTING SMALL TRIANGLE
-	{0x25C0, 0x25C0, prAI, gcSo},     //         BLACK LEFT-POINTING TRIANGLE
-	{0x25C1, 0x25C1, prAI, gcSm},     //         WHITE LEFT-POINTING TRIANGLE
-	{0x25C2, 0x25C5, prAL, gcSo},     //     [4] BLACK LEFT-POINTING SMALL TRIANGLE..WHITE LEFT-POINTING POINTER
-	{0x25C6, 0x25C8, prAI, gcSo},     //     [3] BLACK DIAMOND..WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND
-	{0x25C9, 0x25CA, prAL, gcSo},     //     [2] FISHEYE..LOZENGE
-	{0x25CB, 0x25CB, prAI, gcSo},     //         WHITE CIRCLE
-	{0x25CC, 0x25CD, prAL, gcSo},     //     [2] DOTTED CIRCLE..CIRCLE WITH VERTICAL FILL
-	{0x25CE, 0x25D1, prAI, gcSo},     //     [4] BULLSEYE..CIRCLE WITH RIGHT HALF BLACK
-	{0x25D2, 0x25E1, prAL, gcSo},     //    [16] CIRCLE WITH LOWER HALF BLACK..LOWER HALF CIRCLE
-	{0x25E2, 0x25E5, prAI, gcSo},     //     [4] BLACK LOWER RIGHT TRIANGLE..BLACK UPPER RIGHT TRIANGLE
-	{0x25E6, 0x25EE, prAL, gcSo},     //     [9] WHITE BULLET..UP-POINTING TRIANGLE WITH RIGHT HALF BLACK
-	{0x25EF, 0x25EF, prAI, gcSo},     //         LARGE CIRCLE
-	{0x25F0, 0x25F7, prAL, gcSo},     //     [8] WHITE SQUARE WITH UPPER LEFT QUADRANT..WHITE CIRCLE WITH UPPER RIGHT QUADRANT
-	{0x25F8, 0x25FF, prAL, gcSm},     //     [8] UPPER LEFT TRIANGLE..LOWER RIGHT TRIANGLE
-	{0x2600, 0x2603, prID, gcSo},     //     [4] BLACK SUN WITH RAYS..SNOWMAN
-	{0x2604, 0x2604, prAL, gcSo},     //         COMET
-	{0x2605, 0x2606, prAI, gcSo},     //     [2] BLACK STAR..WHITE STAR
-	{0x2607, 0x2608, prAL, gcSo},     //     [2] LIGHTNING..THUNDERSTORM
-	{0x2609, 0x2609, prAI, gcSo},     //         SUN
-	{0x260A, 0x260D, prAL, gcSo},     //     [4] ASCENDING NODE..OPPOSITION
-	{0x260E, 0x260F, prAI, gcSo},     //     [2] BLACK TELEPHONE..WHITE TELEPHONE
-	{0x2610, 0x2613, prAL, gcSo},     //     [4] BALLOT BOX..SALTIRE
-	{0x2614, 0x2615, prID, gcSo},     //     [2] UMBRELLA WITH RAIN DROPS..HOT BEVERAGE
-	{0x2616, 0x2617, prAI, gcSo},     //     [2] WHITE SHOGI PIECE..BLACK SHOGI PIECE
-	{0x2618, 0x2618, prID, gcSo},     //         SHAMROCK
-	{0x2619, 0x2619, prAL, gcSo},     //         REVERSED ROTATED FLORAL HEART BULLET
-	{0x261A, 0x261C, prID, gcSo},     //     [3] BLACK LEFT POINTING INDEX..WHITE LEFT POINTING INDEX
-	{0x261D, 0x261D, prEB, gcSo},     //         WHITE UP POINTING INDEX
-	{0x261E, 0x261F, prID, gcSo},     //     [2] WHITE RIGHT POINTING INDEX..WHITE DOWN POINTING INDEX
-	{0x2620, 0x2638, prAL, gcSo},     //    [25] SKULL AND CROSSBONES..WHEEL OF DHARMA
-	{0x2639, 0x263B, prID, gcSo},     //     [3] WHITE FROWNING FACE..BLACK SMILING FACE
-	{0x263C, 0x263F, prAL, gcSo},     //     [4] WHITE SUN WITH RAYS..MERCURY
-	{0x2640, 0x2640, prAI, gcSo},     //         FEMALE SIGN
-	{0x2641, 0x2641, prAL, gcSo},     //         EARTH
-	{0x2642, 0x2642, prAI, gcSo},     //         MALE SIGN
-	{0x2643, 0x265F, prAL, gcSo},     //    [29] JUPITER..BLACK CHESS PAWN
-	{0x2660, 0x2661, prAI, gcSo},     //     [2] BLACK SPADE SUIT..WHITE HEART SUIT
-	{0x2662, 0x2662, prAL, gcSo},     //         WHITE DIAMOND SUIT
-	{0x2663, 0x2665, prAI, gcSo},     //     [3] BLACK CLUB SUIT..BLACK HEART SUIT
-	{0x2666, 0x2666, prAL, gcSo},     //         BLACK DIAMOND SUIT
-	{0x2667, 0x2667, prAI, gcSo},     //         WHITE CLUB SUIT
-	{0x2668, 0x2668, prID, gcSo},     //         HOT SPRINGS
-	{0x2669, 0x266A, prAI, gcSo},     //     [2] QUARTER NOTE..EIGHTH NOTE
-	{0x266B, 0x266B, prAL, gcSo},     //         BEAMED EIGHTH NOTES
-	{0x266C, 0x266D, prAI, gcSo},     //     [2] BEAMED SIXTEENTH NOTES..MUSIC FLAT SIGN
-	{0x266E, 0x266E, prAL, gcSo},     //         MUSIC NATURAL SIGN
-	{0x266F, 0x266F, prAI, gcSm},     //         MUSIC SHARP SIGN
-	{0x2670, 0x267E, prAL, gcSo},     //    [15] WEST SYRIAC CROSS..PERMANENT PAPER SIGN
-	{0x267F, 0x267F, prID, gcSo},     //         WHEELCHAIR SYMBOL
-	{0x2680, 0x269D, prAL, gcSo},     //    [30] DIE FACE-1..OUTLINED WHITE STAR
-	{0x269E, 0x269F, prAI, gcSo},     //     [2] THREE LINES CONVERGING RIGHT..THREE LINES CONVERGING LEFT
-	{0x26A0, 0x26BC, prAL, gcSo},     //    [29] WARNING SIGN..SESQUIQUADRATE
-	{0x26BD, 0x26C8, prID, gcSo},     //    [12] SOCCER BALL..THUNDER CLOUD AND RAIN
-	{0x26C9, 0x26CC, prAI, gcSo},     //     [4] TURNED WHITE SHOGI PIECE..CROSSING LANES
-	{0x26CD, 0x26CD, prID, gcSo},     //         DISABLED CAR
-	{0x26CE, 0x26CE, prAL, gcSo},     //         OPHIUCHUS
-	{0x26CF, 0x26D1, prID, gcSo},     //     [3] PICK..HELMET WITH WHITE CROSS
-	{0x26D2, 0x26D2, prAI, gcSo},     //         CIRCLED CROSSING LANES
-	{0x26D3, 0x26D4, prID, gcSo},     //     [2] CHAINS..NO ENTRY
-	{0x26D5, 0x26D7, prAI, gcSo},     //     [3] ALTERNATE ONE-WAY LEFT WAY TRAFFIC..WHITE TWO-WAY LEFT WAY TRAFFIC
-	{0x26D8, 0x26D9, prID, gcSo},     //     [2] BLACK LEFT LANE MERGE..WHITE LEFT LANE MERGE
-	{0x26DA, 0x26DB, prAI, gcSo},     //     [2] DRIVE SLOW SIGN..HEAVY WHITE DOWN-POINTING TRIANGLE
-	{0x26DC, 0x26DC, prID, gcSo},     //         LEFT CLOSED ENTRY
-	{0x26DD, 0x26DE, prAI, gcSo},     //     [2] SQUARED SALTIRE..FALLING DIAGONAL IN WHITE CIRCLE IN BLACK SQUARE
-	{0x26DF, 0x26E1, prID, gcSo},     //     [3] BLACK TRUCK..RESTRICTED LEFT ENTRY-2
-	{0x26E2, 0x26E2, prAL, gcSo},     //         ASTRONOMICAL SYMBOL FOR URANUS
-	{0x26E3, 0x26E3, prAI, gcSo},     //         HEAVY CIRCLE WITH STROKE AND TWO DOTS ABOVE
-	{0x26E4, 0x26E7, prAL, gcSo},     //     [4] PENTAGRAM..INVERTED PENTAGRAM
-	{0x26E8, 0x26E9, prAI, gcSo},     //     [2] BLACK CROSS ON SHIELD..SHINTO SHRINE
-	{0x26EA, 0x26EA, prID, gcSo},     //         CHURCH
-	{0x26EB, 0x26F0, prAI, gcSo},     //     [6] CASTLE..MOUNTAIN
-	{0x26F1, 0x26F5, prID, gcSo},     //     [5] UMBRELLA ON GROUND..SAILBOAT
-	{0x26F6, 0x26F6, prAI, gcSo},     //         SQUARE FOUR CORNERS
-	{0x26F7, 0x26F8, prID, gcSo},     //     [2] SKIER..ICE SKATE
-	{0x26F9, 0x26F9, prEB, gcSo},     //         PERSON WITH BALL
-	{0x26FA, 0x26FA, prID, gcSo},     //         TENT
-	{0x26FB, 0x26FC, prAI, gcSo},     //     [2] JAPANESE BANK SYMBOL..HEADSTONE GRAVEYARD SYMBOL
-	{0x26FD, 0x26FF, prID, gcSo},     //     [3] FUEL PUMP..WHITE FLAG WITH HORIZONTAL MIDDLE BLACK STRIPE
-	{0x2700, 0x2704, prID, gcSo},     //     [5] BLACK SAFETY SCISSORS..WHITE SCISSORS
-	{0x2705, 0x2707, prAL, gcSo},     //     [3] WHITE HEAVY CHECK MARK..TAPE DRIVE
-	{0x2708, 0x2709, prID, gcSo},     //     [2] AIRPLANE..ENVELOPE
-	{0x270A, 0x270D, prEB, gcSo},     //     [4] RAISED FIST..WRITING HAND
-	{0x270E, 0x2756, prAL, gcSo},     //    [73] LOWER RIGHT PENCIL..BLACK DIAMOND MINUS WHITE X
-	{0x2757, 0x2757, prAI, gcSo},     //         HEAVY EXCLAMATION MARK SYMBOL
-	{0x2758, 0x275A, prAL, gcSo},     //     [3] LIGHT VERTICAL BAR..HEAVY VERTICAL BAR
-	{0x275B, 0x2760, prQU, gcSo},     //     [6] HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT..HEAVY LOW DOUBLE COMMA QUOTATION MARK ORNAMENT
-	{0x2761, 0x2761, prAL, gcSo},     //         CURVED STEM PARAGRAPH SIGN ORNAMENT
-	{0x2762, 0x2763, prEX, gcSo},     //     [2] HEAVY EXCLAMATION MARK ORNAMENT..HEAVY HEART EXCLAMATION MARK ORNAMENT
-	{0x2764, 0x2764, prID, gcSo},     //         HEAVY BLACK HEART
-	{0x2765, 0x2767, prAL, gcSo},     //     [3] ROTATED HEAVY BLACK HEART BULLET..ROTATED FLORAL HEART BULLET
-	{0x2768, 0x2768, prOP, gcPs},     //         MEDIUM LEFT PARENTHESIS ORNAMENT
-	{0x2769, 0x2769, prCL, gcPe},     //         MEDIUM RIGHT PARENTHESIS ORNAMENT
-	{0x276A, 0x276A, prOP, gcPs},     //         MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT
-	{0x276B, 0x276B, prCL, gcPe},     //         MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT
-	{0x276C, 0x276C, prOP, gcPs},     //         MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT
-	{0x276D, 0x276D, prCL, gcPe},     //         MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT
-	{0x276E, 0x276E, prOP, gcPs},     //         HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT
-	{0x276F, 0x276F, prCL, gcPe},     //         HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT
-	{0x2770, 0x2770, prOP, gcPs},     //         HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT
-	{0x2771, 0x2771, prCL, gcPe},     //         HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT
-	{0x2772, 0x2772, prOP, gcPs},     //         LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT
-	{0x2773, 0x2773, prCL, gcPe},     //         LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT
-	{0x2774, 0x2774, prOP, gcPs},     //         MEDIUM LEFT CURLY BRACKET ORNAMENT
-	{0x2775, 0x2775, prCL, gcPe},     //         MEDIUM RIGHT CURLY BRACKET ORNAMENT
-	{0x2776, 0x2793, prAI, gcNo},     //    [30] DINGBAT NEGATIVE CIRCLED DIGIT ONE..DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN
-	{0x2794, 0x27BF, prAL, gcSo},     //    [44] HEAVY WIDE-HEADED RIGHTWARDS ARROW..DOUBLE CURLY LOOP
-	{0x27C0, 0x27C4, prAL, gcSm},     //     [5] THREE DIMENSIONAL ANGLE..OPEN SUPERSET
-	{0x27C5, 0x27C5, prOP, gcPs},     //         LEFT S-SHAPED BAG DELIMITER
-	{0x27C6, 0x27C6, prCL, gcPe},     //         RIGHT S-SHAPED BAG DELIMITER
-	{0x27C7, 0x27E5, prAL, gcSm},     //    [31] OR WITH DOT INSIDE..WHITE SQUARE WITH RIGHTWARDS TICK
-	{0x27E6, 0x27E6, prOP, gcPs},     //         MATHEMATICAL LEFT WHITE SQUARE BRACKET
-	{0x27E7, 0x27E7, prCL, gcPe},     //         MATHEMATICAL RIGHT WHITE SQUARE BRACKET
-	{0x27E8, 0x27E8, prOP, gcPs},     //         MATHEMATICAL LEFT ANGLE BRACKET
-	{0x27E9, 0x27E9, prCL, gcPe},     //         MATHEMATICAL RIGHT ANGLE BRACKET
-	{0x27EA, 0x27EA, prOP, gcPs},     //         MATHEMATICAL LEFT DOUBLE ANGLE BRACKET
-	{0x27EB, 0x27EB, prCL, gcPe},     //         MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET
-	{0x27EC, 0x27EC, prOP, gcPs},     //         MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET
-	{0x27ED, 0x27ED, prCL, gcPe},     //         MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET
-	{0x27EE, 0x27EE, prOP, gcPs},     //         MATHEMATICAL LEFT FLATTENED PARENTHESIS
-	{0x27EF, 0x27EF, prCL, gcPe},     //         MATHEMATICAL RIGHT FLATTENED PARENTHESIS
-	{0x27F0, 0x27FF, prAL, gcSm},     //    [16] UPWARDS QUADRUPLE ARROW..LONG RIGHTWARDS SQUIGGLE ARROW
-	{0x2800, 0x28FF, prAL, gcSo},     //   [256] BRAILLE PATTERN BLANK..BRAILLE PATTERN DOTS-12345678
-	{0x2900, 0x297F, prAL, gcSm},     //   [128] RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE..DOWN FISH TAIL
-	{0x2980, 0x2982, prAL, gcSm},     //     [3] TRIPLE VERTICAL BAR DELIMITER..Z NOTATION TYPE COLON
-	{0x2983, 0x2983, prOP, gcPs},     //         LEFT WHITE CURLY BRACKET
-	{0x2984, 0x2984, prCL, gcPe},     //         RIGHT WHITE CURLY BRACKET
-	{0x2985, 0x2985, prOP, gcPs},     //         LEFT WHITE PARENTHESIS
-	{0x2986, 0x2986, prCL, gcPe},     //         RIGHT WHITE PARENTHESIS
-	{0x2987, 0x2987, prOP, gcPs},     //         Z NOTATION LEFT IMAGE BRACKET
-	{0x2988, 0x2988, prCL, gcPe},     //         Z NOTATION RIGHT IMAGE BRACKET
-	{0x2989, 0x2989, prOP, gcPs},     //         Z NOTATION LEFT BINDING BRACKET
-	{0x298A, 0x298A, prCL, gcPe},     //         Z NOTATION RIGHT BINDING BRACKET
-	{0x298B, 0x298B, prOP, gcPs},     //         LEFT SQUARE BRACKET WITH UNDERBAR
-	{0x298C, 0x298C, prCL, gcPe},     //         RIGHT SQUARE BRACKET WITH UNDERBAR
-	{0x298D, 0x298D, prOP, gcPs},     //         LEFT SQUARE BRACKET WITH TICK IN TOP CORNER
-	{0x298E, 0x298E, prCL, gcPe},     //         RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
-	{0x298F, 0x298F, prOP, gcPs},     //         LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
-	{0x2990, 0x2990, prCL, gcPe},     //         RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER
-	{0x2991, 0x2991, prOP, gcPs},     //         LEFT ANGLE BRACKET WITH DOT
-	{0x2992, 0x2992, prCL, gcPe},     //         RIGHT ANGLE BRACKET WITH DOT
-	{0x2993, 0x2993, prOP, gcPs},     //         LEFT ARC LESS-THAN BRACKET
-	{0x2994, 0x2994, prCL, gcPe},     //         RIGHT ARC GREATER-THAN BRACKET
-	{0x2995, 0x2995, prOP, gcPs},     //         DOUBLE LEFT ARC GREATER-THAN BRACKET
-	{0x2996, 0x2996, prCL, gcPe},     //         DOUBLE RIGHT ARC LESS-THAN BRACKET
-	{0x2997, 0x2997, prOP, gcPs},     //         LEFT BLACK TORTOISE SHELL BRACKET
-	{0x2998, 0x2998, prCL, gcPe},     //         RIGHT BLACK TORTOISE SHELL BRACKET
-	{0x2999, 0x29D7, prAL, gcSm},     //    [63] DOTTED FENCE..BLACK HOURGLASS
-	{0x29D8, 0x29D8, prOP, gcPs},     //         LEFT WIGGLY FENCE
-	{0x29D9, 0x29D9, prCL, gcPe},     //         RIGHT WIGGLY FENCE
-	{0x29DA, 0x29DA, prOP, gcPs},     //         LEFT DOUBLE WIGGLY FENCE
-	{0x29DB, 0x29DB, prCL, gcPe},     //         RIGHT DOUBLE WIGGLY FENCE
-	{0x29DC, 0x29FB, prAL, gcSm},     //    [32] INCOMPLETE INFINITY..TRIPLE PLUS
-	{0x29FC, 0x29FC, prOP, gcPs},     //         LEFT-POINTING CURVED ANGLE BRACKET
-	{0x29FD, 0x29FD, prCL, gcPe},     //         RIGHT-POINTING CURVED ANGLE BRACKET
-	{0x29FE, 0x29FF, prAL, gcSm},     //     [2] TINY..MINY
-	{0x2A00, 0x2AFF, prAL, gcSm},     //   [256] N-ARY CIRCLED DOT OPERATOR..N-ARY WHITE VERTICAL BAR
-	{0x2B00, 0x2B2F, prAL, gcSo},     //    [48] NORTH EAST WHITE ARROW..WHITE VERTICAL ELLIPSE
-	{0x2B30, 0x2B44, prAL, gcSm},     //    [21] LEFT ARROW WITH SMALL CIRCLE..RIGHTWARDS ARROW THROUGH SUPERSET
-	{0x2B45, 0x2B46, prAL, gcSo},     //     [2] LEFTWARDS QUADRUPLE ARROW..RIGHTWARDS QUADRUPLE ARROW
-	{0x2B47, 0x2B4C, prAL, gcSm},     //     [6] REVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROW..RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR
-	{0x2B4D, 0x2B54, prAL, gcSo},     //     [8] DOWNWARDS TRIANGLE-HEADED ZIGZAG ARROW..WHITE RIGHT-POINTING PENTAGON
-	{0x2B55, 0x2B59, prAI, gcSo},     //     [5] HEAVY LARGE CIRCLE..HEAVY CIRCLED SALTIRE
-	{0x2B5A, 0x2B73, prAL, gcSo},     //    [26] SLANTED NORTH ARROW WITH HOOKED HEAD..DOWNWARDS TRIANGLE-HEADED ARROW TO BAR
-	{0x2B76, 0x2B95, prAL, gcSo},     //    [32] NORTH WEST TRIANGLE-HEADED ARROW TO BAR..RIGHTWARDS BLACK ARROW
-	{0x2B97, 0x2BFF, prAL, gcSo},     //   [105] SYMBOL FOR TYPE A ELECTRONICS..HELLSCHREIBER PAUSE SYMBOL
-	{0x2C00, 0x2C5F, prAL, gcLC},     //    [96] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC SMALL LETTER CAUDATE CHRIVI
-	{0x2C60, 0x2C7B, prAL, gcLC},     //    [28] LATIN CAPITAL LETTER L WITH DOUBLE BAR..LATIN LETTER SMALL CAPITAL TURNED E
-	{0x2C7C, 0x2C7D, prAL, gcLm},     //     [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V
-	{0x2C7E, 0x2C7F, prAL, gcLu},     //     [2] LATIN CAPITAL LETTER S WITH SWASH TAIL..LATIN CAPITAL LETTER Z WITH SWASH TAIL
-	{0x2C80, 0x2CE4, prAL, gcLC},     //   [101] COPTIC CAPITAL LETTER ALFA..COPTIC SYMBOL KAI
-	{0x2CE5, 0x2CEA, prAL, gcSo},     //     [6] COPTIC SYMBOL MI RO..COPTIC SYMBOL SHIMA SIMA
-	{0x2CEB, 0x2CEE, prAL, gcLC},     //     [4] COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI..COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA
-	{0x2CEF, 0x2CF1, prCM, gcMn},     //     [3] COPTIC COMBINING NI ABOVE..COPTIC COMBINING SPIRITUS LENIS
-	{0x2CF2, 0x2CF3, prAL, gcLC},     //     [2] COPTIC CAPITAL LETTER BOHAIRIC KHEI..COPTIC SMALL LETTER BOHAIRIC KHEI
-	{0x2CF9, 0x2CF9, prEX, gcPo},     //         COPTIC OLD NUBIAN FULL STOP
-	{0x2CFA, 0x2CFC, prBA, gcPo},     //     [3] COPTIC OLD NUBIAN DIRECT QUESTION MARK..COPTIC OLD NUBIAN VERSE DIVIDER
-	{0x2CFD, 0x2CFD, prAL, gcNo},     //         COPTIC FRACTION ONE HALF
-	{0x2CFE, 0x2CFE, prEX, gcPo},     //         COPTIC FULL STOP
-	{0x2CFF, 0x2CFF, prBA, gcPo},     //         COPTIC MORPHOLOGICAL DIVIDER
-	{0x2D00, 0x2D25, prAL, gcLl},     //    [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE
-	{0x2D27, 0x2D27, prAL, gcLl},     //         GEORGIAN SMALL LETTER YN
-	{0x2D2D, 0x2D2D, prAL, gcLl},     //         GEORGIAN SMALL LETTER AEN
-	{0x2D30, 0x2D67, prAL, gcLo},     //    [56] TIFINAGH LETTER YA..TIFINAGH LETTER YO
-	{0x2D6F, 0x2D6F, prAL, gcLm},     //         TIFINAGH MODIFIER LETTER LABIALIZATION MARK
-	{0x2D70, 0x2D70, prBA, gcPo},     //         TIFINAGH SEPARATOR MARK
-	{0x2D7F, 0x2D7F, prCM, gcMn},     //         TIFINAGH CONSONANT JOINER
-	{0x2D80, 0x2D96, prAL, gcLo},     //    [23] ETHIOPIC SYLLABLE LOA..ETHIOPIC SYLLABLE GGWE
-	{0x2DA0, 0x2DA6, prAL, gcLo},     //     [7] ETHIOPIC SYLLABLE SSA..ETHIOPIC SYLLABLE SSO
-	{0x2DA8, 0x2DAE, prAL, gcLo},     //     [7] ETHIOPIC SYLLABLE CCA..ETHIOPIC SYLLABLE CCO
-	{0x2DB0, 0x2DB6, prAL, gcLo},     //     [7] ETHIOPIC SYLLABLE ZZA..ETHIOPIC SYLLABLE ZZO
-	{0x2DB8, 0x2DBE, prAL, gcLo},     //     [7] ETHIOPIC SYLLABLE CCHA..ETHIOPIC SYLLABLE CCHO
-	{0x2DC0, 0x2DC6, prAL, gcLo},     //     [7] ETHIOPIC SYLLABLE QYA..ETHIOPIC SYLLABLE QYO
-	{0x2DC8, 0x2DCE, prAL, gcLo},     //     [7] ETHIOPIC SYLLABLE KYA..ETHIOPIC SYLLABLE KYO
-	{0x2DD0, 0x2DD6, prAL, gcLo},     //     [7] ETHIOPIC SYLLABLE XYA..ETHIOPIC SYLLABLE XYO
-	{0x2DD8, 0x2DDE, prAL, gcLo},     //     [7] ETHIOPIC SYLLABLE GYA..ETHIOPIC SYLLABLE GYO
-	{0x2DE0, 0x2DFF, prCM, gcMn},     //    [32] COMBINING CYRILLIC LETTER BE..COMBINING CYRILLIC LETTER IOTIFIED BIG YUS
-	{0x2E00, 0x2E01, prQU, gcPo},     //     [2] RIGHT ANGLE SUBSTITUTION MARKER..RIGHT ANGLE DOTTED SUBSTITUTION MARKER
-	{0x2E02, 0x2E02, prQU, gcPi},     //         LEFT SUBSTITUTION BRACKET
-	{0x2E03, 0x2E03, prQU, gcPf},     //         RIGHT SUBSTITUTION BRACKET
-	{0x2E04, 0x2E04, prQU, gcPi},     //         LEFT DOTTED SUBSTITUTION BRACKET
-	{0x2E05, 0x2E05, prQU, gcPf},     //         RIGHT DOTTED SUBSTITUTION BRACKET
-	{0x2E06, 0x2E08, prQU, gcPo},     //     [3] RAISED INTERPOLATION MARKER..DOTTED TRANSPOSITION MARKER
-	{0x2E09, 0x2E09, prQU, gcPi},     //         LEFT TRANSPOSITION BRACKET
-	{0x2E0A, 0x2E0A, prQU, gcPf},     //         RIGHT TRANSPOSITION BRACKET
-	{0x2E0B, 0x2E0B, prQU, gcPo},     //         RAISED SQUARE
-	{0x2E0C, 0x2E0C, prQU, gcPi},     //         LEFT RAISED OMISSION BRACKET
-	{0x2E0D, 0x2E0D, prQU, gcPf},     //         RIGHT RAISED OMISSION BRACKET
-	{0x2E0E, 0x2E15, prBA, gcPo},     //     [8] EDITORIAL CORONIS..UPWARDS ANCORA
-	{0x2E16, 0x2E16, prAL, gcPo},     //         DOTTED RIGHT-POINTING ANGLE
-	{0x2E17, 0x2E17, prBA, gcPd},     //         DOUBLE OBLIQUE HYPHEN
-	{0x2E18, 0x2E18, prOP, gcPo},     //         INVERTED INTERROBANG
-	{0x2E19, 0x2E19, prBA, gcPo},     //         PALM BRANCH
-	{0x2E1A, 0x2E1A, prAL, gcPd},     //         HYPHEN WITH DIAERESIS
-	{0x2E1B, 0x2E1B, prAL, gcPo},     //         TILDE WITH RING ABOVE
-	{0x2E1C, 0x2E1C, prQU, gcPi},     //         LEFT LOW PARAPHRASE BRACKET
-	{0x2E1D, 0x2E1D, prQU, gcPf},     //         RIGHT LOW PARAPHRASE BRACKET
-	{0x2E1E, 0x2E1F, prAL, gcPo},     //     [2] TILDE WITH DOT ABOVE..TILDE WITH DOT BELOW
-	{0x2E20, 0x2E20, prQU, gcPi},     //         LEFT VERTICAL BAR WITH QUILL
-	{0x2E21, 0x2E21, prQU, gcPf},     //         RIGHT VERTICAL BAR WITH QUILL
-	{0x2E22, 0x2E22, prOP, gcPs},     //         TOP LEFT HALF BRACKET
-	{0x2E23, 0x2E23, prCL, gcPe},     //         TOP RIGHT HALF BRACKET
-	{0x2E24, 0x2E24, prOP, gcPs},     //         BOTTOM LEFT HALF BRACKET
-	{0x2E25, 0x2E25, prCL, gcPe},     //         BOTTOM RIGHT HALF BRACKET
-	{0x2E26, 0x2E26, prOP, gcPs},     //         LEFT SIDEWAYS U BRACKET
-	{0x2E27, 0x2E27, prCL, gcPe},     //         RIGHT SIDEWAYS U BRACKET
-	{0x2E28, 0x2E28, prOP, gcPs},     //         LEFT DOUBLE PARENTHESIS
-	{0x2E29, 0x2E29, prCL, gcPe},     //         RIGHT DOUBLE PARENTHESIS
-	{0x2E2A, 0x2E2D, prBA, gcPo},     //     [4] TWO DOTS OVER ONE DOT PUNCTUATION..FIVE DOT MARK
-	{0x2E2E, 0x2E2E, prEX, gcPo},     //         REVERSED QUESTION MARK
-	{0x2E2F, 0x2E2F, prAL, gcLm},     //         VERTICAL TILDE
-	{0x2E30, 0x2E31, prBA, gcPo},     //     [2] RING POINT..WORD SEPARATOR MIDDLE DOT
-	{0x2E32, 0x2E32, prAL, gcPo},     //         TURNED COMMA
-	{0x2E33, 0x2E34, prBA, gcPo},     //     [2] RAISED DOT..RAISED COMMA
-	{0x2E35, 0x2E39, prAL, gcPo},     //     [5] TURNED SEMICOLON..TOP HALF SECTION SIGN
-	{0x2E3A, 0x2E3B, prB2, gcPd},     //     [2] TWO-EM DASH..THREE-EM DASH
-	{0x2E3C, 0x2E3E, prBA, gcPo},     //     [3] STENOGRAPHIC FULL STOP..WIGGLY VERTICAL LINE
-	{0x2E3F, 0x2E3F, prAL, gcPo},     //         CAPITULUM
-	{0x2E40, 0x2E40, prBA, gcPd},     //         DOUBLE HYPHEN
-	{0x2E41, 0x2E41, prBA, gcPo},     //         REVERSED COMMA
-	{0x2E42, 0x2E42, prOP, gcPs},     //         DOUBLE LOW-REVERSED-9 QUOTATION MARK
-	{0x2E43, 0x2E4A, prBA, gcPo},     //     [8] DASH WITH LEFT UPTURN..DOTTED SOLIDUS
-	{0x2E4B, 0x2E4B, prAL, gcPo},     //         TRIPLE DAGGER
-	{0x2E4C, 0x2E4C, prBA, gcPo},     //         MEDIEVAL COMMA
-	{0x2E4D, 0x2E4D, prAL, gcPo},     //         PARAGRAPHUS MARK
-	{0x2E4E, 0x2E4F, prBA, gcPo},     //     [2] PUNCTUS ELEVATUS MARK..CORNISH VERSE DIVIDER
-	{0x2E50, 0x2E51, prAL, gcSo},     //     [2] CROSS PATTY WITH RIGHT CROSSBAR..CROSS PATTY WITH LEFT CROSSBAR
-	{0x2E52, 0x2E52, prAL, gcPo},     //         TIRONIAN SIGN CAPITAL ET
-	{0x2E53, 0x2E54, prEX, gcPo},     //     [2] MEDIEVAL EXCLAMATION MARK..MEDIEVAL QUESTION MARK
-	{0x2E55, 0x2E55, prOP, gcPs},     //         LEFT SQUARE BRACKET WITH STROKE
-	{0x2E56, 0x2E56, prCL, gcPe},     //         RIGHT SQUARE BRACKET WITH STROKE
-	{0x2E57, 0x2E57, prOP, gcPs},     //         LEFT SQUARE BRACKET WITH DOUBLE STROKE
-	{0x2E58, 0x2E58, prCL, gcPe},     //         RIGHT SQUARE BRACKET WITH DOUBLE STROKE
-	{0x2E59, 0x2E59, prOP, gcPs},     //         TOP HALF LEFT PARENTHESIS
-	{0x2E5A, 0x2E5A, prCL, gcPe},     //         TOP HALF RIGHT PARENTHESIS
-	{0x2E5B, 0x2E5B, prOP, gcPs},     //         BOTTOM HALF LEFT PARENTHESIS
-	{0x2E5C, 0x2E5C, prCL, gcPe},     //         BOTTOM HALF RIGHT PARENTHESIS
-	{0x2E5D, 0x2E5D, prBA, gcPd},     //         OBLIQUE HYPHEN
-	{0x2E80, 0x2E99, prID, gcSo},     //    [26] CJK RADICAL REPEAT..CJK RADICAL RAP
-	{0x2E9B, 0x2EF3, prID, gcSo},     //    [89] CJK RADICAL CHOKE..CJK RADICAL C-SIMPLIFIED TURTLE
-	{0x2F00, 0x2FD5, prID, gcSo},     //   [214] KANGXI RADICAL ONE..KANGXI RADICAL FLUTE
-	{0x2FF0, 0x2FFB, prID, gcSo},     //    [12] IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT..IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID
-	{0x3000, 0x3000, prBA, gcZs},     //         IDEOGRAPHIC SPACE
-	{0x3001, 0x3002, prCL, gcPo},     //     [2] IDEOGRAPHIC COMMA..IDEOGRAPHIC FULL STOP
-	{0x3003, 0x3003, prID, gcPo},     //         DITTO MARK
-	{0x3004, 0x3004, prID, gcSo},     //         JAPANESE INDUSTRIAL STANDARD SYMBOL
-	{0x3005, 0x3005, prNS, gcLm},     //         IDEOGRAPHIC ITERATION MARK
-	{0x3006, 0x3006, prID, gcLo},     //         IDEOGRAPHIC CLOSING MARK
-	{0x3007, 0x3007, prID, gcNl},     //         IDEOGRAPHIC NUMBER ZERO
-	{0x3008, 0x3008, prOP, gcPs},     //         LEFT ANGLE BRACKET
-	{0x3009, 0x3009, prCL, gcPe},     //         RIGHT ANGLE BRACKET
-	{0x300A, 0x300A, prOP, gcPs},     //         LEFT DOUBLE ANGLE BRACKET
-	{0x300B, 0x300B, prCL, gcPe},     //         RIGHT DOUBLE ANGLE BRACKET
-	{0x300C, 0x300C, prOP, gcPs},     //         LEFT CORNER BRACKET
-	{0x300D, 0x300D, prCL, gcPe},     //         RIGHT CORNER BRACKET
-	{0x300E, 0x300E, prOP, gcPs},     //         LEFT WHITE CORNER BRACKET
-	{0x300F, 0x300F, prCL, gcPe},     //         RIGHT WHITE CORNER BRACKET
-	{0x3010, 0x3010, prOP, gcPs},     //         LEFT BLACK LENTICULAR BRACKET
-	{0x3011, 0x3011, prCL, gcPe},     //         RIGHT BLACK LENTICULAR BRACKET
-	{0x3012, 0x3013, prID, gcSo},     //     [2] POSTAL MARK..GETA MARK
-	{0x3014, 0x3014, prOP, gcPs},     //         LEFT TORTOISE SHELL BRACKET
-	{0x3015, 0x3015, prCL, gcPe},     //         RIGHT TORTOISE SHELL BRACKET
-	{0x3016, 0x3016, prOP, gcPs},     //         LEFT WHITE LENTICULAR BRACKET
-	{0x3017, 0x3017, prCL, gcPe},     //         RIGHT WHITE LENTICULAR BRACKET
-	{0x3018, 0x3018, prOP, gcPs},     //         LEFT WHITE TORTOISE SHELL BRACKET
-	{0x3019, 0x3019, prCL, gcPe},     //         RIGHT WHITE TORTOISE SHELL BRACKET
-	{0x301A, 0x301A, prOP, gcPs},     //         LEFT WHITE SQUARE BRACKET
-	{0x301B, 0x301B, prCL, gcPe},     //         RIGHT WHITE SQUARE BRACKET
-	{0x301C, 0x301C, prNS, gcPd},     //         WAVE DASH
-	{0x301D, 0x301D, prOP, gcPs},     //         REVERSED DOUBLE PRIME QUOTATION MARK
-	{0x301E, 0x301F, prCL, gcPe},     //     [2] DOUBLE PRIME QUOTATION MARK..LOW DOUBLE PRIME QUOTATION MARK
-	{0x3020, 0x3020, prID, gcSo},     //         POSTAL MARK FACE
-	{0x3021, 0x3029, prID, gcNl},     //     [9] HANGZHOU NUMERAL ONE..HANGZHOU NUMERAL NINE
-	{0x302A, 0x302D, prCM, gcMn},     //     [4] IDEOGRAPHIC LEVEL TONE MARK..IDEOGRAPHIC ENTERING TONE MARK
-	{0x302E, 0x302F, prCM, gcMc},     //     [2] HANGUL SINGLE DOT TONE MARK..HANGUL DOUBLE DOT TONE MARK
-	{0x3030, 0x3030, prID, gcPd},     //         WAVY DASH
-	{0x3031, 0x3034, prID, gcLm},     //     [4] VERTICAL KANA REPEAT MARK..VERTICAL KANA REPEAT WITH VOICED SOUND MARK UPPER HALF
-	{0x3035, 0x3035, prCM, gcLm},     //         VERTICAL KANA REPEAT MARK LOWER HALF
-	{0x3036, 0x3037, prID, gcSo},     //     [2] CIRCLED POSTAL MARK..IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL
-	{0x3038, 0x303A, prID, gcNl},     //     [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY
-	{0x303B, 0x303B, prNS, gcLm},     //         VERTICAL IDEOGRAPHIC ITERATION MARK
-	{0x303C, 0x303C, prNS, gcLo},     //         MASU MARK
-	{0x303D, 0x303D, prID, gcPo},     //         PART ALTERNATION MARK
-	{0x303E, 0x303F, prID, gcSo},     //     [2] IDEOGRAPHIC VARIATION INDICATOR..IDEOGRAPHIC HALF FILL SPACE
-	{0x3041, 0x3041, prCJ, gcLo},     //         HIRAGANA LETTER SMALL A
-	{0x3042, 0x3042, prID, gcLo},     //         HIRAGANA LETTER A
-	{0x3043, 0x3043, prCJ, gcLo},     //         HIRAGANA LETTER SMALL I
-	{0x3044, 0x3044, prID, gcLo},     //         HIRAGANA LETTER I
-	{0x3045, 0x3045, prCJ, gcLo},     //         HIRAGANA LETTER SMALL U
-	{0x3046, 0x3046, prID, gcLo},     //         HIRAGANA LETTER U
-	{0x3047, 0x3047, prCJ, gcLo},     //         HIRAGANA LETTER SMALL E
-	{0x3048, 0x3048, prID, gcLo},     //         HIRAGANA LETTER E
-	{0x3049, 0x3049, prCJ, gcLo},     //         HIRAGANA LETTER SMALL O
-	{0x304A, 0x3062, prID, gcLo},     //    [25] HIRAGANA LETTER O..HIRAGANA LETTER DI
-	{0x3063, 0x3063, prCJ, gcLo},     //         HIRAGANA LETTER SMALL TU
-	{0x3064, 0x3082, prID, gcLo},     //    [31] HIRAGANA LETTER TU..HIRAGANA LETTER MO
-	{0x3083, 0x3083, prCJ, gcLo},     //         HIRAGANA LETTER SMALL YA
-	{0x3084, 0x3084, prID, gcLo},     //         HIRAGANA LETTER YA
-	{0x3085, 0x3085, prCJ, gcLo},     //         HIRAGANA LETTER SMALL YU
-	{0x3086, 0x3086, prID, gcLo},     //         HIRAGANA LETTER YU
-	{0x3087, 0x3087, prCJ, gcLo},     //         HIRAGANA LETTER SMALL YO
-	{0x3088, 0x308D, prID, gcLo},     //     [6] HIRAGANA LETTER YO..HIRAGANA LETTER RO
-	{0x308E, 0x308E, prCJ, gcLo},     //         HIRAGANA LETTER SMALL WA
-	{0x308F, 0x3094, prID, gcLo},     //     [6] HIRAGANA LETTER WA..HIRAGANA LETTER VU
-	{0x3095, 0x3096, prCJ, gcLo},     //     [2] HIRAGANA LETTER SMALL KA..HIRAGANA LETTER SMALL KE
-	{0x3099, 0x309A, prCM, gcMn},     //     [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
-	{0x309B, 0x309C, prNS, gcSk},     //     [2] KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
-	{0x309D, 0x309E, prNS, gcLm},     //     [2] HIRAGANA ITERATION MARK..HIRAGANA VOICED ITERATION MARK
-	{0x309F, 0x309F, prID, gcLo},     //         HIRAGANA DIGRAPH YORI
-	{0x30A0, 0x30A0, prNS, gcPd},     //         KATAKANA-HIRAGANA DOUBLE HYPHEN
-	{0x30A1, 0x30A1, prCJ, gcLo},     //         KATAKANA LETTER SMALL A
-	{0x30A2, 0x30A2, prID, gcLo},     //         KATAKANA LETTER A
-	{0x30A3, 0x30A3, prCJ, gcLo},     //         KATAKANA LETTER SMALL I
-	{0x30A4, 0x30A4, prID, gcLo},     //         KATAKANA LETTER I
-	{0x30A5, 0x30A5, prCJ, gcLo},     //         KATAKANA LETTER SMALL U
-	{0x30A6, 0x30A6, prID, gcLo},     //         KATAKANA LETTER U
-	{0x30A7, 0x30A7, prCJ, gcLo},     //         KATAKANA LETTER SMALL E
-	{0x30A8, 0x30A8, prID, gcLo},     //         KATAKANA LETTER E
-	{0x30A9, 0x30A9, prCJ, gcLo},     //         KATAKANA LETTER SMALL O
-	{0x30AA, 0x30C2, prID, gcLo},     //    [25] KATAKANA LETTER O..KATAKANA LETTER DI
-	{0x30C3, 0x30C3, prCJ, gcLo},     //         KATAKANA LETTER SMALL TU
-	{0x30C4, 0x30E2, prID, gcLo},     //    [31] KATAKANA LETTER TU..KATAKANA LETTER MO
-	{0x30E3, 0x30E3, prCJ, gcLo},     //         KATAKANA LETTER SMALL YA
-	{0x30E4, 0x30E4, prID, gcLo},     //         KATAKANA LETTER YA
-	{0x30E5, 0x30E5, prCJ, gcLo},     //         KATAKANA LETTER SMALL YU
-	{0x30E6, 0x30E6, prID, gcLo},     //         KATAKANA LETTER YU
-	{0x30E7, 0x30E7, prCJ, gcLo},     //         KATAKANA LETTER SMALL YO
-	{0x30E8, 0x30ED, prID, gcLo},     //     [6] KATAKANA LETTER YO..KATAKANA LETTER RO
-	{0x30EE, 0x30EE, prCJ, gcLo},     //         KATAKANA LETTER SMALL WA
-	{0x30EF, 0x30F4, prID, gcLo},     //     [6] KATAKANA LETTER WA..KATAKANA LETTER VU
-	{0x30F5, 0x30F6, prCJ, gcLo},     //     [2] KATAKANA LETTER SMALL KA..KATAKANA LETTER SMALL KE
-	{0x30F7, 0x30FA, prID, gcLo},     //     [4] KATAKANA LETTER VA..KATAKANA LETTER VO
-	{0x30FB, 0x30FB, prNS, gcPo},     //         KATAKANA MIDDLE DOT
-	{0x30FC, 0x30FC, prCJ, gcLm},     //         KATAKANA-HIRAGANA PROLONGED SOUND MARK
-	{0x30FD, 0x30FE, prNS, gcLm},     //     [2] KATAKANA ITERATION MARK..KATAKANA VOICED ITERATION MARK
-	{0x30FF, 0x30FF, prID, gcLo},     //         KATAKANA DIGRAPH KOTO
-	{0x3105, 0x312F, prID, gcLo},     //    [43] BOPOMOFO LETTER B..BOPOMOFO LETTER NN
-	{0x3131, 0x318E, prID, gcLo},     //    [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE
-	{0x3190, 0x3191, prID, gcSo},     //     [2] IDEOGRAPHIC ANNOTATION LINKING MARK..IDEOGRAPHIC ANNOTATION REVERSE MARK
-	{0x3192, 0x3195, prID, gcNo},     //     [4] IDEOGRAPHIC ANNOTATION ONE MARK..IDEOGRAPHIC ANNOTATION FOUR MARK
-	{0x3196, 0x319F, prID, gcSo},     //    [10] IDEOGRAPHIC ANNOTATION TOP MARK..IDEOGRAPHIC ANNOTATION MAN MARK
-	{0x31A0, 0x31BF, prID, gcLo},     //    [32] BOPOMOFO LETTER BU..BOPOMOFO LETTER AH
-	{0x31C0, 0x31E3, prID, gcSo},     //    [36] CJK STROKE T..CJK STROKE Q
-	{0x31F0, 0x31FF, prCJ, gcLo},     //    [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO
-	{0x3200, 0x321E, prID, gcSo},     //    [31] PARENTHESIZED HANGUL KIYEOK..PARENTHESIZED KOREAN CHARACTER O HU
-	{0x3220, 0x3229, prID, gcNo},     //    [10] PARENTHESIZED IDEOGRAPH ONE..PARENTHESIZED IDEOGRAPH TEN
-	{0x322A, 0x3247, prID, gcSo},     //    [30] PARENTHESIZED IDEOGRAPH MOON..CIRCLED IDEOGRAPH KOTO
-	{0x3248, 0x324F, prAI, gcNo},     //     [8] CIRCLED NUMBER TEN ON BLACK SQUARE..CIRCLED NUMBER EIGHTY ON BLACK SQUARE
-	{0x3250, 0x3250, prID, gcSo},     //         PARTNERSHIP SIGN
-	{0x3251, 0x325F, prID, gcNo},     //    [15] CIRCLED NUMBER TWENTY ONE..CIRCLED NUMBER THIRTY FIVE
-	{0x3260, 0x327F, prID, gcSo},     //    [32] CIRCLED HANGUL KIYEOK..KOREAN STANDARD SYMBOL
-	{0x3280, 0x3289, prID, gcNo},     //    [10] CIRCLED IDEOGRAPH ONE..CIRCLED IDEOGRAPH TEN
-	{0x328A, 0x32B0, prID, gcSo},     //    [39] CIRCLED IDEOGRAPH MOON..CIRCLED IDEOGRAPH NIGHT
-	{0x32B1, 0x32BF, prID, gcNo},     //    [15] CIRCLED NUMBER THIRTY SIX..CIRCLED NUMBER FIFTY
-	{0x32C0, 0x32FF, prID, gcSo},     //    [64] IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY..SQUARE ERA NAME REIWA
-	{0x3300, 0x33FF, prID, gcSo},     //   [256] SQUARE APAATO..SQUARE GAL
-	{0x3400, 0x4DBF, prID, gcLo},     //  [6592] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DBF
-	{0x4DC0, 0x4DFF, prAL, gcSo},     //    [64] HEXAGRAM FOR THE CREATIVE HEAVEN..HEXAGRAM FOR BEFORE COMPLETION
-	{0x4E00, 0x9FFF, prID, gcLo},     // [20992] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FFF
-	{0xA000, 0xA014, prID, gcLo},     //    [21] YI SYLLABLE IT..YI SYLLABLE E
-	{0xA015, 0xA015, prNS, gcLm},     //         YI SYLLABLE WU
-	{0xA016, 0xA48C, prID, gcLo},     //  [1143] YI SYLLABLE BIT..YI SYLLABLE YYR
-	{0xA490, 0xA4C6, prID, gcSo},     //    [55] YI RADICAL QOT..YI RADICAL KE
-	{0xA4D0, 0xA4F7, prAL, gcLo},     //    [40] LISU LETTER BA..LISU LETTER OE
-	{0xA4F8, 0xA4FD, prAL, gcLm},     //     [6] LISU LETTER TONE MYA TI..LISU LETTER TONE MYA JEU
-	{0xA4FE, 0xA4FF, prBA, gcPo},     //     [2] LISU PUNCTUATION COMMA..LISU PUNCTUATION FULL STOP
-	{0xA500, 0xA60B, prAL, gcLo},     //   [268] VAI SYLLABLE EE..VAI SYLLABLE NG
-	{0xA60C, 0xA60C, prAL, gcLm},     //         VAI SYLLABLE LENGTHENER
-	{0xA60D, 0xA60D, prBA, gcPo},     //         VAI COMMA
-	{0xA60E, 0xA60E, prEX, gcPo},     //         VAI FULL STOP
-	{0xA60F, 0xA60F, prBA, gcPo},     //         VAI QUESTION MARK
-	{0xA610, 0xA61F, prAL, gcLo},     //    [16] VAI SYLLABLE NDOLE FA..VAI SYMBOL JONG
-	{0xA620, 0xA629, prNU, gcNd},     //    [10] VAI DIGIT ZERO..VAI DIGIT NINE
-	{0xA62A, 0xA62B, prAL, gcLo},     //     [2] VAI SYLLABLE NDOLE MA..VAI SYLLABLE NDOLE DO
-	{0xA640, 0xA66D, prAL, gcLC},     //    [46] CYRILLIC CAPITAL LETTER ZEMLYA..CYRILLIC SMALL LETTER DOUBLE MONOCULAR O
-	{0xA66E, 0xA66E, prAL, gcLo},     //         CYRILLIC LETTER MULTIOCULAR O
-	{0xA66F, 0xA66F, prCM, gcMn},     //         COMBINING CYRILLIC VZMET
-	{0xA670, 0xA672, prCM, gcMe},     //     [3] COMBINING CYRILLIC TEN MILLIONS SIGN..COMBINING CYRILLIC THOUSAND MILLIONS SIGN
-	{0xA673, 0xA673, prAL, gcPo},     //         SLAVONIC ASTERISK
-	{0xA674, 0xA67D, prCM, gcMn},     //    [10] COMBINING CYRILLIC LETTER UKRAINIAN IE..COMBINING CYRILLIC PAYEROK
-	{0xA67E, 0xA67E, prAL, gcPo},     //         CYRILLIC KAVYKA
-	{0xA67F, 0xA67F, prAL, gcLm},     //         CYRILLIC PAYEROK
-	{0xA680, 0xA69B, prAL, gcLC},     //    [28] CYRILLIC CAPITAL LETTER DWE..CYRILLIC SMALL LETTER CROSSED O
-	{0xA69C, 0xA69D, prAL, gcLm},     //     [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFIER LETTER CYRILLIC SOFT SIGN
-	{0xA69E, 0xA69F, prCM, gcMn},     //     [2] COMBINING CYRILLIC LETTER EF..COMBINING CYRILLIC LETTER IOTIFIED E
-	{0xA6A0, 0xA6E5, prAL, gcLo},     //    [70] BAMUM LETTER A..BAMUM LETTER KI
-	{0xA6E6, 0xA6EF, prAL, gcNl},     //    [10] BAMUM LETTER MO..BAMUM LETTER KOGHOM
-	{0xA6F0, 0xA6F1, prCM, gcMn},     //     [2] BAMUM COMBINING MARK KOQNDON..BAMUM COMBINING MARK TUKWENTIS
-	{0xA6F2, 0xA6F2, prAL, gcPo},     //         BAMUM NJAEMLI
-	{0xA6F3, 0xA6F7, prBA, gcPo},     //     [5] BAMUM FULL STOP..BAMUM QUESTION MARK
-	{0xA700, 0xA716, prAL, gcSk},     //    [23] MODIFIER LETTER CHINESE TONE YIN PING..MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR
-	{0xA717, 0xA71F, prAL, gcLm},     //     [9] MODIFIER LETTER DOT VERTICAL BAR..MODIFIER LETTER LOW INVERTED EXCLAMATION MARK
-	{0xA720, 0xA721, prAL, gcSk},     //     [2] MODIFIER LETTER STRESS AND HIGH TONE..MODIFIER LETTER STRESS AND LOW TONE
-	{0xA722, 0xA76F, prAL, gcLC},     //    [78] LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF..LATIN SMALL LETTER CON
-	{0xA770, 0xA770, prAL, gcLm},     //         MODIFIER LETTER US
-	{0xA771, 0xA787, prAL, gcLC},     //    [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER INSULAR T
-	{0xA788, 0xA788, prAL, gcLm},     //         MODIFIER LETTER LOW CIRCUMFLEX ACCENT
-	{0xA789, 0xA78A, prAL, gcSk},     //     [2] MODIFIER LETTER COLON..MODIFIER LETTER SHORT EQUALS SIGN
-	{0xA78B, 0xA78E, prAL, gcLC},     //     [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT
-	{0xA78F, 0xA78F, prAL, gcLo},     //         LATIN LETTER SINOLOGICAL DOT
-	{0xA790, 0xA7CA, prAL, gcLC},     //    [59] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY
-	{0xA7D0, 0xA7D1, prAL, gcLC},     //     [2] LATIN CAPITAL LETTER CLOSED INSULAR G..LATIN SMALL LETTER CLOSED INSULAR G
-	{0xA7D3, 0xA7D3, prAL, gcLl},     //         LATIN SMALL LETTER DOUBLE THORN
-	{0xA7D5, 0xA7D9, prAL, gcLC},     //     [5] LATIN SMALL LETTER DOUBLE WYNN..LATIN SMALL LETTER SIGMOID S
-	{0xA7F2, 0xA7F4, prAL, gcLm},     //     [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q
-	{0xA7F5, 0xA7F6, prAL, gcLC},     //     [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H
-	{0xA7F7, 0xA7F7, prAL, gcLo},     //         LATIN EPIGRAPHIC LETTER SIDEWAYS I
-	{0xA7F8, 0xA7F9, prAL, gcLm},     //     [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE
-	{0xA7FA, 0xA7FA, prAL, gcLl},     //         LATIN LETTER SMALL CAPITAL TURNED M
-	{0xA7FB, 0xA7FF, prAL, gcLo},     //     [5] LATIN EPIGRAPHIC LETTER REVERSED F..LATIN EPIGRAPHIC LETTER ARCHAIC M
-	{0xA800, 0xA801, prAL, gcLo},     //     [2] SYLOTI NAGRI LETTER A..SYLOTI NAGRI LETTER I
-	{0xA802, 0xA802, prCM, gcMn},     //         SYLOTI NAGRI SIGN DVISVARA
-	{0xA803, 0xA805, prAL, gcLo},     //     [3] SYLOTI NAGRI LETTER U..SYLOTI NAGRI LETTER O
-	{0xA806, 0xA806, prCM, gcMn},     //         SYLOTI NAGRI SIGN HASANTA
-	{0xA807, 0xA80A, prAL, gcLo},     //     [4] SYLOTI NAGRI LETTER KO..SYLOTI NAGRI LETTER GHO
-	{0xA80B, 0xA80B, prCM, gcMn},     //         SYLOTI NAGRI SIGN ANUSVARA
-	{0xA80C, 0xA822, prAL, gcLo},     //    [23] SYLOTI NAGRI LETTER CO..SYLOTI NAGRI LETTER HO
-	{0xA823, 0xA824, prCM, gcMc},     //     [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN I
-	{0xA825, 0xA826, prCM, gcMn},     //     [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E
-	{0xA827, 0xA827, prCM, gcMc},     //         SYLOTI NAGRI VOWEL SIGN OO
-	{0xA828, 0xA82B, prAL, gcSo},     //     [4] SYLOTI NAGRI POETRY MARK-1..SYLOTI NAGRI POETRY MARK-4
-	{0xA82C, 0xA82C, prCM, gcMn},     //         SYLOTI NAGRI SIGN ALTERNATE HASANTA
-	{0xA830, 0xA835, prAL, gcNo},     //     [6] NORTH INDIC FRACTION ONE QUARTER..NORTH INDIC FRACTION THREE SIXTEENTHS
-	{0xA836, 0xA837, prAL, gcSo},     //     [2] NORTH INDIC QUARTER MARK..NORTH INDIC PLACEHOLDER MARK
-	{0xA838, 0xA838, prPO, gcSc},     //         NORTH INDIC RUPEE MARK
-	{0xA839, 0xA839, prAL, gcSo},     //         NORTH INDIC QUANTITY MARK
-	{0xA840, 0xA873, prAL, gcLo},     //    [52] PHAGS-PA LETTER KA..PHAGS-PA LETTER CANDRABINDU
-	{0xA874, 0xA875, prBB, gcPo},     //     [2] PHAGS-PA SINGLE HEAD MARK..PHAGS-PA DOUBLE HEAD MARK
-	{0xA876, 0xA877, prEX, gcPo},     //     [2] PHAGS-PA MARK SHAD..PHAGS-PA MARK DOUBLE SHAD
-	{0xA880, 0xA881, prCM, gcMc},     //     [2] SAURASHTRA SIGN ANUSVARA..SAURASHTRA SIGN VISARGA
-	{0xA882, 0xA8B3, prAL, gcLo},     //    [50] SAURASHTRA LETTER A..SAURASHTRA LETTER LLA
-	{0xA8B4, 0xA8C3, prCM, gcMc},     //    [16] SAURASHTRA CONSONANT SIGN HAARU..SAURASHTRA VOWEL SIGN AU
-	{0xA8C4, 0xA8C5, prCM, gcMn},     //     [2] SAURASHTRA SIGN VIRAMA..SAURASHTRA SIGN CANDRABINDU
-	{0xA8CE, 0xA8CF, prBA, gcPo},     //     [2] SAURASHTRA DANDA..SAURASHTRA DOUBLE DANDA
-	{0xA8D0, 0xA8D9, prNU, gcNd},     //    [10] SAURASHTRA DIGIT ZERO..SAURASHTRA DIGIT NINE
-	{0xA8E0, 0xA8F1, prCM, gcMn},     //    [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA
-	{0xA8F2, 0xA8F7, prAL, gcLo},     //     [6] DEVANAGARI SIGN SPACING CANDRABINDU..DEVANAGARI SIGN CANDRABINDU AVAGRAHA
-	{0xA8F8, 0xA8FA, prAL, gcPo},     //     [3] DEVANAGARI SIGN PUSHPIKA..DEVANAGARI CARET
-	{0xA8FB, 0xA8FB, prAL, gcLo},     //         DEVANAGARI HEADSTROKE
-	{0xA8FC, 0xA8FC, prBB, gcPo},     //         DEVANAGARI SIGN SIDDHAM
-	{0xA8FD, 0xA8FE, prAL, gcLo},     //     [2] DEVANAGARI JAIN OM..DEVANAGARI LETTER AY
-	{0xA8FF, 0xA8FF, prCM, gcMn},     //         DEVANAGARI VOWEL SIGN AY
-	{0xA900, 0xA909, prNU, gcNd},     //    [10] KAYAH LI DIGIT ZERO..KAYAH LI DIGIT NINE
-	{0xA90A, 0xA925, prAL, gcLo},     //    [28] KAYAH LI LETTER KA..KAYAH LI LETTER OO
-	{0xA926, 0xA92D, prCM, gcMn},     //     [8] KAYAH LI VOWEL UE..KAYAH LI TONE CALYA PLOPHU
-	{0xA92E, 0xA92F, prBA, gcPo},     //     [2] KAYAH LI SIGN CWI..KAYAH LI SIGN SHYA
-	{0xA930, 0xA946, prAL, gcLo},     //    [23] REJANG LETTER KA..REJANG LETTER A
-	{0xA947, 0xA951, prCM, gcMn},     //    [11] REJANG VOWEL SIGN I..REJANG CONSONANT SIGN R
-	{0xA952, 0xA953, prCM, gcMc},     //     [2] REJANG CONSONANT SIGN H..REJANG VIRAMA
-	{0xA95F, 0xA95F, prAL, gcPo},     //         REJANG SECTION MARK
-	{0xA960, 0xA97C, prJL, gcLo},     //    [29] HANGUL CHOSEONG TIKEUT-MIEUM..HANGUL CHOSEONG SSANGYEORINHIEUH
-	{0xA980, 0xA982, prCM, gcMn},     //     [3] JAVANESE SIGN PANYANGGA..JAVANESE SIGN LAYAR
-	{0xA983, 0xA983, prCM, gcMc},     //         JAVANESE SIGN WIGNYAN
-	{0xA984, 0xA9B2, prAL, gcLo},     //    [47] JAVANESE LETTER A..JAVANESE LETTER HA
-	{0xA9B3, 0xA9B3, prCM, gcMn},     //         JAVANESE SIGN CECAK TELU
-	{0xA9B4, 0xA9B5, prCM, gcMc},     //     [2] JAVANESE VOWEL SIGN TARUNG..JAVANESE VOWEL SIGN TOLONG
-	{0xA9B6, 0xA9B9, prCM, gcMn},     //     [4] JAVANESE VOWEL SIGN WULU..JAVANESE VOWEL SIGN SUKU MENDUT
-	{0xA9BA, 0xA9BB, prCM, gcMc},     //     [2] JAVANESE VOWEL SIGN TALING..JAVANESE VOWEL SIGN DIRGA MURE
-	{0xA9BC, 0xA9BD, prCM, gcMn},     //     [2] JAVANESE VOWEL SIGN PEPET..JAVANESE CONSONANT SIGN KERET
-	{0xA9BE, 0xA9C0, prCM, gcMc},     //     [3] JAVANESE CONSONANT SIGN PENGKAL..JAVANESE PANGKON
-	{0xA9C1, 0xA9C6, prAL, gcPo},     //     [6] JAVANESE LEFT RERENGGAN..JAVANESE PADA WINDU
-	{0xA9C7, 0xA9C9, prBA, gcPo},     //     [3] JAVANESE PADA PANGKAT..JAVANESE PADA LUNGSI
-	{0xA9CA, 0xA9CD, prAL, gcPo},     //     [4] JAVANESE PADA ADEG..JAVANESE TURNED PADA PISELEH
-	{0xA9CF, 0xA9CF, prAL, gcLm},     //         JAVANESE PANGRANGKEP
-	{0xA9D0, 0xA9D9, prNU, gcNd},     //    [10] JAVANESE DIGIT ZERO..JAVANESE DIGIT NINE
-	{0xA9DE, 0xA9DF, prAL, gcPo},     //     [2] JAVANESE PADA TIRTA TUMETES..JAVANESE PADA ISEN-ISEN
-	{0xA9E0, 0xA9E4, prSA, gcLo},     //     [5] MYANMAR LETTER SHAN GHA..MYANMAR LETTER SHAN BHA
-	{0xA9E5, 0xA9E5, prSA, gcMn},     //         MYANMAR SIGN SHAN SAW
-	{0xA9E6, 0xA9E6, prSA, gcLm},     //         MYANMAR MODIFIER LETTER SHAN REDUPLICATION
-	{0xA9E7, 0xA9EF, prSA, gcLo},     //     [9] MYANMAR LETTER TAI LAING NYA..MYANMAR LETTER TAI LAING NNA
-	{0xA9F0, 0xA9F9, prNU, gcNd},     //    [10] MYANMAR TAI LAING DIGIT ZERO..MYANMAR TAI LAING DIGIT NINE
-	{0xA9FA, 0xA9FE, prSA, gcLo},     //     [5] MYANMAR LETTER TAI LAING LLA..MYANMAR LETTER TAI LAING BHA
-	{0xAA00, 0xAA28, prAL, gcLo},     //    [41] CHAM LETTER A..CHAM LETTER HA
-	{0xAA29, 0xAA2E, prCM, gcMn},     //     [6] CHAM VOWEL SIGN AA..CHAM VOWEL SIGN OE
-	{0xAA2F, 0xAA30, prCM, gcMc},     //     [2] CHAM VOWEL SIGN O..CHAM VOWEL SIGN AI
-	{0xAA31, 0xAA32, prCM, gcMn},     //     [2] CHAM VOWEL SIGN AU..CHAM VOWEL SIGN UE
-	{0xAA33, 0xAA34, prCM, gcMc},     //     [2] CHAM CONSONANT SIGN YA..CHAM CONSONANT SIGN RA
-	{0xAA35, 0xAA36, prCM, gcMn},     //     [2] CHAM CONSONANT SIGN LA..CHAM CONSONANT SIGN WA
-	{0xAA40, 0xAA42, prAL, gcLo},     //     [3] CHAM LETTER FINAL K..CHAM LETTER FINAL NG
-	{0xAA43, 0xAA43, prCM, gcMn},     //         CHAM CONSONANT SIGN FINAL NG
-	{0xAA44, 0xAA4B, prAL, gcLo},     //     [8] CHAM LETTER FINAL CH..CHAM LETTER FINAL SS
-	{0xAA4C, 0xAA4C, prCM, gcMn},     //         CHAM CONSONANT SIGN FINAL M
-	{0xAA4D, 0xAA4D, prCM, gcMc},     //         CHAM CONSONANT SIGN FINAL H
-	{0xAA50, 0xAA59, prNU, gcNd},     //    [10] CHAM DIGIT ZERO..CHAM DIGIT NINE
-	{0xAA5C, 0xAA5C, prAL, gcPo},     //         CHAM PUNCTUATION SPIRAL
-	{0xAA5D, 0xAA5F, prBA, gcPo},     //     [3] CHAM PUNCTUATION DANDA..CHAM PUNCTUATION TRIPLE DANDA
-	{0xAA60, 0xAA6F, prSA, gcLo},     //    [16] MYANMAR LETTER KHAMTI GA..MYANMAR LETTER KHAMTI FA
-	{0xAA70, 0xAA70, prSA, gcLm},     //         MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION
-	{0xAA71, 0xAA76, prSA, gcLo},     //     [6] MYANMAR LETTER KHAMTI XA..MYANMAR LOGOGRAM KHAMTI HM
-	{0xAA77, 0xAA79, prSA, gcSo},     //     [3] MYANMAR SYMBOL AITON EXCLAMATION..MYANMAR SYMBOL AITON TWO
-	{0xAA7A, 0xAA7A, prSA, gcLo},     //         MYANMAR LETTER AITON RA
-	{0xAA7B, 0xAA7B, prSA, gcMc},     //         MYANMAR SIGN PAO KAREN TONE
-	{0xAA7C, 0xAA7C, prSA, gcMn},     //         MYANMAR SIGN TAI LAING TONE-2
-	{0xAA7D, 0xAA7D, prSA, gcMc},     //         MYANMAR SIGN TAI LAING TONE-5
-	{0xAA7E, 0xAA7F, prSA, gcLo},     //     [2] MYANMAR LETTER SHWE PALAUNG CHA..MYANMAR LETTER SHWE PALAUNG SHA
-	{0xAA80, 0xAAAF, prSA, gcLo},     //    [48] TAI VIET LETTER LOW KO..TAI VIET LETTER HIGH O
-	{0xAAB0, 0xAAB0, prSA, gcMn},     //         TAI VIET MAI KANG
-	{0xAAB1, 0xAAB1, prSA, gcLo},     //         TAI VIET VOWEL AA
-	{0xAAB2, 0xAAB4, prSA, gcMn},     //     [3] TAI VIET VOWEL I..TAI VIET VOWEL U
-	{0xAAB5, 0xAAB6, prSA, gcLo},     //     [2] TAI VIET VOWEL E..TAI VIET VOWEL O
-	{0xAAB7, 0xAAB8, prSA, gcMn},     //     [2] TAI VIET MAI KHIT..TAI VIET VOWEL IA
-	{0xAAB9, 0xAABD, prSA, gcLo},     //     [5] TAI VIET VOWEL UEA..TAI VIET VOWEL AN
-	{0xAABE, 0xAABF, prSA, gcMn},     //     [2] TAI VIET VOWEL AM..TAI VIET TONE MAI EK
-	{0xAAC0, 0xAAC0, prSA, gcLo},     //         TAI VIET TONE MAI NUENG
-	{0xAAC1, 0xAAC1, prSA, gcMn},     //         TAI VIET TONE MAI THO
-	{0xAAC2, 0xAAC2, prSA, gcLo},     //         TAI VIET TONE MAI SONG
-	{0xAADB, 0xAADC, prSA, gcLo},     //     [2] TAI VIET SYMBOL KON..TAI VIET SYMBOL NUENG
-	{0xAADD, 0xAADD, prSA, gcLm},     //         TAI VIET SYMBOL SAM
-	{0xAADE, 0xAADF, prSA, gcPo},     //     [2] TAI VIET SYMBOL HO HOI..TAI VIET SYMBOL KOI KOI
-	{0xAAE0, 0xAAEA, prAL, gcLo},     //    [11] MEETEI MAYEK LETTER E..MEETEI MAYEK LETTER SSA
-	{0xAAEB, 0xAAEB, prCM, gcMc},     //         MEETEI MAYEK VOWEL SIGN II
-	{0xAAEC, 0xAAED, prCM, gcMn},     //     [2] MEETEI MAYEK VOWEL SIGN UU..MEETEI MAYEK VOWEL SIGN AAI
-	{0xAAEE, 0xAAEF, prCM, gcMc},     //     [2] MEETEI MAYEK VOWEL SIGN AU..MEETEI MAYEK VOWEL SIGN AAU
-	{0xAAF0, 0xAAF1, prBA, gcPo},     //     [2] MEETEI MAYEK CHEIKHAN..MEETEI MAYEK AHANG KHUDAM
-	{0xAAF2, 0xAAF2, prAL, gcLo},     //         MEETEI MAYEK ANJI
-	{0xAAF3, 0xAAF4, prAL, gcLm},     //     [2] MEETEI MAYEK SYLLABLE REPETITION MARK..MEETEI MAYEK WORD REPETITION MARK
-	{0xAAF5, 0xAAF5, prCM, gcMc},     //         MEETEI MAYEK VOWEL SIGN VISARGA
-	{0xAAF6, 0xAAF6, prCM, gcMn},     //         MEETEI MAYEK VIRAMA
-	{0xAB01, 0xAB06, prAL, gcLo},     //     [6] ETHIOPIC SYLLABLE TTHU..ETHIOPIC SYLLABLE TTHO
-	{0xAB09, 0xAB0E, prAL, gcLo},     //     [6] ETHIOPIC SYLLABLE DDHU..ETHIOPIC SYLLABLE DDHO
-	{0xAB11, 0xAB16, prAL, gcLo},     //     [6] ETHIOPIC SYLLABLE DZU..ETHIOPIC SYLLABLE DZO
-	{0xAB20, 0xAB26, prAL, gcLo},     //     [7] ETHIOPIC SYLLABLE CCHHA..ETHIOPIC SYLLABLE CCHHO
-	{0xAB28, 0xAB2E, prAL, gcLo},     //     [7] ETHIOPIC SYLLABLE BBA..ETHIOPIC SYLLABLE BBO
-	{0xAB30, 0xAB5A, prAL, gcLl},     //    [43] LATIN SMALL LETTER BARRED ALPHA..LATIN SMALL LETTER Y WITH SHORT RIGHT LEG
-	{0xAB5B, 0xAB5B, prAL, gcSk},     //         MODIFIER BREVE WITH INVERTED BREVE
-	{0xAB5C, 0xAB5F, prAL, gcLm},     //     [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK
-	{0xAB60, 0xAB68, prAL, gcLl},     //     [9] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE
-	{0xAB69, 0xAB69, prAL, gcLm},     //         MODIFIER LETTER SMALL TURNED W
-	{0xAB6A, 0xAB6B, prAL, gcSk},     //     [2] MODIFIER LETTER LEFT TACK..MODIFIER LETTER RIGHT TACK
-	{0xAB70, 0xABBF, prAL, gcLl},     //    [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA
-	{0xABC0, 0xABE2, prAL, gcLo},     //    [35] MEETEI MAYEK LETTER KOK..MEETEI MAYEK LETTER I LONSUM
-	{0xABE3, 0xABE4, prCM, gcMc},     //     [2] MEETEI MAYEK VOWEL SIGN ONAP..MEETEI MAYEK VOWEL SIGN INAP
-	{0xABE5, 0xABE5, prCM, gcMn},     //         MEETEI MAYEK VOWEL SIGN ANAP
-	{0xABE6, 0xABE7, prCM, gcMc},     //     [2] MEETEI MAYEK VOWEL SIGN YENAP..MEETEI MAYEK VOWEL SIGN SOUNAP
-	{0xABE8, 0xABE8, prCM, gcMn},     //         MEETEI MAYEK VOWEL SIGN UNAP
-	{0xABE9, 0xABEA, prCM, gcMc},     //     [2] MEETEI MAYEK VOWEL SIGN CHEINAP..MEETEI MAYEK VOWEL SIGN NUNG
-	{0xABEB, 0xABEB, prBA, gcPo},     //         MEETEI MAYEK CHEIKHEI
-	{0xABEC, 0xABEC, prCM, gcMc},     //         MEETEI MAYEK LUM IYEK
-	{0xABED, 0xABED, prCM, gcMn},     //         MEETEI MAYEK APUN IYEK
-	{0xABF0, 0xABF9, prNU, gcNd},     //    [10] MEETEI MAYEK DIGIT ZERO..MEETEI MAYEK DIGIT NINE
-	{0xAC00, 0xAC00, prH2, gcLo},     //         HANGUL SYLLABLE GA
-	{0xAC01, 0xAC1B, prH3, gcLo},     //    [27] HANGUL SYLLABLE GAG..HANGUL SYLLABLE GAH
-	{0xAC1C, 0xAC1C, prH2, gcLo},     //         HANGUL SYLLABLE GAE
-	{0xAC1D, 0xAC37, prH3, gcLo},     //    [27] HANGUL SYLLABLE GAEG..HANGUL SYLLABLE GAEH
-	{0xAC38, 0xAC38, prH2, gcLo},     //         HANGUL SYLLABLE GYA
-	{0xAC39, 0xAC53, prH3, gcLo},     //    [27] HANGUL SYLLABLE GYAG..HANGUL SYLLABLE GYAH
-	{0xAC54, 0xAC54, prH2, gcLo},     //         HANGUL SYLLABLE GYAE
-	{0xAC55, 0xAC6F, prH3, gcLo},     //    [27] HANGUL SYLLABLE GYAEG..HANGUL SYLLABLE GYAEH
-	{0xAC70, 0xAC70, prH2, gcLo},     //         HANGUL SYLLABLE GEO
-	{0xAC71, 0xAC8B, prH3, gcLo},     //    [27] HANGUL SYLLABLE GEOG..HANGUL SYLLABLE GEOH
-	{0xAC8C, 0xAC8C, prH2, gcLo},     //         HANGUL SYLLABLE GE
-	{0xAC8D, 0xACA7, prH3, gcLo},     //    [27] HANGUL SYLLABLE GEG..HANGUL SYLLABLE GEH
-	{0xACA8, 0xACA8, prH2, gcLo},     //         HANGUL SYLLABLE GYEO
-	{0xACA9, 0xACC3, prH3, gcLo},     //    [27] HANGUL SYLLABLE GYEOG..HANGUL SYLLABLE GYEOH
-	{0xACC4, 0xACC4, prH2, gcLo},     //         HANGUL SYLLABLE GYE
-	{0xACC5, 0xACDF, prH3, gcLo},     //    [27] HANGUL SYLLABLE GYEG..HANGUL SYLLABLE GYEH
-	{0xACE0, 0xACE0, prH2, gcLo},     //         HANGUL SYLLABLE GO
-	{0xACE1, 0xACFB, prH3, gcLo},     //    [27] HANGUL SYLLABLE GOG..HANGUL SYLLABLE GOH
-	{0xACFC, 0xACFC, prH2, gcLo},     //         HANGUL SYLLABLE GWA
-	{0xACFD, 0xAD17, prH3, gcLo},     //    [27] HANGUL SYLLABLE GWAG..HANGUL SYLLABLE GWAH
-	{0xAD18, 0xAD18, prH2, gcLo},     //         HANGUL SYLLABLE GWAE
-	{0xAD19, 0xAD33, prH3, gcLo},     //    [27] HANGUL SYLLABLE GWAEG..HANGUL SYLLABLE GWAEH
-	{0xAD34, 0xAD34, prH2, gcLo},     //         HANGUL SYLLABLE GOE
-	{0xAD35, 0xAD4F, prH3, gcLo},     //    [27] HANGUL SYLLABLE GOEG..HANGUL SYLLABLE GOEH
-	{0xAD50, 0xAD50, prH2, gcLo},     //         HANGUL SYLLABLE GYO
-	{0xAD51, 0xAD6B, prH3, gcLo},     //    [27] HANGUL SYLLABLE GYOG..HANGUL SYLLABLE GYOH
-	{0xAD6C, 0xAD6C, prH2, gcLo},     //         HANGUL SYLLABLE GU
-	{0xAD6D, 0xAD87, prH3, gcLo},     //    [27] HANGUL SYLLABLE GUG..HANGUL SYLLABLE GUH
-	{0xAD88, 0xAD88, prH2, gcLo},     //         HANGUL SYLLABLE GWEO
-	{0xAD89, 0xADA3, prH3, gcLo},     //    [27] HANGUL SYLLABLE GWEOG..HANGUL SYLLABLE GWEOH
-	{0xADA4, 0xADA4, prH2, gcLo},     //         HANGUL SYLLABLE GWE
-	{0xADA5, 0xADBF, prH3, gcLo},     //    [27] HANGUL SYLLABLE GWEG..HANGUL SYLLABLE GWEH
-	{0xADC0, 0xADC0, prH2, gcLo},     //         HANGUL SYLLABLE GWI
-	{0xADC1, 0xADDB, prH3, gcLo},     //    [27] HANGUL SYLLABLE GWIG..HANGUL SYLLABLE GWIH
-	{0xADDC, 0xADDC, prH2, gcLo},     //         HANGUL SYLLABLE GYU
-	{0xADDD, 0xADF7, prH3, gcLo},     //    [27] HANGUL SYLLABLE GYUG..HANGUL SYLLABLE GYUH
-	{0xADF8, 0xADF8, prH2, gcLo},     //         HANGUL SYLLABLE GEU
-	{0xADF9, 0xAE13, prH3, gcLo},     //    [27] HANGUL SYLLABLE GEUG..HANGUL SYLLABLE GEUH
-	{0xAE14, 0xAE14, prH2, gcLo},     //         HANGUL SYLLABLE GYI
-	{0xAE15, 0xAE2F, prH3, gcLo},     //    [27] HANGUL SYLLABLE GYIG..HANGUL SYLLABLE GYIH
-	{0xAE30, 0xAE30, prH2, gcLo},     //         HANGUL SYLLABLE GI
-	{0xAE31, 0xAE4B, prH3, gcLo},     //    [27] HANGUL SYLLABLE GIG..HANGUL SYLLABLE GIH
-	{0xAE4C, 0xAE4C, prH2, gcLo},     //         HANGUL SYLLABLE GGA
-	{0xAE4D, 0xAE67, prH3, gcLo},     //    [27] HANGUL SYLLABLE GGAG..HANGUL SYLLABLE GGAH
-	{0xAE68, 0xAE68, prH2, gcLo},     //         HANGUL SYLLABLE GGAE
-	{0xAE69, 0xAE83, prH3, gcLo},     //    [27] HANGUL SYLLABLE GGAEG..HANGUL SYLLABLE GGAEH
-	{0xAE84, 0xAE84, prH2, gcLo},     //         HANGUL SYLLABLE GGYA
-	{0xAE85, 0xAE9F, prH3, gcLo},     //    [27] HANGUL SYLLABLE GGYAG..HANGUL SYLLABLE GGYAH
-	{0xAEA0, 0xAEA0, prH2, gcLo},     //         HANGUL SYLLABLE GGYAE
-	{0xAEA1, 0xAEBB, prH3, gcLo},     //    [27] HANGUL SYLLABLE GGYAEG..HANGUL SYLLABLE GGYAEH
-	{0xAEBC, 0xAEBC, prH2, gcLo},     //         HANGUL SYLLABLE GGEO
-	{0xAEBD, 0xAED7, prH3, gcLo},     //    [27] HANGUL SYLLABLE GGEOG..HANGUL SYLLABLE GGEOH
-	{0xAED8, 0xAED8, prH2, gcLo},     //         HANGUL SYLLABLE GGE
-	{0xAED9, 0xAEF3, prH3, gcLo},     //    [27] HANGUL SYLLABLE GGEG..HANGUL SYLLABLE GGEH
-	{0xAEF4, 0xAEF4, prH2, gcLo},     //         HANGUL SYLLABLE GGYEO
-	{0xAEF5, 0xAF0F, prH3, gcLo},     //    [27] HANGUL SYLLABLE GGYEOG..HANGUL SYLLABLE GGYEOH
-	{0xAF10, 0xAF10, prH2, gcLo},     //         HANGUL SYLLABLE GGYE
-	{0xAF11, 0xAF2B, prH3, gcLo},     //    [27] HANGUL SYLLABLE GGYEG..HANGUL SYLLABLE GGYEH
-	{0xAF2C, 0xAF2C, prH2, gcLo},     //         HANGUL SYLLABLE GGO
-	{0xAF2D, 0xAF47, prH3, gcLo},     //    [27] HANGUL SYLLABLE GGOG..HANGUL SYLLABLE GGOH
-	{0xAF48, 0xAF48, prH2, gcLo},     //         HANGUL SYLLABLE GGWA
-	{0xAF49, 0xAF63, prH3, gcLo},     //    [27] HANGUL SYLLABLE GGWAG..HANGUL SYLLABLE GGWAH
-	{0xAF64, 0xAF64, prH2, gcLo},     //         HANGUL SYLLABLE GGWAE
-	{0xAF65, 0xAF7F, prH3, gcLo},     //    [27] HANGUL SYLLABLE GGWAEG..HANGUL SYLLABLE GGWAEH
-	{0xAF80, 0xAF80, prH2, gcLo},     //         HANGUL SYLLABLE GGOE
-	{0xAF81, 0xAF9B, prH3, gcLo},     //    [27] HANGUL SYLLABLE GGOEG..HANGUL SYLLABLE GGOEH
-	{0xAF9C, 0xAF9C, prH2, gcLo},     //         HANGUL SYLLABLE GGYO
-	{0xAF9D, 0xAFB7, prH3, gcLo},     //    [27] HANGUL SYLLABLE GGYOG..HANGUL SYLLABLE GGYOH
-	{0xAFB8, 0xAFB8, prH2, gcLo},     //         HANGUL SYLLABLE GGU
-	{0xAFB9, 0xAFD3, prH3, gcLo},     //    [27] HANGUL SYLLABLE GGUG..HANGUL SYLLABLE GGUH
-	{0xAFD4, 0xAFD4, prH2, gcLo},     //         HANGUL SYLLABLE GGWEO
-	{0xAFD5, 0xAFEF, prH3, gcLo},     //    [27] HANGUL SYLLABLE GGWEOG..HANGUL SYLLABLE GGWEOH
-	{0xAFF0, 0xAFF0, prH2, gcLo},     //         HANGUL SYLLABLE GGWE
-	{0xAFF1, 0xB00B, prH3, gcLo},     //    [27] HANGUL SYLLABLE GGWEG..HANGUL SYLLABLE GGWEH
-	{0xB00C, 0xB00C, prH2, gcLo},     //         HANGUL SYLLABLE GGWI
-	{0xB00D, 0xB027, prH3, gcLo},     //    [27] HANGUL SYLLABLE GGWIG..HANGUL SYLLABLE GGWIH
-	{0xB028, 0xB028, prH2, gcLo},     //         HANGUL SYLLABLE GGYU
-	{0xB029, 0xB043, prH3, gcLo},     //    [27] HANGUL SYLLABLE GGYUG..HANGUL SYLLABLE GGYUH
-	{0xB044, 0xB044, prH2, gcLo},     //         HANGUL SYLLABLE GGEU
-	{0xB045, 0xB05F, prH3, gcLo},     //    [27] HANGUL SYLLABLE GGEUG..HANGUL SYLLABLE GGEUH
-	{0xB060, 0xB060, prH2, gcLo},     //         HANGUL SYLLABLE GGYI
-	{0xB061, 0xB07B, prH3, gcLo},     //    [27] HANGUL SYLLABLE GGYIG..HANGUL SYLLABLE GGYIH
-	{0xB07C, 0xB07C, prH2, gcLo},     //         HANGUL SYLLABLE GGI
-	{0xB07D, 0xB097, prH3, gcLo},     //    [27] HANGUL SYLLABLE GGIG..HANGUL SYLLABLE GGIH
-	{0xB098, 0xB098, prH2, gcLo},     //         HANGUL SYLLABLE NA
-	{0xB099, 0xB0B3, prH3, gcLo},     //    [27] HANGUL SYLLABLE NAG..HANGUL SYLLABLE NAH
-	{0xB0B4, 0xB0B4, prH2, gcLo},     //         HANGUL SYLLABLE NAE
-	{0xB0B5, 0xB0CF, prH3, gcLo},     //    [27] HANGUL SYLLABLE NAEG..HANGUL SYLLABLE NAEH
-	{0xB0D0, 0xB0D0, prH2, gcLo},     //         HANGUL SYLLABLE NYA
-	{0xB0D1, 0xB0EB, prH3, gcLo},     //    [27] HANGUL SYLLABLE NYAG..HANGUL SYLLABLE NYAH
-	{0xB0EC, 0xB0EC, prH2, gcLo},     //         HANGUL SYLLABLE NYAE
-	{0xB0ED, 0xB107, prH3, gcLo},     //    [27] HANGUL SYLLABLE NYAEG..HANGUL SYLLABLE NYAEH
-	{0xB108, 0xB108, prH2, gcLo},     //         HANGUL SYLLABLE NEO
-	{0xB109, 0xB123, prH3, gcLo},     //    [27] HANGUL SYLLABLE NEOG..HANGUL SYLLABLE NEOH
-	{0xB124, 0xB124, prH2, gcLo},     //         HANGUL SYLLABLE NE
-	{0xB125, 0xB13F, prH3, gcLo},     //    [27] HANGUL SYLLABLE NEG..HANGUL SYLLABLE NEH
-	{0xB140, 0xB140, prH2, gcLo},     //         HANGUL SYLLABLE NYEO
-	{0xB141, 0xB15B, prH3, gcLo},     //    [27] HANGUL SYLLABLE NYEOG..HANGUL SYLLABLE NYEOH
-	{0xB15C, 0xB15C, prH2, gcLo},     //         HANGUL SYLLABLE NYE
-	{0xB15D, 0xB177, prH3, gcLo},     //    [27] HANGUL SYLLABLE NYEG..HANGUL SYLLABLE NYEH
-	{0xB178, 0xB178, prH2, gcLo},     //         HANGUL SYLLABLE NO
-	{0xB179, 0xB193, prH3, gcLo},     //    [27] HANGUL SYLLABLE NOG..HANGUL SYLLABLE NOH
-	{0xB194, 0xB194, prH2, gcLo},     //         HANGUL SYLLABLE NWA
-	{0xB195, 0xB1AF, prH3, gcLo},     //    [27] HANGUL SYLLABLE NWAG..HANGUL SYLLABLE NWAH
-	{0xB1B0, 0xB1B0, prH2, gcLo},     //         HANGUL SYLLABLE NWAE
-	{0xB1B1, 0xB1CB, prH3, gcLo},     //    [27] HANGUL SYLLABLE NWAEG..HANGUL SYLLABLE NWAEH
-	{0xB1CC, 0xB1CC, prH2, gcLo},     //         HANGUL SYLLABLE NOE
-	{0xB1CD, 0xB1E7, prH3, gcLo},     //    [27] HANGUL SYLLABLE NOEG..HANGUL SYLLABLE NOEH
-	{0xB1E8, 0xB1E8, prH2, gcLo},     //         HANGUL SYLLABLE NYO
-	{0xB1E9, 0xB203, prH3, gcLo},     //    [27] HANGUL SYLLABLE NYOG..HANGUL SYLLABLE NYOH
-	{0xB204, 0xB204, prH2, gcLo},     //         HANGUL SYLLABLE NU
-	{0xB205, 0xB21F, prH3, gcLo},     //    [27] HANGUL SYLLABLE NUG..HANGUL SYLLABLE NUH
-	{0xB220, 0xB220, prH2, gcLo},     //         HANGUL SYLLABLE NWEO
-	{0xB221, 0xB23B, prH3, gcLo},     //    [27] HANGUL SYLLABLE NWEOG..HANGUL SYLLABLE NWEOH
-	{0xB23C, 0xB23C, prH2, gcLo},     //         HANGUL SYLLABLE NWE
-	{0xB23D, 0xB257, prH3, gcLo},     //    [27] HANGUL SYLLABLE NWEG..HANGUL SYLLABLE NWEH
-	{0xB258, 0xB258, prH2, gcLo},     //         HANGUL SYLLABLE NWI
-	{0xB259, 0xB273, prH3, gcLo},     //    [27] HANGUL SYLLABLE NWIG..HANGUL SYLLABLE NWIH
-	{0xB274, 0xB274, prH2, gcLo},     //         HANGUL SYLLABLE NYU
-	{0xB275, 0xB28F, prH3, gcLo},     //    [27] HANGUL SYLLABLE NYUG..HANGUL SYLLABLE NYUH
-	{0xB290, 0xB290, prH2, gcLo},     //         HANGUL SYLLABLE NEU
-	{0xB291, 0xB2AB, prH3, gcLo},     //    [27] HANGUL SYLLABLE NEUG..HANGUL SYLLABLE NEUH
-	{0xB2AC, 0xB2AC, prH2, gcLo},     //         HANGUL SYLLABLE NYI
-	{0xB2AD, 0xB2C7, prH3, gcLo},     //    [27] HANGUL SYLLABLE NYIG..HANGUL SYLLABLE NYIH
-	{0xB2C8, 0xB2C8, prH2, gcLo},     //         HANGUL SYLLABLE NI
-	{0xB2C9, 0xB2E3, prH3, gcLo},     //    [27] HANGUL SYLLABLE NIG..HANGUL SYLLABLE NIH
-	{0xB2E4, 0xB2E4, prH2, gcLo},     //         HANGUL SYLLABLE DA
-	{0xB2E5, 0xB2FF, prH3, gcLo},     //    [27] HANGUL SYLLABLE DAG..HANGUL SYLLABLE DAH
-	{0xB300, 0xB300, prH2, gcLo},     //         HANGUL SYLLABLE DAE
-	{0xB301, 0xB31B, prH3, gcLo},     //    [27] HANGUL SYLLABLE DAEG..HANGUL SYLLABLE DAEH
-	{0xB31C, 0xB31C, prH2, gcLo},     //         HANGUL SYLLABLE DYA
-	{0xB31D, 0xB337, prH3, gcLo},     //    [27] HANGUL SYLLABLE DYAG..HANGUL SYLLABLE DYAH
-	{0xB338, 0xB338, prH2, gcLo},     //         HANGUL SYLLABLE DYAE
-	{0xB339, 0xB353, prH3, gcLo},     //    [27] HANGUL SYLLABLE DYAEG..HANGUL SYLLABLE DYAEH
-	{0xB354, 0xB354, prH2, gcLo},     //         HANGUL SYLLABLE DEO
-	{0xB355, 0xB36F, prH3, gcLo},     //    [27] HANGUL SYLLABLE DEOG..HANGUL SYLLABLE DEOH
-	{0xB370, 0xB370, prH2, gcLo},     //         HANGUL SYLLABLE DE
-	{0xB371, 0xB38B, prH3, gcLo},     //    [27] HANGUL SYLLABLE DEG..HANGUL SYLLABLE DEH
-	{0xB38C, 0xB38C, prH2, gcLo},     //         HANGUL SYLLABLE DYEO
-	{0xB38D, 0xB3A7, prH3, gcLo},     //    [27] HANGUL SYLLABLE DYEOG..HANGUL SYLLABLE DYEOH
-	{0xB3A8, 0xB3A8, prH2, gcLo},     //         HANGUL SYLLABLE DYE
-	{0xB3A9, 0xB3C3, prH3, gcLo},     //    [27] HANGUL SYLLABLE DYEG..HANGUL SYLLABLE DYEH
-	{0xB3C4, 0xB3C4, prH2, gcLo},     //         HANGUL SYLLABLE DO
-	{0xB3C5, 0xB3DF, prH3, gcLo},     //    [27] HANGUL SYLLABLE DOG..HANGUL SYLLABLE DOH
-	{0xB3E0, 0xB3E0, prH2, gcLo},     //         HANGUL SYLLABLE DWA
-	{0xB3E1, 0xB3FB, prH3, gcLo},     //    [27] HANGUL SYLLABLE DWAG..HANGUL SYLLABLE DWAH
-	{0xB3FC, 0xB3FC, prH2, gcLo},     //         HANGUL SYLLABLE DWAE
-	{0xB3FD, 0xB417, prH3, gcLo},     //    [27] HANGUL SYLLABLE DWAEG..HANGUL SYLLABLE DWAEH
-	{0xB418, 0xB418, prH2, gcLo},     //         HANGUL SYLLABLE DOE
-	{0xB419, 0xB433, prH3, gcLo},     //    [27] HANGUL SYLLABLE DOEG..HANGUL SYLLABLE DOEH
-	{0xB434, 0xB434, prH2, gcLo},     //         HANGUL SYLLABLE DYO
-	{0xB435, 0xB44F, prH3, gcLo},     //    [27] HANGUL SYLLABLE DYOG..HANGUL SYLLABLE DYOH
-	{0xB450, 0xB450, prH2, gcLo},     //         HANGUL SYLLABLE DU
-	{0xB451, 0xB46B, prH3, gcLo},     //    [27] HANGUL SYLLABLE DUG..HANGUL SYLLABLE DUH
-	{0xB46C, 0xB46C, prH2, gcLo},     //         HANGUL SYLLABLE DWEO
-	{0xB46D, 0xB487, prH3, gcLo},     //    [27] HANGUL SYLLABLE DWEOG..HANGUL SYLLABLE DWEOH
-	{0xB488, 0xB488, prH2, gcLo},     //         HANGUL SYLLABLE DWE
-	{0xB489, 0xB4A3, prH3, gcLo},     //    [27] HANGUL SYLLABLE DWEG..HANGUL SYLLABLE DWEH
-	{0xB4A4, 0xB4A4, prH2, gcLo},     //         HANGUL SYLLABLE DWI
-	{0xB4A5, 0xB4BF, prH3, gcLo},     //    [27] HANGUL SYLLABLE DWIG..HANGUL SYLLABLE DWIH
-	{0xB4C0, 0xB4C0, prH2, gcLo},     //         HANGUL SYLLABLE DYU
-	{0xB4C1, 0xB4DB, prH3, gcLo},     //    [27] HANGUL SYLLABLE DYUG..HANGUL SYLLABLE DYUH
-	{0xB4DC, 0xB4DC, prH2, gcLo},     //         HANGUL SYLLABLE DEU
-	{0xB4DD, 0xB4F7, prH3, gcLo},     //    [27] HANGUL SYLLABLE DEUG..HANGUL SYLLABLE DEUH
-	{0xB4F8, 0xB4F8, prH2, gcLo},     //         HANGUL SYLLABLE DYI
-	{0xB4F9, 0xB513, prH3, gcLo},     //    [27] HANGUL SYLLABLE DYIG..HANGUL SYLLABLE DYIH
-	{0xB514, 0xB514, prH2, gcLo},     //         HANGUL SYLLABLE DI
-	{0xB515, 0xB52F, prH3, gcLo},     //    [27] HANGUL SYLLABLE DIG..HANGUL SYLLABLE DIH
-	{0xB530, 0xB530, prH2, gcLo},     //         HANGUL SYLLABLE DDA
-	{0xB531, 0xB54B, prH3, gcLo},     //    [27] HANGUL SYLLABLE DDAG..HANGUL SYLLABLE DDAH
-	{0xB54C, 0xB54C, prH2, gcLo},     //         HANGUL SYLLABLE DDAE
-	{0xB54D, 0xB567, prH3, gcLo},     //    [27] HANGUL SYLLABLE DDAEG..HANGUL SYLLABLE DDAEH
-	{0xB568, 0xB568, prH2, gcLo},     //         HANGUL SYLLABLE DDYA
-	{0xB569, 0xB583, prH3, gcLo},     //    [27] HANGUL SYLLABLE DDYAG..HANGUL SYLLABLE DDYAH
-	{0xB584, 0xB584, prH2, gcLo},     //         HANGUL SYLLABLE DDYAE
-	{0xB585, 0xB59F, prH3, gcLo},     //    [27] HANGUL SYLLABLE DDYAEG..HANGUL SYLLABLE DDYAEH
-	{0xB5A0, 0xB5A0, prH2, gcLo},     //         HANGUL SYLLABLE DDEO
-	{0xB5A1, 0xB5BB, prH3, gcLo},     //    [27] HANGUL SYLLABLE DDEOG..HANGUL SYLLABLE DDEOH
-	{0xB5BC, 0xB5BC, prH2, gcLo},     //         HANGUL SYLLABLE DDE
-	{0xB5BD, 0xB5D7, prH3, gcLo},     //    [27] HANGUL SYLLABLE DDEG..HANGUL SYLLABLE DDEH
-	{0xB5D8, 0xB5D8, prH2, gcLo},     //         HANGUL SYLLABLE DDYEO
-	{0xB5D9, 0xB5F3, prH3, gcLo},     //    [27] HANGUL SYLLABLE DDYEOG..HANGUL SYLLABLE DDYEOH
-	{0xB5F4, 0xB5F4, prH2, gcLo},     //         HANGUL SYLLABLE DDYE
-	{0xB5F5, 0xB60F, prH3, gcLo},     //    [27] HANGUL SYLLABLE DDYEG..HANGUL SYLLABLE DDYEH
-	{0xB610, 0xB610, prH2, gcLo},     //         HANGUL SYLLABLE DDO
-	{0xB611, 0xB62B, prH3, gcLo},     //    [27] HANGUL SYLLABLE DDOG..HANGUL SYLLABLE DDOH
-	{0xB62C, 0xB62C, prH2, gcLo},     //         HANGUL SYLLABLE DDWA
-	{0xB62D, 0xB647, prH3, gcLo},     //    [27] HANGUL SYLLABLE DDWAG..HANGUL SYLLABLE DDWAH
-	{0xB648, 0xB648, prH2, gcLo},     //         HANGUL SYLLABLE DDWAE
-	{0xB649, 0xB663, prH3, gcLo},     //    [27] HANGUL SYLLABLE DDWAEG..HANGUL SYLLABLE DDWAEH
-	{0xB664, 0xB664, prH2, gcLo},     //         HANGUL SYLLABLE DDOE
-	{0xB665, 0xB67F, prH3, gcLo},     //    [27] HANGUL SYLLABLE DDOEG..HANGUL SYLLABLE DDOEH
-	{0xB680, 0xB680, prH2, gcLo},     //         HANGUL SYLLABLE DDYO
-	{0xB681, 0xB69B, prH3, gcLo},     //    [27] HANGUL SYLLABLE DDYOG..HANGUL SYLLABLE DDYOH
-	{0xB69C, 0xB69C, prH2, gcLo},     //         HANGUL SYLLABLE DDU
-	{0xB69D, 0xB6B7, prH3, gcLo},     //    [27] HANGUL SYLLABLE DDUG..HANGUL SYLLABLE DDUH
-	{0xB6B8, 0xB6B8, prH2, gcLo},     //         HANGUL SYLLABLE DDWEO
-	{0xB6B9, 0xB6D3, prH3, gcLo},     //    [27] HANGUL SYLLABLE DDWEOG..HANGUL SYLLABLE DDWEOH
-	{0xB6D4, 0xB6D4, prH2, gcLo},     //         HANGUL SYLLABLE DDWE
-	{0xB6D5, 0xB6EF, prH3, gcLo},     //    [27] HANGUL SYLLABLE DDWEG..HANGUL SYLLABLE DDWEH
-	{0xB6F0, 0xB6F0, prH2, gcLo},     //         HANGUL SYLLABLE DDWI
-	{0xB6F1, 0xB70B, prH3, gcLo},     //    [27] HANGUL SYLLABLE DDWIG..HANGUL SYLLABLE DDWIH
-	{0xB70C, 0xB70C, prH2, gcLo},     //         HANGUL SYLLABLE DDYU
-	{0xB70D, 0xB727, prH3, gcLo},     //    [27] HANGUL SYLLABLE DDYUG..HANGUL SYLLABLE DDYUH
-	{0xB728, 0xB728, prH2, gcLo},     //         HANGUL SYLLABLE DDEU
-	{0xB729, 0xB743, prH3, gcLo},     //    [27] HANGUL SYLLABLE DDEUG..HANGUL SYLLABLE DDEUH
-	{0xB744, 0xB744, prH2, gcLo},     //         HANGUL SYLLABLE DDYI
-	{0xB745, 0xB75F, prH3, gcLo},     //    [27] HANGUL SYLLABLE DDYIG..HANGUL SYLLABLE DDYIH
-	{0xB760, 0xB760, prH2, gcLo},     //         HANGUL SYLLABLE DDI
-	{0xB761, 0xB77B, prH3, gcLo},     //    [27] HANGUL SYLLABLE DDIG..HANGUL SYLLABLE DDIH
-	{0xB77C, 0xB77C, prH2, gcLo},     //         HANGUL SYLLABLE RA
-	{0xB77D, 0xB797, prH3, gcLo},     //    [27] HANGUL SYLLABLE RAG..HANGUL SYLLABLE RAH
-	{0xB798, 0xB798, prH2, gcLo},     //         HANGUL SYLLABLE RAE
-	{0xB799, 0xB7B3, prH3, gcLo},     //    [27] HANGUL SYLLABLE RAEG..HANGUL SYLLABLE RAEH
-	{0xB7B4, 0xB7B4, prH2, gcLo},     //         HANGUL SYLLABLE RYA
-	{0xB7B5, 0xB7CF, prH3, gcLo},     //    [27] HANGUL SYLLABLE RYAG..HANGUL SYLLABLE RYAH
-	{0xB7D0, 0xB7D0, prH2, gcLo},     //         HANGUL SYLLABLE RYAE
-	{0xB7D1, 0xB7EB, prH3, gcLo},     //    [27] HANGUL SYLLABLE RYAEG..HANGUL SYLLABLE RYAEH
-	{0xB7EC, 0xB7EC, prH2, gcLo},     //         HANGUL SYLLABLE REO
-	{0xB7ED, 0xB807, prH3, gcLo},     //    [27] HANGUL SYLLABLE REOG..HANGUL SYLLABLE REOH
-	{0xB808, 0xB808, prH2, gcLo},     //         HANGUL SYLLABLE RE
-	{0xB809, 0xB823, prH3, gcLo},     //    [27] HANGUL SYLLABLE REG..HANGUL SYLLABLE REH
-	{0xB824, 0xB824, prH2, gcLo},     //         HANGUL SYLLABLE RYEO
-	{0xB825, 0xB83F, prH3, gcLo},     //    [27] HANGUL SYLLABLE RYEOG..HANGUL SYLLABLE RYEOH
-	{0xB840, 0xB840, prH2, gcLo},     //         HANGUL SYLLABLE RYE
-	{0xB841, 0xB85B, prH3, gcLo},     //    [27] HANGUL SYLLABLE RYEG..HANGUL SYLLABLE RYEH
-	{0xB85C, 0xB85C, prH2, gcLo},     //         HANGUL SYLLABLE RO
-	{0xB85D, 0xB877, prH3, gcLo},     //    [27] HANGUL SYLLABLE ROG..HANGUL SYLLABLE ROH
-	{0xB878, 0xB878, prH2, gcLo},     //         HANGUL SYLLABLE RWA
-	{0xB879, 0xB893, prH3, gcLo},     //    [27] HANGUL SYLLABLE RWAG..HANGUL SYLLABLE RWAH
-	{0xB894, 0xB894, prH2, gcLo},     //         HANGUL SYLLABLE RWAE
-	{0xB895, 0xB8AF, prH3, gcLo},     //    [27] HANGUL SYLLABLE RWAEG..HANGUL SYLLABLE RWAEH
-	{0xB8B0, 0xB8B0, prH2, gcLo},     //         HANGUL SYLLABLE ROE
-	{0xB8B1, 0xB8CB, prH3, gcLo},     //    [27] HANGUL SYLLABLE ROEG..HANGUL SYLLABLE ROEH
-	{0xB8CC, 0xB8CC, prH2, gcLo},     //         HANGUL SYLLABLE RYO
-	{0xB8CD, 0xB8E7, prH3, gcLo},     //    [27] HANGUL SYLLABLE RYOG..HANGUL SYLLABLE RYOH
-	{0xB8E8, 0xB8E8, prH2, gcLo},     //         HANGUL SYLLABLE RU
-	{0xB8E9, 0xB903, prH3, gcLo},     //    [27] HANGUL SYLLABLE RUG..HANGUL SYLLABLE RUH
-	{0xB904, 0xB904, prH2, gcLo},     //         HANGUL SYLLABLE RWEO
-	{0xB905, 0xB91F, prH3, gcLo},     //    [27] HANGUL SYLLABLE RWEOG..HANGUL SYLLABLE RWEOH
-	{0xB920, 0xB920, prH2, gcLo},     //         HANGUL SYLLABLE RWE
-	{0xB921, 0xB93B, prH3, gcLo},     //    [27] HANGUL SYLLABLE RWEG..HANGUL SYLLABLE RWEH
-	{0xB93C, 0xB93C, prH2, gcLo},     //         HANGUL SYLLABLE RWI
-	{0xB93D, 0xB957, prH3, gcLo},     //    [27] HANGUL SYLLABLE RWIG..HANGUL SYLLABLE RWIH
-	{0xB958, 0xB958, prH2, gcLo},     //         HANGUL SYLLABLE RYU
-	{0xB959, 0xB973, prH3, gcLo},     //    [27] HANGUL SYLLABLE RYUG..HANGUL SYLLABLE RYUH
-	{0xB974, 0xB974, prH2, gcLo},     //         HANGUL SYLLABLE REU
-	{0xB975, 0xB98F, prH3, gcLo},     //    [27] HANGUL SYLLABLE REUG..HANGUL SYLLABLE REUH
-	{0xB990, 0xB990, prH2, gcLo},     //         HANGUL SYLLABLE RYI
-	{0xB991, 0xB9AB, prH3, gcLo},     //    [27] HANGUL SYLLABLE RYIG..HANGUL SYLLABLE RYIH
-	{0xB9AC, 0xB9AC, prH2, gcLo},     //         HANGUL SYLLABLE RI
-	{0xB9AD, 0xB9C7, prH3, gcLo},     //    [27] HANGUL SYLLABLE RIG..HANGUL SYLLABLE RIH
-	{0xB9C8, 0xB9C8, prH2, gcLo},     //         HANGUL SYLLABLE MA
-	{0xB9C9, 0xB9E3, prH3, gcLo},     //    [27] HANGUL SYLLABLE MAG..HANGUL SYLLABLE MAH
-	{0xB9E4, 0xB9E4, prH2, gcLo},     //         HANGUL SYLLABLE MAE
-	{0xB9E5, 0xB9FF, prH3, gcLo},     //    [27] HANGUL SYLLABLE MAEG..HANGUL SYLLABLE MAEH
-	{0xBA00, 0xBA00, prH2, gcLo},     //         HANGUL SYLLABLE MYA
-	{0xBA01, 0xBA1B, prH3, gcLo},     //    [27] HANGUL SYLLABLE MYAG..HANGUL SYLLABLE MYAH
-	{0xBA1C, 0xBA1C, prH2, gcLo},     //         HANGUL SYLLABLE MYAE
-	{0xBA1D, 0xBA37, prH3, gcLo},     //    [27] HANGUL SYLLABLE MYAEG..HANGUL SYLLABLE MYAEH
-	{0xBA38, 0xBA38, prH2, gcLo},     //         HANGUL SYLLABLE MEO
-	{0xBA39, 0xBA53, prH3, gcLo},     //    [27] HANGUL SYLLABLE MEOG..HANGUL SYLLABLE MEOH
-	{0xBA54, 0xBA54, prH2, gcLo},     //         HANGUL SYLLABLE ME
-	{0xBA55, 0xBA6F, prH3, gcLo},     //    [27] HANGUL SYLLABLE MEG..HANGUL SYLLABLE MEH
-	{0xBA70, 0xBA70, prH2, gcLo},     //         HANGUL SYLLABLE MYEO
-	{0xBA71, 0xBA8B, prH3, gcLo},     //    [27] HANGUL SYLLABLE MYEOG..HANGUL SYLLABLE MYEOH
-	{0xBA8C, 0xBA8C, prH2, gcLo},     //         HANGUL SYLLABLE MYE
-	{0xBA8D, 0xBAA7, prH3, gcLo},     //    [27] HANGUL SYLLABLE MYEG..HANGUL SYLLABLE MYEH
-	{0xBAA8, 0xBAA8, prH2, gcLo},     //         HANGUL SYLLABLE MO
-	{0xBAA9, 0xBAC3, prH3, gcLo},     //    [27] HANGUL SYLLABLE MOG..HANGUL SYLLABLE MOH
-	{0xBAC4, 0xBAC4, prH2, gcLo},     //         HANGUL SYLLABLE MWA
-	{0xBAC5, 0xBADF, prH3, gcLo},     //    [27] HANGUL SYLLABLE MWAG..HANGUL SYLLABLE MWAH
-	{0xBAE0, 0xBAE0, prH2, gcLo},     //         HANGUL SYLLABLE MWAE
-	{0xBAE1, 0xBAFB, prH3, gcLo},     //    [27] HANGUL SYLLABLE MWAEG..HANGUL SYLLABLE MWAEH
-	{0xBAFC, 0xBAFC, prH2, gcLo},     //         HANGUL SYLLABLE MOE
-	{0xBAFD, 0xBB17, prH3, gcLo},     //    [27] HANGUL SYLLABLE MOEG..HANGUL SYLLABLE MOEH
-	{0xBB18, 0xBB18, prH2, gcLo},     //         HANGUL SYLLABLE MYO
-	{0xBB19, 0xBB33, prH3, gcLo},     //    [27] HANGUL SYLLABLE MYOG..HANGUL SYLLABLE MYOH
-	{0xBB34, 0xBB34, prH2, gcLo},     //         HANGUL SYLLABLE MU
-	{0xBB35, 0xBB4F, prH3, gcLo},     //    [27] HANGUL SYLLABLE MUG..HANGUL SYLLABLE MUH
-	{0xBB50, 0xBB50, prH2, gcLo},     //         HANGUL SYLLABLE MWEO
-	{0xBB51, 0xBB6B, prH3, gcLo},     //    [27] HANGUL SYLLABLE MWEOG..HANGUL SYLLABLE MWEOH
-	{0xBB6C, 0xBB6C, prH2, gcLo},     //         HANGUL SYLLABLE MWE
-	{0xBB6D, 0xBB87, prH3, gcLo},     //    [27] HANGUL SYLLABLE MWEG..HANGUL SYLLABLE MWEH
-	{0xBB88, 0xBB88, prH2, gcLo},     //         HANGUL SYLLABLE MWI
-	{0xBB89, 0xBBA3, prH3, gcLo},     //    [27] HANGUL SYLLABLE MWIG..HANGUL SYLLABLE MWIH
-	{0xBBA4, 0xBBA4, prH2, gcLo},     //         HANGUL SYLLABLE MYU
-	{0xBBA5, 0xBBBF, prH3, gcLo},     //    [27] HANGUL SYLLABLE MYUG..HANGUL SYLLABLE MYUH
-	{0xBBC0, 0xBBC0, prH2, gcLo},     //         HANGUL SYLLABLE MEU
-	{0xBBC1, 0xBBDB, prH3, gcLo},     //    [27] HANGUL SYLLABLE MEUG..HANGUL SYLLABLE MEUH
-	{0xBBDC, 0xBBDC, prH2, gcLo},     //         HANGUL SYLLABLE MYI
-	{0xBBDD, 0xBBF7, prH3, gcLo},     //    [27] HANGUL SYLLABLE MYIG..HANGUL SYLLABLE MYIH
-	{0xBBF8, 0xBBF8, prH2, gcLo},     //         HANGUL SYLLABLE MI
-	{0xBBF9, 0xBC13, prH3, gcLo},     //    [27] HANGUL SYLLABLE MIG..HANGUL SYLLABLE MIH
-	{0xBC14, 0xBC14, prH2, gcLo},     //         HANGUL SYLLABLE BA
-	{0xBC15, 0xBC2F, prH3, gcLo},     //    [27] HANGUL SYLLABLE BAG..HANGUL SYLLABLE BAH
-	{0xBC30, 0xBC30, prH2, gcLo},     //         HANGUL SYLLABLE BAE
-	{0xBC31, 0xBC4B, prH3, gcLo},     //    [27] HANGUL SYLLABLE BAEG..HANGUL SYLLABLE BAEH
-	{0xBC4C, 0xBC4C, prH2, gcLo},     //         HANGUL SYLLABLE BYA
-	{0xBC4D, 0xBC67, prH3, gcLo},     //    [27] HANGUL SYLLABLE BYAG..HANGUL SYLLABLE BYAH
-	{0xBC68, 0xBC68, prH2, gcLo},     //         HANGUL SYLLABLE BYAE
-	{0xBC69, 0xBC83, prH3, gcLo},     //    [27] HANGUL SYLLABLE BYAEG..HANGUL SYLLABLE BYAEH
-	{0xBC84, 0xBC84, prH2, gcLo},     //         HANGUL SYLLABLE BEO
-	{0xBC85, 0xBC9F, prH3, gcLo},     //    [27] HANGUL SYLLABLE BEOG..HANGUL SYLLABLE BEOH
-	{0xBCA0, 0xBCA0, prH2, gcLo},     //         HANGUL SYLLABLE BE
-	{0xBCA1, 0xBCBB, prH3, gcLo},     //    [27] HANGUL SYLLABLE BEG..HANGUL SYLLABLE BEH
-	{0xBCBC, 0xBCBC, prH2, gcLo},     //         HANGUL SYLLABLE BYEO
-	{0xBCBD, 0xBCD7, prH3, gcLo},     //    [27] HANGUL SYLLABLE BYEOG..HANGUL SYLLABLE BYEOH
-	{0xBCD8, 0xBCD8, prH2, gcLo},     //         HANGUL SYLLABLE BYE
-	{0xBCD9, 0xBCF3, prH3, gcLo},     //    [27] HANGUL SYLLABLE BYEG..HANGUL SYLLABLE BYEH
-	{0xBCF4, 0xBCF4, prH2, gcLo},     //         HANGUL SYLLABLE BO
-	{0xBCF5, 0xBD0F, prH3, gcLo},     //    [27] HANGUL SYLLABLE BOG..HANGUL SYLLABLE BOH
-	{0xBD10, 0xBD10, prH2, gcLo},     //         HANGUL SYLLABLE BWA
-	{0xBD11, 0xBD2B, prH3, gcLo},     //    [27] HANGUL SYLLABLE BWAG..HANGUL SYLLABLE BWAH
-	{0xBD2C, 0xBD2C, prH2, gcLo},     //         HANGUL SYLLABLE BWAE
-	{0xBD2D, 0xBD47, prH3, gcLo},     //    [27] HANGUL SYLLABLE BWAEG..HANGUL SYLLABLE BWAEH
-	{0xBD48, 0xBD48, prH2, gcLo},     //         HANGUL SYLLABLE BOE
-	{0xBD49, 0xBD63, prH3, gcLo},     //    [27] HANGUL SYLLABLE BOEG..HANGUL SYLLABLE BOEH
-	{0xBD64, 0xBD64, prH2, gcLo},     //         HANGUL SYLLABLE BYO
-	{0xBD65, 0xBD7F, prH3, gcLo},     //    [27] HANGUL SYLLABLE BYOG..HANGUL SYLLABLE BYOH
-	{0xBD80, 0xBD80, prH2, gcLo},     //         HANGUL SYLLABLE BU
-	{0xBD81, 0xBD9B, prH3, gcLo},     //    [27] HANGUL SYLLABLE BUG..HANGUL SYLLABLE BUH
-	{0xBD9C, 0xBD9C, prH2, gcLo},     //         HANGUL SYLLABLE BWEO
-	{0xBD9D, 0xBDB7, prH3, gcLo},     //    [27] HANGUL SYLLABLE BWEOG..HANGUL SYLLABLE BWEOH
-	{0xBDB8, 0xBDB8, prH2, gcLo},     //         HANGUL SYLLABLE BWE
-	{0xBDB9, 0xBDD3, prH3, gcLo},     //    [27] HANGUL SYLLABLE BWEG..HANGUL SYLLABLE BWEH
-	{0xBDD4, 0xBDD4, prH2, gcLo},     //         HANGUL SYLLABLE BWI
-	{0xBDD5, 0xBDEF, prH3, gcLo},     //    [27] HANGUL SYLLABLE BWIG..HANGUL SYLLABLE BWIH
-	{0xBDF0, 0xBDF0, prH2, gcLo},     //         HANGUL SYLLABLE BYU
-	{0xBDF1, 0xBE0B, prH3, gcLo},     //    [27] HANGUL SYLLABLE BYUG..HANGUL SYLLABLE BYUH
-	{0xBE0C, 0xBE0C, prH2, gcLo},     //         HANGUL SYLLABLE BEU
-	{0xBE0D, 0xBE27, prH3, gcLo},     //    [27] HANGUL SYLLABLE BEUG..HANGUL SYLLABLE BEUH
-	{0xBE28, 0xBE28, prH2, gcLo},     //         HANGUL SYLLABLE BYI
-	{0xBE29, 0xBE43, prH3, gcLo},     //    [27] HANGUL SYLLABLE BYIG..HANGUL SYLLABLE BYIH
-	{0xBE44, 0xBE44, prH2, gcLo},     //         HANGUL SYLLABLE BI
-	{0xBE45, 0xBE5F, prH3, gcLo},     //    [27] HANGUL SYLLABLE BIG..HANGUL SYLLABLE BIH
-	{0xBE60, 0xBE60, prH2, gcLo},     //         HANGUL SYLLABLE BBA
-	{0xBE61, 0xBE7B, prH3, gcLo},     //    [27] HANGUL SYLLABLE BBAG..HANGUL SYLLABLE BBAH
-	{0xBE7C, 0xBE7C, prH2, gcLo},     //         HANGUL SYLLABLE BBAE
-	{0xBE7D, 0xBE97, prH3, gcLo},     //    [27] HANGUL SYLLABLE BBAEG..HANGUL SYLLABLE BBAEH
-	{0xBE98, 0xBE98, prH2, gcLo},     //         HANGUL SYLLABLE BBYA
-	{0xBE99, 0xBEB3, prH3, gcLo},     //    [27] HANGUL SYLLABLE BBYAG..HANGUL SYLLABLE BBYAH
-	{0xBEB4, 0xBEB4, prH2, gcLo},     //         HANGUL SYLLABLE BBYAE
-	{0xBEB5, 0xBECF, prH3, gcLo},     //    [27] HANGUL SYLLABLE BBYAEG..HANGUL SYLLABLE BBYAEH
-	{0xBED0, 0xBED0, prH2, gcLo},     //         HANGUL SYLLABLE BBEO
-	{0xBED1, 0xBEEB, prH3, gcLo},     //    [27] HANGUL SYLLABLE BBEOG..HANGUL SYLLABLE BBEOH
-	{0xBEEC, 0xBEEC, prH2, gcLo},     //         HANGUL SYLLABLE BBE
-	{0xBEED, 0xBF07, prH3, gcLo},     //    [27] HANGUL SYLLABLE BBEG..HANGUL SYLLABLE BBEH
-	{0xBF08, 0xBF08, prH2, gcLo},     //         HANGUL SYLLABLE BBYEO
-	{0xBF09, 0xBF23, prH3, gcLo},     //    [27] HANGUL SYLLABLE BBYEOG..HANGUL SYLLABLE BBYEOH
-	{0xBF24, 0xBF24, prH2, gcLo},     //         HANGUL SYLLABLE BBYE
-	{0xBF25, 0xBF3F, prH3, gcLo},     //    [27] HANGUL SYLLABLE BBYEG..HANGUL SYLLABLE BBYEH
-	{0xBF40, 0xBF40, prH2, gcLo},     //         HANGUL SYLLABLE BBO
-	{0xBF41, 0xBF5B, prH3, gcLo},     //    [27] HANGUL SYLLABLE BBOG..HANGUL SYLLABLE BBOH
-	{0xBF5C, 0xBF5C, prH2, gcLo},     //         HANGUL SYLLABLE BBWA
-	{0xBF5D, 0xBF77, prH3, gcLo},     //    [27] HANGUL SYLLABLE BBWAG..HANGUL SYLLABLE BBWAH
-	{0xBF78, 0xBF78, prH2, gcLo},     //         HANGUL SYLLABLE BBWAE
-	{0xBF79, 0xBF93, prH3, gcLo},     //    [27] HANGUL SYLLABLE BBWAEG..HANGUL SYLLABLE BBWAEH
-	{0xBF94, 0xBF94, prH2, gcLo},     //         HANGUL SYLLABLE BBOE
-	{0xBF95, 0xBFAF, prH3, gcLo},     //    [27] HANGUL SYLLABLE BBOEG..HANGUL SYLLABLE BBOEH
-	{0xBFB0, 0xBFB0, prH2, gcLo},     //         HANGUL SYLLABLE BBYO
-	{0xBFB1, 0xBFCB, prH3, gcLo},     //    [27] HANGUL SYLLABLE BBYOG..HANGUL SYLLABLE BBYOH
-	{0xBFCC, 0xBFCC, prH2, gcLo},     //         HANGUL SYLLABLE BBU
-	{0xBFCD, 0xBFE7, prH3, gcLo},     //    [27] HANGUL SYLLABLE BBUG..HANGUL SYLLABLE BBUH
-	{0xBFE8, 0xBFE8, prH2, gcLo},     //         HANGUL SYLLABLE BBWEO
-	{0xBFE9, 0xC003, prH3, gcLo},     //    [27] HANGUL SYLLABLE BBWEOG..HANGUL SYLLABLE BBWEOH
-	{0xC004, 0xC004, prH2, gcLo},     //         HANGUL SYLLABLE BBWE
-	{0xC005, 0xC01F, prH3, gcLo},     //    [27] HANGUL SYLLABLE BBWEG..HANGUL SYLLABLE BBWEH
-	{0xC020, 0xC020, prH2, gcLo},     //         HANGUL SYLLABLE BBWI
-	{0xC021, 0xC03B, prH3, gcLo},     //    [27] HANGUL SYLLABLE BBWIG..HANGUL SYLLABLE BBWIH
-	{0xC03C, 0xC03C, prH2, gcLo},     //         HANGUL SYLLABLE BBYU
-	{0xC03D, 0xC057, prH3, gcLo},     //    [27] HANGUL SYLLABLE BBYUG..HANGUL SYLLABLE BBYUH
-	{0xC058, 0xC058, prH2, gcLo},     //         HANGUL SYLLABLE BBEU
-	{0xC059, 0xC073, prH3, gcLo},     //    [27] HANGUL SYLLABLE BBEUG..HANGUL SYLLABLE BBEUH
-	{0xC074, 0xC074, prH2, gcLo},     //         HANGUL SYLLABLE BBYI
-	{0xC075, 0xC08F, prH3, gcLo},     //    [27] HANGUL SYLLABLE BBYIG..HANGUL SYLLABLE BBYIH
-	{0xC090, 0xC090, prH2, gcLo},     //         HANGUL SYLLABLE BBI
-	{0xC091, 0xC0AB, prH3, gcLo},     //    [27] HANGUL SYLLABLE BBIG..HANGUL SYLLABLE BBIH
-	{0xC0AC, 0xC0AC, prH2, gcLo},     //         HANGUL SYLLABLE SA
-	{0xC0AD, 0xC0C7, prH3, gcLo},     //    [27] HANGUL SYLLABLE SAG..HANGUL SYLLABLE SAH
-	{0xC0C8, 0xC0C8, prH2, gcLo},     //         HANGUL SYLLABLE SAE
-	{0xC0C9, 0xC0E3, prH3, gcLo},     //    [27] HANGUL SYLLABLE SAEG..HANGUL SYLLABLE SAEH
-	{0xC0E4, 0xC0E4, prH2, gcLo},     //         HANGUL SYLLABLE SYA
-	{0xC0E5, 0xC0FF, prH3, gcLo},     //    [27] HANGUL SYLLABLE SYAG..HANGUL SYLLABLE SYAH
-	{0xC100, 0xC100, prH2, gcLo},     //         HANGUL SYLLABLE SYAE
-	{0xC101, 0xC11B, prH3, gcLo},     //    [27] HANGUL SYLLABLE SYAEG..HANGUL SYLLABLE SYAEH
-	{0xC11C, 0xC11C, prH2, gcLo},     //         HANGUL SYLLABLE SEO
-	{0xC11D, 0xC137, prH3, gcLo},     //    [27] HANGUL SYLLABLE SEOG..HANGUL SYLLABLE SEOH
-	{0xC138, 0xC138, prH2, gcLo},     //         HANGUL SYLLABLE SE
-	{0xC139, 0xC153, prH3, gcLo},     //    [27] HANGUL SYLLABLE SEG..HANGUL SYLLABLE SEH
-	{0xC154, 0xC154, prH2, gcLo},     //         HANGUL SYLLABLE SYEO
-	{0xC155, 0xC16F, prH3, gcLo},     //    [27] HANGUL SYLLABLE SYEOG..HANGUL SYLLABLE SYEOH
-	{0xC170, 0xC170, prH2, gcLo},     //         HANGUL SYLLABLE SYE
-	{0xC171, 0xC18B, prH3, gcLo},     //    [27] HANGUL SYLLABLE SYEG..HANGUL SYLLABLE SYEH
-	{0xC18C, 0xC18C, prH2, gcLo},     //         HANGUL SYLLABLE SO
-	{0xC18D, 0xC1A7, prH3, gcLo},     //    [27] HANGUL SYLLABLE SOG..HANGUL SYLLABLE SOH
-	{0xC1A8, 0xC1A8, prH2, gcLo},     //         HANGUL SYLLABLE SWA
-	{0xC1A9, 0xC1C3, prH3, gcLo},     //    [27] HANGUL SYLLABLE SWAG..HANGUL SYLLABLE SWAH
-	{0xC1C4, 0xC1C4, prH2, gcLo},     //         HANGUL SYLLABLE SWAE
-	{0xC1C5, 0xC1DF, prH3, gcLo},     //    [27] HANGUL SYLLABLE SWAEG..HANGUL SYLLABLE SWAEH
-	{0xC1E0, 0xC1E0, prH2, gcLo},     //         HANGUL SYLLABLE SOE
-	{0xC1E1, 0xC1FB, prH3, gcLo},     //    [27] HANGUL SYLLABLE SOEG..HANGUL SYLLABLE SOEH
-	{0xC1FC, 0xC1FC, prH2, gcLo},     //         HANGUL SYLLABLE SYO
-	{0xC1FD, 0xC217, prH3, gcLo},     //    [27] HANGUL SYLLABLE SYOG..HANGUL SYLLABLE SYOH
-	{0xC218, 0xC218, prH2, gcLo},     //         HANGUL SYLLABLE SU
-	{0xC219, 0xC233, prH3, gcLo},     //    [27] HANGUL SYLLABLE SUG..HANGUL SYLLABLE SUH
-	{0xC234, 0xC234, prH2, gcLo},     //         HANGUL SYLLABLE SWEO
-	{0xC235, 0xC24F, prH3, gcLo},     //    [27] HANGUL SYLLABLE SWEOG..HANGUL SYLLABLE SWEOH
-	{0xC250, 0xC250, prH2, gcLo},     //         HANGUL SYLLABLE SWE
-	{0xC251, 0xC26B, prH3, gcLo},     //    [27] HANGUL SYLLABLE SWEG..HANGUL SYLLABLE SWEH
-	{0xC26C, 0xC26C, prH2, gcLo},     //         HANGUL SYLLABLE SWI
-	{0xC26D, 0xC287, prH3, gcLo},     //    [27] HANGUL SYLLABLE SWIG..HANGUL SYLLABLE SWIH
-	{0xC288, 0xC288, prH2, gcLo},     //         HANGUL SYLLABLE SYU
-	{0xC289, 0xC2A3, prH3, gcLo},     //    [27] HANGUL SYLLABLE SYUG..HANGUL SYLLABLE SYUH
-	{0xC2A4, 0xC2A4, prH2, gcLo},     //         HANGUL SYLLABLE SEU
-	{0xC2A5, 0xC2BF, prH3, gcLo},     //    [27] HANGUL SYLLABLE SEUG..HANGUL SYLLABLE SEUH
-	{0xC2C0, 0xC2C0, prH2, gcLo},     //         HANGUL SYLLABLE SYI
-	{0xC2C1, 0xC2DB, prH3, gcLo},     //    [27] HANGUL SYLLABLE SYIG..HANGUL SYLLABLE SYIH
-	{0xC2DC, 0xC2DC, prH2, gcLo},     //         HANGUL SYLLABLE SI
-	{0xC2DD, 0xC2F7, prH3, gcLo},     //    [27] HANGUL SYLLABLE SIG..HANGUL SYLLABLE SIH
-	{0xC2F8, 0xC2F8, prH2, gcLo},     //         HANGUL SYLLABLE SSA
-	{0xC2F9, 0xC313, prH3, gcLo},     //    [27] HANGUL SYLLABLE SSAG..HANGUL SYLLABLE SSAH
-	{0xC314, 0xC314, prH2, gcLo},     //         HANGUL SYLLABLE SSAE
-	{0xC315, 0xC32F, prH3, gcLo},     //    [27] HANGUL SYLLABLE SSAEG..HANGUL SYLLABLE SSAEH
-	{0xC330, 0xC330, prH2, gcLo},     //         HANGUL SYLLABLE SSYA
-	{0xC331, 0xC34B, prH3, gcLo},     //    [27] HANGUL SYLLABLE SSYAG..HANGUL SYLLABLE SSYAH
-	{0xC34C, 0xC34C, prH2, gcLo},     //         HANGUL SYLLABLE SSYAE
-	{0xC34D, 0xC367, prH3, gcLo},     //    [27] HANGUL SYLLABLE SSYAEG..HANGUL SYLLABLE SSYAEH
-	{0xC368, 0xC368, prH2, gcLo},     //         HANGUL SYLLABLE SSEO
-	{0xC369, 0xC383, prH3, gcLo},     //    [27] HANGUL SYLLABLE SSEOG..HANGUL SYLLABLE SSEOH
-	{0xC384, 0xC384, prH2, gcLo},     //         HANGUL SYLLABLE SSE
-	{0xC385, 0xC39F, prH3, gcLo},     //    [27] HANGUL SYLLABLE SSEG..HANGUL SYLLABLE SSEH
-	{0xC3A0, 0xC3A0, prH2, gcLo},     //         HANGUL SYLLABLE SSYEO
-	{0xC3A1, 0xC3BB, prH3, gcLo},     //    [27] HANGUL SYLLABLE SSYEOG..HANGUL SYLLABLE SSYEOH
-	{0xC3BC, 0xC3BC, prH2, gcLo},     //         HANGUL SYLLABLE SSYE
-	{0xC3BD, 0xC3D7, prH3, gcLo},     //    [27] HANGUL SYLLABLE SSYEG..HANGUL SYLLABLE SSYEH
-	{0xC3D8, 0xC3D8, prH2, gcLo},     //         HANGUL SYLLABLE SSO
-	{0xC3D9, 0xC3F3, prH3, gcLo},     //    [27] HANGUL SYLLABLE SSOG..HANGUL SYLLABLE SSOH
-	{0xC3F4, 0xC3F4, prH2, gcLo},     //         HANGUL SYLLABLE SSWA
-	{0xC3F5, 0xC40F, prH3, gcLo},     //    [27] HANGUL SYLLABLE SSWAG..HANGUL SYLLABLE SSWAH
-	{0xC410, 0xC410, prH2, gcLo},     //         HANGUL SYLLABLE SSWAE
-	{0xC411, 0xC42B, prH3, gcLo},     //    [27] HANGUL SYLLABLE SSWAEG..HANGUL SYLLABLE SSWAEH
-	{0xC42C, 0xC42C, prH2, gcLo},     //         HANGUL SYLLABLE SSOE
-	{0xC42D, 0xC447, prH3, gcLo},     //    [27] HANGUL SYLLABLE SSOEG..HANGUL SYLLABLE SSOEH
-	{0xC448, 0xC448, prH2, gcLo},     //         HANGUL SYLLABLE SSYO
-	{0xC449, 0xC463, prH3, gcLo},     //    [27] HANGUL SYLLABLE SSYOG..HANGUL SYLLABLE SSYOH
-	{0xC464, 0xC464, prH2, gcLo},     //         HANGUL SYLLABLE SSU
-	{0xC465, 0xC47F, prH3, gcLo},     //    [27] HANGUL SYLLABLE SSUG..HANGUL SYLLABLE SSUH
-	{0xC480, 0xC480, prH2, gcLo},     //         HANGUL SYLLABLE SSWEO
-	{0xC481, 0xC49B, prH3, gcLo},     //    [27] HANGUL SYLLABLE SSWEOG..HANGUL SYLLABLE SSWEOH
-	{0xC49C, 0xC49C, prH2, gcLo},     //         HANGUL SYLLABLE SSWE
-	{0xC49D, 0xC4B7, prH3, gcLo},     //    [27] HANGUL SYLLABLE SSWEG..HANGUL SYLLABLE SSWEH
-	{0xC4B8, 0xC4B8, prH2, gcLo},     //         HANGUL SYLLABLE SSWI
-	{0xC4B9, 0xC4D3, prH3, gcLo},     //    [27] HANGUL SYLLABLE SSWIG..HANGUL SYLLABLE SSWIH
-	{0xC4D4, 0xC4D4, prH2, gcLo},     //         HANGUL SYLLABLE SSYU
-	{0xC4D5, 0xC4EF, prH3, gcLo},     //    [27] HANGUL SYLLABLE SSYUG..HANGUL SYLLABLE SSYUH
-	{0xC4F0, 0xC4F0, prH2, gcLo},     //         HANGUL SYLLABLE SSEU
-	{0xC4F1, 0xC50B, prH3, gcLo},     //    [27] HANGUL SYLLABLE SSEUG..HANGUL SYLLABLE SSEUH
-	{0xC50C, 0xC50C, prH2, gcLo},     //         HANGUL SYLLABLE SSYI
-	{0xC50D, 0xC527, prH3, gcLo},     //    [27] HANGUL SYLLABLE SSYIG..HANGUL SYLLABLE SSYIH
-	{0xC528, 0xC528, prH2, gcLo},     //         HANGUL SYLLABLE SSI
-	{0xC529, 0xC543, prH3, gcLo},     //    [27] HANGUL SYLLABLE SSIG..HANGUL SYLLABLE SSIH
-	{0xC544, 0xC544, prH2, gcLo},     //         HANGUL SYLLABLE A
-	{0xC545, 0xC55F, prH3, gcLo},     //    [27] HANGUL SYLLABLE AG..HANGUL SYLLABLE AH
-	{0xC560, 0xC560, prH2, gcLo},     //         HANGUL SYLLABLE AE
-	{0xC561, 0xC57B, prH3, gcLo},     //    [27] HANGUL SYLLABLE AEG..HANGUL SYLLABLE AEH
-	{0xC57C, 0xC57C, prH2, gcLo},     //         HANGUL SYLLABLE YA
-	{0xC57D, 0xC597, prH3, gcLo},     //    [27] HANGUL SYLLABLE YAG..HANGUL SYLLABLE YAH
-	{0xC598, 0xC598, prH2, gcLo},     //         HANGUL SYLLABLE YAE
-	{0xC599, 0xC5B3, prH3, gcLo},     //    [27] HANGUL SYLLABLE YAEG..HANGUL SYLLABLE YAEH
-	{0xC5B4, 0xC5B4, prH2, gcLo},     //         HANGUL SYLLABLE EO
-	{0xC5B5, 0xC5CF, prH3, gcLo},     //    [27] HANGUL SYLLABLE EOG..HANGUL SYLLABLE EOH
-	{0xC5D0, 0xC5D0, prH2, gcLo},     //         HANGUL SYLLABLE E
-	{0xC5D1, 0xC5EB, prH3, gcLo},     //    [27] HANGUL SYLLABLE EG..HANGUL SYLLABLE EH
-	{0xC5EC, 0xC5EC, prH2, gcLo},     //         HANGUL SYLLABLE YEO
-	{0xC5ED, 0xC607, prH3, gcLo},     //    [27] HANGUL SYLLABLE YEOG..HANGUL SYLLABLE YEOH
-	{0xC608, 0xC608, prH2, gcLo},     //         HANGUL SYLLABLE YE
-	{0xC609, 0xC623, prH3, gcLo},     //    [27] HANGUL SYLLABLE YEG..HANGUL SYLLABLE YEH
-	{0xC624, 0xC624, prH2, gcLo},     //         HANGUL SYLLABLE O
-	{0xC625, 0xC63F, prH3, gcLo},     //    [27] HANGUL SYLLABLE OG..HANGUL SYLLABLE OH
-	{0xC640, 0xC640, prH2, gcLo},     //         HANGUL SYLLABLE WA
-	{0xC641, 0xC65B, prH3, gcLo},     //    [27] HANGUL SYLLABLE WAG..HANGUL SYLLABLE WAH
-	{0xC65C, 0xC65C, prH2, gcLo},     //         HANGUL SYLLABLE WAE
-	{0xC65D, 0xC677, prH3, gcLo},     //    [27] HANGUL SYLLABLE WAEG..HANGUL SYLLABLE WAEH
-	{0xC678, 0xC678, prH2, gcLo},     //         HANGUL SYLLABLE OE
-	{0xC679, 0xC693, prH3, gcLo},     //    [27] HANGUL SYLLABLE OEG..HANGUL SYLLABLE OEH
-	{0xC694, 0xC694, prH2, gcLo},     //         HANGUL SYLLABLE YO
-	{0xC695, 0xC6AF, prH3, gcLo},     //    [27] HANGUL SYLLABLE YOG..HANGUL SYLLABLE YOH
-	{0xC6B0, 0xC6B0, prH2, gcLo},     //         HANGUL SYLLABLE U
-	{0xC6B1, 0xC6CB, prH3, gcLo},     //    [27] HANGUL SYLLABLE UG..HANGUL SYLLABLE UH
-	{0xC6CC, 0xC6CC, prH2, gcLo},     //         HANGUL SYLLABLE WEO
-	{0xC6CD, 0xC6E7, prH3, gcLo},     //    [27] HANGUL SYLLABLE WEOG..HANGUL SYLLABLE WEOH
-	{0xC6E8, 0xC6E8, prH2, gcLo},     //         HANGUL SYLLABLE WE
-	{0xC6E9, 0xC703, prH3, gcLo},     //    [27] HANGUL SYLLABLE WEG..HANGUL SYLLABLE WEH
-	{0xC704, 0xC704, prH2, gcLo},     //         HANGUL SYLLABLE WI
-	{0xC705, 0xC71F, prH3, gcLo},     //    [27] HANGUL SYLLABLE WIG..HANGUL SYLLABLE WIH
-	{0xC720, 0xC720, prH2, gcLo},     //         HANGUL SYLLABLE YU
-	{0xC721, 0xC73B, prH3, gcLo},     //    [27] HANGUL SYLLABLE YUG..HANGUL SYLLABLE YUH
-	{0xC73C, 0xC73C, prH2, gcLo},     //         HANGUL SYLLABLE EU
-	{0xC73D, 0xC757, prH3, gcLo},     //    [27] HANGUL SYLLABLE EUG..HANGUL SYLLABLE EUH
-	{0xC758, 0xC758, prH2, gcLo},     //         HANGUL SYLLABLE YI
-	{0xC759, 0xC773, prH3, gcLo},     //    [27] HANGUL SYLLABLE YIG..HANGUL SYLLABLE YIH
-	{0xC774, 0xC774, prH2, gcLo},     //         HANGUL SYLLABLE I
-	{0xC775, 0xC78F, prH3, gcLo},     //    [27] HANGUL SYLLABLE IG..HANGUL SYLLABLE IH
-	{0xC790, 0xC790, prH2, gcLo},     //         HANGUL SYLLABLE JA
-	{0xC791, 0xC7AB, prH3, gcLo},     //    [27] HANGUL SYLLABLE JAG..HANGUL SYLLABLE JAH
-	{0xC7AC, 0xC7AC, prH2, gcLo},     //         HANGUL SYLLABLE JAE
-	{0xC7AD, 0xC7C7, prH3, gcLo},     //    [27] HANGUL SYLLABLE JAEG..HANGUL SYLLABLE JAEH
-	{0xC7C8, 0xC7C8, prH2, gcLo},     //         HANGUL SYLLABLE JYA
-	{0xC7C9, 0xC7E3, prH3, gcLo},     //    [27] HANGUL SYLLABLE JYAG..HANGUL SYLLABLE JYAH
-	{0xC7E4, 0xC7E4, prH2, gcLo},     //         HANGUL SYLLABLE JYAE
-	{0xC7E5, 0xC7FF, prH3, gcLo},     //    [27] HANGUL SYLLABLE JYAEG..HANGUL SYLLABLE JYAEH
-	{0xC800, 0xC800, prH2, gcLo},     //         HANGUL SYLLABLE JEO
-	{0xC801, 0xC81B, prH3, gcLo},     //    [27] HANGUL SYLLABLE JEOG..HANGUL SYLLABLE JEOH
-	{0xC81C, 0xC81C, prH2, gcLo},     //         HANGUL SYLLABLE JE
-	{0xC81D, 0xC837, prH3, gcLo},     //    [27] HANGUL SYLLABLE JEG..HANGUL SYLLABLE JEH
-	{0xC838, 0xC838, prH2, gcLo},     //         HANGUL SYLLABLE JYEO
-	{0xC839, 0xC853, prH3, gcLo},     //    [27] HANGUL SYLLABLE JYEOG..HANGUL SYLLABLE JYEOH
-	{0xC854, 0xC854, prH2, gcLo},     //         HANGUL SYLLABLE JYE
-	{0xC855, 0xC86F, prH3, gcLo},     //    [27] HANGUL SYLLABLE JYEG..HANGUL SYLLABLE JYEH
-	{0xC870, 0xC870, prH2, gcLo},     //         HANGUL SYLLABLE JO
-	{0xC871, 0xC88B, prH3, gcLo},     //    [27] HANGUL SYLLABLE JOG..HANGUL SYLLABLE JOH
-	{0xC88C, 0xC88C, prH2, gcLo},     //         HANGUL SYLLABLE JWA
-	{0xC88D, 0xC8A7, prH3, gcLo},     //    [27] HANGUL SYLLABLE JWAG..HANGUL SYLLABLE JWAH
-	{0xC8A8, 0xC8A8, prH2, gcLo},     //         HANGUL SYLLABLE JWAE
-	{0xC8A9, 0xC8C3, prH3, gcLo},     //    [27] HANGUL SYLLABLE JWAEG..HANGUL SYLLABLE JWAEH
-	{0xC8C4, 0xC8C4, prH2, gcLo},     //         HANGUL SYLLABLE JOE
-	{0xC8C5, 0xC8DF, prH3, gcLo},     //    [27] HANGUL SYLLABLE JOEG..HANGUL SYLLABLE JOEH
-	{0xC8E0, 0xC8E0, prH2, gcLo},     //         HANGUL SYLLABLE JYO
-	{0xC8E1, 0xC8FB, prH3, gcLo},     //    [27] HANGUL SYLLABLE JYOG..HANGUL SYLLABLE JYOH
-	{0xC8FC, 0xC8FC, prH2, gcLo},     //         HANGUL SYLLABLE JU
-	{0xC8FD, 0xC917, prH3, gcLo},     //    [27] HANGUL SYLLABLE JUG..HANGUL SYLLABLE JUH
-	{0xC918, 0xC918, prH2, gcLo},     //         HANGUL SYLLABLE JWEO
-	{0xC919, 0xC933, prH3, gcLo},     //    [27] HANGUL SYLLABLE JWEOG..HANGUL SYLLABLE JWEOH
-	{0xC934, 0xC934, prH2, gcLo},     //         HANGUL SYLLABLE JWE
-	{0xC935, 0xC94F, prH3, gcLo},     //    [27] HANGUL SYLLABLE JWEG..HANGUL SYLLABLE JWEH
-	{0xC950, 0xC950, prH2, gcLo},     //         HANGUL SYLLABLE JWI
-	{0xC951, 0xC96B, prH3, gcLo},     //    [27] HANGUL SYLLABLE JWIG..HANGUL SYLLABLE JWIH
-	{0xC96C, 0xC96C, prH2, gcLo},     //         HANGUL SYLLABLE JYU
-	{0xC96D, 0xC987, prH3, gcLo},     //    [27] HANGUL SYLLABLE JYUG..HANGUL SYLLABLE JYUH
-	{0xC988, 0xC988, prH2, gcLo},     //         HANGUL SYLLABLE JEU
-	{0xC989, 0xC9A3, prH3, gcLo},     //    [27] HANGUL SYLLABLE JEUG..HANGUL SYLLABLE JEUH
-	{0xC9A4, 0xC9A4, prH2, gcLo},     //         HANGUL SYLLABLE JYI
-	{0xC9A5, 0xC9BF, prH3, gcLo},     //    [27] HANGUL SYLLABLE JYIG..HANGUL SYLLABLE JYIH
-	{0xC9C0, 0xC9C0, prH2, gcLo},     //         HANGUL SYLLABLE JI
-	{0xC9C1, 0xC9DB, prH3, gcLo},     //    [27] HANGUL SYLLABLE JIG..HANGUL SYLLABLE JIH
-	{0xC9DC, 0xC9DC, prH2, gcLo},     //         HANGUL SYLLABLE JJA
-	{0xC9DD, 0xC9F7, prH3, gcLo},     //    [27] HANGUL SYLLABLE JJAG..HANGUL SYLLABLE JJAH
-	{0xC9F8, 0xC9F8, prH2, gcLo},     //         HANGUL SYLLABLE JJAE
-	{0xC9F9, 0xCA13, prH3, gcLo},     //    [27] HANGUL SYLLABLE JJAEG..HANGUL SYLLABLE JJAEH
-	{0xCA14, 0xCA14, prH2, gcLo},     //         HANGUL SYLLABLE JJYA
-	{0xCA15, 0xCA2F, prH3, gcLo},     //    [27] HANGUL SYLLABLE JJYAG..HANGUL SYLLABLE JJYAH
-	{0xCA30, 0xCA30, prH2, gcLo},     //         HANGUL SYLLABLE JJYAE
-	{0xCA31, 0xCA4B, prH3, gcLo},     //    [27] HANGUL SYLLABLE JJYAEG..HANGUL SYLLABLE JJYAEH
-	{0xCA4C, 0xCA4C, prH2, gcLo},     //         HANGUL SYLLABLE JJEO
-	{0xCA4D, 0xCA67, prH3, gcLo},     //    [27] HANGUL SYLLABLE JJEOG..HANGUL SYLLABLE JJEOH
-	{0xCA68, 0xCA68, prH2, gcLo},     //         HANGUL SYLLABLE JJE
-	{0xCA69, 0xCA83, prH3, gcLo},     //    [27] HANGUL SYLLABLE JJEG..HANGUL SYLLABLE JJEH
-	{0xCA84, 0xCA84, prH2, gcLo},     //         HANGUL SYLLABLE JJYEO
-	{0xCA85, 0xCA9F, prH3, gcLo},     //    [27] HANGUL SYLLABLE JJYEOG..HANGUL SYLLABLE JJYEOH
-	{0xCAA0, 0xCAA0, prH2, gcLo},     //         HANGUL SYLLABLE JJYE
-	{0xCAA1, 0xCABB, prH3, gcLo},     //    [27] HANGUL SYLLABLE JJYEG..HANGUL SYLLABLE JJYEH
-	{0xCABC, 0xCABC, prH2, gcLo},     //         HANGUL SYLLABLE JJO
-	{0xCABD, 0xCAD7, prH3, gcLo},     //    [27] HANGUL SYLLABLE JJOG..HANGUL SYLLABLE JJOH
-	{0xCAD8, 0xCAD8, prH2, gcLo},     //         HANGUL SYLLABLE JJWA
-	{0xCAD9, 0xCAF3, prH3, gcLo},     //    [27] HANGUL SYLLABLE JJWAG..HANGUL SYLLABLE JJWAH
-	{0xCAF4, 0xCAF4, prH2, gcLo},     //         HANGUL SYLLABLE JJWAE
-	{0xCAF5, 0xCB0F, prH3, gcLo},     //    [27] HANGUL SYLLABLE JJWAEG..HANGUL SYLLABLE JJWAEH
-	{0xCB10, 0xCB10, prH2, gcLo},     //         HANGUL SYLLABLE JJOE
-	{0xCB11, 0xCB2B, prH3, gcLo},     //    [27] HANGUL SYLLABLE JJOEG..HANGUL SYLLABLE JJOEH
-	{0xCB2C, 0xCB2C, prH2, gcLo},     //         HANGUL SYLLABLE JJYO
-	{0xCB2D, 0xCB47, prH3, gcLo},     //    [27] HANGUL SYLLABLE JJYOG..HANGUL SYLLABLE JJYOH
-	{0xCB48, 0xCB48, prH2, gcLo},     //         HANGUL SYLLABLE JJU
-	{0xCB49, 0xCB63, prH3, gcLo},     //    [27] HANGUL SYLLABLE JJUG..HANGUL SYLLABLE JJUH
-	{0xCB64, 0xCB64, prH2, gcLo},     //         HANGUL SYLLABLE JJWEO
-	{0xCB65, 0xCB7F, prH3, gcLo},     //    [27] HANGUL SYLLABLE JJWEOG..HANGUL SYLLABLE JJWEOH
-	{0xCB80, 0xCB80, prH2, gcLo},     //         HANGUL SYLLABLE JJWE
-	{0xCB81, 0xCB9B, prH3, gcLo},     //    [27] HANGUL SYLLABLE JJWEG..HANGUL SYLLABLE JJWEH
-	{0xCB9C, 0xCB9C, prH2, gcLo},     //         HANGUL SYLLABLE JJWI
-	{0xCB9D, 0xCBB7, prH3, gcLo},     //    [27] HANGUL SYLLABLE JJWIG..HANGUL SYLLABLE JJWIH
-	{0xCBB8, 0xCBB8, prH2, gcLo},     //         HANGUL SYLLABLE JJYU
-	{0xCBB9, 0xCBD3, prH3, gcLo},     //    [27] HANGUL SYLLABLE JJYUG..HANGUL SYLLABLE JJYUH
-	{0xCBD4, 0xCBD4, prH2, gcLo},     //         HANGUL SYLLABLE JJEU
-	{0xCBD5, 0xCBEF, prH3, gcLo},     //    [27] HANGUL SYLLABLE JJEUG..HANGUL SYLLABLE JJEUH
-	{0xCBF0, 0xCBF0, prH2, gcLo},     //         HANGUL SYLLABLE JJYI
-	{0xCBF1, 0xCC0B, prH3, gcLo},     //    [27] HANGUL SYLLABLE JJYIG..HANGUL SYLLABLE JJYIH
-	{0xCC0C, 0xCC0C, prH2, gcLo},     //         HANGUL SYLLABLE JJI
-	{0xCC0D, 0xCC27, prH3, gcLo},     //    [27] HANGUL SYLLABLE JJIG..HANGUL SYLLABLE JJIH
-	{0xCC28, 0xCC28, prH2, gcLo},     //         HANGUL SYLLABLE CA
-	{0xCC29, 0xCC43, prH3, gcLo},     //    [27] HANGUL SYLLABLE CAG..HANGUL SYLLABLE CAH
-	{0xCC44, 0xCC44, prH2, gcLo},     //         HANGUL SYLLABLE CAE
-	{0xCC45, 0xCC5F, prH3, gcLo},     //    [27] HANGUL SYLLABLE CAEG..HANGUL SYLLABLE CAEH
-	{0xCC60, 0xCC60, prH2, gcLo},     //         HANGUL SYLLABLE CYA
-	{0xCC61, 0xCC7B, prH3, gcLo},     //    [27] HANGUL SYLLABLE CYAG..HANGUL SYLLABLE CYAH
-	{0xCC7C, 0xCC7C, prH2, gcLo},     //         HANGUL SYLLABLE CYAE
-	{0xCC7D, 0xCC97, prH3, gcLo},     //    [27] HANGUL SYLLABLE CYAEG..HANGUL SYLLABLE CYAEH
-	{0xCC98, 0xCC98, prH2, gcLo},     //         HANGUL SYLLABLE CEO
-	{0xCC99, 0xCCB3, prH3, gcLo},     //    [27] HANGUL SYLLABLE CEOG..HANGUL SYLLABLE CEOH
-	{0xCCB4, 0xCCB4, prH2, gcLo},     //         HANGUL SYLLABLE CE
-	{0xCCB5, 0xCCCF, prH3, gcLo},     //    [27] HANGUL SYLLABLE CEG..HANGUL SYLLABLE CEH
-	{0xCCD0, 0xCCD0, prH2, gcLo},     //         HANGUL SYLLABLE CYEO
-	{0xCCD1, 0xCCEB, prH3, gcLo},     //    [27] HANGUL SYLLABLE CYEOG..HANGUL SYLLABLE CYEOH
-	{0xCCEC, 0xCCEC, prH2, gcLo},     //         HANGUL SYLLABLE CYE
-	{0xCCED, 0xCD07, prH3, gcLo},     //    [27] HANGUL SYLLABLE CYEG..HANGUL SYLLABLE CYEH
-	{0xCD08, 0xCD08, prH2, gcLo},     //         HANGUL SYLLABLE CO
-	{0xCD09, 0xCD23, prH3, gcLo},     //    [27] HANGUL SYLLABLE COG..HANGUL SYLLABLE COH
-	{0xCD24, 0xCD24, prH2, gcLo},     //         HANGUL SYLLABLE CWA
-	{0xCD25, 0xCD3F, prH3, gcLo},     //    [27] HANGUL SYLLABLE CWAG..HANGUL SYLLABLE CWAH
-	{0xCD40, 0xCD40, prH2, gcLo},     //         HANGUL SYLLABLE CWAE
-	{0xCD41, 0xCD5B, prH3, gcLo},     //    [27] HANGUL SYLLABLE CWAEG..HANGUL SYLLABLE CWAEH
-	{0xCD5C, 0xCD5C, prH2, gcLo},     //         HANGUL SYLLABLE COE
-	{0xCD5D, 0xCD77, prH3, gcLo},     //    [27] HANGUL SYLLABLE COEG..HANGUL SYLLABLE COEH
-	{0xCD78, 0xCD78, prH2, gcLo},     //         HANGUL SYLLABLE CYO
-	{0xCD79, 0xCD93, prH3, gcLo},     //    [27] HANGUL SYLLABLE CYOG..HANGUL SYLLABLE CYOH
-	{0xCD94, 0xCD94, prH2, gcLo},     //         HANGUL SYLLABLE CU
-	{0xCD95, 0xCDAF, prH3, gcLo},     //    [27] HANGUL SYLLABLE CUG..HANGUL SYLLABLE CUH
-	{0xCDB0, 0xCDB0, prH2, gcLo},     //         HANGUL SYLLABLE CWEO
-	{0xCDB1, 0xCDCB, prH3, gcLo},     //    [27] HANGUL SYLLABLE CWEOG..HANGUL SYLLABLE CWEOH
-	{0xCDCC, 0xCDCC, prH2, gcLo},     //         HANGUL SYLLABLE CWE
-	{0xCDCD, 0xCDE7, prH3, gcLo},     //    [27] HANGUL SYLLABLE CWEG..HANGUL SYLLABLE CWEH
-	{0xCDE8, 0xCDE8, prH2, gcLo},     //         HANGUL SYLLABLE CWI
-	{0xCDE9, 0xCE03, prH3, gcLo},     //    [27] HANGUL SYLLABLE CWIG..HANGUL SYLLABLE CWIH
-	{0xCE04, 0xCE04, prH2, gcLo},     //         HANGUL SYLLABLE CYU
-	{0xCE05, 0xCE1F, prH3, gcLo},     //    [27] HANGUL SYLLABLE CYUG..HANGUL SYLLABLE CYUH
-	{0xCE20, 0xCE20, prH2, gcLo},     //         HANGUL SYLLABLE CEU
-	{0xCE21, 0xCE3B, prH3, gcLo},     //    [27] HANGUL SYLLABLE CEUG..HANGUL SYLLABLE CEUH
-	{0xCE3C, 0xCE3C, prH2, gcLo},     //         HANGUL SYLLABLE CYI
-	{0xCE3D, 0xCE57, prH3, gcLo},     //    [27] HANGUL SYLLABLE CYIG..HANGUL SYLLABLE CYIH
-	{0xCE58, 0xCE58, prH2, gcLo},     //         HANGUL SYLLABLE CI
-	{0xCE59, 0xCE73, prH3, gcLo},     //    [27] HANGUL SYLLABLE CIG..HANGUL SYLLABLE CIH
-	{0xCE74, 0xCE74, prH2, gcLo},     //         HANGUL SYLLABLE KA
-	{0xCE75, 0xCE8F, prH3, gcLo},     //    [27] HANGUL SYLLABLE KAG..HANGUL SYLLABLE KAH
-	{0xCE90, 0xCE90, prH2, gcLo},     //         HANGUL SYLLABLE KAE
-	{0xCE91, 0xCEAB, prH3, gcLo},     //    [27] HANGUL SYLLABLE KAEG..HANGUL SYLLABLE KAEH
-	{0xCEAC, 0xCEAC, prH2, gcLo},     //         HANGUL SYLLABLE KYA
-	{0xCEAD, 0xCEC7, prH3, gcLo},     //    [27] HANGUL SYLLABLE KYAG..HANGUL SYLLABLE KYAH
-	{0xCEC8, 0xCEC8, prH2, gcLo},     //         HANGUL SYLLABLE KYAE
-	{0xCEC9, 0xCEE3, prH3, gcLo},     //    [27] HANGUL SYLLABLE KYAEG..HANGUL SYLLABLE KYAEH
-	{0xCEE4, 0xCEE4, prH2, gcLo},     //         HANGUL SYLLABLE KEO
-	{0xCEE5, 0xCEFF, prH3, gcLo},     //    [27] HANGUL SYLLABLE KEOG..HANGUL SYLLABLE KEOH
-	{0xCF00, 0xCF00, prH2, gcLo},     //         HANGUL SYLLABLE KE
-	{0xCF01, 0xCF1B, prH3, gcLo},     //    [27] HANGUL SYLLABLE KEG..HANGUL SYLLABLE KEH
-	{0xCF1C, 0xCF1C, prH2, gcLo},     //         HANGUL SYLLABLE KYEO
-	{0xCF1D, 0xCF37, prH3, gcLo},     //    [27] HANGUL SYLLABLE KYEOG..HANGUL SYLLABLE KYEOH
-	{0xCF38, 0xCF38, prH2, gcLo},     //         HANGUL SYLLABLE KYE
-	{0xCF39, 0xCF53, prH3, gcLo},     //    [27] HANGUL SYLLABLE KYEG..HANGUL SYLLABLE KYEH
-	{0xCF54, 0xCF54, prH2, gcLo},     //         HANGUL SYLLABLE KO
-	{0xCF55, 0xCF6F, prH3, gcLo},     //    [27] HANGUL SYLLABLE KOG..HANGUL SYLLABLE KOH
-	{0xCF70, 0xCF70, prH2, gcLo},     //         HANGUL SYLLABLE KWA
-	{0xCF71, 0xCF8B, prH3, gcLo},     //    [27] HANGUL SYLLABLE KWAG..HANGUL SYLLABLE KWAH
-	{0xCF8C, 0xCF8C, prH2, gcLo},     //         HANGUL SYLLABLE KWAE
-	{0xCF8D, 0xCFA7, prH3, gcLo},     //    [27] HANGUL SYLLABLE KWAEG..HANGUL SYLLABLE KWAEH
-	{0xCFA8, 0xCFA8, prH2, gcLo},     //         HANGUL SYLLABLE KOE
-	{0xCFA9, 0xCFC3, prH3, gcLo},     //    [27] HANGUL SYLLABLE KOEG..HANGUL SYLLABLE KOEH
-	{0xCFC4, 0xCFC4, prH2, gcLo},     //         HANGUL SYLLABLE KYO
-	{0xCFC5, 0xCFDF, prH3, gcLo},     //    [27] HANGUL SYLLABLE KYOG..HANGUL SYLLABLE KYOH
-	{0xCFE0, 0xCFE0, prH2, gcLo},     //         HANGUL SYLLABLE KU
-	{0xCFE1, 0xCFFB, prH3, gcLo},     //    [27] HANGUL SYLLABLE KUG..HANGUL SYLLABLE KUH
-	{0xCFFC, 0xCFFC, prH2, gcLo},     //         HANGUL SYLLABLE KWEO
-	{0xCFFD, 0xD017, prH3, gcLo},     //    [27] HANGUL SYLLABLE KWEOG..HANGUL SYLLABLE KWEOH
-	{0xD018, 0xD018, prH2, gcLo},     //         HANGUL SYLLABLE KWE
-	{0xD019, 0xD033, prH3, gcLo},     //    [27] HANGUL SYLLABLE KWEG..HANGUL SYLLABLE KWEH
-	{0xD034, 0xD034, prH2, gcLo},     //         HANGUL SYLLABLE KWI
-	{0xD035, 0xD04F, prH3, gcLo},     //    [27] HANGUL SYLLABLE KWIG..HANGUL SYLLABLE KWIH
-	{0xD050, 0xD050, prH2, gcLo},     //         HANGUL SYLLABLE KYU
-	{0xD051, 0xD06B, prH3, gcLo},     //    [27] HANGUL SYLLABLE KYUG..HANGUL SYLLABLE KYUH
-	{0xD06C, 0xD06C, prH2, gcLo},     //         HANGUL SYLLABLE KEU
-	{0xD06D, 0xD087, prH3, gcLo},     //    [27] HANGUL SYLLABLE KEUG..HANGUL SYLLABLE KEUH
-	{0xD088, 0xD088, prH2, gcLo},     //         HANGUL SYLLABLE KYI
-	{0xD089, 0xD0A3, prH3, gcLo},     //    [27] HANGUL SYLLABLE KYIG..HANGUL SYLLABLE KYIH
-	{0xD0A4, 0xD0A4, prH2, gcLo},     //         HANGUL SYLLABLE KI
-	{0xD0A5, 0xD0BF, prH3, gcLo},     //    [27] HANGUL SYLLABLE KIG..HANGUL SYLLABLE KIH
-	{0xD0C0, 0xD0C0, prH2, gcLo},     //         HANGUL SYLLABLE TA
-	{0xD0C1, 0xD0DB, prH3, gcLo},     //    [27] HANGUL SYLLABLE TAG..HANGUL SYLLABLE TAH
-	{0xD0DC, 0xD0DC, prH2, gcLo},     //         HANGUL SYLLABLE TAE
-	{0xD0DD, 0xD0F7, prH3, gcLo},     //    [27] HANGUL SYLLABLE TAEG..HANGUL SYLLABLE TAEH
-	{0xD0F8, 0xD0F8, prH2, gcLo},     //         HANGUL SYLLABLE TYA
-	{0xD0F9, 0xD113, prH3, gcLo},     //    [27] HANGUL SYLLABLE TYAG..HANGUL SYLLABLE TYAH
-	{0xD114, 0xD114, prH2, gcLo},     //         HANGUL SYLLABLE TYAE
-	{0xD115, 0xD12F, prH3, gcLo},     //    [27] HANGUL SYLLABLE TYAEG..HANGUL SYLLABLE TYAEH
-	{0xD130, 0xD130, prH2, gcLo},     //         HANGUL SYLLABLE TEO
-	{0xD131, 0xD14B, prH3, gcLo},     //    [27] HANGUL SYLLABLE TEOG..HANGUL SYLLABLE TEOH
-	{0xD14C, 0xD14C, prH2, gcLo},     //         HANGUL SYLLABLE TE
-	{0xD14D, 0xD167, prH3, gcLo},     //    [27] HANGUL SYLLABLE TEG..HANGUL SYLLABLE TEH
-	{0xD168, 0xD168, prH2, gcLo},     //         HANGUL SYLLABLE TYEO
-	{0xD169, 0xD183, prH3, gcLo},     //    [27] HANGUL SYLLABLE TYEOG..HANGUL SYLLABLE TYEOH
-	{0xD184, 0xD184, prH2, gcLo},     //         HANGUL SYLLABLE TYE
-	{0xD185, 0xD19F, prH3, gcLo},     //    [27] HANGUL SYLLABLE TYEG..HANGUL SYLLABLE TYEH
-	{0xD1A0, 0xD1A0, prH2, gcLo},     //         HANGUL SYLLABLE TO
-	{0xD1A1, 0xD1BB, prH3, gcLo},     //    [27] HANGUL SYLLABLE TOG..HANGUL SYLLABLE TOH
-	{0xD1BC, 0xD1BC, prH2, gcLo},     //         HANGUL SYLLABLE TWA
-	{0xD1BD, 0xD1D7, prH3, gcLo},     //    [27] HANGUL SYLLABLE TWAG..HANGUL SYLLABLE TWAH
-	{0xD1D8, 0xD1D8, prH2, gcLo},     //         HANGUL SYLLABLE TWAE
-	{0xD1D9, 0xD1F3, prH3, gcLo},     //    [27] HANGUL SYLLABLE TWAEG..HANGUL SYLLABLE TWAEH
-	{0xD1F4, 0xD1F4, prH2, gcLo},     //         HANGUL SYLLABLE TOE
-	{0xD1F5, 0xD20F, prH3, gcLo},     //    [27] HANGUL SYLLABLE TOEG..HANGUL SYLLABLE TOEH
-	{0xD210, 0xD210, prH2, gcLo},     //         HANGUL SYLLABLE TYO
-	{0xD211, 0xD22B, prH3, gcLo},     //    [27] HANGUL SYLLABLE TYOG..HANGUL SYLLABLE TYOH
-	{0xD22C, 0xD22C, prH2, gcLo},     //         HANGUL SYLLABLE TU
-	{0xD22D, 0xD247, prH3, gcLo},     //    [27] HANGUL SYLLABLE TUG..HANGUL SYLLABLE TUH
-	{0xD248, 0xD248, prH2, gcLo},     //         HANGUL SYLLABLE TWEO
-	{0xD249, 0xD263, prH3, gcLo},     //    [27] HANGUL SYLLABLE TWEOG..HANGUL SYLLABLE TWEOH
-	{0xD264, 0xD264, prH2, gcLo},     //         HANGUL SYLLABLE TWE
-	{0xD265, 0xD27F, prH3, gcLo},     //    [27] HANGUL SYLLABLE TWEG..HANGUL SYLLABLE TWEH
-	{0xD280, 0xD280, prH2, gcLo},     //         HANGUL SYLLABLE TWI
-	{0xD281, 0xD29B, prH3, gcLo},     //    [27] HANGUL SYLLABLE TWIG..HANGUL SYLLABLE TWIH
-	{0xD29C, 0xD29C, prH2, gcLo},     //         HANGUL SYLLABLE TYU
-	{0xD29D, 0xD2B7, prH3, gcLo},     //    [27] HANGUL SYLLABLE TYUG..HANGUL SYLLABLE TYUH
-	{0xD2B8, 0xD2B8, prH2, gcLo},     //         HANGUL SYLLABLE TEU
-	{0xD2B9, 0xD2D3, prH3, gcLo},     //    [27] HANGUL SYLLABLE TEUG..HANGUL SYLLABLE TEUH
-	{0xD2D4, 0xD2D4, prH2, gcLo},     //         HANGUL SYLLABLE TYI
-	{0xD2D5, 0xD2EF, prH3, gcLo},     //    [27] HANGUL SYLLABLE TYIG..HANGUL SYLLABLE TYIH
-	{0xD2F0, 0xD2F0, prH2, gcLo},     //         HANGUL SYLLABLE TI
-	{0xD2F1, 0xD30B, prH3, gcLo},     //    [27] HANGUL SYLLABLE TIG..HANGUL SYLLABLE TIH
-	{0xD30C, 0xD30C, prH2, gcLo},     //         HANGUL SYLLABLE PA
-	{0xD30D, 0xD327, prH3, gcLo},     //    [27] HANGUL SYLLABLE PAG..HANGUL SYLLABLE PAH
-	{0xD328, 0xD328, prH2, gcLo},     //         HANGUL SYLLABLE PAE
-	{0xD329, 0xD343, prH3, gcLo},     //    [27] HANGUL SYLLABLE PAEG..HANGUL SYLLABLE PAEH
-	{0xD344, 0xD344, prH2, gcLo},     //         HANGUL SYLLABLE PYA
-	{0xD345, 0xD35F, prH3, gcLo},     //    [27] HANGUL SYLLABLE PYAG..HANGUL SYLLABLE PYAH
-	{0xD360, 0xD360, prH2, gcLo},     //         HANGUL SYLLABLE PYAE
-	{0xD361, 0xD37B, prH3, gcLo},     //    [27] HANGUL SYLLABLE PYAEG..HANGUL SYLLABLE PYAEH
-	{0xD37C, 0xD37C, prH2, gcLo},     //         HANGUL SYLLABLE PEO
-	{0xD37D, 0xD397, prH3, gcLo},     //    [27] HANGUL SYLLABLE PEOG..HANGUL SYLLABLE PEOH
-	{0xD398, 0xD398, prH2, gcLo},     //         HANGUL SYLLABLE PE
-	{0xD399, 0xD3B3, prH3, gcLo},     //    [27] HANGUL SYLLABLE PEG..HANGUL SYLLABLE PEH
-	{0xD3B4, 0xD3B4, prH2, gcLo},     //         HANGUL SYLLABLE PYEO
-	{0xD3B5, 0xD3CF, prH3, gcLo},     //    [27] HANGUL SYLLABLE PYEOG..HANGUL SYLLABLE PYEOH
-	{0xD3D0, 0xD3D0, prH2, gcLo},     //         HANGUL SYLLABLE PYE
-	{0xD3D1, 0xD3EB, prH3, gcLo},     //    [27] HANGUL SYLLABLE PYEG..HANGUL SYLLABLE PYEH
-	{0xD3EC, 0xD3EC, prH2, gcLo},     //         HANGUL SYLLABLE PO
-	{0xD3ED, 0xD407, prH3, gcLo},     //    [27] HANGUL SYLLABLE POG..HANGUL SYLLABLE POH
-	{0xD408, 0xD408, prH2, gcLo},     //         HANGUL SYLLABLE PWA
-	{0xD409, 0xD423, prH3, gcLo},     //    [27] HANGUL SYLLABLE PWAG..HANGUL SYLLABLE PWAH
-	{0xD424, 0xD424, prH2, gcLo},     //         HANGUL SYLLABLE PWAE
-	{0xD425, 0xD43F, prH3, gcLo},     //    [27] HANGUL SYLLABLE PWAEG..HANGUL SYLLABLE PWAEH
-	{0xD440, 0xD440, prH2, gcLo},     //         HANGUL SYLLABLE POE
-	{0xD441, 0xD45B, prH3, gcLo},     //    [27] HANGUL SYLLABLE POEG..HANGUL SYLLABLE POEH
-	{0xD45C, 0xD45C, prH2, gcLo},     //         HANGUL SYLLABLE PYO
-	{0xD45D, 0xD477, prH3, gcLo},     //    [27] HANGUL SYLLABLE PYOG..HANGUL SYLLABLE PYOH
-	{0xD478, 0xD478, prH2, gcLo},     //         HANGUL SYLLABLE PU
-	{0xD479, 0xD493, prH3, gcLo},     //    [27] HANGUL SYLLABLE PUG..HANGUL SYLLABLE PUH
-	{0xD494, 0xD494, prH2, gcLo},     //         HANGUL SYLLABLE PWEO
-	{0xD495, 0xD4AF, prH3, gcLo},     //    [27] HANGUL SYLLABLE PWEOG..HANGUL SYLLABLE PWEOH
-	{0xD4B0, 0xD4B0, prH2, gcLo},     //         HANGUL SYLLABLE PWE
-	{0xD4B1, 0xD4CB, prH3, gcLo},     //    [27] HANGUL SYLLABLE PWEG..HANGUL SYLLABLE PWEH
-	{0xD4CC, 0xD4CC, prH2, gcLo},     //         HANGUL SYLLABLE PWI
-	{0xD4CD, 0xD4E7, prH3, gcLo},     //    [27] HANGUL SYLLABLE PWIG..HANGUL SYLLABLE PWIH
-	{0xD4E8, 0xD4E8, prH2, gcLo},     //         HANGUL SYLLABLE PYU
-	{0xD4E9, 0xD503, prH3, gcLo},     //    [27] HANGUL SYLLABLE PYUG..HANGUL SYLLABLE PYUH
-	{0xD504, 0xD504, prH2, gcLo},     //         HANGUL SYLLABLE PEU
-	{0xD505, 0xD51F, prH3, gcLo},     //    [27] HANGUL SYLLABLE PEUG..HANGUL SYLLABLE PEUH
-	{0xD520, 0xD520, prH2, gcLo},     //         HANGUL SYLLABLE PYI
-	{0xD521, 0xD53B, prH3, gcLo},     //    [27] HANGUL SYLLABLE PYIG..HANGUL SYLLABLE PYIH
-	{0xD53C, 0xD53C, prH2, gcLo},     //         HANGUL SYLLABLE PI
-	{0xD53D, 0xD557, prH3, gcLo},     //    [27] HANGUL SYLLABLE PIG..HANGUL SYLLABLE PIH
-	{0xD558, 0xD558, prH2, gcLo},     //         HANGUL SYLLABLE HA
-	{0xD559, 0xD573, prH3, gcLo},     //    [27] HANGUL SYLLABLE HAG..HANGUL SYLLABLE HAH
-	{0xD574, 0xD574, prH2, gcLo},     //         HANGUL SYLLABLE HAE
-	{0xD575, 0xD58F, prH3, gcLo},     //    [27] HANGUL SYLLABLE HAEG..HANGUL SYLLABLE HAEH
-	{0xD590, 0xD590, prH2, gcLo},     //         HANGUL SYLLABLE HYA
-	{0xD591, 0xD5AB, prH3, gcLo},     //    [27] HANGUL SYLLABLE HYAG..HANGUL SYLLABLE HYAH
-	{0xD5AC, 0xD5AC, prH2, gcLo},     //         HANGUL SYLLABLE HYAE
-	{0xD5AD, 0xD5C7, prH3, gcLo},     //    [27] HANGUL SYLLABLE HYAEG..HANGUL SYLLABLE HYAEH
-	{0xD5C8, 0xD5C8, prH2, gcLo},     //         HANGUL SYLLABLE HEO
-	{0xD5C9, 0xD5E3, prH3, gcLo},     //    [27] HANGUL SYLLABLE HEOG..HANGUL SYLLABLE HEOH
-	{0xD5E4, 0xD5E4, prH2, gcLo},     //         HANGUL SYLLABLE HE
-	{0xD5E5, 0xD5FF, prH3, gcLo},     //    [27] HANGUL SYLLABLE HEG..HANGUL SYLLABLE HEH
-	{0xD600, 0xD600, prH2, gcLo},     //         HANGUL SYLLABLE HYEO
-	{0xD601, 0xD61B, prH3, gcLo},     //    [27] HANGUL SYLLABLE HYEOG..HANGUL SYLLABLE HYEOH
-	{0xD61C, 0xD61C, prH2, gcLo},     //         HANGUL SYLLABLE HYE
-	{0xD61D, 0xD637, prH3, gcLo},     //    [27] HANGUL SYLLABLE HYEG..HANGUL SYLLABLE HYEH
-	{0xD638, 0xD638, prH2, gcLo},     //         HANGUL SYLLABLE HO
-	{0xD639, 0xD653, prH3, gcLo},     //    [27] HANGUL SYLLABLE HOG..HANGUL SYLLABLE HOH
-	{0xD654, 0xD654, prH2, gcLo},     //         HANGUL SYLLABLE HWA
-	{0xD655, 0xD66F, prH3, gcLo},     //    [27] HANGUL SYLLABLE HWAG..HANGUL SYLLABLE HWAH
-	{0xD670, 0xD670, prH2, gcLo},     //         HANGUL SYLLABLE HWAE
-	{0xD671, 0xD68B, prH3, gcLo},     //    [27] HANGUL SYLLABLE HWAEG..HANGUL SYLLABLE HWAEH
-	{0xD68C, 0xD68C, prH2, gcLo},     //         HANGUL SYLLABLE HOE
-	{0xD68D, 0xD6A7, prH3, gcLo},     //    [27] HANGUL SYLLABLE HOEG..HANGUL SYLLABLE HOEH
-	{0xD6A8, 0xD6A8, prH2, gcLo},     //         HANGUL SYLLABLE HYO
-	{0xD6A9, 0xD6C3, prH3, gcLo},     //    [27] HANGUL SYLLABLE HYOG..HANGUL SYLLABLE HYOH
-	{0xD6C4, 0xD6C4, prH2, gcLo},     //         HANGUL SYLLABLE HU
-	{0xD6C5, 0xD6DF, prH3, gcLo},     //    [27] HANGUL SYLLABLE HUG..HANGUL SYLLABLE HUH
-	{0xD6E0, 0xD6E0, prH2, gcLo},     //         HANGUL SYLLABLE HWEO
-	{0xD6E1, 0xD6FB, prH3, gcLo},     //    [27] HANGUL SYLLABLE HWEOG..HANGUL SYLLABLE HWEOH
-	{0xD6FC, 0xD6FC, prH2, gcLo},     //         HANGUL SYLLABLE HWE
-	{0xD6FD, 0xD717, prH3, gcLo},     //    [27] HANGUL SYLLABLE HWEG..HANGUL SYLLABLE HWEH
-	{0xD718, 0xD718, prH2, gcLo},     //         HANGUL SYLLABLE HWI
-	{0xD719, 0xD733, prH3, gcLo},     //    [27] HANGUL SYLLABLE HWIG..HANGUL SYLLABLE HWIH
-	{0xD734, 0xD734, prH2, gcLo},     //         HANGUL SYLLABLE HYU
-	{0xD735, 0xD74F, prH3, gcLo},     //    [27] HANGUL SYLLABLE HYUG..HANGUL SYLLABLE HYUH
-	{0xD750, 0xD750, prH2, gcLo},     //         HANGUL SYLLABLE HEU
-	{0xD751, 0xD76B, prH3, gcLo},     //    [27] HANGUL SYLLABLE HEUG..HANGUL SYLLABLE HEUH
-	{0xD76C, 0xD76C, prH2, gcLo},     //         HANGUL SYLLABLE HYI
-	{0xD76D, 0xD787, prH3, gcLo},     //    [27] HANGUL SYLLABLE HYIG..HANGUL SYLLABLE HYIH
-	{0xD788, 0xD788, prH2, gcLo},     //         HANGUL SYLLABLE HI
-	{0xD789, 0xD7A3, prH3, gcLo},     //    [27] HANGUL SYLLABLE HIG..HANGUL SYLLABLE HIH
-	{0xD7B0, 0xD7C6, prJV, gcLo},     //    [23] HANGUL JUNGSEONG O-YEO..HANGUL JUNGSEONG ARAEA-E
-	{0xD7CB, 0xD7FB, prJT, gcLo},     //    [49] HANGUL JONGSEONG NIEUN-RIEUL..HANGUL JONGSEONG PHIEUPH-THIEUTH
-	{0xD800, 0xDB7F, prSG, gcCs},     //   [896] <surrogate-D800>..<surrogate-DB7F>
-	{0xDB80, 0xDBFF, prSG, gcCs},     //   [128] <surrogate-DB80>..<surrogate-DBFF>
-	{0xDC00, 0xDFFF, prSG, gcCs},     //  [1024] <surrogate-DC00>..<surrogate-DFFF>
-	{0xE000, 0xF8FF, prXX, gcCo},     //  [6400] <private-use-E000>..<private-use-F8FF>
-	{0xF900, 0xFA6D, prID, gcLo},     //   [366] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA6D
-	{0xFA6E, 0xFA6F, prID, gcCn},     //     [2] <reserved-FA6E>..<reserved-FA6F>
-	{0xFA70, 0xFAD9, prID, gcLo},     //   [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9
-	{0xFADA, 0xFAFF, prID, gcCn},     //    [38] <reserved-FADA>..<reserved-FAFF>
-	{0xFB00, 0xFB06, prAL, gcLl},     //     [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST
-	{0xFB13, 0xFB17, prAL, gcLl},     //     [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH
-	{0xFB1D, 0xFB1D, prHL, gcLo},     //         HEBREW LETTER YOD WITH HIRIQ
-	{0xFB1E, 0xFB1E, prCM, gcMn},     //         HEBREW POINT JUDEO-SPANISH VARIKA
-	{0xFB1F, 0xFB28, prHL, gcLo},     //    [10] HEBREW LIGATURE YIDDISH YOD YOD PATAH..HEBREW LETTER WIDE TAV
-	{0xFB29, 0xFB29, prAL, gcSm},     //         HEBREW LETTER ALTERNATIVE PLUS SIGN
-	{0xFB2A, 0xFB36, prHL, gcLo},     //    [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH
-	{0xFB38, 0xFB3C, prHL, gcLo},     //     [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH
-	{0xFB3E, 0xFB3E, prHL, gcLo},     //         HEBREW LETTER MEM WITH DAGESH
-	{0xFB40, 0xFB41, prHL, gcLo},     //     [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH
-	{0xFB43, 0xFB44, prHL, gcLo},     //     [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH
-	{0xFB46, 0xFB4F, prHL, gcLo},     //    [10] HEBREW LETTER TSADI WITH DAGESH..HEBREW LIGATURE ALEF LAMED
-	{0xFB50, 0xFBB1, prAL, gcLo},     //    [98] ARABIC LETTER ALEF WASLA ISOLATED FORM..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM
-	{0xFBB2, 0xFBC2, prAL, gcSk},     //    [17] ARABIC SYMBOL DOT ABOVE..ARABIC SYMBOL WASLA ABOVE
-	{0xFBD3, 0xFD3D, prAL, gcLo},     //   [363] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM
-	{0xFD3E, 0xFD3E, prCL, gcPe},     //         ORNATE LEFT PARENTHESIS
-	{0xFD3F, 0xFD3F, prOP, gcPs},     //         ORNATE RIGHT PARENTHESIS
-	{0xFD40, 0xFD4F, prAL, gcSo},     //    [16] ARABIC LIGATURE RAHIMAHU ALLAAH..ARABIC LIGATURE RAHIMAHUM ALLAAH
-	{0xFD50, 0xFD8F, prAL, gcLo},     //    [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM
-	{0xFD92, 0xFDC7, prAL, gcLo},     //    [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM
-	{0xFDCF, 0xFDCF, prAL, gcSo},     //         ARABIC LIGATURE SALAAMUHU ALAYNAA
-	{0xFDF0, 0xFDFB, prAL, gcLo},     //    [12] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE JALLAJALALOUHOU
-	{0xFDFC, 0xFDFC, prPO, gcSc},     //         RIAL SIGN
-	{0xFDFD, 0xFDFF, prAL, gcSo},     //     [3] ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM..ARABIC LIGATURE AZZA WA JALL
-	{0xFE00, 0xFE0F, prCM, gcMn},     //    [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16
-	{0xFE10, 0xFE10, prIS, gcPo},     //         PRESENTATION FORM FOR VERTICAL COMMA
-	{0xFE11, 0xFE12, prCL, gcPo},     //     [2] PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC COMMA..PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC FULL STOP
-	{0xFE13, 0xFE14, prIS, gcPo},     //     [2] PRESENTATION FORM FOR VERTICAL COLON..PRESENTATION FORM FOR VERTICAL SEMICOLON
-	{0xFE15, 0xFE16, prEX, gcPo},     //     [2] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK..PRESENTATION FORM FOR VERTICAL QUESTION MARK
-	{0xFE17, 0xFE17, prOP, gcPs},     //         PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET
-	{0xFE18, 0xFE18, prCL, gcPe},     //         PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET
-	{0xFE19, 0xFE19, prIN, gcPo},     //         PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS
-	{0xFE20, 0xFE2F, prCM, gcMn},     //    [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC TITLO RIGHT HALF
-	{0xFE30, 0xFE30, prID, gcPo},     //         PRESENTATION FORM FOR VERTICAL TWO DOT LEADER
-	{0xFE31, 0xFE32, prID, gcPd},     //     [2] PRESENTATION FORM FOR VERTICAL EM DASH..PRESENTATION FORM FOR VERTICAL EN DASH
-	{0xFE33, 0xFE34, prID, gcPc},     //     [2] PRESENTATION FORM FOR VERTICAL LOW LINE..PRESENTATION FORM FOR VERTICAL WAVY LOW LINE
-	{0xFE35, 0xFE35, prOP, gcPs},     //         PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS
-	{0xFE36, 0xFE36, prCL, gcPe},     //         PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS
-	{0xFE37, 0xFE37, prOP, gcPs},     //         PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET
-	{0xFE38, 0xFE38, prCL, gcPe},     //         PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET
-	{0xFE39, 0xFE39, prOP, gcPs},     //         PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET
-	{0xFE3A, 0xFE3A, prCL, gcPe},     //         PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET
-	{0xFE3B, 0xFE3B, prOP, gcPs},     //         PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET
-	{0xFE3C, 0xFE3C, prCL, gcPe},     //         PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET
-	{0xFE3D, 0xFE3D, prOP, gcPs},     //         PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET
-	{0xFE3E, 0xFE3E, prCL, gcPe},     //         PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET
-	{0xFE3F, 0xFE3F, prOP, gcPs},     //         PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET
-	{0xFE40, 0xFE40, prCL, gcPe},     //         PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET
-	{0xFE41, 0xFE41, prOP, gcPs},     //         PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET
-	{0xFE42, 0xFE42, prCL, gcPe},     //         PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET
-	{0xFE43, 0xFE43, prOP, gcPs},     //         PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET
-	{0xFE44, 0xFE44, prCL, gcPe},     //         PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET
-	{0xFE45, 0xFE46, prID, gcPo},     //     [2] SESAME DOT..WHITE SESAME DOT
-	{0xFE47, 0xFE47, prOP, gcPs},     //         PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET
-	{0xFE48, 0xFE48, prCL, gcPe},     //         PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET
-	{0xFE49, 0xFE4C, prID, gcPo},     //     [4] DASHED OVERLINE..DOUBLE WAVY OVERLINE
-	{0xFE4D, 0xFE4F, prID, gcPc},     //     [3] DASHED LOW LINE..WAVY LOW LINE
-	{0xFE50, 0xFE50, prCL, gcPo},     //         SMALL COMMA
-	{0xFE51, 0xFE51, prID, gcPo},     //         SMALL IDEOGRAPHIC COMMA
-	{0xFE52, 0xFE52, prCL, gcPo},     //         SMALL FULL STOP
-	{0xFE54, 0xFE55, prNS, gcPo},     //     [2] SMALL SEMICOLON..SMALL COLON
-	{0xFE56, 0xFE57, prEX, gcPo},     //     [2] SMALL QUESTION MARK..SMALL EXCLAMATION MARK
-	{0xFE58, 0xFE58, prID, gcPd},     //         SMALL EM DASH
-	{0xFE59, 0xFE59, prOP, gcPs},     //         SMALL LEFT PARENTHESIS
-	{0xFE5A, 0xFE5A, prCL, gcPe},     //         SMALL RIGHT PARENTHESIS
-	{0xFE5B, 0xFE5B, prOP, gcPs},     //         SMALL LEFT CURLY BRACKET
-	{0xFE5C, 0xFE5C, prCL, gcPe},     //         SMALL RIGHT CURLY BRACKET
-	{0xFE5D, 0xFE5D, prOP, gcPs},     //         SMALL LEFT TORTOISE SHELL BRACKET
-	{0xFE5E, 0xFE5E, prCL, gcPe},     //         SMALL RIGHT TORTOISE SHELL BRACKET
-	{0xFE5F, 0xFE61, prID, gcPo},     //     [3] SMALL NUMBER SIGN..SMALL ASTERISK
-	{0xFE62, 0xFE62, prID, gcSm},     //         SMALL PLUS SIGN
-	{0xFE63, 0xFE63, prID, gcPd},     //         SMALL HYPHEN-MINUS
-	{0xFE64, 0xFE66, prID, gcSm},     //     [3] SMALL LESS-THAN SIGN..SMALL EQUALS SIGN
-	{0xFE68, 0xFE68, prID, gcPo},     //         SMALL REVERSE SOLIDUS
-	{0xFE69, 0xFE69, prPR, gcSc},     //         SMALL DOLLAR SIGN
-	{0xFE6A, 0xFE6A, prPO, gcPo},     //         SMALL PERCENT SIGN
-	{0xFE6B, 0xFE6B, prID, gcPo},     //         SMALL COMMERCIAL AT
-	{0xFE70, 0xFE74, prAL, gcLo},     //     [5] ARABIC FATHATAN ISOLATED FORM..ARABIC KASRATAN ISOLATED FORM
-	{0xFE76, 0xFEFC, prAL, gcLo},     //   [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM
-	{0xFEFF, 0xFEFF, prWJ, gcCf},     //         ZERO WIDTH NO-BREAK SPACE
-	{0xFF01, 0xFF01, prEX, gcPo},     //         FULLWIDTH EXCLAMATION MARK
-	{0xFF02, 0xFF03, prID, gcPo},     //     [2] FULLWIDTH QUOTATION MARK..FULLWIDTH NUMBER SIGN
-	{0xFF04, 0xFF04, prPR, gcSc},     //         FULLWIDTH DOLLAR SIGN
-	{0xFF05, 0xFF05, prPO, gcPo},     //         FULLWIDTH PERCENT SIGN
-	{0xFF06, 0xFF07, prID, gcPo},     //     [2] FULLWIDTH AMPERSAND..FULLWIDTH APOSTROPHE
-	{0xFF08, 0xFF08, prOP, gcPs},     //         FULLWIDTH LEFT PARENTHESIS
-	{0xFF09, 0xFF09, prCL, gcPe},     //         FULLWIDTH RIGHT PARENTHESIS
-	{0xFF0A, 0xFF0A, prID, gcPo},     //         FULLWIDTH ASTERISK
-	{0xFF0B, 0xFF0B, prID, gcSm},     //         FULLWIDTH PLUS SIGN
-	{0xFF0C, 0xFF0C, prCL, gcPo},     //         FULLWIDTH COMMA
-	{0xFF0D, 0xFF0D, prID, gcPd},     //         FULLWIDTH HYPHEN-MINUS
-	{0xFF0E, 0xFF0E, prCL, gcPo},     //         FULLWIDTH FULL STOP
-	{0xFF0F, 0xFF0F, prID, gcPo},     //         FULLWIDTH SOLIDUS
-	{0xFF10, 0xFF19, prID, gcNd},     //    [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE
-	{0xFF1A, 0xFF1B, prNS, gcPo},     //     [2] FULLWIDTH COLON..FULLWIDTH SEMICOLON
-	{0xFF1C, 0xFF1E, prID, gcSm},     //     [3] FULLWIDTH LESS-THAN SIGN..FULLWIDTH GREATER-THAN SIGN
-	{0xFF1F, 0xFF1F, prEX, gcPo},     //         FULLWIDTH QUESTION MARK
-	{0xFF20, 0xFF20, prID, gcPo},     //         FULLWIDTH COMMERCIAL AT
-	{0xFF21, 0xFF3A, prID, gcLu},     //    [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z
-	{0xFF3B, 0xFF3B, prOP, gcPs},     //         FULLWIDTH LEFT SQUARE BRACKET
-	{0xFF3C, 0xFF3C, prID, gcPo},     //         FULLWIDTH REVERSE SOLIDUS
-	{0xFF3D, 0xFF3D, prCL, gcPe},     //         FULLWIDTH RIGHT SQUARE BRACKET
-	{0xFF3E, 0xFF3E, prID, gcSk},     //         FULLWIDTH CIRCUMFLEX ACCENT
-	{0xFF3F, 0xFF3F, prID, gcPc},     //         FULLWIDTH LOW LINE
-	{0xFF40, 0xFF40, prID, gcSk},     //         FULLWIDTH GRAVE ACCENT
-	{0xFF41, 0xFF5A, prID, gcLl},     //    [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z
-	{0xFF5B, 0xFF5B, prOP, gcPs},     //         FULLWIDTH LEFT CURLY BRACKET
-	{0xFF5C, 0xFF5C, prID, gcSm},     //         FULLWIDTH VERTICAL LINE
-	{0xFF5D, 0xFF5D, prCL, gcPe},     //         FULLWIDTH RIGHT CURLY BRACKET
-	{0xFF5E, 0xFF5E, prID, gcSm},     //         FULLWIDTH TILDE
-	{0xFF5F, 0xFF5F, prOP, gcPs},     //         FULLWIDTH LEFT WHITE PARENTHESIS
-	{0xFF60, 0xFF60, prCL, gcPe},     //         FULLWIDTH RIGHT WHITE PARENTHESIS
-	{0xFF61, 0xFF61, prCL, gcPo},     //         HALFWIDTH IDEOGRAPHIC FULL STOP
-	{0xFF62, 0xFF62, prOP, gcPs},     //         HALFWIDTH LEFT CORNER BRACKET
-	{0xFF63, 0xFF63, prCL, gcPe},     //         HALFWIDTH RIGHT CORNER BRACKET
-	{0xFF64, 0xFF64, prCL, gcPo},     //         HALFWIDTH IDEOGRAPHIC COMMA
-	{0xFF65, 0xFF65, prNS, gcPo},     //         HALFWIDTH KATAKANA MIDDLE DOT
-	{0xFF66, 0xFF66, prID, gcLo},     //         HALFWIDTH KATAKANA LETTER WO
-	{0xFF67, 0xFF6F, prCJ, gcLo},     //     [9] HALFWIDTH KATAKANA LETTER SMALL A..HALFWIDTH KATAKANA LETTER SMALL TU
-	{0xFF70, 0xFF70, prCJ, gcLm},     //         HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK
-	{0xFF71, 0xFF9D, prID, gcLo},     //    [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAKANA LETTER N
-	{0xFF9E, 0xFF9F, prNS, gcLm},     //     [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
-	{0xFFA0, 0xFFBE, prID, gcLo},     //    [31] HALFWIDTH HANGUL FILLER..HALFWIDTH HANGUL LETTER HIEUH
-	{0xFFC2, 0xFFC7, prID, gcLo},     //     [6] HALFWIDTH HANGUL LETTER A..HALFWIDTH HANGUL LETTER E
-	{0xFFCA, 0xFFCF, prID, gcLo},     //     [6] HALFWIDTH HANGUL LETTER YEO..HALFWIDTH HANGUL LETTER OE
-	{0xFFD2, 0xFFD7, prID, gcLo},     //     [6] HALFWIDTH HANGUL LETTER YO..HALFWIDTH HANGUL LETTER YU
-	{0xFFDA, 0xFFDC, prID, gcLo},     //     [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I
-	{0xFFE0, 0xFFE0, prPO, gcSc},     //         FULLWIDTH CENT SIGN
-	{0xFFE1, 0xFFE1, prPR, gcSc},     //         FULLWIDTH POUND SIGN
-	{0xFFE2, 0xFFE2, prID, gcSm},     //         FULLWIDTH NOT SIGN
-	{0xFFE3, 0xFFE3, prID, gcSk},     //         FULLWIDTH MACRON
-	{0xFFE4, 0xFFE4, prID, gcSo},     //         FULLWIDTH BROKEN BAR
-	{0xFFE5, 0xFFE6, prPR, gcSc},     //     [2] FULLWIDTH YEN SIGN..FULLWIDTH WON SIGN
-	{0xFFE8, 0xFFE8, prAL, gcSo},     //         HALFWIDTH FORMS LIGHT VERTICAL
-	{0xFFE9, 0xFFEC, prAL, gcSm},     //     [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS ARROW
-	{0xFFED, 0xFFEE, prAL, gcSo},     //     [2] HALFWIDTH BLACK SQUARE..HALFWIDTH WHITE CIRCLE
-	{0xFFF9, 0xFFFB, prCM, gcCf},     //     [3] INTERLINEAR ANNOTATION ANCHOR..INTERLINEAR ANNOTATION TERMINATOR
-	{0xFFFC, 0xFFFC, prCB, gcSo},     //         OBJECT REPLACEMENT CHARACTER
-	{0xFFFD, 0xFFFD, prAI, gcSo},     //         REPLACEMENT CHARACTER
-	{0x10000, 0x1000B, prAL, gcLo},   //    [12] LINEAR B SYLLABLE B008 A..LINEAR B SYLLABLE B046 JE
-	{0x1000D, 0x10026, prAL, gcLo},   //    [26] LINEAR B SYLLABLE B036 JO..LINEAR B SYLLABLE B032 QO
-	{0x10028, 0x1003A, prAL, gcLo},   //    [19] LINEAR B SYLLABLE B060 RA..LINEAR B SYLLABLE B042 WO
-	{0x1003C, 0x1003D, prAL, gcLo},   //     [2] LINEAR B SYLLABLE B017 ZA..LINEAR B SYLLABLE B074 ZE
-	{0x1003F, 0x1004D, prAL, gcLo},   //    [15] LINEAR B SYLLABLE B020 ZO..LINEAR B SYLLABLE B091 TWO
-	{0x10050, 0x1005D, prAL, gcLo},   //    [14] LINEAR B SYMBOL B018..LINEAR B SYMBOL B089
-	{0x10080, 0x100FA, prAL, gcLo},   //   [123] LINEAR B IDEOGRAM B100 MAN..LINEAR B IDEOGRAM VESSEL B305
-	{0x10100, 0x10102, prBA, gcPo},   //     [3] AEGEAN WORD SEPARATOR LINE..AEGEAN CHECK MARK
-	{0x10107, 0x10133, prAL, gcNo},   //    [45] AEGEAN NUMBER ONE..AEGEAN NUMBER NINETY THOUSAND
-	{0x10137, 0x1013F, prAL, gcSo},   //     [9] AEGEAN WEIGHT BASE UNIT..AEGEAN MEASURE THIRD SUBUNIT
-	{0x10140, 0x10174, prAL, gcNl},   //    [53] GREEK ACROPHONIC ATTIC ONE QUARTER..GREEK ACROPHONIC STRATIAN FIFTY MNAS
-	{0x10175, 0x10178, prAL, gcNo},   //     [4] GREEK ONE HALF SIGN..GREEK THREE QUARTERS SIGN
-	{0x10179, 0x10189, prAL, gcSo},   //    [17] GREEK YEAR SIGN..GREEK TRYBLION BASE SIGN
-	{0x1018A, 0x1018B, prAL, gcNo},   //     [2] GREEK ZERO SIGN..GREEK ONE QUARTER SIGN
-	{0x1018C, 0x1018E, prAL, gcSo},   //     [3] GREEK SINUSOID SIGN..NOMISMA SIGN
-	{0x10190, 0x1019C, prAL, gcSo},   //    [13] ROMAN SEXTANS SIGN..ASCIA SYMBOL
-	{0x101A0, 0x101A0, prAL, gcSo},   //         GREEK SYMBOL TAU RHO
-	{0x101D0, 0x101FC, prAL, gcSo},   //    [45] PHAISTOS DISC SIGN PEDESTRIAN..PHAISTOS DISC SIGN WAVY BAND
-	{0x101FD, 0x101FD, prCM, gcMn},   //         PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE
-	{0x10280, 0x1029C, prAL, gcLo},   //    [29] LYCIAN LETTER A..LYCIAN LETTER X
-	{0x102A0, 0x102D0, prAL, gcLo},   //    [49] CARIAN LETTER A..CARIAN LETTER UUU3
-	{0x102E0, 0x102E0, prCM, gcMn},   //         COPTIC EPACT THOUSANDS MARK
-	{0x102E1, 0x102FB, prAL, gcNo},   //    [27] COPTIC EPACT DIGIT ONE..COPTIC EPACT NUMBER NINE HUNDRED
-	{0x10300, 0x1031F, prAL, gcLo},   //    [32] OLD ITALIC LETTER A..OLD ITALIC LETTER ESS
-	{0x10320, 0x10323, prAL, gcNo},   //     [4] OLD ITALIC NUMERAL ONE..OLD ITALIC NUMERAL FIFTY
-	{0x1032D, 0x1032F, prAL, gcLo},   //     [3] OLD ITALIC LETTER YE..OLD ITALIC LETTER SOUTHERN TSE
-	{0x10330, 0x10340, prAL, gcLo},   //    [17] GOTHIC LETTER AHSA..GOTHIC LETTER PAIRTHRA
-	{0x10341, 0x10341, prAL, gcNl},   //         GOTHIC LETTER NINETY
-	{0x10342, 0x10349, prAL, gcLo},   //     [8] GOTHIC LETTER RAIDA..GOTHIC LETTER OTHAL
-	{0x1034A, 0x1034A, prAL, gcNl},   //         GOTHIC LETTER NINE HUNDRED
-	{0x10350, 0x10375, prAL, gcLo},   //    [38] OLD PERMIC LETTER AN..OLD PERMIC LETTER IA
-	{0x10376, 0x1037A, prCM, gcMn},   //     [5] COMBINING OLD PERMIC LETTER AN..COMBINING OLD PERMIC LETTER SII
-	{0x10380, 0x1039D, prAL, gcLo},   //    [30] UGARITIC LETTER ALPA..UGARITIC LETTER SSU
-	{0x1039F, 0x1039F, prBA, gcPo},   //         UGARITIC WORD DIVIDER
-	{0x103A0, 0x103C3, prAL, gcLo},   //    [36] OLD PERSIAN SIGN A..OLD PERSIAN SIGN HA
-	{0x103C8, 0x103CF, prAL, gcLo},   //     [8] OLD PERSIAN SIGN AURAMAZDAA..OLD PERSIAN SIGN BUUMISH
-	{0x103D0, 0x103D0, prBA, gcPo},   //         OLD PERSIAN WORD DIVIDER
-	{0x103D1, 0x103D5, prAL, gcNl},   //     [5] OLD PERSIAN NUMBER ONE..OLD PERSIAN NUMBER HUNDRED
-	{0x10400, 0x1044F, prAL, gcLC},   //    [80] DESERET CAPITAL LETTER LONG I..DESERET SMALL LETTER EW
-	{0x10450, 0x1047F, prAL, gcLo},   //    [48] SHAVIAN LETTER PEEP..SHAVIAN LETTER YEW
-	{0x10480, 0x1049D, prAL, gcLo},   //    [30] OSMANYA LETTER ALEF..OSMANYA LETTER OO
-	{0x104A0, 0x104A9, prNU, gcNd},   //    [10] OSMANYA DIGIT ZERO..OSMANYA DIGIT NINE
-	{0x104B0, 0x104D3, prAL, gcLu},   //    [36] OSAGE CAPITAL LETTER A..OSAGE CAPITAL LETTER ZHA
-	{0x104D8, 0x104FB, prAL, gcLl},   //    [36] OSAGE SMALL LETTER A..OSAGE SMALL LETTER ZHA
-	{0x10500, 0x10527, prAL, gcLo},   //    [40] ELBASAN LETTER A..ELBASAN LETTER KHE
-	{0x10530, 0x10563, prAL, gcLo},   //    [52] CAUCASIAN ALBANIAN LETTER ALT..CAUCASIAN ALBANIAN LETTER KIW
-	{0x1056F, 0x1056F, prAL, gcPo},   //         CAUCASIAN ALBANIAN CITATION MARK
-	{0x10570, 0x1057A, prAL, gcLu},   //    [11] VITHKUQI CAPITAL LETTER A..VITHKUQI CAPITAL LETTER GA
-	{0x1057C, 0x1058A, prAL, gcLu},   //    [15] VITHKUQI CAPITAL LETTER HA..VITHKUQI CAPITAL LETTER RE
-	{0x1058C, 0x10592, prAL, gcLu},   //     [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE
-	{0x10594, 0x10595, prAL, gcLu},   //     [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE
-	{0x10597, 0x105A1, prAL, gcLl},   //    [11] VITHKUQI SMALL LETTER A..VITHKUQI SMALL LETTER GA
-	{0x105A3, 0x105B1, prAL, gcLl},   //    [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE
-	{0x105B3, 0x105B9, prAL, gcLl},   //     [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE
-	{0x105BB, 0x105BC, prAL, gcLl},   //     [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE
-	{0x10600, 0x10736, prAL, gcLo},   //   [311] LINEAR A SIGN AB001..LINEAR A SIGN A664
-	{0x10740, 0x10755, prAL, gcLo},   //    [22] LINEAR A SIGN A701 A..LINEAR A SIGN A732 JE
-	{0x10760, 0x10767, prAL, gcLo},   //     [8] LINEAR A SIGN A800..LINEAR A SIGN A807
-	{0x10780, 0x10785, prAL, gcLm},   //     [6] MODIFIER LETTER SMALL CAPITAL AA..MODIFIER LETTER SMALL B WITH HOOK
-	{0x10787, 0x107B0, prAL, gcLm},   //    [42] MODIFIER LETTER SMALL DZ DIGRAPH..MODIFIER LETTER SMALL V WITH RIGHT HOOK
-	{0x107B2, 0x107BA, prAL, gcLm},   //     [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL
-	{0x10800, 0x10805, prAL, gcLo},   //     [6] CYPRIOT SYLLABLE A..CYPRIOT SYLLABLE JA
-	{0x10808, 0x10808, prAL, gcLo},   //         CYPRIOT SYLLABLE JO
-	{0x1080A, 0x10835, prAL, gcLo},   //    [44] CYPRIOT SYLLABLE KA..CYPRIOT SYLLABLE WO
-	{0x10837, 0x10838, prAL, gcLo},   //     [2] CYPRIOT SYLLABLE XA..CYPRIOT SYLLABLE XE
-	{0x1083C, 0x1083C, prAL, gcLo},   //         CYPRIOT SYLLABLE ZA
-	{0x1083F, 0x1083F, prAL, gcLo},   //         CYPRIOT SYLLABLE ZO
-	{0x10840, 0x10855, prAL, gcLo},   //    [22] IMPERIAL ARAMAIC LETTER ALEPH..IMPERIAL ARAMAIC LETTER TAW
-	{0x10857, 0x10857, prBA, gcPo},   //         IMPERIAL ARAMAIC SECTION SIGN
-	{0x10858, 0x1085F, prAL, gcNo},   //     [8] IMPERIAL ARAMAIC NUMBER ONE..IMPERIAL ARAMAIC NUMBER TEN THOUSAND
-	{0x10860, 0x10876, prAL, gcLo},   //    [23] PALMYRENE LETTER ALEPH..PALMYRENE LETTER TAW
-	{0x10877, 0x10878, prAL, gcSo},   //     [2] PALMYRENE LEFT-POINTING FLEURON..PALMYRENE RIGHT-POINTING FLEURON
-	{0x10879, 0x1087F, prAL, gcNo},   //     [7] PALMYRENE NUMBER ONE..PALMYRENE NUMBER TWENTY
-	{0x10880, 0x1089E, prAL, gcLo},   //    [31] NABATAEAN LETTER FINAL ALEPH..NABATAEAN LETTER TAW
-	{0x108A7, 0x108AF, prAL, gcNo},   //     [9] NABATAEAN NUMBER ONE..NABATAEAN NUMBER ONE HUNDRED
-	{0x108E0, 0x108F2, prAL, gcLo},   //    [19] HATRAN LETTER ALEPH..HATRAN LETTER QOPH
-	{0x108F4, 0x108F5, prAL, gcLo},   //     [2] HATRAN LETTER SHIN..HATRAN LETTER TAW
-	{0x108FB, 0x108FF, prAL, gcNo},   //     [5] HATRAN NUMBER ONE..HATRAN NUMBER ONE HUNDRED
-	{0x10900, 0x10915, prAL, gcLo},   //    [22] PHOENICIAN LETTER ALF..PHOENICIAN LETTER TAU
-	{0x10916, 0x1091B, prAL, gcNo},   //     [6] PHOENICIAN NUMBER ONE..PHOENICIAN NUMBER THREE
-	{0x1091F, 0x1091F, prBA, gcPo},   //         PHOENICIAN WORD SEPARATOR
-	{0x10920, 0x10939, prAL, gcLo},   //    [26] LYDIAN LETTER A..LYDIAN LETTER C
-	{0x1093F, 0x1093F, prAL, gcPo},   //         LYDIAN TRIANGULAR MARK
-	{0x10980, 0x1099F, prAL, gcLo},   //    [32] MEROITIC HIEROGLYPHIC LETTER A..MEROITIC HIEROGLYPHIC SYMBOL VIDJ-2
-	{0x109A0, 0x109B7, prAL, gcLo},   //    [24] MEROITIC CURSIVE LETTER A..MEROITIC CURSIVE LETTER DA
-	{0x109BC, 0x109BD, prAL, gcNo},   //     [2] MEROITIC CURSIVE FRACTION ELEVEN TWELFTHS..MEROITIC CURSIVE FRACTION ONE HALF
-	{0x109BE, 0x109BF, prAL, gcLo},   //     [2] MEROITIC CURSIVE LOGOGRAM RMT..MEROITIC CURSIVE LOGOGRAM IMN
-	{0x109C0, 0x109CF, prAL, gcNo},   //    [16] MEROITIC CURSIVE NUMBER ONE..MEROITIC CURSIVE NUMBER SEVENTY
-	{0x109D2, 0x109FF, prAL, gcNo},   //    [46] MEROITIC CURSIVE NUMBER ONE HUNDRED..MEROITIC CURSIVE FRACTION TEN TWELFTHS
-	{0x10A00, 0x10A00, prAL, gcLo},   //         KHAROSHTHI LETTER A
-	{0x10A01, 0x10A03, prCM, gcMn},   //     [3] KHAROSHTHI VOWEL SIGN I..KHAROSHTHI VOWEL SIGN VOCALIC R
-	{0x10A05, 0x10A06, prCM, gcMn},   //     [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O
-	{0x10A0C, 0x10A0F, prCM, gcMn},   //     [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA
-	{0x10A10, 0x10A13, prAL, gcLo},   //     [4] KHAROSHTHI LETTER KA..KHAROSHTHI LETTER GHA
-	{0x10A15, 0x10A17, prAL, gcLo},   //     [3] KHAROSHTHI LETTER CA..KHAROSHTHI LETTER JA
-	{0x10A19, 0x10A35, prAL, gcLo},   //    [29] KHAROSHTHI LETTER NYA..KHAROSHTHI LETTER VHA
-	{0x10A38, 0x10A3A, prCM, gcMn},   //     [3] KHAROSHTHI SIGN BAR ABOVE..KHAROSHTHI SIGN DOT BELOW
-	{0x10A3F, 0x10A3F, prCM, gcMn},   //         KHAROSHTHI VIRAMA
-	{0x10A40, 0x10A48, prAL, gcNo},   //     [9] KHAROSHTHI DIGIT ONE..KHAROSHTHI FRACTION ONE HALF
-	{0x10A50, 0x10A57, prBA, gcPo},   //     [8] KHAROSHTHI PUNCTUATION DOT..KHAROSHTHI PUNCTUATION DOUBLE DANDA
-	{0x10A58, 0x10A58, prAL, gcPo},   //         KHAROSHTHI PUNCTUATION LINES
-	{0x10A60, 0x10A7C, prAL, gcLo},   //    [29] OLD SOUTH ARABIAN LETTER HE..OLD SOUTH ARABIAN LETTER THETH
-	{0x10A7D, 0x10A7E, prAL, gcNo},   //     [2] OLD SOUTH ARABIAN NUMBER ONE..OLD SOUTH ARABIAN NUMBER FIFTY
-	{0x10A7F, 0x10A7F, prAL, gcPo},   //         OLD SOUTH ARABIAN NUMERIC INDICATOR
-	{0x10A80, 0x10A9C, prAL, gcLo},   //    [29] OLD NORTH ARABIAN LETTER HEH..OLD NORTH ARABIAN LETTER ZAH
-	{0x10A9D, 0x10A9F, prAL, gcNo},   //     [3] OLD NORTH ARABIAN NUMBER ONE..OLD NORTH ARABIAN NUMBER TWENTY
-	{0x10AC0, 0x10AC7, prAL, gcLo},   //     [8] MANICHAEAN LETTER ALEPH..MANICHAEAN LETTER WAW
-	{0x10AC8, 0x10AC8, prAL, gcSo},   //         MANICHAEAN SIGN UD
-	{0x10AC9, 0x10AE4, prAL, gcLo},   //    [28] MANICHAEAN LETTER ZAYIN..MANICHAEAN LETTER TAW
-	{0x10AE5, 0x10AE6, prCM, gcMn},   //     [2] MANICHAEAN ABBREVIATION MARK ABOVE..MANICHAEAN ABBREVIATION MARK BELOW
-	{0x10AEB, 0x10AEF, prAL, gcNo},   //     [5] MANICHAEAN NUMBER ONE..MANICHAEAN NUMBER ONE HUNDRED
-	{0x10AF0, 0x10AF5, prBA, gcPo},   //     [6] MANICHAEAN PUNCTUATION STAR..MANICHAEAN PUNCTUATION TWO DOTS
-	{0x10AF6, 0x10AF6, prIN, gcPo},   //         MANICHAEAN PUNCTUATION LINE FILLER
-	{0x10B00, 0x10B35, prAL, gcLo},   //    [54] AVESTAN LETTER A..AVESTAN LETTER HE
-	{0x10B39, 0x10B3F, prBA, gcPo},   //     [7] AVESTAN ABBREVIATION MARK..LARGE ONE RING OVER TWO RINGS PUNCTUATION
-	{0x10B40, 0x10B55, prAL, gcLo},   //    [22] INSCRIPTIONAL PARTHIAN LETTER ALEPH..INSCRIPTIONAL PARTHIAN LETTER TAW
-	{0x10B58, 0x10B5F, prAL, gcNo},   //     [8] INSCRIPTIONAL PARTHIAN NUMBER ONE..INSCRIPTIONAL PARTHIAN NUMBER ONE THOUSAND
-	{0x10B60, 0x10B72, prAL, gcLo},   //    [19] INSCRIPTIONAL PAHLAVI LETTER ALEPH..INSCRIPTIONAL PAHLAVI LETTER TAW
-	{0x10B78, 0x10B7F, prAL, gcNo},   //     [8] INSCRIPTIONAL PAHLAVI NUMBER ONE..INSCRIPTIONAL PAHLAVI NUMBER ONE THOUSAND
-	{0x10B80, 0x10B91, prAL, gcLo},   //    [18] PSALTER PAHLAVI LETTER ALEPH..PSALTER PAHLAVI LETTER TAW
-	{0x10B99, 0x10B9C, prAL, gcPo},   //     [4] PSALTER PAHLAVI SECTION MARK..PSALTER PAHLAVI FOUR DOTS WITH DOT
-	{0x10BA9, 0x10BAF, prAL, gcNo},   //     [7] PSALTER PAHLAVI NUMBER ONE..PSALTER PAHLAVI NUMBER ONE HUNDRED
-	{0x10C00, 0x10C48, prAL, gcLo},   //    [73] OLD TURKIC LETTER ORKHON A..OLD TURKIC LETTER ORKHON BASH
-	{0x10C80, 0x10CB2, prAL, gcLu},   //    [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US
-	{0x10CC0, 0x10CF2, prAL, gcLl},   //    [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US
-	{0x10CFA, 0x10CFF, prAL, gcNo},   //     [6] OLD HUNGARIAN NUMBER ONE..OLD HUNGARIAN NUMBER ONE THOUSAND
-	{0x10D00, 0x10D23, prAL, gcLo},   //    [36] HANIFI ROHINGYA LETTER A..HANIFI ROHINGYA MARK NA KHONNA
-	{0x10D24, 0x10D27, prCM, gcMn},   //     [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI
-	{0x10D30, 0x10D39, prNU, gcNd},   //    [10] HANIFI ROHINGYA DIGIT ZERO..HANIFI ROHINGYA DIGIT NINE
-	{0x10E60, 0x10E7E, prAL, gcNo},   //    [31] RUMI DIGIT ONE..RUMI FRACTION TWO THIRDS
-	{0x10E80, 0x10EA9, prAL, gcLo},   //    [42] YEZIDI LETTER ELIF..YEZIDI LETTER ET
-	{0x10EAB, 0x10EAC, prCM, gcMn},   //     [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK
-	{0x10EAD, 0x10EAD, prBA, gcPd},   //         YEZIDI HYPHENATION MARK
-	{0x10EB0, 0x10EB1, prAL, gcLo},   //     [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE
-	{0x10EFD, 0x10EFF, prCM, gcMn},   //     [3] ARABIC SMALL LOW WORD SAKTA..ARABIC SMALL LOW WORD MADDA
-	{0x10F00, 0x10F1C, prAL, gcLo},   //    [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL
-	{0x10F1D, 0x10F26, prAL, gcNo},   //    [10] OLD SOGDIAN NUMBER ONE..OLD SOGDIAN FRACTION ONE HALF
-	{0x10F27, 0x10F27, prAL, gcLo},   //         OLD SOGDIAN LIGATURE AYIN-DALETH
-	{0x10F30, 0x10F45, prAL, gcLo},   //    [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN
-	{0x10F46, 0x10F50, prCM, gcMn},   //    [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW
-	{0x10F51, 0x10F54, prAL, gcNo},   //     [4] SOGDIAN NUMBER ONE..SOGDIAN NUMBER ONE HUNDRED
-	{0x10F55, 0x10F59, prAL, gcPo},   //     [5] SOGDIAN PUNCTUATION TWO VERTICAL BARS..SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT
-	{0x10F70, 0x10F81, prAL, gcLo},   //    [18] OLD UYGHUR LETTER ALEPH..OLD UYGHUR LETTER LESH
-	{0x10F82, 0x10F85, prCM, gcMn},   //     [4] OLD UYGHUR COMBINING DOT ABOVE..OLD UYGHUR COMBINING TWO DOTS BELOW
-	{0x10F86, 0x10F89, prAL, gcPo},   //     [4] OLD UYGHUR PUNCTUATION BAR..OLD UYGHUR PUNCTUATION FOUR DOTS
-	{0x10FB0, 0x10FC4, prAL, gcLo},   //    [21] CHORASMIAN LETTER ALEPH..CHORASMIAN LETTER TAW
-	{0x10FC5, 0x10FCB, prAL, gcNo},   //     [7] CHORASMIAN NUMBER ONE..CHORASMIAN NUMBER ONE HUNDRED
-	{0x10FE0, 0x10FF6, prAL, gcLo},   //    [23] ELYMAIC LETTER ALEPH..ELYMAIC LIGATURE ZAYIN-YODH
-	{0x11000, 0x11000, prCM, gcMc},   //         BRAHMI SIGN CANDRABINDU
-	{0x11001, 0x11001, prCM, gcMn},   //         BRAHMI SIGN ANUSVARA
-	{0x11002, 0x11002, prCM, gcMc},   //         BRAHMI SIGN VISARGA
-	{0x11003, 0x11037, prAL, gcLo},   //    [53] BRAHMI SIGN JIHVAMULIYA..BRAHMI LETTER OLD TAMIL NNNA
-	{0x11038, 0x11046, prCM, gcMn},   //    [15] BRAHMI VOWEL SIGN AA..BRAHMI VIRAMA
-	{0x11047, 0x11048, prBA, gcPo},   //     [2] BRAHMI DANDA..BRAHMI DOUBLE DANDA
-	{0x11049, 0x1104D, prAL, gcPo},   //     [5] BRAHMI PUNCTUATION DOT..BRAHMI PUNCTUATION LOTUS
-	{0x11052, 0x11065, prAL, gcNo},   //    [20] BRAHMI NUMBER ONE..BRAHMI NUMBER ONE THOUSAND
-	{0x11066, 0x1106F, prNU, gcNd},   //    [10] BRAHMI DIGIT ZERO..BRAHMI DIGIT NINE
-	{0x11070, 0x11070, prCM, gcMn},   //         BRAHMI SIGN OLD TAMIL VIRAMA
-	{0x11071, 0x11072, prAL, gcLo},   //     [2] BRAHMI LETTER OLD TAMIL SHORT E..BRAHMI LETTER OLD TAMIL SHORT O
-	{0x11073, 0x11074, prCM, gcMn},   //     [2] BRAHMI VOWEL SIGN OLD TAMIL SHORT E..BRAHMI VOWEL SIGN OLD TAMIL SHORT O
-	{0x11075, 0x11075, prAL, gcLo},   //         BRAHMI LETTER OLD TAMIL LLA
-	{0x1107F, 0x1107F, prCM, gcMn},   //         BRAHMI NUMBER JOINER
-	{0x11080, 0x11081, prCM, gcMn},   //     [2] KAITHI SIGN CANDRABINDU..KAITHI SIGN ANUSVARA
-	{0x11082, 0x11082, prCM, gcMc},   //         KAITHI SIGN VISARGA
-	{0x11083, 0x110AF, prAL, gcLo},   //    [45] KAITHI LETTER A..KAITHI LETTER HA
-	{0x110B0, 0x110B2, prCM, gcMc},   //     [3] KAITHI VOWEL SIGN AA..KAITHI VOWEL SIGN II
-	{0x110B3, 0x110B6, prCM, gcMn},   //     [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI
-	{0x110B7, 0x110B8, prCM, gcMc},   //     [2] KAITHI VOWEL SIGN O..KAITHI VOWEL SIGN AU
-	{0x110B9, 0x110BA, prCM, gcMn},   //     [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA
-	{0x110BB, 0x110BC, prAL, gcPo},   //     [2] KAITHI ABBREVIATION SIGN..KAITHI ENUMERATION SIGN
-	{0x110BD, 0x110BD, prAL, gcCf},   //         KAITHI NUMBER SIGN
-	{0x110BE, 0x110C1, prBA, gcPo},   //     [4] KAITHI SECTION MARK..KAITHI DOUBLE DANDA
-	{0x110C2, 0x110C2, prCM, gcMn},   //         KAITHI VOWEL SIGN VOCALIC R
-	{0x110CD, 0x110CD, prAL, gcCf},   //         KAITHI NUMBER SIGN ABOVE
-	{0x110D0, 0x110E8, prAL, gcLo},   //    [25] SORA SOMPENG LETTER SAH..SORA SOMPENG LETTER MAE
-	{0x110F0, 0x110F9, prNU, gcNd},   //    [10] SORA SOMPENG DIGIT ZERO..SORA SOMPENG DIGIT NINE
-	{0x11100, 0x11102, prCM, gcMn},   //     [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA
-	{0x11103, 0x11126, prAL, gcLo},   //    [36] CHAKMA LETTER AA..CHAKMA LETTER HAA
-	{0x11127, 0x1112B, prCM, gcMn},   //     [5] CHAKMA VOWEL SIGN A..CHAKMA VOWEL SIGN UU
-	{0x1112C, 0x1112C, prCM, gcMc},   //         CHAKMA VOWEL SIGN E
-	{0x1112D, 0x11134, prCM, gcMn},   //     [8] CHAKMA VOWEL SIGN AI..CHAKMA MAAYYAA
-	{0x11136, 0x1113F, prNU, gcNd},   //    [10] CHAKMA DIGIT ZERO..CHAKMA DIGIT NINE
-	{0x11140, 0x11143, prBA, gcPo},   //     [4] CHAKMA SECTION MARK..CHAKMA QUESTION MARK
-	{0x11144, 0x11144, prAL, gcLo},   //         CHAKMA LETTER LHAA
-	{0x11145, 0x11146, prCM, gcMc},   //     [2] CHAKMA VOWEL SIGN AA..CHAKMA VOWEL SIGN EI
-	{0x11147, 0x11147, prAL, gcLo},   //         CHAKMA LETTER VAA
-	{0x11150, 0x11172, prAL, gcLo},   //    [35] MAHAJANI LETTER A..MAHAJANI LETTER RRA
-	{0x11173, 0x11173, prCM, gcMn},   //         MAHAJANI SIGN NUKTA
-	{0x11174, 0x11174, prAL, gcPo},   //         MAHAJANI ABBREVIATION SIGN
-	{0x11175, 0x11175, prBB, gcPo},   //         MAHAJANI SECTION MARK
-	{0x11176, 0x11176, prAL, gcLo},   //         MAHAJANI LIGATURE SHRI
-	{0x11180, 0x11181, prCM, gcMn},   //     [2] SHARADA SIGN CANDRABINDU..SHARADA SIGN ANUSVARA
-	{0x11182, 0x11182, prCM, gcMc},   //         SHARADA SIGN VISARGA
-	{0x11183, 0x111B2, prAL, gcLo},   //    [48] SHARADA LETTER A..SHARADA LETTER HA
-	{0x111B3, 0x111B5, prCM, gcMc},   //     [3] SHARADA VOWEL SIGN AA..SHARADA VOWEL SIGN II
-	{0x111B6, 0x111BE, prCM, gcMn},   //     [9] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN O
-	{0x111BF, 0x111C0, prCM, gcMc},   //     [2] SHARADA VOWEL SIGN AU..SHARADA SIGN VIRAMA
-	{0x111C1, 0x111C4, prAL, gcLo},   //     [4] SHARADA SIGN AVAGRAHA..SHARADA OM
-	{0x111C5, 0x111C6, prBA, gcPo},   //     [2] SHARADA DANDA..SHARADA DOUBLE DANDA
-	{0x111C7, 0x111C7, prAL, gcPo},   //         SHARADA ABBREVIATION SIGN
-	{0x111C8, 0x111C8, prBA, gcPo},   //         SHARADA SEPARATOR
-	{0x111C9, 0x111CC, prCM, gcMn},   //     [4] SHARADA SANDHI MARK..SHARADA EXTRA SHORT VOWEL MARK
-	{0x111CD, 0x111CD, prAL, gcPo},   //         SHARADA SUTRA MARK
-	{0x111CE, 0x111CE, prCM, gcMc},   //         SHARADA VOWEL SIGN PRISHTHAMATRA E
-	{0x111CF, 0x111CF, prCM, gcMn},   //         SHARADA SIGN INVERTED CANDRABINDU
-	{0x111D0, 0x111D9, prNU, gcNd},   //    [10] SHARADA DIGIT ZERO..SHARADA DIGIT NINE
-	{0x111DA, 0x111DA, prAL, gcLo},   //         SHARADA EKAM
-	{0x111DB, 0x111DB, prBB, gcPo},   //         SHARADA SIGN SIDDHAM
-	{0x111DC, 0x111DC, prAL, gcLo},   //         SHARADA HEADSTROKE
-	{0x111DD, 0x111DF, prBA, gcPo},   //     [3] SHARADA CONTINUATION SIGN..SHARADA SECTION MARK-2
-	{0x111E1, 0x111F4, prAL, gcNo},   //    [20] SINHALA ARCHAIC DIGIT ONE..SINHALA ARCHAIC NUMBER ONE THOUSAND
-	{0x11200, 0x11211, prAL, gcLo},   //    [18] KHOJKI LETTER A..KHOJKI LETTER JJA
-	{0x11213, 0x1122B, prAL, gcLo},   //    [25] KHOJKI LETTER NYA..KHOJKI LETTER LLA
-	{0x1122C, 0x1122E, prCM, gcMc},   //     [3] KHOJKI VOWEL SIGN AA..KHOJKI VOWEL SIGN II
-	{0x1122F, 0x11231, prCM, gcMn},   //     [3] KHOJKI VOWEL SIGN U..KHOJKI VOWEL SIGN AI
-	{0x11232, 0x11233, prCM, gcMc},   //     [2] KHOJKI VOWEL SIGN O..KHOJKI VOWEL SIGN AU
-	{0x11234, 0x11234, prCM, gcMn},   //         KHOJKI SIGN ANUSVARA
-	{0x11235, 0x11235, prCM, gcMc},   //         KHOJKI SIGN VIRAMA
-	{0x11236, 0x11237, prCM, gcMn},   //     [2] KHOJKI SIGN NUKTA..KHOJKI SIGN SHADDA
-	{0x11238, 0x11239, prBA, gcPo},   //     [2] KHOJKI DANDA..KHOJKI DOUBLE DANDA
-	{0x1123A, 0x1123A, prAL, gcPo},   //         KHOJKI WORD SEPARATOR
-	{0x1123B, 0x1123C, prBA, gcPo},   //     [2] KHOJKI SECTION MARK..KHOJKI DOUBLE SECTION MARK
-	{0x1123D, 0x1123D, prAL, gcPo},   //         KHOJKI ABBREVIATION SIGN
-	{0x1123E, 0x1123E, prCM, gcMn},   //         KHOJKI SIGN SUKUN
-	{0x1123F, 0x11240, prAL, gcLo},   //     [2] KHOJKI LETTER QA..KHOJKI LETTER SHORT I
-	{0x11241, 0x11241, prCM, gcMn},   //         KHOJKI VOWEL SIGN VOCALIC R
-	{0x11280, 0x11286, prAL, gcLo},   //     [7] MULTANI LETTER A..MULTANI LETTER GA
-	{0x11288, 0x11288, prAL, gcLo},   //         MULTANI LETTER GHA
-	{0x1128A, 0x1128D, prAL, gcLo},   //     [4] MULTANI LETTER CA..MULTANI LETTER JJA
-	{0x1128F, 0x1129D, prAL, gcLo},   //    [15] MULTANI LETTER NYA..MULTANI LETTER BA
-	{0x1129F, 0x112A8, prAL, gcLo},   //    [10] MULTANI LETTER BHA..MULTANI LETTER RHA
-	{0x112A9, 0x112A9, prBA, gcPo},   //         MULTANI SECTION MARK
-	{0x112B0, 0x112DE, prAL, gcLo},   //    [47] KHUDAWADI LETTER A..KHUDAWADI LETTER HA
-	{0x112DF, 0x112DF, prCM, gcMn},   //         KHUDAWADI SIGN ANUSVARA
-	{0x112E0, 0x112E2, prCM, gcMc},   //     [3] KHUDAWADI VOWEL SIGN AA..KHUDAWADI VOWEL SIGN II
-	{0x112E3, 0x112EA, prCM, gcMn},   //     [8] KHUDAWADI VOWEL SIGN U..KHUDAWADI SIGN VIRAMA
-	{0x112F0, 0x112F9, prNU, gcNd},   //    [10] KHUDAWADI DIGIT ZERO..KHUDAWADI DIGIT NINE
-	{0x11300, 0x11301, prCM, gcMn},   //     [2] GRANTHA SIGN COMBINING ANUSVARA ABOVE..GRANTHA SIGN CANDRABINDU
-	{0x11302, 0x11303, prCM, gcMc},   //     [2] GRANTHA SIGN ANUSVARA..GRANTHA SIGN VISARGA
-	{0x11305, 0x1130C, prAL, gcLo},   //     [8] GRANTHA LETTER A..GRANTHA LETTER VOCALIC L
-	{0x1130F, 0x11310, prAL, gcLo},   //     [2] GRANTHA LETTER EE..GRANTHA LETTER AI
-	{0x11313, 0x11328, prAL, gcLo},   //    [22] GRANTHA LETTER OO..GRANTHA LETTER NA
-	{0x1132A, 0x11330, prAL, gcLo},   //     [7] GRANTHA LETTER PA..GRANTHA LETTER RA
-	{0x11332, 0x11333, prAL, gcLo},   //     [2] GRANTHA LETTER LA..GRANTHA LETTER LLA
-	{0x11335, 0x11339, prAL, gcLo},   //     [5] GRANTHA LETTER VA..GRANTHA LETTER HA
-	{0x1133B, 0x1133C, prCM, gcMn},   //     [2] COMBINING BINDU BELOW..GRANTHA SIGN NUKTA
-	{0x1133D, 0x1133D, prAL, gcLo},   //         GRANTHA SIGN AVAGRAHA
-	{0x1133E, 0x1133F, prCM, gcMc},   //     [2] GRANTHA VOWEL SIGN AA..GRANTHA VOWEL SIGN I
-	{0x11340, 0x11340, prCM, gcMn},   //         GRANTHA VOWEL SIGN II
-	{0x11341, 0x11344, prCM, gcMc},   //     [4] GRANTHA VOWEL SIGN U..GRANTHA VOWEL SIGN VOCALIC RR
-	{0x11347, 0x11348, prCM, gcMc},   //     [2] GRANTHA VOWEL SIGN EE..GRANTHA VOWEL SIGN AI
-	{0x1134B, 0x1134D, prCM, gcMc},   //     [3] GRANTHA VOWEL SIGN OO..GRANTHA SIGN VIRAMA
-	{0x11350, 0x11350, prAL, gcLo},   //         GRANTHA OM
-	{0x11357, 0x11357, prCM, gcMc},   //         GRANTHA AU LENGTH MARK
-	{0x1135D, 0x11361, prAL, gcLo},   //     [5] GRANTHA SIGN PLUTA..GRANTHA LETTER VOCALIC LL
-	{0x11362, 0x11363, prCM, gcMc},   //     [2] GRANTHA VOWEL SIGN VOCALIC L..GRANTHA VOWEL SIGN VOCALIC LL
-	{0x11366, 0x1136C, prCM, gcMn},   //     [7] COMBINING GRANTHA DIGIT ZERO..COMBINING GRANTHA DIGIT SIX
-	{0x11370, 0x11374, prCM, gcMn},   //     [5] COMBINING GRANTHA LETTER A..COMBINING GRANTHA LETTER PA
-	{0x11400, 0x11434, prAL, gcLo},   //    [53] NEWA LETTER A..NEWA LETTER HA
-	{0x11435, 0x11437, prCM, gcMc},   //     [3] NEWA VOWEL SIGN AA..NEWA VOWEL SIGN II
-	{0x11438, 0x1143F, prCM, gcMn},   //     [8] NEWA VOWEL SIGN U..NEWA VOWEL SIGN AI
-	{0x11440, 0x11441, prCM, gcMc},   //     [2] NEWA VOWEL SIGN O..NEWA VOWEL SIGN AU
-	{0x11442, 0x11444, prCM, gcMn},   //     [3] NEWA SIGN VIRAMA..NEWA SIGN ANUSVARA
-	{0x11445, 0x11445, prCM, gcMc},   //         NEWA SIGN VISARGA
-	{0x11446, 0x11446, prCM, gcMn},   //         NEWA SIGN NUKTA
-	{0x11447, 0x1144A, prAL, gcLo},   //     [4] NEWA SIGN AVAGRAHA..NEWA SIDDHI
-	{0x1144B, 0x1144E, prBA, gcPo},   //     [4] NEWA DANDA..NEWA GAP FILLER
-	{0x1144F, 0x1144F, prAL, gcPo},   //         NEWA ABBREVIATION SIGN
-	{0x11450, 0x11459, prNU, gcNd},   //    [10] NEWA DIGIT ZERO..NEWA DIGIT NINE
-	{0x1145A, 0x1145B, prBA, gcPo},   //     [2] NEWA DOUBLE COMMA..NEWA PLACEHOLDER MARK
-	{0x1145D, 0x1145D, prAL, gcPo},   //         NEWA INSERTION SIGN
-	{0x1145E, 0x1145E, prCM, gcMn},   //         NEWA SANDHI MARK
-	{0x1145F, 0x11461, prAL, gcLo},   //     [3] NEWA LETTER VEDIC ANUSVARA..NEWA SIGN UPADHMANIYA
-	{0x11480, 0x114AF, prAL, gcLo},   //    [48] TIRHUTA ANJI..TIRHUTA LETTER HA
-	{0x114B0, 0x114B2, prCM, gcMc},   //     [3] TIRHUTA VOWEL SIGN AA..TIRHUTA VOWEL SIGN II
-	{0x114B3, 0x114B8, prCM, gcMn},   //     [6] TIRHUTA VOWEL SIGN U..TIRHUTA VOWEL SIGN VOCALIC LL
-	{0x114B9, 0x114B9, prCM, gcMc},   //         TIRHUTA VOWEL SIGN E
-	{0x114BA, 0x114BA, prCM, gcMn},   //         TIRHUTA VOWEL SIGN SHORT E
-	{0x114BB, 0x114BE, prCM, gcMc},   //     [4] TIRHUTA VOWEL SIGN AI..TIRHUTA VOWEL SIGN AU
-	{0x114BF, 0x114C0, prCM, gcMn},   //     [2] TIRHUTA SIGN CANDRABINDU..TIRHUTA SIGN ANUSVARA
-	{0x114C1, 0x114C1, prCM, gcMc},   //         TIRHUTA SIGN VISARGA
-	{0x114C2, 0x114C3, prCM, gcMn},   //     [2] TIRHUTA SIGN VIRAMA..TIRHUTA SIGN NUKTA
-	{0x114C4, 0x114C5, prAL, gcLo},   //     [2] TIRHUTA SIGN AVAGRAHA..TIRHUTA GVANG
-	{0x114C6, 0x114C6, prAL, gcPo},   //         TIRHUTA ABBREVIATION SIGN
-	{0x114C7, 0x114C7, prAL, gcLo},   //         TIRHUTA OM
-	{0x114D0, 0x114D9, prNU, gcNd},   //    [10] TIRHUTA DIGIT ZERO..TIRHUTA DIGIT NINE
-	{0x11580, 0x115AE, prAL, gcLo},   //    [47] SIDDHAM LETTER A..SIDDHAM LETTER HA
-	{0x115AF, 0x115B1, prCM, gcMc},   //     [3] SIDDHAM VOWEL SIGN AA..SIDDHAM VOWEL SIGN II
-	{0x115B2, 0x115B5, prCM, gcMn},   //     [4] SIDDHAM VOWEL SIGN U..SIDDHAM VOWEL SIGN VOCALIC RR
-	{0x115B8, 0x115BB, prCM, gcMc},   //     [4] SIDDHAM VOWEL SIGN E..SIDDHAM VOWEL SIGN AU
-	{0x115BC, 0x115BD, prCM, gcMn},   //     [2] SIDDHAM SIGN CANDRABINDU..SIDDHAM SIGN ANUSVARA
-	{0x115BE, 0x115BE, prCM, gcMc},   //         SIDDHAM SIGN VISARGA
-	{0x115BF, 0x115C0, prCM, gcMn},   //     [2] SIDDHAM SIGN VIRAMA..SIDDHAM SIGN NUKTA
-	{0x115C1, 0x115C1, prBB, gcPo},   //         SIDDHAM SIGN SIDDHAM
-	{0x115C2, 0x115C3, prBA, gcPo},   //     [2] SIDDHAM DANDA..SIDDHAM DOUBLE DANDA
-	{0x115C4, 0x115C5, prEX, gcPo},   //     [2] SIDDHAM SEPARATOR DOT..SIDDHAM SEPARATOR BAR
-	{0x115C6, 0x115C8, prAL, gcPo},   //     [3] SIDDHAM REPETITION MARK-1..SIDDHAM REPETITION MARK-3
-	{0x115C9, 0x115D7, prBA, gcPo},   //    [15] SIDDHAM END OF TEXT MARK..SIDDHAM SECTION MARK WITH CIRCLES AND FOUR ENCLOSURES
-	{0x115D8, 0x115DB, prAL, gcLo},   //     [4] SIDDHAM LETTER THREE-CIRCLE ALTERNATE I..SIDDHAM LETTER ALTERNATE U
-	{0x115DC, 0x115DD, prCM, gcMn},   //     [2] SIDDHAM VOWEL SIGN ALTERNATE U..SIDDHAM VOWEL SIGN ALTERNATE UU
-	{0x11600, 0x1162F, prAL, gcLo},   //    [48] MODI LETTER A..MODI LETTER LLA
-	{0x11630, 0x11632, prCM, gcMc},   //     [3] MODI VOWEL SIGN AA..MODI VOWEL SIGN II
-	{0x11633, 0x1163A, prCM, gcMn},   //     [8] MODI VOWEL SIGN U..MODI VOWEL SIGN AI
-	{0x1163B, 0x1163C, prCM, gcMc},   //     [2] MODI VOWEL SIGN O..MODI VOWEL SIGN AU
-	{0x1163D, 0x1163D, prCM, gcMn},   //         MODI SIGN ANUSVARA
-	{0x1163E, 0x1163E, prCM, gcMc},   //         MODI SIGN VISARGA
-	{0x1163F, 0x11640, prCM, gcMn},   //     [2] MODI SIGN VIRAMA..MODI SIGN ARDHACANDRA
-	{0x11641, 0x11642, prBA, gcPo},   //     [2] MODI DANDA..MODI DOUBLE DANDA
-	{0x11643, 0x11643, prAL, gcPo},   //         MODI ABBREVIATION SIGN
-	{0x11644, 0x11644, prAL, gcLo},   //         MODI SIGN HUVA
-	{0x11650, 0x11659, prNU, gcNd},   //    [10] MODI DIGIT ZERO..MODI DIGIT NINE
-	{0x11660, 0x1166C, prBB, gcPo},   //    [13] MONGOLIAN BIRGA WITH ORNAMENT..MONGOLIAN TURNED SWIRL BIRGA WITH DOUBLE ORNAMENT
-	{0x11680, 0x116AA, prAL, gcLo},   //    [43] TAKRI LETTER A..TAKRI LETTER RRA
-	{0x116AB, 0x116AB, prCM, gcMn},   //         TAKRI SIGN ANUSVARA
-	{0x116AC, 0x116AC, prCM, gcMc},   //         TAKRI SIGN VISARGA
-	{0x116AD, 0x116AD, prCM, gcMn},   //         TAKRI VOWEL SIGN AA
-	{0x116AE, 0x116AF, prCM, gcMc},   //     [2] TAKRI VOWEL SIGN I..TAKRI VOWEL SIGN II
-	{0x116B0, 0x116B5, prCM, gcMn},   //     [6] TAKRI VOWEL SIGN U..TAKRI VOWEL SIGN AU
-	{0x116B6, 0x116B6, prCM, gcMc},   //         TAKRI SIGN VIRAMA
-	{0x116B7, 0x116B7, prCM, gcMn},   //         TAKRI SIGN NUKTA
-	{0x116B8, 0x116B8, prAL, gcLo},   //         TAKRI LETTER ARCHAIC KHA
-	{0x116B9, 0x116B9, prAL, gcPo},   //         TAKRI ABBREVIATION SIGN
-	{0x116C0, 0x116C9, prNU, gcNd},   //    [10] TAKRI DIGIT ZERO..TAKRI DIGIT NINE
-	{0x11700, 0x1171A, prSA, gcLo},   //    [27] AHOM LETTER KA..AHOM LETTER ALTERNATE BA
-	{0x1171D, 0x1171F, prSA, gcMn},   //     [3] AHOM CONSONANT SIGN MEDIAL LA..AHOM CONSONANT SIGN MEDIAL LIGATING RA
-	{0x11720, 0x11721, prSA, gcMc},   //     [2] AHOM VOWEL SIGN A..AHOM VOWEL SIGN AA
-	{0x11722, 0x11725, prSA, gcMn},   //     [4] AHOM VOWEL SIGN I..AHOM VOWEL SIGN UU
-	{0x11726, 0x11726, prSA, gcMc},   //         AHOM VOWEL SIGN E
-	{0x11727, 0x1172B, prSA, gcMn},   //     [5] AHOM VOWEL SIGN AW..AHOM SIGN KILLER
-	{0x11730, 0x11739, prNU, gcNd},   //    [10] AHOM DIGIT ZERO..AHOM DIGIT NINE
-	{0x1173A, 0x1173B, prSA, gcNo},   //     [2] AHOM NUMBER TEN..AHOM NUMBER TWENTY
-	{0x1173C, 0x1173E, prBA, gcPo},   //     [3] AHOM SIGN SMALL SECTION..AHOM SIGN RULAI
-	{0x1173F, 0x1173F, prSA, gcSo},   //         AHOM SYMBOL VI
-	{0x11740, 0x11746, prSA, gcLo},   //     [7] AHOM LETTER CA..AHOM LETTER LLA
-	{0x11800, 0x1182B, prAL, gcLo},   //    [44] DOGRA LETTER A..DOGRA LETTER RRA
-	{0x1182C, 0x1182E, prCM, gcMc},   //     [3] DOGRA VOWEL SIGN AA..DOGRA VOWEL SIGN II
-	{0x1182F, 0x11837, prCM, gcMn},   //     [9] DOGRA VOWEL SIGN U..DOGRA SIGN ANUSVARA
-	{0x11838, 0x11838, prCM, gcMc},   //         DOGRA SIGN VISARGA
-	{0x11839, 0x1183A, prCM, gcMn},   //     [2] DOGRA SIGN VIRAMA..DOGRA SIGN NUKTA
-	{0x1183B, 0x1183B, prAL, gcPo},   //         DOGRA ABBREVIATION SIGN
-	{0x118A0, 0x118DF, prAL, gcLC},   //    [64] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI SMALL LETTER VIYO
-	{0x118E0, 0x118E9, prNU, gcNd},   //    [10] WARANG CITI DIGIT ZERO..WARANG CITI DIGIT NINE
-	{0x118EA, 0x118F2, prAL, gcNo},   //     [9] WARANG CITI NUMBER TEN..WARANG CITI NUMBER NINETY
-	{0x118FF, 0x118FF, prAL, gcLo},   //         WARANG CITI OM
-	{0x11900, 0x11906, prAL, gcLo},   //     [7] DIVES AKURU LETTER A..DIVES AKURU LETTER E
-	{0x11909, 0x11909, prAL, gcLo},   //         DIVES AKURU LETTER O
-	{0x1190C, 0x11913, prAL, gcLo},   //     [8] DIVES AKURU LETTER KA..DIVES AKURU LETTER JA
-	{0x11915, 0x11916, prAL, gcLo},   //     [2] DIVES AKURU LETTER NYA..DIVES AKURU LETTER TTA
-	{0x11918, 0x1192F, prAL, gcLo},   //    [24] DIVES AKURU LETTER DDA..DIVES AKURU LETTER ZA
-	{0x11930, 0x11935, prCM, gcMc},   //     [6] DIVES AKURU VOWEL SIGN AA..DIVES AKURU VOWEL SIGN E
-	{0x11937, 0x11938, prCM, gcMc},   //     [2] DIVES AKURU VOWEL SIGN AI..DIVES AKURU VOWEL SIGN O
-	{0x1193B, 0x1193C, prCM, gcMn},   //     [2] DIVES AKURU SIGN ANUSVARA..DIVES AKURU SIGN CANDRABINDU
-	{0x1193D, 0x1193D, prCM, gcMc},   //         DIVES AKURU SIGN HALANTA
-	{0x1193E, 0x1193E, prCM, gcMn},   //         DIVES AKURU VIRAMA
-	{0x1193F, 0x1193F, prAL, gcLo},   //         DIVES AKURU PREFIXED NASAL SIGN
-	{0x11940, 0x11940, prCM, gcMc},   //         DIVES AKURU MEDIAL YA
-	{0x11941, 0x11941, prAL, gcLo},   //         DIVES AKURU INITIAL RA
-	{0x11942, 0x11942, prCM, gcMc},   //         DIVES AKURU MEDIAL RA
-	{0x11943, 0x11943, prCM, gcMn},   //         DIVES AKURU SIGN NUKTA
-	{0x11944, 0x11946, prBA, gcPo},   //     [3] DIVES AKURU DOUBLE DANDA..DIVES AKURU END OF TEXT MARK
-	{0x11950, 0x11959, prNU, gcNd},   //    [10] DIVES AKURU DIGIT ZERO..DIVES AKURU DIGIT NINE
-	{0x119A0, 0x119A7, prAL, gcLo},   //     [8] NANDINAGARI LETTER A..NANDINAGARI LETTER VOCALIC RR
-	{0x119AA, 0x119D0, prAL, gcLo},   //    [39] NANDINAGARI LETTER E..NANDINAGARI LETTER RRA
-	{0x119D1, 0x119D3, prCM, gcMc},   //     [3] NANDINAGARI VOWEL SIGN AA..NANDINAGARI VOWEL SIGN II
-	{0x119D4, 0x119D7, prCM, gcMn},   //     [4] NANDINAGARI VOWEL SIGN U..NANDINAGARI VOWEL SIGN VOCALIC RR
-	{0x119DA, 0x119DB, prCM, gcMn},   //     [2] NANDINAGARI VOWEL SIGN E..NANDINAGARI VOWEL SIGN AI
-	{0x119DC, 0x119DF, prCM, gcMc},   //     [4] NANDINAGARI VOWEL SIGN O..NANDINAGARI SIGN VISARGA
-	{0x119E0, 0x119E0, prCM, gcMn},   //         NANDINAGARI SIGN VIRAMA
-	{0x119E1, 0x119E1, prAL, gcLo},   //         NANDINAGARI SIGN AVAGRAHA
-	{0x119E2, 0x119E2, prBB, gcPo},   //         NANDINAGARI SIGN SIDDHAM
-	{0x119E3, 0x119E3, prAL, gcLo},   //         NANDINAGARI HEADSTROKE
-	{0x119E4, 0x119E4, prCM, gcMc},   //         NANDINAGARI VOWEL SIGN PRISHTHAMATRA E
-	{0x11A00, 0x11A00, prAL, gcLo},   //         ZANABAZAR SQUARE LETTER A
-	{0x11A01, 0x11A0A, prCM, gcMn},   //    [10] ZANABAZAR SQUARE VOWEL SIGN I..ZANABAZAR SQUARE VOWEL LENGTH MARK
-	{0x11A0B, 0x11A32, prAL, gcLo},   //    [40] ZANABAZAR SQUARE LETTER KA..ZANABAZAR SQUARE LETTER KSSA
-	{0x11A33, 0x11A38, prCM, gcMn},   //     [6] ZANABAZAR SQUARE FINAL CONSONANT MARK..ZANABAZAR SQUARE SIGN ANUSVARA
-	{0x11A39, 0x11A39, prCM, gcMc},   //         ZANABAZAR SQUARE SIGN VISARGA
-	{0x11A3A, 0x11A3A, prAL, gcLo},   //         ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA
-	{0x11A3B, 0x11A3E, prCM, gcMn},   //     [4] ZANABAZAR SQUARE CLUSTER-FINAL LETTER YA..ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA
-	{0x11A3F, 0x11A3F, prBB, gcPo},   //         ZANABAZAR SQUARE INITIAL HEAD MARK
-	{0x11A40, 0x11A40, prAL, gcPo},   //         ZANABAZAR SQUARE CLOSING HEAD MARK
-	{0x11A41, 0x11A44, prBA, gcPo},   //     [4] ZANABAZAR SQUARE MARK TSHEG..ZANABAZAR SQUARE MARK LONG TSHEG
-	{0x11A45, 0x11A45, prBB, gcPo},   //         ZANABAZAR SQUARE INITIAL DOUBLE-LINED HEAD MARK
-	{0x11A46, 0x11A46, prAL, gcPo},   //         ZANABAZAR SQUARE CLOSING DOUBLE-LINED HEAD MARK
-	{0x11A47, 0x11A47, prCM, gcMn},   //         ZANABAZAR SQUARE SUBJOINER
-	{0x11A50, 0x11A50, prAL, gcLo},   //         SOYOMBO LETTER A
-	{0x11A51, 0x11A56, prCM, gcMn},   //     [6] SOYOMBO VOWEL SIGN I..SOYOMBO VOWEL SIGN OE
-	{0x11A57, 0x11A58, prCM, gcMc},   //     [2] SOYOMBO VOWEL SIGN AI..SOYOMBO VOWEL SIGN AU
-	{0x11A59, 0x11A5B, prCM, gcMn},   //     [3] SOYOMBO VOWEL SIGN VOCALIC R..SOYOMBO VOWEL LENGTH MARK
-	{0x11A5C, 0x11A89, prAL, gcLo},   //    [46] SOYOMBO LETTER KA..SOYOMBO CLUSTER-INITIAL LETTER SA
-	{0x11A8A, 0x11A96, prCM, gcMn},   //    [13] SOYOMBO FINAL CONSONANT SIGN G..SOYOMBO SIGN ANUSVARA
-	{0x11A97, 0x11A97, prCM, gcMc},   //         SOYOMBO SIGN VISARGA
-	{0x11A98, 0x11A99, prCM, gcMn},   //     [2] SOYOMBO GEMINATION MARK..SOYOMBO SUBJOINER
-	{0x11A9A, 0x11A9C, prBA, gcPo},   //     [3] SOYOMBO MARK TSHEG..SOYOMBO MARK DOUBLE SHAD
-	{0x11A9D, 0x11A9D, prAL, gcLo},   //         SOYOMBO MARK PLUTA
-	{0x11A9E, 0x11AA0, prBB, gcPo},   //     [3] SOYOMBO HEAD MARK WITH MOON AND SUN AND TRIPLE FLAME..SOYOMBO HEAD MARK WITH MOON AND SUN
-	{0x11AA1, 0x11AA2, prBA, gcPo},   //     [2] SOYOMBO TERMINAL MARK-1..SOYOMBO TERMINAL MARK-2
-	{0x11AB0, 0x11ABF, prAL, gcLo},   //    [16] CANADIAN SYLLABICS NATTILIK HI..CANADIAN SYLLABICS SPA
-	{0x11AC0, 0x11AF8, prAL, gcLo},   //    [57] PAU CIN HAU LETTER PA..PAU CIN HAU GLOTTAL STOP FINAL
-	{0x11B00, 0x11B09, prBB, gcPo},   //    [10] DEVANAGARI HEAD MARK..DEVANAGARI SIGN MINDU
-	{0x11C00, 0x11C08, prAL, gcLo},   //     [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L
-	{0x11C0A, 0x11C2E, prAL, gcLo},   //    [37] BHAIKSUKI LETTER E..BHAIKSUKI LETTER HA
-	{0x11C2F, 0x11C2F, prCM, gcMc},   //         BHAIKSUKI VOWEL SIGN AA
-	{0x11C30, 0x11C36, prCM, gcMn},   //     [7] BHAIKSUKI VOWEL SIGN I..BHAIKSUKI VOWEL SIGN VOCALIC L
-	{0x11C38, 0x11C3D, prCM, gcMn},   //     [6] BHAIKSUKI VOWEL SIGN E..BHAIKSUKI SIGN ANUSVARA
-	{0x11C3E, 0x11C3E, prCM, gcMc},   //         BHAIKSUKI SIGN VISARGA
-	{0x11C3F, 0x11C3F, prCM, gcMn},   //         BHAIKSUKI SIGN VIRAMA
-	{0x11C40, 0x11C40, prAL, gcLo},   //         BHAIKSUKI SIGN AVAGRAHA
-	{0x11C41, 0x11C45, prBA, gcPo},   //     [5] BHAIKSUKI DANDA..BHAIKSUKI GAP FILLER-2
-	{0x11C50, 0x11C59, prNU, gcNd},   //    [10] BHAIKSUKI DIGIT ZERO..BHAIKSUKI DIGIT NINE
-	{0x11C5A, 0x11C6C, prAL, gcNo},   //    [19] BHAIKSUKI NUMBER ONE..BHAIKSUKI HUNDREDS UNIT MARK
-	{0x11C70, 0x11C70, prBB, gcPo},   //         MARCHEN HEAD MARK
-	{0x11C71, 0x11C71, prEX, gcPo},   //         MARCHEN MARK SHAD
-	{0x11C72, 0x11C8F, prAL, gcLo},   //    [30] MARCHEN LETTER KA..MARCHEN LETTER A
-	{0x11C92, 0x11CA7, prCM, gcMn},   //    [22] MARCHEN SUBJOINED LETTER KA..MARCHEN SUBJOINED LETTER ZA
-	{0x11CA9, 0x11CA9, prCM, gcMc},   //         MARCHEN SUBJOINED LETTER YA
-	{0x11CAA, 0x11CB0, prCM, gcMn},   //     [7] MARCHEN SUBJOINED LETTER RA..MARCHEN VOWEL SIGN AA
-	{0x11CB1, 0x11CB1, prCM, gcMc},   //         MARCHEN VOWEL SIGN I
-	{0x11CB2, 0x11CB3, prCM, gcMn},   //     [2] MARCHEN VOWEL SIGN U..MARCHEN VOWEL SIGN E
-	{0x11CB4, 0x11CB4, prCM, gcMc},   //         MARCHEN VOWEL SIGN O
-	{0x11CB5, 0x11CB6, prCM, gcMn},   //     [2] MARCHEN SIGN ANUSVARA..MARCHEN SIGN CANDRABINDU
-	{0x11D00, 0x11D06, prAL, gcLo},   //     [7] MASARAM GONDI LETTER A..MASARAM GONDI LETTER E
-	{0x11D08, 0x11D09, prAL, gcLo},   //     [2] MASARAM GONDI LETTER AI..MASARAM GONDI LETTER O
-	{0x11D0B, 0x11D30, prAL, gcLo},   //    [38] MASARAM GONDI LETTER AU..MASARAM GONDI LETTER TRA
-	{0x11D31, 0x11D36, prCM, gcMn},   //     [6] MASARAM GONDI VOWEL SIGN AA..MASARAM GONDI VOWEL SIGN VOCALIC R
-	{0x11D3A, 0x11D3A, prCM, gcMn},   //         MASARAM GONDI VOWEL SIGN E
-	{0x11D3C, 0x11D3D, prCM, gcMn},   //     [2] MASARAM GONDI VOWEL SIGN AI..MASARAM GONDI VOWEL SIGN O
-	{0x11D3F, 0x11D45, prCM, gcMn},   //     [7] MASARAM GONDI VOWEL SIGN AU..MASARAM GONDI VIRAMA
-	{0x11D46, 0x11D46, prAL, gcLo},   //         MASARAM GONDI REPHA
-	{0x11D47, 0x11D47, prCM, gcMn},   //         MASARAM GONDI RA-KARA
-	{0x11D50, 0x11D59, prNU, gcNd},   //    [10] MASARAM GONDI DIGIT ZERO..MASARAM GONDI DIGIT NINE
-	{0x11D60, 0x11D65, prAL, gcLo},   //     [6] GUNJALA GONDI LETTER A..GUNJALA GONDI LETTER UU
-	{0x11D67, 0x11D68, prAL, gcLo},   //     [2] GUNJALA GONDI LETTER EE..GUNJALA GONDI LETTER AI
-	{0x11D6A, 0x11D89, prAL, gcLo},   //    [32] GUNJALA GONDI LETTER OO..GUNJALA GONDI LETTER SA
-	{0x11D8A, 0x11D8E, prCM, gcMc},   //     [5] GUNJALA GONDI VOWEL SIGN AA..GUNJALA GONDI VOWEL SIGN UU
-	{0x11D90, 0x11D91, prCM, gcMn},   //     [2] GUNJALA GONDI VOWEL SIGN EE..GUNJALA GONDI VOWEL SIGN AI
-	{0x11D93, 0x11D94, prCM, gcMc},   //     [2] GUNJALA GONDI VOWEL SIGN OO..GUNJALA GONDI VOWEL SIGN AU
-	{0x11D95, 0x11D95, prCM, gcMn},   //         GUNJALA GONDI SIGN ANUSVARA
-	{0x11D96, 0x11D96, prCM, gcMc},   //         GUNJALA GONDI SIGN VISARGA
-	{0x11D97, 0x11D97, prCM, gcMn},   //         GUNJALA GONDI VIRAMA
-	{0x11D98, 0x11D98, prAL, gcLo},   //         GUNJALA GONDI OM
-	{0x11DA0, 0x11DA9, prNU, gcNd},   //    [10] GUNJALA GONDI DIGIT ZERO..GUNJALA GONDI DIGIT NINE
-	{0x11EE0, 0x11EF2, prAL, gcLo},   //    [19] MAKASAR LETTER KA..MAKASAR ANGKA
-	{0x11EF3, 0x11EF4, prCM, gcMn},   //     [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U
-	{0x11EF5, 0x11EF6, prCM, gcMc},   //     [2] MAKASAR VOWEL SIGN E..MAKASAR VOWEL SIGN O
-	{0x11EF7, 0x11EF8, prAL, gcPo},   //     [2] MAKASAR PASSIMBANG..MAKASAR END OF SECTION
-	{0x11F00, 0x11F01, prCM, gcMn},   //     [2] KAWI SIGN CANDRABINDU..KAWI SIGN ANUSVARA
-	{0x11F02, 0x11F02, prAL, gcLo},   //         KAWI SIGN REPHA
-	{0x11F03, 0x11F03, prCM, gcMc},   //         KAWI SIGN VISARGA
-	{0x11F04, 0x11F10, prAL, gcLo},   //    [13] KAWI LETTER A..KAWI LETTER O
-	{0x11F12, 0x11F33, prAL, gcLo},   //    [34] KAWI LETTER KA..KAWI LETTER JNYA
-	{0x11F34, 0x11F35, prCM, gcMc},   //     [2] KAWI VOWEL SIGN AA..KAWI VOWEL SIGN ALTERNATE AA
-	{0x11F36, 0x11F3A, prCM, gcMn},   //     [5] KAWI VOWEL SIGN I..KAWI VOWEL SIGN VOCALIC R
-	{0x11F3E, 0x11F3F, prCM, gcMc},   //     [2] KAWI VOWEL SIGN E..KAWI VOWEL SIGN AI
-	{0x11F40, 0x11F40, prCM, gcMn},   //         KAWI VOWEL SIGN EU
-	{0x11F41, 0x11F41, prCM, gcMc},   //         KAWI SIGN KILLER
-	{0x11F42, 0x11F42, prCM, gcMn},   //         KAWI CONJOINER
-	{0x11F43, 0x11F44, prBA, gcPo},   //     [2] KAWI DANDA..KAWI DOUBLE DANDA
-	{0x11F45, 0x11F4F, prID, gcPo},   //    [11] KAWI PUNCTUATION SECTION MARKER..KAWI PUNCTUATION CLOSING SPIRAL
-	{0x11F50, 0x11F59, prNU, gcNd},   //    [10] KAWI DIGIT ZERO..KAWI DIGIT NINE
-	{0x11FB0, 0x11FB0, prAL, gcLo},   //         LISU LETTER YHA
-	{0x11FC0, 0x11FD4, prAL, gcNo},   //    [21] TAMIL FRACTION ONE THREE-HUNDRED-AND-TWENTIETH..TAMIL FRACTION DOWNSCALING FACTOR KIIZH
-	{0x11FD5, 0x11FDC, prAL, gcSo},   //     [8] TAMIL SIGN NEL..TAMIL SIGN MUKKURUNI
-	{0x11FDD, 0x11FE0, prPO, gcSc},   //     [4] TAMIL SIGN KAACU..TAMIL SIGN VARAAKAN
-	{0x11FE1, 0x11FF1, prAL, gcSo},   //    [17] TAMIL SIGN PAARAM..TAMIL SIGN VAKAIYARAA
-	{0x11FFF, 0x11FFF, prBA, gcPo},   //         TAMIL PUNCTUATION END OF TEXT
-	{0x12000, 0x12399, prAL, gcLo},   //   [922] CUNEIFORM SIGN A..CUNEIFORM SIGN U U
-	{0x12400, 0x1246E, prAL, gcNl},   //   [111] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM
-	{0x12470, 0x12474, prBA, gcPo},   //     [5] CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER..CUNEIFORM PUNCTUATION SIGN DIAGONAL QUADCOLON
-	{0x12480, 0x12543, prAL, gcLo},   //   [196] CUNEIFORM SIGN AB TIMES NUN TENU..CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU
-	{0x12F90, 0x12FF0, prAL, gcLo},   //    [97] CYPRO-MINOAN SIGN CM001..CYPRO-MINOAN SIGN CM114
-	{0x12FF1, 0x12FF2, prAL, gcPo},   //     [2] CYPRO-MINOAN SIGN CM301..CYPRO-MINOAN SIGN CM302
-	{0x13000, 0x13257, prAL, gcLo},   //   [600] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH O006
-	{0x13258, 0x1325A, prOP, gcLo},   //     [3] EGYPTIAN HIEROGLYPH O006A..EGYPTIAN HIEROGLYPH O006C
-	{0x1325B, 0x1325D, prCL, gcLo},   //     [3] EGYPTIAN HIEROGLYPH O006D..EGYPTIAN HIEROGLYPH O006F
-	{0x1325E, 0x13281, prAL, gcLo},   //    [36] EGYPTIAN HIEROGLYPH O007..EGYPTIAN HIEROGLYPH O033
-	{0x13282, 0x13282, prCL, gcLo},   //         EGYPTIAN HIEROGLYPH O033A
-	{0x13283, 0x13285, prAL, gcLo},   //     [3] EGYPTIAN HIEROGLYPH O034..EGYPTIAN HIEROGLYPH O036
-	{0x13286, 0x13286, prOP, gcLo},   //         EGYPTIAN HIEROGLYPH O036A
-	{0x13287, 0x13287, prCL, gcLo},   //         EGYPTIAN HIEROGLYPH O036B
-	{0x13288, 0x13288, prOP, gcLo},   //         EGYPTIAN HIEROGLYPH O036C
-	{0x13289, 0x13289, prCL, gcLo},   //         EGYPTIAN HIEROGLYPH O036D
-	{0x1328A, 0x13378, prAL, gcLo},   //   [239] EGYPTIAN HIEROGLYPH O037..EGYPTIAN HIEROGLYPH V011
-	{0x13379, 0x13379, prOP, gcLo},   //         EGYPTIAN HIEROGLYPH V011A
-	{0x1337A, 0x1337B, prCL, gcLo},   //     [2] EGYPTIAN HIEROGLYPH V011B..EGYPTIAN HIEROGLYPH V011C
-	{0x1337C, 0x1342F, prAL, gcLo},   //   [180] EGYPTIAN HIEROGLYPH V012..EGYPTIAN HIEROGLYPH V011D
-	{0x13430, 0x13436, prGL, gcCf},   //     [7] EGYPTIAN HIEROGLYPH VERTICAL JOINER..EGYPTIAN HIEROGLYPH OVERLAY MIDDLE
-	{0x13437, 0x13437, prOP, gcCf},   //         EGYPTIAN HIEROGLYPH BEGIN SEGMENT
-	{0x13438, 0x13438, prCL, gcCf},   //         EGYPTIAN HIEROGLYPH END SEGMENT
-	{0x13439, 0x1343B, prGL, gcCf},   //     [3] EGYPTIAN HIEROGLYPH INSERT AT MIDDLE..EGYPTIAN HIEROGLYPH INSERT AT BOTTOM
-	{0x1343C, 0x1343C, prOP, gcCf},   //         EGYPTIAN HIEROGLYPH BEGIN ENCLOSURE
-	{0x1343D, 0x1343D, prCL, gcCf},   //         EGYPTIAN HIEROGLYPH END ENCLOSURE
-	{0x1343E, 0x1343E, prOP, gcCf},   //         EGYPTIAN HIEROGLYPH BEGIN WALLED ENCLOSURE
-	{0x1343F, 0x1343F, prCL, gcCf},   //         EGYPTIAN HIEROGLYPH END WALLED ENCLOSURE
-	{0x13440, 0x13440, prCM, gcMn},   //         EGYPTIAN HIEROGLYPH MIRROR HORIZONTALLY
-	{0x13441, 0x13446, prAL, gcLo},   //     [6] EGYPTIAN HIEROGLYPH FULL BLANK..EGYPTIAN HIEROGLYPH WIDE LOST SIGN
-	{0x13447, 0x13455, prCM, gcMn},   //    [15] EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP START..EGYPTIAN HIEROGLYPH MODIFIER DAMAGED
-	{0x14400, 0x145CD, prAL, gcLo},   //   [462] ANATOLIAN HIEROGLYPH A001..ANATOLIAN HIEROGLYPH A409
-	{0x145CE, 0x145CE, prOP, gcLo},   //         ANATOLIAN HIEROGLYPH A410 BEGIN LOGOGRAM MARK
-	{0x145CF, 0x145CF, prCL, gcLo},   //         ANATOLIAN HIEROGLYPH A410A END LOGOGRAM MARK
-	{0x145D0, 0x14646, prAL, gcLo},   //   [119] ANATOLIAN HIEROGLYPH A411..ANATOLIAN HIEROGLYPH A530
-	{0x16800, 0x16A38, prAL, gcLo},   //   [569] BAMUM LETTER PHASE-A NGKUE MFON..BAMUM LETTER PHASE-F VUEQ
-	{0x16A40, 0x16A5E, prAL, gcLo},   //    [31] MRO LETTER TA..MRO LETTER TEK
-	{0x16A60, 0x16A69, prNU, gcNd},   //    [10] MRO DIGIT ZERO..MRO DIGIT NINE
-	{0x16A6E, 0x16A6F, prBA, gcPo},   //     [2] MRO DANDA..MRO DOUBLE DANDA
-	{0x16A70, 0x16ABE, prAL, gcLo},   //    [79] TANGSA LETTER OZ..TANGSA LETTER ZA
-	{0x16AC0, 0x16AC9, prNU, gcNd},   //    [10] TANGSA DIGIT ZERO..TANGSA DIGIT NINE
-	{0x16AD0, 0x16AED, prAL, gcLo},   //    [30] BASSA VAH LETTER ENNI..BASSA VAH LETTER I
-	{0x16AF0, 0x16AF4, prCM, gcMn},   //     [5] BASSA VAH COMBINING HIGH TONE..BASSA VAH COMBINING HIGH-LOW TONE
-	{0x16AF5, 0x16AF5, prBA, gcPo},   //         BASSA VAH FULL STOP
-	{0x16B00, 0x16B2F, prAL, gcLo},   //    [48] PAHAWH HMONG VOWEL KEEB..PAHAWH HMONG CONSONANT CAU
-	{0x16B30, 0x16B36, prCM, gcMn},   //     [7] PAHAWH HMONG MARK CIM TUB..PAHAWH HMONG MARK CIM TAUM
-	{0x16B37, 0x16B39, prBA, gcPo},   //     [3] PAHAWH HMONG SIGN VOS THOM..PAHAWH HMONG SIGN CIM CHEEM
-	{0x16B3A, 0x16B3B, prAL, gcPo},   //     [2] PAHAWH HMONG SIGN VOS THIAB..PAHAWH HMONG SIGN VOS FEEM
-	{0x16B3C, 0x16B3F, prAL, gcSo},   //     [4] PAHAWH HMONG SIGN XYEEM NTXIV..PAHAWH HMONG SIGN XYEEM FAIB
-	{0x16B40, 0x16B43, prAL, gcLm},   //     [4] PAHAWH HMONG SIGN VOS SEEV..PAHAWH HMONG SIGN IB YAM
-	{0x16B44, 0x16B44, prBA, gcPo},   //         PAHAWH HMONG SIGN XAUS
-	{0x16B45, 0x16B45, prAL, gcSo},   //         PAHAWH HMONG SIGN CIM TSOV ROG
-	{0x16B50, 0x16B59, prNU, gcNd},   //    [10] PAHAWH HMONG DIGIT ZERO..PAHAWH HMONG DIGIT NINE
-	{0x16B5B, 0x16B61, prAL, gcNo},   //     [7] PAHAWH HMONG NUMBER TENS..PAHAWH HMONG NUMBER TRILLIONS
-	{0x16B63, 0x16B77, prAL, gcLo},   //    [21] PAHAWH HMONG SIGN VOS LUB..PAHAWH HMONG SIGN CIM NRES TOS
-	{0x16B7D, 0x16B8F, prAL, gcLo},   //    [19] PAHAWH HMONG CLAN SIGN TSHEEJ..PAHAWH HMONG CLAN SIGN VWJ
-	{0x16E40, 0x16E7F, prAL, gcLC},   //    [64] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN SMALL LETTER Y
-	{0x16E80, 0x16E96, prAL, gcNo},   //    [23] MEDEFAIDRIN DIGIT ZERO..MEDEFAIDRIN DIGIT THREE ALTERNATE FORM
-	{0x16E97, 0x16E98, prBA, gcPo},   //     [2] MEDEFAIDRIN COMMA..MEDEFAIDRIN FULL STOP
-	{0x16E99, 0x16E9A, prAL, gcPo},   //     [2] MEDEFAIDRIN SYMBOL AIVA..MEDEFAIDRIN EXCLAMATION OH
-	{0x16F00, 0x16F4A, prAL, gcLo},   //    [75] MIAO LETTER PA..MIAO LETTER RTE
-	{0x16F4F, 0x16F4F, prCM, gcMn},   //         MIAO SIGN CONSONANT MODIFIER BAR
-	{0x16F50, 0x16F50, prAL, gcLo},   //         MIAO LETTER NASALIZATION
-	{0x16F51, 0x16F87, prCM, gcMc},   //    [55] MIAO SIGN ASPIRATION..MIAO VOWEL SIGN UI
-	{0x16F8F, 0x16F92, prCM, gcMn},   //     [4] MIAO TONE RIGHT..MIAO TONE BELOW
-	{0x16F93, 0x16F9F, prAL, gcLm},   //    [13] MIAO LETTER TONE-2..MIAO LETTER REFORMED TONE-8
-	{0x16FE0, 0x16FE1, prNS, gcLm},   //     [2] TANGUT ITERATION MARK..NUSHU ITERATION MARK
-	{0x16FE2, 0x16FE2, prNS, gcPo},   //         OLD CHINESE HOOK MARK
-	{0x16FE3, 0x16FE3, prNS, gcLm},   //         OLD CHINESE ITERATION MARK
-	{0x16FE4, 0x16FE4, prGL, gcMn},   //         KHITAN SMALL SCRIPT FILLER
-	{0x16FF0, 0x16FF1, prCM, gcMc},   //     [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY
-	{0x17000, 0x187F7, prID, gcLo},   //  [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7
-	{0x18800, 0x18AFF, prID, gcLo},   //   [768] TANGUT COMPONENT-001..TANGUT COMPONENT-768
-	{0x18B00, 0x18CD5, prAL, gcLo},   //   [470] KHITAN SMALL SCRIPT CHARACTER-18B00..KHITAN SMALL SCRIPT CHARACTER-18CD5
-	{0x18D00, 0x18D08, prID, gcLo},   //     [9] TANGUT IDEOGRAPH-18D00..TANGUT IDEOGRAPH-18D08
-	{0x1AFF0, 0x1AFF3, prAL, gcLm},   //     [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5
-	{0x1AFF5, 0x1AFFB, prAL, gcLm},   //     [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5
-	{0x1AFFD, 0x1AFFE, prAL, gcLm},   //     [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8
-	{0x1B000, 0x1B0FF, prID, gcLo},   //   [256] KATAKANA LETTER ARCHAIC E..HENTAIGANA LETTER RE-2
-	{0x1B100, 0x1B122, prID, gcLo},   //    [35] HENTAIGANA LETTER RE-3..KATAKANA LETTER ARCHAIC WU
-	{0x1B132, 0x1B132, prCJ, gcLo},   //         HIRAGANA LETTER SMALL KO
-	{0x1B150, 0x1B152, prCJ, gcLo},   //     [3] HIRAGANA LETTER SMALL WI..HIRAGANA LETTER SMALL WO
-	{0x1B155, 0x1B155, prCJ, gcLo},   //         KATAKANA LETTER SMALL KO
-	{0x1B164, 0x1B167, prCJ, gcLo},   //     [4] KATAKANA LETTER SMALL WI..KATAKANA LETTER SMALL N
-	{0x1B170, 0x1B2FB, prID, gcLo},   //   [396] NUSHU CHARACTER-1B170..NUSHU CHARACTER-1B2FB
-	{0x1BC00, 0x1BC6A, prAL, gcLo},   //   [107] DUPLOYAN LETTER H..DUPLOYAN LETTER VOCALIC M
-	{0x1BC70, 0x1BC7C, prAL, gcLo},   //    [13] DUPLOYAN AFFIX LEFT HORIZONTAL SECANT..DUPLOYAN AFFIX ATTACHED TANGENT HOOK
-	{0x1BC80, 0x1BC88, prAL, gcLo},   //     [9] DUPLOYAN AFFIX HIGH ACUTE..DUPLOYAN AFFIX HIGH VERTICAL
-	{0x1BC90, 0x1BC99, prAL, gcLo},   //    [10] DUPLOYAN AFFIX LOW ACUTE..DUPLOYAN AFFIX LOW ARROW
-	{0x1BC9C, 0x1BC9C, prAL, gcSo},   //         DUPLOYAN SIGN O WITH CROSS
-	{0x1BC9D, 0x1BC9E, prCM, gcMn},   //     [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK
-	{0x1BC9F, 0x1BC9F, prBA, gcPo},   //         DUPLOYAN PUNCTUATION CHINOOK FULL STOP
-	{0x1BCA0, 0x1BCA3, prCM, gcCf},   //     [4] SHORTHAND FORMAT LETTER OVERLAP..SHORTHAND FORMAT UP STEP
-	{0x1CF00, 0x1CF2D, prCM, gcMn},   //    [46] ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT..ZNAMENNY COMBINING MARK KRYZH ON LEFT
-	{0x1CF30, 0x1CF46, prCM, gcMn},   //    [23] ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO..ZNAMENNY PRIZNAK MODIFIER ROG
-	{0x1CF50, 0x1CFC3, prAL, gcSo},   //   [116] ZNAMENNY NEUME KRYUK..ZNAMENNY NEUME PAUK
-	{0x1D000, 0x1D0F5, prAL, gcSo},   //   [246] BYZANTINE MUSICAL SYMBOL PSILI..BYZANTINE MUSICAL SYMBOL GORGON NEO KATO
-	{0x1D100, 0x1D126, prAL, gcSo},   //    [39] MUSICAL SYMBOL SINGLE BARLINE..MUSICAL SYMBOL DRUM CLEF-2
-	{0x1D129, 0x1D164, prAL, gcSo},   //    [60] MUSICAL SYMBOL MULTIPLE MEASURE REST..MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE
-	{0x1D165, 0x1D166, prCM, gcMc},   //     [2] MUSICAL SYMBOL COMBINING STEM..MUSICAL SYMBOL COMBINING SPRECHGESANG STEM
-	{0x1D167, 0x1D169, prCM, gcMn},   //     [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3
-	{0x1D16A, 0x1D16C, prAL, gcSo},   //     [3] MUSICAL SYMBOL FINGERED TREMOLO-1..MUSICAL SYMBOL FINGERED TREMOLO-3
-	{0x1D16D, 0x1D172, prCM, gcMc},   //     [6] MUSICAL SYMBOL COMBINING AUGMENTATION DOT..MUSICAL SYMBOL COMBINING FLAG-5
-	{0x1D173, 0x1D17A, prCM, gcCf},   //     [8] MUSICAL SYMBOL BEGIN BEAM..MUSICAL SYMBOL END PHRASE
-	{0x1D17B, 0x1D182, prCM, gcMn},   //     [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE
-	{0x1D183, 0x1D184, prAL, gcSo},   //     [2] MUSICAL SYMBOL ARPEGGIATO UP..MUSICAL SYMBOL ARPEGGIATO DOWN
-	{0x1D185, 0x1D18B, prCM, gcMn},   //     [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE
-	{0x1D18C, 0x1D1A9, prAL, gcSo},   //    [30] MUSICAL SYMBOL RINFORZANDO..MUSICAL SYMBOL DEGREE SLASH
-	{0x1D1AA, 0x1D1AD, prCM, gcMn},   //     [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO
-	{0x1D1AE, 0x1D1EA, prAL, gcSo},   //    [61] MUSICAL SYMBOL PEDAL MARK..MUSICAL SYMBOL KORON
-	{0x1D200, 0x1D241, prAL, gcSo},   //    [66] GREEK VOCAL NOTATION SYMBOL-1..GREEK INSTRUMENTAL NOTATION SYMBOL-54
-	{0x1D242, 0x1D244, prCM, gcMn},   //     [3] COMBINING GREEK MUSICAL TRISEME..COMBINING GREEK MUSICAL PENTASEME
-	{0x1D245, 0x1D245, prAL, gcSo},   //         GREEK MUSICAL LEIMMA
-	{0x1D2C0, 0x1D2D3, prAL, gcNo},   //    [20] KAKTOVIK NUMERAL ZERO..KAKTOVIK NUMERAL NINETEEN
-	{0x1D2E0, 0x1D2F3, prAL, gcNo},   //    [20] MAYAN NUMERAL ZERO..MAYAN NUMERAL NINETEEN
-	{0x1D300, 0x1D356, prAL, gcSo},   //    [87] MONOGRAM FOR EARTH..TETRAGRAM FOR FOSTERING
-	{0x1D360, 0x1D378, prAL, gcNo},   //    [25] COUNTING ROD UNIT DIGIT ONE..TALLY MARK FIVE
-	{0x1D400, 0x1D454, prAL, gcLC},   //    [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G
-	{0x1D456, 0x1D49C, prAL, gcLC},   //    [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A
-	{0x1D49E, 0x1D49F, prAL, gcLu},   //     [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D
-	{0x1D4A2, 0x1D4A2, prAL, gcLu},   //         MATHEMATICAL SCRIPT CAPITAL G
-	{0x1D4A5, 0x1D4A6, prAL, gcLu},   //     [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K
-	{0x1D4A9, 0x1D4AC, prAL, gcLu},   //     [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q
-	{0x1D4AE, 0x1D4B9, prAL, gcLC},   //    [12] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT SMALL D
-	{0x1D4BB, 0x1D4BB, prAL, gcLl},   //         MATHEMATICAL SCRIPT SMALL F
-	{0x1D4BD, 0x1D4C3, prAL, gcLl},   //     [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N
-	{0x1D4C5, 0x1D505, prAL, gcLC},   //    [65] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL FRAKTUR CAPITAL B
-	{0x1D507, 0x1D50A, prAL, gcLu},   //     [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G
-	{0x1D50D, 0x1D514, prAL, gcLu},   //     [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q
-	{0x1D516, 0x1D51C, prAL, gcLu},   //     [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y
-	{0x1D51E, 0x1D539, prAL, gcLC},   //    [28] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B
-	{0x1D53B, 0x1D53E, prAL, gcLu},   //     [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G
-	{0x1D540, 0x1D544, prAL, gcLu},   //     [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M
-	{0x1D546, 0x1D546, prAL, gcLu},   //         MATHEMATICAL DOUBLE-STRUCK CAPITAL O
-	{0x1D54A, 0x1D550, prAL, gcLu},   //     [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y
-	{0x1D552, 0x1D6A5, prAL, gcLC},   //   [340] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL ITALIC SMALL DOTLESS J
-	{0x1D6A8, 0x1D6C0, prAL, gcLu},   //    [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA
-	{0x1D6C1, 0x1D6C1, prAL, gcSm},   //         MATHEMATICAL BOLD NABLA
-	{0x1D6C2, 0x1D6DA, prAL, gcLl},   //    [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA
-	{0x1D6DB, 0x1D6DB, prAL, gcSm},   //         MATHEMATICAL BOLD PARTIAL DIFFERENTIAL
-	{0x1D6DC, 0x1D6FA, prAL, gcLC},   //    [31] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL ITALIC CAPITAL OMEGA
-	{0x1D6FB, 0x1D6FB, prAL, gcSm},   //         MATHEMATICAL ITALIC NABLA
-	{0x1D6FC, 0x1D714, prAL, gcLl},   //    [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA
-	{0x1D715, 0x1D715, prAL, gcSm},   //         MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL
-	{0x1D716, 0x1D734, prAL, gcLC},   //    [31] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA
-	{0x1D735, 0x1D735, prAL, gcSm},   //         MATHEMATICAL BOLD ITALIC NABLA
-	{0x1D736, 0x1D74E, prAL, gcLl},   //    [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA
-	{0x1D74F, 0x1D74F, prAL, gcSm},   //         MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL
-	{0x1D750, 0x1D76E, prAL, gcLC},   //    [31] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA
-	{0x1D76F, 0x1D76F, prAL, gcSm},   //         MATHEMATICAL SANS-SERIF BOLD NABLA
-	{0x1D770, 0x1D788, prAL, gcLl},   //    [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA
-	{0x1D789, 0x1D789, prAL, gcSm},   //         MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL
-	{0x1D78A, 0x1D7A8, prAL, gcLC},   //    [31] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA
-	{0x1D7A9, 0x1D7A9, prAL, gcSm},   //         MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA
-	{0x1D7AA, 0x1D7C2, prAL, gcLl},   //    [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA
-	{0x1D7C3, 0x1D7C3, prAL, gcSm},   //         MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL
-	{0x1D7C4, 0x1D7CB, prAL, gcLC},   //     [8] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD SMALL DIGAMMA
-	{0x1D7CE, 0x1D7FF, prNU, gcNd},   //    [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE
-	{0x1D800, 0x1D9FF, prAL, gcSo},   //   [512] SIGNWRITING HAND-FIST INDEX..SIGNWRITING HEAD
-	{0x1DA00, 0x1DA36, prCM, gcMn},   //    [55] SIGNWRITING HEAD RIM..SIGNWRITING AIR SUCKING IN
-	{0x1DA37, 0x1DA3A, prAL, gcSo},   //     [4] SIGNWRITING AIR BLOW SMALL ROTATIONS..SIGNWRITING BREATH EXHALE
-	{0x1DA3B, 0x1DA6C, prCM, gcMn},   //    [50] SIGNWRITING MOUTH CLOSED NEUTRAL..SIGNWRITING EXCITEMENT
-	{0x1DA6D, 0x1DA74, prAL, gcSo},   //     [8] SIGNWRITING SHOULDER HIP SPINE..SIGNWRITING TORSO-FLOORPLANE TWISTING
-	{0x1DA75, 0x1DA75, prCM, gcMn},   //         SIGNWRITING UPPER BODY TILTING FROM HIP JOINTS
-	{0x1DA76, 0x1DA83, prAL, gcSo},   //    [14] SIGNWRITING LIMB COMBINATION..SIGNWRITING LOCATION DEPTH
-	{0x1DA84, 0x1DA84, prCM, gcMn},   //         SIGNWRITING LOCATION HEAD NECK
-	{0x1DA85, 0x1DA86, prAL, gcSo},   //     [2] SIGNWRITING LOCATION TORSO..SIGNWRITING LOCATION LIMBS DIGITS
-	{0x1DA87, 0x1DA8A, prBA, gcPo},   //     [4] SIGNWRITING COMMA..SIGNWRITING COLON
-	{0x1DA8B, 0x1DA8B, prAL, gcPo},   //         SIGNWRITING PARENTHESIS
-	{0x1DA9B, 0x1DA9F, prCM, gcMn},   //     [5] SIGNWRITING FILL MODIFIER-2..SIGNWRITING FILL MODIFIER-6
-	{0x1DAA1, 0x1DAAF, prCM, gcMn},   //    [15] SIGNWRITING ROTATION MODIFIER-2..SIGNWRITING ROTATION MODIFIER-16
-	{0x1DF00, 0x1DF09, prAL, gcLl},   //    [10] LATIN SMALL LETTER FENG DIGRAPH WITH TRILL..LATIN SMALL LETTER T WITH HOOK AND RETROFLEX HOOK
-	{0x1DF0A, 0x1DF0A, prAL, gcLo},   //         LATIN LETTER RETROFLEX CLICK WITH RETROFLEX HOOK
-	{0x1DF0B, 0x1DF1E, prAL, gcLl},   //    [20] LATIN SMALL LETTER ESH WITH DOUBLE BAR..LATIN SMALL LETTER S WITH CURL
-	{0x1DF25, 0x1DF2A, prAL, gcLl},   //     [6] LATIN SMALL LETTER D WITH MID-HEIGHT LEFT HOOK..LATIN SMALL LETTER T WITH MID-HEIGHT LEFT HOOK
-	{0x1E000, 0x1E006, prCM, gcMn},   //     [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE
-	{0x1E008, 0x1E018, prCM, gcMn},   //    [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU
-	{0x1E01B, 0x1E021, prCM, gcMn},   //     [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI
-	{0x1E023, 0x1E024, prCM, gcMn},   //     [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS
-	{0x1E026, 0x1E02A, prCM, gcMn},   //     [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA
-	{0x1E030, 0x1E06D, prAL, gcLm},   //    [62] MODIFIER LETTER CYRILLIC SMALL A..MODIFIER LETTER CYRILLIC SMALL STRAIGHT U WITH STROKE
-	{0x1E08F, 0x1E08F, prCM, gcMn},   //         COMBINING CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
-	{0x1E100, 0x1E12C, prAL, gcLo},   //    [45] NYIAKENG PUACHUE HMONG LETTER MA..NYIAKENG PUACHUE HMONG LETTER W
-	{0x1E130, 0x1E136, prCM, gcMn},   //     [7] NYIAKENG PUACHUE HMONG TONE-B..NYIAKENG PUACHUE HMONG TONE-D
-	{0x1E137, 0x1E13D, prAL, gcLm},   //     [7] NYIAKENG PUACHUE HMONG SIGN FOR PERSON..NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER
-	{0x1E140, 0x1E149, prNU, gcNd},   //    [10] NYIAKENG PUACHUE HMONG DIGIT ZERO..NYIAKENG PUACHUE HMONG DIGIT NINE
-	{0x1E14E, 0x1E14E, prAL, gcLo},   //         NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ
-	{0x1E14F, 0x1E14F, prAL, gcSo},   //         NYIAKENG PUACHUE HMONG CIRCLED CA
-	{0x1E290, 0x1E2AD, prAL, gcLo},   //    [30] TOTO LETTER PA..TOTO LETTER A
-	{0x1E2AE, 0x1E2AE, prCM, gcMn},   //         TOTO SIGN RISING TONE
-	{0x1E2C0, 0x1E2EB, prAL, gcLo},   //    [44] WANCHO LETTER AA..WANCHO LETTER YIH
-	{0x1E2EC, 0x1E2EF, prCM, gcMn},   //     [4] WANCHO TONE TUP..WANCHO TONE KOINI
-	{0x1E2F0, 0x1E2F9, prNU, gcNd},   //    [10] WANCHO DIGIT ZERO..WANCHO DIGIT NINE
-	{0x1E2FF, 0x1E2FF, prPR, gcSc},   //         WANCHO NGUN SIGN
-	{0x1E4D0, 0x1E4EA, prAL, gcLo},   //    [27] NAG MUNDARI LETTER O..NAG MUNDARI LETTER ELL
-	{0x1E4EB, 0x1E4EB, prAL, gcLm},   //         NAG MUNDARI SIGN OJOD
-	{0x1E4EC, 0x1E4EF, prCM, gcMn},   //     [4] NAG MUNDARI SIGN MUHOR..NAG MUNDARI SIGN SUTUH
-	{0x1E4F0, 0x1E4F9, prNU, gcNd},   //    [10] NAG MUNDARI DIGIT ZERO..NAG MUNDARI DIGIT NINE
-	{0x1E7E0, 0x1E7E6, prAL, gcLo},   //     [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO
-	{0x1E7E8, 0x1E7EB, prAL, gcLo},   //     [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE
-	{0x1E7ED, 0x1E7EE, prAL, gcLo},   //     [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE
-	{0x1E7F0, 0x1E7FE, prAL, gcLo},   //    [15] ETHIOPIC SYLLABLE GURAGE QWI..ETHIOPIC SYLLABLE GURAGE PWEE
-	{0x1E800, 0x1E8C4, prAL, gcLo},   //   [197] MENDE KIKAKUI SYLLABLE M001 KI..MENDE KIKAKUI SYLLABLE M060 NYON
-	{0x1E8C7, 0x1E8CF, prAL, gcNo},   //     [9] MENDE KIKAKUI DIGIT ONE..MENDE KIKAKUI DIGIT NINE
-	{0x1E8D0, 0x1E8D6, prCM, gcMn},   //     [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS
-	{0x1E900, 0x1E943, prAL, gcLC},   //    [68] ADLAM CAPITAL LETTER ALIF..ADLAM SMALL LETTER SHA
-	{0x1E944, 0x1E94A, prCM, gcMn},   //     [7] ADLAM ALIF LENGTHENER..ADLAM NUKTA
-	{0x1E94B, 0x1E94B, prAL, gcLm},   //         ADLAM NASALIZATION MARK
-	{0x1E950, 0x1E959, prNU, gcNd},   //    [10] ADLAM DIGIT ZERO..ADLAM DIGIT NINE
-	{0x1E95E, 0x1E95F, prOP, gcPo},   //     [2] ADLAM INITIAL EXCLAMATION MARK..ADLAM INITIAL QUESTION MARK
-	{0x1EC71, 0x1ECAB, prAL, gcNo},   //    [59] INDIC SIYAQ NUMBER ONE..INDIC SIYAQ NUMBER PREFIXED NINE
-	{0x1ECAC, 0x1ECAC, prPO, gcSo},   //         INDIC SIYAQ PLACEHOLDER
-	{0x1ECAD, 0x1ECAF, prAL, gcNo},   //     [3] INDIC SIYAQ FRACTION ONE QUARTER..INDIC SIYAQ FRACTION THREE QUARTERS
-	{0x1ECB0, 0x1ECB0, prPO, gcSc},   //         INDIC SIYAQ RUPEE MARK
-	{0x1ECB1, 0x1ECB4, prAL, gcNo},   //     [4] INDIC SIYAQ NUMBER ALTERNATE ONE..INDIC SIYAQ ALTERNATE LAKH MARK
-	{0x1ED01, 0x1ED2D, prAL, gcNo},   //    [45] OTTOMAN SIYAQ NUMBER ONE..OTTOMAN SIYAQ NUMBER NINETY THOUSAND
-	{0x1ED2E, 0x1ED2E, prAL, gcSo},   //         OTTOMAN SIYAQ MARRATAN
-	{0x1ED2F, 0x1ED3D, prAL, gcNo},   //    [15] OTTOMAN SIYAQ ALTERNATE NUMBER TWO..OTTOMAN SIYAQ FRACTION ONE SIXTH
-	{0x1EE00, 0x1EE03, prAL, gcLo},   //     [4] ARABIC MATHEMATICAL ALEF..ARABIC MATHEMATICAL DAL
-	{0x1EE05, 0x1EE1F, prAL, gcLo},   //    [27] ARABIC MATHEMATICAL WAW..ARABIC MATHEMATICAL DOTLESS QAF
-	{0x1EE21, 0x1EE22, prAL, gcLo},   //     [2] ARABIC MATHEMATICAL INITIAL BEH..ARABIC MATHEMATICAL INITIAL JEEM
-	{0x1EE24, 0x1EE24, prAL, gcLo},   //         ARABIC MATHEMATICAL INITIAL HEH
-	{0x1EE27, 0x1EE27, prAL, gcLo},   //         ARABIC MATHEMATICAL INITIAL HAH
-	{0x1EE29, 0x1EE32, prAL, gcLo},   //    [10] ARABIC MATHEMATICAL INITIAL YEH..ARABIC MATHEMATICAL INITIAL QAF
-	{0x1EE34, 0x1EE37, prAL, gcLo},   //     [4] ARABIC MATHEMATICAL INITIAL SHEEN..ARABIC MATHEMATICAL INITIAL KHAH
-	{0x1EE39, 0x1EE39, prAL, gcLo},   //         ARABIC MATHEMATICAL INITIAL DAD
-	{0x1EE3B, 0x1EE3B, prAL, gcLo},   //         ARABIC MATHEMATICAL INITIAL GHAIN
-	{0x1EE42, 0x1EE42, prAL, gcLo},   //         ARABIC MATHEMATICAL TAILED JEEM
-	{0x1EE47, 0x1EE47, prAL, gcLo},   //         ARABIC MATHEMATICAL TAILED HAH
-	{0x1EE49, 0x1EE49, prAL, gcLo},   //         ARABIC MATHEMATICAL TAILED YEH
-	{0x1EE4B, 0x1EE4B, prAL, gcLo},   //         ARABIC MATHEMATICAL TAILED LAM
-	{0x1EE4D, 0x1EE4F, prAL, gcLo},   //     [3] ARABIC MATHEMATICAL TAILED NOON..ARABIC MATHEMATICAL TAILED AIN
-	{0x1EE51, 0x1EE52, prAL, gcLo},   //     [2] ARABIC MATHEMATICAL TAILED SAD..ARABIC MATHEMATICAL TAILED QAF
-	{0x1EE54, 0x1EE54, prAL, gcLo},   //         ARABIC MATHEMATICAL TAILED SHEEN
-	{0x1EE57, 0x1EE57, prAL, gcLo},   //         ARABIC MATHEMATICAL TAILED KHAH
-	{0x1EE59, 0x1EE59, prAL, gcLo},   //         ARABIC MATHEMATICAL TAILED DAD
-	{0x1EE5B, 0x1EE5B, prAL, gcLo},   //         ARABIC MATHEMATICAL TAILED GHAIN
-	{0x1EE5D, 0x1EE5D, prAL, gcLo},   //         ARABIC MATHEMATICAL TAILED DOTLESS NOON
-	{0x1EE5F, 0x1EE5F, prAL, gcLo},   //         ARABIC MATHEMATICAL TAILED DOTLESS QAF
-	{0x1EE61, 0x1EE62, prAL, gcLo},   //     [2] ARABIC MATHEMATICAL STRETCHED BEH..ARABIC MATHEMATICAL STRETCHED JEEM
-	{0x1EE64, 0x1EE64, prAL, gcLo},   //         ARABIC MATHEMATICAL STRETCHED HEH
-	{0x1EE67, 0x1EE6A, prAL, gcLo},   //     [4] ARABIC MATHEMATICAL STRETCHED HAH..ARABIC MATHEMATICAL STRETCHED KAF
-	{0x1EE6C, 0x1EE72, prAL, gcLo},   //     [7] ARABIC MATHEMATICAL STRETCHED MEEM..ARABIC MATHEMATICAL STRETCHED QAF
-	{0x1EE74, 0x1EE77, prAL, gcLo},   //     [4] ARABIC MATHEMATICAL STRETCHED SHEEN..ARABIC MATHEMATICAL STRETCHED KHAH
-	{0x1EE79, 0x1EE7C, prAL, gcLo},   //     [4] ARABIC MATHEMATICAL STRETCHED DAD..ARABIC MATHEMATICAL STRETCHED DOTLESS BEH
-	{0x1EE7E, 0x1EE7E, prAL, gcLo},   //         ARABIC MATHEMATICAL STRETCHED DOTLESS FEH
-	{0x1EE80, 0x1EE89, prAL, gcLo},   //    [10] ARABIC MATHEMATICAL LOOPED ALEF..ARABIC MATHEMATICAL LOOPED YEH
-	{0x1EE8B, 0x1EE9B, prAL, gcLo},   //    [17] ARABIC MATHEMATICAL LOOPED LAM..ARABIC MATHEMATICAL LOOPED GHAIN
-	{0x1EEA1, 0x1EEA3, prAL, gcLo},   //     [3] ARABIC MATHEMATICAL DOUBLE-STRUCK BEH..ARABIC MATHEMATICAL DOUBLE-STRUCK DAL
-	{0x1EEA5, 0x1EEA9, prAL, gcLo},   //     [5] ARABIC MATHEMATICAL DOUBLE-STRUCK WAW..ARABIC MATHEMATICAL DOUBLE-STRUCK YEH
-	{0x1EEAB, 0x1EEBB, prAL, gcLo},   //    [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN
-	{0x1EEF0, 0x1EEF1, prAL, gcSm},   //     [2] ARABIC MATHEMATICAL OPERATOR MEEM WITH HAH WITH TATWEEL..ARABIC MATHEMATICAL OPERATOR HAH WITH DAL
-	{0x1F000, 0x1F02B, prID, gcSo},   //    [44] MAHJONG TILE EAST WIND..MAHJONG TILE BACK
-	{0x1F02C, 0x1F02F, prID, gcCn},   //     [4] <reserved-1F02C>..<reserved-1F02F>
-	{0x1F030, 0x1F093, prID, gcSo},   //   [100] DOMINO TILE HORIZONTAL BACK..DOMINO TILE VERTICAL-06-06
-	{0x1F094, 0x1F09F, prID, gcCn},   //    [12] <reserved-1F094>..<reserved-1F09F>
-	{0x1F0A0, 0x1F0AE, prID, gcSo},   //    [15] PLAYING CARD BACK..PLAYING CARD KING OF SPADES
-	{0x1F0AF, 0x1F0B0, prID, gcCn},   //     [2] <reserved-1F0AF>..<reserved-1F0B0>
-	{0x1F0B1, 0x1F0BF, prID, gcSo},   //    [15] PLAYING CARD ACE OF HEARTS..PLAYING CARD RED JOKER
-	{0x1F0C0, 0x1F0C0, prID, gcCn},   //         <reserved-1F0C0>
-	{0x1F0C1, 0x1F0CF, prID, gcSo},   //    [15] PLAYING CARD ACE OF DIAMONDS..PLAYING CARD BLACK JOKER
-	{0x1F0D0, 0x1F0D0, prID, gcCn},   //         <reserved-1F0D0>
-	{0x1F0D1, 0x1F0F5, prID, gcSo},   //    [37] PLAYING CARD ACE OF CLUBS..PLAYING CARD TRUMP-21
-	{0x1F0F6, 0x1F0FF, prID, gcCn},   //    [10] <reserved-1F0F6>..<reserved-1F0FF>
-	{0x1F100, 0x1F10C, prAI, gcNo},   //    [13] DIGIT ZERO FULL STOP..DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ZERO
-	{0x1F10D, 0x1F10F, prID, gcSo},   //     [3] CIRCLED ZERO WITH SLASH..CIRCLED DOLLAR SIGN WITH OVERLAID BACKSLASH
-	{0x1F110, 0x1F12D, prAI, gcSo},   //    [30] PARENTHESIZED LATIN CAPITAL LETTER A..CIRCLED CD
-	{0x1F12E, 0x1F12F, prAL, gcSo},   //     [2] CIRCLED WZ..COPYLEFT SYMBOL
-	{0x1F130, 0x1F169, prAI, gcSo},   //    [58] SQUARED LATIN CAPITAL LETTER A..NEGATIVE CIRCLED LATIN CAPITAL LETTER Z
-	{0x1F16A, 0x1F16C, prAL, gcSo},   //     [3] RAISED MC SIGN..RAISED MR SIGN
-	{0x1F16D, 0x1F16F, prID, gcSo},   //     [3] CIRCLED CC..CIRCLED HUMAN FIGURE
-	{0x1F170, 0x1F1AC, prAI, gcSo},   //    [61] NEGATIVE SQUARED LATIN CAPITAL LETTER A..SQUARED VOD
-	{0x1F1AD, 0x1F1AD, prID, gcSo},   //         MASK WORK SYMBOL
-	{0x1F1AE, 0x1F1E5, prID, gcCn},   //    [56] <reserved-1F1AE>..<reserved-1F1E5>
-	{0x1F1E6, 0x1F1FF, prRI, gcSo},   //    [26] REGIONAL INDICATOR SYMBOL LETTER A..REGIONAL INDICATOR SYMBOL LETTER Z
-	{0x1F200, 0x1F202, prID, gcSo},   //     [3] SQUARE HIRAGANA HOKA..SQUARED KATAKANA SA
-	{0x1F203, 0x1F20F, prID, gcCn},   //    [13] <reserved-1F203>..<reserved-1F20F>
-	{0x1F210, 0x1F23B, prID, gcSo},   //    [44] SQUARED CJK UNIFIED IDEOGRAPH-624B..SQUARED CJK UNIFIED IDEOGRAPH-914D
-	{0x1F23C, 0x1F23F, prID, gcCn},   //     [4] <reserved-1F23C>..<reserved-1F23F>
-	{0x1F240, 0x1F248, prID, gcSo},   //     [9] TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C..TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557
-	{0x1F249, 0x1F24F, prID, gcCn},   //     [7] <reserved-1F249>..<reserved-1F24F>
-	{0x1F250, 0x1F251, prID, gcSo},   //     [2] CIRCLED IDEOGRAPH ADVANTAGE..CIRCLED IDEOGRAPH ACCEPT
-	{0x1F252, 0x1F25F, prID, gcCn},   //    [14] <reserved-1F252>..<reserved-1F25F>
-	{0x1F260, 0x1F265, prID, gcSo},   //     [6] ROUNDED SYMBOL FOR FU..ROUNDED SYMBOL FOR CAI
-	{0x1F266, 0x1F2FF, prID, gcCn},   //   [154] <reserved-1F266>..<reserved-1F2FF>
-	{0x1F300, 0x1F384, prID, gcSo},   //   [133] CYCLONE..CHRISTMAS TREE
-	{0x1F385, 0x1F385, prEB, gcSo},   //         FATHER CHRISTMAS
-	{0x1F386, 0x1F39B, prID, gcSo},   //    [22] FIREWORKS..CONTROL KNOBS
-	{0x1F39C, 0x1F39D, prAL, gcSo},   //     [2] BEAMED ASCENDING MUSICAL NOTES..BEAMED DESCENDING MUSICAL NOTES
-	{0x1F39E, 0x1F3B4, prID, gcSo},   //    [23] FILM FRAMES..FLOWER PLAYING CARDS
-	{0x1F3B5, 0x1F3B6, prAL, gcSo},   //     [2] MUSICAL NOTE..MULTIPLE MUSICAL NOTES
-	{0x1F3B7, 0x1F3BB, prID, gcSo},   //     [5] SAXOPHONE..VIOLIN
-	{0x1F3BC, 0x1F3BC, prAL, gcSo},   //         MUSICAL SCORE
-	{0x1F3BD, 0x1F3C1, prID, gcSo},   //     [5] RUNNING SHIRT WITH SASH..CHEQUERED FLAG
-	{0x1F3C2, 0x1F3C4, prEB, gcSo},   //     [3] SNOWBOARDER..SURFER
-	{0x1F3C5, 0x1F3C6, prID, gcSo},   //     [2] SPORTS MEDAL..TROPHY
-	{0x1F3C7, 0x1F3C7, prEB, gcSo},   //         HORSE RACING
-	{0x1F3C8, 0x1F3C9, prID, gcSo},   //     [2] AMERICAN FOOTBALL..RUGBY FOOTBALL
-	{0x1F3CA, 0x1F3CC, prEB, gcSo},   //     [3] SWIMMER..GOLFER
-	{0x1F3CD, 0x1F3FA, prID, gcSo},   //    [46] RACING MOTORCYCLE..AMPHORA
-	{0x1F3FB, 0x1F3FF, prEM, gcSk},   //     [5] EMOJI MODIFIER FITZPATRICK TYPE-1-2..EMOJI MODIFIER FITZPATRICK TYPE-6
-	{0x1F400, 0x1F441, prID, gcSo},   //    [66] RAT..EYE
-	{0x1F442, 0x1F443, prEB, gcSo},   //     [2] EAR..NOSE
-	{0x1F444, 0x1F445, prID, gcSo},   //     [2] MOUTH..TONGUE
-	{0x1F446, 0x1F450, prEB, gcSo},   //    [11] WHITE UP POINTING BACKHAND INDEX..OPEN HANDS SIGN
-	{0x1F451, 0x1F465, prID, gcSo},   //    [21] CROWN..BUSTS IN SILHOUETTE
-	{0x1F466, 0x1F478, prEB, gcSo},   //    [19] BOY..PRINCESS
-	{0x1F479, 0x1F47B, prID, gcSo},   //     [3] JAPANESE OGRE..GHOST
-	{0x1F47C, 0x1F47C, prEB, gcSo},   //         BABY ANGEL
-	{0x1F47D, 0x1F480, prID, gcSo},   //     [4] EXTRATERRESTRIAL ALIEN..SKULL
-	{0x1F481, 0x1F483, prEB, gcSo},   //     [3] INFORMATION DESK PERSON..DANCER
-	{0x1F484, 0x1F484, prID, gcSo},   //         LIPSTICK
-	{0x1F485, 0x1F487, prEB, gcSo},   //     [3] NAIL POLISH..HAIRCUT
-	{0x1F488, 0x1F48E, prID, gcSo},   //     [7] BARBER POLE..GEM STONE
-	{0x1F48F, 0x1F48F, prEB, gcSo},   //         KISS
-	{0x1F490, 0x1F490, prID, gcSo},   //         BOUQUET
-	{0x1F491, 0x1F491, prEB, gcSo},   //         COUPLE WITH HEART
-	{0x1F492, 0x1F49F, prID, gcSo},   //    [14] WEDDING..HEART DECORATION
-	{0x1F4A0, 0x1F4A0, prAL, gcSo},   //         DIAMOND SHAPE WITH A DOT INSIDE
-	{0x1F4A1, 0x1F4A1, prID, gcSo},   //         ELECTRIC LIGHT BULB
-	{0x1F4A2, 0x1F4A2, prAL, gcSo},   //         ANGER SYMBOL
-	{0x1F4A3, 0x1F4A3, prID, gcSo},   //         BOMB
-	{0x1F4A4, 0x1F4A4, prAL, gcSo},   //         SLEEPING SYMBOL
-	{0x1F4A5, 0x1F4A9, prID, gcSo},   //     [5] COLLISION SYMBOL..PILE OF POO
-	{0x1F4AA, 0x1F4AA, prEB, gcSo},   //         FLEXED BICEPS
-	{0x1F4AB, 0x1F4AE, prID, gcSo},   //     [4] DIZZY SYMBOL..WHITE FLOWER
-	{0x1F4AF, 0x1F4AF, prAL, gcSo},   //         HUNDRED POINTS SYMBOL
-	{0x1F4B0, 0x1F4B0, prID, gcSo},   //         MONEY BAG
-	{0x1F4B1, 0x1F4B2, prAL, gcSo},   //     [2] CURRENCY EXCHANGE..HEAVY DOLLAR SIGN
-	{0x1F4B3, 0x1F4FF, prID, gcSo},   //    [77] CREDIT CARD..PRAYER BEADS
-	{0x1F500, 0x1F506, prAL, gcSo},   //     [7] TWISTED RIGHTWARDS ARROWS..HIGH BRIGHTNESS SYMBOL
-	{0x1F507, 0x1F516, prID, gcSo},   //    [16] SPEAKER WITH CANCELLATION STROKE..BOOKMARK
-	{0x1F517, 0x1F524, prAL, gcSo},   //    [14] LINK SYMBOL..INPUT SYMBOL FOR LATIN LETTERS
-	{0x1F525, 0x1F531, prID, gcSo},   //    [13] FIRE..TRIDENT EMBLEM
-	{0x1F532, 0x1F549, prAL, gcSo},   //    [24] BLACK SQUARE BUTTON..OM SYMBOL
-	{0x1F54A, 0x1F573, prID, gcSo},   //    [42] DOVE OF PEACE..HOLE
-	{0x1F574, 0x1F575, prEB, gcSo},   //     [2] MAN IN BUSINESS SUIT LEVITATING..SLEUTH OR SPY
-	{0x1F576, 0x1F579, prID, gcSo},   //     [4] DARK SUNGLASSES..JOYSTICK
-	{0x1F57A, 0x1F57A, prEB, gcSo},   //         MAN DANCING
-	{0x1F57B, 0x1F58F, prID, gcSo},   //    [21] LEFT HAND TELEPHONE RECEIVER..TURNED OK HAND SIGN
-	{0x1F590, 0x1F590, prEB, gcSo},   //         RAISED HAND WITH FINGERS SPLAYED
-	{0x1F591, 0x1F594, prID, gcSo},   //     [4] REVERSED RAISED HAND WITH FINGERS SPLAYED..REVERSED VICTORY HAND
-	{0x1F595, 0x1F596, prEB, gcSo},   //     [2] REVERSED HAND WITH MIDDLE FINGER EXTENDED..RAISED HAND WITH PART BETWEEN MIDDLE AND RING FINGERS
-	{0x1F597, 0x1F5D3, prID, gcSo},   //    [61] WHITE DOWN POINTING LEFT HAND INDEX..SPIRAL CALENDAR PAD
-	{0x1F5D4, 0x1F5DB, prAL, gcSo},   //     [8] DESKTOP WINDOW..DECREASE FONT SIZE SYMBOL
-	{0x1F5DC, 0x1F5F3, prID, gcSo},   //    [24] COMPRESSION..BALLOT BOX WITH BALLOT
-	{0x1F5F4, 0x1F5F9, prAL, gcSo},   //     [6] BALLOT SCRIPT X..BALLOT BOX WITH BOLD CHECK
-	{0x1F5FA, 0x1F5FF, prID, gcSo},   //     [6] WORLD MAP..MOYAI
-	{0x1F600, 0x1F644, prID, gcSo},   //    [69] GRINNING FACE..FACE WITH ROLLING EYES
-	{0x1F645, 0x1F647, prEB, gcSo},   //     [3] FACE WITH NO GOOD GESTURE..PERSON BOWING DEEPLY
-	{0x1F648, 0x1F64A, prID, gcSo},   //     [3] SEE-NO-EVIL MONKEY..SPEAK-NO-EVIL MONKEY
-	{0x1F64B, 0x1F64F, prEB, gcSo},   //     [5] HAPPY PERSON RAISING ONE HAND..PERSON WITH FOLDED HANDS
-	{0x1F650, 0x1F675, prAL, gcSo},   //    [38] NORTH WEST POINTING LEAF..SWASH AMPERSAND ORNAMENT
-	{0x1F676, 0x1F678, prQU, gcSo},   //     [3] SANS-SERIF HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT..SANS-SERIF HEAVY LOW DOUBLE COMMA QUOTATION MARK ORNAMENT
-	{0x1F679, 0x1F67B, prNS, gcSo},   //     [3] HEAVY INTERROBANG ORNAMENT..HEAVY SANS-SERIF INTERROBANG ORNAMENT
-	{0x1F67C, 0x1F67F, prAL, gcSo},   //     [4] VERY HEAVY SOLIDUS..REVERSE CHECKER BOARD
-	{0x1F680, 0x1F6A2, prID, gcSo},   //    [35] ROCKET..SHIP
-	{0x1F6A3, 0x1F6A3, prEB, gcSo},   //         ROWBOAT
-	{0x1F6A4, 0x1F6B3, prID, gcSo},   //    [16] SPEEDBOAT..NO BICYCLES
-	{0x1F6B4, 0x1F6B6, prEB, gcSo},   //     [3] BICYCLIST..PEDESTRIAN
-	{0x1F6B7, 0x1F6BF, prID, gcSo},   //     [9] NO PEDESTRIANS..SHOWER
-	{0x1F6C0, 0x1F6C0, prEB, gcSo},   //         BATH
-	{0x1F6C1, 0x1F6CB, prID, gcSo},   //    [11] BATHTUB..COUCH AND LAMP
-	{0x1F6CC, 0x1F6CC, prEB, gcSo},   //         SLEEPING ACCOMMODATION
-	{0x1F6CD, 0x1F6D7, prID, gcSo},   //    [11] SHOPPING BAGS..ELEVATOR
-	{0x1F6D8, 0x1F6DB, prID, gcCn},   //     [4] <reserved-1F6D8>..<reserved-1F6DB>
-	{0x1F6DC, 0x1F6EC, prID, gcSo},   //    [17] WIRELESS..AIRPLANE ARRIVING
-	{0x1F6ED, 0x1F6EF, prID, gcCn},   //     [3] <reserved-1F6ED>..<reserved-1F6EF>
-	{0x1F6F0, 0x1F6FC, prID, gcSo},   //    [13] SATELLITE..ROLLER SKATE
-	{0x1F6FD, 0x1F6FF, prID, gcCn},   //     [3] <reserved-1F6FD>..<reserved-1F6FF>
-	{0x1F700, 0x1F773, prAL, gcSo},   //   [116] ALCHEMICAL SYMBOL FOR QUINTESSENCE..ALCHEMICAL SYMBOL FOR HALF OUNCE
-	{0x1F774, 0x1F776, prID, gcSo},   //     [3] LOT OF FORTUNE..LUNAR ECLIPSE
-	{0x1F777, 0x1F77A, prID, gcCn},   //     [4] <reserved-1F777>..<reserved-1F77A>
-	{0x1F77B, 0x1F77F, prID, gcSo},   //     [5] HAUMEA..ORCUS
-	{0x1F780, 0x1F7D4, prAL, gcSo},   //    [85] BLACK LEFT-POINTING ISOSCELES RIGHT TRIANGLE..HEAVY TWELVE POINTED PINWHEEL STAR
-	{0x1F7D5, 0x1F7D9, prID, gcSo},   //     [5] CIRCLED TRIANGLE..NINE POINTED WHITE STAR
-	{0x1F7DA, 0x1F7DF, prID, gcCn},   //     [6] <reserved-1F7DA>..<reserved-1F7DF>
-	{0x1F7E0, 0x1F7EB, prID, gcSo},   //    [12] LARGE ORANGE CIRCLE..LARGE BROWN SQUARE
-	{0x1F7EC, 0x1F7EF, prID, gcCn},   //     [4] <reserved-1F7EC>..<reserved-1F7EF>
-	{0x1F7F0, 0x1F7F0, prID, gcSo},   //         HEAVY EQUALS SIGN
-	{0x1F7F1, 0x1F7FF, prID, gcCn},   //    [15] <reserved-1F7F1>..<reserved-1F7FF>
-	{0x1F800, 0x1F80B, prAL, gcSo},   //    [12] LEFTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD..DOWNWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD
-	{0x1F80C, 0x1F80F, prID, gcCn},   //     [4] <reserved-1F80C>..<reserved-1F80F>
-	{0x1F810, 0x1F847, prAL, gcSo},   //    [56] LEFTWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD..DOWNWARDS HEAVY ARROW
-	{0x1F848, 0x1F84F, prID, gcCn},   //     [8] <reserved-1F848>..<reserved-1F84F>
-	{0x1F850, 0x1F859, prAL, gcSo},   //    [10] LEFTWARDS SANS-SERIF ARROW..UP DOWN SANS-SERIF ARROW
-	{0x1F85A, 0x1F85F, prID, gcCn},   //     [6] <reserved-1F85A>..<reserved-1F85F>
-	{0x1F860, 0x1F887, prAL, gcSo},   //    [40] WIDE-HEADED LEFTWARDS LIGHT BARB ARROW..WIDE-HEADED SOUTH WEST VERY HEAVY BARB ARROW
-	{0x1F888, 0x1F88F, prID, gcCn},   //     [8] <reserved-1F888>..<reserved-1F88F>
-	{0x1F890, 0x1F8AD, prAL, gcSo},   //    [30] LEFTWARDS TRIANGLE ARROWHEAD..WHITE ARROW SHAFT WIDTH TWO THIRDS
-	{0x1F8AE, 0x1F8AF, prID, gcCn},   //     [2] <reserved-1F8AE>..<reserved-1F8AF>
-	{0x1F8B0, 0x1F8B1, prID, gcSo},   //     [2] ARROW POINTING UPWARDS THEN NORTH WEST..ARROW POINTING RIGHTWARDS THEN CURVING SOUTH WEST
-	{0x1F8B2, 0x1F8FF, prID, gcCn},   //    [78] <reserved-1F8B2>..<reserved-1F8FF>
-	{0x1F900, 0x1F90B, prAL, gcSo},   //    [12] CIRCLED CROSS FORMEE WITH FOUR DOTS..DOWNWARD FACING NOTCHED HOOK WITH DOT
-	{0x1F90C, 0x1F90C, prEB, gcSo},   //         PINCHED FINGERS
-	{0x1F90D, 0x1F90E, prID, gcSo},   //     [2] WHITE HEART..BROWN HEART
-	{0x1F90F, 0x1F90F, prEB, gcSo},   //         PINCHING HAND
-	{0x1F910, 0x1F917, prID, gcSo},   //     [8] ZIPPER-MOUTH FACE..HUGGING FACE
-	{0x1F918, 0x1F91F, prEB, gcSo},   //     [8] SIGN OF THE HORNS..I LOVE YOU HAND SIGN
-	{0x1F920, 0x1F925, prID, gcSo},   //     [6] FACE WITH COWBOY HAT..LYING FACE
-	{0x1F926, 0x1F926, prEB, gcSo},   //         FACE PALM
-	{0x1F927, 0x1F92F, prID, gcSo},   //     [9] SNEEZING FACE..SHOCKED FACE WITH EXPLODING HEAD
-	{0x1F930, 0x1F939, prEB, gcSo},   //    [10] PREGNANT WOMAN..JUGGLING
-	{0x1F93A, 0x1F93B, prID, gcSo},   //     [2] FENCER..MODERN PENTATHLON
-	{0x1F93C, 0x1F93E, prEB, gcSo},   //     [3] WRESTLERS..HANDBALL
-	{0x1F93F, 0x1F976, prID, gcSo},   //    [56] DIVING MASK..FREEZING FACE
-	{0x1F977, 0x1F977, prEB, gcSo},   //         NINJA
-	{0x1F978, 0x1F9B4, prID, gcSo},   //    [61] DISGUISED FACE..BONE
-	{0x1F9B5, 0x1F9B6, prEB, gcSo},   //     [2] LEG..FOOT
-	{0x1F9B7, 0x1F9B7, prID, gcSo},   //         TOOTH
-	{0x1F9B8, 0x1F9B9, prEB, gcSo},   //     [2] SUPERHERO..SUPERVILLAIN
-	{0x1F9BA, 0x1F9BA, prID, gcSo},   //         SAFETY VEST
-	{0x1F9BB, 0x1F9BB, prEB, gcSo},   //         EAR WITH HEARING AID
-	{0x1F9BC, 0x1F9CC, prID, gcSo},   //    [17] MOTORIZED WHEELCHAIR..TROLL
-	{0x1F9CD, 0x1F9CF, prEB, gcSo},   //     [3] STANDING PERSON..DEAF PERSON
-	{0x1F9D0, 0x1F9D0, prID, gcSo},   //         FACE WITH MONOCLE
-	{0x1F9D1, 0x1F9DD, prEB, gcSo},   //    [13] ADULT..ELF
-	{0x1F9DE, 0x1F9FF, prID, gcSo},   //    [34] GENIE..NAZAR AMULET
-	{0x1FA00, 0x1FA53, prAL, gcSo},   //    [84] NEUTRAL CHESS KING..BLACK CHESS KNIGHT-BISHOP
-	{0x1FA54, 0x1FA5F, prID, gcCn},   //    [12] <reserved-1FA54>..<reserved-1FA5F>
-	{0x1FA60, 0x1FA6D, prID, gcSo},   //    [14] XIANGQI RED GENERAL..XIANGQI BLACK SOLDIER
-	{0x1FA6E, 0x1FA6F, prID, gcCn},   //     [2] <reserved-1FA6E>..<reserved-1FA6F>
-	{0x1FA70, 0x1FA7C, prID, gcSo},   //    [13] BALLET SHOES..CRUTCH
-	{0x1FA7D, 0x1FA7F, prID, gcCn},   //     [3] <reserved-1FA7D>..<reserved-1FA7F>
-	{0x1FA80, 0x1FA88, prID, gcSo},   //     [9] YO-YO..FLUTE
-	{0x1FA89, 0x1FA8F, prID, gcCn},   //     [7] <reserved-1FA89>..<reserved-1FA8F>
-	{0x1FA90, 0x1FABD, prID, gcSo},   //    [46] RINGED PLANET..WING
-	{0x1FABE, 0x1FABE, prID, gcCn},   //         <reserved-1FABE>
-	{0x1FABF, 0x1FAC2, prID, gcSo},   //     [4] GOOSE..PEOPLE HUGGING
-	{0x1FAC3, 0x1FAC5, prEB, gcSo},   //     [3] PREGNANT MAN..PERSON WITH CROWN
-	{0x1FAC6, 0x1FACD, prID, gcCn},   //     [8] <reserved-1FAC6>..<reserved-1FACD>
-	{0x1FACE, 0x1FADB, prID, gcSo},   //    [14] MOOSE..PEA POD
-	{0x1FADC, 0x1FADF, prID, gcCn},   //     [4] <reserved-1FADC>..<reserved-1FADF>
-	{0x1FAE0, 0x1FAE8, prID, gcSo},   //     [9] MELTING FACE..SHAKING FACE
-	{0x1FAE9, 0x1FAEF, prID, gcCn},   //     [7] <reserved-1FAE9>..<reserved-1FAEF>
-	{0x1FAF0, 0x1FAF8, prEB, gcSo},   //     [9] HAND WITH INDEX FINGER AND THUMB CROSSED..RIGHTWARDS PUSHING HAND
-	{0x1FAF9, 0x1FAFF, prID, gcCn},   //     [7] <reserved-1FAF9>..<reserved-1FAFF>
-	{0x1FB00, 0x1FB92, prAL, gcSo},   //   [147] BLOCK SEXTANT-1..UPPER HALF INVERSE MEDIUM SHADE AND LOWER HALF BLOCK
-	{0x1FB94, 0x1FBCA, prAL, gcSo},   //    [55] LEFT HALF INVERSE MEDIUM SHADE AND RIGHT HALF BLOCK..WHITE UP-POINTING CHEVRON
-	{0x1FBF0, 0x1FBF9, prNU, gcNd},   //    [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE
-	{0x1FC00, 0x1FFFD, prID, gcCn},   //  [1022] <reserved-1FC00>..<reserved-1FFFD>
-	{0x20000, 0x2A6DF, prID, gcLo},   // [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF
-	{0x2A6E0, 0x2A6FF, prID, gcCn},   //    [32] <reserved-2A6E0>..<reserved-2A6FF>
-	{0x2A700, 0x2B739, prID, gcLo},   //  [4154] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B739
-	{0x2B73A, 0x2B73F, prID, gcCn},   //     [6] <reserved-2B73A>..<reserved-2B73F>
-	{0x2B740, 0x2B81D, prID, gcLo},   //   [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D
-	{0x2B81E, 0x2B81F, prID, gcCn},   //     [2] <reserved-2B81E>..<reserved-2B81F>
-	{0x2B820, 0x2CEA1, prID, gcLo},   //  [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1
-	{0x2CEA2, 0x2CEAF, prID, gcCn},   //    [14] <reserved-2CEA2>..<reserved-2CEAF>
-	{0x2CEB0, 0x2EBE0, prID, gcLo},   //  [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0
-	{0x2EBE1, 0x2F7FF, prID, gcCn},   //  [3103] <reserved-2EBE1>..<reserved-2F7FF>
-	{0x2F800, 0x2FA1D, prID, gcLo},   //   [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
-	{0x2FA1E, 0x2FA1F, prID, gcCn},   //     [2] <reserved-2FA1E>..<reserved-2FA1F>
-	{0x2FA20, 0x2FFFD, prID, gcCn},   //  [1502] <reserved-2FA20>..<reserved-2FFFD>
-	{0x30000, 0x3134A, prID, gcLo},   //  [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A
-	{0x3134B, 0x3134F, prID, gcCn},   //     [5] <reserved-3134B>..<reserved-3134F>
-	{0x31350, 0x323AF, prID, gcLo},   //  [4192] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-323AF
-	{0x323B0, 0x3FFFD, prID, gcCn},   // [56398] <reserved-323B0>..<reserved-3FFFD>
-	{0xE0001, 0xE0001, prCM, gcCf},   //         LANGUAGE TAG
-	{0xE0020, 0xE007F, prCM, gcCf},   //    [96] TAG SPACE..CANCEL TAG
-	{0xE0100, 0xE01EF, prCM, gcMn},   //   [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256
-	{0xF0000, 0xFFFFD, prXX, gcCo},   // [65534] <private-use-F0000>..<private-use-FFFFD>
-	{0x100000, 0x10FFFD, prXX, gcCo}, // [65534] <private-use-100000>..<private-use-10FFFD>
-}

+ 0 - 626
v2/vendor/github.com/rivo/uniseg/linerules.go

@@ -1,626 +0,0 @@
-package uniseg
-
-import "unicode/utf8"
-
-// The states of the line break parser.
-const (
-	lbAny = iota
-	lbBK
-	lbCR
-	lbLF
-	lbNL
-	lbSP
-	lbZW
-	lbWJ
-	lbGL
-	lbBA
-	lbHY
-	lbCL
-	lbCP
-	lbEX
-	lbIS
-	lbSY
-	lbOP
-	lbQU
-	lbQUSP
-	lbNS
-	lbCLCPSP
-	lbB2
-	lbB2SP
-	lbCB
-	lbBB
-	lbLB21a
-	lbHL
-	lbAL
-	lbNU
-	lbPR
-	lbEB
-	lbIDEM
-	lbNUNU
-	lbNUSY
-	lbNUIS
-	lbNUCL
-	lbNUCP
-	lbPO
-	lbJL
-	lbJV
-	lbJT
-	lbH2
-	lbH3
-	lbOddRI
-	lbEvenRI
-	lbExtPicCn
-	lbZWJBit     = 64
-	lbCPeaFWHBit = 128
-)
-
-// These constants define whether a given text may be broken into the next line.
-// If the break is optional (LineCanBreak), you may choose to break or not based
-// on your own criteria, for example, if the text has reached the available
-// width.
-const (
-	LineDontBreak = iota // You may not break the line here.
-	LineCanBreak         // You may or may not break the line here.
-	LineMustBreak        // You must break the line here.
-)
-
-// lbTransitions implements the line break parser's state transitions. It's
-// anologous to [grTransitions], see comments there for details.
-//
-// Unicode version 15.0.0.
-func lbTransitions(state, prop int) (newState, lineBreak, rule int) {
-	switch uint64(state) | uint64(prop)<<32 {
-	// LB4.
-	case lbBK | prAny<<32:
-		return lbAny, LineMustBreak, 40
-
-	// LB5.
-	case lbCR | prLF<<32:
-		return lbLF, LineDontBreak, 50
-	case lbCR | prAny<<32:
-		return lbAny, LineMustBreak, 50
-	case lbLF | prAny<<32:
-		return lbAny, LineMustBreak, 50
-	case lbNL | prAny<<32:
-		return lbAny, LineMustBreak, 50
-
-	// LB6.
-	case lbAny | prBK<<32:
-		return lbBK, LineDontBreak, 60
-	case lbAny | prCR<<32:
-		return lbCR, LineDontBreak, 60
-	case lbAny | prLF<<32:
-		return lbLF, LineDontBreak, 60
-	case lbAny | prNL<<32:
-		return lbNL, LineDontBreak, 60
-
-	// LB7.
-	case lbAny | prSP<<32:
-		return lbSP, LineDontBreak, 70
-	case lbAny | prZW<<32:
-		return lbZW, LineDontBreak, 70
-
-	// LB8.
-	case lbZW | prSP<<32:
-		return lbZW, LineDontBreak, 70
-	case lbZW | prAny<<32:
-		return lbAny, LineCanBreak, 80
-
-	// LB11.
-	case lbAny | prWJ<<32:
-		return lbWJ, LineDontBreak, 110
-	case lbWJ | prAny<<32:
-		return lbAny, LineDontBreak, 110
-
-	// LB12.
-	case lbAny | prGL<<32:
-		return lbGL, LineCanBreak, 310
-	case lbGL | prAny<<32:
-		return lbAny, LineDontBreak, 120
-
-	// LB13 (simple transitions).
-	case lbAny | prCL<<32:
-		return lbCL, LineCanBreak, 310
-	case lbAny | prCP<<32:
-		return lbCP, LineCanBreak, 310
-	case lbAny | prEX<<32:
-		return lbEX, LineDontBreak, 130
-	case lbAny | prIS<<32:
-		return lbIS, LineCanBreak, 310
-	case lbAny | prSY<<32:
-		return lbSY, LineCanBreak, 310
-
-	// LB14.
-	case lbAny | prOP<<32:
-		return lbOP, LineCanBreak, 310
-	case lbOP | prSP<<32:
-		return lbOP, LineDontBreak, 70
-	case lbOP | prAny<<32:
-		return lbAny, LineDontBreak, 140
-
-	// LB15.
-	case lbQU | prSP<<32:
-		return lbQUSP, LineDontBreak, 70
-	case lbQU | prOP<<32:
-		return lbOP, LineDontBreak, 150
-	case lbQUSP | prOP<<32:
-		return lbOP, LineDontBreak, 150
-
-	// LB16.
-	case lbCL | prSP<<32:
-		return lbCLCPSP, LineDontBreak, 70
-	case lbNUCL | prSP<<32:
-		return lbCLCPSP, LineDontBreak, 70
-	case lbCP | prSP<<32:
-		return lbCLCPSP, LineDontBreak, 70
-	case lbNUCP | prSP<<32:
-		return lbCLCPSP, LineDontBreak, 70
-	case lbCL | prNS<<32:
-		return lbNS, LineDontBreak, 160
-	case lbNUCL | prNS<<32:
-		return lbNS, LineDontBreak, 160
-	case lbCP | prNS<<32:
-		return lbNS, LineDontBreak, 160
-	case lbNUCP | prNS<<32:
-		return lbNS, LineDontBreak, 160
-	case lbCLCPSP | prNS<<32:
-		return lbNS, LineDontBreak, 160
-
-	// LB17.
-	case lbAny | prB2<<32:
-		return lbB2, LineCanBreak, 310
-	case lbB2 | prSP<<32:
-		return lbB2SP, LineDontBreak, 70
-	case lbB2 | prB2<<32:
-		return lbB2, LineDontBreak, 170
-	case lbB2SP | prB2<<32:
-		return lbB2, LineDontBreak, 170
-
-	// LB18.
-	case lbSP | prAny<<32:
-		return lbAny, LineCanBreak, 180
-	case lbQUSP | prAny<<32:
-		return lbAny, LineCanBreak, 180
-	case lbCLCPSP | prAny<<32:
-		return lbAny, LineCanBreak, 180
-	case lbB2SP | prAny<<32:
-		return lbAny, LineCanBreak, 180
-
-	// LB19.
-	case lbAny | prQU<<32:
-		return lbQU, LineDontBreak, 190
-	case lbQU | prAny<<32:
-		return lbAny, LineDontBreak, 190
-
-	// LB20.
-	case lbAny | prCB<<32:
-		return lbCB, LineCanBreak, 200
-	case lbCB | prAny<<32:
-		return lbAny, LineCanBreak, 200
-
-	// LB21.
-	case lbAny | prBA<<32:
-		return lbBA, LineDontBreak, 210
-	case lbAny | prHY<<32:
-		return lbHY, LineDontBreak, 210
-	case lbAny | prNS<<32:
-		return lbNS, LineDontBreak, 210
-	case lbAny | prBB<<32:
-		return lbBB, LineCanBreak, 310
-	case lbBB | prAny<<32:
-		return lbAny, LineDontBreak, 210
-
-	// LB21a.
-	case lbAny | prHL<<32:
-		return lbHL, LineCanBreak, 310
-	case lbHL | prHY<<32:
-		return lbLB21a, LineDontBreak, 210
-	case lbHL | prBA<<32:
-		return lbLB21a, LineDontBreak, 210
-	case lbLB21a | prAny<<32:
-		return lbAny, LineDontBreak, 211
-
-	// LB21b.
-	case lbSY | prHL<<32:
-		return lbHL, LineDontBreak, 212
-	case lbNUSY | prHL<<32:
-		return lbHL, LineDontBreak, 212
-
-	// LB22.
-	case lbAny | prIN<<32:
-		return lbAny, LineDontBreak, 220
-
-	// LB23.
-	case lbAny | prAL<<32:
-		return lbAL, LineCanBreak, 310
-	case lbAny | prNU<<32:
-		return lbNU, LineCanBreak, 310
-	case lbAL | prNU<<32:
-		return lbNU, LineDontBreak, 230
-	case lbHL | prNU<<32:
-		return lbNU, LineDontBreak, 230
-	case lbNU | prAL<<32:
-		return lbAL, LineDontBreak, 230
-	case lbNU | prHL<<32:
-		return lbHL, LineDontBreak, 230
-	case lbNUNU | prAL<<32:
-		return lbAL, LineDontBreak, 230
-	case lbNUNU | prHL<<32:
-		return lbHL, LineDontBreak, 230
-
-	// LB23a.
-	case lbAny | prPR<<32:
-		return lbPR, LineCanBreak, 310
-	case lbAny | prID<<32:
-		return lbIDEM, LineCanBreak, 310
-	case lbAny | prEB<<32:
-		return lbEB, LineCanBreak, 310
-	case lbAny | prEM<<32:
-		return lbIDEM, LineCanBreak, 310
-	case lbPR | prID<<32:
-		return lbIDEM, LineDontBreak, 231
-	case lbPR | prEB<<32:
-		return lbEB, LineDontBreak, 231
-	case lbPR | prEM<<32:
-		return lbIDEM, LineDontBreak, 231
-	case lbIDEM | prPO<<32:
-		return lbPO, LineDontBreak, 231
-	case lbEB | prPO<<32:
-		return lbPO, LineDontBreak, 231
-
-	// LB24.
-	case lbAny | prPO<<32:
-		return lbPO, LineCanBreak, 310
-	case lbPR | prAL<<32:
-		return lbAL, LineDontBreak, 240
-	case lbPR | prHL<<32:
-		return lbHL, LineDontBreak, 240
-	case lbPO | prAL<<32:
-		return lbAL, LineDontBreak, 240
-	case lbPO | prHL<<32:
-		return lbHL, LineDontBreak, 240
-	case lbAL | prPR<<32:
-		return lbPR, LineDontBreak, 240
-	case lbAL | prPO<<32:
-		return lbPO, LineDontBreak, 240
-	case lbHL | prPR<<32:
-		return lbPR, LineDontBreak, 240
-	case lbHL | prPO<<32:
-		return lbPO, LineDontBreak, 240
-
-	// LB25 (simple transitions).
-	case lbPR | prNU<<32:
-		return lbNU, LineDontBreak, 250
-	case lbPO | prNU<<32:
-		return lbNU, LineDontBreak, 250
-	case lbOP | prNU<<32:
-		return lbNU, LineDontBreak, 250
-	case lbHY | prNU<<32:
-		return lbNU, LineDontBreak, 250
-	case lbNU | prNU<<32:
-		return lbNUNU, LineDontBreak, 250
-	case lbNU | prSY<<32:
-		return lbNUSY, LineDontBreak, 250
-	case lbNU | prIS<<32:
-		return lbNUIS, LineDontBreak, 250
-	case lbNUNU | prNU<<32:
-		return lbNUNU, LineDontBreak, 250
-	case lbNUNU | prSY<<32:
-		return lbNUSY, LineDontBreak, 250
-	case lbNUNU | prIS<<32:
-		return lbNUIS, LineDontBreak, 250
-	case lbNUSY | prNU<<32:
-		return lbNUNU, LineDontBreak, 250
-	case lbNUSY | prSY<<32:
-		return lbNUSY, LineDontBreak, 250
-	case lbNUSY | prIS<<32:
-		return lbNUIS, LineDontBreak, 250
-	case lbNUIS | prNU<<32:
-		return lbNUNU, LineDontBreak, 250
-	case lbNUIS | prSY<<32:
-		return lbNUSY, LineDontBreak, 250
-	case lbNUIS | prIS<<32:
-		return lbNUIS, LineDontBreak, 250
-	case lbNU | prCL<<32:
-		return lbNUCL, LineDontBreak, 250
-	case lbNU | prCP<<32:
-		return lbNUCP, LineDontBreak, 250
-	case lbNUNU | prCL<<32:
-		return lbNUCL, LineDontBreak, 250
-	case lbNUNU | prCP<<32:
-		return lbNUCP, LineDontBreak, 250
-	case lbNUSY | prCL<<32:
-		return lbNUCL, LineDontBreak, 250
-	case lbNUSY | prCP<<32:
-		return lbNUCP, LineDontBreak, 250
-	case lbNUIS | prCL<<32:
-		return lbNUCL, LineDontBreak, 250
-	case lbNUIS | prCP<<32:
-		return lbNUCP, LineDontBreak, 250
-	case lbNU | prPO<<32:
-		return lbPO, LineDontBreak, 250
-	case lbNUNU | prPO<<32:
-		return lbPO, LineDontBreak, 250
-	case lbNUSY | prPO<<32:
-		return lbPO, LineDontBreak, 250
-	case lbNUIS | prPO<<32:
-		return lbPO, LineDontBreak, 250
-	case lbNUCL | prPO<<32:
-		return lbPO, LineDontBreak, 250
-	case lbNUCP | prPO<<32:
-		return lbPO, LineDontBreak, 250
-	case lbNU | prPR<<32:
-		return lbPR, LineDontBreak, 250
-	case lbNUNU | prPR<<32:
-		return lbPR, LineDontBreak, 250
-	case lbNUSY | prPR<<32:
-		return lbPR, LineDontBreak, 250
-	case lbNUIS | prPR<<32:
-		return lbPR, LineDontBreak, 250
-	case lbNUCL | prPR<<32:
-		return lbPR, LineDontBreak, 250
-	case lbNUCP | prPR<<32:
-		return lbPR, LineDontBreak, 250
-
-	// LB26.
-	case lbAny | prJL<<32:
-		return lbJL, LineCanBreak, 310
-	case lbAny | prJV<<32:
-		return lbJV, LineCanBreak, 310
-	case lbAny | prJT<<32:
-		return lbJT, LineCanBreak, 310
-	case lbAny | prH2<<32:
-		return lbH2, LineCanBreak, 310
-	case lbAny | prH3<<32:
-		return lbH3, LineCanBreak, 310
-	case lbJL | prJL<<32:
-		return lbJL, LineDontBreak, 260
-	case lbJL | prJV<<32:
-		return lbJV, LineDontBreak, 260
-	case lbJL | prH2<<32:
-		return lbH2, LineDontBreak, 260
-	case lbJL | prH3<<32:
-		return lbH3, LineDontBreak, 260
-	case lbJV | prJV<<32:
-		return lbJV, LineDontBreak, 260
-	case lbJV | prJT<<32:
-		return lbJT, LineDontBreak, 260
-	case lbH2 | prJV<<32:
-		return lbJV, LineDontBreak, 260
-	case lbH2 | prJT<<32:
-		return lbJT, LineDontBreak, 260
-	case lbJT | prJT<<32:
-		return lbJT, LineDontBreak, 260
-	case lbH3 | prJT<<32:
-		return lbJT, LineDontBreak, 260
-
-	// LB27.
-	case lbJL | prPO<<32:
-		return lbPO, LineDontBreak, 270
-	case lbJV | prPO<<32:
-		return lbPO, LineDontBreak, 270
-	case lbJT | prPO<<32:
-		return lbPO, LineDontBreak, 270
-	case lbH2 | prPO<<32:
-		return lbPO, LineDontBreak, 270
-	case lbH3 | prPO<<32:
-		return lbPO, LineDontBreak, 270
-	case lbPR | prJL<<32:
-		return lbJL, LineDontBreak, 270
-	case lbPR | prJV<<32:
-		return lbJV, LineDontBreak, 270
-	case lbPR | prJT<<32:
-		return lbJT, LineDontBreak, 270
-	case lbPR | prH2<<32:
-		return lbH2, LineDontBreak, 270
-	case lbPR | prH3<<32:
-		return lbH3, LineDontBreak, 270
-
-	// LB28.
-	case lbAL | prAL<<32:
-		return lbAL, LineDontBreak, 280
-	case lbAL | prHL<<32:
-		return lbHL, LineDontBreak, 280
-	case lbHL | prAL<<32:
-		return lbAL, LineDontBreak, 280
-	case lbHL | prHL<<32:
-		return lbHL, LineDontBreak, 280
-
-	// LB29.
-	case lbIS | prAL<<32:
-		return lbAL, LineDontBreak, 290
-	case lbIS | prHL<<32:
-		return lbHL, LineDontBreak, 290
-	case lbNUIS | prAL<<32:
-		return lbAL, LineDontBreak, 290
-	case lbNUIS | prHL<<32:
-		return lbHL, LineDontBreak, 290
-
-	default:
-		return -1, -1, -1
-	}
-}
-
-// transitionLineBreakState determines the new state of the line break parser
-// given the current state and the next code point. It also returns the type of
-// line break: LineDontBreak, LineCanBreak, or LineMustBreak. If more than one
-// code point is needed to determine the new state, the byte slice or the string
-// starting after rune "r" can be used (whichever is not nil or empty) for
-// further lookups.
-func transitionLineBreakState(state int, r rune, b []byte, str string) (newState int, lineBreak int) {
-	// Determine the property of the next character.
-	nextProperty, generalCategory := propertyLineBreak(r)
-
-	// Prepare.
-	var forceNoBreak, isCPeaFWH bool
-	if state >= 0 && state&lbCPeaFWHBit != 0 {
-		isCPeaFWH = true // LB30: CP but ea is not F, W, or H.
-		state = state &^ lbCPeaFWHBit
-	}
-	if state >= 0 && state&lbZWJBit != 0 {
-		state = state &^ lbZWJBit // Extract zero-width joiner bit.
-		forceNoBreak = true       // LB8a.
-	}
-
-	defer func() {
-		// Transition into LB30.
-		if newState == lbCP || newState == lbNUCP {
-			ea := propertyEastAsianWidth(r)
-			if ea != prF && ea != prW && ea != prH {
-				newState |= lbCPeaFWHBit
-			}
-		}
-
-		// Override break.
-		if forceNoBreak {
-			lineBreak = LineDontBreak
-		}
-	}()
-
-	// LB1.
-	if nextProperty == prAI || nextProperty == prSG || nextProperty == prXX {
-		nextProperty = prAL
-	} else if nextProperty == prSA {
-		if generalCategory == gcMn || generalCategory == gcMc {
-			nextProperty = prCM
-		} else {
-			nextProperty = prAL
-		}
-	} else if nextProperty == prCJ {
-		nextProperty = prNS
-	}
-
-	// Combining marks.
-	if nextProperty == prZWJ || nextProperty == prCM {
-		var bit int
-		if nextProperty == prZWJ {
-			bit = lbZWJBit
-		}
-		mustBreakState := state < 0 || state == lbBK || state == lbCR || state == lbLF || state == lbNL
-		if !mustBreakState && state != lbSP && state != lbZW && state != lbQUSP && state != lbCLCPSP && state != lbB2SP {
-			// LB9.
-			return state | bit, LineDontBreak
-		} else {
-			// LB10.
-			if mustBreakState {
-				return lbAL | bit, LineMustBreak
-			}
-			return lbAL | bit, LineCanBreak
-		}
-	}
-
-	// Find the applicable transition in the table.
-	var rule int
-	newState, lineBreak, rule = lbTransitions(state, nextProperty)
-	if newState < 0 {
-		// No specific transition found. Try the less specific ones.
-		anyPropProp, anyPropLineBreak, anyPropRule := lbTransitions(state, prAny)
-		anyStateProp, anyStateLineBreak, anyStateRule := lbTransitions(lbAny, nextProperty)
-		if anyPropProp >= 0 && anyStateProp >= 0 {
-			// Both apply. We'll use a mix (see comments for grTransitions).
-			newState, lineBreak, rule = anyStateProp, anyStateLineBreak, anyStateRule
-			if anyPropRule < anyStateRule {
-				lineBreak, rule = anyPropLineBreak, anyPropRule
-			}
-		} else if anyPropProp >= 0 {
-			// We only have a specific state.
-			newState, lineBreak, rule = anyPropProp, anyPropLineBreak, anyPropRule
-			// This branch will probably never be reached because okAnyState will
-			// always be true given the current transition map. But we keep it here
-			// for future modifications to the transition map where this may not be
-			// true anymore.
-		} else if anyStateProp >= 0 {
-			// We only have a specific property.
-			newState, lineBreak, rule = anyStateProp, anyStateLineBreak, anyStateRule
-		} else {
-			// No known transition. LB31: ALL ÷ ALL.
-			newState, lineBreak, rule = lbAny, LineCanBreak, 310
-		}
-	}
-
-	// LB12a.
-	if rule > 121 &&
-		nextProperty == prGL &&
-		(state != lbSP && state != lbBA && state != lbHY && state != lbLB21a && state != lbQUSP && state != lbCLCPSP && state != lbB2SP) {
-		return lbGL, LineDontBreak
-	}
-
-	// LB13.
-	if rule > 130 && state != lbNU && state != lbNUNU {
-		switch nextProperty {
-		case prCL:
-			return lbCL, LineDontBreak
-		case prCP:
-			return lbCP, LineDontBreak
-		case prIS:
-			return lbIS, LineDontBreak
-		case prSY:
-			return lbSY, LineDontBreak
-		}
-	}
-
-	// LB25 (look ahead).
-	if rule > 250 &&
-		(state == lbPR || state == lbPO) &&
-		nextProperty == prOP || nextProperty == prHY {
-		var r rune
-		if b != nil { // Byte slice version.
-			r, _ = utf8.DecodeRune(b)
-		} else { // String version.
-			r, _ = utf8.DecodeRuneInString(str)
-		}
-		if r != utf8.RuneError {
-			pr, _ := propertyLineBreak(r)
-			if pr == prNU {
-				return lbNU, LineDontBreak
-			}
-		}
-	}
-
-	// LB30 (part one).
-	if rule > 300 {
-		if (state == lbAL || state == lbHL || state == lbNU || state == lbNUNU) && nextProperty == prOP {
-			ea := propertyEastAsianWidth(r)
-			if ea != prF && ea != prW && ea != prH {
-				return lbOP, LineDontBreak
-			}
-		} else if isCPeaFWH {
-			switch nextProperty {
-			case prAL:
-				return lbAL, LineDontBreak
-			case prHL:
-				return lbHL, LineDontBreak
-			case prNU:
-				return lbNU, LineDontBreak
-			}
-		}
-	}
-
-	// LB30a.
-	if newState == lbAny && nextProperty == prRI {
-		if state != lbOddRI && state != lbEvenRI { // Includes state == -1.
-			// Transition into the first RI.
-			return lbOddRI, lineBreak
-		}
-		if state == lbOddRI {
-			// Don't break pairs of Regional Indicators.
-			return lbEvenRI, LineDontBreak
-		}
-		return lbOddRI, lineBreak
-	}
-
-	// LB30b.
-	if rule > 302 {
-		if nextProperty == prEM {
-			if state == lbEB || state == lbExtPicCn {
-				return prAny, LineDontBreak
-			}
-		}
-		graphemeProperty := propertyGraphemes(r)
-		if graphemeProperty == prExtendedPictographic && generalCategory == gcCn {
-			return lbExtPicCn, LineCanBreak
-		}
-	}
-
-	return
-}

+ 0 - 208
v2/vendor/github.com/rivo/uniseg/properties.go

@@ -1,208 +0,0 @@
-package uniseg
-
-// The Unicode properties as used in the various parsers. Only the ones needed
-// in the context of this package are included.
-const (
-	prXX      = 0    // Same as prAny.
-	prAny     = iota // prAny must be 0.
-	prPrepend        // Grapheme properties must come first, to reduce the number of bits stored in the state vector.
-	prCR
-	prLF
-	prControl
-	prExtend
-	prRegionalIndicator
-	prSpacingMark
-	prL
-	prV
-	prT
-	prLV
-	prLVT
-	prZWJ
-	prExtendedPictographic
-	prNewline
-	prWSegSpace
-	prDoubleQuote
-	prSingleQuote
-	prMidNumLet
-	prNumeric
-	prMidLetter
-	prMidNum
-	prExtendNumLet
-	prALetter
-	prFormat
-	prHebrewLetter
-	prKatakana
-	prSp
-	prSTerm
-	prClose
-	prSContinue
-	prATerm
-	prUpper
-	prLower
-	prSep
-	prOLetter
-	prCM
-	prBA
-	prBK
-	prSP
-	prEX
-	prQU
-	prAL
-	prPR
-	prPO
-	prOP
-	prCP
-	prIS
-	prHY
-	prSY
-	prNU
-	prCL
-	prNL
-	prGL
-	prAI
-	prBB
-	prHL
-	prSA
-	prJL
-	prJV
-	prJT
-	prNS
-	prZW
-	prB2
-	prIN
-	prWJ
-	prID
-	prEB
-	prCJ
-	prH2
-	prH3
-	prSG
-	prCB
-	prRI
-	prEM
-	prN
-	prNa
-	prA
-	prW
-	prH
-	prF
-	prEmojiPresentation
-)
-
-// Unicode General Categories. Only the ones needed in the context of this
-// package are included.
-const (
-	gcNone = iota // gcNone must be 0.
-	gcCc
-	gcZs
-	gcPo
-	gcSc
-	gcPs
-	gcPe
-	gcSm
-	gcPd
-	gcNd
-	gcLu
-	gcSk
-	gcPc
-	gcLl
-	gcSo
-	gcLo
-	gcPi
-	gcCf
-	gcNo
-	gcPf
-	gcLC
-	gcLm
-	gcMn
-	gcMe
-	gcMc
-	gcNl
-	gcZl
-	gcZp
-	gcCn
-	gcCs
-	gcCo
-)
-
-// Special code points.
-const (
-	vs15 = 0xfe0e // Variation Selector-15 (text presentation)
-	vs16 = 0xfe0f // Variation Selector-16 (emoji presentation)
-)
-
-// propertySearch performs a binary search on a property slice and returns the
-// entry whose range (start = first array element, end = second array element)
-// includes r, or an array of 0's if no such entry was found.
-func propertySearch[E interface{ [3]int | [4]int }](dictionary []E, r rune) (result E) {
-	// Run a binary search.
-	from := 0
-	to := len(dictionary)
-	for to > from {
-		middle := (from + to) / 2
-		cpRange := dictionary[middle]
-		if int(r) < cpRange[0] {
-			to = middle
-			continue
-		}
-		if int(r) > cpRange[1] {
-			from = middle + 1
-			continue
-		}
-		return cpRange
-	}
-	return
-}
-
-// property returns the Unicode property value (see constants above) of the
-// given code point.
-func property(dictionary [][3]int, r rune) int {
-	return propertySearch(dictionary, r)[2]
-}
-
-// propertyLineBreak returns the Unicode property value and General Category
-// (see constants above) of the given code point, as listed in the line break
-// code points table, while fast tracking ASCII digits and letters.
-func propertyLineBreak(r rune) (property, generalCategory int) {
-	if r >= 'a' && r <= 'z' {
-		return prAL, gcLl
-	}
-	if r >= 'A' && r <= 'Z' {
-		return prAL, gcLu
-	}
-	if r >= '0' && r <= '9' {
-		return prNU, gcNd
-	}
-	entry := propertySearch(lineBreakCodePoints, r)
-	return entry[2], entry[3]
-}
-
-// propertyGraphemes returns the Unicode grapheme cluster property value of the
-// given code point while fast tracking ASCII characters.
-func propertyGraphemes(r rune) int {
-	if r >= 0x20 && r <= 0x7e {
-		return prAny
-	}
-	if r == 0x0a {
-		return prLF
-	}
-	if r == 0x0d {
-		return prCR
-	}
-	if r >= 0 && r <= 0x1f || r == 0x7f {
-		return prControl
-	}
-	return property(graphemeCodePoints, r)
-}
-
-// propertyEastAsianWidth returns the Unicode East Asian Width property value of
-// the given code point while fast tracking ASCII characters.
-func propertyEastAsianWidth(r rune) int {
-	if r >= 0x20 && r <= 0x7e {
-		return prNa
-	}
-	if r >= 0 && r <= 0x1f || r == 0x7f {
-		return prN
-	}
-	return property(eastAsianWidth, r)
-}

+ 0 - 90
v2/vendor/github.com/rivo/uniseg/sentence.go

@@ -1,90 +0,0 @@
-package uniseg
-
-import "unicode/utf8"
-
-// FirstSentence returns the first sentence found in the given byte slice
-// according to the rules of [Unicode Standard Annex #29, Sentence Boundaries].
-// This function can be called continuously to extract all sentences from a byte
-// slice, as illustrated in the example below.
-//
-// If you don't know the current state, for example when calling the function
-// for the first time, you must pass -1. For consecutive calls, pass the state
-// and rest slice returned by the previous call.
-//
-// The "rest" slice is the sub-slice of the original byte slice "b" starting
-// after the last byte of the identified sentence. If the length of the "rest"
-// slice is 0, the entire byte slice "b" has been processed. The "sentence" byte
-// slice is the sub-slice of the input slice containing the identified sentence.
-//
-// Given an empty byte slice "b", the function returns nil values.
-//
-// [Unicode Standard Annex #29, Sentence Boundaries]: http://unicode.org/reports/tr29/#Sentence_Boundaries
-func FirstSentence(b []byte, state int) (sentence, rest []byte, newState int) {
-	// An empty byte slice returns nothing.
-	if len(b) == 0 {
-		return
-	}
-
-	// Extract the first rune.
-	r, length := utf8.DecodeRune(b)
-	if len(b) <= length { // If we're already past the end, there is nothing else to parse.
-		return b, nil, sbAny
-	}
-
-	// If we don't know the state, determine it now.
-	if state < 0 {
-		state, _ = transitionSentenceBreakState(state, r, b[length:], "")
-	}
-
-	// Transition until we find a boundary.
-	var boundary bool
-	for {
-		r, l := utf8.DecodeRune(b[length:])
-		state, boundary = transitionSentenceBreakState(state, r, b[length+l:], "")
-
-		if boundary {
-			return b[:length], b[length:], state
-		}
-
-		length += l
-		if len(b) <= length {
-			return b, nil, sbAny
-		}
-	}
-}
-
-// FirstSentenceInString is like [FirstSentence] but its input and outputs are
-// strings.
-func FirstSentenceInString(str string, state int) (sentence, rest string, newState int) {
-	// An empty byte slice returns nothing.
-	if len(str) == 0 {
-		return
-	}
-
-	// Extract the first rune.
-	r, length := utf8.DecodeRuneInString(str)
-	if len(str) <= length { // If we're already past the end, there is nothing else to parse.
-		return str, "", sbAny
-	}
-
-	// If we don't know the state, determine it now.
-	if state < 0 {
-		state, _ = transitionSentenceBreakState(state, r, nil, str[length:])
-	}
-
-	// Transition until we find a boundary.
-	var boundary bool
-	for {
-		r, l := utf8.DecodeRuneInString(str[length:])
-		state, boundary = transitionSentenceBreakState(state, r, nil, str[length+l:])
-
-		if boundary {
-			return str[:length], str[length:], state
-		}
-
-		length += l
-		if len(str) <= length {
-			return str, "", sbAny
-		}
-	}
-}

+ 0 - 2845
v2/vendor/github.com/rivo/uniseg/sentenceproperties.go

@@ -1,2845 +0,0 @@
-// Code generated via go generate from gen_properties.go. DO NOT EDIT.
-
-package uniseg
-
-// sentenceBreakCodePoints are taken from
-// https://www.unicode.org/Public/15.0.0/ucd/auxiliary/SentenceBreakProperty.txt
-// and
-// https://unicode.org/Public/15.0.0/ucd/emoji/emoji-data.txt
-// ("Extended_Pictographic" only)
-// on September 5, 2023. See https://www.unicode.org/license.html for the Unicode
-// license agreement.
-var sentenceBreakCodePoints = [][3]int{
-	{0x0009, 0x0009, prSp},        // Cc       <control-0009>
-	{0x000A, 0x000A, prLF},        // Cc       <control-000A>
-	{0x000B, 0x000C, prSp},        // Cc   [2] <control-000B>..<control-000C>
-	{0x000D, 0x000D, prCR},        // Cc       <control-000D>
-	{0x0020, 0x0020, prSp},        // Zs       SPACE
-	{0x0021, 0x0021, prSTerm},     // Po       EXCLAMATION MARK
-	{0x0022, 0x0022, prClose},     // Po       QUOTATION MARK
-	{0x0027, 0x0027, prClose},     // Po       APOSTROPHE
-	{0x0028, 0x0028, prClose},     // Ps       LEFT PARENTHESIS
-	{0x0029, 0x0029, prClose},     // Pe       RIGHT PARENTHESIS
-	{0x002C, 0x002C, prSContinue}, // Po       COMMA
-	{0x002D, 0x002D, prSContinue}, // Pd       HYPHEN-MINUS
-	{0x002E, 0x002E, prATerm},     // Po       FULL STOP
-	{0x0030, 0x0039, prNumeric},   // Nd  [10] DIGIT ZERO..DIGIT NINE
-	{0x003A, 0x003A, prSContinue}, // Po       COLON
-	{0x003F, 0x003F, prSTerm},     // Po       QUESTION MARK
-	{0x0041, 0x005A, prUpper},     // L&  [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z
-	{0x005B, 0x005B, prClose},     // Ps       LEFT SQUARE BRACKET
-	{0x005D, 0x005D, prClose},     // Pe       RIGHT SQUARE BRACKET
-	{0x0061, 0x007A, prLower},     // L&  [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z
-	{0x007B, 0x007B, prClose},     // Ps       LEFT CURLY BRACKET
-	{0x007D, 0x007D, prClose},     // Pe       RIGHT CURLY BRACKET
-	{0x0085, 0x0085, prSep},       // Cc       <control-0085>
-	{0x00A0, 0x00A0, prSp},        // Zs       NO-BREAK SPACE
-	{0x00AA, 0x00AA, prLower},     // Lo       FEMININE ORDINAL INDICATOR
-	{0x00AB, 0x00AB, prClose},     // Pi       LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-	{0x00AD, 0x00AD, prFormat},    // Cf       SOFT HYPHEN
-	{0x00B5, 0x00B5, prLower},     // L&       MICRO SIGN
-	{0x00BA, 0x00BA, prLower},     // Lo       MASCULINE ORDINAL INDICATOR
-	{0x00BB, 0x00BB, prClose},     // Pf       RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-	{0x00C0, 0x00D6, prUpper},     // L&  [23] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER O WITH DIAERESIS
-	{0x00D8, 0x00DE, prUpper},     // L&   [7] LATIN CAPITAL LETTER O WITH STROKE..LATIN CAPITAL LETTER THORN
-	{0x00DF, 0x00F6, prLower},     // L&  [24] LATIN SMALL LETTER SHARP S..LATIN SMALL LETTER O WITH DIAERESIS
-	{0x00F8, 0x00FF, prLower},     // L&   [8] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER Y WITH DIAERESIS
-	{0x0100, 0x0100, prUpper},     // L&       LATIN CAPITAL LETTER A WITH MACRON
-	{0x0101, 0x0101, prLower},     // L&       LATIN SMALL LETTER A WITH MACRON
-	{0x0102, 0x0102, prUpper},     // L&       LATIN CAPITAL LETTER A WITH BREVE
-	{0x0103, 0x0103, prLower},     // L&       LATIN SMALL LETTER A WITH BREVE
-	{0x0104, 0x0104, prUpper},     // L&       LATIN CAPITAL LETTER A WITH OGONEK
-	{0x0105, 0x0105, prLower},     // L&       LATIN SMALL LETTER A WITH OGONEK
-	{0x0106, 0x0106, prUpper},     // L&       LATIN CAPITAL LETTER C WITH ACUTE
-	{0x0107, 0x0107, prLower},     // L&       LATIN SMALL LETTER C WITH ACUTE
-	{0x0108, 0x0108, prUpper},     // L&       LATIN CAPITAL LETTER C WITH CIRCUMFLEX
-	{0x0109, 0x0109, prLower},     // L&       LATIN SMALL LETTER C WITH CIRCUMFLEX
-	{0x010A, 0x010A, prUpper},     // L&       LATIN CAPITAL LETTER C WITH DOT ABOVE
-	{0x010B, 0x010B, prLower},     // L&       LATIN SMALL LETTER C WITH DOT ABOVE
-	{0x010C, 0x010C, prUpper},     // L&       LATIN CAPITAL LETTER C WITH CARON
-	{0x010D, 0x010D, prLower},     // L&       LATIN SMALL LETTER C WITH CARON
-	{0x010E, 0x010E, prUpper},     // L&       LATIN CAPITAL LETTER D WITH CARON
-	{0x010F, 0x010F, prLower},     // L&       LATIN SMALL LETTER D WITH CARON
-	{0x0110, 0x0110, prUpper},     // L&       LATIN CAPITAL LETTER D WITH STROKE
-	{0x0111, 0x0111, prLower},     // L&       LATIN SMALL LETTER D WITH STROKE
-	{0x0112, 0x0112, prUpper},     // L&       LATIN CAPITAL LETTER E WITH MACRON
-	{0x0113, 0x0113, prLower},     // L&       LATIN SMALL LETTER E WITH MACRON
-	{0x0114, 0x0114, prUpper},     // L&       LATIN CAPITAL LETTER E WITH BREVE
-	{0x0115, 0x0115, prLower},     // L&       LATIN SMALL LETTER E WITH BREVE
-	{0x0116, 0x0116, prUpper},     // L&       LATIN CAPITAL LETTER E WITH DOT ABOVE
-	{0x0117, 0x0117, prLower},     // L&       LATIN SMALL LETTER E WITH DOT ABOVE
-	{0x0118, 0x0118, prUpper},     // L&       LATIN CAPITAL LETTER E WITH OGONEK
-	{0x0119, 0x0119, prLower},     // L&       LATIN SMALL LETTER E WITH OGONEK
-	{0x011A, 0x011A, prUpper},     // L&       LATIN CAPITAL LETTER E WITH CARON
-	{0x011B, 0x011B, prLower},     // L&       LATIN SMALL LETTER E WITH CARON
-	{0x011C, 0x011C, prUpper},     // L&       LATIN CAPITAL LETTER G WITH CIRCUMFLEX
-	{0x011D, 0x011D, prLower},     // L&       LATIN SMALL LETTER G WITH CIRCUMFLEX
-	{0x011E, 0x011E, prUpper},     // L&       LATIN CAPITAL LETTER G WITH BREVE
-	{0x011F, 0x011F, prLower},     // L&       LATIN SMALL LETTER G WITH BREVE
-	{0x0120, 0x0120, prUpper},     // L&       LATIN CAPITAL LETTER G WITH DOT ABOVE
-	{0x0121, 0x0121, prLower},     // L&       LATIN SMALL LETTER G WITH DOT ABOVE
-	{0x0122, 0x0122, prUpper},     // L&       LATIN CAPITAL LETTER G WITH CEDILLA
-	{0x0123, 0x0123, prLower},     // L&       LATIN SMALL LETTER G WITH CEDILLA
-	{0x0124, 0x0124, prUpper},     // L&       LATIN CAPITAL LETTER H WITH CIRCUMFLEX
-	{0x0125, 0x0125, prLower},     // L&       LATIN SMALL LETTER H WITH CIRCUMFLEX
-	{0x0126, 0x0126, prUpper},     // L&       LATIN CAPITAL LETTER H WITH STROKE
-	{0x0127, 0x0127, prLower},     // L&       LATIN SMALL LETTER H WITH STROKE
-	{0x0128, 0x0128, prUpper},     // L&       LATIN CAPITAL LETTER I WITH TILDE
-	{0x0129, 0x0129, prLower},     // L&       LATIN SMALL LETTER I WITH TILDE
-	{0x012A, 0x012A, prUpper},     // L&       LATIN CAPITAL LETTER I WITH MACRON
-	{0x012B, 0x012B, prLower},     // L&       LATIN SMALL LETTER I WITH MACRON
-	{0x012C, 0x012C, prUpper},     // L&       LATIN CAPITAL LETTER I WITH BREVE
-	{0x012D, 0x012D, prLower},     // L&       LATIN SMALL LETTER I WITH BREVE
-	{0x012E, 0x012E, prUpper},     // L&       LATIN CAPITAL LETTER I WITH OGONEK
-	{0x012F, 0x012F, prLower},     // L&       LATIN SMALL LETTER I WITH OGONEK
-	{0x0130, 0x0130, prUpper},     // L&       LATIN CAPITAL LETTER I WITH DOT ABOVE
-	{0x0131, 0x0131, prLower},     // L&       LATIN SMALL LETTER DOTLESS I
-	{0x0132, 0x0132, prUpper},     // L&       LATIN CAPITAL LIGATURE IJ
-	{0x0133, 0x0133, prLower},     // L&       LATIN SMALL LIGATURE IJ
-	{0x0134, 0x0134, prUpper},     // L&       LATIN CAPITAL LETTER J WITH CIRCUMFLEX
-	{0x0135, 0x0135, prLower},     // L&       LATIN SMALL LETTER J WITH CIRCUMFLEX
-	{0x0136, 0x0136, prUpper},     // L&       LATIN CAPITAL LETTER K WITH CEDILLA
-	{0x0137, 0x0138, prLower},     // L&   [2] LATIN SMALL LETTER K WITH CEDILLA..LATIN SMALL LETTER KRA
-	{0x0139, 0x0139, prUpper},     // L&       LATIN CAPITAL LETTER L WITH ACUTE
-	{0x013A, 0x013A, prLower},     // L&       LATIN SMALL LETTER L WITH ACUTE
-	{0x013B, 0x013B, prUpper},     // L&       LATIN CAPITAL LETTER L WITH CEDILLA
-	{0x013C, 0x013C, prLower},     // L&       LATIN SMALL LETTER L WITH CEDILLA
-	{0x013D, 0x013D, prUpper},     // L&       LATIN CAPITAL LETTER L WITH CARON
-	{0x013E, 0x013E, prLower},     // L&       LATIN SMALL LETTER L WITH CARON
-	{0x013F, 0x013F, prUpper},     // L&       LATIN CAPITAL LETTER L WITH MIDDLE DOT
-	{0x0140, 0x0140, prLower},     // L&       LATIN SMALL LETTER L WITH MIDDLE DOT
-	{0x0141, 0x0141, prUpper},     // L&       LATIN CAPITAL LETTER L WITH STROKE
-	{0x0142, 0x0142, prLower},     // L&       LATIN SMALL LETTER L WITH STROKE
-	{0x0143, 0x0143, prUpper},     // L&       LATIN CAPITAL LETTER N WITH ACUTE
-	{0x0144, 0x0144, prLower},     // L&       LATIN SMALL LETTER N WITH ACUTE
-	{0x0145, 0x0145, prUpper},     // L&       LATIN CAPITAL LETTER N WITH CEDILLA
-	{0x0146, 0x0146, prLower},     // L&       LATIN SMALL LETTER N WITH CEDILLA
-	{0x0147, 0x0147, prUpper},     // L&       LATIN CAPITAL LETTER N WITH CARON
-	{0x0148, 0x0149, prLower},     // L&   [2] LATIN SMALL LETTER N WITH CARON..LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
-	{0x014A, 0x014A, prUpper},     // L&       LATIN CAPITAL LETTER ENG
-	{0x014B, 0x014B, prLower},     // L&       LATIN SMALL LETTER ENG
-	{0x014C, 0x014C, prUpper},     // L&       LATIN CAPITAL LETTER O WITH MACRON
-	{0x014D, 0x014D, prLower},     // L&       LATIN SMALL LETTER O WITH MACRON
-	{0x014E, 0x014E, prUpper},     // L&       LATIN CAPITAL LETTER O WITH BREVE
-	{0x014F, 0x014F, prLower},     // L&       LATIN SMALL LETTER O WITH BREVE
-	{0x0150, 0x0150, prUpper},     // L&       LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
-	{0x0151, 0x0151, prLower},     // L&       LATIN SMALL LETTER O WITH DOUBLE ACUTE
-	{0x0152, 0x0152, prUpper},     // L&       LATIN CAPITAL LIGATURE OE
-	{0x0153, 0x0153, prLower},     // L&       LATIN SMALL LIGATURE OE
-	{0x0154, 0x0154, prUpper},     // L&       LATIN CAPITAL LETTER R WITH ACUTE
-	{0x0155, 0x0155, prLower},     // L&       LATIN SMALL LETTER R WITH ACUTE
-	{0x0156, 0x0156, prUpper},     // L&       LATIN CAPITAL LETTER R WITH CEDILLA
-	{0x0157, 0x0157, prLower},     // L&       LATIN SMALL LETTER R WITH CEDILLA
-	{0x0158, 0x0158, prUpper},     // L&       LATIN CAPITAL LETTER R WITH CARON
-	{0x0159, 0x0159, prLower},     // L&       LATIN SMALL LETTER R WITH CARON
-	{0x015A, 0x015A, prUpper},     // L&       LATIN CAPITAL LETTER S WITH ACUTE
-	{0x015B, 0x015B, prLower},     // L&       LATIN SMALL LETTER S WITH ACUTE
-	{0x015C, 0x015C, prUpper},     // L&       LATIN CAPITAL LETTER S WITH CIRCUMFLEX
-	{0x015D, 0x015D, prLower},     // L&       LATIN SMALL LETTER S WITH CIRCUMFLEX
-	{0x015E, 0x015E, prUpper},     // L&       LATIN CAPITAL LETTER S WITH CEDILLA
-	{0x015F, 0x015F, prLower},     // L&       LATIN SMALL LETTER S WITH CEDILLA
-	{0x0160, 0x0160, prUpper},     // L&       LATIN CAPITAL LETTER S WITH CARON
-	{0x0161, 0x0161, prLower},     // L&       LATIN SMALL LETTER S WITH CARON
-	{0x0162, 0x0162, prUpper},     // L&       LATIN CAPITAL LETTER T WITH CEDILLA
-	{0x0163, 0x0163, prLower},     // L&       LATIN SMALL LETTER T WITH CEDILLA
-	{0x0164, 0x0164, prUpper},     // L&       LATIN CAPITAL LETTER T WITH CARON
-	{0x0165, 0x0165, prLower},     // L&       LATIN SMALL LETTER T WITH CARON
-	{0x0166, 0x0166, prUpper},     // L&       LATIN CAPITAL LETTER T WITH STROKE
-	{0x0167, 0x0167, prLower},     // L&       LATIN SMALL LETTER T WITH STROKE
-	{0x0168, 0x0168, prUpper},     // L&       LATIN CAPITAL LETTER U WITH TILDE
-	{0x0169, 0x0169, prLower},     // L&       LATIN SMALL LETTER U WITH TILDE
-	{0x016A, 0x016A, prUpper},     // L&       LATIN CAPITAL LETTER U WITH MACRON
-	{0x016B, 0x016B, prLower},     // L&       LATIN SMALL LETTER U WITH MACRON
-	{0x016C, 0x016C, prUpper},     // L&       LATIN CAPITAL LETTER U WITH BREVE
-	{0x016D, 0x016D, prLower},     // L&       LATIN SMALL LETTER U WITH BREVE
-	{0x016E, 0x016E, prUpper},     // L&       LATIN CAPITAL LETTER U WITH RING ABOVE
-	{0x016F, 0x016F, prLower},     // L&       LATIN SMALL LETTER U WITH RING ABOVE
-	{0x0170, 0x0170, prUpper},     // L&       LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
-	{0x0171, 0x0171, prLower},     // L&       LATIN SMALL LETTER U WITH DOUBLE ACUTE
-	{0x0172, 0x0172, prUpper},     // L&       LATIN CAPITAL LETTER U WITH OGONEK
-	{0x0173, 0x0173, prLower},     // L&       LATIN SMALL LETTER U WITH OGONEK
-	{0x0174, 0x0174, prUpper},     // L&       LATIN CAPITAL LETTER W WITH CIRCUMFLEX
-	{0x0175, 0x0175, prLower},     // L&       LATIN SMALL LETTER W WITH CIRCUMFLEX
-	{0x0176, 0x0176, prUpper},     // L&       LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
-	{0x0177, 0x0177, prLower},     // L&       LATIN SMALL LETTER Y WITH CIRCUMFLEX
-	{0x0178, 0x0179, prUpper},     // L&   [2] LATIN CAPITAL LETTER Y WITH DIAERESIS..LATIN CAPITAL LETTER Z WITH ACUTE
-	{0x017A, 0x017A, prLower},     // L&       LATIN SMALL LETTER Z WITH ACUTE
-	{0x017B, 0x017B, prUpper},     // L&       LATIN CAPITAL LETTER Z WITH DOT ABOVE
-	{0x017C, 0x017C, prLower},     // L&       LATIN SMALL LETTER Z WITH DOT ABOVE
-	{0x017D, 0x017D, prUpper},     // L&       LATIN CAPITAL LETTER Z WITH CARON
-	{0x017E, 0x0180, prLower},     // L&   [3] LATIN SMALL LETTER Z WITH CARON..LATIN SMALL LETTER B WITH STROKE
-	{0x0181, 0x0182, prUpper},     // L&   [2] LATIN CAPITAL LETTER B WITH HOOK..LATIN CAPITAL LETTER B WITH TOPBAR
-	{0x0183, 0x0183, prLower},     // L&       LATIN SMALL LETTER B WITH TOPBAR
-	{0x0184, 0x0184, prUpper},     // L&       LATIN CAPITAL LETTER TONE SIX
-	{0x0185, 0x0185, prLower},     // L&       LATIN SMALL LETTER TONE SIX
-	{0x0186, 0x0187, prUpper},     // L&   [2] LATIN CAPITAL LETTER OPEN O..LATIN CAPITAL LETTER C WITH HOOK
-	{0x0188, 0x0188, prLower},     // L&       LATIN SMALL LETTER C WITH HOOK
-	{0x0189, 0x018B, prUpper},     // L&   [3] LATIN CAPITAL LETTER AFRICAN D..LATIN CAPITAL LETTER D WITH TOPBAR
-	{0x018C, 0x018D, prLower},     // L&   [2] LATIN SMALL LETTER D WITH TOPBAR..LATIN SMALL LETTER TURNED DELTA
-	{0x018E, 0x0191, prUpper},     // L&   [4] LATIN CAPITAL LETTER REVERSED E..LATIN CAPITAL LETTER F WITH HOOK
-	{0x0192, 0x0192, prLower},     // L&       LATIN SMALL LETTER F WITH HOOK
-	{0x0193, 0x0194, prUpper},     // L&   [2] LATIN CAPITAL LETTER G WITH HOOK..LATIN CAPITAL LETTER GAMMA
-	{0x0195, 0x0195, prLower},     // L&       LATIN SMALL LETTER HV
-	{0x0196, 0x0198, prUpper},     // L&   [3] LATIN CAPITAL LETTER IOTA..LATIN CAPITAL LETTER K WITH HOOK
-	{0x0199, 0x019B, prLower},     // L&   [3] LATIN SMALL LETTER K WITH HOOK..LATIN SMALL LETTER LAMBDA WITH STROKE
-	{0x019C, 0x019D, prUpper},     // L&   [2] LATIN CAPITAL LETTER TURNED M..LATIN CAPITAL LETTER N WITH LEFT HOOK
-	{0x019E, 0x019E, prLower},     // L&       LATIN SMALL LETTER N WITH LONG RIGHT LEG
-	{0x019F, 0x01A0, prUpper},     // L&   [2] LATIN CAPITAL LETTER O WITH MIDDLE TILDE..LATIN CAPITAL LETTER O WITH HORN
-	{0x01A1, 0x01A1, prLower},     // L&       LATIN SMALL LETTER O WITH HORN
-	{0x01A2, 0x01A2, prUpper},     // L&       LATIN CAPITAL LETTER OI
-	{0x01A3, 0x01A3, prLower},     // L&       LATIN SMALL LETTER OI
-	{0x01A4, 0x01A4, prUpper},     // L&       LATIN CAPITAL LETTER P WITH HOOK
-	{0x01A5, 0x01A5, prLower},     // L&       LATIN SMALL LETTER P WITH HOOK
-	{0x01A6, 0x01A7, prUpper},     // L&   [2] LATIN LETTER YR..LATIN CAPITAL LETTER TONE TWO
-	{0x01A8, 0x01A8, prLower},     // L&       LATIN SMALL LETTER TONE TWO
-	{0x01A9, 0x01A9, prUpper},     // L&       LATIN CAPITAL LETTER ESH
-	{0x01AA, 0x01AB, prLower},     // L&   [2] LATIN LETTER REVERSED ESH LOOP..LATIN SMALL LETTER T WITH PALATAL HOOK
-	{0x01AC, 0x01AC, prUpper},     // L&       LATIN CAPITAL LETTER T WITH HOOK
-	{0x01AD, 0x01AD, prLower},     // L&       LATIN SMALL LETTER T WITH HOOK
-	{0x01AE, 0x01AF, prUpper},     // L&   [2] LATIN CAPITAL LETTER T WITH RETROFLEX HOOK..LATIN CAPITAL LETTER U WITH HORN
-	{0x01B0, 0x01B0, prLower},     // L&       LATIN SMALL LETTER U WITH HORN
-	{0x01B1, 0x01B3, prUpper},     // L&   [3] LATIN CAPITAL LETTER UPSILON..LATIN CAPITAL LETTER Y WITH HOOK
-	{0x01B4, 0x01B4, prLower},     // L&       LATIN SMALL LETTER Y WITH HOOK
-	{0x01B5, 0x01B5, prUpper},     // L&       LATIN CAPITAL LETTER Z WITH STROKE
-	{0x01B6, 0x01B6, prLower},     // L&       LATIN SMALL LETTER Z WITH STROKE
-	{0x01B7, 0x01B8, prUpper},     // L&   [2] LATIN CAPITAL LETTER EZH..LATIN CAPITAL LETTER EZH REVERSED
-	{0x01B9, 0x01BA, prLower},     // L&   [2] LATIN SMALL LETTER EZH REVERSED..LATIN SMALL LETTER EZH WITH TAIL
-	{0x01BB, 0x01BB, prOLetter},   // Lo       LATIN LETTER TWO WITH STROKE
-	{0x01BC, 0x01BC, prUpper},     // L&       LATIN CAPITAL LETTER TONE FIVE
-	{0x01BD, 0x01BF, prLower},     // L&   [3] LATIN SMALL LETTER TONE FIVE..LATIN LETTER WYNN
-	{0x01C0, 0x01C3, prOLetter},   // Lo   [4] LATIN LETTER DENTAL CLICK..LATIN LETTER RETROFLEX CLICK
-	{0x01C4, 0x01C5, prUpper},     // L&   [2] LATIN CAPITAL LETTER DZ WITH CARON..LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON
-	{0x01C6, 0x01C6, prLower},     // L&       LATIN SMALL LETTER DZ WITH CARON
-	{0x01C7, 0x01C8, prUpper},     // L&   [2] LATIN CAPITAL LETTER LJ..LATIN CAPITAL LETTER L WITH SMALL LETTER J
-	{0x01C9, 0x01C9, prLower},     // L&       LATIN SMALL LETTER LJ
-	{0x01CA, 0x01CB, prUpper},     // L&   [2] LATIN CAPITAL LETTER NJ..LATIN CAPITAL LETTER N WITH SMALL LETTER J
-	{0x01CC, 0x01CC, prLower},     // L&       LATIN SMALL LETTER NJ
-	{0x01CD, 0x01CD, prUpper},     // L&       LATIN CAPITAL LETTER A WITH CARON
-	{0x01CE, 0x01CE, prLower},     // L&       LATIN SMALL LETTER A WITH CARON
-	{0x01CF, 0x01CF, prUpper},     // L&       LATIN CAPITAL LETTER I WITH CARON
-	{0x01D0, 0x01D0, prLower},     // L&       LATIN SMALL LETTER I WITH CARON
-	{0x01D1, 0x01D1, prUpper},     // L&       LATIN CAPITAL LETTER O WITH CARON
-	{0x01D2, 0x01D2, prLower},     // L&       LATIN SMALL LETTER O WITH CARON
-	{0x01D3, 0x01D3, prUpper},     // L&       LATIN CAPITAL LETTER U WITH CARON
-	{0x01D4, 0x01D4, prLower},     // L&       LATIN SMALL LETTER U WITH CARON
-	{0x01D5, 0x01D5, prUpper},     // L&       LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
-	{0x01D6, 0x01D6, prLower},     // L&       LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
-	{0x01D7, 0x01D7, prUpper},     // L&       LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
-	{0x01D8, 0x01D8, prLower},     // L&       LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
-	{0x01D9, 0x01D9, prUpper},     // L&       LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
-	{0x01DA, 0x01DA, prLower},     // L&       LATIN SMALL LETTER U WITH DIAERESIS AND CARON
-	{0x01DB, 0x01DB, prUpper},     // L&       LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
-	{0x01DC, 0x01DD, prLower},     // L&   [2] LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE..LATIN SMALL LETTER TURNED E
-	{0x01DE, 0x01DE, prUpper},     // L&       LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
-	{0x01DF, 0x01DF, prLower},     // L&       LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
-	{0x01E0, 0x01E0, prUpper},     // L&       LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
-	{0x01E1, 0x01E1, prLower},     // L&       LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
-	{0x01E2, 0x01E2, prUpper},     // L&       LATIN CAPITAL LETTER AE WITH MACRON
-	{0x01E3, 0x01E3, prLower},     // L&       LATIN SMALL LETTER AE WITH MACRON
-	{0x01E4, 0x01E4, prUpper},     // L&       LATIN CAPITAL LETTER G WITH STROKE
-	{0x01E5, 0x01E5, prLower},     // L&       LATIN SMALL LETTER G WITH STROKE
-	{0x01E6, 0x01E6, prUpper},     // L&       LATIN CAPITAL LETTER G WITH CARON
-	{0x01E7, 0x01E7, prLower},     // L&       LATIN SMALL LETTER G WITH CARON
-	{0x01E8, 0x01E8, prUpper},     // L&       LATIN CAPITAL LETTER K WITH CARON
-	{0x01E9, 0x01E9, prLower},     // L&       LATIN SMALL LETTER K WITH CARON
-	{0x01EA, 0x01EA, prUpper},     // L&       LATIN CAPITAL LETTER O WITH OGONEK
-	{0x01EB, 0x01EB, prLower},     // L&       LATIN SMALL LETTER O WITH OGONEK
-	{0x01EC, 0x01EC, prUpper},     // L&       LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
-	{0x01ED, 0x01ED, prLower},     // L&       LATIN SMALL LETTER O WITH OGONEK AND MACRON
-	{0x01EE, 0x01EE, prUpper},     // L&       LATIN CAPITAL LETTER EZH WITH CARON
-	{0x01EF, 0x01F0, prLower},     // L&   [2] LATIN SMALL LETTER EZH WITH CARON..LATIN SMALL LETTER J WITH CARON
-	{0x01F1, 0x01F2, prUpper},     // L&   [2] LATIN CAPITAL LETTER DZ..LATIN CAPITAL LETTER D WITH SMALL LETTER Z
-	{0x01F3, 0x01F3, prLower},     // L&       LATIN SMALL LETTER DZ
-	{0x01F4, 0x01F4, prUpper},     // L&       LATIN CAPITAL LETTER G WITH ACUTE
-	{0x01F5, 0x01F5, prLower},     // L&       LATIN SMALL LETTER G WITH ACUTE
-	{0x01F6, 0x01F8, prUpper},     // L&   [3] LATIN CAPITAL LETTER HWAIR..LATIN CAPITAL LETTER N WITH GRAVE
-	{0x01F9, 0x01F9, prLower},     // L&       LATIN SMALL LETTER N WITH GRAVE
-	{0x01FA, 0x01FA, prUpper},     // L&       LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
-	{0x01FB, 0x01FB, prLower},     // L&       LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
-	{0x01FC, 0x01FC, prUpper},     // L&       LATIN CAPITAL LETTER AE WITH ACUTE
-	{0x01FD, 0x01FD, prLower},     // L&       LATIN SMALL LETTER AE WITH ACUTE
-	{0x01FE, 0x01FE, prUpper},     // L&       LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
-	{0x01FF, 0x01FF, prLower},     // L&       LATIN SMALL LETTER O WITH STROKE AND ACUTE
-	{0x0200, 0x0200, prUpper},     // L&       LATIN CAPITAL LETTER A WITH DOUBLE GRAVE
-	{0x0201, 0x0201, prLower},     // L&       LATIN SMALL LETTER A WITH DOUBLE GRAVE
-	{0x0202, 0x0202, prUpper},     // L&       LATIN CAPITAL LETTER A WITH INVERTED BREVE
-	{0x0203, 0x0203, prLower},     // L&       LATIN SMALL LETTER A WITH INVERTED BREVE
-	{0x0204, 0x0204, prUpper},     // L&       LATIN CAPITAL LETTER E WITH DOUBLE GRAVE
-	{0x0205, 0x0205, prLower},     // L&       LATIN SMALL LETTER E WITH DOUBLE GRAVE
-	{0x0206, 0x0206, prUpper},     // L&       LATIN CAPITAL LETTER E WITH INVERTED BREVE
-	{0x0207, 0x0207, prLower},     // L&       LATIN SMALL LETTER E WITH INVERTED BREVE
-	{0x0208, 0x0208, prUpper},     // L&       LATIN CAPITAL LETTER I WITH DOUBLE GRAVE
-	{0x0209, 0x0209, prLower},     // L&       LATIN SMALL LETTER I WITH DOUBLE GRAVE
-	{0x020A, 0x020A, prUpper},     // L&       LATIN CAPITAL LETTER I WITH INVERTED BREVE
-	{0x020B, 0x020B, prLower},     // L&       LATIN SMALL LETTER I WITH INVERTED BREVE
-	{0x020C, 0x020C, prUpper},     // L&       LATIN CAPITAL LETTER O WITH DOUBLE GRAVE
-	{0x020D, 0x020D, prLower},     // L&       LATIN SMALL LETTER O WITH DOUBLE GRAVE
-	{0x020E, 0x020E, prUpper},     // L&       LATIN CAPITAL LETTER O WITH INVERTED BREVE
-	{0x020F, 0x020F, prLower},     // L&       LATIN SMALL LETTER O WITH INVERTED BREVE
-	{0x0210, 0x0210, prUpper},     // L&       LATIN CAPITAL LETTER R WITH DOUBLE GRAVE
-	{0x0211, 0x0211, prLower},     // L&       LATIN SMALL LETTER R WITH DOUBLE GRAVE
-	{0x0212, 0x0212, prUpper},     // L&       LATIN CAPITAL LETTER R WITH INVERTED BREVE
-	{0x0213, 0x0213, prLower},     // L&       LATIN SMALL LETTER R WITH INVERTED BREVE
-	{0x0214, 0x0214, prUpper},     // L&       LATIN CAPITAL LETTER U WITH DOUBLE GRAVE
-	{0x0215, 0x0215, prLower},     // L&       LATIN SMALL LETTER U WITH DOUBLE GRAVE
-	{0x0216, 0x0216, prUpper},     // L&       LATIN CAPITAL LETTER U WITH INVERTED BREVE
-	{0x0217, 0x0217, prLower},     // L&       LATIN SMALL LETTER U WITH INVERTED BREVE
-	{0x0218, 0x0218, prUpper},     // L&       LATIN CAPITAL LETTER S WITH COMMA BELOW
-	{0x0219, 0x0219, prLower},     // L&       LATIN SMALL LETTER S WITH COMMA BELOW
-	{0x021A, 0x021A, prUpper},     // L&       LATIN CAPITAL LETTER T WITH COMMA BELOW
-	{0x021B, 0x021B, prLower},     // L&       LATIN SMALL LETTER T WITH COMMA BELOW
-	{0x021C, 0x021C, prUpper},     // L&       LATIN CAPITAL LETTER YOGH
-	{0x021D, 0x021D, prLower},     // L&       LATIN SMALL LETTER YOGH
-	{0x021E, 0x021E, prUpper},     // L&       LATIN CAPITAL LETTER H WITH CARON
-	{0x021F, 0x021F, prLower},     // L&       LATIN SMALL LETTER H WITH CARON
-	{0x0220, 0x0220, prUpper},     // L&       LATIN CAPITAL LETTER N WITH LONG RIGHT LEG
-	{0x0221, 0x0221, prLower},     // L&       LATIN SMALL LETTER D WITH CURL
-	{0x0222, 0x0222, prUpper},     // L&       LATIN CAPITAL LETTER OU
-	{0x0223, 0x0223, prLower},     // L&       LATIN SMALL LETTER OU
-	{0x0224, 0x0224, prUpper},     // L&       LATIN CAPITAL LETTER Z WITH HOOK
-	{0x0225, 0x0225, prLower},     // L&       LATIN SMALL LETTER Z WITH HOOK
-	{0x0226, 0x0226, prUpper},     // L&       LATIN CAPITAL LETTER A WITH DOT ABOVE
-	{0x0227, 0x0227, prLower},     // L&       LATIN SMALL LETTER A WITH DOT ABOVE
-	{0x0228, 0x0228, prUpper},     // L&       LATIN CAPITAL LETTER E WITH CEDILLA
-	{0x0229, 0x0229, prLower},     // L&       LATIN SMALL LETTER E WITH CEDILLA
-	{0x022A, 0x022A, prUpper},     // L&       LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
-	{0x022B, 0x022B, prLower},     // L&       LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
-	{0x022C, 0x022C, prUpper},     // L&       LATIN CAPITAL LETTER O WITH TILDE AND MACRON
-	{0x022D, 0x022D, prLower},     // L&       LATIN SMALL LETTER O WITH TILDE AND MACRON
-	{0x022E, 0x022E, prUpper},     // L&       LATIN CAPITAL LETTER O WITH DOT ABOVE
-	{0x022F, 0x022F, prLower},     // L&       LATIN SMALL LETTER O WITH DOT ABOVE
-	{0x0230, 0x0230, prUpper},     // L&       LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON
-	{0x0231, 0x0231, prLower},     // L&       LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON
-	{0x0232, 0x0232, prUpper},     // L&       LATIN CAPITAL LETTER Y WITH MACRON
-	{0x0233, 0x0239, prLower},     // L&   [7] LATIN SMALL LETTER Y WITH MACRON..LATIN SMALL LETTER QP DIGRAPH
-	{0x023A, 0x023B, prUpper},     // L&   [2] LATIN CAPITAL LETTER A WITH STROKE..LATIN CAPITAL LETTER C WITH STROKE
-	{0x023C, 0x023C, prLower},     // L&       LATIN SMALL LETTER C WITH STROKE
-	{0x023D, 0x023E, prUpper},     // L&   [2] LATIN CAPITAL LETTER L WITH BAR..LATIN CAPITAL LETTER T WITH DIAGONAL STROKE
-	{0x023F, 0x0240, prLower},     // L&   [2] LATIN SMALL LETTER S WITH SWASH TAIL..LATIN SMALL LETTER Z WITH SWASH TAIL
-	{0x0241, 0x0241, prUpper},     // L&       LATIN CAPITAL LETTER GLOTTAL STOP
-	{0x0242, 0x0242, prLower},     // L&       LATIN SMALL LETTER GLOTTAL STOP
-	{0x0243, 0x0246, prUpper},     // L&   [4] LATIN CAPITAL LETTER B WITH STROKE..LATIN CAPITAL LETTER E WITH STROKE
-	{0x0247, 0x0247, prLower},     // L&       LATIN SMALL LETTER E WITH STROKE
-	{0x0248, 0x0248, prUpper},     // L&       LATIN CAPITAL LETTER J WITH STROKE
-	{0x0249, 0x0249, prLower},     // L&       LATIN SMALL LETTER J WITH STROKE
-	{0x024A, 0x024A, prUpper},     // L&       LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL
-	{0x024B, 0x024B, prLower},     // L&       LATIN SMALL LETTER Q WITH HOOK TAIL
-	{0x024C, 0x024C, prUpper},     // L&       LATIN CAPITAL LETTER R WITH STROKE
-	{0x024D, 0x024D, prLower},     // L&       LATIN SMALL LETTER R WITH STROKE
-	{0x024E, 0x024E, prUpper},     // L&       LATIN CAPITAL LETTER Y WITH STROKE
-	{0x024F, 0x0293, prLower},     // L&  [69] LATIN SMALL LETTER Y WITH STROKE..LATIN SMALL LETTER EZH WITH CURL
-	{0x0294, 0x0294, prOLetter},   // Lo       LATIN LETTER GLOTTAL STOP
-	{0x0295, 0x02AF, prLower},     // L&  [27] LATIN LETTER PHARYNGEAL VOICED FRICATIVE..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL
-	{0x02B0, 0x02B8, prLower},     // Lm   [9] MODIFIER LETTER SMALL H..MODIFIER LETTER SMALL Y
-	{0x02B9, 0x02BF, prOLetter},   // Lm   [7] MODIFIER LETTER PRIME..MODIFIER LETTER LEFT HALF RING
-	{0x02C0, 0x02C1, prLower},     // Lm   [2] MODIFIER LETTER GLOTTAL STOP..MODIFIER LETTER REVERSED GLOTTAL STOP
-	{0x02C6, 0x02D1, prOLetter},   // Lm  [12] MODIFIER LETTER CIRCUMFLEX ACCENT..MODIFIER LETTER HALF TRIANGULAR COLON
-	{0x02E0, 0x02E4, prLower},     // Lm   [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
-	{0x02EC, 0x02EC, prOLetter},   // Lm       MODIFIER LETTER VOICING
-	{0x02EE, 0x02EE, prOLetter},   // Lm       MODIFIER LETTER DOUBLE APOSTROPHE
-	{0x0300, 0x036F, prExtend},    // Mn [112] COMBINING GRAVE ACCENT..COMBINING LATIN SMALL LETTER X
-	{0x0370, 0x0370, prUpper},     // L&       GREEK CAPITAL LETTER HETA
-	{0x0371, 0x0371, prLower},     // L&       GREEK SMALL LETTER HETA
-	{0x0372, 0x0372, prUpper},     // L&       GREEK CAPITAL LETTER ARCHAIC SAMPI
-	{0x0373, 0x0373, prLower},     // L&       GREEK SMALL LETTER ARCHAIC SAMPI
-	{0x0374, 0x0374, prOLetter},   // Lm       GREEK NUMERAL SIGN
-	{0x0376, 0x0376, prUpper},     // L&       GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA
-	{0x0377, 0x0377, prLower},     // L&       GREEK SMALL LETTER PAMPHYLIAN DIGAMMA
-	{0x037A, 0x037A, prLower},     // Lm       GREEK YPOGEGRAMMENI
-	{0x037B, 0x037D, prLower},     // L&   [3] GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL
-	{0x037F, 0x037F, prUpper},     // L&       GREEK CAPITAL LETTER YOT
-	{0x0386, 0x0386, prUpper},     // L&       GREEK CAPITAL LETTER ALPHA WITH TONOS
-	{0x0388, 0x038A, prUpper},     // L&   [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS
-	{0x038C, 0x038C, prUpper},     // L&       GREEK CAPITAL LETTER OMICRON WITH TONOS
-	{0x038E, 0x038F, prUpper},     // L&   [2] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK CAPITAL LETTER OMEGA WITH TONOS
-	{0x0390, 0x0390, prLower},     // L&       GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
-	{0x0391, 0x03A1, prUpper},     // L&  [17] GREEK CAPITAL LETTER ALPHA..GREEK CAPITAL LETTER RHO
-	{0x03A3, 0x03AB, prUpper},     // L&   [9] GREEK CAPITAL LETTER SIGMA..GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
-	{0x03AC, 0x03CE, prLower},     // L&  [35] GREEK SMALL LETTER ALPHA WITH TONOS..GREEK SMALL LETTER OMEGA WITH TONOS
-	{0x03CF, 0x03CF, prUpper},     // L&       GREEK CAPITAL KAI SYMBOL
-	{0x03D0, 0x03D1, prLower},     // L&   [2] GREEK BETA SYMBOL..GREEK THETA SYMBOL
-	{0x03D2, 0x03D4, prUpper},     // L&   [3] GREEK UPSILON WITH HOOK SYMBOL..GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL
-	{0x03D5, 0x03D7, prLower},     // L&   [3] GREEK PHI SYMBOL..GREEK KAI SYMBOL
-	{0x03D8, 0x03D8, prUpper},     // L&       GREEK LETTER ARCHAIC KOPPA
-	{0x03D9, 0x03D9, prLower},     // L&       GREEK SMALL LETTER ARCHAIC KOPPA
-	{0x03DA, 0x03DA, prUpper},     // L&       GREEK LETTER STIGMA
-	{0x03DB, 0x03DB, prLower},     // L&       GREEK SMALL LETTER STIGMA
-	{0x03DC, 0x03DC, prUpper},     // L&       GREEK LETTER DIGAMMA
-	{0x03DD, 0x03DD, prLower},     // L&       GREEK SMALL LETTER DIGAMMA
-	{0x03DE, 0x03DE, prUpper},     // L&       GREEK LETTER KOPPA
-	{0x03DF, 0x03DF, prLower},     // L&       GREEK SMALL LETTER KOPPA
-	{0x03E0, 0x03E0, prUpper},     // L&       GREEK LETTER SAMPI
-	{0x03E1, 0x03E1, prLower},     // L&       GREEK SMALL LETTER SAMPI
-	{0x03E2, 0x03E2, prUpper},     // L&       COPTIC CAPITAL LETTER SHEI
-	{0x03E3, 0x03E3, prLower},     // L&       COPTIC SMALL LETTER SHEI
-	{0x03E4, 0x03E4, prUpper},     // L&       COPTIC CAPITAL LETTER FEI
-	{0x03E5, 0x03E5, prLower},     // L&       COPTIC SMALL LETTER FEI
-	{0x03E6, 0x03E6, prUpper},     // L&       COPTIC CAPITAL LETTER KHEI
-	{0x03E7, 0x03E7, prLower},     // L&       COPTIC SMALL LETTER KHEI
-	{0x03E8, 0x03E8, prUpper},     // L&       COPTIC CAPITAL LETTER HORI
-	{0x03E9, 0x03E9, prLower},     // L&       COPTIC SMALL LETTER HORI
-	{0x03EA, 0x03EA, prUpper},     // L&       COPTIC CAPITAL LETTER GANGIA
-	{0x03EB, 0x03EB, prLower},     // L&       COPTIC SMALL LETTER GANGIA
-	{0x03EC, 0x03EC, prUpper},     // L&       COPTIC CAPITAL LETTER SHIMA
-	{0x03ED, 0x03ED, prLower},     // L&       COPTIC SMALL LETTER SHIMA
-	{0x03EE, 0x03EE, prUpper},     // L&       COPTIC CAPITAL LETTER DEI
-	{0x03EF, 0x03F3, prLower},     // L&   [5] COPTIC SMALL LETTER DEI..GREEK LETTER YOT
-	{0x03F4, 0x03F4, prUpper},     // L&       GREEK CAPITAL THETA SYMBOL
-	{0x03F5, 0x03F5, prLower},     // L&       GREEK LUNATE EPSILON SYMBOL
-	{0x03F7, 0x03F7, prUpper},     // L&       GREEK CAPITAL LETTER SHO
-	{0x03F8, 0x03F8, prLower},     // L&       GREEK SMALL LETTER SHO
-	{0x03F9, 0x03FA, prUpper},     // L&   [2] GREEK CAPITAL LUNATE SIGMA SYMBOL..GREEK CAPITAL LETTER SAN
-	{0x03FB, 0x03FC, prLower},     // L&   [2] GREEK SMALL LETTER SAN..GREEK RHO WITH STROKE SYMBOL
-	{0x03FD, 0x042F, prUpper},     // L&  [51] GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL..CYRILLIC CAPITAL LETTER YA
-	{0x0430, 0x045F, prLower},     // L&  [48] CYRILLIC SMALL LETTER A..CYRILLIC SMALL LETTER DZHE
-	{0x0460, 0x0460, prUpper},     // L&       CYRILLIC CAPITAL LETTER OMEGA
-	{0x0461, 0x0461, prLower},     // L&       CYRILLIC SMALL LETTER OMEGA
-	{0x0462, 0x0462, prUpper},     // L&       CYRILLIC CAPITAL LETTER YAT
-	{0x0463, 0x0463, prLower},     // L&       CYRILLIC SMALL LETTER YAT
-	{0x0464, 0x0464, prUpper},     // L&       CYRILLIC CAPITAL LETTER IOTIFIED E
-	{0x0465, 0x0465, prLower},     // L&       CYRILLIC SMALL LETTER IOTIFIED E
-	{0x0466, 0x0466, prUpper},     // L&       CYRILLIC CAPITAL LETTER LITTLE YUS
-	{0x0467, 0x0467, prLower},     // L&       CYRILLIC SMALL LETTER LITTLE YUS
-	{0x0468, 0x0468, prUpper},     // L&       CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS
-	{0x0469, 0x0469, prLower},     // L&       CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS
-	{0x046A, 0x046A, prUpper},     // L&       CYRILLIC CAPITAL LETTER BIG YUS
-	{0x046B, 0x046B, prLower},     // L&       CYRILLIC SMALL LETTER BIG YUS
-	{0x046C, 0x046C, prUpper},     // L&       CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS
-	{0x046D, 0x046D, prLower},     // L&       CYRILLIC SMALL LETTER IOTIFIED BIG YUS
-	{0x046E, 0x046E, prUpper},     // L&       CYRILLIC CAPITAL LETTER KSI
-	{0x046F, 0x046F, prLower},     // L&       CYRILLIC SMALL LETTER KSI
-	{0x0470, 0x0470, prUpper},     // L&       CYRILLIC CAPITAL LETTER PSI
-	{0x0471, 0x0471, prLower},     // L&       CYRILLIC SMALL LETTER PSI
-	{0x0472, 0x0472, prUpper},     // L&       CYRILLIC CAPITAL LETTER FITA
-	{0x0473, 0x0473, prLower},     // L&       CYRILLIC SMALL LETTER FITA
-	{0x0474, 0x0474, prUpper},     // L&       CYRILLIC CAPITAL LETTER IZHITSA
-	{0x0475, 0x0475, prLower},     // L&       CYRILLIC SMALL LETTER IZHITSA
-	{0x0476, 0x0476, prUpper},     // L&       CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
-	{0x0477, 0x0477, prLower},     // L&       CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
-	{0x0478, 0x0478, prUpper},     // L&       CYRILLIC CAPITAL LETTER UK
-	{0x0479, 0x0479, prLower},     // L&       CYRILLIC SMALL LETTER UK
-	{0x047A, 0x047A, prUpper},     // L&       CYRILLIC CAPITAL LETTER ROUND OMEGA
-	{0x047B, 0x047B, prLower},     // L&       CYRILLIC SMALL LETTER ROUND OMEGA
-	{0x047C, 0x047C, prUpper},     // L&       CYRILLIC CAPITAL LETTER OMEGA WITH TITLO
-	{0x047D, 0x047D, prLower},     // L&       CYRILLIC SMALL LETTER OMEGA WITH TITLO
-	{0x047E, 0x047E, prUpper},     // L&       CYRILLIC CAPITAL LETTER OT
-	{0x047F, 0x047F, prLower},     // L&       CYRILLIC SMALL LETTER OT
-	{0x0480, 0x0480, prUpper},     // L&       CYRILLIC CAPITAL LETTER KOPPA
-	{0x0481, 0x0481, prLower},     // L&       CYRILLIC SMALL LETTER KOPPA
-	{0x0483, 0x0487, prExtend},    // Mn   [5] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC POKRYTIE
-	{0x0488, 0x0489, prExtend},    // Me   [2] COMBINING CYRILLIC HUNDRED THOUSANDS SIGN..COMBINING CYRILLIC MILLIONS SIGN
-	{0x048A, 0x048A, prUpper},     // L&       CYRILLIC CAPITAL LETTER SHORT I WITH TAIL
-	{0x048B, 0x048B, prLower},     // L&       CYRILLIC SMALL LETTER SHORT I WITH TAIL
-	{0x048C, 0x048C, prUpper},     // L&       CYRILLIC CAPITAL LETTER SEMISOFT SIGN
-	{0x048D, 0x048D, prLower},     // L&       CYRILLIC SMALL LETTER SEMISOFT SIGN
-	{0x048E, 0x048E, prUpper},     // L&       CYRILLIC CAPITAL LETTER ER WITH TICK
-	{0x048F, 0x048F, prLower},     // L&       CYRILLIC SMALL LETTER ER WITH TICK
-	{0x0490, 0x0490, prUpper},     // L&       CYRILLIC CAPITAL LETTER GHE WITH UPTURN
-	{0x0491, 0x0491, prLower},     // L&       CYRILLIC SMALL LETTER GHE WITH UPTURN
-	{0x0492, 0x0492, prUpper},     // L&       CYRILLIC CAPITAL LETTER GHE WITH STROKE
-	{0x0493, 0x0493, prLower},     // L&       CYRILLIC SMALL LETTER GHE WITH STROKE
-	{0x0494, 0x0494, prUpper},     // L&       CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK
-	{0x0495, 0x0495, prLower},     // L&       CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK
-	{0x0496, 0x0496, prUpper},     // L&       CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER
-	{0x0497, 0x0497, prLower},     // L&       CYRILLIC SMALL LETTER ZHE WITH DESCENDER
-	{0x0498, 0x0498, prUpper},     // L&       CYRILLIC CAPITAL LETTER ZE WITH DESCENDER
-	{0x0499, 0x0499, prLower},     // L&       CYRILLIC SMALL LETTER ZE WITH DESCENDER
-	{0x049A, 0x049A, prUpper},     // L&       CYRILLIC CAPITAL LETTER KA WITH DESCENDER
-	{0x049B, 0x049B, prLower},     // L&       CYRILLIC SMALL LETTER KA WITH DESCENDER
-	{0x049C, 0x049C, prUpper},     // L&       CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE
-	{0x049D, 0x049D, prLower},     // L&       CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE
-	{0x049E, 0x049E, prUpper},     // L&       CYRILLIC CAPITAL LETTER KA WITH STROKE
-	{0x049F, 0x049F, prLower},     // L&       CYRILLIC SMALL LETTER KA WITH STROKE
-	{0x04A0, 0x04A0, prUpper},     // L&       CYRILLIC CAPITAL LETTER BASHKIR KA
-	{0x04A1, 0x04A1, prLower},     // L&       CYRILLIC SMALL LETTER BASHKIR KA
-	{0x04A2, 0x04A2, prUpper},     // L&       CYRILLIC CAPITAL LETTER EN WITH DESCENDER
-	{0x04A3, 0x04A3, prLower},     // L&       CYRILLIC SMALL LETTER EN WITH DESCENDER
-	{0x04A4, 0x04A4, prUpper},     // L&       CYRILLIC CAPITAL LIGATURE EN GHE
-	{0x04A5, 0x04A5, prLower},     // L&       CYRILLIC SMALL LIGATURE EN GHE
-	{0x04A6, 0x04A6, prUpper},     // L&       CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK
-	{0x04A7, 0x04A7, prLower},     // L&       CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK
-	{0x04A8, 0x04A8, prUpper},     // L&       CYRILLIC CAPITAL LETTER ABKHASIAN HA
-	{0x04A9, 0x04A9, prLower},     // L&       CYRILLIC SMALL LETTER ABKHASIAN HA
-	{0x04AA, 0x04AA, prUpper},     // L&       CYRILLIC CAPITAL LETTER ES WITH DESCENDER
-	{0x04AB, 0x04AB, prLower},     // L&       CYRILLIC SMALL LETTER ES WITH DESCENDER
-	{0x04AC, 0x04AC, prUpper},     // L&       CYRILLIC CAPITAL LETTER TE WITH DESCENDER
-	{0x04AD, 0x04AD, prLower},     // L&       CYRILLIC SMALL LETTER TE WITH DESCENDER
-	{0x04AE, 0x04AE, prUpper},     // L&       CYRILLIC CAPITAL LETTER STRAIGHT U
-	{0x04AF, 0x04AF, prLower},     // L&       CYRILLIC SMALL LETTER STRAIGHT U
-	{0x04B0, 0x04B0, prUpper},     // L&       CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE
-	{0x04B1, 0x04B1, prLower},     // L&       CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE
-	{0x04B2, 0x04B2, prUpper},     // L&       CYRILLIC CAPITAL LETTER HA WITH DESCENDER
-	{0x04B3, 0x04B3, prLower},     // L&       CYRILLIC SMALL LETTER HA WITH DESCENDER
-	{0x04B4, 0x04B4, prUpper},     // L&       CYRILLIC CAPITAL LIGATURE TE TSE
-	{0x04B5, 0x04B5, prLower},     // L&       CYRILLIC SMALL LIGATURE TE TSE
-	{0x04B6, 0x04B6, prUpper},     // L&       CYRILLIC CAPITAL LETTER CHE WITH DESCENDER
-	{0x04B7, 0x04B7, prLower},     // L&       CYRILLIC SMALL LETTER CHE WITH DESCENDER
-	{0x04B8, 0x04B8, prUpper},     // L&       CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE
-	{0x04B9, 0x04B9, prLower},     // L&       CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE
-	{0x04BA, 0x04BA, prUpper},     // L&       CYRILLIC CAPITAL LETTER SHHA
-	{0x04BB, 0x04BB, prLower},     // L&       CYRILLIC SMALL LETTER SHHA
-	{0x04BC, 0x04BC, prUpper},     // L&       CYRILLIC CAPITAL LETTER ABKHASIAN CHE
-	{0x04BD, 0x04BD, prLower},     // L&       CYRILLIC SMALL LETTER ABKHASIAN CHE
-	{0x04BE, 0x04BE, prUpper},     // L&       CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER
-	{0x04BF, 0x04BF, prLower},     // L&       CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER
-	{0x04C0, 0x04C1, prUpper},     // L&   [2] CYRILLIC LETTER PALOCHKA..CYRILLIC CAPITAL LETTER ZHE WITH BREVE
-	{0x04C2, 0x04C2, prLower},     // L&       CYRILLIC SMALL LETTER ZHE WITH BREVE
-	{0x04C3, 0x04C3, prUpper},     // L&       CYRILLIC CAPITAL LETTER KA WITH HOOK
-	{0x04C4, 0x04C4, prLower},     // L&       CYRILLIC SMALL LETTER KA WITH HOOK
-	{0x04C5, 0x04C5, prUpper},     // L&       CYRILLIC CAPITAL LETTER EL WITH TAIL
-	{0x04C6, 0x04C6, prLower},     // L&       CYRILLIC SMALL LETTER EL WITH TAIL
-	{0x04C7, 0x04C7, prUpper},     // L&       CYRILLIC CAPITAL LETTER EN WITH HOOK
-	{0x04C8, 0x04C8, prLower},     // L&       CYRILLIC SMALL LETTER EN WITH HOOK
-	{0x04C9, 0x04C9, prUpper},     // L&       CYRILLIC CAPITAL LETTER EN WITH TAIL
-	{0x04CA, 0x04CA, prLower},     // L&       CYRILLIC SMALL LETTER EN WITH TAIL
-	{0x04CB, 0x04CB, prUpper},     // L&       CYRILLIC CAPITAL LETTER KHAKASSIAN CHE
-	{0x04CC, 0x04CC, prLower},     // L&       CYRILLIC SMALL LETTER KHAKASSIAN CHE
-	{0x04CD, 0x04CD, prUpper},     // L&       CYRILLIC CAPITAL LETTER EM WITH TAIL
-	{0x04CE, 0x04CF, prLower},     // L&   [2] CYRILLIC SMALL LETTER EM WITH TAIL..CYRILLIC SMALL LETTER PALOCHKA
-	{0x04D0, 0x04D0, prUpper},     // L&       CYRILLIC CAPITAL LETTER A WITH BREVE
-	{0x04D1, 0x04D1, prLower},     // L&       CYRILLIC SMALL LETTER A WITH BREVE
-	{0x04D2, 0x04D2, prUpper},     // L&       CYRILLIC CAPITAL LETTER A WITH DIAERESIS
-	{0x04D3, 0x04D3, prLower},     // L&       CYRILLIC SMALL LETTER A WITH DIAERESIS
-	{0x04D4, 0x04D4, prUpper},     // L&       CYRILLIC CAPITAL LIGATURE A IE
-	{0x04D5, 0x04D5, prLower},     // L&       CYRILLIC SMALL LIGATURE A IE
-	{0x04D6, 0x04D6, prUpper},     // L&       CYRILLIC CAPITAL LETTER IE WITH BREVE
-	{0x04D7, 0x04D7, prLower},     // L&       CYRILLIC SMALL LETTER IE WITH BREVE
-	{0x04D8, 0x04D8, prUpper},     // L&       CYRILLIC CAPITAL LETTER SCHWA
-	{0x04D9, 0x04D9, prLower},     // L&       CYRILLIC SMALL LETTER SCHWA
-	{0x04DA, 0x04DA, prUpper},     // L&       CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS
-	{0x04DB, 0x04DB, prLower},     // L&       CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS
-	{0x04DC, 0x04DC, prUpper},     // L&       CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS
-	{0x04DD, 0x04DD, prLower},     // L&       CYRILLIC SMALL LETTER ZHE WITH DIAERESIS
-	{0x04DE, 0x04DE, prUpper},     // L&       CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS
-	{0x04DF, 0x04DF, prLower},     // L&       CYRILLIC SMALL LETTER ZE WITH DIAERESIS
-	{0x04E0, 0x04E0, prUpper},     // L&       CYRILLIC CAPITAL LETTER ABKHASIAN DZE
-	{0x04E1, 0x04E1, prLower},     // L&       CYRILLIC SMALL LETTER ABKHASIAN DZE
-	{0x04E2, 0x04E2, prUpper},     // L&       CYRILLIC CAPITAL LETTER I WITH MACRON
-	{0x04E3, 0x04E3, prLower},     // L&       CYRILLIC SMALL LETTER I WITH MACRON
-	{0x04E4, 0x04E4, prUpper},     // L&       CYRILLIC CAPITAL LETTER I WITH DIAERESIS
-	{0x04E5, 0x04E5, prLower},     // L&       CYRILLIC SMALL LETTER I WITH DIAERESIS
-	{0x04E6, 0x04E6, prUpper},     // L&       CYRILLIC CAPITAL LETTER O WITH DIAERESIS
-	{0x04E7, 0x04E7, prLower},     // L&       CYRILLIC SMALL LETTER O WITH DIAERESIS
-	{0x04E8, 0x04E8, prUpper},     // L&       CYRILLIC CAPITAL LETTER BARRED O
-	{0x04E9, 0x04E9, prLower},     // L&       CYRILLIC SMALL LETTER BARRED O
-	{0x04EA, 0x04EA, prUpper},     // L&       CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS
-	{0x04EB, 0x04EB, prLower},     // L&       CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS
-	{0x04EC, 0x04EC, prUpper},     // L&       CYRILLIC CAPITAL LETTER E WITH DIAERESIS
-	{0x04ED, 0x04ED, prLower},     // L&       CYRILLIC SMALL LETTER E WITH DIAERESIS
-	{0x04EE, 0x04EE, prUpper},     // L&       CYRILLIC CAPITAL LETTER U WITH MACRON
-	{0x04EF, 0x04EF, prLower},     // L&       CYRILLIC SMALL LETTER U WITH MACRON
-	{0x04F0, 0x04F0, prUpper},     // L&       CYRILLIC CAPITAL LETTER U WITH DIAERESIS
-	{0x04F1, 0x04F1, prLower},     // L&       CYRILLIC SMALL LETTER U WITH DIAERESIS
-	{0x04F2, 0x04F2, prUpper},     // L&       CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE
-	{0x04F3, 0x04F3, prLower},     // L&       CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE
-	{0x04F4, 0x04F4, prUpper},     // L&       CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS
-	{0x04F5, 0x04F5, prLower},     // L&       CYRILLIC SMALL LETTER CHE WITH DIAERESIS
-	{0x04F6, 0x04F6, prUpper},     // L&       CYRILLIC CAPITAL LETTER GHE WITH DESCENDER
-	{0x04F7, 0x04F7, prLower},     // L&       CYRILLIC SMALL LETTER GHE WITH DESCENDER
-	{0x04F8, 0x04F8, prUpper},     // L&       CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS
-	{0x04F9, 0x04F9, prLower},     // L&       CYRILLIC SMALL LETTER YERU WITH DIAERESIS
-	{0x04FA, 0x04FA, prUpper},     // L&       CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK
-	{0x04FB, 0x04FB, prLower},     // L&       CYRILLIC SMALL LETTER GHE WITH STROKE AND HOOK
-	{0x04FC, 0x04FC, prUpper},     // L&       CYRILLIC CAPITAL LETTER HA WITH HOOK
-	{0x04FD, 0x04FD, prLower},     // L&       CYRILLIC SMALL LETTER HA WITH HOOK
-	{0x04FE, 0x04FE, prUpper},     // L&       CYRILLIC CAPITAL LETTER HA WITH STROKE
-	{0x04FF, 0x04FF, prLower},     // L&       CYRILLIC SMALL LETTER HA WITH STROKE
-	{0x0500, 0x0500, prUpper},     // L&       CYRILLIC CAPITAL LETTER KOMI DE
-	{0x0501, 0x0501, prLower},     // L&       CYRILLIC SMALL LETTER KOMI DE
-	{0x0502, 0x0502, prUpper},     // L&       CYRILLIC CAPITAL LETTER KOMI DJE
-	{0x0503, 0x0503, prLower},     // L&       CYRILLIC SMALL LETTER KOMI DJE
-	{0x0504, 0x0504, prUpper},     // L&       CYRILLIC CAPITAL LETTER KOMI ZJE
-	{0x0505, 0x0505, prLower},     // L&       CYRILLIC SMALL LETTER KOMI ZJE
-	{0x0506, 0x0506, prUpper},     // L&       CYRILLIC CAPITAL LETTER KOMI DZJE
-	{0x0507, 0x0507, prLower},     // L&       CYRILLIC SMALL LETTER KOMI DZJE
-	{0x0508, 0x0508, prUpper},     // L&       CYRILLIC CAPITAL LETTER KOMI LJE
-	{0x0509, 0x0509, prLower},     // L&       CYRILLIC SMALL LETTER KOMI LJE
-	{0x050A, 0x050A, prUpper},     // L&       CYRILLIC CAPITAL LETTER KOMI NJE
-	{0x050B, 0x050B, prLower},     // L&       CYRILLIC SMALL LETTER KOMI NJE
-	{0x050C, 0x050C, prUpper},     // L&       CYRILLIC CAPITAL LETTER KOMI SJE
-	{0x050D, 0x050D, prLower},     // L&       CYRILLIC SMALL LETTER KOMI SJE
-	{0x050E, 0x050E, prUpper},     // L&       CYRILLIC CAPITAL LETTER KOMI TJE
-	{0x050F, 0x050F, prLower},     // L&       CYRILLIC SMALL LETTER KOMI TJE
-	{0x0510, 0x0510, prUpper},     // L&       CYRILLIC CAPITAL LETTER REVERSED ZE
-	{0x0511, 0x0511, prLower},     // L&       CYRILLIC SMALL LETTER REVERSED ZE
-	{0x0512, 0x0512, prUpper},     // L&       CYRILLIC CAPITAL LETTER EL WITH HOOK
-	{0x0513, 0x0513, prLower},     // L&       CYRILLIC SMALL LETTER EL WITH HOOK
-	{0x0514, 0x0514, prUpper},     // L&       CYRILLIC CAPITAL LETTER LHA
-	{0x0515, 0x0515, prLower},     // L&       CYRILLIC SMALL LETTER LHA
-	{0x0516, 0x0516, prUpper},     // L&       CYRILLIC CAPITAL LETTER RHA
-	{0x0517, 0x0517, prLower},     // L&       CYRILLIC SMALL LETTER RHA
-	{0x0518, 0x0518, prUpper},     // L&       CYRILLIC CAPITAL LETTER YAE
-	{0x0519, 0x0519, prLower},     // L&       CYRILLIC SMALL LETTER YAE
-	{0x051A, 0x051A, prUpper},     // L&       CYRILLIC CAPITAL LETTER QA
-	{0x051B, 0x051B, prLower},     // L&       CYRILLIC SMALL LETTER QA
-	{0x051C, 0x051C, prUpper},     // L&       CYRILLIC CAPITAL LETTER WE
-	{0x051D, 0x051D, prLower},     // L&       CYRILLIC SMALL LETTER WE
-	{0x051E, 0x051E, prUpper},     // L&       CYRILLIC CAPITAL LETTER ALEUT KA
-	{0x051F, 0x051F, prLower},     // L&       CYRILLIC SMALL LETTER ALEUT KA
-	{0x0520, 0x0520, prUpper},     // L&       CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK
-	{0x0521, 0x0521, prLower},     // L&       CYRILLIC SMALL LETTER EL WITH MIDDLE HOOK
-	{0x0522, 0x0522, prUpper},     // L&       CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK
-	{0x0523, 0x0523, prLower},     // L&       CYRILLIC SMALL LETTER EN WITH MIDDLE HOOK
-	{0x0524, 0x0524, prUpper},     // L&       CYRILLIC CAPITAL LETTER PE WITH DESCENDER
-	{0x0525, 0x0525, prLower},     // L&       CYRILLIC SMALL LETTER PE WITH DESCENDER
-	{0x0526, 0x0526, prUpper},     // L&       CYRILLIC CAPITAL LETTER SHHA WITH DESCENDER
-	{0x0527, 0x0527, prLower},     // L&       CYRILLIC SMALL LETTER SHHA WITH DESCENDER
-	{0x0528, 0x0528, prUpper},     // L&       CYRILLIC CAPITAL LETTER EN WITH LEFT HOOK
-	{0x0529, 0x0529, prLower},     // L&       CYRILLIC SMALL LETTER EN WITH LEFT HOOK
-	{0x052A, 0x052A, prUpper},     // L&       CYRILLIC CAPITAL LETTER DZZHE
-	{0x052B, 0x052B, prLower},     // L&       CYRILLIC SMALL LETTER DZZHE
-	{0x052C, 0x052C, prUpper},     // L&       CYRILLIC CAPITAL LETTER DCHE
-	{0x052D, 0x052D, prLower},     // L&       CYRILLIC SMALL LETTER DCHE
-	{0x052E, 0x052E, prUpper},     // L&       CYRILLIC CAPITAL LETTER EL WITH DESCENDER
-	{0x052F, 0x052F, prLower},     // L&       CYRILLIC SMALL LETTER EL WITH DESCENDER
-	{0x0531, 0x0556, prUpper},     // L&  [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH
-	{0x0559, 0x0559, prOLetter},   // Lm       ARMENIAN MODIFIER LETTER LEFT HALF RING
-	{0x055D, 0x055D, prSContinue}, // Po       ARMENIAN COMMA
-	{0x0560, 0x0588, prLower},     // L&  [41] ARMENIAN SMALL LETTER TURNED AYB..ARMENIAN SMALL LETTER YI WITH STROKE
-	{0x0589, 0x0589, prSTerm},     // Po       ARMENIAN FULL STOP
-	{0x0591, 0x05BD, prExtend},    // Mn  [45] HEBREW ACCENT ETNAHTA..HEBREW POINT METEG
-	{0x05BF, 0x05BF, prExtend},    // Mn       HEBREW POINT RAFE
-	{0x05C1, 0x05C2, prExtend},    // Mn   [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT
-	{0x05C4, 0x05C5, prExtend},    // Mn   [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT
-	{0x05C7, 0x05C7, prExtend},    // Mn       HEBREW POINT QAMATS QATAN
-	{0x05D0, 0x05EA, prOLetter},   // Lo  [27] HEBREW LETTER ALEF..HEBREW LETTER TAV
-	{0x05EF, 0x05F2, prOLetter},   // Lo   [4] HEBREW YOD TRIANGLE..HEBREW LIGATURE YIDDISH DOUBLE YOD
-	{0x05F3, 0x05F3, prOLetter},   // Po       HEBREW PUNCTUATION GERESH
-	{0x0600, 0x0605, prFormat},    // Cf   [6] ARABIC NUMBER SIGN..ARABIC NUMBER MARK ABOVE
-	{0x060C, 0x060D, prSContinue}, // Po   [2] ARABIC COMMA..ARABIC DATE SEPARATOR
-	{0x0610, 0x061A, prExtend},    // Mn  [11] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL KASRA
-	{0x061C, 0x061C, prFormat},    // Cf       ARABIC LETTER MARK
-	{0x061D, 0x061F, prSTerm},     // Po   [3] ARABIC END OF TEXT MARK..ARABIC QUESTION MARK
-	{0x0620, 0x063F, prOLetter},   // Lo  [32] ARABIC LETTER KASHMIRI YEH..ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE
-	{0x0640, 0x0640, prOLetter},   // Lm       ARABIC TATWEEL
-	{0x0641, 0x064A, prOLetter},   // Lo  [10] ARABIC LETTER FEH..ARABIC LETTER YEH
-	{0x064B, 0x065F, prExtend},    // Mn  [21] ARABIC FATHATAN..ARABIC WAVY HAMZA BELOW
-	{0x0660, 0x0669, prNumeric},   // Nd  [10] ARABIC-INDIC DIGIT ZERO..ARABIC-INDIC DIGIT NINE
-	{0x066B, 0x066C, prNumeric},   // Po   [2] ARABIC DECIMAL SEPARATOR..ARABIC THOUSANDS SEPARATOR
-	{0x066E, 0x066F, prOLetter},   // Lo   [2] ARABIC LETTER DOTLESS BEH..ARABIC LETTER DOTLESS QAF
-	{0x0670, 0x0670, prExtend},    // Mn       ARABIC LETTER SUPERSCRIPT ALEF
-	{0x0671, 0x06D3, prOLetter},   // Lo  [99] ARABIC LETTER ALEF WASLA..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE
-	{0x06D4, 0x06D4, prSTerm},     // Po       ARABIC FULL STOP
-	{0x06D5, 0x06D5, prOLetter},   // Lo       ARABIC LETTER AE
-	{0x06D6, 0x06DC, prExtend},    // Mn   [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN
-	{0x06DD, 0x06DD, prFormat},    // Cf       ARABIC END OF AYAH
-	{0x06DF, 0x06E4, prExtend},    // Mn   [6] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH MADDA
-	{0x06E5, 0x06E6, prOLetter},   // Lm   [2] ARABIC SMALL WAW..ARABIC SMALL YEH
-	{0x06E7, 0x06E8, prExtend},    // Mn   [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON
-	{0x06EA, 0x06ED, prExtend},    // Mn   [4] ARABIC EMPTY CENTRE LOW STOP..ARABIC SMALL LOW MEEM
-	{0x06EE, 0x06EF, prOLetter},   // Lo   [2] ARABIC LETTER DAL WITH INVERTED V..ARABIC LETTER REH WITH INVERTED V
-	{0x06F0, 0x06F9, prNumeric},   // Nd  [10] EXTENDED ARABIC-INDIC DIGIT ZERO..EXTENDED ARABIC-INDIC DIGIT NINE
-	{0x06FA, 0x06FC, prOLetter},   // Lo   [3] ARABIC LETTER SHEEN WITH DOT BELOW..ARABIC LETTER GHAIN WITH DOT BELOW
-	{0x06FF, 0x06FF, prOLetter},   // Lo       ARABIC LETTER HEH WITH INVERTED V
-	{0x0700, 0x0702, prSTerm},     // Po   [3] SYRIAC END OF PARAGRAPH..SYRIAC SUBLINEAR FULL STOP
-	{0x070F, 0x070F, prFormat},    // Cf       SYRIAC ABBREVIATION MARK
-	{0x0710, 0x0710, prOLetter},   // Lo       SYRIAC LETTER ALAPH
-	{0x0711, 0x0711, prExtend},    // Mn       SYRIAC LETTER SUPERSCRIPT ALAPH
-	{0x0712, 0x072F, prOLetter},   // Lo  [30] SYRIAC LETTER BETH..SYRIAC LETTER PERSIAN DHALATH
-	{0x0730, 0x074A, prExtend},    // Mn  [27] SYRIAC PTHAHA ABOVE..SYRIAC BARREKH
-	{0x074D, 0x07A5, prOLetter},   // Lo  [89] SYRIAC LETTER SOGDIAN ZHAIN..THAANA LETTER WAAVU
-	{0x07A6, 0x07B0, prExtend},    // Mn  [11] THAANA ABAFILI..THAANA SUKUN
-	{0x07B1, 0x07B1, prOLetter},   // Lo       THAANA LETTER NAA
-	{0x07C0, 0x07C9, prNumeric},   // Nd  [10] NKO DIGIT ZERO..NKO DIGIT NINE
-	{0x07CA, 0x07EA, prOLetter},   // Lo  [33] NKO LETTER A..NKO LETTER JONA RA
-	{0x07EB, 0x07F3, prExtend},    // Mn   [9] NKO COMBINING SHORT HIGH TONE..NKO COMBINING DOUBLE DOT ABOVE
-	{0x07F4, 0x07F5, prOLetter},   // Lm   [2] NKO HIGH TONE APOSTROPHE..NKO LOW TONE APOSTROPHE
-	{0x07F8, 0x07F8, prSContinue}, // Po       NKO COMMA
-	{0x07F9, 0x07F9, prSTerm},     // Po       NKO EXCLAMATION MARK
-	{0x07FA, 0x07FA, prOLetter},   // Lm       NKO LAJANYALAN
-	{0x07FD, 0x07FD, prExtend},    // Mn       NKO DANTAYALAN
-	{0x0800, 0x0815, prOLetter},   // Lo  [22] SAMARITAN LETTER ALAF..SAMARITAN LETTER TAAF
-	{0x0816, 0x0819, prExtend},    // Mn   [4] SAMARITAN MARK IN..SAMARITAN MARK DAGESH
-	{0x081A, 0x081A, prOLetter},   // Lm       SAMARITAN MODIFIER LETTER EPENTHETIC YUT
-	{0x081B, 0x0823, prExtend},    // Mn   [9] SAMARITAN MARK EPENTHETIC YUT..SAMARITAN VOWEL SIGN A
-	{0x0824, 0x0824, prOLetter},   // Lm       SAMARITAN MODIFIER LETTER SHORT A
-	{0x0825, 0x0827, prExtend},    // Mn   [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U
-	{0x0828, 0x0828, prOLetter},   // Lm       SAMARITAN MODIFIER LETTER I
-	{0x0829, 0x082D, prExtend},    // Mn   [5] SAMARITAN VOWEL SIGN LONG I..SAMARITAN MARK NEQUDAA
-	{0x0837, 0x0837, prSTerm},     // Po       SAMARITAN PUNCTUATION MELODIC QITSA
-	{0x0839, 0x0839, prSTerm},     // Po       SAMARITAN PUNCTUATION QITSA
-	{0x083D, 0x083E, prSTerm},     // Po   [2] SAMARITAN PUNCTUATION SOF MASHFAAT..SAMARITAN PUNCTUATION ANNAAU
-	{0x0840, 0x0858, prOLetter},   // Lo  [25] MANDAIC LETTER HALQA..MANDAIC LETTER AIN
-	{0x0859, 0x085B, prExtend},    // Mn   [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK
-	{0x0860, 0x086A, prOLetter},   // Lo  [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA
-	{0x0870, 0x0887, prOLetter},   // Lo  [24] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC BASELINE ROUND DOT
-	{0x0889, 0x088E, prOLetter},   // Lo   [6] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC VERTICAL TAIL
-	{0x0890, 0x0891, prFormat},    // Cf   [2] ARABIC POUND MARK ABOVE..ARABIC PIASTRE MARK ABOVE
-	{0x0898, 0x089F, prExtend},    // Mn   [8] ARABIC SMALL HIGH WORD AL-JUZ..ARABIC HALF MADDA OVER MADDA
-	{0x08A0, 0x08C8, prOLetter},   // Lo  [41] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER GRAF
-	{0x08C9, 0x08C9, prOLetter},   // Lm       ARABIC SMALL FARSI YEH
-	{0x08CA, 0x08E1, prExtend},    // Mn  [24] ARABIC SMALL HIGH FARSI YEH..ARABIC SMALL HIGH SIGN SAFHA
-	{0x08E2, 0x08E2, prFormat},    // Cf       ARABIC DISPUTED END OF AYAH
-	{0x08E3, 0x0902, prExtend},    // Mn  [32] ARABIC TURNED DAMMA BELOW..DEVANAGARI SIGN ANUSVARA
-	{0x0903, 0x0903, prExtend},    // Mc       DEVANAGARI SIGN VISARGA
-	{0x0904, 0x0939, prOLetter},   // Lo  [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA
-	{0x093A, 0x093A, prExtend},    // Mn       DEVANAGARI VOWEL SIGN OE
-	{0x093B, 0x093B, prExtend},    // Mc       DEVANAGARI VOWEL SIGN OOE
-	{0x093C, 0x093C, prExtend},    // Mn       DEVANAGARI SIGN NUKTA
-	{0x093D, 0x093D, prOLetter},   // Lo       DEVANAGARI SIGN AVAGRAHA
-	{0x093E, 0x0940, prExtend},    // Mc   [3] DEVANAGARI VOWEL SIGN AA..DEVANAGARI VOWEL SIGN II
-	{0x0941, 0x0948, prExtend},    // Mn   [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI
-	{0x0949, 0x094C, prExtend},    // Mc   [4] DEVANAGARI VOWEL SIGN CANDRA O..DEVANAGARI VOWEL SIGN AU
-	{0x094D, 0x094D, prExtend},    // Mn       DEVANAGARI SIGN VIRAMA
-	{0x094E, 0x094F, prExtend},    // Mc   [2] DEVANAGARI VOWEL SIGN PRISHTHAMATRA E..DEVANAGARI VOWEL SIGN AW
-	{0x0950, 0x0950, prOLetter},   // Lo       DEVANAGARI OM
-	{0x0951, 0x0957, prExtend},    // Mn   [7] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI VOWEL SIGN UUE
-	{0x0958, 0x0961, prOLetter},   // Lo  [10] DEVANAGARI LETTER QA..DEVANAGARI LETTER VOCALIC LL
-	{0x0962, 0x0963, prExtend},    // Mn   [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL
-	{0x0964, 0x0965, prSTerm},     // Po   [2] DEVANAGARI DANDA..DEVANAGARI DOUBLE DANDA
-	{0x0966, 0x096F, prNumeric},   // Nd  [10] DEVANAGARI DIGIT ZERO..DEVANAGARI DIGIT NINE
-	{0x0971, 0x0971, prOLetter},   // Lm       DEVANAGARI SIGN HIGH SPACING DOT
-	{0x0972, 0x0980, prOLetter},   // Lo  [15] DEVANAGARI LETTER CANDRA A..BENGALI ANJI
-	{0x0981, 0x0981, prExtend},    // Mn       BENGALI SIGN CANDRABINDU
-	{0x0982, 0x0983, prExtend},    // Mc   [2] BENGALI SIGN ANUSVARA..BENGALI SIGN VISARGA
-	{0x0985, 0x098C, prOLetter},   // Lo   [8] BENGALI LETTER A..BENGALI LETTER VOCALIC L
-	{0x098F, 0x0990, prOLetter},   // Lo   [2] BENGALI LETTER E..BENGALI LETTER AI
-	{0x0993, 0x09A8, prOLetter},   // Lo  [22] BENGALI LETTER O..BENGALI LETTER NA
-	{0x09AA, 0x09B0, prOLetter},   // Lo   [7] BENGALI LETTER PA..BENGALI LETTER RA
-	{0x09B2, 0x09B2, prOLetter},   // Lo       BENGALI LETTER LA
-	{0x09B6, 0x09B9, prOLetter},   // Lo   [4] BENGALI LETTER SHA..BENGALI LETTER HA
-	{0x09BC, 0x09BC, prExtend},    // Mn       BENGALI SIGN NUKTA
-	{0x09BD, 0x09BD, prOLetter},   // Lo       BENGALI SIGN AVAGRAHA
-	{0x09BE, 0x09C0, prExtend},    // Mc   [3] BENGALI VOWEL SIGN AA..BENGALI VOWEL SIGN II
-	{0x09C1, 0x09C4, prExtend},    // Mn   [4] BENGALI VOWEL SIGN U..BENGALI VOWEL SIGN VOCALIC RR
-	{0x09C7, 0x09C8, prExtend},    // Mc   [2] BENGALI VOWEL SIGN E..BENGALI VOWEL SIGN AI
-	{0x09CB, 0x09CC, prExtend},    // Mc   [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU
-	{0x09CD, 0x09CD, prExtend},    // Mn       BENGALI SIGN VIRAMA
-	{0x09CE, 0x09CE, prOLetter},   // Lo       BENGALI LETTER KHANDA TA
-	{0x09D7, 0x09D7, prExtend},    // Mc       BENGALI AU LENGTH MARK
-	{0x09DC, 0x09DD, prOLetter},   // Lo   [2] BENGALI LETTER RRA..BENGALI LETTER RHA
-	{0x09DF, 0x09E1, prOLetter},   // Lo   [3] BENGALI LETTER YYA..BENGALI LETTER VOCALIC LL
-	{0x09E2, 0x09E3, prExtend},    // Mn   [2] BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL
-	{0x09E6, 0x09EF, prNumeric},   // Nd  [10] BENGALI DIGIT ZERO..BENGALI DIGIT NINE
-	{0x09F0, 0x09F1, prOLetter},   // Lo   [2] BENGALI LETTER RA WITH MIDDLE DIAGONAL..BENGALI LETTER RA WITH LOWER DIAGONAL
-	{0x09FC, 0x09FC, prOLetter},   // Lo       BENGALI LETTER VEDIC ANUSVARA
-	{0x09FE, 0x09FE, prExtend},    // Mn       BENGALI SANDHI MARK
-	{0x0A01, 0x0A02, prExtend},    // Mn   [2] GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN BINDI
-	{0x0A03, 0x0A03, prExtend},    // Mc       GURMUKHI SIGN VISARGA
-	{0x0A05, 0x0A0A, prOLetter},   // Lo   [6] GURMUKHI LETTER A..GURMUKHI LETTER UU
-	{0x0A0F, 0x0A10, prOLetter},   // Lo   [2] GURMUKHI LETTER EE..GURMUKHI LETTER AI
-	{0x0A13, 0x0A28, prOLetter},   // Lo  [22] GURMUKHI LETTER OO..GURMUKHI LETTER NA
-	{0x0A2A, 0x0A30, prOLetter},   // Lo   [7] GURMUKHI LETTER PA..GURMUKHI LETTER RA
-	{0x0A32, 0x0A33, prOLetter},   // Lo   [2] GURMUKHI LETTER LA..GURMUKHI LETTER LLA
-	{0x0A35, 0x0A36, prOLetter},   // Lo   [2] GURMUKHI LETTER VA..GURMUKHI LETTER SHA
-	{0x0A38, 0x0A39, prOLetter},   // Lo   [2] GURMUKHI LETTER SA..GURMUKHI LETTER HA
-	{0x0A3C, 0x0A3C, prExtend},    // Mn       GURMUKHI SIGN NUKTA
-	{0x0A3E, 0x0A40, prExtend},    // Mc   [3] GURMUKHI VOWEL SIGN AA..GURMUKHI VOWEL SIGN II
-	{0x0A41, 0x0A42, prExtend},    // Mn   [2] GURMUKHI VOWEL SIGN U..GURMUKHI VOWEL SIGN UU
-	{0x0A47, 0x0A48, prExtend},    // Mn   [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI
-	{0x0A4B, 0x0A4D, prExtend},    // Mn   [3] GURMUKHI VOWEL SIGN OO..GURMUKHI SIGN VIRAMA
-	{0x0A51, 0x0A51, prExtend},    // Mn       GURMUKHI SIGN UDAAT
-	{0x0A59, 0x0A5C, prOLetter},   // Lo   [4] GURMUKHI LETTER KHHA..GURMUKHI LETTER RRA
-	{0x0A5E, 0x0A5E, prOLetter},   // Lo       GURMUKHI LETTER FA
-	{0x0A66, 0x0A6F, prNumeric},   // Nd  [10] GURMUKHI DIGIT ZERO..GURMUKHI DIGIT NINE
-	{0x0A70, 0x0A71, prExtend},    // Mn   [2] GURMUKHI TIPPI..GURMUKHI ADDAK
-	{0x0A72, 0x0A74, prOLetter},   // Lo   [3] GURMUKHI IRI..GURMUKHI EK ONKAR
-	{0x0A75, 0x0A75, prExtend},    // Mn       GURMUKHI SIGN YAKASH
-	{0x0A81, 0x0A82, prExtend},    // Mn   [2] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN ANUSVARA
-	{0x0A83, 0x0A83, prExtend},    // Mc       GUJARATI SIGN VISARGA
-	{0x0A85, 0x0A8D, prOLetter},   // Lo   [9] GUJARATI LETTER A..GUJARATI VOWEL CANDRA E
-	{0x0A8F, 0x0A91, prOLetter},   // Lo   [3] GUJARATI LETTER E..GUJARATI VOWEL CANDRA O
-	{0x0A93, 0x0AA8, prOLetter},   // Lo  [22] GUJARATI LETTER O..GUJARATI LETTER NA
-	{0x0AAA, 0x0AB0, prOLetter},   // Lo   [7] GUJARATI LETTER PA..GUJARATI LETTER RA
-	{0x0AB2, 0x0AB3, prOLetter},   // Lo   [2] GUJARATI LETTER LA..GUJARATI LETTER LLA
-	{0x0AB5, 0x0AB9, prOLetter},   // Lo   [5] GUJARATI LETTER VA..GUJARATI LETTER HA
-	{0x0ABC, 0x0ABC, prExtend},    // Mn       GUJARATI SIGN NUKTA
-	{0x0ABD, 0x0ABD, prOLetter},   // Lo       GUJARATI SIGN AVAGRAHA
-	{0x0ABE, 0x0AC0, prExtend},    // Mc   [3] GUJARATI VOWEL SIGN AA..GUJARATI VOWEL SIGN II
-	{0x0AC1, 0x0AC5, prExtend},    // Mn   [5] GUJARATI VOWEL SIGN U..GUJARATI VOWEL SIGN CANDRA E
-	{0x0AC7, 0x0AC8, prExtend},    // Mn   [2] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN AI
-	{0x0AC9, 0x0AC9, prExtend},    // Mc       GUJARATI VOWEL SIGN CANDRA O
-	{0x0ACB, 0x0ACC, prExtend},    // Mc   [2] GUJARATI VOWEL SIGN O..GUJARATI VOWEL SIGN AU
-	{0x0ACD, 0x0ACD, prExtend},    // Mn       GUJARATI SIGN VIRAMA
-	{0x0AD0, 0x0AD0, prOLetter},   // Lo       GUJARATI OM
-	{0x0AE0, 0x0AE1, prOLetter},   // Lo   [2] GUJARATI LETTER VOCALIC RR..GUJARATI LETTER VOCALIC LL
-	{0x0AE2, 0x0AE3, prExtend},    // Mn   [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL
-	{0x0AE6, 0x0AEF, prNumeric},   // Nd  [10] GUJARATI DIGIT ZERO..GUJARATI DIGIT NINE
-	{0x0AF9, 0x0AF9, prOLetter},   // Lo       GUJARATI LETTER ZHA
-	{0x0AFA, 0x0AFF, prExtend},    // Mn   [6] GUJARATI SIGN SUKUN..GUJARATI SIGN TWO-CIRCLE NUKTA ABOVE
-	{0x0B01, 0x0B01, prExtend},    // Mn       ORIYA SIGN CANDRABINDU
-	{0x0B02, 0x0B03, prExtend},    // Mc   [2] ORIYA SIGN ANUSVARA..ORIYA SIGN VISARGA
-	{0x0B05, 0x0B0C, prOLetter},   // Lo   [8] ORIYA LETTER A..ORIYA LETTER VOCALIC L
-	{0x0B0F, 0x0B10, prOLetter},   // Lo   [2] ORIYA LETTER E..ORIYA LETTER AI
-	{0x0B13, 0x0B28, prOLetter},   // Lo  [22] ORIYA LETTER O..ORIYA LETTER NA
-	{0x0B2A, 0x0B30, prOLetter},   // Lo   [7] ORIYA LETTER PA..ORIYA LETTER RA
-	{0x0B32, 0x0B33, prOLetter},   // Lo   [2] ORIYA LETTER LA..ORIYA LETTER LLA
-	{0x0B35, 0x0B39, prOLetter},   // Lo   [5] ORIYA LETTER VA..ORIYA LETTER HA
-	{0x0B3C, 0x0B3C, prExtend},    // Mn       ORIYA SIGN NUKTA
-	{0x0B3D, 0x0B3D, prOLetter},   // Lo       ORIYA SIGN AVAGRAHA
-	{0x0B3E, 0x0B3E, prExtend},    // Mc       ORIYA VOWEL SIGN AA
-	{0x0B3F, 0x0B3F, prExtend},    // Mn       ORIYA VOWEL SIGN I
-	{0x0B40, 0x0B40, prExtend},    // Mc       ORIYA VOWEL SIGN II
-	{0x0B41, 0x0B44, prExtend},    // Mn   [4] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC RR
-	{0x0B47, 0x0B48, prExtend},    // Mc   [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI
-	{0x0B4B, 0x0B4C, prExtend},    // Mc   [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU
-	{0x0B4D, 0x0B4D, prExtend},    // Mn       ORIYA SIGN VIRAMA
-	{0x0B55, 0x0B56, prExtend},    // Mn   [2] ORIYA SIGN OVERLINE..ORIYA AI LENGTH MARK
-	{0x0B57, 0x0B57, prExtend},    // Mc       ORIYA AU LENGTH MARK
-	{0x0B5C, 0x0B5D, prOLetter},   // Lo   [2] ORIYA LETTER RRA..ORIYA LETTER RHA
-	{0x0B5F, 0x0B61, prOLetter},   // Lo   [3] ORIYA LETTER YYA..ORIYA LETTER VOCALIC LL
-	{0x0B62, 0x0B63, prExtend},    // Mn   [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL
-	{0x0B66, 0x0B6F, prNumeric},   // Nd  [10] ORIYA DIGIT ZERO..ORIYA DIGIT NINE
-	{0x0B71, 0x0B71, prOLetter},   // Lo       ORIYA LETTER WA
-	{0x0B82, 0x0B82, prExtend},    // Mn       TAMIL SIGN ANUSVARA
-	{0x0B83, 0x0B83, prOLetter},   // Lo       TAMIL SIGN VISARGA
-	{0x0B85, 0x0B8A, prOLetter},   // Lo   [6] TAMIL LETTER A..TAMIL LETTER UU
-	{0x0B8E, 0x0B90, prOLetter},   // Lo   [3] TAMIL LETTER E..TAMIL LETTER AI
-	{0x0B92, 0x0B95, prOLetter},   // Lo   [4] TAMIL LETTER O..TAMIL LETTER KA
-	{0x0B99, 0x0B9A, prOLetter},   // Lo   [2] TAMIL LETTER NGA..TAMIL LETTER CA
-	{0x0B9C, 0x0B9C, prOLetter},   // Lo       TAMIL LETTER JA
-	{0x0B9E, 0x0B9F, prOLetter},   // Lo   [2] TAMIL LETTER NYA..TAMIL LETTER TTA
-	{0x0BA3, 0x0BA4, prOLetter},   // Lo   [2] TAMIL LETTER NNA..TAMIL LETTER TA
-	{0x0BA8, 0x0BAA, prOLetter},   // Lo   [3] TAMIL LETTER NA..TAMIL LETTER PA
-	{0x0BAE, 0x0BB9, prOLetter},   // Lo  [12] TAMIL LETTER MA..TAMIL LETTER HA
-	{0x0BBE, 0x0BBF, prExtend},    // Mc   [2] TAMIL VOWEL SIGN AA..TAMIL VOWEL SIGN I
-	{0x0BC0, 0x0BC0, prExtend},    // Mn       TAMIL VOWEL SIGN II
-	{0x0BC1, 0x0BC2, prExtend},    // Mc   [2] TAMIL VOWEL SIGN U..TAMIL VOWEL SIGN UU
-	{0x0BC6, 0x0BC8, prExtend},    // Mc   [3] TAMIL VOWEL SIGN E..TAMIL VOWEL SIGN AI
-	{0x0BCA, 0x0BCC, prExtend},    // Mc   [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU
-	{0x0BCD, 0x0BCD, prExtend},    // Mn       TAMIL SIGN VIRAMA
-	{0x0BD0, 0x0BD0, prOLetter},   // Lo       TAMIL OM
-	{0x0BD7, 0x0BD7, prExtend},    // Mc       TAMIL AU LENGTH MARK
-	{0x0BE6, 0x0BEF, prNumeric},   // Nd  [10] TAMIL DIGIT ZERO..TAMIL DIGIT NINE
-	{0x0C00, 0x0C00, prExtend},    // Mn       TELUGU SIGN COMBINING CANDRABINDU ABOVE
-	{0x0C01, 0x0C03, prExtend},    // Mc   [3] TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA
-	{0x0C04, 0x0C04, prExtend},    // Mn       TELUGU SIGN COMBINING ANUSVARA ABOVE
-	{0x0C05, 0x0C0C, prOLetter},   // Lo   [8] TELUGU LETTER A..TELUGU LETTER VOCALIC L
-	{0x0C0E, 0x0C10, prOLetter},   // Lo   [3] TELUGU LETTER E..TELUGU LETTER AI
-	{0x0C12, 0x0C28, prOLetter},   // Lo  [23] TELUGU LETTER O..TELUGU LETTER NA
-	{0x0C2A, 0x0C39, prOLetter},   // Lo  [16] TELUGU LETTER PA..TELUGU LETTER HA
-	{0x0C3C, 0x0C3C, prExtend},    // Mn       TELUGU SIGN NUKTA
-	{0x0C3D, 0x0C3D, prOLetter},   // Lo       TELUGU SIGN AVAGRAHA
-	{0x0C3E, 0x0C40, prExtend},    // Mn   [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II
-	{0x0C41, 0x0C44, prExtend},    // Mc   [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR
-	{0x0C46, 0x0C48, prExtend},    // Mn   [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI
-	{0x0C4A, 0x0C4D, prExtend},    // Mn   [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA
-	{0x0C55, 0x0C56, prExtend},    // Mn   [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK
-	{0x0C58, 0x0C5A, prOLetter},   // Lo   [3] TELUGU LETTER TSA..TELUGU LETTER RRRA
-	{0x0C5D, 0x0C5D, prOLetter},   // Lo       TELUGU LETTER NAKAARA POLLU
-	{0x0C60, 0x0C61, prOLetter},   // Lo   [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL
-	{0x0C62, 0x0C63, prExtend},    // Mn   [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL
-	{0x0C66, 0x0C6F, prNumeric},   // Nd  [10] TELUGU DIGIT ZERO..TELUGU DIGIT NINE
-	{0x0C80, 0x0C80, prOLetter},   // Lo       KANNADA SIGN SPACING CANDRABINDU
-	{0x0C81, 0x0C81, prExtend},    // Mn       KANNADA SIGN CANDRABINDU
-	{0x0C82, 0x0C83, prExtend},    // Mc   [2] KANNADA SIGN ANUSVARA..KANNADA SIGN VISARGA
-	{0x0C85, 0x0C8C, prOLetter},   // Lo   [8] KANNADA LETTER A..KANNADA LETTER VOCALIC L
-	{0x0C8E, 0x0C90, prOLetter},   // Lo   [3] KANNADA LETTER E..KANNADA LETTER AI
-	{0x0C92, 0x0CA8, prOLetter},   // Lo  [23] KANNADA LETTER O..KANNADA LETTER NA
-	{0x0CAA, 0x0CB3, prOLetter},   // Lo  [10] KANNADA LETTER PA..KANNADA LETTER LLA
-	{0x0CB5, 0x0CB9, prOLetter},   // Lo   [5] KANNADA LETTER VA..KANNADA LETTER HA
-	{0x0CBC, 0x0CBC, prExtend},    // Mn       KANNADA SIGN NUKTA
-	{0x0CBD, 0x0CBD, prOLetter},   // Lo       KANNADA SIGN AVAGRAHA
-	{0x0CBE, 0x0CBE, prExtend},    // Mc       KANNADA VOWEL SIGN AA
-	{0x0CBF, 0x0CBF, prExtend},    // Mn       KANNADA VOWEL SIGN I
-	{0x0CC0, 0x0CC4, prExtend},    // Mc   [5] KANNADA VOWEL SIGN II..KANNADA VOWEL SIGN VOCALIC RR
-	{0x0CC6, 0x0CC6, prExtend},    // Mn       KANNADA VOWEL SIGN E
-	{0x0CC7, 0x0CC8, prExtend},    // Mc   [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI
-	{0x0CCA, 0x0CCB, prExtend},    // Mc   [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO
-	{0x0CCC, 0x0CCD, prExtend},    // Mn   [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA
-	{0x0CD5, 0x0CD6, prExtend},    // Mc   [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK
-	{0x0CDD, 0x0CDE, prOLetter},   // Lo   [2] KANNADA LETTER NAKAARA POLLU..KANNADA LETTER FA
-	{0x0CE0, 0x0CE1, prOLetter},   // Lo   [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL
-	{0x0CE2, 0x0CE3, prExtend},    // Mn   [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL
-	{0x0CE6, 0x0CEF, prNumeric},   // Nd  [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE
-	{0x0CF1, 0x0CF2, prOLetter},   // Lo   [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA
-	{0x0CF3, 0x0CF3, prExtend},    // Mc       KANNADA SIGN COMBINING ANUSVARA ABOVE RIGHT
-	{0x0D00, 0x0D01, prExtend},    // Mn   [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU
-	{0x0D02, 0x0D03, prExtend},    // Mc   [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA
-	{0x0D04, 0x0D0C, prOLetter},   // Lo   [9] MALAYALAM LETTER VEDIC ANUSVARA..MALAYALAM LETTER VOCALIC L
-	{0x0D0E, 0x0D10, prOLetter},   // Lo   [3] MALAYALAM LETTER E..MALAYALAM LETTER AI
-	{0x0D12, 0x0D3A, prOLetter},   // Lo  [41] MALAYALAM LETTER O..MALAYALAM LETTER TTTA
-	{0x0D3B, 0x0D3C, prExtend},    // Mn   [2] MALAYALAM SIGN VERTICAL BAR VIRAMA..MALAYALAM SIGN CIRCULAR VIRAMA
-	{0x0D3D, 0x0D3D, prOLetter},   // Lo       MALAYALAM SIGN AVAGRAHA
-	{0x0D3E, 0x0D40, prExtend},    // Mc   [3] MALAYALAM VOWEL SIGN AA..MALAYALAM VOWEL SIGN II
-	{0x0D41, 0x0D44, prExtend},    // Mn   [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR
-	{0x0D46, 0x0D48, prExtend},    // Mc   [3] MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI
-	{0x0D4A, 0x0D4C, prExtend},    // Mc   [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU
-	{0x0D4D, 0x0D4D, prExtend},    // Mn       MALAYALAM SIGN VIRAMA
-	{0x0D4E, 0x0D4E, prOLetter},   // Lo       MALAYALAM LETTER DOT REPH
-	{0x0D54, 0x0D56, prOLetter},   // Lo   [3] MALAYALAM LETTER CHILLU M..MALAYALAM LETTER CHILLU LLL
-	{0x0D57, 0x0D57, prExtend},    // Mc       MALAYALAM AU LENGTH MARK
-	{0x0D5F, 0x0D61, prOLetter},   // Lo   [3] MALAYALAM LETTER ARCHAIC II..MALAYALAM LETTER VOCALIC LL
-	{0x0D62, 0x0D63, prExtend},    // Mn   [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL
-	{0x0D66, 0x0D6F, prNumeric},   // Nd  [10] MALAYALAM DIGIT ZERO..MALAYALAM DIGIT NINE
-	{0x0D7A, 0x0D7F, prOLetter},   // Lo   [6] MALAYALAM LETTER CHILLU NN..MALAYALAM LETTER CHILLU K
-	{0x0D81, 0x0D81, prExtend},    // Mn       SINHALA SIGN CANDRABINDU
-	{0x0D82, 0x0D83, prExtend},    // Mc   [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA
-	{0x0D85, 0x0D96, prOLetter},   // Lo  [18] SINHALA LETTER AYANNA..SINHALA LETTER AUYANNA
-	{0x0D9A, 0x0DB1, prOLetter},   // Lo  [24] SINHALA LETTER ALPAPRAANA KAYANNA..SINHALA LETTER DANTAJA NAYANNA
-	{0x0DB3, 0x0DBB, prOLetter},   // Lo   [9] SINHALA LETTER SANYAKA DAYANNA..SINHALA LETTER RAYANNA
-	{0x0DBD, 0x0DBD, prOLetter},   // Lo       SINHALA LETTER DANTAJA LAYANNA
-	{0x0DC0, 0x0DC6, prOLetter},   // Lo   [7] SINHALA LETTER VAYANNA..SINHALA LETTER FAYANNA
-	{0x0DCA, 0x0DCA, prExtend},    // Mn       SINHALA SIGN AL-LAKUNA
-	{0x0DCF, 0x0DD1, prExtend},    // Mc   [3] SINHALA VOWEL SIGN AELA-PILLA..SINHALA VOWEL SIGN DIGA AEDA-PILLA
-	{0x0DD2, 0x0DD4, prExtend},    // Mn   [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA
-	{0x0DD6, 0x0DD6, prExtend},    // Mn       SINHALA VOWEL SIGN DIGA PAA-PILLA
-	{0x0DD8, 0x0DDF, prExtend},    // Mc   [8] SINHALA VOWEL SIGN GAETTA-PILLA..SINHALA VOWEL SIGN GAYANUKITTA
-	{0x0DE6, 0x0DEF, prNumeric},   // Nd  [10] SINHALA LITH DIGIT ZERO..SINHALA LITH DIGIT NINE
-	{0x0DF2, 0x0DF3, prExtend},    // Mc   [2] SINHALA VOWEL SIGN DIGA GAETTA-PILLA..SINHALA VOWEL SIGN DIGA GAYANUKITTA
-	{0x0E01, 0x0E30, prOLetter},   // Lo  [48] THAI CHARACTER KO KAI..THAI CHARACTER SARA A
-	{0x0E31, 0x0E31, prExtend},    // Mn       THAI CHARACTER MAI HAN-AKAT
-	{0x0E32, 0x0E33, prOLetter},   // Lo   [2] THAI CHARACTER SARA AA..THAI CHARACTER SARA AM
-	{0x0E34, 0x0E3A, prExtend},    // Mn   [7] THAI CHARACTER SARA I..THAI CHARACTER PHINTHU
-	{0x0E40, 0x0E45, prOLetter},   // Lo   [6] THAI CHARACTER SARA E..THAI CHARACTER LAKKHANGYAO
-	{0x0E46, 0x0E46, prOLetter},   // Lm       THAI CHARACTER MAIYAMOK
-	{0x0E47, 0x0E4E, prExtend},    // Mn   [8] THAI CHARACTER MAITAIKHU..THAI CHARACTER YAMAKKAN
-	{0x0E50, 0x0E59, prNumeric},   // Nd  [10] THAI DIGIT ZERO..THAI DIGIT NINE
-	{0x0E81, 0x0E82, prOLetter},   // Lo   [2] LAO LETTER KO..LAO LETTER KHO SUNG
-	{0x0E84, 0x0E84, prOLetter},   // Lo       LAO LETTER KHO TAM
-	{0x0E86, 0x0E8A, prOLetter},   // Lo   [5] LAO LETTER PALI GHA..LAO LETTER SO TAM
-	{0x0E8C, 0x0EA3, prOLetter},   // Lo  [24] LAO LETTER PALI JHA..LAO LETTER LO LING
-	{0x0EA5, 0x0EA5, prOLetter},   // Lo       LAO LETTER LO LOOT
-	{0x0EA7, 0x0EB0, prOLetter},   // Lo  [10] LAO LETTER WO..LAO VOWEL SIGN A
-	{0x0EB1, 0x0EB1, prExtend},    // Mn       LAO VOWEL SIGN MAI KAN
-	{0x0EB2, 0x0EB3, prOLetter},   // Lo   [2] LAO VOWEL SIGN AA..LAO VOWEL SIGN AM
-	{0x0EB4, 0x0EBC, prExtend},    // Mn   [9] LAO VOWEL SIGN I..LAO SEMIVOWEL SIGN LO
-	{0x0EBD, 0x0EBD, prOLetter},   // Lo       LAO SEMIVOWEL SIGN NYO
-	{0x0EC0, 0x0EC4, prOLetter},   // Lo   [5] LAO VOWEL SIGN E..LAO VOWEL SIGN AI
-	{0x0EC6, 0x0EC6, prOLetter},   // Lm       LAO KO LA
-	{0x0EC8, 0x0ECE, prExtend},    // Mn   [7] LAO TONE MAI EK..LAO YAMAKKAN
-	{0x0ED0, 0x0ED9, prNumeric},   // Nd  [10] LAO DIGIT ZERO..LAO DIGIT NINE
-	{0x0EDC, 0x0EDF, prOLetter},   // Lo   [4] LAO HO NO..LAO LETTER KHMU NYO
-	{0x0F00, 0x0F00, prOLetter},   // Lo       TIBETAN SYLLABLE OM
-	{0x0F18, 0x0F19, prExtend},    // Mn   [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS
-	{0x0F20, 0x0F29, prNumeric},   // Nd  [10] TIBETAN DIGIT ZERO..TIBETAN DIGIT NINE
-	{0x0F35, 0x0F35, prExtend},    // Mn       TIBETAN MARK NGAS BZUNG NYI ZLA
-	{0x0F37, 0x0F37, prExtend},    // Mn       TIBETAN MARK NGAS BZUNG SGOR RTAGS
-	{0x0F39, 0x0F39, prExtend},    // Mn       TIBETAN MARK TSA -PHRU
-	{0x0F3A, 0x0F3A, prClose},     // Ps       TIBETAN MARK GUG RTAGS GYON
-	{0x0F3B, 0x0F3B, prClose},     // Pe       TIBETAN MARK GUG RTAGS GYAS
-	{0x0F3C, 0x0F3C, prClose},     // Ps       TIBETAN MARK ANG KHANG GYON
-	{0x0F3D, 0x0F3D, prClose},     // Pe       TIBETAN MARK ANG KHANG GYAS
-	{0x0F3E, 0x0F3F, prExtend},    // Mc   [2] TIBETAN SIGN YAR TSHES..TIBETAN SIGN MAR TSHES
-	{0x0F40, 0x0F47, prOLetter},   // Lo   [8] TIBETAN LETTER KA..TIBETAN LETTER JA
-	{0x0F49, 0x0F6C, prOLetter},   // Lo  [36] TIBETAN LETTER NYA..TIBETAN LETTER RRA
-	{0x0F71, 0x0F7E, prExtend},    // Mn  [14] TIBETAN VOWEL SIGN AA..TIBETAN SIGN RJES SU NGA RO
-	{0x0F7F, 0x0F7F, prExtend},    // Mc       TIBETAN SIGN RNAM BCAD
-	{0x0F80, 0x0F84, prExtend},    // Mn   [5] TIBETAN VOWEL SIGN REVERSED I..TIBETAN MARK HALANTA
-	{0x0F86, 0x0F87, prExtend},    // Mn   [2] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS
-	{0x0F88, 0x0F8C, prOLetter},   // Lo   [5] TIBETAN SIGN LCE TSA CAN..TIBETAN SIGN INVERTED MCHU CAN
-	{0x0F8D, 0x0F97, prExtend},    // Mn  [11] TIBETAN SUBJOINED SIGN LCE TSA CAN..TIBETAN SUBJOINED LETTER JA
-	{0x0F99, 0x0FBC, prExtend},    // Mn  [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA
-	{0x0FC6, 0x0FC6, prExtend},    // Mn       TIBETAN SYMBOL PADMA GDAN
-	{0x1000, 0x102A, prOLetter},   // Lo  [43] MYANMAR LETTER KA..MYANMAR LETTER AU
-	{0x102B, 0x102C, prExtend},    // Mc   [2] MYANMAR VOWEL SIGN TALL AA..MYANMAR VOWEL SIGN AA
-	{0x102D, 0x1030, prExtend},    // Mn   [4] MYANMAR VOWEL SIGN I..MYANMAR VOWEL SIGN UU
-	{0x1031, 0x1031, prExtend},    // Mc       MYANMAR VOWEL SIGN E
-	{0x1032, 0x1037, prExtend},    // Mn   [6] MYANMAR VOWEL SIGN AI..MYANMAR SIGN DOT BELOW
-	{0x1038, 0x1038, prExtend},    // Mc       MYANMAR SIGN VISARGA
-	{0x1039, 0x103A, prExtend},    // Mn   [2] MYANMAR SIGN VIRAMA..MYANMAR SIGN ASAT
-	{0x103B, 0x103C, prExtend},    // Mc   [2] MYANMAR CONSONANT SIGN MEDIAL YA..MYANMAR CONSONANT SIGN MEDIAL RA
-	{0x103D, 0x103E, prExtend},    // Mn   [2] MYANMAR CONSONANT SIGN MEDIAL WA..MYANMAR CONSONANT SIGN MEDIAL HA
-	{0x103F, 0x103F, prOLetter},   // Lo       MYANMAR LETTER GREAT SA
-	{0x1040, 0x1049, prNumeric},   // Nd  [10] MYANMAR DIGIT ZERO..MYANMAR DIGIT NINE
-	{0x104A, 0x104B, prSTerm},     // Po   [2] MYANMAR SIGN LITTLE SECTION..MYANMAR SIGN SECTION
-	{0x1050, 0x1055, prOLetter},   // Lo   [6] MYANMAR LETTER SHA..MYANMAR LETTER VOCALIC LL
-	{0x1056, 0x1057, prExtend},    // Mc   [2] MYANMAR VOWEL SIGN VOCALIC R..MYANMAR VOWEL SIGN VOCALIC RR
-	{0x1058, 0x1059, prExtend},    // Mn   [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL
-	{0x105A, 0x105D, prOLetter},   // Lo   [4] MYANMAR LETTER MON NGA..MYANMAR LETTER MON BBE
-	{0x105E, 0x1060, prExtend},    // Mn   [3] MYANMAR CONSONANT SIGN MON MEDIAL NA..MYANMAR CONSONANT SIGN MON MEDIAL LA
-	{0x1061, 0x1061, prOLetter},   // Lo       MYANMAR LETTER SGAW KAREN SHA
-	{0x1062, 0x1064, prExtend},    // Mc   [3] MYANMAR VOWEL SIGN SGAW KAREN EU..MYANMAR TONE MARK SGAW KAREN KE PHO
-	{0x1065, 0x1066, prOLetter},   // Lo   [2] MYANMAR LETTER WESTERN PWO KAREN THA..MYANMAR LETTER WESTERN PWO KAREN PWA
-	{0x1067, 0x106D, prExtend},    // Mc   [7] MYANMAR VOWEL SIGN WESTERN PWO KAREN EU..MYANMAR SIGN WESTERN PWO KAREN TONE-5
-	{0x106E, 0x1070, prOLetter},   // Lo   [3] MYANMAR LETTER EASTERN PWO KAREN NNA..MYANMAR LETTER EASTERN PWO KAREN GHWA
-	{0x1071, 0x1074, prExtend},    // Mn   [4] MYANMAR VOWEL SIGN GEBA KAREN I..MYANMAR VOWEL SIGN KAYAH EE
-	{0x1075, 0x1081, prOLetter},   // Lo  [13] MYANMAR LETTER SHAN KA..MYANMAR LETTER SHAN HA
-	{0x1082, 0x1082, prExtend},    // Mn       MYANMAR CONSONANT SIGN SHAN MEDIAL WA
-	{0x1083, 0x1084, prExtend},    // Mc   [2] MYANMAR VOWEL SIGN SHAN AA..MYANMAR VOWEL SIGN SHAN E
-	{0x1085, 0x1086, prExtend},    // Mn   [2] MYANMAR VOWEL SIGN SHAN E ABOVE..MYANMAR VOWEL SIGN SHAN FINAL Y
-	{0x1087, 0x108C, prExtend},    // Mc   [6] MYANMAR SIGN SHAN TONE-2..MYANMAR SIGN SHAN COUNCIL TONE-3
-	{0x108D, 0x108D, prExtend},    // Mn       MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE
-	{0x108E, 0x108E, prOLetter},   // Lo       MYANMAR LETTER RUMAI PALAUNG FA
-	{0x108F, 0x108F, prExtend},    // Mc       MYANMAR SIGN RUMAI PALAUNG TONE-5
-	{0x1090, 0x1099, prNumeric},   // Nd  [10] MYANMAR SHAN DIGIT ZERO..MYANMAR SHAN DIGIT NINE
-	{0x109A, 0x109C, prExtend},    // Mc   [3] MYANMAR SIGN KHAMTI TONE-1..MYANMAR VOWEL SIGN AITON A
-	{0x109D, 0x109D, prExtend},    // Mn       MYANMAR VOWEL SIGN AITON AI
-	{0x10A0, 0x10C5, prUpper},     // L&  [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE
-	{0x10C7, 0x10C7, prUpper},     // L&       GEORGIAN CAPITAL LETTER YN
-	{0x10CD, 0x10CD, prUpper},     // L&       GEORGIAN CAPITAL LETTER AEN
-	{0x10D0, 0x10FA, prOLetter},   // L&  [43] GEORGIAN LETTER AN..GEORGIAN LETTER AIN
-	{0x10FC, 0x10FC, prLower},     // Lm       MODIFIER LETTER GEORGIAN NAR
-	{0x10FD, 0x10FF, prOLetter},   // L&   [3] GEORGIAN LETTER AEN..GEORGIAN LETTER LABIAL SIGN
-	{0x1100, 0x1248, prOLetter},   // Lo [329] HANGUL CHOSEONG KIYEOK..ETHIOPIC SYLLABLE QWA
-	{0x124A, 0x124D, prOLetter},   // Lo   [4] ETHIOPIC SYLLABLE QWI..ETHIOPIC SYLLABLE QWE
-	{0x1250, 0x1256, prOLetter},   // Lo   [7] ETHIOPIC SYLLABLE QHA..ETHIOPIC SYLLABLE QHO
-	{0x1258, 0x1258, prOLetter},   // Lo       ETHIOPIC SYLLABLE QHWA
-	{0x125A, 0x125D, prOLetter},   // Lo   [4] ETHIOPIC SYLLABLE QHWI..ETHIOPIC SYLLABLE QHWE
-	{0x1260, 0x1288, prOLetter},   // Lo  [41] ETHIOPIC SYLLABLE BA..ETHIOPIC SYLLABLE XWA
-	{0x128A, 0x128D, prOLetter},   // Lo   [4] ETHIOPIC SYLLABLE XWI..ETHIOPIC SYLLABLE XWE
-	{0x1290, 0x12B0, prOLetter},   // Lo  [33] ETHIOPIC SYLLABLE NA..ETHIOPIC SYLLABLE KWA
-	{0x12B2, 0x12B5, prOLetter},   // Lo   [4] ETHIOPIC SYLLABLE KWI..ETHIOPIC SYLLABLE KWE
-	{0x12B8, 0x12BE, prOLetter},   // Lo   [7] ETHIOPIC SYLLABLE KXA..ETHIOPIC SYLLABLE KXO
-	{0x12C0, 0x12C0, prOLetter},   // Lo       ETHIOPIC SYLLABLE KXWA
-	{0x12C2, 0x12C5, prOLetter},   // Lo   [4] ETHIOPIC SYLLABLE KXWI..ETHIOPIC SYLLABLE KXWE
-	{0x12C8, 0x12D6, prOLetter},   // Lo  [15] ETHIOPIC SYLLABLE WA..ETHIOPIC SYLLABLE PHARYNGEAL O
-	{0x12D8, 0x1310, prOLetter},   // Lo  [57] ETHIOPIC SYLLABLE ZA..ETHIOPIC SYLLABLE GWA
-	{0x1312, 0x1315, prOLetter},   // Lo   [4] ETHIOPIC SYLLABLE GWI..ETHIOPIC SYLLABLE GWE
-	{0x1318, 0x135A, prOLetter},   // Lo  [67] ETHIOPIC SYLLABLE GGA..ETHIOPIC SYLLABLE FYA
-	{0x135D, 0x135F, prExtend},    // Mn   [3] ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK..ETHIOPIC COMBINING GEMINATION MARK
-	{0x1362, 0x1362, prSTerm},     // Po       ETHIOPIC FULL STOP
-	{0x1367, 0x1368, prSTerm},     // Po   [2] ETHIOPIC QUESTION MARK..ETHIOPIC PARAGRAPH SEPARATOR
-	{0x1380, 0x138F, prOLetter},   // Lo  [16] ETHIOPIC SYLLABLE SEBATBEIT MWA..ETHIOPIC SYLLABLE PWE
-	{0x13A0, 0x13F5, prUpper},     // L&  [86] CHEROKEE LETTER A..CHEROKEE LETTER MV
-	{0x13F8, 0x13FD, prLower},     // L&   [6] CHEROKEE SMALL LETTER YE..CHEROKEE SMALL LETTER MV
-	{0x1401, 0x166C, prOLetter},   // Lo [620] CANADIAN SYLLABICS E..CANADIAN SYLLABICS CARRIER TTSA
-	{0x166E, 0x166E, prSTerm},     // Po       CANADIAN SYLLABICS FULL STOP
-	{0x166F, 0x167F, prOLetter},   // Lo  [17] CANADIAN SYLLABICS QAI..CANADIAN SYLLABICS BLACKFOOT W
-	{0x1680, 0x1680, prSp},        // Zs       OGHAM SPACE MARK
-	{0x1681, 0x169A, prOLetter},   // Lo  [26] OGHAM LETTER BEITH..OGHAM LETTER PEITH
-	{0x169B, 0x169B, prClose},     // Ps       OGHAM FEATHER MARK
-	{0x169C, 0x169C, prClose},     // Pe       OGHAM REVERSED FEATHER MARK
-	{0x16A0, 0x16EA, prOLetter},   // Lo  [75] RUNIC LETTER FEHU FEOH FE F..RUNIC LETTER X
-	{0x16EE, 0x16F0, prOLetter},   // Nl   [3] RUNIC ARLAUG SYMBOL..RUNIC BELGTHOR SYMBOL
-	{0x16F1, 0x16F8, prOLetter},   // Lo   [8] RUNIC LETTER K..RUNIC LETTER FRANKS CASKET AESC
-	{0x1700, 0x1711, prOLetter},   // Lo  [18] TAGALOG LETTER A..TAGALOG LETTER HA
-	{0x1712, 0x1714, prExtend},    // Mn   [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA
-	{0x1715, 0x1715, prExtend},    // Mc       TAGALOG SIGN PAMUDPOD
-	{0x171F, 0x1731, prOLetter},   // Lo  [19] TAGALOG LETTER ARCHAIC RA..HANUNOO LETTER HA
-	{0x1732, 0x1733, prExtend},    // Mn   [2] HANUNOO VOWEL SIGN I..HANUNOO VOWEL SIGN U
-	{0x1734, 0x1734, prExtend},    // Mc       HANUNOO SIGN PAMUDPOD
-	{0x1735, 0x1736, prSTerm},     // Po   [2] PHILIPPINE SINGLE PUNCTUATION..PHILIPPINE DOUBLE PUNCTUATION
-	{0x1740, 0x1751, prOLetter},   // Lo  [18] BUHID LETTER A..BUHID LETTER HA
-	{0x1752, 0x1753, prExtend},    // Mn   [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U
-	{0x1760, 0x176C, prOLetter},   // Lo  [13] TAGBANWA LETTER A..TAGBANWA LETTER YA
-	{0x176E, 0x1770, prOLetter},   // Lo   [3] TAGBANWA LETTER LA..TAGBANWA LETTER SA
-	{0x1772, 0x1773, prExtend},    // Mn   [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U
-	{0x1780, 0x17B3, prOLetter},   // Lo  [52] KHMER LETTER KA..KHMER INDEPENDENT VOWEL QAU
-	{0x17B4, 0x17B5, prExtend},    // Mn   [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA
-	{0x17B6, 0x17B6, prExtend},    // Mc       KHMER VOWEL SIGN AA
-	{0x17B7, 0x17BD, prExtend},    // Mn   [7] KHMER VOWEL SIGN I..KHMER VOWEL SIGN UA
-	{0x17BE, 0x17C5, prExtend},    // Mc   [8] KHMER VOWEL SIGN OE..KHMER VOWEL SIGN AU
-	{0x17C6, 0x17C6, prExtend},    // Mn       KHMER SIGN NIKAHIT
-	{0x17C7, 0x17C8, prExtend},    // Mc   [2] KHMER SIGN REAHMUK..KHMER SIGN YUUKALEAPINTU
-	{0x17C9, 0x17D3, prExtend},    // Mn  [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT
-	{0x17D7, 0x17D7, prOLetter},   // Lm       KHMER SIGN LEK TOO
-	{0x17DC, 0x17DC, prOLetter},   // Lo       KHMER SIGN AVAKRAHASANYA
-	{0x17DD, 0x17DD, prExtend},    // Mn       KHMER SIGN ATTHACAN
-	{0x17E0, 0x17E9, prNumeric},   // Nd  [10] KHMER DIGIT ZERO..KHMER DIGIT NINE
-	{0x1802, 0x1802, prSContinue}, // Po       MONGOLIAN COMMA
-	{0x1803, 0x1803, prSTerm},     // Po       MONGOLIAN FULL STOP
-	{0x1808, 0x1808, prSContinue}, // Po       MONGOLIAN MANCHU COMMA
-	{0x1809, 0x1809, prSTerm},     // Po       MONGOLIAN MANCHU FULL STOP
-	{0x180B, 0x180D, prExtend},    // Mn   [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE
-	{0x180E, 0x180E, prFormat},    // Cf       MONGOLIAN VOWEL SEPARATOR
-	{0x180F, 0x180F, prExtend},    // Mn       MONGOLIAN FREE VARIATION SELECTOR FOUR
-	{0x1810, 0x1819, prNumeric},   // Nd  [10] MONGOLIAN DIGIT ZERO..MONGOLIAN DIGIT NINE
-	{0x1820, 0x1842, prOLetter},   // Lo  [35] MONGOLIAN LETTER A..MONGOLIAN LETTER CHI
-	{0x1843, 0x1843, prOLetter},   // Lm       MONGOLIAN LETTER TODO LONG VOWEL SIGN
-	{0x1844, 0x1878, prOLetter},   // Lo  [53] MONGOLIAN LETTER TODO E..MONGOLIAN LETTER CHA WITH TWO DOTS
-	{0x1880, 0x1884, prOLetter},   // Lo   [5] MONGOLIAN LETTER ALI GALI ANUSVARA ONE..MONGOLIAN LETTER ALI GALI INVERTED UBADAMA
-	{0x1885, 0x1886, prExtend},    // Mn   [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA
-	{0x1887, 0x18A8, prOLetter},   // Lo  [34] MONGOLIAN LETTER ALI GALI A..MONGOLIAN LETTER MANCHU ALI GALI BHA
-	{0x18A9, 0x18A9, prExtend},    // Mn       MONGOLIAN LETTER ALI GALI DAGALGA
-	{0x18AA, 0x18AA, prOLetter},   // Lo       MONGOLIAN LETTER MANCHU ALI GALI LHA
-	{0x18B0, 0x18F5, prOLetter},   // Lo  [70] CANADIAN SYLLABICS OY..CANADIAN SYLLABICS CARRIER DENTAL S
-	{0x1900, 0x191E, prOLetter},   // Lo  [31] LIMBU VOWEL-CARRIER LETTER..LIMBU LETTER TRA
-	{0x1920, 0x1922, prExtend},    // Mn   [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U
-	{0x1923, 0x1926, prExtend},    // Mc   [4] LIMBU VOWEL SIGN EE..LIMBU VOWEL SIGN AU
-	{0x1927, 0x1928, prExtend},    // Mn   [2] LIMBU VOWEL SIGN E..LIMBU VOWEL SIGN O
-	{0x1929, 0x192B, prExtend},    // Mc   [3] LIMBU SUBJOINED LETTER YA..LIMBU SUBJOINED LETTER WA
-	{0x1930, 0x1931, prExtend},    // Mc   [2] LIMBU SMALL LETTER KA..LIMBU SMALL LETTER NGA
-	{0x1932, 0x1932, prExtend},    // Mn       LIMBU SMALL LETTER ANUSVARA
-	{0x1933, 0x1938, prExtend},    // Mc   [6] LIMBU SMALL LETTER TA..LIMBU SMALL LETTER LA
-	{0x1939, 0x193B, prExtend},    // Mn   [3] LIMBU SIGN MUKPHRENG..LIMBU SIGN SA-I
-	{0x1944, 0x1945, prSTerm},     // Po   [2] LIMBU EXCLAMATION MARK..LIMBU QUESTION MARK
-	{0x1946, 0x194F, prNumeric},   // Nd  [10] LIMBU DIGIT ZERO..LIMBU DIGIT NINE
-	{0x1950, 0x196D, prOLetter},   // Lo  [30] TAI LE LETTER KA..TAI LE LETTER AI
-	{0x1970, 0x1974, prOLetter},   // Lo   [5] TAI LE LETTER TONE-2..TAI LE LETTER TONE-6
-	{0x1980, 0x19AB, prOLetter},   // Lo  [44] NEW TAI LUE LETTER HIGH QA..NEW TAI LUE LETTER LOW SUA
-	{0x19B0, 0x19C9, prOLetter},   // Lo  [26] NEW TAI LUE VOWEL SIGN VOWEL SHORTENER..NEW TAI LUE TONE MARK-2
-	{0x19D0, 0x19D9, prNumeric},   // Nd  [10] NEW TAI LUE DIGIT ZERO..NEW TAI LUE DIGIT NINE
-	{0x1A00, 0x1A16, prOLetter},   // Lo  [23] BUGINESE LETTER KA..BUGINESE LETTER HA
-	{0x1A17, 0x1A18, prExtend},    // Mn   [2] BUGINESE VOWEL SIGN I..BUGINESE VOWEL SIGN U
-	{0x1A19, 0x1A1A, prExtend},    // Mc   [2] BUGINESE VOWEL SIGN E..BUGINESE VOWEL SIGN O
-	{0x1A1B, 0x1A1B, prExtend},    // Mn       BUGINESE VOWEL SIGN AE
-	{0x1A20, 0x1A54, prOLetter},   // Lo  [53] TAI THAM LETTER HIGH KA..TAI THAM LETTER GREAT SA
-	{0x1A55, 0x1A55, prExtend},    // Mc       TAI THAM CONSONANT SIGN MEDIAL RA
-	{0x1A56, 0x1A56, prExtend},    // Mn       TAI THAM CONSONANT SIGN MEDIAL LA
-	{0x1A57, 0x1A57, prExtend},    // Mc       TAI THAM CONSONANT SIGN LA TANG LAI
-	{0x1A58, 0x1A5E, prExtend},    // Mn   [7] TAI THAM SIGN MAI KANG LAI..TAI THAM CONSONANT SIGN SA
-	{0x1A60, 0x1A60, prExtend},    // Mn       TAI THAM SIGN SAKOT
-	{0x1A61, 0x1A61, prExtend},    // Mc       TAI THAM VOWEL SIGN A
-	{0x1A62, 0x1A62, prExtend},    // Mn       TAI THAM VOWEL SIGN MAI SAT
-	{0x1A63, 0x1A64, prExtend},    // Mc   [2] TAI THAM VOWEL SIGN AA..TAI THAM VOWEL SIGN TALL AA
-	{0x1A65, 0x1A6C, prExtend},    // Mn   [8] TAI THAM VOWEL SIGN I..TAI THAM VOWEL SIGN OA BELOW
-	{0x1A6D, 0x1A72, prExtend},    // Mc   [6] TAI THAM VOWEL SIGN OY..TAI THAM VOWEL SIGN THAM AI
-	{0x1A73, 0x1A7C, prExtend},    // Mn  [10] TAI THAM VOWEL SIGN OA ABOVE..TAI THAM SIGN KHUEN-LUE KARAN
-	{0x1A7F, 0x1A7F, prExtend},    // Mn       TAI THAM COMBINING CRYPTOGRAMMIC DOT
-	{0x1A80, 0x1A89, prNumeric},   // Nd  [10] TAI THAM HORA DIGIT ZERO..TAI THAM HORA DIGIT NINE
-	{0x1A90, 0x1A99, prNumeric},   // Nd  [10] TAI THAM THAM DIGIT ZERO..TAI THAM THAM DIGIT NINE
-	{0x1AA7, 0x1AA7, prOLetter},   // Lm       TAI THAM SIGN MAI YAMOK
-	{0x1AA8, 0x1AAB, prSTerm},     // Po   [4] TAI THAM SIGN KAAN..TAI THAM SIGN SATKAANKUU
-	{0x1AB0, 0x1ABD, prExtend},    // Mn  [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW
-	{0x1ABE, 0x1ABE, prExtend},    // Me       COMBINING PARENTHESES OVERLAY
-	{0x1ABF, 0x1ACE, prExtend},    // Mn  [16] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER INSULAR T
-	{0x1B00, 0x1B03, prExtend},    // Mn   [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG
-	{0x1B04, 0x1B04, prExtend},    // Mc       BALINESE SIGN BISAH
-	{0x1B05, 0x1B33, prOLetter},   // Lo  [47] BALINESE LETTER AKARA..BALINESE LETTER HA
-	{0x1B34, 0x1B34, prExtend},    // Mn       BALINESE SIGN REREKAN
-	{0x1B35, 0x1B35, prExtend},    // Mc       BALINESE VOWEL SIGN TEDUNG
-	{0x1B36, 0x1B3A, prExtend},    // Mn   [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA
-	{0x1B3B, 0x1B3B, prExtend},    // Mc       BALINESE VOWEL SIGN RA REPA TEDUNG
-	{0x1B3C, 0x1B3C, prExtend},    // Mn       BALINESE VOWEL SIGN LA LENGA
-	{0x1B3D, 0x1B41, prExtend},    // Mc   [5] BALINESE VOWEL SIGN LA LENGA TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG
-	{0x1B42, 0x1B42, prExtend},    // Mn       BALINESE VOWEL SIGN PEPET
-	{0x1B43, 0x1B44, prExtend},    // Mc   [2] BALINESE VOWEL SIGN PEPET TEDUNG..BALINESE ADEG ADEG
-	{0x1B45, 0x1B4C, prOLetter},   // Lo   [8] BALINESE LETTER KAF SASAK..BALINESE LETTER ARCHAIC JNYA
-	{0x1B50, 0x1B59, prNumeric},   // Nd  [10] BALINESE DIGIT ZERO..BALINESE DIGIT NINE
-	{0x1B5A, 0x1B5B, prSTerm},     // Po   [2] BALINESE PANTI..BALINESE PAMADA
-	{0x1B5E, 0x1B5F, prSTerm},     // Po   [2] BALINESE CARIK SIKI..BALINESE CARIK PAREREN
-	{0x1B6B, 0x1B73, prExtend},    // Mn   [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG
-	{0x1B7D, 0x1B7E, prSTerm},     // Po   [2] BALINESE PANTI LANTANG..BALINESE PAMADA LANTANG
-	{0x1B80, 0x1B81, prExtend},    // Mn   [2] SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PANGLAYAR
-	{0x1B82, 0x1B82, prExtend},    // Mc       SUNDANESE SIGN PANGWISAD
-	{0x1B83, 0x1BA0, prOLetter},   // Lo  [30] SUNDANESE LETTER A..SUNDANESE LETTER HA
-	{0x1BA1, 0x1BA1, prExtend},    // Mc       SUNDANESE CONSONANT SIGN PAMINGKAL
-	{0x1BA2, 0x1BA5, prExtend},    // Mn   [4] SUNDANESE CONSONANT SIGN PANYAKRA..SUNDANESE VOWEL SIGN PANYUKU
-	{0x1BA6, 0x1BA7, prExtend},    // Mc   [2] SUNDANESE VOWEL SIGN PANAELAENG..SUNDANESE VOWEL SIGN PANOLONG
-	{0x1BA8, 0x1BA9, prExtend},    // Mn   [2] SUNDANESE VOWEL SIGN PAMEPET..SUNDANESE VOWEL SIGN PANEULEUNG
-	{0x1BAA, 0x1BAA, prExtend},    // Mc       SUNDANESE SIGN PAMAAEH
-	{0x1BAB, 0x1BAD, prExtend},    // Mn   [3] SUNDANESE SIGN VIRAMA..SUNDANESE CONSONANT SIGN PASANGAN WA
-	{0x1BAE, 0x1BAF, prOLetter},   // Lo   [2] SUNDANESE LETTER KHA..SUNDANESE LETTER SYA
-	{0x1BB0, 0x1BB9, prNumeric},   // Nd  [10] SUNDANESE DIGIT ZERO..SUNDANESE DIGIT NINE
-	{0x1BBA, 0x1BE5, prOLetter},   // Lo  [44] SUNDANESE AVAGRAHA..BATAK LETTER U
-	{0x1BE6, 0x1BE6, prExtend},    // Mn       BATAK SIGN TOMPI
-	{0x1BE7, 0x1BE7, prExtend},    // Mc       BATAK VOWEL SIGN E
-	{0x1BE8, 0x1BE9, prExtend},    // Mn   [2] BATAK VOWEL SIGN PAKPAK E..BATAK VOWEL SIGN EE
-	{0x1BEA, 0x1BEC, prExtend},    // Mc   [3] BATAK VOWEL SIGN I..BATAK VOWEL SIGN O
-	{0x1BED, 0x1BED, prExtend},    // Mn       BATAK VOWEL SIGN KARO O
-	{0x1BEE, 0x1BEE, prExtend},    // Mc       BATAK VOWEL SIGN U
-	{0x1BEF, 0x1BF1, prExtend},    // Mn   [3] BATAK VOWEL SIGN U FOR SIMALUNGUN SA..BATAK CONSONANT SIGN H
-	{0x1BF2, 0x1BF3, prExtend},    // Mc   [2] BATAK PANGOLAT..BATAK PANONGONAN
-	{0x1C00, 0x1C23, prOLetter},   // Lo  [36] LEPCHA LETTER KA..LEPCHA LETTER A
-	{0x1C24, 0x1C2B, prExtend},    // Mc   [8] LEPCHA SUBJOINED LETTER YA..LEPCHA VOWEL SIGN UU
-	{0x1C2C, 0x1C33, prExtend},    // Mn   [8] LEPCHA VOWEL SIGN E..LEPCHA CONSONANT SIGN T
-	{0x1C34, 0x1C35, prExtend},    // Mc   [2] LEPCHA CONSONANT SIGN NYIN-DO..LEPCHA CONSONANT SIGN KANG
-	{0x1C36, 0x1C37, prExtend},    // Mn   [2] LEPCHA SIGN RAN..LEPCHA SIGN NUKTA
-	{0x1C3B, 0x1C3C, prSTerm},     // Po   [2] LEPCHA PUNCTUATION TA-ROL..LEPCHA PUNCTUATION NYET THYOOM TA-ROL
-	{0x1C40, 0x1C49, prNumeric},   // Nd  [10] LEPCHA DIGIT ZERO..LEPCHA DIGIT NINE
-	{0x1C4D, 0x1C4F, prOLetter},   // Lo   [3] LEPCHA LETTER TTA..LEPCHA LETTER DDA
-	{0x1C50, 0x1C59, prNumeric},   // Nd  [10] OL CHIKI DIGIT ZERO..OL CHIKI DIGIT NINE
-	{0x1C5A, 0x1C77, prOLetter},   // Lo  [30] OL CHIKI LETTER LA..OL CHIKI LETTER OH
-	{0x1C78, 0x1C7D, prOLetter},   // Lm   [6] OL CHIKI MU TTUDDAG..OL CHIKI AHAD
-	{0x1C7E, 0x1C7F, prSTerm},     // Po   [2] OL CHIKI PUNCTUATION MUCAAD..OL CHIKI PUNCTUATION DOUBLE MUCAAD
-	{0x1C80, 0x1C88, prLower},     // L&   [9] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER UNBLENDED UK
-	{0x1C90, 0x1CBA, prOLetter},   // L&  [43] GEORGIAN MTAVRULI CAPITAL LETTER AN..GEORGIAN MTAVRULI CAPITAL LETTER AIN
-	{0x1CBD, 0x1CBF, prOLetter},   // L&   [3] GEORGIAN MTAVRULI CAPITAL LETTER AEN..GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN
-	{0x1CD0, 0x1CD2, prExtend},    // Mn   [3] VEDIC TONE KARSHANA..VEDIC TONE PRENKHA
-	{0x1CD4, 0x1CE0, prExtend},    // Mn  [13] VEDIC SIGN YAJURVEDIC MIDLINE SVARITA..VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA
-	{0x1CE1, 0x1CE1, prExtend},    // Mc       VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA
-	{0x1CE2, 0x1CE8, prExtend},    // Mn   [7] VEDIC SIGN VISARGA SVARITA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL
-	{0x1CE9, 0x1CEC, prOLetter},   // Lo   [4] VEDIC SIGN ANUSVARA ANTARGOMUKHA..VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL
-	{0x1CED, 0x1CED, prExtend},    // Mn       VEDIC SIGN TIRYAK
-	{0x1CEE, 0x1CF3, prOLetter},   // Lo   [6] VEDIC SIGN HEXIFORM LONG ANUSVARA..VEDIC SIGN ROTATED ARDHAVISARGA
-	{0x1CF4, 0x1CF4, prExtend},    // Mn       VEDIC TONE CANDRA ABOVE
-	{0x1CF5, 0x1CF6, prOLetter},   // Lo   [2] VEDIC SIGN JIHVAMULIYA..VEDIC SIGN UPADHMANIYA
-	{0x1CF7, 0x1CF7, prExtend},    // Mc       VEDIC SIGN ATIKRAMA
-	{0x1CF8, 0x1CF9, prExtend},    // Mn   [2] VEDIC TONE RING ABOVE..VEDIC TONE DOUBLE RING ABOVE
-	{0x1CFA, 0x1CFA, prOLetter},   // Lo       VEDIC SIGN DOUBLE ANUSVARA ANTARGOMUKHA
-	{0x1D00, 0x1D2B, prLower},     // L&  [44] LATIN LETTER SMALL CAPITAL A..CYRILLIC LETTER SMALL CAPITAL EL
-	{0x1D2C, 0x1D6A, prLower},     // Lm  [63] MODIFIER LETTER CAPITAL A..GREEK SUBSCRIPT SMALL LETTER CHI
-	{0x1D6B, 0x1D77, prLower},     // L&  [13] LATIN SMALL LETTER UE..LATIN SMALL LETTER TURNED G
-	{0x1D78, 0x1D78, prLower},     // Lm       MODIFIER LETTER CYRILLIC EN
-	{0x1D79, 0x1D9A, prLower},     // L&  [34] LATIN SMALL LETTER INSULAR G..LATIN SMALL LETTER EZH WITH RETROFLEX HOOK
-	{0x1D9B, 0x1DBF, prLower},     // Lm  [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA
-	{0x1DC0, 0x1DFF, prExtend},    // Mn  [64] COMBINING DOTTED GRAVE ACCENT..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW
-	{0x1E00, 0x1E00, prUpper},     // L&       LATIN CAPITAL LETTER A WITH RING BELOW
-	{0x1E01, 0x1E01, prLower},     // L&       LATIN SMALL LETTER A WITH RING BELOW
-	{0x1E02, 0x1E02, prUpper},     // L&       LATIN CAPITAL LETTER B WITH DOT ABOVE
-	{0x1E03, 0x1E03, prLower},     // L&       LATIN SMALL LETTER B WITH DOT ABOVE
-	{0x1E04, 0x1E04, prUpper},     // L&       LATIN CAPITAL LETTER B WITH DOT BELOW
-	{0x1E05, 0x1E05, prLower},     // L&       LATIN SMALL LETTER B WITH DOT BELOW
-	{0x1E06, 0x1E06, prUpper},     // L&       LATIN CAPITAL LETTER B WITH LINE BELOW
-	{0x1E07, 0x1E07, prLower},     // L&       LATIN SMALL LETTER B WITH LINE BELOW
-	{0x1E08, 0x1E08, prUpper},     // L&       LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
-	{0x1E09, 0x1E09, prLower},     // L&       LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
-	{0x1E0A, 0x1E0A, prUpper},     // L&       LATIN CAPITAL LETTER D WITH DOT ABOVE
-	{0x1E0B, 0x1E0B, prLower},     // L&       LATIN SMALL LETTER D WITH DOT ABOVE
-	{0x1E0C, 0x1E0C, prUpper},     // L&       LATIN CAPITAL LETTER D WITH DOT BELOW
-	{0x1E0D, 0x1E0D, prLower},     // L&       LATIN SMALL LETTER D WITH DOT BELOW
-	{0x1E0E, 0x1E0E, prUpper},     // L&       LATIN CAPITAL LETTER D WITH LINE BELOW
-	{0x1E0F, 0x1E0F, prLower},     // L&       LATIN SMALL LETTER D WITH LINE BELOW
-	{0x1E10, 0x1E10, prUpper},     // L&       LATIN CAPITAL LETTER D WITH CEDILLA
-	{0x1E11, 0x1E11, prLower},     // L&       LATIN SMALL LETTER D WITH CEDILLA
-	{0x1E12, 0x1E12, prUpper},     // L&       LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW
-	{0x1E13, 0x1E13, prLower},     // L&       LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW
-	{0x1E14, 0x1E14, prUpper},     // L&       LATIN CAPITAL LETTER E WITH MACRON AND GRAVE
-	{0x1E15, 0x1E15, prLower},     // L&       LATIN SMALL LETTER E WITH MACRON AND GRAVE
-	{0x1E16, 0x1E16, prUpper},     // L&       LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
-	{0x1E17, 0x1E17, prLower},     // L&       LATIN SMALL LETTER E WITH MACRON AND ACUTE
-	{0x1E18, 0x1E18, prUpper},     // L&       LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW
-	{0x1E19, 0x1E19, prLower},     // L&       LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW
-	{0x1E1A, 0x1E1A, prUpper},     // L&       LATIN CAPITAL LETTER E WITH TILDE BELOW
-	{0x1E1B, 0x1E1B, prLower},     // L&       LATIN SMALL LETTER E WITH TILDE BELOW
-	{0x1E1C, 0x1E1C, prUpper},     // L&       LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE
-	{0x1E1D, 0x1E1D, prLower},     // L&       LATIN SMALL LETTER E WITH CEDILLA AND BREVE
-	{0x1E1E, 0x1E1E, prUpper},     // L&       LATIN CAPITAL LETTER F WITH DOT ABOVE
-	{0x1E1F, 0x1E1F, prLower},     // L&       LATIN SMALL LETTER F WITH DOT ABOVE
-	{0x1E20, 0x1E20, prUpper},     // L&       LATIN CAPITAL LETTER G WITH MACRON
-	{0x1E21, 0x1E21, prLower},     // L&       LATIN SMALL LETTER G WITH MACRON
-	{0x1E22, 0x1E22, prUpper},     // L&       LATIN CAPITAL LETTER H WITH DOT ABOVE
-	{0x1E23, 0x1E23, prLower},     // L&       LATIN SMALL LETTER H WITH DOT ABOVE
-	{0x1E24, 0x1E24, prUpper},     // L&       LATIN CAPITAL LETTER H WITH DOT BELOW
-	{0x1E25, 0x1E25, prLower},     // L&       LATIN SMALL LETTER H WITH DOT BELOW
-	{0x1E26, 0x1E26, prUpper},     // L&       LATIN CAPITAL LETTER H WITH DIAERESIS
-	{0x1E27, 0x1E27, prLower},     // L&       LATIN SMALL LETTER H WITH DIAERESIS
-	{0x1E28, 0x1E28, prUpper},     // L&       LATIN CAPITAL LETTER H WITH CEDILLA
-	{0x1E29, 0x1E29, prLower},     // L&       LATIN SMALL LETTER H WITH CEDILLA
-	{0x1E2A, 0x1E2A, prUpper},     // L&       LATIN CAPITAL LETTER H WITH BREVE BELOW
-	{0x1E2B, 0x1E2B, prLower},     // L&       LATIN SMALL LETTER H WITH BREVE BELOW
-	{0x1E2C, 0x1E2C, prUpper},     // L&       LATIN CAPITAL LETTER I WITH TILDE BELOW
-	{0x1E2D, 0x1E2D, prLower},     // L&       LATIN SMALL LETTER I WITH TILDE BELOW
-	{0x1E2E, 0x1E2E, prUpper},     // L&       LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE
-	{0x1E2F, 0x1E2F, prLower},     // L&       LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE
-	{0x1E30, 0x1E30, prUpper},     // L&       LATIN CAPITAL LETTER K WITH ACUTE
-	{0x1E31, 0x1E31, prLower},     // L&       LATIN SMALL LETTER K WITH ACUTE
-	{0x1E32, 0x1E32, prUpper},     // L&       LATIN CAPITAL LETTER K WITH DOT BELOW
-	{0x1E33, 0x1E33, prLower},     // L&       LATIN SMALL LETTER K WITH DOT BELOW
-	{0x1E34, 0x1E34, prUpper},     // L&       LATIN CAPITAL LETTER K WITH LINE BELOW
-	{0x1E35, 0x1E35, prLower},     // L&       LATIN SMALL LETTER K WITH LINE BELOW
-	{0x1E36, 0x1E36, prUpper},     // L&       LATIN CAPITAL LETTER L WITH DOT BELOW
-	{0x1E37, 0x1E37, prLower},     // L&       LATIN SMALL LETTER L WITH DOT BELOW
-	{0x1E38, 0x1E38, prUpper},     // L&       LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON
-	{0x1E39, 0x1E39, prLower},     // L&       LATIN SMALL LETTER L WITH DOT BELOW AND MACRON
-	{0x1E3A, 0x1E3A, prUpper},     // L&       LATIN CAPITAL LETTER L WITH LINE BELOW
-	{0x1E3B, 0x1E3B, prLower},     // L&       LATIN SMALL LETTER L WITH LINE BELOW
-	{0x1E3C, 0x1E3C, prUpper},     // L&       LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW
-	{0x1E3D, 0x1E3D, prLower},     // L&       LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW
-	{0x1E3E, 0x1E3E, prUpper},     // L&       LATIN CAPITAL LETTER M WITH ACUTE
-	{0x1E3F, 0x1E3F, prLower},     // L&       LATIN SMALL LETTER M WITH ACUTE
-	{0x1E40, 0x1E40, prUpper},     // L&       LATIN CAPITAL LETTER M WITH DOT ABOVE
-	{0x1E41, 0x1E41, prLower},     // L&       LATIN SMALL LETTER M WITH DOT ABOVE
-	{0x1E42, 0x1E42, prUpper},     // L&       LATIN CAPITAL LETTER M WITH DOT BELOW
-	{0x1E43, 0x1E43, prLower},     // L&       LATIN SMALL LETTER M WITH DOT BELOW
-	{0x1E44, 0x1E44, prUpper},     // L&       LATIN CAPITAL LETTER N WITH DOT ABOVE
-	{0x1E45, 0x1E45, prLower},     // L&       LATIN SMALL LETTER N WITH DOT ABOVE
-	{0x1E46, 0x1E46, prUpper},     // L&       LATIN CAPITAL LETTER N WITH DOT BELOW
-	{0x1E47, 0x1E47, prLower},     // L&       LATIN SMALL LETTER N WITH DOT BELOW
-	{0x1E48, 0x1E48, prUpper},     // L&       LATIN CAPITAL LETTER N WITH LINE BELOW
-	{0x1E49, 0x1E49, prLower},     // L&       LATIN SMALL LETTER N WITH LINE BELOW
-	{0x1E4A, 0x1E4A, prUpper},     // L&       LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW
-	{0x1E4B, 0x1E4B, prLower},     // L&       LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW
-	{0x1E4C, 0x1E4C, prUpper},     // L&       LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
-	{0x1E4D, 0x1E4D, prLower},     // L&       LATIN SMALL LETTER O WITH TILDE AND ACUTE
-	{0x1E4E, 0x1E4E, prUpper},     // L&       LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS
-	{0x1E4F, 0x1E4F, prLower},     // L&       LATIN SMALL LETTER O WITH TILDE AND DIAERESIS
-	{0x1E50, 0x1E50, prUpper},     // L&       LATIN CAPITAL LETTER O WITH MACRON AND GRAVE
-	{0x1E51, 0x1E51, prLower},     // L&       LATIN SMALL LETTER O WITH MACRON AND GRAVE
-	{0x1E52, 0x1E52, prUpper},     // L&       LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
-	{0x1E53, 0x1E53, prLower},     // L&       LATIN SMALL LETTER O WITH MACRON AND ACUTE
-	{0x1E54, 0x1E54, prUpper},     // L&       LATIN CAPITAL LETTER P WITH ACUTE
-	{0x1E55, 0x1E55, prLower},     // L&       LATIN SMALL LETTER P WITH ACUTE
-	{0x1E56, 0x1E56, prUpper},     // L&       LATIN CAPITAL LETTER P WITH DOT ABOVE
-	{0x1E57, 0x1E57, prLower},     // L&       LATIN SMALL LETTER P WITH DOT ABOVE
-	{0x1E58, 0x1E58, prUpper},     // L&       LATIN CAPITAL LETTER R WITH DOT ABOVE
-	{0x1E59, 0x1E59, prLower},     // L&       LATIN SMALL LETTER R WITH DOT ABOVE
-	{0x1E5A, 0x1E5A, prUpper},     // L&       LATIN CAPITAL LETTER R WITH DOT BELOW
-	{0x1E5B, 0x1E5B, prLower},     // L&       LATIN SMALL LETTER R WITH DOT BELOW
-	{0x1E5C, 0x1E5C, prUpper},     // L&       LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON
-	{0x1E5D, 0x1E5D, prLower},     // L&       LATIN SMALL LETTER R WITH DOT BELOW AND MACRON
-	{0x1E5E, 0x1E5E, prUpper},     // L&       LATIN CAPITAL LETTER R WITH LINE BELOW
-	{0x1E5F, 0x1E5F, prLower},     // L&       LATIN SMALL LETTER R WITH LINE BELOW
-	{0x1E60, 0x1E60, prUpper},     // L&       LATIN CAPITAL LETTER S WITH DOT ABOVE
-	{0x1E61, 0x1E61, prLower},     // L&       LATIN SMALL LETTER S WITH DOT ABOVE
-	{0x1E62, 0x1E62, prUpper},     // L&       LATIN CAPITAL LETTER S WITH DOT BELOW
-	{0x1E63, 0x1E63, prLower},     // L&       LATIN SMALL LETTER S WITH DOT BELOW
-	{0x1E64, 0x1E64, prUpper},     // L&       LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE
-	{0x1E65, 0x1E65, prLower},     // L&       LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE
-	{0x1E66, 0x1E66, prUpper},     // L&       LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE
-	{0x1E67, 0x1E67, prLower},     // L&       LATIN SMALL LETTER S WITH CARON AND DOT ABOVE
-	{0x1E68, 0x1E68, prUpper},     // L&       LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE
-	{0x1E69, 0x1E69, prLower},     // L&       LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE
-	{0x1E6A, 0x1E6A, prUpper},     // L&       LATIN CAPITAL LETTER T WITH DOT ABOVE
-	{0x1E6B, 0x1E6B, prLower},     // L&       LATIN SMALL LETTER T WITH DOT ABOVE
-	{0x1E6C, 0x1E6C, prUpper},     // L&       LATIN CAPITAL LETTER T WITH DOT BELOW
-	{0x1E6D, 0x1E6D, prLower},     // L&       LATIN SMALL LETTER T WITH DOT BELOW
-	{0x1E6E, 0x1E6E, prUpper},     // L&       LATIN CAPITAL LETTER T WITH LINE BELOW
-	{0x1E6F, 0x1E6F, prLower},     // L&       LATIN SMALL LETTER T WITH LINE BELOW
-	{0x1E70, 0x1E70, prUpper},     // L&       LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW
-	{0x1E71, 0x1E71, prLower},     // L&       LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW
-	{0x1E72, 0x1E72, prUpper},     // L&       LATIN CAPITAL LETTER U WITH DIAERESIS BELOW
-	{0x1E73, 0x1E73, prLower},     // L&       LATIN SMALL LETTER U WITH DIAERESIS BELOW
-	{0x1E74, 0x1E74, prUpper},     // L&       LATIN CAPITAL LETTER U WITH TILDE BELOW
-	{0x1E75, 0x1E75, prLower},     // L&       LATIN SMALL LETTER U WITH TILDE BELOW
-	{0x1E76, 0x1E76, prUpper},     // L&       LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW
-	{0x1E77, 0x1E77, prLower},     // L&       LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW
-	{0x1E78, 0x1E78, prUpper},     // L&       LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
-	{0x1E79, 0x1E79, prLower},     // L&       LATIN SMALL LETTER U WITH TILDE AND ACUTE
-	{0x1E7A, 0x1E7A, prUpper},     // L&       LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS
-	{0x1E7B, 0x1E7B, prLower},     // L&       LATIN SMALL LETTER U WITH MACRON AND DIAERESIS
-	{0x1E7C, 0x1E7C, prUpper},     // L&       LATIN CAPITAL LETTER V WITH TILDE
-	{0x1E7D, 0x1E7D, prLower},     // L&       LATIN SMALL LETTER V WITH TILDE
-	{0x1E7E, 0x1E7E, prUpper},     // L&       LATIN CAPITAL LETTER V WITH DOT BELOW
-	{0x1E7F, 0x1E7F, prLower},     // L&       LATIN SMALL LETTER V WITH DOT BELOW
-	{0x1E80, 0x1E80, prUpper},     // L&       LATIN CAPITAL LETTER W WITH GRAVE
-	{0x1E81, 0x1E81, prLower},     // L&       LATIN SMALL LETTER W WITH GRAVE
-	{0x1E82, 0x1E82, prUpper},     // L&       LATIN CAPITAL LETTER W WITH ACUTE
-	{0x1E83, 0x1E83, prLower},     // L&       LATIN SMALL LETTER W WITH ACUTE
-	{0x1E84, 0x1E84, prUpper},     // L&       LATIN CAPITAL LETTER W WITH DIAERESIS
-	{0x1E85, 0x1E85, prLower},     // L&       LATIN SMALL LETTER W WITH DIAERESIS
-	{0x1E86, 0x1E86, prUpper},     // L&       LATIN CAPITAL LETTER W WITH DOT ABOVE
-	{0x1E87, 0x1E87, prLower},     // L&       LATIN SMALL LETTER W WITH DOT ABOVE
-	{0x1E88, 0x1E88, prUpper},     // L&       LATIN CAPITAL LETTER W WITH DOT BELOW
-	{0x1E89, 0x1E89, prLower},     // L&       LATIN SMALL LETTER W WITH DOT BELOW
-	{0x1E8A, 0x1E8A, prUpper},     // L&       LATIN CAPITAL LETTER X WITH DOT ABOVE
-	{0x1E8B, 0x1E8B, prLower},     // L&       LATIN SMALL LETTER X WITH DOT ABOVE
-	{0x1E8C, 0x1E8C, prUpper},     // L&       LATIN CAPITAL LETTER X WITH DIAERESIS
-	{0x1E8D, 0x1E8D, prLower},     // L&       LATIN SMALL LETTER X WITH DIAERESIS
-	{0x1E8E, 0x1E8E, prUpper},     // L&       LATIN CAPITAL LETTER Y WITH DOT ABOVE
-	{0x1E8F, 0x1E8F, prLower},     // L&       LATIN SMALL LETTER Y WITH DOT ABOVE
-	{0x1E90, 0x1E90, prUpper},     // L&       LATIN CAPITAL LETTER Z WITH CIRCUMFLEX
-	{0x1E91, 0x1E91, prLower},     // L&       LATIN SMALL LETTER Z WITH CIRCUMFLEX
-	{0x1E92, 0x1E92, prUpper},     // L&       LATIN CAPITAL LETTER Z WITH DOT BELOW
-	{0x1E93, 0x1E93, prLower},     // L&       LATIN SMALL LETTER Z WITH DOT BELOW
-	{0x1E94, 0x1E94, prUpper},     // L&       LATIN CAPITAL LETTER Z WITH LINE BELOW
-	{0x1E95, 0x1E9D, prLower},     // L&   [9] LATIN SMALL LETTER Z WITH LINE BELOW..LATIN SMALL LETTER LONG S WITH HIGH STROKE
-	{0x1E9E, 0x1E9E, prUpper},     // L&       LATIN CAPITAL LETTER SHARP S
-	{0x1E9F, 0x1E9F, prLower},     // L&       LATIN SMALL LETTER DELTA
-	{0x1EA0, 0x1EA0, prUpper},     // L&       LATIN CAPITAL LETTER A WITH DOT BELOW
-	{0x1EA1, 0x1EA1, prLower},     // L&       LATIN SMALL LETTER A WITH DOT BELOW
-	{0x1EA2, 0x1EA2, prUpper},     // L&       LATIN CAPITAL LETTER A WITH HOOK ABOVE
-	{0x1EA3, 0x1EA3, prLower},     // L&       LATIN SMALL LETTER A WITH HOOK ABOVE
-	{0x1EA4, 0x1EA4, prUpper},     // L&       LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
-	{0x1EA5, 0x1EA5, prLower},     // L&       LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
-	{0x1EA6, 0x1EA6, prUpper},     // L&       LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
-	{0x1EA7, 0x1EA7, prLower},     // L&       LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
-	{0x1EA8, 0x1EA8, prUpper},     // L&       LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
-	{0x1EA9, 0x1EA9, prLower},     // L&       LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
-	{0x1EAA, 0x1EAA, prUpper},     // L&       LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
-	{0x1EAB, 0x1EAB, prLower},     // L&       LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
-	{0x1EAC, 0x1EAC, prUpper},     // L&       LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
-	{0x1EAD, 0x1EAD, prLower},     // L&       LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
-	{0x1EAE, 0x1EAE, prUpper},     // L&       LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
-	{0x1EAF, 0x1EAF, prLower},     // L&       LATIN SMALL LETTER A WITH BREVE AND ACUTE
-	{0x1EB0, 0x1EB0, prUpper},     // L&       LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
-	{0x1EB1, 0x1EB1, prLower},     // L&       LATIN SMALL LETTER A WITH BREVE AND GRAVE
-	{0x1EB2, 0x1EB2, prUpper},     // L&       LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
-	{0x1EB3, 0x1EB3, prLower},     // L&       LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
-	{0x1EB4, 0x1EB4, prUpper},     // L&       LATIN CAPITAL LETTER A WITH BREVE AND TILDE
-	{0x1EB5, 0x1EB5, prLower},     // L&       LATIN SMALL LETTER A WITH BREVE AND TILDE
-	{0x1EB6, 0x1EB6, prUpper},     // L&       LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
-	{0x1EB7, 0x1EB7, prLower},     // L&       LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
-	{0x1EB8, 0x1EB8, prUpper},     // L&       LATIN CAPITAL LETTER E WITH DOT BELOW
-	{0x1EB9, 0x1EB9, prLower},     // L&       LATIN SMALL LETTER E WITH DOT BELOW
-	{0x1EBA, 0x1EBA, prUpper},     // L&       LATIN CAPITAL LETTER E WITH HOOK ABOVE
-	{0x1EBB, 0x1EBB, prLower},     // L&       LATIN SMALL LETTER E WITH HOOK ABOVE
-	{0x1EBC, 0x1EBC, prUpper},     // L&       LATIN CAPITAL LETTER E WITH TILDE
-	{0x1EBD, 0x1EBD, prLower},     // L&       LATIN SMALL LETTER E WITH TILDE
-	{0x1EBE, 0x1EBE, prUpper},     // L&       LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
-	{0x1EBF, 0x1EBF, prLower},     // L&       LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
-	{0x1EC0, 0x1EC0, prUpper},     // L&       LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
-	{0x1EC1, 0x1EC1, prLower},     // L&       LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
-	{0x1EC2, 0x1EC2, prUpper},     // L&       LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
-	{0x1EC3, 0x1EC3, prLower},     // L&       LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
-	{0x1EC4, 0x1EC4, prUpper},     // L&       LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
-	{0x1EC5, 0x1EC5, prLower},     // L&       LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
-	{0x1EC6, 0x1EC6, prUpper},     // L&       LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
-	{0x1EC7, 0x1EC7, prLower},     // L&       LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
-	{0x1EC8, 0x1EC8, prUpper},     // L&       LATIN CAPITAL LETTER I WITH HOOK ABOVE
-	{0x1EC9, 0x1EC9, prLower},     // L&       LATIN SMALL LETTER I WITH HOOK ABOVE
-	{0x1ECA, 0x1ECA, prUpper},     // L&       LATIN CAPITAL LETTER I WITH DOT BELOW
-	{0x1ECB, 0x1ECB, prLower},     // L&       LATIN SMALL LETTER I WITH DOT BELOW
-	{0x1ECC, 0x1ECC, prUpper},     // L&       LATIN CAPITAL LETTER O WITH DOT BELOW
-	{0x1ECD, 0x1ECD, prLower},     // L&       LATIN SMALL LETTER O WITH DOT BELOW
-	{0x1ECE, 0x1ECE, prUpper},     // L&       LATIN CAPITAL LETTER O WITH HOOK ABOVE
-	{0x1ECF, 0x1ECF, prLower},     // L&       LATIN SMALL LETTER O WITH HOOK ABOVE
-	{0x1ED0, 0x1ED0, prUpper},     // L&       LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
-	{0x1ED1, 0x1ED1, prLower},     // L&       LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
-	{0x1ED2, 0x1ED2, prUpper},     // L&       LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
-	{0x1ED3, 0x1ED3, prLower},     // L&       LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
-	{0x1ED4, 0x1ED4, prUpper},     // L&       LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
-	{0x1ED5, 0x1ED5, prLower},     // L&       LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
-	{0x1ED6, 0x1ED6, prUpper},     // L&       LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
-	{0x1ED7, 0x1ED7, prLower},     // L&       LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
-	{0x1ED8, 0x1ED8, prUpper},     // L&       LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
-	{0x1ED9, 0x1ED9, prLower},     // L&       LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
-	{0x1EDA, 0x1EDA, prUpper},     // L&       LATIN CAPITAL LETTER O WITH HORN AND ACUTE
-	{0x1EDB, 0x1EDB, prLower},     // L&       LATIN SMALL LETTER O WITH HORN AND ACUTE
-	{0x1EDC, 0x1EDC, prUpper},     // L&       LATIN CAPITAL LETTER O WITH HORN AND GRAVE
-	{0x1EDD, 0x1EDD, prLower},     // L&       LATIN SMALL LETTER O WITH HORN AND GRAVE
-	{0x1EDE, 0x1EDE, prUpper},     // L&       LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
-	{0x1EDF, 0x1EDF, prLower},     // L&       LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
-	{0x1EE0, 0x1EE0, prUpper},     // L&       LATIN CAPITAL LETTER O WITH HORN AND TILDE
-	{0x1EE1, 0x1EE1, prLower},     // L&       LATIN SMALL LETTER O WITH HORN AND TILDE
-	{0x1EE2, 0x1EE2, prUpper},     // L&       LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
-	{0x1EE3, 0x1EE3, prLower},     // L&       LATIN SMALL LETTER O WITH HORN AND DOT BELOW
-	{0x1EE4, 0x1EE4, prUpper},     // L&       LATIN CAPITAL LETTER U WITH DOT BELOW
-	{0x1EE5, 0x1EE5, prLower},     // L&       LATIN SMALL LETTER U WITH DOT BELOW
-	{0x1EE6, 0x1EE6, prUpper},     // L&       LATIN CAPITAL LETTER U WITH HOOK ABOVE
-	{0x1EE7, 0x1EE7, prLower},     // L&       LATIN SMALL LETTER U WITH HOOK ABOVE
-	{0x1EE8, 0x1EE8, prUpper},     // L&       LATIN CAPITAL LETTER U WITH HORN AND ACUTE
-	{0x1EE9, 0x1EE9, prLower},     // L&       LATIN SMALL LETTER U WITH HORN AND ACUTE
-	{0x1EEA, 0x1EEA, prUpper},     // L&       LATIN CAPITAL LETTER U WITH HORN AND GRAVE
-	{0x1EEB, 0x1EEB, prLower},     // L&       LATIN SMALL LETTER U WITH HORN AND GRAVE
-	{0x1EEC, 0x1EEC, prUpper},     // L&       LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
-	{0x1EED, 0x1EED, prLower},     // L&       LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
-	{0x1EEE, 0x1EEE, prUpper},     // L&       LATIN CAPITAL LETTER U WITH HORN AND TILDE
-	{0x1EEF, 0x1EEF, prLower},     // L&       LATIN SMALL LETTER U WITH HORN AND TILDE
-	{0x1EF0, 0x1EF0, prUpper},     // L&       LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
-	{0x1EF1, 0x1EF1, prLower},     // L&       LATIN SMALL LETTER U WITH HORN AND DOT BELOW
-	{0x1EF2, 0x1EF2, prUpper},     // L&       LATIN CAPITAL LETTER Y WITH GRAVE
-	{0x1EF3, 0x1EF3, prLower},     // L&       LATIN SMALL LETTER Y WITH GRAVE
-	{0x1EF4, 0x1EF4, prUpper},     // L&       LATIN CAPITAL LETTER Y WITH DOT BELOW
-	{0x1EF5, 0x1EF5, prLower},     // L&       LATIN SMALL LETTER Y WITH DOT BELOW
-	{0x1EF6, 0x1EF6, prUpper},     // L&       LATIN CAPITAL LETTER Y WITH HOOK ABOVE
-	{0x1EF7, 0x1EF7, prLower},     // L&       LATIN SMALL LETTER Y WITH HOOK ABOVE
-	{0x1EF8, 0x1EF8, prUpper},     // L&       LATIN CAPITAL LETTER Y WITH TILDE
-	{0x1EF9, 0x1EF9, prLower},     // L&       LATIN SMALL LETTER Y WITH TILDE
-	{0x1EFA, 0x1EFA, prUpper},     // L&       LATIN CAPITAL LETTER MIDDLE-WELSH LL
-	{0x1EFB, 0x1EFB, prLower},     // L&       LATIN SMALL LETTER MIDDLE-WELSH LL
-	{0x1EFC, 0x1EFC, prUpper},     // L&       LATIN CAPITAL LETTER MIDDLE-WELSH V
-	{0x1EFD, 0x1EFD, prLower},     // L&       LATIN SMALL LETTER MIDDLE-WELSH V
-	{0x1EFE, 0x1EFE, prUpper},     // L&       LATIN CAPITAL LETTER Y WITH LOOP
-	{0x1EFF, 0x1F07, prLower},     // L&   [9] LATIN SMALL LETTER Y WITH LOOP..GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI
-	{0x1F08, 0x1F0F, prUpper},     // L&   [8] GREEK CAPITAL LETTER ALPHA WITH PSILI..GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI
-	{0x1F10, 0x1F15, prLower},     // L&   [6] GREEK SMALL LETTER EPSILON WITH PSILI..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
-	{0x1F18, 0x1F1D, prUpper},     // L&   [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
-	{0x1F20, 0x1F27, prLower},     // L&   [8] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI
-	{0x1F28, 0x1F2F, prUpper},     // L&   [8] GREEK CAPITAL LETTER ETA WITH PSILI..GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI
-	{0x1F30, 0x1F37, prLower},     // L&   [8] GREEK SMALL LETTER IOTA WITH PSILI..GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI
-	{0x1F38, 0x1F3F, prUpper},     // L&   [8] GREEK CAPITAL LETTER IOTA WITH PSILI..GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI
-	{0x1F40, 0x1F45, prLower},     // L&   [6] GREEK SMALL LETTER OMICRON WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
-	{0x1F48, 0x1F4D, prUpper},     // L&   [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
-	{0x1F50, 0x1F57, prLower},     // L&   [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
-	{0x1F59, 0x1F59, prUpper},     // L&       GREEK CAPITAL LETTER UPSILON WITH DASIA
-	{0x1F5B, 0x1F5B, prUpper},     // L&       GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
-	{0x1F5D, 0x1F5D, prUpper},     // L&       GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
-	{0x1F5F, 0x1F5F, prUpper},     // L&       GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI
-	{0x1F60, 0x1F67, prLower},     // L&   [8] GREEK SMALL LETTER OMEGA WITH PSILI..GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI
-	{0x1F68, 0x1F6F, prUpper},     // L&   [8] GREEK CAPITAL LETTER OMEGA WITH PSILI..GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI
-	{0x1F70, 0x1F7D, prLower},     // L&  [14] GREEK SMALL LETTER ALPHA WITH VARIA..GREEK SMALL LETTER OMEGA WITH OXIA
-	{0x1F80, 0x1F87, prLower},     // L&   [8] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
-	{0x1F88, 0x1F8F, prUpper},     // L&   [8] GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI..GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
-	{0x1F90, 0x1F97, prLower},     // L&   [8] GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
-	{0x1F98, 0x1F9F, prUpper},     // L&   [8] GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI..GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
-	{0x1FA0, 0x1FA7, prLower},     // L&   [8] GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
-	{0x1FA8, 0x1FAF, prUpper},     // L&   [8] GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI..GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
-	{0x1FB0, 0x1FB4, prLower},     // L&   [5] GREEK SMALL LETTER ALPHA WITH VRACHY..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
-	{0x1FB6, 0x1FB7, prLower},     // L&   [2] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI
-	{0x1FB8, 0x1FBC, prUpper},     // L&   [5] GREEK CAPITAL LETTER ALPHA WITH VRACHY..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
-	{0x1FBE, 0x1FBE, prLower},     // L&       GREEK PROSGEGRAMMENI
-	{0x1FC2, 0x1FC4, prLower},     // L&   [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
-	{0x1FC6, 0x1FC7, prLower},     // L&   [2] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI
-	{0x1FC8, 0x1FCC, prUpper},     // L&   [5] GREEK CAPITAL LETTER EPSILON WITH VARIA..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
-	{0x1FD0, 0x1FD3, prLower},     // L&   [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
-	{0x1FD6, 0x1FD7, prLower},     // L&   [2] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI
-	{0x1FD8, 0x1FDB, prUpper},     // L&   [4] GREEK CAPITAL LETTER IOTA WITH VRACHY..GREEK CAPITAL LETTER IOTA WITH OXIA
-	{0x1FE0, 0x1FE7, prLower},     // L&   [8] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
-	{0x1FE8, 0x1FEC, prUpper},     // L&   [5] GREEK CAPITAL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA
-	{0x1FF2, 0x1FF4, prLower},     // L&   [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
-	{0x1FF6, 0x1FF7, prLower},     // L&   [2] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
-	{0x1FF8, 0x1FFC, prUpper},     // L&   [5] GREEK CAPITAL LETTER OMICRON WITH VARIA..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
-	{0x2000, 0x200A, prSp},        // Zs  [11] EN QUAD..HAIR SPACE
-	{0x200B, 0x200B, prFormat},    // Cf       ZERO WIDTH SPACE
-	{0x200C, 0x200D, prExtend},    // Cf   [2] ZERO WIDTH NON-JOINER..ZERO WIDTH JOINER
-	{0x200E, 0x200F, prFormat},    // Cf   [2] LEFT-TO-RIGHT MARK..RIGHT-TO-LEFT MARK
-	{0x2013, 0x2014, prSContinue}, // Pd   [2] EN DASH..EM DASH
-	{0x2018, 0x2018, prClose},     // Pi       LEFT SINGLE QUOTATION MARK
-	{0x2019, 0x2019, prClose},     // Pf       RIGHT SINGLE QUOTATION MARK
-	{0x201A, 0x201A, prClose},     // Ps       SINGLE LOW-9 QUOTATION MARK
-	{0x201B, 0x201C, prClose},     // Pi   [2] SINGLE HIGH-REVERSED-9 QUOTATION MARK..LEFT DOUBLE QUOTATION MARK
-	{0x201D, 0x201D, prClose},     // Pf       RIGHT DOUBLE QUOTATION MARK
-	{0x201E, 0x201E, prClose},     // Ps       DOUBLE LOW-9 QUOTATION MARK
-	{0x201F, 0x201F, prClose},     // Pi       DOUBLE HIGH-REVERSED-9 QUOTATION MARK
-	{0x2024, 0x2024, prATerm},     // Po       ONE DOT LEADER
-	{0x2028, 0x2028, prSep},       // Zl       LINE SEPARATOR
-	{0x2029, 0x2029, prSep},       // Zp       PARAGRAPH SEPARATOR
-	{0x202A, 0x202E, prFormat},    // Cf   [5] LEFT-TO-RIGHT EMBEDDING..RIGHT-TO-LEFT OVERRIDE
-	{0x202F, 0x202F, prSp},        // Zs       NARROW NO-BREAK SPACE
-	{0x2039, 0x2039, prClose},     // Pi       SINGLE LEFT-POINTING ANGLE QUOTATION MARK
-	{0x203A, 0x203A, prClose},     // Pf       SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
-	{0x203C, 0x203D, prSTerm},     // Po   [2] DOUBLE EXCLAMATION MARK..INTERROBANG
-	{0x2045, 0x2045, prClose},     // Ps       LEFT SQUARE BRACKET WITH QUILL
-	{0x2046, 0x2046, prClose},     // Pe       RIGHT SQUARE BRACKET WITH QUILL
-	{0x2047, 0x2049, prSTerm},     // Po   [3] DOUBLE QUESTION MARK..EXCLAMATION QUESTION MARK
-	{0x205F, 0x205F, prSp},        // Zs       MEDIUM MATHEMATICAL SPACE
-	{0x2060, 0x2064, prFormat},    // Cf   [5] WORD JOINER..INVISIBLE PLUS
-	{0x2066, 0x206F, prFormat},    // Cf  [10] LEFT-TO-RIGHT ISOLATE..NOMINAL DIGIT SHAPES
-	{0x2071, 0x2071, prLower},     // Lm       SUPERSCRIPT LATIN SMALL LETTER I
-	{0x207D, 0x207D, prClose},     // Ps       SUPERSCRIPT LEFT PARENTHESIS
-	{0x207E, 0x207E, prClose},     // Pe       SUPERSCRIPT RIGHT PARENTHESIS
-	{0x207F, 0x207F, prLower},     // Lm       SUPERSCRIPT LATIN SMALL LETTER N
-	{0x208D, 0x208D, prClose},     // Ps       SUBSCRIPT LEFT PARENTHESIS
-	{0x208E, 0x208E, prClose},     // Pe       SUBSCRIPT RIGHT PARENTHESIS
-	{0x2090, 0x209C, prLower},     // Lm  [13] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER T
-	{0x20D0, 0x20DC, prExtend},    // Mn  [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE
-	{0x20DD, 0x20E0, prExtend},    // Me   [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH
-	{0x20E1, 0x20E1, prExtend},    // Mn       COMBINING LEFT RIGHT ARROW ABOVE
-	{0x20E2, 0x20E4, prExtend},    // Me   [3] COMBINING ENCLOSING SCREEN..COMBINING ENCLOSING UPWARD POINTING TRIANGLE
-	{0x20E5, 0x20F0, prExtend},    // Mn  [12] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING ASTERISK ABOVE
-	{0x2102, 0x2102, prUpper},     // L&       DOUBLE-STRUCK CAPITAL C
-	{0x2107, 0x2107, prUpper},     // L&       EULER CONSTANT
-	{0x210A, 0x210A, prLower},     // L&       SCRIPT SMALL G
-	{0x210B, 0x210D, prUpper},     // L&   [3] SCRIPT CAPITAL H..DOUBLE-STRUCK CAPITAL H
-	{0x210E, 0x210F, prLower},     // L&   [2] PLANCK CONSTANT..PLANCK CONSTANT OVER TWO PI
-	{0x2110, 0x2112, prUpper},     // L&   [3] SCRIPT CAPITAL I..SCRIPT CAPITAL L
-	{0x2113, 0x2113, prLower},     // L&       SCRIPT SMALL L
-	{0x2115, 0x2115, prUpper},     // L&       DOUBLE-STRUCK CAPITAL N
-	{0x2119, 0x211D, prUpper},     // L&   [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R
-	{0x2124, 0x2124, prUpper},     // L&       DOUBLE-STRUCK CAPITAL Z
-	{0x2126, 0x2126, prUpper},     // L&       OHM SIGN
-	{0x2128, 0x2128, prUpper},     // L&       BLACK-LETTER CAPITAL Z
-	{0x212A, 0x212D, prUpper},     // L&   [4] KELVIN SIGN..BLACK-LETTER CAPITAL C
-	{0x212F, 0x212F, prLower},     // L&       SCRIPT SMALL E
-	{0x2130, 0x2133, prUpper},     // L&   [4] SCRIPT CAPITAL E..SCRIPT CAPITAL M
-	{0x2134, 0x2134, prLower},     // L&       SCRIPT SMALL O
-	{0x2135, 0x2138, prOLetter},   // Lo   [4] ALEF SYMBOL..DALET SYMBOL
-	{0x2139, 0x2139, prLower},     // L&       INFORMATION SOURCE
-	{0x213C, 0x213D, prLower},     // L&   [2] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK SMALL GAMMA
-	{0x213E, 0x213F, prUpper},     // L&   [2] DOUBLE-STRUCK CAPITAL GAMMA..DOUBLE-STRUCK CAPITAL PI
-	{0x2145, 0x2145, prUpper},     // L&       DOUBLE-STRUCK ITALIC CAPITAL D
-	{0x2146, 0x2149, prLower},     // L&   [4] DOUBLE-STRUCK ITALIC SMALL D..DOUBLE-STRUCK ITALIC SMALL J
-	{0x214E, 0x214E, prLower},     // L&       TURNED SMALL F
-	{0x2160, 0x216F, prUpper},     // Nl  [16] ROMAN NUMERAL ONE..ROMAN NUMERAL ONE THOUSAND
-	{0x2170, 0x217F, prLower},     // Nl  [16] SMALL ROMAN NUMERAL ONE..SMALL ROMAN NUMERAL ONE THOUSAND
-	{0x2180, 0x2182, prOLetter},   // Nl   [3] ROMAN NUMERAL ONE THOUSAND C D..ROMAN NUMERAL TEN THOUSAND
-	{0x2183, 0x2183, prUpper},     // L&       ROMAN NUMERAL REVERSED ONE HUNDRED
-	{0x2184, 0x2184, prLower},     // L&       LATIN SMALL LETTER REVERSED C
-	{0x2185, 0x2188, prOLetter},   // Nl   [4] ROMAN NUMERAL SIX LATE FORM..ROMAN NUMERAL ONE HUNDRED THOUSAND
-	{0x2308, 0x2308, prClose},     // Ps       LEFT CEILING
-	{0x2309, 0x2309, prClose},     // Pe       RIGHT CEILING
-	{0x230A, 0x230A, prClose},     // Ps       LEFT FLOOR
-	{0x230B, 0x230B, prClose},     // Pe       RIGHT FLOOR
-	{0x2329, 0x2329, prClose},     // Ps       LEFT-POINTING ANGLE BRACKET
-	{0x232A, 0x232A, prClose},     // Pe       RIGHT-POINTING ANGLE BRACKET
-	{0x24B6, 0x24CF, prUpper},     // So  [26] CIRCLED LATIN CAPITAL LETTER A..CIRCLED LATIN CAPITAL LETTER Z
-	{0x24D0, 0x24E9, prLower},     // So  [26] CIRCLED LATIN SMALL LETTER A..CIRCLED LATIN SMALL LETTER Z
-	{0x275B, 0x2760, prClose},     // So   [6] HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT..HEAVY LOW DOUBLE COMMA QUOTATION MARK ORNAMENT
-	{0x2768, 0x2768, prClose},     // Ps       MEDIUM LEFT PARENTHESIS ORNAMENT
-	{0x2769, 0x2769, prClose},     // Pe       MEDIUM RIGHT PARENTHESIS ORNAMENT
-	{0x276A, 0x276A, prClose},     // Ps       MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT
-	{0x276B, 0x276B, prClose},     // Pe       MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT
-	{0x276C, 0x276C, prClose},     // Ps       MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT
-	{0x276D, 0x276D, prClose},     // Pe       MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT
-	{0x276E, 0x276E, prClose},     // Ps       HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT
-	{0x276F, 0x276F, prClose},     // Pe       HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT
-	{0x2770, 0x2770, prClose},     // Ps       HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT
-	{0x2771, 0x2771, prClose},     // Pe       HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT
-	{0x2772, 0x2772, prClose},     // Ps       LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT
-	{0x2773, 0x2773, prClose},     // Pe       LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT
-	{0x2774, 0x2774, prClose},     // Ps       MEDIUM LEFT CURLY BRACKET ORNAMENT
-	{0x2775, 0x2775, prClose},     // Pe       MEDIUM RIGHT CURLY BRACKET ORNAMENT
-	{0x27C5, 0x27C5, prClose},     // Ps       LEFT S-SHAPED BAG DELIMITER
-	{0x27C6, 0x27C6, prClose},     // Pe       RIGHT S-SHAPED BAG DELIMITER
-	{0x27E6, 0x27E6, prClose},     // Ps       MATHEMATICAL LEFT WHITE SQUARE BRACKET
-	{0x27E7, 0x27E7, prClose},     // Pe       MATHEMATICAL RIGHT WHITE SQUARE BRACKET
-	{0x27E8, 0x27E8, prClose},     // Ps       MATHEMATICAL LEFT ANGLE BRACKET
-	{0x27E9, 0x27E9, prClose},     // Pe       MATHEMATICAL RIGHT ANGLE BRACKET
-	{0x27EA, 0x27EA, prClose},     // Ps       MATHEMATICAL LEFT DOUBLE ANGLE BRACKET
-	{0x27EB, 0x27EB, prClose},     // Pe       MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET
-	{0x27EC, 0x27EC, prClose},     // Ps       MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET
-	{0x27ED, 0x27ED, prClose},     // Pe       MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET
-	{0x27EE, 0x27EE, prClose},     // Ps       MATHEMATICAL LEFT FLATTENED PARENTHESIS
-	{0x27EF, 0x27EF, prClose},     // Pe       MATHEMATICAL RIGHT FLATTENED PARENTHESIS
-	{0x2983, 0x2983, prClose},     // Ps       LEFT WHITE CURLY BRACKET
-	{0x2984, 0x2984, prClose},     // Pe       RIGHT WHITE CURLY BRACKET
-	{0x2985, 0x2985, prClose},     // Ps       LEFT WHITE PARENTHESIS
-	{0x2986, 0x2986, prClose},     // Pe       RIGHT WHITE PARENTHESIS
-	{0x2987, 0x2987, prClose},     // Ps       Z NOTATION LEFT IMAGE BRACKET
-	{0x2988, 0x2988, prClose},     // Pe       Z NOTATION RIGHT IMAGE BRACKET
-	{0x2989, 0x2989, prClose},     // Ps       Z NOTATION LEFT BINDING BRACKET
-	{0x298A, 0x298A, prClose},     // Pe       Z NOTATION RIGHT BINDING BRACKET
-	{0x298B, 0x298B, prClose},     // Ps       LEFT SQUARE BRACKET WITH UNDERBAR
-	{0x298C, 0x298C, prClose},     // Pe       RIGHT SQUARE BRACKET WITH UNDERBAR
-	{0x298D, 0x298D, prClose},     // Ps       LEFT SQUARE BRACKET WITH TICK IN TOP CORNER
-	{0x298E, 0x298E, prClose},     // Pe       RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
-	{0x298F, 0x298F, prClose},     // Ps       LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
-	{0x2990, 0x2990, prClose},     // Pe       RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER
-	{0x2991, 0x2991, prClose},     // Ps       LEFT ANGLE BRACKET WITH DOT
-	{0x2992, 0x2992, prClose},     // Pe       RIGHT ANGLE BRACKET WITH DOT
-	{0x2993, 0x2993, prClose},     // Ps       LEFT ARC LESS-THAN BRACKET
-	{0x2994, 0x2994, prClose},     // Pe       RIGHT ARC GREATER-THAN BRACKET
-	{0x2995, 0x2995, prClose},     // Ps       DOUBLE LEFT ARC GREATER-THAN BRACKET
-	{0x2996, 0x2996, prClose},     // Pe       DOUBLE RIGHT ARC LESS-THAN BRACKET
-	{0x2997, 0x2997, prClose},     // Ps       LEFT BLACK TORTOISE SHELL BRACKET
-	{0x2998, 0x2998, prClose},     // Pe       RIGHT BLACK TORTOISE SHELL BRACKET
-	{0x29D8, 0x29D8, prClose},     // Ps       LEFT WIGGLY FENCE
-	{0x29D9, 0x29D9, prClose},     // Pe       RIGHT WIGGLY FENCE
-	{0x29DA, 0x29DA, prClose},     // Ps       LEFT DOUBLE WIGGLY FENCE
-	{0x29DB, 0x29DB, prClose},     // Pe       RIGHT DOUBLE WIGGLY FENCE
-	{0x29FC, 0x29FC, prClose},     // Ps       LEFT-POINTING CURVED ANGLE BRACKET
-	{0x29FD, 0x29FD, prClose},     // Pe       RIGHT-POINTING CURVED ANGLE BRACKET
-	{0x2C00, 0x2C2F, prUpper},     // L&  [48] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI
-	{0x2C30, 0x2C5F, prLower},     // L&  [48] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER CAUDATE CHRIVI
-	{0x2C60, 0x2C60, prUpper},     // L&       LATIN CAPITAL LETTER L WITH DOUBLE BAR
-	{0x2C61, 0x2C61, prLower},     // L&       LATIN SMALL LETTER L WITH DOUBLE BAR
-	{0x2C62, 0x2C64, prUpper},     // L&   [3] LATIN CAPITAL LETTER L WITH MIDDLE TILDE..LATIN CAPITAL LETTER R WITH TAIL
-	{0x2C65, 0x2C66, prLower},     // L&   [2] LATIN SMALL LETTER A WITH STROKE..LATIN SMALL LETTER T WITH DIAGONAL STROKE
-	{0x2C67, 0x2C67, prUpper},     // L&       LATIN CAPITAL LETTER H WITH DESCENDER
-	{0x2C68, 0x2C68, prLower},     // L&       LATIN SMALL LETTER H WITH DESCENDER
-	{0x2C69, 0x2C69, prUpper},     // L&       LATIN CAPITAL LETTER K WITH DESCENDER
-	{0x2C6A, 0x2C6A, prLower},     // L&       LATIN SMALL LETTER K WITH DESCENDER
-	{0x2C6B, 0x2C6B, prUpper},     // L&       LATIN CAPITAL LETTER Z WITH DESCENDER
-	{0x2C6C, 0x2C6C, prLower},     // L&       LATIN SMALL LETTER Z WITH DESCENDER
-	{0x2C6D, 0x2C70, prUpper},     // L&   [4] LATIN CAPITAL LETTER ALPHA..LATIN CAPITAL LETTER TURNED ALPHA
-	{0x2C71, 0x2C71, prLower},     // L&       LATIN SMALL LETTER V WITH RIGHT HOOK
-	{0x2C72, 0x2C72, prUpper},     // L&       LATIN CAPITAL LETTER W WITH HOOK
-	{0x2C73, 0x2C74, prLower},     // L&   [2] LATIN SMALL LETTER W WITH HOOK..LATIN SMALL LETTER V WITH CURL
-	{0x2C75, 0x2C75, prUpper},     // L&       LATIN CAPITAL LETTER HALF H
-	{0x2C76, 0x2C7B, prLower},     // L&   [6] LATIN SMALL LETTER HALF H..LATIN LETTER SMALL CAPITAL TURNED E
-	{0x2C7C, 0x2C7D, prLower},     // Lm   [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V
-	{0x2C7E, 0x2C80, prUpper},     // L&   [3] LATIN CAPITAL LETTER S WITH SWASH TAIL..COPTIC CAPITAL LETTER ALFA
-	{0x2C81, 0x2C81, prLower},     // L&       COPTIC SMALL LETTER ALFA
-	{0x2C82, 0x2C82, prUpper},     // L&       COPTIC CAPITAL LETTER VIDA
-	{0x2C83, 0x2C83, prLower},     // L&       COPTIC SMALL LETTER VIDA
-	{0x2C84, 0x2C84, prUpper},     // L&       COPTIC CAPITAL LETTER GAMMA
-	{0x2C85, 0x2C85, prLower},     // L&       COPTIC SMALL LETTER GAMMA
-	{0x2C86, 0x2C86, prUpper},     // L&       COPTIC CAPITAL LETTER DALDA
-	{0x2C87, 0x2C87, prLower},     // L&       COPTIC SMALL LETTER DALDA
-	{0x2C88, 0x2C88, prUpper},     // L&       COPTIC CAPITAL LETTER EIE
-	{0x2C89, 0x2C89, prLower},     // L&       COPTIC SMALL LETTER EIE
-	{0x2C8A, 0x2C8A, prUpper},     // L&       COPTIC CAPITAL LETTER SOU
-	{0x2C8B, 0x2C8B, prLower},     // L&       COPTIC SMALL LETTER SOU
-	{0x2C8C, 0x2C8C, prUpper},     // L&       COPTIC CAPITAL LETTER ZATA
-	{0x2C8D, 0x2C8D, prLower},     // L&       COPTIC SMALL LETTER ZATA
-	{0x2C8E, 0x2C8E, prUpper},     // L&       COPTIC CAPITAL LETTER HATE
-	{0x2C8F, 0x2C8F, prLower},     // L&       COPTIC SMALL LETTER HATE
-	{0x2C90, 0x2C90, prUpper},     // L&       COPTIC CAPITAL LETTER THETHE
-	{0x2C91, 0x2C91, prLower},     // L&       COPTIC SMALL LETTER THETHE
-	{0x2C92, 0x2C92, prUpper},     // L&       COPTIC CAPITAL LETTER IAUDA
-	{0x2C93, 0x2C93, prLower},     // L&       COPTIC SMALL LETTER IAUDA
-	{0x2C94, 0x2C94, prUpper},     // L&       COPTIC CAPITAL LETTER KAPA
-	{0x2C95, 0x2C95, prLower},     // L&       COPTIC SMALL LETTER KAPA
-	{0x2C96, 0x2C96, prUpper},     // L&       COPTIC CAPITAL LETTER LAULA
-	{0x2C97, 0x2C97, prLower},     // L&       COPTIC SMALL LETTER LAULA
-	{0x2C98, 0x2C98, prUpper},     // L&       COPTIC CAPITAL LETTER MI
-	{0x2C99, 0x2C99, prLower},     // L&       COPTIC SMALL LETTER MI
-	{0x2C9A, 0x2C9A, prUpper},     // L&       COPTIC CAPITAL LETTER NI
-	{0x2C9B, 0x2C9B, prLower},     // L&       COPTIC SMALL LETTER NI
-	{0x2C9C, 0x2C9C, prUpper},     // L&       COPTIC CAPITAL LETTER KSI
-	{0x2C9D, 0x2C9D, prLower},     // L&       COPTIC SMALL LETTER KSI
-	{0x2C9E, 0x2C9E, prUpper},     // L&       COPTIC CAPITAL LETTER O
-	{0x2C9F, 0x2C9F, prLower},     // L&       COPTIC SMALL LETTER O
-	{0x2CA0, 0x2CA0, prUpper},     // L&       COPTIC CAPITAL LETTER PI
-	{0x2CA1, 0x2CA1, prLower},     // L&       COPTIC SMALL LETTER PI
-	{0x2CA2, 0x2CA2, prUpper},     // L&       COPTIC CAPITAL LETTER RO
-	{0x2CA3, 0x2CA3, prLower},     // L&       COPTIC SMALL LETTER RO
-	{0x2CA4, 0x2CA4, prUpper},     // L&       COPTIC CAPITAL LETTER SIMA
-	{0x2CA5, 0x2CA5, prLower},     // L&       COPTIC SMALL LETTER SIMA
-	{0x2CA6, 0x2CA6, prUpper},     // L&       COPTIC CAPITAL LETTER TAU
-	{0x2CA7, 0x2CA7, prLower},     // L&       COPTIC SMALL LETTER TAU
-	{0x2CA8, 0x2CA8, prUpper},     // L&       COPTIC CAPITAL LETTER UA
-	{0x2CA9, 0x2CA9, prLower},     // L&       COPTIC SMALL LETTER UA
-	{0x2CAA, 0x2CAA, prUpper},     // L&       COPTIC CAPITAL LETTER FI
-	{0x2CAB, 0x2CAB, prLower},     // L&       COPTIC SMALL LETTER FI
-	{0x2CAC, 0x2CAC, prUpper},     // L&       COPTIC CAPITAL LETTER KHI
-	{0x2CAD, 0x2CAD, prLower},     // L&       COPTIC SMALL LETTER KHI
-	{0x2CAE, 0x2CAE, prUpper},     // L&       COPTIC CAPITAL LETTER PSI
-	{0x2CAF, 0x2CAF, prLower},     // L&       COPTIC SMALL LETTER PSI
-	{0x2CB0, 0x2CB0, prUpper},     // L&       COPTIC CAPITAL LETTER OOU
-	{0x2CB1, 0x2CB1, prLower},     // L&       COPTIC SMALL LETTER OOU
-	{0x2CB2, 0x2CB2, prUpper},     // L&       COPTIC CAPITAL LETTER DIALECT-P ALEF
-	{0x2CB3, 0x2CB3, prLower},     // L&       COPTIC SMALL LETTER DIALECT-P ALEF
-	{0x2CB4, 0x2CB4, prUpper},     // L&       COPTIC CAPITAL LETTER OLD COPTIC AIN
-	{0x2CB5, 0x2CB5, prLower},     // L&       COPTIC SMALL LETTER OLD COPTIC AIN
-	{0x2CB6, 0x2CB6, prUpper},     // L&       COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE
-	{0x2CB7, 0x2CB7, prLower},     // L&       COPTIC SMALL LETTER CRYPTOGRAMMIC EIE
-	{0x2CB8, 0x2CB8, prUpper},     // L&       COPTIC CAPITAL LETTER DIALECT-P KAPA
-	{0x2CB9, 0x2CB9, prLower},     // L&       COPTIC SMALL LETTER DIALECT-P KAPA
-	{0x2CBA, 0x2CBA, prUpper},     // L&       COPTIC CAPITAL LETTER DIALECT-P NI
-	{0x2CBB, 0x2CBB, prLower},     // L&       COPTIC SMALL LETTER DIALECT-P NI
-	{0x2CBC, 0x2CBC, prUpper},     // L&       COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI
-	{0x2CBD, 0x2CBD, prLower},     // L&       COPTIC SMALL LETTER CRYPTOGRAMMIC NI
-	{0x2CBE, 0x2CBE, prUpper},     // L&       COPTIC CAPITAL LETTER OLD COPTIC OOU
-	{0x2CBF, 0x2CBF, prLower},     // L&       COPTIC SMALL LETTER OLD COPTIC OOU
-	{0x2CC0, 0x2CC0, prUpper},     // L&       COPTIC CAPITAL LETTER SAMPI
-	{0x2CC1, 0x2CC1, prLower},     // L&       COPTIC SMALL LETTER SAMPI
-	{0x2CC2, 0x2CC2, prUpper},     // L&       COPTIC CAPITAL LETTER CROSSED SHEI
-	{0x2CC3, 0x2CC3, prLower},     // L&       COPTIC SMALL LETTER CROSSED SHEI
-	{0x2CC4, 0x2CC4, prUpper},     // L&       COPTIC CAPITAL LETTER OLD COPTIC SHEI
-	{0x2CC5, 0x2CC5, prLower},     // L&       COPTIC SMALL LETTER OLD COPTIC SHEI
-	{0x2CC6, 0x2CC6, prUpper},     // L&       COPTIC CAPITAL LETTER OLD COPTIC ESH
-	{0x2CC7, 0x2CC7, prLower},     // L&       COPTIC SMALL LETTER OLD COPTIC ESH
-	{0x2CC8, 0x2CC8, prUpper},     // L&       COPTIC CAPITAL LETTER AKHMIMIC KHEI
-	{0x2CC9, 0x2CC9, prLower},     // L&       COPTIC SMALL LETTER AKHMIMIC KHEI
-	{0x2CCA, 0x2CCA, prUpper},     // L&       COPTIC CAPITAL LETTER DIALECT-P HORI
-	{0x2CCB, 0x2CCB, prLower},     // L&       COPTIC SMALL LETTER DIALECT-P HORI
-	{0x2CCC, 0x2CCC, prUpper},     // L&       COPTIC CAPITAL LETTER OLD COPTIC HORI
-	{0x2CCD, 0x2CCD, prLower},     // L&       COPTIC SMALL LETTER OLD COPTIC HORI
-	{0x2CCE, 0x2CCE, prUpper},     // L&       COPTIC CAPITAL LETTER OLD COPTIC HA
-	{0x2CCF, 0x2CCF, prLower},     // L&       COPTIC SMALL LETTER OLD COPTIC HA
-	{0x2CD0, 0x2CD0, prUpper},     // L&       COPTIC CAPITAL LETTER L-SHAPED HA
-	{0x2CD1, 0x2CD1, prLower},     // L&       COPTIC SMALL LETTER L-SHAPED HA
-	{0x2CD2, 0x2CD2, prUpper},     // L&       COPTIC CAPITAL LETTER OLD COPTIC HEI
-	{0x2CD3, 0x2CD3, prLower},     // L&       COPTIC SMALL LETTER OLD COPTIC HEI
-	{0x2CD4, 0x2CD4, prUpper},     // L&       COPTIC CAPITAL LETTER OLD COPTIC HAT
-	{0x2CD5, 0x2CD5, prLower},     // L&       COPTIC SMALL LETTER OLD COPTIC HAT
-	{0x2CD6, 0x2CD6, prUpper},     // L&       COPTIC CAPITAL LETTER OLD COPTIC GANGIA
-	{0x2CD7, 0x2CD7, prLower},     // L&       COPTIC SMALL LETTER OLD COPTIC GANGIA
-	{0x2CD8, 0x2CD8, prUpper},     // L&       COPTIC CAPITAL LETTER OLD COPTIC DJA
-	{0x2CD9, 0x2CD9, prLower},     // L&       COPTIC SMALL LETTER OLD COPTIC DJA
-	{0x2CDA, 0x2CDA, prUpper},     // L&       COPTIC CAPITAL LETTER OLD COPTIC SHIMA
-	{0x2CDB, 0x2CDB, prLower},     // L&       COPTIC SMALL LETTER OLD COPTIC SHIMA
-	{0x2CDC, 0x2CDC, prUpper},     // L&       COPTIC CAPITAL LETTER OLD NUBIAN SHIMA
-	{0x2CDD, 0x2CDD, prLower},     // L&       COPTIC SMALL LETTER OLD NUBIAN SHIMA
-	{0x2CDE, 0x2CDE, prUpper},     // L&       COPTIC CAPITAL LETTER OLD NUBIAN NGI
-	{0x2CDF, 0x2CDF, prLower},     // L&       COPTIC SMALL LETTER OLD NUBIAN NGI
-	{0x2CE0, 0x2CE0, prUpper},     // L&       COPTIC CAPITAL LETTER OLD NUBIAN NYI
-	{0x2CE1, 0x2CE1, prLower},     // L&       COPTIC SMALL LETTER OLD NUBIAN NYI
-	{0x2CE2, 0x2CE2, prUpper},     // L&       COPTIC CAPITAL LETTER OLD NUBIAN WAU
-	{0x2CE3, 0x2CE4, prLower},     // L&   [2] COPTIC SMALL LETTER OLD NUBIAN WAU..COPTIC SYMBOL KAI
-	{0x2CEB, 0x2CEB, prUpper},     // L&       COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI
-	{0x2CEC, 0x2CEC, prLower},     // L&       COPTIC SMALL LETTER CRYPTOGRAMMIC SHEI
-	{0x2CED, 0x2CED, prUpper},     // L&       COPTIC CAPITAL LETTER CRYPTOGRAMMIC GANGIA
-	{0x2CEE, 0x2CEE, prLower},     // L&       COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA
-	{0x2CEF, 0x2CF1, prExtend},    // Mn   [3] COPTIC COMBINING NI ABOVE..COPTIC COMBINING SPIRITUS LENIS
-	{0x2CF2, 0x2CF2, prUpper},     // L&       COPTIC CAPITAL LETTER BOHAIRIC KHEI
-	{0x2CF3, 0x2CF3, prLower},     // L&       COPTIC SMALL LETTER BOHAIRIC KHEI
-	{0x2D00, 0x2D25, prLower},     // L&  [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE
-	{0x2D27, 0x2D27, prLower},     // L&       GEORGIAN SMALL LETTER YN
-	{0x2D2D, 0x2D2D, prLower},     // L&       GEORGIAN SMALL LETTER AEN
-	{0x2D30, 0x2D67, prOLetter},   // Lo  [56] TIFINAGH LETTER YA..TIFINAGH LETTER YO
-	{0x2D6F, 0x2D6F, prOLetter},   // Lm       TIFINAGH MODIFIER LETTER LABIALIZATION MARK
-	{0x2D7F, 0x2D7F, prExtend},    // Mn       TIFINAGH CONSONANT JOINER
-	{0x2D80, 0x2D96, prOLetter},   // Lo  [23] ETHIOPIC SYLLABLE LOA..ETHIOPIC SYLLABLE GGWE
-	{0x2DA0, 0x2DA6, prOLetter},   // Lo   [7] ETHIOPIC SYLLABLE SSA..ETHIOPIC SYLLABLE SSO
-	{0x2DA8, 0x2DAE, prOLetter},   // Lo   [7] ETHIOPIC SYLLABLE CCA..ETHIOPIC SYLLABLE CCO
-	{0x2DB0, 0x2DB6, prOLetter},   // Lo   [7] ETHIOPIC SYLLABLE ZZA..ETHIOPIC SYLLABLE ZZO
-	{0x2DB8, 0x2DBE, prOLetter},   // Lo   [7] ETHIOPIC SYLLABLE CCHA..ETHIOPIC SYLLABLE CCHO
-	{0x2DC0, 0x2DC6, prOLetter},   // Lo   [7] ETHIOPIC SYLLABLE QYA..ETHIOPIC SYLLABLE QYO
-	{0x2DC8, 0x2DCE, prOLetter},   // Lo   [7] ETHIOPIC SYLLABLE KYA..ETHIOPIC SYLLABLE KYO
-	{0x2DD0, 0x2DD6, prOLetter},   // Lo   [7] ETHIOPIC SYLLABLE XYA..ETHIOPIC SYLLABLE XYO
-	{0x2DD8, 0x2DDE, prOLetter},   // Lo   [7] ETHIOPIC SYLLABLE GYA..ETHIOPIC SYLLABLE GYO
-	{0x2DE0, 0x2DFF, prExtend},    // Mn  [32] COMBINING CYRILLIC LETTER BE..COMBINING CYRILLIC LETTER IOTIFIED BIG YUS
-	{0x2E00, 0x2E01, prClose},     // Po   [2] RIGHT ANGLE SUBSTITUTION MARKER..RIGHT ANGLE DOTTED SUBSTITUTION MARKER
-	{0x2E02, 0x2E02, prClose},     // Pi       LEFT SUBSTITUTION BRACKET
-	{0x2E03, 0x2E03, prClose},     // Pf       RIGHT SUBSTITUTION BRACKET
-	{0x2E04, 0x2E04, prClose},     // Pi       LEFT DOTTED SUBSTITUTION BRACKET
-	{0x2E05, 0x2E05, prClose},     // Pf       RIGHT DOTTED SUBSTITUTION BRACKET
-	{0x2E06, 0x2E08, prClose},     // Po   [3] RAISED INTERPOLATION MARKER..DOTTED TRANSPOSITION MARKER
-	{0x2E09, 0x2E09, prClose},     // Pi       LEFT TRANSPOSITION BRACKET
-	{0x2E0A, 0x2E0A, prClose},     // Pf       RIGHT TRANSPOSITION BRACKET
-	{0x2E0B, 0x2E0B, prClose},     // Po       RAISED SQUARE
-	{0x2E0C, 0x2E0C, prClose},     // Pi       LEFT RAISED OMISSION BRACKET
-	{0x2E0D, 0x2E0D, prClose},     // Pf       RIGHT RAISED OMISSION BRACKET
-	{0x2E1C, 0x2E1C, prClose},     // Pi       LEFT LOW PARAPHRASE BRACKET
-	{0x2E1D, 0x2E1D, prClose},     // Pf       RIGHT LOW PARAPHRASE BRACKET
-	{0x2E20, 0x2E20, prClose},     // Pi       LEFT VERTICAL BAR WITH QUILL
-	{0x2E21, 0x2E21, prClose},     // Pf       RIGHT VERTICAL BAR WITH QUILL
-	{0x2E22, 0x2E22, prClose},     // Ps       TOP LEFT HALF BRACKET
-	{0x2E23, 0x2E23, prClose},     // Pe       TOP RIGHT HALF BRACKET
-	{0x2E24, 0x2E24, prClose},     // Ps       BOTTOM LEFT HALF BRACKET
-	{0x2E25, 0x2E25, prClose},     // Pe       BOTTOM RIGHT HALF BRACKET
-	{0x2E26, 0x2E26, prClose},     // Ps       LEFT SIDEWAYS U BRACKET
-	{0x2E27, 0x2E27, prClose},     // Pe       RIGHT SIDEWAYS U BRACKET
-	{0x2E28, 0x2E28, prClose},     // Ps       LEFT DOUBLE PARENTHESIS
-	{0x2E29, 0x2E29, prClose},     // Pe       RIGHT DOUBLE PARENTHESIS
-	{0x2E2E, 0x2E2E, prSTerm},     // Po       REVERSED QUESTION MARK
-	{0x2E2F, 0x2E2F, prOLetter},   // Lm       VERTICAL TILDE
-	{0x2E3C, 0x2E3C, prSTerm},     // Po       STENOGRAPHIC FULL STOP
-	{0x2E42, 0x2E42, prClose},     // Ps       DOUBLE LOW-REVERSED-9 QUOTATION MARK
-	{0x2E53, 0x2E54, prSTerm},     // Po   [2] MEDIEVAL EXCLAMATION MARK..MEDIEVAL QUESTION MARK
-	{0x2E55, 0x2E55, prClose},     // Ps       LEFT SQUARE BRACKET WITH STROKE
-	{0x2E56, 0x2E56, prClose},     // Pe       RIGHT SQUARE BRACKET WITH STROKE
-	{0x2E57, 0x2E57, prClose},     // Ps       LEFT SQUARE BRACKET WITH DOUBLE STROKE
-	{0x2E58, 0x2E58, prClose},     // Pe       RIGHT SQUARE BRACKET WITH DOUBLE STROKE
-	{0x2E59, 0x2E59, prClose},     // Ps       TOP HALF LEFT PARENTHESIS
-	{0x2E5A, 0x2E5A, prClose},     // Pe       TOP HALF RIGHT PARENTHESIS
-	{0x2E5B, 0x2E5B, prClose},     // Ps       BOTTOM HALF LEFT PARENTHESIS
-	{0x2E5C, 0x2E5C, prClose},     // Pe       BOTTOM HALF RIGHT PARENTHESIS
-	{0x3000, 0x3000, prSp},        // Zs       IDEOGRAPHIC SPACE
-	{0x3001, 0x3001, prSContinue}, // Po       IDEOGRAPHIC COMMA
-	{0x3002, 0x3002, prSTerm},     // Po       IDEOGRAPHIC FULL STOP
-	{0x3005, 0x3005, prOLetter},   // Lm       IDEOGRAPHIC ITERATION MARK
-	{0x3006, 0x3006, prOLetter},   // Lo       IDEOGRAPHIC CLOSING MARK
-	{0x3007, 0x3007, prOLetter},   // Nl       IDEOGRAPHIC NUMBER ZERO
-	{0x3008, 0x3008, prClose},     // Ps       LEFT ANGLE BRACKET
-	{0x3009, 0x3009, prClose},     // Pe       RIGHT ANGLE BRACKET
-	{0x300A, 0x300A, prClose},     // Ps       LEFT DOUBLE ANGLE BRACKET
-	{0x300B, 0x300B, prClose},     // Pe       RIGHT DOUBLE ANGLE BRACKET
-	{0x300C, 0x300C, prClose},     // Ps       LEFT CORNER BRACKET
-	{0x300D, 0x300D, prClose},     // Pe       RIGHT CORNER BRACKET
-	{0x300E, 0x300E, prClose},     // Ps       LEFT WHITE CORNER BRACKET
-	{0x300F, 0x300F, prClose},     // Pe       RIGHT WHITE CORNER BRACKET
-	{0x3010, 0x3010, prClose},     // Ps       LEFT BLACK LENTICULAR BRACKET
-	{0x3011, 0x3011, prClose},     // Pe       RIGHT BLACK LENTICULAR BRACKET
-	{0x3014, 0x3014, prClose},     // Ps       LEFT TORTOISE SHELL BRACKET
-	{0x3015, 0x3015, prClose},     // Pe       RIGHT TORTOISE SHELL BRACKET
-	{0x3016, 0x3016, prClose},     // Ps       LEFT WHITE LENTICULAR BRACKET
-	{0x3017, 0x3017, prClose},     // Pe       RIGHT WHITE LENTICULAR BRACKET
-	{0x3018, 0x3018, prClose},     // Ps       LEFT WHITE TORTOISE SHELL BRACKET
-	{0x3019, 0x3019, prClose},     // Pe       RIGHT WHITE TORTOISE SHELL BRACKET
-	{0x301A, 0x301A, prClose},     // Ps       LEFT WHITE SQUARE BRACKET
-	{0x301B, 0x301B, prClose},     // Pe       RIGHT WHITE SQUARE BRACKET
-	{0x301D, 0x301D, prClose},     // Ps       REVERSED DOUBLE PRIME QUOTATION MARK
-	{0x301E, 0x301F, prClose},     // Pe   [2] DOUBLE PRIME QUOTATION MARK..LOW DOUBLE PRIME QUOTATION MARK
-	{0x3021, 0x3029, prOLetter},   // Nl   [9] HANGZHOU NUMERAL ONE..HANGZHOU NUMERAL NINE
-	{0x302A, 0x302D, prExtend},    // Mn   [4] IDEOGRAPHIC LEVEL TONE MARK..IDEOGRAPHIC ENTERING TONE MARK
-	{0x302E, 0x302F, prExtend},    // Mc   [2] HANGUL SINGLE DOT TONE MARK..HANGUL DOUBLE DOT TONE MARK
-	{0x3031, 0x3035, prOLetter},   // Lm   [5] VERTICAL KANA REPEAT MARK..VERTICAL KANA REPEAT MARK LOWER HALF
-	{0x3038, 0x303A, prOLetter},   // Nl   [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY
-	{0x303B, 0x303B, prOLetter},   // Lm       VERTICAL IDEOGRAPHIC ITERATION MARK
-	{0x303C, 0x303C, prOLetter},   // Lo       MASU MARK
-	{0x3041, 0x3096, prOLetter},   // Lo  [86] HIRAGANA LETTER SMALL A..HIRAGANA LETTER SMALL KE
-	{0x3099, 0x309A, prExtend},    // Mn   [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
-	{0x309D, 0x309E, prOLetter},   // Lm   [2] HIRAGANA ITERATION MARK..HIRAGANA VOICED ITERATION MARK
-	{0x309F, 0x309F, prOLetter},   // Lo       HIRAGANA DIGRAPH YORI
-	{0x30A1, 0x30FA, prOLetter},   // Lo  [90] KATAKANA LETTER SMALL A..KATAKANA LETTER VO
-	{0x30FC, 0x30FE, prOLetter},   // Lm   [3] KATAKANA-HIRAGANA PROLONGED SOUND MARK..KATAKANA VOICED ITERATION MARK
-	{0x30FF, 0x30FF, prOLetter},   // Lo       KATAKANA DIGRAPH KOTO
-	{0x3105, 0x312F, prOLetter},   // Lo  [43] BOPOMOFO LETTER B..BOPOMOFO LETTER NN
-	{0x3131, 0x318E, prOLetter},   // Lo  [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE
-	{0x31A0, 0x31BF, prOLetter},   // Lo  [32] BOPOMOFO LETTER BU..BOPOMOFO LETTER AH
-	{0x31F0, 0x31FF, prOLetter},   // Lo  [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO
-	{0x3400, 0x4DBF, prOLetter},   // Lo [6592] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DBF
-	{0x4E00, 0xA014, prOLetter},   // Lo [21013] CJK UNIFIED IDEOGRAPH-4E00..YI SYLLABLE E
-	{0xA015, 0xA015, prOLetter},   // Lm       YI SYLLABLE WU
-	{0xA016, 0xA48C, prOLetter},   // Lo [1143] YI SYLLABLE BIT..YI SYLLABLE YYR
-	{0xA4D0, 0xA4F7, prOLetter},   // Lo  [40] LISU LETTER BA..LISU LETTER OE
-	{0xA4F8, 0xA4FD, prOLetter},   // Lm   [6] LISU LETTER TONE MYA TI..LISU LETTER TONE MYA JEU
-	{0xA4FF, 0xA4FF, prSTerm},     // Po       LISU PUNCTUATION FULL STOP
-	{0xA500, 0xA60B, prOLetter},   // Lo [268] VAI SYLLABLE EE..VAI SYLLABLE NG
-	{0xA60C, 0xA60C, prOLetter},   // Lm       VAI SYLLABLE LENGTHENER
-	{0xA60E, 0xA60F, prSTerm},     // Po   [2] VAI FULL STOP..VAI QUESTION MARK
-	{0xA610, 0xA61F, prOLetter},   // Lo  [16] VAI SYLLABLE NDOLE FA..VAI SYMBOL JONG
-	{0xA620, 0xA629, prNumeric},   // Nd  [10] VAI DIGIT ZERO..VAI DIGIT NINE
-	{0xA62A, 0xA62B, prOLetter},   // Lo   [2] VAI SYLLABLE NDOLE MA..VAI SYLLABLE NDOLE DO
-	{0xA640, 0xA640, prUpper},     // L&       CYRILLIC CAPITAL LETTER ZEMLYA
-	{0xA641, 0xA641, prLower},     // L&       CYRILLIC SMALL LETTER ZEMLYA
-	{0xA642, 0xA642, prUpper},     // L&       CYRILLIC CAPITAL LETTER DZELO
-	{0xA643, 0xA643, prLower},     // L&       CYRILLIC SMALL LETTER DZELO
-	{0xA644, 0xA644, prUpper},     // L&       CYRILLIC CAPITAL LETTER REVERSED DZE
-	{0xA645, 0xA645, prLower},     // L&       CYRILLIC SMALL LETTER REVERSED DZE
-	{0xA646, 0xA646, prUpper},     // L&       CYRILLIC CAPITAL LETTER IOTA
-	{0xA647, 0xA647, prLower},     // L&       CYRILLIC SMALL LETTER IOTA
-	{0xA648, 0xA648, prUpper},     // L&       CYRILLIC CAPITAL LETTER DJERV
-	{0xA649, 0xA649, prLower},     // L&       CYRILLIC SMALL LETTER DJERV
-	{0xA64A, 0xA64A, prUpper},     // L&       CYRILLIC CAPITAL LETTER MONOGRAPH UK
-	{0xA64B, 0xA64B, prLower},     // L&       CYRILLIC SMALL LETTER MONOGRAPH UK
-	{0xA64C, 0xA64C, prUpper},     // L&       CYRILLIC CAPITAL LETTER BROAD OMEGA
-	{0xA64D, 0xA64D, prLower},     // L&       CYRILLIC SMALL LETTER BROAD OMEGA
-	{0xA64E, 0xA64E, prUpper},     // L&       CYRILLIC CAPITAL LETTER NEUTRAL YER
-	{0xA64F, 0xA64F, prLower},     // L&       CYRILLIC SMALL LETTER NEUTRAL YER
-	{0xA650, 0xA650, prUpper},     // L&       CYRILLIC CAPITAL LETTER YERU WITH BACK YER
-	{0xA651, 0xA651, prLower},     // L&       CYRILLIC SMALL LETTER YERU WITH BACK YER
-	{0xA652, 0xA652, prUpper},     // L&       CYRILLIC CAPITAL LETTER IOTIFIED YAT
-	{0xA653, 0xA653, prLower},     // L&       CYRILLIC SMALL LETTER IOTIFIED YAT
-	{0xA654, 0xA654, prUpper},     // L&       CYRILLIC CAPITAL LETTER REVERSED YU
-	{0xA655, 0xA655, prLower},     // L&       CYRILLIC SMALL LETTER REVERSED YU
-	{0xA656, 0xA656, prUpper},     // L&       CYRILLIC CAPITAL LETTER IOTIFIED A
-	{0xA657, 0xA657, prLower},     // L&       CYRILLIC SMALL LETTER IOTIFIED A
-	{0xA658, 0xA658, prUpper},     // L&       CYRILLIC CAPITAL LETTER CLOSED LITTLE YUS
-	{0xA659, 0xA659, prLower},     // L&       CYRILLIC SMALL LETTER CLOSED LITTLE YUS
-	{0xA65A, 0xA65A, prUpper},     // L&       CYRILLIC CAPITAL LETTER BLENDED YUS
-	{0xA65B, 0xA65B, prLower},     // L&       CYRILLIC SMALL LETTER BLENDED YUS
-	{0xA65C, 0xA65C, prUpper},     // L&       CYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUS
-	{0xA65D, 0xA65D, prLower},     // L&       CYRILLIC SMALL LETTER IOTIFIED CLOSED LITTLE YUS
-	{0xA65E, 0xA65E, prUpper},     // L&       CYRILLIC CAPITAL LETTER YN
-	{0xA65F, 0xA65F, prLower},     // L&       CYRILLIC SMALL LETTER YN
-	{0xA660, 0xA660, prUpper},     // L&       CYRILLIC CAPITAL LETTER REVERSED TSE
-	{0xA661, 0xA661, prLower},     // L&       CYRILLIC SMALL LETTER REVERSED TSE
-	{0xA662, 0xA662, prUpper},     // L&       CYRILLIC CAPITAL LETTER SOFT DE
-	{0xA663, 0xA663, prLower},     // L&       CYRILLIC SMALL LETTER SOFT DE
-	{0xA664, 0xA664, prUpper},     // L&       CYRILLIC CAPITAL LETTER SOFT EL
-	{0xA665, 0xA665, prLower},     // L&       CYRILLIC SMALL LETTER SOFT EL
-	{0xA666, 0xA666, prUpper},     // L&       CYRILLIC CAPITAL LETTER SOFT EM
-	{0xA667, 0xA667, prLower},     // L&       CYRILLIC SMALL LETTER SOFT EM
-	{0xA668, 0xA668, prUpper},     // L&       CYRILLIC CAPITAL LETTER MONOCULAR O
-	{0xA669, 0xA669, prLower},     // L&       CYRILLIC SMALL LETTER MONOCULAR O
-	{0xA66A, 0xA66A, prUpper},     // L&       CYRILLIC CAPITAL LETTER BINOCULAR O
-	{0xA66B, 0xA66B, prLower},     // L&       CYRILLIC SMALL LETTER BINOCULAR O
-	{0xA66C, 0xA66C, prUpper},     // L&       CYRILLIC CAPITAL LETTER DOUBLE MONOCULAR O
-	{0xA66D, 0xA66D, prLower},     // L&       CYRILLIC SMALL LETTER DOUBLE MONOCULAR O
-	{0xA66E, 0xA66E, prOLetter},   // Lo       CYRILLIC LETTER MULTIOCULAR O
-	{0xA66F, 0xA66F, prExtend},    // Mn       COMBINING CYRILLIC VZMET
-	{0xA670, 0xA672, prExtend},    // Me   [3] COMBINING CYRILLIC TEN MILLIONS SIGN..COMBINING CYRILLIC THOUSAND MILLIONS SIGN
-	{0xA674, 0xA67D, prExtend},    // Mn  [10] COMBINING CYRILLIC LETTER UKRAINIAN IE..COMBINING CYRILLIC PAYEROK
-	{0xA67F, 0xA67F, prOLetter},   // Lm       CYRILLIC PAYEROK
-	{0xA680, 0xA680, prUpper},     // L&       CYRILLIC CAPITAL LETTER DWE
-	{0xA681, 0xA681, prLower},     // L&       CYRILLIC SMALL LETTER DWE
-	{0xA682, 0xA682, prUpper},     // L&       CYRILLIC CAPITAL LETTER DZWE
-	{0xA683, 0xA683, prLower},     // L&       CYRILLIC SMALL LETTER DZWE
-	{0xA684, 0xA684, prUpper},     // L&       CYRILLIC CAPITAL LETTER ZHWE
-	{0xA685, 0xA685, prLower},     // L&       CYRILLIC SMALL LETTER ZHWE
-	{0xA686, 0xA686, prUpper},     // L&       CYRILLIC CAPITAL LETTER CCHE
-	{0xA687, 0xA687, prLower},     // L&       CYRILLIC SMALL LETTER CCHE
-	{0xA688, 0xA688, prUpper},     // L&       CYRILLIC CAPITAL LETTER DZZE
-	{0xA689, 0xA689, prLower},     // L&       CYRILLIC SMALL LETTER DZZE
-	{0xA68A, 0xA68A, prUpper},     // L&       CYRILLIC CAPITAL LETTER TE WITH MIDDLE HOOK
-	{0xA68B, 0xA68B, prLower},     // L&       CYRILLIC SMALL LETTER TE WITH MIDDLE HOOK
-	{0xA68C, 0xA68C, prUpper},     // L&       CYRILLIC CAPITAL LETTER TWE
-	{0xA68D, 0xA68D, prLower},     // L&       CYRILLIC SMALL LETTER TWE
-	{0xA68E, 0xA68E, prUpper},     // L&       CYRILLIC CAPITAL LETTER TSWE
-	{0xA68F, 0xA68F, prLower},     // L&       CYRILLIC SMALL LETTER TSWE
-	{0xA690, 0xA690, prUpper},     // L&       CYRILLIC CAPITAL LETTER TSSE
-	{0xA691, 0xA691, prLower},     // L&       CYRILLIC SMALL LETTER TSSE
-	{0xA692, 0xA692, prUpper},     // L&       CYRILLIC CAPITAL LETTER TCHE
-	{0xA693, 0xA693, prLower},     // L&       CYRILLIC SMALL LETTER TCHE
-	{0xA694, 0xA694, prUpper},     // L&       CYRILLIC CAPITAL LETTER HWE
-	{0xA695, 0xA695, prLower},     // L&       CYRILLIC SMALL LETTER HWE
-	{0xA696, 0xA696, prUpper},     // L&       CYRILLIC CAPITAL LETTER SHWE
-	{0xA697, 0xA697, prLower},     // L&       CYRILLIC SMALL LETTER SHWE
-	{0xA698, 0xA698, prUpper},     // L&       CYRILLIC CAPITAL LETTER DOUBLE O
-	{0xA699, 0xA699, prLower},     // L&       CYRILLIC SMALL LETTER DOUBLE O
-	{0xA69A, 0xA69A, prUpper},     // L&       CYRILLIC CAPITAL LETTER CROSSED O
-	{0xA69B, 0xA69B, prLower},     // L&       CYRILLIC SMALL LETTER CROSSED O
-	{0xA69C, 0xA69D, prLower},     // Lm   [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFIER LETTER CYRILLIC SOFT SIGN
-	{0xA69E, 0xA69F, prExtend},    // Mn   [2] COMBINING CYRILLIC LETTER EF..COMBINING CYRILLIC LETTER IOTIFIED E
-	{0xA6A0, 0xA6E5, prOLetter},   // Lo  [70] BAMUM LETTER A..BAMUM LETTER KI
-	{0xA6E6, 0xA6EF, prOLetter},   // Nl  [10] BAMUM LETTER MO..BAMUM LETTER KOGHOM
-	{0xA6F0, 0xA6F1, prExtend},    // Mn   [2] BAMUM COMBINING MARK KOQNDON..BAMUM COMBINING MARK TUKWENTIS
-	{0xA6F3, 0xA6F3, prSTerm},     // Po       BAMUM FULL STOP
-	{0xA6F7, 0xA6F7, prSTerm},     // Po       BAMUM QUESTION MARK
-	{0xA717, 0xA71F, prOLetter},   // Lm   [9] MODIFIER LETTER DOT VERTICAL BAR..MODIFIER LETTER LOW INVERTED EXCLAMATION MARK
-	{0xA722, 0xA722, prUpper},     // L&       LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF
-	{0xA723, 0xA723, prLower},     // L&       LATIN SMALL LETTER EGYPTOLOGICAL ALEF
-	{0xA724, 0xA724, prUpper},     // L&       LATIN CAPITAL LETTER EGYPTOLOGICAL AIN
-	{0xA725, 0xA725, prLower},     // L&       LATIN SMALL LETTER EGYPTOLOGICAL AIN
-	{0xA726, 0xA726, prUpper},     // L&       LATIN CAPITAL LETTER HENG
-	{0xA727, 0xA727, prLower},     // L&       LATIN SMALL LETTER HENG
-	{0xA728, 0xA728, prUpper},     // L&       LATIN CAPITAL LETTER TZ
-	{0xA729, 0xA729, prLower},     // L&       LATIN SMALL LETTER TZ
-	{0xA72A, 0xA72A, prUpper},     // L&       LATIN CAPITAL LETTER TRESILLO
-	{0xA72B, 0xA72B, prLower},     // L&       LATIN SMALL LETTER TRESILLO
-	{0xA72C, 0xA72C, prUpper},     // L&       LATIN CAPITAL LETTER CUATRILLO
-	{0xA72D, 0xA72D, prLower},     // L&       LATIN SMALL LETTER CUATRILLO
-	{0xA72E, 0xA72E, prUpper},     // L&       LATIN CAPITAL LETTER CUATRILLO WITH COMMA
-	{0xA72F, 0xA731, prLower},     // L&   [3] LATIN SMALL LETTER CUATRILLO WITH COMMA..LATIN LETTER SMALL CAPITAL S
-	{0xA732, 0xA732, prUpper},     // L&       LATIN CAPITAL LETTER AA
-	{0xA733, 0xA733, prLower},     // L&       LATIN SMALL LETTER AA
-	{0xA734, 0xA734, prUpper},     // L&       LATIN CAPITAL LETTER AO
-	{0xA735, 0xA735, prLower},     // L&       LATIN SMALL LETTER AO
-	{0xA736, 0xA736, prUpper},     // L&       LATIN CAPITAL LETTER AU
-	{0xA737, 0xA737, prLower},     // L&       LATIN SMALL LETTER AU
-	{0xA738, 0xA738, prUpper},     // L&       LATIN CAPITAL LETTER AV
-	{0xA739, 0xA739, prLower},     // L&       LATIN SMALL LETTER AV
-	{0xA73A, 0xA73A, prUpper},     // L&       LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR
-	{0xA73B, 0xA73B, prLower},     // L&       LATIN SMALL LETTER AV WITH HORIZONTAL BAR
-	{0xA73C, 0xA73C, prUpper},     // L&       LATIN CAPITAL LETTER AY
-	{0xA73D, 0xA73D, prLower},     // L&       LATIN SMALL LETTER AY
-	{0xA73E, 0xA73E, prUpper},     // L&       LATIN CAPITAL LETTER REVERSED C WITH DOT
-	{0xA73F, 0xA73F, prLower},     // L&       LATIN SMALL LETTER REVERSED C WITH DOT
-	{0xA740, 0xA740, prUpper},     // L&       LATIN CAPITAL LETTER K WITH STROKE
-	{0xA741, 0xA741, prLower},     // L&       LATIN SMALL LETTER K WITH STROKE
-	{0xA742, 0xA742, prUpper},     // L&       LATIN CAPITAL LETTER K WITH DIAGONAL STROKE
-	{0xA743, 0xA743, prLower},     // L&       LATIN SMALL LETTER K WITH DIAGONAL STROKE
-	{0xA744, 0xA744, prUpper},     // L&       LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE
-	{0xA745, 0xA745, prLower},     // L&       LATIN SMALL LETTER K WITH STROKE AND DIAGONAL STROKE
-	{0xA746, 0xA746, prUpper},     // L&       LATIN CAPITAL LETTER BROKEN L
-	{0xA747, 0xA747, prLower},     // L&       LATIN SMALL LETTER BROKEN L
-	{0xA748, 0xA748, prUpper},     // L&       LATIN CAPITAL LETTER L WITH HIGH STROKE
-	{0xA749, 0xA749, prLower},     // L&       LATIN SMALL LETTER L WITH HIGH STROKE
-	{0xA74A, 0xA74A, prUpper},     // L&       LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY
-	{0xA74B, 0xA74B, prLower},     // L&       LATIN SMALL LETTER O WITH LONG STROKE OVERLAY
-	{0xA74C, 0xA74C, prUpper},     // L&       LATIN CAPITAL LETTER O WITH LOOP
-	{0xA74D, 0xA74D, prLower},     // L&       LATIN SMALL LETTER O WITH LOOP
-	{0xA74E, 0xA74E, prUpper},     // L&       LATIN CAPITAL LETTER OO
-	{0xA74F, 0xA74F, prLower},     // L&       LATIN SMALL LETTER OO
-	{0xA750, 0xA750, prUpper},     // L&       LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER
-	{0xA751, 0xA751, prLower},     // L&       LATIN SMALL LETTER P WITH STROKE THROUGH DESCENDER
-	{0xA752, 0xA752, prUpper},     // L&       LATIN CAPITAL LETTER P WITH FLOURISH
-	{0xA753, 0xA753, prLower},     // L&       LATIN SMALL LETTER P WITH FLOURISH
-	{0xA754, 0xA754, prUpper},     // L&       LATIN CAPITAL LETTER P WITH SQUIRREL TAIL
-	{0xA755, 0xA755, prLower},     // L&       LATIN SMALL LETTER P WITH SQUIRREL TAIL
-	{0xA756, 0xA756, prUpper},     // L&       LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER
-	{0xA757, 0xA757, prLower},     // L&       LATIN SMALL LETTER Q WITH STROKE THROUGH DESCENDER
-	{0xA758, 0xA758, prUpper},     // L&       LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE
-	{0xA759, 0xA759, prLower},     // L&       LATIN SMALL LETTER Q WITH DIAGONAL STROKE
-	{0xA75A, 0xA75A, prUpper},     // L&       LATIN CAPITAL LETTER R ROTUNDA
-	{0xA75B, 0xA75B, prLower},     // L&       LATIN SMALL LETTER R ROTUNDA
-	{0xA75C, 0xA75C, prUpper},     // L&       LATIN CAPITAL LETTER RUM ROTUNDA
-	{0xA75D, 0xA75D, prLower},     // L&       LATIN SMALL LETTER RUM ROTUNDA
-	{0xA75E, 0xA75E, prUpper},     // L&       LATIN CAPITAL LETTER V WITH DIAGONAL STROKE
-	{0xA75F, 0xA75F, prLower},     // L&       LATIN SMALL LETTER V WITH DIAGONAL STROKE
-	{0xA760, 0xA760, prUpper},     // L&       LATIN CAPITAL LETTER VY
-	{0xA761, 0xA761, prLower},     // L&       LATIN SMALL LETTER VY
-	{0xA762, 0xA762, prUpper},     // L&       LATIN CAPITAL LETTER VISIGOTHIC Z
-	{0xA763, 0xA763, prLower},     // L&       LATIN SMALL LETTER VISIGOTHIC Z
-	{0xA764, 0xA764, prUpper},     // L&       LATIN CAPITAL LETTER THORN WITH STROKE
-	{0xA765, 0xA765, prLower},     // L&       LATIN SMALL LETTER THORN WITH STROKE
-	{0xA766, 0xA766, prUpper},     // L&       LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER
-	{0xA767, 0xA767, prLower},     // L&       LATIN SMALL LETTER THORN WITH STROKE THROUGH DESCENDER
-	{0xA768, 0xA768, prUpper},     // L&       LATIN CAPITAL LETTER VEND
-	{0xA769, 0xA769, prLower},     // L&       LATIN SMALL LETTER VEND
-	{0xA76A, 0xA76A, prUpper},     // L&       LATIN CAPITAL LETTER ET
-	{0xA76B, 0xA76B, prLower},     // L&       LATIN SMALL LETTER ET
-	{0xA76C, 0xA76C, prUpper},     // L&       LATIN CAPITAL LETTER IS
-	{0xA76D, 0xA76D, prLower},     // L&       LATIN SMALL LETTER IS
-	{0xA76E, 0xA76E, prUpper},     // L&       LATIN CAPITAL LETTER CON
-	{0xA76F, 0xA76F, prLower},     // L&       LATIN SMALL LETTER CON
-	{0xA770, 0xA770, prLower},     // Lm       MODIFIER LETTER US
-	{0xA771, 0xA778, prLower},     // L&   [8] LATIN SMALL LETTER DUM..LATIN SMALL LETTER UM
-	{0xA779, 0xA779, prUpper},     // L&       LATIN CAPITAL LETTER INSULAR D
-	{0xA77A, 0xA77A, prLower},     // L&       LATIN SMALL LETTER INSULAR D
-	{0xA77B, 0xA77B, prUpper},     // L&       LATIN CAPITAL LETTER INSULAR F
-	{0xA77C, 0xA77C, prLower},     // L&       LATIN SMALL LETTER INSULAR F
-	{0xA77D, 0xA77E, prUpper},     // L&   [2] LATIN CAPITAL LETTER INSULAR G..LATIN CAPITAL LETTER TURNED INSULAR G
-	{0xA77F, 0xA77F, prLower},     // L&       LATIN SMALL LETTER TURNED INSULAR G
-	{0xA780, 0xA780, prUpper},     // L&       LATIN CAPITAL LETTER TURNED L
-	{0xA781, 0xA781, prLower},     // L&       LATIN SMALL LETTER TURNED L
-	{0xA782, 0xA782, prUpper},     // L&       LATIN CAPITAL LETTER INSULAR R
-	{0xA783, 0xA783, prLower},     // L&       LATIN SMALL LETTER INSULAR R
-	{0xA784, 0xA784, prUpper},     // L&       LATIN CAPITAL LETTER INSULAR S
-	{0xA785, 0xA785, prLower},     // L&       LATIN SMALL LETTER INSULAR S
-	{0xA786, 0xA786, prUpper},     // L&       LATIN CAPITAL LETTER INSULAR T
-	{0xA787, 0xA787, prLower},     // L&       LATIN SMALL LETTER INSULAR T
-	{0xA788, 0xA788, prOLetter},   // Lm       MODIFIER LETTER LOW CIRCUMFLEX ACCENT
-	{0xA78B, 0xA78B, prUpper},     // L&       LATIN CAPITAL LETTER SALTILLO
-	{0xA78C, 0xA78C, prLower},     // L&       LATIN SMALL LETTER SALTILLO
-	{0xA78D, 0xA78D, prUpper},     // L&       LATIN CAPITAL LETTER TURNED H
-	{0xA78E, 0xA78E, prLower},     // L&       LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT
-	{0xA78F, 0xA78F, prOLetter},   // Lo       LATIN LETTER SINOLOGICAL DOT
-	{0xA790, 0xA790, prUpper},     // L&       LATIN CAPITAL LETTER N WITH DESCENDER
-	{0xA791, 0xA791, prLower},     // L&       LATIN SMALL LETTER N WITH DESCENDER
-	{0xA792, 0xA792, prUpper},     // L&       LATIN CAPITAL LETTER C WITH BAR
-	{0xA793, 0xA795, prLower},     // L&   [3] LATIN SMALL LETTER C WITH BAR..LATIN SMALL LETTER H WITH PALATAL HOOK
-	{0xA796, 0xA796, prUpper},     // L&       LATIN CAPITAL LETTER B WITH FLOURISH
-	{0xA797, 0xA797, prLower},     // L&       LATIN SMALL LETTER B WITH FLOURISH
-	{0xA798, 0xA798, prUpper},     // L&       LATIN CAPITAL LETTER F WITH STROKE
-	{0xA799, 0xA799, prLower},     // L&       LATIN SMALL LETTER F WITH STROKE
-	{0xA79A, 0xA79A, prUpper},     // L&       LATIN CAPITAL LETTER VOLAPUK AE
-	{0xA79B, 0xA79B, prLower},     // L&       LATIN SMALL LETTER VOLAPUK AE
-	{0xA79C, 0xA79C, prUpper},     // L&       LATIN CAPITAL LETTER VOLAPUK OE
-	{0xA79D, 0xA79D, prLower},     // L&       LATIN SMALL LETTER VOLAPUK OE
-	{0xA79E, 0xA79E, prUpper},     // L&       LATIN CAPITAL LETTER VOLAPUK UE
-	{0xA79F, 0xA79F, prLower},     // L&       LATIN SMALL LETTER VOLAPUK UE
-	{0xA7A0, 0xA7A0, prUpper},     // L&       LATIN CAPITAL LETTER G WITH OBLIQUE STROKE
-	{0xA7A1, 0xA7A1, prLower},     // L&       LATIN SMALL LETTER G WITH OBLIQUE STROKE
-	{0xA7A2, 0xA7A2, prUpper},     // L&       LATIN CAPITAL LETTER K WITH OBLIQUE STROKE
-	{0xA7A3, 0xA7A3, prLower},     // L&       LATIN SMALL LETTER K WITH OBLIQUE STROKE
-	{0xA7A4, 0xA7A4, prUpper},     // L&       LATIN CAPITAL LETTER N WITH OBLIQUE STROKE
-	{0xA7A5, 0xA7A5, prLower},     // L&       LATIN SMALL LETTER N WITH OBLIQUE STROKE
-	{0xA7A6, 0xA7A6, prUpper},     // L&       LATIN CAPITAL LETTER R WITH OBLIQUE STROKE
-	{0xA7A7, 0xA7A7, prLower},     // L&       LATIN SMALL LETTER R WITH OBLIQUE STROKE
-	{0xA7A8, 0xA7A8, prUpper},     // L&       LATIN CAPITAL LETTER S WITH OBLIQUE STROKE
-	{0xA7A9, 0xA7A9, prLower},     // L&       LATIN SMALL LETTER S WITH OBLIQUE STROKE
-	{0xA7AA, 0xA7AE, prUpper},     // L&   [5] LATIN CAPITAL LETTER H WITH HOOK..LATIN CAPITAL LETTER SMALL CAPITAL I
-	{0xA7AF, 0xA7AF, prLower},     // L&       LATIN LETTER SMALL CAPITAL Q
-	{0xA7B0, 0xA7B4, prUpper},     // L&   [5] LATIN CAPITAL LETTER TURNED K..LATIN CAPITAL LETTER BETA
-	{0xA7B5, 0xA7B5, prLower},     // L&       LATIN SMALL LETTER BETA
-	{0xA7B6, 0xA7B6, prUpper},     // L&       LATIN CAPITAL LETTER OMEGA
-	{0xA7B7, 0xA7B7, prLower},     // L&       LATIN SMALL LETTER OMEGA
-	{0xA7B8, 0xA7B8, prUpper},     // L&       LATIN CAPITAL LETTER U WITH STROKE
-	{0xA7B9, 0xA7B9, prLower},     // L&       LATIN SMALL LETTER U WITH STROKE
-	{0xA7BA, 0xA7BA, prUpper},     // L&       LATIN CAPITAL LETTER GLOTTAL A
-	{0xA7BB, 0xA7BB, prLower},     // L&       LATIN SMALL LETTER GLOTTAL A
-	{0xA7BC, 0xA7BC, prUpper},     // L&       LATIN CAPITAL LETTER GLOTTAL I
-	{0xA7BD, 0xA7BD, prLower},     // L&       LATIN SMALL LETTER GLOTTAL I
-	{0xA7BE, 0xA7BE, prUpper},     // L&       LATIN CAPITAL LETTER GLOTTAL U
-	{0xA7BF, 0xA7BF, prLower},     // L&       LATIN SMALL LETTER GLOTTAL U
-	{0xA7C0, 0xA7C0, prUpper},     // L&       LATIN CAPITAL LETTER OLD POLISH O
-	{0xA7C1, 0xA7C1, prLower},     // L&       LATIN SMALL LETTER OLD POLISH O
-	{0xA7C2, 0xA7C2, prUpper},     // L&       LATIN CAPITAL LETTER ANGLICANA W
-	{0xA7C3, 0xA7C3, prLower},     // L&       LATIN SMALL LETTER ANGLICANA W
-	{0xA7C4, 0xA7C7, prUpper},     // L&   [4] LATIN CAPITAL LETTER C WITH PALATAL HOOK..LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY
-	{0xA7C8, 0xA7C8, prLower},     // L&       LATIN SMALL LETTER D WITH SHORT STROKE OVERLAY
-	{0xA7C9, 0xA7C9, prUpper},     // L&       LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY
-	{0xA7CA, 0xA7CA, prLower},     // L&       LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY
-	{0xA7D0, 0xA7D0, prUpper},     // L&       LATIN CAPITAL LETTER CLOSED INSULAR G
-	{0xA7D1, 0xA7D1, prLower},     // L&       LATIN SMALL LETTER CLOSED INSULAR G
-	{0xA7D3, 0xA7D3, prLower},     // L&       LATIN SMALL LETTER DOUBLE THORN
-	{0xA7D5, 0xA7D5, prLower},     // L&       LATIN SMALL LETTER DOUBLE WYNN
-	{0xA7D6, 0xA7D6, prUpper},     // L&       LATIN CAPITAL LETTER MIDDLE SCOTS S
-	{0xA7D7, 0xA7D7, prLower},     // L&       LATIN SMALL LETTER MIDDLE SCOTS S
-	{0xA7D8, 0xA7D8, prUpper},     // L&       LATIN CAPITAL LETTER SIGMOID S
-	{0xA7D9, 0xA7D9, prLower},     // L&       LATIN SMALL LETTER SIGMOID S
-	{0xA7F2, 0xA7F4, prLower},     // Lm   [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q
-	{0xA7F5, 0xA7F5, prUpper},     // L&       LATIN CAPITAL LETTER REVERSED HALF H
-	{0xA7F6, 0xA7F6, prLower},     // L&       LATIN SMALL LETTER REVERSED HALF H
-	{0xA7F7, 0xA7F7, prOLetter},   // Lo       LATIN EPIGRAPHIC LETTER SIDEWAYS I
-	{0xA7F8, 0xA7F9, prLower},     // Lm   [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE
-	{0xA7FA, 0xA7FA, prLower},     // L&       LATIN LETTER SMALL CAPITAL TURNED M
-	{0xA7FB, 0xA801, prOLetter},   // Lo   [7] LATIN EPIGRAPHIC LETTER REVERSED F..SYLOTI NAGRI LETTER I
-	{0xA802, 0xA802, prExtend},    // Mn       SYLOTI NAGRI SIGN DVISVARA
-	{0xA803, 0xA805, prOLetter},   // Lo   [3] SYLOTI NAGRI LETTER U..SYLOTI NAGRI LETTER O
-	{0xA806, 0xA806, prExtend},    // Mn       SYLOTI NAGRI SIGN HASANTA
-	{0xA807, 0xA80A, prOLetter},   // Lo   [4] SYLOTI NAGRI LETTER KO..SYLOTI NAGRI LETTER GHO
-	{0xA80B, 0xA80B, prExtend},    // Mn       SYLOTI NAGRI SIGN ANUSVARA
-	{0xA80C, 0xA822, prOLetter},   // Lo  [23] SYLOTI NAGRI LETTER CO..SYLOTI NAGRI LETTER HO
-	{0xA823, 0xA824, prExtend},    // Mc   [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN I
-	{0xA825, 0xA826, prExtend},    // Mn   [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E
-	{0xA827, 0xA827, prExtend},    // Mc       SYLOTI NAGRI VOWEL SIGN OO
-	{0xA82C, 0xA82C, prExtend},    // Mn       SYLOTI NAGRI SIGN ALTERNATE HASANTA
-	{0xA840, 0xA873, prOLetter},   // Lo  [52] PHAGS-PA LETTER KA..PHAGS-PA LETTER CANDRABINDU
-	{0xA876, 0xA877, prSTerm},     // Po   [2] PHAGS-PA MARK SHAD..PHAGS-PA MARK DOUBLE SHAD
-	{0xA880, 0xA881, prExtend},    // Mc   [2] SAURASHTRA SIGN ANUSVARA..SAURASHTRA SIGN VISARGA
-	{0xA882, 0xA8B3, prOLetter},   // Lo  [50] SAURASHTRA LETTER A..SAURASHTRA LETTER LLA
-	{0xA8B4, 0xA8C3, prExtend},    // Mc  [16] SAURASHTRA CONSONANT SIGN HAARU..SAURASHTRA VOWEL SIGN AU
-	{0xA8C4, 0xA8C5, prExtend},    // Mn   [2] SAURASHTRA SIGN VIRAMA..SAURASHTRA SIGN CANDRABINDU
-	{0xA8CE, 0xA8CF, prSTerm},     // Po   [2] SAURASHTRA DANDA..SAURASHTRA DOUBLE DANDA
-	{0xA8D0, 0xA8D9, prNumeric},   // Nd  [10] SAURASHTRA DIGIT ZERO..SAURASHTRA DIGIT NINE
-	{0xA8E0, 0xA8F1, prExtend},    // Mn  [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA
-	{0xA8F2, 0xA8F7, prOLetter},   // Lo   [6] DEVANAGARI SIGN SPACING CANDRABINDU..DEVANAGARI SIGN CANDRABINDU AVAGRAHA
-	{0xA8FB, 0xA8FB, prOLetter},   // Lo       DEVANAGARI HEADSTROKE
-	{0xA8FD, 0xA8FE, prOLetter},   // Lo   [2] DEVANAGARI JAIN OM..DEVANAGARI LETTER AY
-	{0xA8FF, 0xA8FF, prExtend},    // Mn       DEVANAGARI VOWEL SIGN AY
-	{0xA900, 0xA909, prNumeric},   // Nd  [10] KAYAH LI DIGIT ZERO..KAYAH LI DIGIT NINE
-	{0xA90A, 0xA925, prOLetter},   // Lo  [28] KAYAH LI LETTER KA..KAYAH LI LETTER OO
-	{0xA926, 0xA92D, prExtend},    // Mn   [8] KAYAH LI VOWEL UE..KAYAH LI TONE CALYA PLOPHU
-	{0xA92F, 0xA92F, prSTerm},     // Po       KAYAH LI SIGN SHYA
-	{0xA930, 0xA946, prOLetter},   // Lo  [23] REJANG LETTER KA..REJANG LETTER A
-	{0xA947, 0xA951, prExtend},    // Mn  [11] REJANG VOWEL SIGN I..REJANG CONSONANT SIGN R
-	{0xA952, 0xA953, prExtend},    // Mc   [2] REJANG CONSONANT SIGN H..REJANG VIRAMA
-	{0xA960, 0xA97C, prOLetter},   // Lo  [29] HANGUL CHOSEONG TIKEUT-MIEUM..HANGUL CHOSEONG SSANGYEORINHIEUH
-	{0xA980, 0xA982, prExtend},    // Mn   [3] JAVANESE SIGN PANYANGGA..JAVANESE SIGN LAYAR
-	{0xA983, 0xA983, prExtend},    // Mc       JAVANESE SIGN WIGNYAN
-	{0xA984, 0xA9B2, prOLetter},   // Lo  [47] JAVANESE LETTER A..JAVANESE LETTER HA
-	{0xA9B3, 0xA9B3, prExtend},    // Mn       JAVANESE SIGN CECAK TELU
-	{0xA9B4, 0xA9B5, prExtend},    // Mc   [2] JAVANESE VOWEL SIGN TARUNG..JAVANESE VOWEL SIGN TOLONG
-	{0xA9B6, 0xA9B9, prExtend},    // Mn   [4] JAVANESE VOWEL SIGN WULU..JAVANESE VOWEL SIGN SUKU MENDUT
-	{0xA9BA, 0xA9BB, prExtend},    // Mc   [2] JAVANESE VOWEL SIGN TALING..JAVANESE VOWEL SIGN DIRGA MURE
-	{0xA9BC, 0xA9BD, prExtend},    // Mn   [2] JAVANESE VOWEL SIGN PEPET..JAVANESE CONSONANT SIGN KERET
-	{0xA9BE, 0xA9C0, prExtend},    // Mc   [3] JAVANESE CONSONANT SIGN PENGKAL..JAVANESE PANGKON
-	{0xA9C8, 0xA9C9, prSTerm},     // Po   [2] JAVANESE PADA LINGSA..JAVANESE PADA LUNGSI
-	{0xA9CF, 0xA9CF, prOLetter},   // Lm       JAVANESE PANGRANGKEP
-	{0xA9D0, 0xA9D9, prNumeric},   // Nd  [10] JAVANESE DIGIT ZERO..JAVANESE DIGIT NINE
-	{0xA9E0, 0xA9E4, prOLetter},   // Lo   [5] MYANMAR LETTER SHAN GHA..MYANMAR LETTER SHAN BHA
-	{0xA9E5, 0xA9E5, prExtend},    // Mn       MYANMAR SIGN SHAN SAW
-	{0xA9E6, 0xA9E6, prOLetter},   // Lm       MYANMAR MODIFIER LETTER SHAN REDUPLICATION
-	{0xA9E7, 0xA9EF, prOLetter},   // Lo   [9] MYANMAR LETTER TAI LAING NYA..MYANMAR LETTER TAI LAING NNA
-	{0xA9F0, 0xA9F9, prNumeric},   // Nd  [10] MYANMAR TAI LAING DIGIT ZERO..MYANMAR TAI LAING DIGIT NINE
-	{0xA9FA, 0xA9FE, prOLetter},   // Lo   [5] MYANMAR LETTER TAI LAING LLA..MYANMAR LETTER TAI LAING BHA
-	{0xAA00, 0xAA28, prOLetter},   // Lo  [41] CHAM LETTER A..CHAM LETTER HA
-	{0xAA29, 0xAA2E, prExtend},    // Mn   [6] CHAM VOWEL SIGN AA..CHAM VOWEL SIGN OE
-	{0xAA2F, 0xAA30, prExtend},    // Mc   [2] CHAM VOWEL SIGN O..CHAM VOWEL SIGN AI
-	{0xAA31, 0xAA32, prExtend},    // Mn   [2] CHAM VOWEL SIGN AU..CHAM VOWEL SIGN UE
-	{0xAA33, 0xAA34, prExtend},    // Mc   [2] CHAM CONSONANT SIGN YA..CHAM CONSONANT SIGN RA
-	{0xAA35, 0xAA36, prExtend},    // Mn   [2] CHAM CONSONANT SIGN LA..CHAM CONSONANT SIGN WA
-	{0xAA40, 0xAA42, prOLetter},   // Lo   [3] CHAM LETTER FINAL K..CHAM LETTER FINAL NG
-	{0xAA43, 0xAA43, prExtend},    // Mn       CHAM CONSONANT SIGN FINAL NG
-	{0xAA44, 0xAA4B, prOLetter},   // Lo   [8] CHAM LETTER FINAL CH..CHAM LETTER FINAL SS
-	{0xAA4C, 0xAA4C, prExtend},    // Mn       CHAM CONSONANT SIGN FINAL M
-	{0xAA4D, 0xAA4D, prExtend},    // Mc       CHAM CONSONANT SIGN FINAL H
-	{0xAA50, 0xAA59, prNumeric},   // Nd  [10] CHAM DIGIT ZERO..CHAM DIGIT NINE
-	{0xAA5D, 0xAA5F, prSTerm},     // Po   [3] CHAM PUNCTUATION DANDA..CHAM PUNCTUATION TRIPLE DANDA
-	{0xAA60, 0xAA6F, prOLetter},   // Lo  [16] MYANMAR LETTER KHAMTI GA..MYANMAR LETTER KHAMTI FA
-	{0xAA70, 0xAA70, prOLetter},   // Lm       MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION
-	{0xAA71, 0xAA76, prOLetter},   // Lo   [6] MYANMAR LETTER KHAMTI XA..MYANMAR LOGOGRAM KHAMTI HM
-	{0xAA7A, 0xAA7A, prOLetter},   // Lo       MYANMAR LETTER AITON RA
-	{0xAA7B, 0xAA7B, prExtend},    // Mc       MYANMAR SIGN PAO KAREN TONE
-	{0xAA7C, 0xAA7C, prExtend},    // Mn       MYANMAR SIGN TAI LAING TONE-2
-	{0xAA7D, 0xAA7D, prExtend},    // Mc       MYANMAR SIGN TAI LAING TONE-5
-	{0xAA7E, 0xAAAF, prOLetter},   // Lo  [50] MYANMAR LETTER SHWE PALAUNG CHA..TAI VIET LETTER HIGH O
-	{0xAAB0, 0xAAB0, prExtend},    // Mn       TAI VIET MAI KANG
-	{0xAAB1, 0xAAB1, prOLetter},   // Lo       TAI VIET VOWEL AA
-	{0xAAB2, 0xAAB4, prExtend},    // Mn   [3] TAI VIET VOWEL I..TAI VIET VOWEL U
-	{0xAAB5, 0xAAB6, prOLetter},   // Lo   [2] TAI VIET VOWEL E..TAI VIET VOWEL O
-	{0xAAB7, 0xAAB8, prExtend},    // Mn   [2] TAI VIET MAI KHIT..TAI VIET VOWEL IA
-	{0xAAB9, 0xAABD, prOLetter},   // Lo   [5] TAI VIET VOWEL UEA..TAI VIET VOWEL AN
-	{0xAABE, 0xAABF, prExtend},    // Mn   [2] TAI VIET VOWEL AM..TAI VIET TONE MAI EK
-	{0xAAC0, 0xAAC0, prOLetter},   // Lo       TAI VIET TONE MAI NUENG
-	{0xAAC1, 0xAAC1, prExtend},    // Mn       TAI VIET TONE MAI THO
-	{0xAAC2, 0xAAC2, prOLetter},   // Lo       TAI VIET TONE MAI SONG
-	{0xAADB, 0xAADC, prOLetter},   // Lo   [2] TAI VIET SYMBOL KON..TAI VIET SYMBOL NUENG
-	{0xAADD, 0xAADD, prOLetter},   // Lm       TAI VIET SYMBOL SAM
-	{0xAAE0, 0xAAEA, prOLetter},   // Lo  [11] MEETEI MAYEK LETTER E..MEETEI MAYEK LETTER SSA
-	{0xAAEB, 0xAAEB, prExtend},    // Mc       MEETEI MAYEK VOWEL SIGN II
-	{0xAAEC, 0xAAED, prExtend},    // Mn   [2] MEETEI MAYEK VOWEL SIGN UU..MEETEI MAYEK VOWEL SIGN AAI
-	{0xAAEE, 0xAAEF, prExtend},    // Mc   [2] MEETEI MAYEK VOWEL SIGN AU..MEETEI MAYEK VOWEL SIGN AAU
-	{0xAAF0, 0xAAF1, prSTerm},     // Po   [2] MEETEI MAYEK CHEIKHAN..MEETEI MAYEK AHANG KHUDAM
-	{0xAAF2, 0xAAF2, prOLetter},   // Lo       MEETEI MAYEK ANJI
-	{0xAAF3, 0xAAF4, prOLetter},   // Lm   [2] MEETEI MAYEK SYLLABLE REPETITION MARK..MEETEI MAYEK WORD REPETITION MARK
-	{0xAAF5, 0xAAF5, prExtend},    // Mc       MEETEI MAYEK VOWEL SIGN VISARGA
-	{0xAAF6, 0xAAF6, prExtend},    // Mn       MEETEI MAYEK VIRAMA
-	{0xAB01, 0xAB06, prOLetter},   // Lo   [6] ETHIOPIC SYLLABLE TTHU..ETHIOPIC SYLLABLE TTHO
-	{0xAB09, 0xAB0E, prOLetter},   // Lo   [6] ETHIOPIC SYLLABLE DDHU..ETHIOPIC SYLLABLE DDHO
-	{0xAB11, 0xAB16, prOLetter},   // Lo   [6] ETHIOPIC SYLLABLE DZU..ETHIOPIC SYLLABLE DZO
-	{0xAB20, 0xAB26, prOLetter},   // Lo   [7] ETHIOPIC SYLLABLE CCHHA..ETHIOPIC SYLLABLE CCHHO
-	{0xAB28, 0xAB2E, prOLetter},   // Lo   [7] ETHIOPIC SYLLABLE BBA..ETHIOPIC SYLLABLE BBO
-	{0xAB30, 0xAB5A, prLower},     // L&  [43] LATIN SMALL LETTER BARRED ALPHA..LATIN SMALL LETTER Y WITH SHORT RIGHT LEG
-	{0xAB5C, 0xAB5F, prLower},     // Lm   [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK
-	{0xAB60, 0xAB68, prLower},     // L&   [9] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE
-	{0xAB69, 0xAB69, prLower},     // Lm       MODIFIER LETTER SMALL TURNED W
-	{0xAB70, 0xABBF, prLower},     // L&  [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA
-	{0xABC0, 0xABE2, prOLetter},   // Lo  [35] MEETEI MAYEK LETTER KOK..MEETEI MAYEK LETTER I LONSUM
-	{0xABE3, 0xABE4, prExtend},    // Mc   [2] MEETEI MAYEK VOWEL SIGN ONAP..MEETEI MAYEK VOWEL SIGN INAP
-	{0xABE5, 0xABE5, prExtend},    // Mn       MEETEI MAYEK VOWEL SIGN ANAP
-	{0xABE6, 0xABE7, prExtend},    // Mc   [2] MEETEI MAYEK VOWEL SIGN YENAP..MEETEI MAYEK VOWEL SIGN SOUNAP
-	{0xABE8, 0xABE8, prExtend},    // Mn       MEETEI MAYEK VOWEL SIGN UNAP
-	{0xABE9, 0xABEA, prExtend},    // Mc   [2] MEETEI MAYEK VOWEL SIGN CHEINAP..MEETEI MAYEK VOWEL SIGN NUNG
-	{0xABEB, 0xABEB, prSTerm},     // Po       MEETEI MAYEK CHEIKHEI
-	{0xABEC, 0xABEC, prExtend},    // Mc       MEETEI MAYEK LUM IYEK
-	{0xABED, 0xABED, prExtend},    // Mn       MEETEI MAYEK APUN IYEK
-	{0xABF0, 0xABF9, prNumeric},   // Nd  [10] MEETEI MAYEK DIGIT ZERO..MEETEI MAYEK DIGIT NINE
-	{0xAC00, 0xD7A3, prOLetter},   // Lo [11172] HANGUL SYLLABLE GA..HANGUL SYLLABLE HIH
-	{0xD7B0, 0xD7C6, prOLetter},   // Lo  [23] HANGUL JUNGSEONG O-YEO..HANGUL JUNGSEONG ARAEA-E
-	{0xD7CB, 0xD7FB, prOLetter},   // Lo  [49] HANGUL JONGSEONG NIEUN-RIEUL..HANGUL JONGSEONG PHIEUPH-THIEUTH
-	{0xF900, 0xFA6D, prOLetter},   // Lo [366] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA6D
-	{0xFA70, 0xFAD9, prOLetter},   // Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9
-	{0xFB00, 0xFB06, prLower},     // L&   [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST
-	{0xFB13, 0xFB17, prLower},     // L&   [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH
-	{0xFB1D, 0xFB1D, prOLetter},   // Lo       HEBREW LETTER YOD WITH HIRIQ
-	{0xFB1E, 0xFB1E, prExtend},    // Mn       HEBREW POINT JUDEO-SPANISH VARIKA
-	{0xFB1F, 0xFB28, prOLetter},   // Lo  [10] HEBREW LIGATURE YIDDISH YOD YOD PATAH..HEBREW LETTER WIDE TAV
-	{0xFB2A, 0xFB36, prOLetter},   // Lo  [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH
-	{0xFB38, 0xFB3C, prOLetter},   // Lo   [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH
-	{0xFB3E, 0xFB3E, prOLetter},   // Lo       HEBREW LETTER MEM WITH DAGESH
-	{0xFB40, 0xFB41, prOLetter},   // Lo   [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH
-	{0xFB43, 0xFB44, prOLetter},   // Lo   [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH
-	{0xFB46, 0xFBB1, prOLetter},   // Lo [108] HEBREW LETTER TSADI WITH DAGESH..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM
-	{0xFBD3, 0xFD3D, prOLetter},   // Lo [363] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM
-	{0xFD3E, 0xFD3E, prClose},     // Pe       ORNATE LEFT PARENTHESIS
-	{0xFD3F, 0xFD3F, prClose},     // Ps       ORNATE RIGHT PARENTHESIS
-	{0xFD50, 0xFD8F, prOLetter},   // Lo  [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM
-	{0xFD92, 0xFDC7, prOLetter},   // Lo  [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM
-	{0xFDF0, 0xFDFB, prOLetter},   // Lo  [12] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE JALLAJALALOUHOU
-	{0xFE00, 0xFE0F, prExtend},    // Mn  [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16
-	{0xFE10, 0xFE11, prSContinue}, // Po   [2] PRESENTATION FORM FOR VERTICAL COMMA..PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC COMMA
-	{0xFE13, 0xFE13, prSContinue}, // Po       PRESENTATION FORM FOR VERTICAL COLON
-	{0xFE17, 0xFE17, prClose},     // Ps       PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET
-	{0xFE18, 0xFE18, prClose},     // Pe       PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET
-	{0xFE20, 0xFE2F, prExtend},    // Mn  [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC TITLO RIGHT HALF
-	{0xFE31, 0xFE32, prSContinue}, // Pd   [2] PRESENTATION FORM FOR VERTICAL EM DASH..PRESENTATION FORM FOR VERTICAL EN DASH
-	{0xFE35, 0xFE35, prClose},     // Ps       PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS
-	{0xFE36, 0xFE36, prClose},     // Pe       PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS
-	{0xFE37, 0xFE37, prClose},     // Ps       PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET
-	{0xFE38, 0xFE38, prClose},     // Pe       PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET
-	{0xFE39, 0xFE39, prClose},     // Ps       PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET
-	{0xFE3A, 0xFE3A, prClose},     // Pe       PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET
-	{0xFE3B, 0xFE3B, prClose},     // Ps       PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET
-	{0xFE3C, 0xFE3C, prClose},     // Pe       PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET
-	{0xFE3D, 0xFE3D, prClose},     // Ps       PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET
-	{0xFE3E, 0xFE3E, prClose},     // Pe       PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET
-	{0xFE3F, 0xFE3F, prClose},     // Ps       PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET
-	{0xFE40, 0xFE40, prClose},     // Pe       PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET
-	{0xFE41, 0xFE41, prClose},     // Ps       PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET
-	{0xFE42, 0xFE42, prClose},     // Pe       PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET
-	{0xFE43, 0xFE43, prClose},     // Ps       PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET
-	{0xFE44, 0xFE44, prClose},     // Pe       PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET
-	{0xFE47, 0xFE47, prClose},     // Ps       PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET
-	{0xFE48, 0xFE48, prClose},     // Pe       PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET
-	{0xFE50, 0xFE51, prSContinue}, // Po   [2] SMALL COMMA..SMALL IDEOGRAPHIC COMMA
-	{0xFE52, 0xFE52, prATerm},     // Po       SMALL FULL STOP
-	{0xFE55, 0xFE55, prSContinue}, // Po       SMALL COLON
-	{0xFE56, 0xFE57, prSTerm},     // Po   [2] SMALL QUESTION MARK..SMALL EXCLAMATION MARK
-	{0xFE58, 0xFE58, prSContinue}, // Pd       SMALL EM DASH
-	{0xFE59, 0xFE59, prClose},     // Ps       SMALL LEFT PARENTHESIS
-	{0xFE5A, 0xFE5A, prClose},     // Pe       SMALL RIGHT PARENTHESIS
-	{0xFE5B, 0xFE5B, prClose},     // Ps       SMALL LEFT CURLY BRACKET
-	{0xFE5C, 0xFE5C, prClose},     // Pe       SMALL RIGHT CURLY BRACKET
-	{0xFE5D, 0xFE5D, prClose},     // Ps       SMALL LEFT TORTOISE SHELL BRACKET
-	{0xFE5E, 0xFE5E, prClose},     // Pe       SMALL RIGHT TORTOISE SHELL BRACKET
-	{0xFE63, 0xFE63, prSContinue}, // Pd       SMALL HYPHEN-MINUS
-	{0xFE70, 0xFE74, prOLetter},   // Lo   [5] ARABIC FATHATAN ISOLATED FORM..ARABIC KASRATAN ISOLATED FORM
-	{0xFE76, 0xFEFC, prOLetter},   // Lo [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM
-	{0xFEFF, 0xFEFF, prFormat},    // Cf       ZERO WIDTH NO-BREAK SPACE
-	{0xFF01, 0xFF01, prSTerm},     // Po       FULLWIDTH EXCLAMATION MARK
-	{0xFF08, 0xFF08, prClose},     // Ps       FULLWIDTH LEFT PARENTHESIS
-	{0xFF09, 0xFF09, prClose},     // Pe       FULLWIDTH RIGHT PARENTHESIS
-	{0xFF0C, 0xFF0C, prSContinue}, // Po       FULLWIDTH COMMA
-	{0xFF0D, 0xFF0D, prSContinue}, // Pd       FULLWIDTH HYPHEN-MINUS
-	{0xFF0E, 0xFF0E, prATerm},     // Po       FULLWIDTH FULL STOP
-	{0xFF10, 0xFF19, prNumeric},   // Nd  [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE
-	{0xFF1A, 0xFF1A, prSContinue}, // Po       FULLWIDTH COLON
-	{0xFF1F, 0xFF1F, prSTerm},     // Po       FULLWIDTH QUESTION MARK
-	{0xFF21, 0xFF3A, prUpper},     // L&  [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z
-	{0xFF3B, 0xFF3B, prClose},     // Ps       FULLWIDTH LEFT SQUARE BRACKET
-	{0xFF3D, 0xFF3D, prClose},     // Pe       FULLWIDTH RIGHT SQUARE BRACKET
-	{0xFF41, 0xFF5A, prLower},     // L&  [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z
-	{0xFF5B, 0xFF5B, prClose},     // Ps       FULLWIDTH LEFT CURLY BRACKET
-	{0xFF5D, 0xFF5D, prClose},     // Pe       FULLWIDTH RIGHT CURLY BRACKET
-	{0xFF5F, 0xFF5F, prClose},     // Ps       FULLWIDTH LEFT WHITE PARENTHESIS
-	{0xFF60, 0xFF60, prClose},     // Pe       FULLWIDTH RIGHT WHITE PARENTHESIS
-	{0xFF61, 0xFF61, prSTerm},     // Po       HALFWIDTH IDEOGRAPHIC FULL STOP
-	{0xFF62, 0xFF62, prClose},     // Ps       HALFWIDTH LEFT CORNER BRACKET
-	{0xFF63, 0xFF63, prClose},     // Pe       HALFWIDTH RIGHT CORNER BRACKET
-	{0xFF64, 0xFF64, prSContinue}, // Po       HALFWIDTH IDEOGRAPHIC COMMA
-	{0xFF66, 0xFF6F, prOLetter},   // Lo  [10] HALFWIDTH KATAKANA LETTER WO..HALFWIDTH KATAKANA LETTER SMALL TU
-	{0xFF70, 0xFF70, prOLetter},   // Lm       HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK
-	{0xFF71, 0xFF9D, prOLetter},   // Lo  [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAKANA LETTER N
-	{0xFF9E, 0xFF9F, prExtend},    // Lm   [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
-	{0xFFA0, 0xFFBE, prOLetter},   // Lo  [31] HALFWIDTH HANGUL FILLER..HALFWIDTH HANGUL LETTER HIEUH
-	{0xFFC2, 0xFFC7, prOLetter},   // Lo   [6] HALFWIDTH HANGUL LETTER A..HALFWIDTH HANGUL LETTER E
-	{0xFFCA, 0xFFCF, prOLetter},   // Lo   [6] HALFWIDTH HANGUL LETTER YEO..HALFWIDTH HANGUL LETTER OE
-	{0xFFD2, 0xFFD7, prOLetter},   // Lo   [6] HALFWIDTH HANGUL LETTER YO..HALFWIDTH HANGUL LETTER YU
-	{0xFFDA, 0xFFDC, prOLetter},   // Lo   [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I
-	{0xFFF9, 0xFFFB, prFormat},    // Cf   [3] INTERLINEAR ANNOTATION ANCHOR..INTERLINEAR ANNOTATION TERMINATOR
-	{0x10000, 0x1000B, prOLetter}, // Lo  [12] LINEAR B SYLLABLE B008 A..LINEAR B SYLLABLE B046 JE
-	{0x1000D, 0x10026, prOLetter}, // Lo  [26] LINEAR B SYLLABLE B036 JO..LINEAR B SYLLABLE B032 QO
-	{0x10028, 0x1003A, prOLetter}, // Lo  [19] LINEAR B SYLLABLE B060 RA..LINEAR B SYLLABLE B042 WO
-	{0x1003C, 0x1003D, prOLetter}, // Lo   [2] LINEAR B SYLLABLE B017 ZA..LINEAR B SYLLABLE B074 ZE
-	{0x1003F, 0x1004D, prOLetter}, // Lo  [15] LINEAR B SYLLABLE B020 ZO..LINEAR B SYLLABLE B091 TWO
-	{0x10050, 0x1005D, prOLetter}, // Lo  [14] LINEAR B SYMBOL B018..LINEAR B SYMBOL B089
-	{0x10080, 0x100FA, prOLetter}, // Lo [123] LINEAR B IDEOGRAM B100 MAN..LINEAR B IDEOGRAM VESSEL B305
-	{0x10140, 0x10174, prOLetter}, // Nl  [53] GREEK ACROPHONIC ATTIC ONE QUARTER..GREEK ACROPHONIC STRATIAN FIFTY MNAS
-	{0x101FD, 0x101FD, prExtend},  // Mn       PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE
-	{0x10280, 0x1029C, prOLetter}, // Lo  [29] LYCIAN LETTER A..LYCIAN LETTER X
-	{0x102A0, 0x102D0, prOLetter}, // Lo  [49] CARIAN LETTER A..CARIAN LETTER UUU3
-	{0x102E0, 0x102E0, prExtend},  // Mn       COPTIC EPACT THOUSANDS MARK
-	{0x10300, 0x1031F, prOLetter}, // Lo  [32] OLD ITALIC LETTER A..OLD ITALIC LETTER ESS
-	{0x1032D, 0x10340, prOLetter}, // Lo  [20] OLD ITALIC LETTER YE..GOTHIC LETTER PAIRTHRA
-	{0x10341, 0x10341, prOLetter}, // Nl       GOTHIC LETTER NINETY
-	{0x10342, 0x10349, prOLetter}, // Lo   [8] GOTHIC LETTER RAIDA..GOTHIC LETTER OTHAL
-	{0x1034A, 0x1034A, prOLetter}, // Nl       GOTHIC LETTER NINE HUNDRED
-	{0x10350, 0x10375, prOLetter}, // Lo  [38] OLD PERMIC LETTER AN..OLD PERMIC LETTER IA
-	{0x10376, 0x1037A, prExtend},  // Mn   [5] COMBINING OLD PERMIC LETTER AN..COMBINING OLD PERMIC LETTER SII
-	{0x10380, 0x1039D, prOLetter}, // Lo  [30] UGARITIC LETTER ALPA..UGARITIC LETTER SSU
-	{0x103A0, 0x103C3, prOLetter}, // Lo  [36] OLD PERSIAN SIGN A..OLD PERSIAN SIGN HA
-	{0x103C8, 0x103CF, prOLetter}, // Lo   [8] OLD PERSIAN SIGN AURAMAZDAA..OLD PERSIAN SIGN BUUMISH
-	{0x103D1, 0x103D5, prOLetter}, // Nl   [5] OLD PERSIAN NUMBER ONE..OLD PERSIAN NUMBER HUNDRED
-	{0x10400, 0x10427, prUpper},   // L&  [40] DESERET CAPITAL LETTER LONG I..DESERET CAPITAL LETTER EW
-	{0x10428, 0x1044F, prLower},   // L&  [40] DESERET SMALL LETTER LONG I..DESERET SMALL LETTER EW
-	{0x10450, 0x1049D, prOLetter}, // Lo  [78] SHAVIAN LETTER PEEP..OSMANYA LETTER OO
-	{0x104A0, 0x104A9, prNumeric}, // Nd  [10] OSMANYA DIGIT ZERO..OSMANYA DIGIT NINE
-	{0x104B0, 0x104D3, prUpper},   // L&  [36] OSAGE CAPITAL LETTER A..OSAGE CAPITAL LETTER ZHA
-	{0x104D8, 0x104FB, prLower},   // L&  [36] OSAGE SMALL LETTER A..OSAGE SMALL LETTER ZHA
-	{0x10500, 0x10527, prOLetter}, // Lo  [40] ELBASAN LETTER A..ELBASAN LETTER KHE
-	{0x10530, 0x10563, prOLetter}, // Lo  [52] CAUCASIAN ALBANIAN LETTER ALT..CAUCASIAN ALBANIAN LETTER KIW
-	{0x10570, 0x1057A, prUpper},   // L&  [11] VITHKUQI CAPITAL LETTER A..VITHKUQI CAPITAL LETTER GA
-	{0x1057C, 0x1058A, prUpper},   // L&  [15] VITHKUQI CAPITAL LETTER HA..VITHKUQI CAPITAL LETTER RE
-	{0x1058C, 0x10592, prUpper},   // L&   [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE
-	{0x10594, 0x10595, prUpper},   // L&   [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE
-	{0x10597, 0x105A1, prLower},   // L&  [11] VITHKUQI SMALL LETTER A..VITHKUQI SMALL LETTER GA
-	{0x105A3, 0x105B1, prLower},   // L&  [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE
-	{0x105B3, 0x105B9, prLower},   // L&   [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE
-	{0x105BB, 0x105BC, prLower},   // L&   [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE
-	{0x10600, 0x10736, prOLetter}, // Lo [311] LINEAR A SIGN AB001..LINEAR A SIGN A664
-	{0x10740, 0x10755, prOLetter}, // Lo  [22] LINEAR A SIGN A701 A..LINEAR A SIGN A732 JE
-	{0x10760, 0x10767, prOLetter}, // Lo   [8] LINEAR A SIGN A800..LINEAR A SIGN A807
-	{0x10780, 0x10780, prLower},   // Lm       MODIFIER LETTER SMALL CAPITAL AA
-	{0x10781, 0x10782, prOLetter}, // Lm   [2] MODIFIER LETTER SUPERSCRIPT TRIANGULAR COLON..MODIFIER LETTER SUPERSCRIPT HALF TRIANGULAR COLON
-	{0x10783, 0x10785, prLower},   // Lm   [3] MODIFIER LETTER SMALL AE..MODIFIER LETTER SMALL B WITH HOOK
-	{0x10787, 0x107B0, prLower},   // Lm  [42] MODIFIER LETTER SMALL DZ DIGRAPH..MODIFIER LETTER SMALL V WITH RIGHT HOOK
-	{0x107B2, 0x107BA, prLower},   // Lm   [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL
-	{0x10800, 0x10805, prOLetter}, // Lo   [6] CYPRIOT SYLLABLE A..CYPRIOT SYLLABLE JA
-	{0x10808, 0x10808, prOLetter}, // Lo       CYPRIOT SYLLABLE JO
-	{0x1080A, 0x10835, prOLetter}, // Lo  [44] CYPRIOT SYLLABLE KA..CYPRIOT SYLLABLE WO
-	{0x10837, 0x10838, prOLetter}, // Lo   [2] CYPRIOT SYLLABLE XA..CYPRIOT SYLLABLE XE
-	{0x1083C, 0x1083C, prOLetter}, // Lo       CYPRIOT SYLLABLE ZA
-	{0x1083F, 0x10855, prOLetter}, // Lo  [23] CYPRIOT SYLLABLE ZO..IMPERIAL ARAMAIC LETTER TAW
-	{0x10860, 0x10876, prOLetter}, // Lo  [23] PALMYRENE LETTER ALEPH..PALMYRENE LETTER TAW
-	{0x10880, 0x1089E, prOLetter}, // Lo  [31] NABATAEAN LETTER FINAL ALEPH..NABATAEAN LETTER TAW
-	{0x108E0, 0x108F2, prOLetter}, // Lo  [19] HATRAN LETTER ALEPH..HATRAN LETTER QOPH
-	{0x108F4, 0x108F5, prOLetter}, // Lo   [2] HATRAN LETTER SHIN..HATRAN LETTER TAW
-	{0x10900, 0x10915, prOLetter}, // Lo  [22] PHOENICIAN LETTER ALF..PHOENICIAN LETTER TAU
-	{0x10920, 0x10939, prOLetter}, // Lo  [26] LYDIAN LETTER A..LYDIAN LETTER C
-	{0x10980, 0x109B7, prOLetter}, // Lo  [56] MEROITIC HIEROGLYPHIC LETTER A..MEROITIC CURSIVE LETTER DA
-	{0x109BE, 0x109BF, prOLetter}, // Lo   [2] MEROITIC CURSIVE LOGOGRAM RMT..MEROITIC CURSIVE LOGOGRAM IMN
-	{0x10A00, 0x10A00, prOLetter}, // Lo       KHAROSHTHI LETTER A
-	{0x10A01, 0x10A03, prExtend},  // Mn   [3] KHAROSHTHI VOWEL SIGN I..KHAROSHTHI VOWEL SIGN VOCALIC R
-	{0x10A05, 0x10A06, prExtend},  // Mn   [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O
-	{0x10A0C, 0x10A0F, prExtend},  // Mn   [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA
-	{0x10A10, 0x10A13, prOLetter}, // Lo   [4] KHAROSHTHI LETTER KA..KHAROSHTHI LETTER GHA
-	{0x10A15, 0x10A17, prOLetter}, // Lo   [3] KHAROSHTHI LETTER CA..KHAROSHTHI LETTER JA
-	{0x10A19, 0x10A35, prOLetter}, // Lo  [29] KHAROSHTHI LETTER NYA..KHAROSHTHI LETTER VHA
-	{0x10A38, 0x10A3A, prExtend},  // Mn   [3] KHAROSHTHI SIGN BAR ABOVE..KHAROSHTHI SIGN DOT BELOW
-	{0x10A3F, 0x10A3F, prExtend},  // Mn       KHAROSHTHI VIRAMA
-	{0x10A56, 0x10A57, prSTerm},   // Po   [2] KHAROSHTHI PUNCTUATION DANDA..KHAROSHTHI PUNCTUATION DOUBLE DANDA
-	{0x10A60, 0x10A7C, prOLetter}, // Lo  [29] OLD SOUTH ARABIAN LETTER HE..OLD SOUTH ARABIAN LETTER THETH
-	{0x10A80, 0x10A9C, prOLetter}, // Lo  [29] OLD NORTH ARABIAN LETTER HEH..OLD NORTH ARABIAN LETTER ZAH
-	{0x10AC0, 0x10AC7, prOLetter}, // Lo   [8] MANICHAEAN LETTER ALEPH..MANICHAEAN LETTER WAW
-	{0x10AC9, 0x10AE4, prOLetter}, // Lo  [28] MANICHAEAN LETTER ZAYIN..MANICHAEAN LETTER TAW
-	{0x10AE5, 0x10AE6, prExtend},  // Mn   [2] MANICHAEAN ABBREVIATION MARK ABOVE..MANICHAEAN ABBREVIATION MARK BELOW
-	{0x10B00, 0x10B35, prOLetter}, // Lo  [54] AVESTAN LETTER A..AVESTAN LETTER HE
-	{0x10B40, 0x10B55, prOLetter}, // Lo  [22] INSCRIPTIONAL PARTHIAN LETTER ALEPH..INSCRIPTIONAL PARTHIAN LETTER TAW
-	{0x10B60, 0x10B72, prOLetter}, // Lo  [19] INSCRIPTIONAL PAHLAVI LETTER ALEPH..INSCRIPTIONAL PAHLAVI LETTER TAW
-	{0x10B80, 0x10B91, prOLetter}, // Lo  [18] PSALTER PAHLAVI LETTER ALEPH..PSALTER PAHLAVI LETTER TAW
-	{0x10C00, 0x10C48, prOLetter}, // Lo  [73] OLD TURKIC LETTER ORKHON A..OLD TURKIC LETTER ORKHON BASH
-	{0x10C80, 0x10CB2, prUpper},   // L&  [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US
-	{0x10CC0, 0x10CF2, prLower},   // L&  [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US
-	{0x10D00, 0x10D23, prOLetter}, // Lo  [36] HANIFI ROHINGYA LETTER A..HANIFI ROHINGYA MARK NA KHONNA
-	{0x10D24, 0x10D27, prExtend},  // Mn   [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI
-	{0x10D30, 0x10D39, prNumeric}, // Nd  [10] HANIFI ROHINGYA DIGIT ZERO..HANIFI ROHINGYA DIGIT NINE
-	{0x10E80, 0x10EA9, prOLetter}, // Lo  [42] YEZIDI LETTER ELIF..YEZIDI LETTER ET
-	{0x10EAB, 0x10EAC, prExtend},  // Mn   [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK
-	{0x10EB0, 0x10EB1, prOLetter}, // Lo   [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE
-	{0x10EFD, 0x10EFF, prExtend},  // Mn   [3] ARABIC SMALL LOW WORD SAKTA..ARABIC SMALL LOW WORD MADDA
-	{0x10F00, 0x10F1C, prOLetter}, // Lo  [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL
-	{0x10F27, 0x10F27, prOLetter}, // Lo       OLD SOGDIAN LIGATURE AYIN-DALETH
-	{0x10F30, 0x10F45, prOLetter}, // Lo  [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN
-	{0x10F46, 0x10F50, prExtend},  // Mn  [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW
-	{0x10F55, 0x10F59, prSTerm},   // Po   [5] SOGDIAN PUNCTUATION TWO VERTICAL BARS..SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT
-	{0x10F70, 0x10F81, prOLetter}, // Lo  [18] OLD UYGHUR LETTER ALEPH..OLD UYGHUR LETTER LESH
-	{0x10F82, 0x10F85, prExtend},  // Mn   [4] OLD UYGHUR COMBINING DOT ABOVE..OLD UYGHUR COMBINING TWO DOTS BELOW
-	{0x10F86, 0x10F89, prSTerm},   // Po   [4] OLD UYGHUR PUNCTUATION BAR..OLD UYGHUR PUNCTUATION FOUR DOTS
-	{0x10FB0, 0x10FC4, prOLetter}, // Lo  [21] CHORASMIAN LETTER ALEPH..CHORASMIAN LETTER TAW
-	{0x10FE0, 0x10FF6, prOLetter}, // Lo  [23] ELYMAIC LETTER ALEPH..ELYMAIC LIGATURE ZAYIN-YODH
-	{0x11000, 0x11000, prExtend},  // Mc       BRAHMI SIGN CANDRABINDU
-	{0x11001, 0x11001, prExtend},  // Mn       BRAHMI SIGN ANUSVARA
-	{0x11002, 0x11002, prExtend},  // Mc       BRAHMI SIGN VISARGA
-	{0x11003, 0x11037, prOLetter}, // Lo  [53] BRAHMI SIGN JIHVAMULIYA..BRAHMI LETTER OLD TAMIL NNNA
-	{0x11038, 0x11046, prExtend},  // Mn  [15] BRAHMI VOWEL SIGN AA..BRAHMI VIRAMA
-	{0x11047, 0x11048, prSTerm},   // Po   [2] BRAHMI DANDA..BRAHMI DOUBLE DANDA
-	{0x11066, 0x1106F, prNumeric}, // Nd  [10] BRAHMI DIGIT ZERO..BRAHMI DIGIT NINE
-	{0x11070, 0x11070, prExtend},  // Mn       BRAHMI SIGN OLD TAMIL VIRAMA
-	{0x11071, 0x11072, prOLetter}, // Lo   [2] BRAHMI LETTER OLD TAMIL SHORT E..BRAHMI LETTER OLD TAMIL SHORT O
-	{0x11073, 0x11074, prExtend},  // Mn   [2] BRAHMI VOWEL SIGN OLD TAMIL SHORT E..BRAHMI VOWEL SIGN OLD TAMIL SHORT O
-	{0x11075, 0x11075, prOLetter}, // Lo       BRAHMI LETTER OLD TAMIL LLA
-	{0x1107F, 0x11081, prExtend},  // Mn   [3] BRAHMI NUMBER JOINER..KAITHI SIGN ANUSVARA
-	{0x11082, 0x11082, prExtend},  // Mc       KAITHI SIGN VISARGA
-	{0x11083, 0x110AF, prOLetter}, // Lo  [45] KAITHI LETTER A..KAITHI LETTER HA
-	{0x110B0, 0x110B2, prExtend},  // Mc   [3] KAITHI VOWEL SIGN AA..KAITHI VOWEL SIGN II
-	{0x110B3, 0x110B6, prExtend},  // Mn   [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI
-	{0x110B7, 0x110B8, prExtend},  // Mc   [2] KAITHI VOWEL SIGN O..KAITHI VOWEL SIGN AU
-	{0x110B9, 0x110BA, prExtend},  // Mn   [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA
-	{0x110BD, 0x110BD, prFormat},  // Cf       KAITHI NUMBER SIGN
-	{0x110BE, 0x110C1, prSTerm},   // Po   [4] KAITHI SECTION MARK..KAITHI DOUBLE DANDA
-	{0x110C2, 0x110C2, prExtend},  // Mn       KAITHI VOWEL SIGN VOCALIC R
-	{0x110CD, 0x110CD, prFormat},  // Cf       KAITHI NUMBER SIGN ABOVE
-	{0x110D0, 0x110E8, prOLetter}, // Lo  [25] SORA SOMPENG LETTER SAH..SORA SOMPENG LETTER MAE
-	{0x110F0, 0x110F9, prNumeric}, // Nd  [10] SORA SOMPENG DIGIT ZERO..SORA SOMPENG DIGIT NINE
-	{0x11100, 0x11102, prExtend},  // Mn   [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA
-	{0x11103, 0x11126, prOLetter}, // Lo  [36] CHAKMA LETTER AA..CHAKMA LETTER HAA
-	{0x11127, 0x1112B, prExtend},  // Mn   [5] CHAKMA VOWEL SIGN A..CHAKMA VOWEL SIGN UU
-	{0x1112C, 0x1112C, prExtend},  // Mc       CHAKMA VOWEL SIGN E
-	{0x1112D, 0x11134, prExtend},  // Mn   [8] CHAKMA VOWEL SIGN AI..CHAKMA MAAYYAA
-	{0x11136, 0x1113F, prNumeric}, // Nd  [10] CHAKMA DIGIT ZERO..CHAKMA DIGIT NINE
-	{0x11141, 0x11143, prSTerm},   // Po   [3] CHAKMA DANDA..CHAKMA QUESTION MARK
-	{0x11144, 0x11144, prOLetter}, // Lo       CHAKMA LETTER LHAA
-	{0x11145, 0x11146, prExtend},  // Mc   [2] CHAKMA VOWEL SIGN AA..CHAKMA VOWEL SIGN EI
-	{0x11147, 0x11147, prOLetter}, // Lo       CHAKMA LETTER VAA
-	{0x11150, 0x11172, prOLetter}, // Lo  [35] MAHAJANI LETTER A..MAHAJANI LETTER RRA
-	{0x11173, 0x11173, prExtend},  // Mn       MAHAJANI SIGN NUKTA
-	{0x11176, 0x11176, prOLetter}, // Lo       MAHAJANI LIGATURE SHRI
-	{0x11180, 0x11181, prExtend},  // Mn   [2] SHARADA SIGN CANDRABINDU..SHARADA SIGN ANUSVARA
-	{0x11182, 0x11182, prExtend},  // Mc       SHARADA SIGN VISARGA
-	{0x11183, 0x111B2, prOLetter}, // Lo  [48] SHARADA LETTER A..SHARADA LETTER HA
-	{0x111B3, 0x111B5, prExtend},  // Mc   [3] SHARADA VOWEL SIGN AA..SHARADA VOWEL SIGN II
-	{0x111B6, 0x111BE, prExtend},  // Mn   [9] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN O
-	{0x111BF, 0x111C0, prExtend},  // Mc   [2] SHARADA VOWEL SIGN AU..SHARADA SIGN VIRAMA
-	{0x111C1, 0x111C4, prOLetter}, // Lo   [4] SHARADA SIGN AVAGRAHA..SHARADA OM
-	{0x111C5, 0x111C6, prSTerm},   // Po   [2] SHARADA DANDA..SHARADA DOUBLE DANDA
-	{0x111C9, 0x111CC, prExtend},  // Mn   [4] SHARADA SANDHI MARK..SHARADA EXTRA SHORT VOWEL MARK
-	{0x111CD, 0x111CD, prSTerm},   // Po       SHARADA SUTRA MARK
-	{0x111CE, 0x111CE, prExtend},  // Mc       SHARADA VOWEL SIGN PRISHTHAMATRA E
-	{0x111CF, 0x111CF, prExtend},  // Mn       SHARADA SIGN INVERTED CANDRABINDU
-	{0x111D0, 0x111D9, prNumeric}, // Nd  [10] SHARADA DIGIT ZERO..SHARADA DIGIT NINE
-	{0x111DA, 0x111DA, prOLetter}, // Lo       SHARADA EKAM
-	{0x111DC, 0x111DC, prOLetter}, // Lo       SHARADA HEADSTROKE
-	{0x111DE, 0x111DF, prSTerm},   // Po   [2] SHARADA SECTION MARK-1..SHARADA SECTION MARK-2
-	{0x11200, 0x11211, prOLetter}, // Lo  [18] KHOJKI LETTER A..KHOJKI LETTER JJA
-	{0x11213, 0x1122B, prOLetter}, // Lo  [25] KHOJKI LETTER NYA..KHOJKI LETTER LLA
-	{0x1122C, 0x1122E, prExtend},  // Mc   [3] KHOJKI VOWEL SIGN AA..KHOJKI VOWEL SIGN II
-	{0x1122F, 0x11231, prExtend},  // Mn   [3] KHOJKI VOWEL SIGN U..KHOJKI VOWEL SIGN AI
-	{0x11232, 0x11233, prExtend},  // Mc   [2] KHOJKI VOWEL SIGN O..KHOJKI VOWEL SIGN AU
-	{0x11234, 0x11234, prExtend},  // Mn       KHOJKI SIGN ANUSVARA
-	{0x11235, 0x11235, prExtend},  // Mc       KHOJKI SIGN VIRAMA
-	{0x11236, 0x11237, prExtend},  // Mn   [2] KHOJKI SIGN NUKTA..KHOJKI SIGN SHADDA
-	{0x11238, 0x11239, prSTerm},   // Po   [2] KHOJKI DANDA..KHOJKI DOUBLE DANDA
-	{0x1123B, 0x1123C, prSTerm},   // Po   [2] KHOJKI SECTION MARK..KHOJKI DOUBLE SECTION MARK
-	{0x1123E, 0x1123E, prExtend},  // Mn       KHOJKI SIGN SUKUN
-	{0x1123F, 0x11240, prOLetter}, // Lo   [2] KHOJKI LETTER QA..KHOJKI LETTER SHORT I
-	{0x11241, 0x11241, prExtend},  // Mn       KHOJKI VOWEL SIGN VOCALIC R
-	{0x11280, 0x11286, prOLetter}, // Lo   [7] MULTANI LETTER A..MULTANI LETTER GA
-	{0x11288, 0x11288, prOLetter}, // Lo       MULTANI LETTER GHA
-	{0x1128A, 0x1128D, prOLetter}, // Lo   [4] MULTANI LETTER CA..MULTANI LETTER JJA
-	{0x1128F, 0x1129D, prOLetter}, // Lo  [15] MULTANI LETTER NYA..MULTANI LETTER BA
-	{0x1129F, 0x112A8, prOLetter}, // Lo  [10] MULTANI LETTER BHA..MULTANI LETTER RHA
-	{0x112A9, 0x112A9, prSTerm},   // Po       MULTANI SECTION MARK
-	{0x112B0, 0x112DE, prOLetter}, // Lo  [47] KHUDAWADI LETTER A..KHUDAWADI LETTER HA
-	{0x112DF, 0x112DF, prExtend},  // Mn       KHUDAWADI SIGN ANUSVARA
-	{0x112E0, 0x112E2, prExtend},  // Mc   [3] KHUDAWADI VOWEL SIGN AA..KHUDAWADI VOWEL SIGN II
-	{0x112E3, 0x112EA, prExtend},  // Mn   [8] KHUDAWADI VOWEL SIGN U..KHUDAWADI SIGN VIRAMA
-	{0x112F0, 0x112F9, prNumeric}, // Nd  [10] KHUDAWADI DIGIT ZERO..KHUDAWADI DIGIT NINE
-	{0x11300, 0x11301, prExtend},  // Mn   [2] GRANTHA SIGN COMBINING ANUSVARA ABOVE..GRANTHA SIGN CANDRABINDU
-	{0x11302, 0x11303, prExtend},  // Mc   [2] GRANTHA SIGN ANUSVARA..GRANTHA SIGN VISARGA
-	{0x11305, 0x1130C, prOLetter}, // Lo   [8] GRANTHA LETTER A..GRANTHA LETTER VOCALIC L
-	{0x1130F, 0x11310, prOLetter}, // Lo   [2] GRANTHA LETTER EE..GRANTHA LETTER AI
-	{0x11313, 0x11328, prOLetter}, // Lo  [22] GRANTHA LETTER OO..GRANTHA LETTER NA
-	{0x1132A, 0x11330, prOLetter}, // Lo   [7] GRANTHA LETTER PA..GRANTHA LETTER RA
-	{0x11332, 0x11333, prOLetter}, // Lo   [2] GRANTHA LETTER LA..GRANTHA LETTER LLA
-	{0x11335, 0x11339, prOLetter}, // Lo   [5] GRANTHA LETTER VA..GRANTHA LETTER HA
-	{0x1133B, 0x1133C, prExtend},  // Mn   [2] COMBINING BINDU BELOW..GRANTHA SIGN NUKTA
-	{0x1133D, 0x1133D, prOLetter}, // Lo       GRANTHA SIGN AVAGRAHA
-	{0x1133E, 0x1133F, prExtend},  // Mc   [2] GRANTHA VOWEL SIGN AA..GRANTHA VOWEL SIGN I
-	{0x11340, 0x11340, prExtend},  // Mn       GRANTHA VOWEL SIGN II
-	{0x11341, 0x11344, prExtend},  // Mc   [4] GRANTHA VOWEL SIGN U..GRANTHA VOWEL SIGN VOCALIC RR
-	{0x11347, 0x11348, prExtend},  // Mc   [2] GRANTHA VOWEL SIGN EE..GRANTHA VOWEL SIGN AI
-	{0x1134B, 0x1134D, prExtend},  // Mc   [3] GRANTHA VOWEL SIGN OO..GRANTHA SIGN VIRAMA
-	{0x11350, 0x11350, prOLetter}, // Lo       GRANTHA OM
-	{0x11357, 0x11357, prExtend},  // Mc       GRANTHA AU LENGTH MARK
-	{0x1135D, 0x11361, prOLetter}, // Lo   [5] GRANTHA SIGN PLUTA..GRANTHA LETTER VOCALIC LL
-	{0x11362, 0x11363, prExtend},  // Mc   [2] GRANTHA VOWEL SIGN VOCALIC L..GRANTHA VOWEL SIGN VOCALIC LL
-	{0x11366, 0x1136C, prExtend},  // Mn   [7] COMBINING GRANTHA DIGIT ZERO..COMBINING GRANTHA DIGIT SIX
-	{0x11370, 0x11374, prExtend},  // Mn   [5] COMBINING GRANTHA LETTER A..COMBINING GRANTHA LETTER PA
-	{0x11400, 0x11434, prOLetter}, // Lo  [53] NEWA LETTER A..NEWA LETTER HA
-	{0x11435, 0x11437, prExtend},  // Mc   [3] NEWA VOWEL SIGN AA..NEWA VOWEL SIGN II
-	{0x11438, 0x1143F, prExtend},  // Mn   [8] NEWA VOWEL SIGN U..NEWA VOWEL SIGN AI
-	{0x11440, 0x11441, prExtend},  // Mc   [2] NEWA VOWEL SIGN O..NEWA VOWEL SIGN AU
-	{0x11442, 0x11444, prExtend},  // Mn   [3] NEWA SIGN VIRAMA..NEWA SIGN ANUSVARA
-	{0x11445, 0x11445, prExtend},  // Mc       NEWA SIGN VISARGA
-	{0x11446, 0x11446, prExtend},  // Mn       NEWA SIGN NUKTA
-	{0x11447, 0x1144A, prOLetter}, // Lo   [4] NEWA SIGN AVAGRAHA..NEWA SIDDHI
-	{0x1144B, 0x1144C, prSTerm},   // Po   [2] NEWA DANDA..NEWA DOUBLE DANDA
-	{0x11450, 0x11459, prNumeric}, // Nd  [10] NEWA DIGIT ZERO..NEWA DIGIT NINE
-	{0x1145E, 0x1145E, prExtend},  // Mn       NEWA SANDHI MARK
-	{0x1145F, 0x11461, prOLetter}, // Lo   [3] NEWA LETTER VEDIC ANUSVARA..NEWA SIGN UPADHMANIYA
-	{0x11480, 0x114AF, prOLetter}, // Lo  [48] TIRHUTA ANJI..TIRHUTA LETTER HA
-	{0x114B0, 0x114B2, prExtend},  // Mc   [3] TIRHUTA VOWEL SIGN AA..TIRHUTA VOWEL SIGN II
-	{0x114B3, 0x114B8, prExtend},  // Mn   [6] TIRHUTA VOWEL SIGN U..TIRHUTA VOWEL SIGN VOCALIC LL
-	{0x114B9, 0x114B9, prExtend},  // Mc       TIRHUTA VOWEL SIGN E
-	{0x114BA, 0x114BA, prExtend},  // Mn       TIRHUTA VOWEL SIGN SHORT E
-	{0x114BB, 0x114BE, prExtend},  // Mc   [4] TIRHUTA VOWEL SIGN AI..TIRHUTA VOWEL SIGN AU
-	{0x114BF, 0x114C0, prExtend},  // Mn   [2] TIRHUTA SIGN CANDRABINDU..TIRHUTA SIGN ANUSVARA
-	{0x114C1, 0x114C1, prExtend},  // Mc       TIRHUTA SIGN VISARGA
-	{0x114C2, 0x114C3, prExtend},  // Mn   [2] TIRHUTA SIGN VIRAMA..TIRHUTA SIGN NUKTA
-	{0x114C4, 0x114C5, prOLetter}, // Lo   [2] TIRHUTA SIGN AVAGRAHA..TIRHUTA GVANG
-	{0x114C7, 0x114C7, prOLetter}, // Lo       TIRHUTA OM
-	{0x114D0, 0x114D9, prNumeric}, // Nd  [10] TIRHUTA DIGIT ZERO..TIRHUTA DIGIT NINE
-	{0x11580, 0x115AE, prOLetter}, // Lo  [47] SIDDHAM LETTER A..SIDDHAM LETTER HA
-	{0x115AF, 0x115B1, prExtend},  // Mc   [3] SIDDHAM VOWEL SIGN AA..SIDDHAM VOWEL SIGN II
-	{0x115B2, 0x115B5, prExtend},  // Mn   [4] SIDDHAM VOWEL SIGN U..SIDDHAM VOWEL SIGN VOCALIC RR
-	{0x115B8, 0x115BB, prExtend},  // Mc   [4] SIDDHAM VOWEL SIGN E..SIDDHAM VOWEL SIGN AU
-	{0x115BC, 0x115BD, prExtend},  // Mn   [2] SIDDHAM SIGN CANDRABINDU..SIDDHAM SIGN ANUSVARA
-	{0x115BE, 0x115BE, prExtend},  // Mc       SIDDHAM SIGN VISARGA
-	{0x115BF, 0x115C0, prExtend},  // Mn   [2] SIDDHAM SIGN VIRAMA..SIDDHAM SIGN NUKTA
-	{0x115C2, 0x115C3, prSTerm},   // Po   [2] SIDDHAM DANDA..SIDDHAM DOUBLE DANDA
-	{0x115C9, 0x115D7, prSTerm},   // Po  [15] SIDDHAM END OF TEXT MARK..SIDDHAM SECTION MARK WITH CIRCLES AND FOUR ENCLOSURES
-	{0x115D8, 0x115DB, prOLetter}, // Lo   [4] SIDDHAM LETTER THREE-CIRCLE ALTERNATE I..SIDDHAM LETTER ALTERNATE U
-	{0x115DC, 0x115DD, prExtend},  // Mn   [2] SIDDHAM VOWEL SIGN ALTERNATE U..SIDDHAM VOWEL SIGN ALTERNATE UU
-	{0x11600, 0x1162F, prOLetter}, // Lo  [48] MODI LETTER A..MODI LETTER LLA
-	{0x11630, 0x11632, prExtend},  // Mc   [3] MODI VOWEL SIGN AA..MODI VOWEL SIGN II
-	{0x11633, 0x1163A, prExtend},  // Mn   [8] MODI VOWEL SIGN U..MODI VOWEL SIGN AI
-	{0x1163B, 0x1163C, prExtend},  // Mc   [2] MODI VOWEL SIGN O..MODI VOWEL SIGN AU
-	{0x1163D, 0x1163D, prExtend},  // Mn       MODI SIGN ANUSVARA
-	{0x1163E, 0x1163E, prExtend},  // Mc       MODI SIGN VISARGA
-	{0x1163F, 0x11640, prExtend},  // Mn   [2] MODI SIGN VIRAMA..MODI SIGN ARDHACANDRA
-	{0x11641, 0x11642, prSTerm},   // Po   [2] MODI DANDA..MODI DOUBLE DANDA
-	{0x11644, 0x11644, prOLetter}, // Lo       MODI SIGN HUVA
-	{0x11650, 0x11659, prNumeric}, // Nd  [10] MODI DIGIT ZERO..MODI DIGIT NINE
-	{0x11680, 0x116AA, prOLetter}, // Lo  [43] TAKRI LETTER A..TAKRI LETTER RRA
-	{0x116AB, 0x116AB, prExtend},  // Mn       TAKRI SIGN ANUSVARA
-	{0x116AC, 0x116AC, prExtend},  // Mc       TAKRI SIGN VISARGA
-	{0x116AD, 0x116AD, prExtend},  // Mn       TAKRI VOWEL SIGN AA
-	{0x116AE, 0x116AF, prExtend},  // Mc   [2] TAKRI VOWEL SIGN I..TAKRI VOWEL SIGN II
-	{0x116B0, 0x116B5, prExtend},  // Mn   [6] TAKRI VOWEL SIGN U..TAKRI VOWEL SIGN AU
-	{0x116B6, 0x116B6, prExtend},  // Mc       TAKRI SIGN VIRAMA
-	{0x116B7, 0x116B7, prExtend},  // Mn       TAKRI SIGN NUKTA
-	{0x116B8, 0x116B8, prOLetter}, // Lo       TAKRI LETTER ARCHAIC KHA
-	{0x116C0, 0x116C9, prNumeric}, // Nd  [10] TAKRI DIGIT ZERO..TAKRI DIGIT NINE
-	{0x11700, 0x1171A, prOLetter}, // Lo  [27] AHOM LETTER KA..AHOM LETTER ALTERNATE BA
-	{0x1171D, 0x1171F, prExtend},  // Mn   [3] AHOM CONSONANT SIGN MEDIAL LA..AHOM CONSONANT SIGN MEDIAL LIGATING RA
-	{0x11720, 0x11721, prExtend},  // Mc   [2] AHOM VOWEL SIGN A..AHOM VOWEL SIGN AA
-	{0x11722, 0x11725, prExtend},  // Mn   [4] AHOM VOWEL SIGN I..AHOM VOWEL SIGN UU
-	{0x11726, 0x11726, prExtend},  // Mc       AHOM VOWEL SIGN E
-	{0x11727, 0x1172B, prExtend},  // Mn   [5] AHOM VOWEL SIGN AW..AHOM SIGN KILLER
-	{0x11730, 0x11739, prNumeric}, // Nd  [10] AHOM DIGIT ZERO..AHOM DIGIT NINE
-	{0x1173C, 0x1173E, prSTerm},   // Po   [3] AHOM SIGN SMALL SECTION..AHOM SIGN RULAI
-	{0x11740, 0x11746, prOLetter}, // Lo   [7] AHOM LETTER CA..AHOM LETTER LLA
-	{0x11800, 0x1182B, prOLetter}, // Lo  [44] DOGRA LETTER A..DOGRA LETTER RRA
-	{0x1182C, 0x1182E, prExtend},  // Mc   [3] DOGRA VOWEL SIGN AA..DOGRA VOWEL SIGN II
-	{0x1182F, 0x11837, prExtend},  // Mn   [9] DOGRA VOWEL SIGN U..DOGRA SIGN ANUSVARA
-	{0x11838, 0x11838, prExtend},  // Mc       DOGRA SIGN VISARGA
-	{0x11839, 0x1183A, prExtend},  // Mn   [2] DOGRA SIGN VIRAMA..DOGRA SIGN NUKTA
-	{0x118A0, 0x118BF, prUpper},   // L&  [32] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI CAPITAL LETTER VIYO
-	{0x118C0, 0x118DF, prLower},   // L&  [32] WARANG CITI SMALL LETTER NGAA..WARANG CITI SMALL LETTER VIYO
-	{0x118E0, 0x118E9, prNumeric}, // Nd  [10] WARANG CITI DIGIT ZERO..WARANG CITI DIGIT NINE
-	{0x118FF, 0x11906, prOLetter}, // Lo   [8] WARANG CITI OM..DIVES AKURU LETTER E
-	{0x11909, 0x11909, prOLetter}, // Lo       DIVES AKURU LETTER O
-	{0x1190C, 0x11913, prOLetter}, // Lo   [8] DIVES AKURU LETTER KA..DIVES AKURU LETTER JA
-	{0x11915, 0x11916, prOLetter}, // Lo   [2] DIVES AKURU LETTER NYA..DIVES AKURU LETTER TTA
-	{0x11918, 0x1192F, prOLetter}, // Lo  [24] DIVES AKURU LETTER DDA..DIVES AKURU LETTER ZA
-	{0x11930, 0x11935, prExtend},  // Mc   [6] DIVES AKURU VOWEL SIGN AA..DIVES AKURU VOWEL SIGN E
-	{0x11937, 0x11938, prExtend},  // Mc   [2] DIVES AKURU VOWEL SIGN AI..DIVES AKURU VOWEL SIGN O
-	{0x1193B, 0x1193C, prExtend},  // Mn   [2] DIVES AKURU SIGN ANUSVARA..DIVES AKURU SIGN CANDRABINDU
-	{0x1193D, 0x1193D, prExtend},  // Mc       DIVES AKURU SIGN HALANTA
-	{0x1193E, 0x1193E, prExtend},  // Mn       DIVES AKURU VIRAMA
-	{0x1193F, 0x1193F, prOLetter}, // Lo       DIVES AKURU PREFIXED NASAL SIGN
-	{0x11940, 0x11940, prExtend},  // Mc       DIVES AKURU MEDIAL YA
-	{0x11941, 0x11941, prOLetter}, // Lo       DIVES AKURU INITIAL RA
-	{0x11942, 0x11942, prExtend},  // Mc       DIVES AKURU MEDIAL RA
-	{0x11943, 0x11943, prExtend},  // Mn       DIVES AKURU SIGN NUKTA
-	{0x11944, 0x11944, prSTerm},   // Po       DIVES AKURU DOUBLE DANDA
-	{0x11946, 0x11946, prSTerm},   // Po       DIVES AKURU END OF TEXT MARK
-	{0x11950, 0x11959, prNumeric}, // Nd  [10] DIVES AKURU DIGIT ZERO..DIVES AKURU DIGIT NINE
-	{0x119A0, 0x119A7, prOLetter}, // Lo   [8] NANDINAGARI LETTER A..NANDINAGARI LETTER VOCALIC RR
-	{0x119AA, 0x119D0, prOLetter}, // Lo  [39] NANDINAGARI LETTER E..NANDINAGARI LETTER RRA
-	{0x119D1, 0x119D3, prExtend},  // Mc   [3] NANDINAGARI VOWEL SIGN AA..NANDINAGARI VOWEL SIGN II
-	{0x119D4, 0x119D7, prExtend},  // Mn   [4] NANDINAGARI VOWEL SIGN U..NANDINAGARI VOWEL SIGN VOCALIC RR
-	{0x119DA, 0x119DB, prExtend},  // Mn   [2] NANDINAGARI VOWEL SIGN E..NANDINAGARI VOWEL SIGN AI
-	{0x119DC, 0x119DF, prExtend},  // Mc   [4] NANDINAGARI VOWEL SIGN O..NANDINAGARI SIGN VISARGA
-	{0x119E0, 0x119E0, prExtend},  // Mn       NANDINAGARI SIGN VIRAMA
-	{0x119E1, 0x119E1, prOLetter}, // Lo       NANDINAGARI SIGN AVAGRAHA
-	{0x119E3, 0x119E3, prOLetter}, // Lo       NANDINAGARI HEADSTROKE
-	{0x119E4, 0x119E4, prExtend},  // Mc       NANDINAGARI VOWEL SIGN PRISHTHAMATRA E
-	{0x11A00, 0x11A00, prOLetter}, // Lo       ZANABAZAR SQUARE LETTER A
-	{0x11A01, 0x11A0A, prExtend},  // Mn  [10] ZANABAZAR SQUARE VOWEL SIGN I..ZANABAZAR SQUARE VOWEL LENGTH MARK
-	{0x11A0B, 0x11A32, prOLetter}, // Lo  [40] ZANABAZAR SQUARE LETTER KA..ZANABAZAR SQUARE LETTER KSSA
-	{0x11A33, 0x11A38, prExtend},  // Mn   [6] ZANABAZAR SQUARE FINAL CONSONANT MARK..ZANABAZAR SQUARE SIGN ANUSVARA
-	{0x11A39, 0x11A39, prExtend},  // Mc       ZANABAZAR SQUARE SIGN VISARGA
-	{0x11A3A, 0x11A3A, prOLetter}, // Lo       ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA
-	{0x11A3B, 0x11A3E, prExtend},  // Mn   [4] ZANABAZAR SQUARE CLUSTER-FINAL LETTER YA..ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA
-	{0x11A42, 0x11A43, prSTerm},   // Po   [2] ZANABAZAR SQUARE MARK SHAD..ZANABAZAR SQUARE MARK DOUBLE SHAD
-	{0x11A47, 0x11A47, prExtend},  // Mn       ZANABAZAR SQUARE SUBJOINER
-	{0x11A50, 0x11A50, prOLetter}, // Lo       SOYOMBO LETTER A
-	{0x11A51, 0x11A56, prExtend},  // Mn   [6] SOYOMBO VOWEL SIGN I..SOYOMBO VOWEL SIGN OE
-	{0x11A57, 0x11A58, prExtend},  // Mc   [2] SOYOMBO VOWEL SIGN AI..SOYOMBO VOWEL SIGN AU
-	{0x11A59, 0x11A5B, prExtend},  // Mn   [3] SOYOMBO VOWEL SIGN VOCALIC R..SOYOMBO VOWEL LENGTH MARK
-	{0x11A5C, 0x11A89, prOLetter}, // Lo  [46] SOYOMBO LETTER KA..SOYOMBO CLUSTER-INITIAL LETTER SA
-	{0x11A8A, 0x11A96, prExtend},  // Mn  [13] SOYOMBO FINAL CONSONANT SIGN G..SOYOMBO SIGN ANUSVARA
-	{0x11A97, 0x11A97, prExtend},  // Mc       SOYOMBO SIGN VISARGA
-	{0x11A98, 0x11A99, prExtend},  // Mn   [2] SOYOMBO GEMINATION MARK..SOYOMBO SUBJOINER
-	{0x11A9B, 0x11A9C, prSTerm},   // Po   [2] SOYOMBO MARK SHAD..SOYOMBO MARK DOUBLE SHAD
-	{0x11A9D, 0x11A9D, prOLetter}, // Lo       SOYOMBO MARK PLUTA
-	{0x11AB0, 0x11AF8, prOLetter}, // Lo  [73] CANADIAN SYLLABICS NATTILIK HI..PAU CIN HAU GLOTTAL STOP FINAL
-	{0x11C00, 0x11C08, prOLetter}, // Lo   [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L
-	{0x11C0A, 0x11C2E, prOLetter}, // Lo  [37] BHAIKSUKI LETTER E..BHAIKSUKI LETTER HA
-	{0x11C2F, 0x11C2F, prExtend},  // Mc       BHAIKSUKI VOWEL SIGN AA
-	{0x11C30, 0x11C36, prExtend},  // Mn   [7] BHAIKSUKI VOWEL SIGN I..BHAIKSUKI VOWEL SIGN VOCALIC L
-	{0x11C38, 0x11C3D, prExtend},  // Mn   [6] BHAIKSUKI VOWEL SIGN E..BHAIKSUKI SIGN ANUSVARA
-	{0x11C3E, 0x11C3E, prExtend},  // Mc       BHAIKSUKI SIGN VISARGA
-	{0x11C3F, 0x11C3F, prExtend},  // Mn       BHAIKSUKI SIGN VIRAMA
-	{0x11C40, 0x11C40, prOLetter}, // Lo       BHAIKSUKI SIGN AVAGRAHA
-	{0x11C41, 0x11C42, prSTerm},   // Po   [2] BHAIKSUKI DANDA..BHAIKSUKI DOUBLE DANDA
-	{0x11C50, 0x11C59, prNumeric}, // Nd  [10] BHAIKSUKI DIGIT ZERO..BHAIKSUKI DIGIT NINE
-	{0x11C72, 0x11C8F, prOLetter}, // Lo  [30] MARCHEN LETTER KA..MARCHEN LETTER A
-	{0x11C92, 0x11CA7, prExtend},  // Mn  [22] MARCHEN SUBJOINED LETTER KA..MARCHEN SUBJOINED LETTER ZA
-	{0x11CA9, 0x11CA9, prExtend},  // Mc       MARCHEN SUBJOINED LETTER YA
-	{0x11CAA, 0x11CB0, prExtend},  // Mn   [7] MARCHEN SUBJOINED LETTER RA..MARCHEN VOWEL SIGN AA
-	{0x11CB1, 0x11CB1, prExtend},  // Mc       MARCHEN VOWEL SIGN I
-	{0x11CB2, 0x11CB3, prExtend},  // Mn   [2] MARCHEN VOWEL SIGN U..MARCHEN VOWEL SIGN E
-	{0x11CB4, 0x11CB4, prExtend},  // Mc       MARCHEN VOWEL SIGN O
-	{0x11CB5, 0x11CB6, prExtend},  // Mn   [2] MARCHEN SIGN ANUSVARA..MARCHEN SIGN CANDRABINDU
-	{0x11D00, 0x11D06, prOLetter}, // Lo   [7] MASARAM GONDI LETTER A..MASARAM GONDI LETTER E
-	{0x11D08, 0x11D09, prOLetter}, // Lo   [2] MASARAM GONDI LETTER AI..MASARAM GONDI LETTER O
-	{0x11D0B, 0x11D30, prOLetter}, // Lo  [38] MASARAM GONDI LETTER AU..MASARAM GONDI LETTER TRA
-	{0x11D31, 0x11D36, prExtend},  // Mn   [6] MASARAM GONDI VOWEL SIGN AA..MASARAM GONDI VOWEL SIGN VOCALIC R
-	{0x11D3A, 0x11D3A, prExtend},  // Mn       MASARAM GONDI VOWEL SIGN E
-	{0x11D3C, 0x11D3D, prExtend},  // Mn   [2] MASARAM GONDI VOWEL SIGN AI..MASARAM GONDI VOWEL SIGN O
-	{0x11D3F, 0x11D45, prExtend},  // Mn   [7] MASARAM GONDI VOWEL SIGN AU..MASARAM GONDI VIRAMA
-	{0x11D46, 0x11D46, prOLetter}, // Lo       MASARAM GONDI REPHA
-	{0x11D47, 0x11D47, prExtend},  // Mn       MASARAM GONDI RA-KARA
-	{0x11D50, 0x11D59, prNumeric}, // Nd  [10] MASARAM GONDI DIGIT ZERO..MASARAM GONDI DIGIT NINE
-	{0x11D60, 0x11D65, prOLetter}, // Lo   [6] GUNJALA GONDI LETTER A..GUNJALA GONDI LETTER UU
-	{0x11D67, 0x11D68, prOLetter}, // Lo   [2] GUNJALA GONDI LETTER EE..GUNJALA GONDI LETTER AI
-	{0x11D6A, 0x11D89, prOLetter}, // Lo  [32] GUNJALA GONDI LETTER OO..GUNJALA GONDI LETTER SA
-	{0x11D8A, 0x11D8E, prExtend},  // Mc   [5] GUNJALA GONDI VOWEL SIGN AA..GUNJALA GONDI VOWEL SIGN UU
-	{0x11D90, 0x11D91, prExtend},  // Mn   [2] GUNJALA GONDI VOWEL SIGN EE..GUNJALA GONDI VOWEL SIGN AI
-	{0x11D93, 0x11D94, prExtend},  // Mc   [2] GUNJALA GONDI VOWEL SIGN OO..GUNJALA GONDI VOWEL SIGN AU
-	{0x11D95, 0x11D95, prExtend},  // Mn       GUNJALA GONDI SIGN ANUSVARA
-	{0x11D96, 0x11D96, prExtend},  // Mc       GUNJALA GONDI SIGN VISARGA
-	{0x11D97, 0x11D97, prExtend},  // Mn       GUNJALA GONDI VIRAMA
-	{0x11D98, 0x11D98, prOLetter}, // Lo       GUNJALA GONDI OM
-	{0x11DA0, 0x11DA9, prNumeric}, // Nd  [10] GUNJALA GONDI DIGIT ZERO..GUNJALA GONDI DIGIT NINE
-	{0x11EE0, 0x11EF2, prOLetter}, // Lo  [19] MAKASAR LETTER KA..MAKASAR ANGKA
-	{0x11EF3, 0x11EF4, prExtend},  // Mn   [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U
-	{0x11EF5, 0x11EF6, prExtend},  // Mc   [2] MAKASAR VOWEL SIGN E..MAKASAR VOWEL SIGN O
-	{0x11EF7, 0x11EF8, prSTerm},   // Po   [2] MAKASAR PASSIMBANG..MAKASAR END OF SECTION
-	{0x11F00, 0x11F01, prExtend},  // Mn   [2] KAWI SIGN CANDRABINDU..KAWI SIGN ANUSVARA
-	{0x11F02, 0x11F02, prOLetter}, // Lo       KAWI SIGN REPHA
-	{0x11F03, 0x11F03, prExtend},  // Mc       KAWI SIGN VISARGA
-	{0x11F04, 0x11F10, prOLetter}, // Lo  [13] KAWI LETTER A..KAWI LETTER O
-	{0x11F12, 0x11F33, prOLetter}, // Lo  [34] KAWI LETTER KA..KAWI LETTER JNYA
-	{0x11F34, 0x11F35, prExtend},  // Mc   [2] KAWI VOWEL SIGN AA..KAWI VOWEL SIGN ALTERNATE AA
-	{0x11F36, 0x11F3A, prExtend},  // Mn   [5] KAWI VOWEL SIGN I..KAWI VOWEL SIGN VOCALIC R
-	{0x11F3E, 0x11F3F, prExtend},  // Mc   [2] KAWI VOWEL SIGN E..KAWI VOWEL SIGN AI
-	{0x11F40, 0x11F40, prExtend},  // Mn       KAWI VOWEL SIGN EU
-	{0x11F41, 0x11F41, prExtend},  // Mc       KAWI SIGN KILLER
-	{0x11F42, 0x11F42, prExtend},  // Mn       KAWI CONJOINER
-	{0x11F43, 0x11F44, prSTerm},   // Po   [2] KAWI DANDA..KAWI DOUBLE DANDA
-	{0x11F50, 0x11F59, prNumeric}, // Nd  [10] KAWI DIGIT ZERO..KAWI DIGIT NINE
-	{0x11FB0, 0x11FB0, prOLetter}, // Lo       LISU LETTER YHA
-	{0x12000, 0x12399, prOLetter}, // Lo [922] CUNEIFORM SIGN A..CUNEIFORM SIGN U U
-	{0x12400, 0x1246E, prOLetter}, // Nl [111] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM
-	{0x12480, 0x12543, prOLetter}, // Lo [196] CUNEIFORM SIGN AB TIMES NUN TENU..CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU
-	{0x12F90, 0x12FF0, prOLetter}, // Lo  [97] CYPRO-MINOAN SIGN CM001..CYPRO-MINOAN SIGN CM114
-	{0x13000, 0x1342F, prOLetter}, // Lo [1072] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH V011D
-	{0x13430, 0x1343F, prFormat},  // Cf  [16] EGYPTIAN HIEROGLYPH VERTICAL JOINER..EGYPTIAN HIEROGLYPH END WALLED ENCLOSURE
-	{0x13440, 0x13440, prExtend},  // Mn       EGYPTIAN HIEROGLYPH MIRROR HORIZONTALLY
-	{0x13441, 0x13446, prOLetter}, // Lo   [6] EGYPTIAN HIEROGLYPH FULL BLANK..EGYPTIAN HIEROGLYPH WIDE LOST SIGN
-	{0x13447, 0x13455, prExtend},  // Mn  [15] EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP START..EGYPTIAN HIEROGLYPH MODIFIER DAMAGED
-	{0x14400, 0x14646, prOLetter}, // Lo [583] ANATOLIAN HIEROGLYPH A001..ANATOLIAN HIEROGLYPH A530
-	{0x16800, 0x16A38, prOLetter}, // Lo [569] BAMUM LETTER PHASE-A NGKUE MFON..BAMUM LETTER PHASE-F VUEQ
-	{0x16A40, 0x16A5E, prOLetter}, // Lo  [31] MRO LETTER TA..MRO LETTER TEK
-	{0x16A60, 0x16A69, prNumeric}, // Nd  [10] MRO DIGIT ZERO..MRO DIGIT NINE
-	{0x16A6E, 0x16A6F, prSTerm},   // Po   [2] MRO DANDA..MRO DOUBLE DANDA
-	{0x16A70, 0x16ABE, prOLetter}, // Lo  [79] TANGSA LETTER OZ..TANGSA LETTER ZA
-	{0x16AC0, 0x16AC9, prNumeric}, // Nd  [10] TANGSA DIGIT ZERO..TANGSA DIGIT NINE
-	{0x16AD0, 0x16AED, prOLetter}, // Lo  [30] BASSA VAH LETTER ENNI..BASSA VAH LETTER I
-	{0x16AF0, 0x16AF4, prExtend},  // Mn   [5] BASSA VAH COMBINING HIGH TONE..BASSA VAH COMBINING HIGH-LOW TONE
-	{0x16AF5, 0x16AF5, prSTerm},   // Po       BASSA VAH FULL STOP
-	{0x16B00, 0x16B2F, prOLetter}, // Lo  [48] PAHAWH HMONG VOWEL KEEB..PAHAWH HMONG CONSONANT CAU
-	{0x16B30, 0x16B36, prExtend},  // Mn   [7] PAHAWH HMONG MARK CIM TUB..PAHAWH HMONG MARK CIM TAUM
-	{0x16B37, 0x16B38, prSTerm},   // Po   [2] PAHAWH HMONG SIGN VOS THOM..PAHAWH HMONG SIGN VOS TSHAB CEEB
-	{0x16B40, 0x16B43, prOLetter}, // Lm   [4] PAHAWH HMONG SIGN VOS SEEV..PAHAWH HMONG SIGN IB YAM
-	{0x16B44, 0x16B44, prSTerm},   // Po       PAHAWH HMONG SIGN XAUS
-	{0x16B50, 0x16B59, prNumeric}, // Nd  [10] PAHAWH HMONG DIGIT ZERO..PAHAWH HMONG DIGIT NINE
-	{0x16B63, 0x16B77, prOLetter}, // Lo  [21] PAHAWH HMONG SIGN VOS LUB..PAHAWH HMONG SIGN CIM NRES TOS
-	{0x16B7D, 0x16B8F, prOLetter}, // Lo  [19] PAHAWH HMONG CLAN SIGN TSHEEJ..PAHAWH HMONG CLAN SIGN VWJ
-	{0x16E40, 0x16E5F, prUpper},   // L&  [32] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN CAPITAL LETTER Y
-	{0x16E60, 0x16E7F, prLower},   // L&  [32] MEDEFAIDRIN SMALL LETTER M..MEDEFAIDRIN SMALL LETTER Y
-	{0x16E98, 0x16E98, prSTerm},   // Po       MEDEFAIDRIN FULL STOP
-	{0x16F00, 0x16F4A, prOLetter}, // Lo  [75] MIAO LETTER PA..MIAO LETTER RTE
-	{0x16F4F, 0x16F4F, prExtend},  // Mn       MIAO SIGN CONSONANT MODIFIER BAR
-	{0x16F50, 0x16F50, prOLetter}, // Lo       MIAO LETTER NASALIZATION
-	{0x16F51, 0x16F87, prExtend},  // Mc  [55] MIAO SIGN ASPIRATION..MIAO VOWEL SIGN UI
-	{0x16F8F, 0x16F92, prExtend},  // Mn   [4] MIAO TONE RIGHT..MIAO TONE BELOW
-	{0x16F93, 0x16F9F, prOLetter}, // Lm  [13] MIAO LETTER TONE-2..MIAO LETTER REFORMED TONE-8
-	{0x16FE0, 0x16FE1, prOLetter}, // Lm   [2] TANGUT ITERATION MARK..NUSHU ITERATION MARK
-	{0x16FE3, 0x16FE3, prOLetter}, // Lm       OLD CHINESE ITERATION MARK
-	{0x16FE4, 0x16FE4, prExtend},  // Mn       KHITAN SMALL SCRIPT FILLER
-	{0x16FF0, 0x16FF1, prExtend},  // Mc   [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY
-	{0x17000, 0x187F7, prOLetter}, // Lo [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7
-	{0x18800, 0x18CD5, prOLetter}, // Lo [1238] TANGUT COMPONENT-001..KHITAN SMALL SCRIPT CHARACTER-18CD5
-	{0x18D00, 0x18D08, prOLetter}, // Lo   [9] TANGUT IDEOGRAPH-18D00..TANGUT IDEOGRAPH-18D08
-	{0x1AFF0, 0x1AFF3, prOLetter}, // Lm   [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5
-	{0x1AFF5, 0x1AFFB, prOLetter}, // Lm   [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5
-	{0x1AFFD, 0x1AFFE, prOLetter}, // Lm   [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8
-	{0x1B000, 0x1B122, prOLetter}, // Lo [291] KATAKANA LETTER ARCHAIC E..KATAKANA LETTER ARCHAIC WU
-	{0x1B132, 0x1B132, prOLetter}, // Lo       HIRAGANA LETTER SMALL KO
-	{0x1B150, 0x1B152, prOLetter}, // Lo   [3] HIRAGANA LETTER SMALL WI..HIRAGANA LETTER SMALL WO
-	{0x1B155, 0x1B155, prOLetter}, // Lo       KATAKANA LETTER SMALL KO
-	{0x1B164, 0x1B167, prOLetter}, // Lo   [4] KATAKANA LETTER SMALL WI..KATAKANA LETTER SMALL N
-	{0x1B170, 0x1B2FB, prOLetter}, // Lo [396] NUSHU CHARACTER-1B170..NUSHU CHARACTER-1B2FB
-	{0x1BC00, 0x1BC6A, prOLetter}, // Lo [107] DUPLOYAN LETTER H..DUPLOYAN LETTER VOCALIC M
-	{0x1BC70, 0x1BC7C, prOLetter}, // Lo  [13] DUPLOYAN AFFIX LEFT HORIZONTAL SECANT..DUPLOYAN AFFIX ATTACHED TANGENT HOOK
-	{0x1BC80, 0x1BC88, prOLetter}, // Lo   [9] DUPLOYAN AFFIX HIGH ACUTE..DUPLOYAN AFFIX HIGH VERTICAL
-	{0x1BC90, 0x1BC99, prOLetter}, // Lo  [10] DUPLOYAN AFFIX LOW ACUTE..DUPLOYAN AFFIX LOW ARROW
-	{0x1BC9D, 0x1BC9E, prExtend},  // Mn   [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK
-	{0x1BC9F, 0x1BC9F, prSTerm},   // Po       DUPLOYAN PUNCTUATION CHINOOK FULL STOP
-	{0x1BCA0, 0x1BCA3, prFormat},  // Cf   [4] SHORTHAND FORMAT LETTER OVERLAP..SHORTHAND FORMAT UP STEP
-	{0x1CF00, 0x1CF2D, prExtend},  // Mn  [46] ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT..ZNAMENNY COMBINING MARK KRYZH ON LEFT
-	{0x1CF30, 0x1CF46, prExtend},  // Mn  [23] ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO..ZNAMENNY PRIZNAK MODIFIER ROG
-	{0x1D165, 0x1D166, prExtend},  // Mc   [2] MUSICAL SYMBOL COMBINING STEM..MUSICAL SYMBOL COMBINING SPRECHGESANG STEM
-	{0x1D167, 0x1D169, prExtend},  // Mn   [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3
-	{0x1D16D, 0x1D172, prExtend},  // Mc   [6] MUSICAL SYMBOL COMBINING AUGMENTATION DOT..MUSICAL SYMBOL COMBINING FLAG-5
-	{0x1D173, 0x1D17A, prFormat},  // Cf   [8] MUSICAL SYMBOL BEGIN BEAM..MUSICAL SYMBOL END PHRASE
-	{0x1D17B, 0x1D182, prExtend},  // Mn   [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE
-	{0x1D185, 0x1D18B, prExtend},  // Mn   [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE
-	{0x1D1AA, 0x1D1AD, prExtend},  // Mn   [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO
-	{0x1D242, 0x1D244, prExtend},  // Mn   [3] COMBINING GREEK MUSICAL TRISEME..COMBINING GREEK MUSICAL PENTASEME
-	{0x1D400, 0x1D419, prUpper},   // L&  [26] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL BOLD CAPITAL Z
-	{0x1D41A, 0x1D433, prLower},   // L&  [26] MATHEMATICAL BOLD SMALL A..MATHEMATICAL BOLD SMALL Z
-	{0x1D434, 0x1D44D, prUpper},   // L&  [26] MATHEMATICAL ITALIC CAPITAL A..MATHEMATICAL ITALIC CAPITAL Z
-	{0x1D44E, 0x1D454, prLower},   // L&   [7] MATHEMATICAL ITALIC SMALL A..MATHEMATICAL ITALIC SMALL G
-	{0x1D456, 0x1D467, prLower},   // L&  [18] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL ITALIC SMALL Z
-	{0x1D468, 0x1D481, prUpper},   // L&  [26] MATHEMATICAL BOLD ITALIC CAPITAL A..MATHEMATICAL BOLD ITALIC CAPITAL Z
-	{0x1D482, 0x1D49B, prLower},   // L&  [26] MATHEMATICAL BOLD ITALIC SMALL A..MATHEMATICAL BOLD ITALIC SMALL Z
-	{0x1D49C, 0x1D49C, prUpper},   // L&       MATHEMATICAL SCRIPT CAPITAL A
-	{0x1D49E, 0x1D49F, prUpper},   // L&   [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D
-	{0x1D4A2, 0x1D4A2, prUpper},   // L&       MATHEMATICAL SCRIPT CAPITAL G
-	{0x1D4A5, 0x1D4A6, prUpper},   // L&   [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K
-	{0x1D4A9, 0x1D4AC, prUpper},   // L&   [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q
-	{0x1D4AE, 0x1D4B5, prUpper},   // L&   [8] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT CAPITAL Z
-	{0x1D4B6, 0x1D4B9, prLower},   // L&   [4] MATHEMATICAL SCRIPT SMALL A..MATHEMATICAL SCRIPT SMALL D
-	{0x1D4BB, 0x1D4BB, prLower},   // L&       MATHEMATICAL SCRIPT SMALL F
-	{0x1D4BD, 0x1D4C3, prLower},   // L&   [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N
-	{0x1D4C5, 0x1D4CF, prLower},   // L&  [11] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL SCRIPT SMALL Z
-	{0x1D4D0, 0x1D4E9, prUpper},   // L&  [26] MATHEMATICAL BOLD SCRIPT CAPITAL A..MATHEMATICAL BOLD SCRIPT CAPITAL Z
-	{0x1D4EA, 0x1D503, prLower},   // L&  [26] MATHEMATICAL BOLD SCRIPT SMALL A..MATHEMATICAL BOLD SCRIPT SMALL Z
-	{0x1D504, 0x1D505, prUpper},   // L&   [2] MATHEMATICAL FRAKTUR CAPITAL A..MATHEMATICAL FRAKTUR CAPITAL B
-	{0x1D507, 0x1D50A, prUpper},   // L&   [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G
-	{0x1D50D, 0x1D514, prUpper},   // L&   [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q
-	{0x1D516, 0x1D51C, prUpper},   // L&   [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y
-	{0x1D51E, 0x1D537, prLower},   // L&  [26] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL FRAKTUR SMALL Z
-	{0x1D538, 0x1D539, prUpper},   // L&   [2] MATHEMATICAL DOUBLE-STRUCK CAPITAL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B
-	{0x1D53B, 0x1D53E, prUpper},   // L&   [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G
-	{0x1D540, 0x1D544, prUpper},   // L&   [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M
-	{0x1D546, 0x1D546, prUpper},   // L&       MATHEMATICAL DOUBLE-STRUCK CAPITAL O
-	{0x1D54A, 0x1D550, prUpper},   // L&   [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y
-	{0x1D552, 0x1D56B, prLower},   // L&  [26] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL DOUBLE-STRUCK SMALL Z
-	{0x1D56C, 0x1D585, prUpper},   // L&  [26] MATHEMATICAL BOLD FRAKTUR CAPITAL A..MATHEMATICAL BOLD FRAKTUR CAPITAL Z
-	{0x1D586, 0x1D59F, prLower},   // L&  [26] MATHEMATICAL BOLD FRAKTUR SMALL A..MATHEMATICAL BOLD FRAKTUR SMALL Z
-	{0x1D5A0, 0x1D5B9, prUpper},   // L&  [26] MATHEMATICAL SANS-SERIF CAPITAL A..MATHEMATICAL SANS-SERIF CAPITAL Z
-	{0x1D5BA, 0x1D5D3, prLower},   // L&  [26] MATHEMATICAL SANS-SERIF SMALL A..MATHEMATICAL SANS-SERIF SMALL Z
-	{0x1D5D4, 0x1D5ED, prUpper},   // L&  [26] MATHEMATICAL SANS-SERIF BOLD CAPITAL A..MATHEMATICAL SANS-SERIF BOLD CAPITAL Z
-	{0x1D5EE, 0x1D607, prLower},   // L&  [26] MATHEMATICAL SANS-SERIF BOLD SMALL A..MATHEMATICAL SANS-SERIF BOLD SMALL Z
-	{0x1D608, 0x1D621, prUpper},   // L&  [26] MATHEMATICAL SANS-SERIF ITALIC CAPITAL A..MATHEMATICAL SANS-SERIF ITALIC CAPITAL Z
-	{0x1D622, 0x1D63B, prLower},   // L&  [26] MATHEMATICAL SANS-SERIF ITALIC SMALL A..MATHEMATICAL SANS-SERIF ITALIC SMALL Z
-	{0x1D63C, 0x1D655, prUpper},   // L&  [26] MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL A..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Z
-	{0x1D656, 0x1D66F, prLower},   // L&  [26] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL A..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Z
-	{0x1D670, 0x1D689, prUpper},   // L&  [26] MATHEMATICAL MONOSPACE CAPITAL A..MATHEMATICAL MONOSPACE CAPITAL Z
-	{0x1D68A, 0x1D6A5, prLower},   // L&  [28] MATHEMATICAL MONOSPACE SMALL A..MATHEMATICAL ITALIC SMALL DOTLESS J
-	{0x1D6A8, 0x1D6C0, prUpper},   // L&  [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA
-	{0x1D6C2, 0x1D6DA, prLower},   // L&  [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA
-	{0x1D6DC, 0x1D6E1, prLower},   // L&   [6] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL BOLD PI SYMBOL
-	{0x1D6E2, 0x1D6FA, prUpper},   // L&  [25] MATHEMATICAL ITALIC CAPITAL ALPHA..MATHEMATICAL ITALIC CAPITAL OMEGA
-	{0x1D6FC, 0x1D714, prLower},   // L&  [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA
-	{0x1D716, 0x1D71B, prLower},   // L&   [6] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL ITALIC PI SYMBOL
-	{0x1D71C, 0x1D734, prUpper},   // L&  [25] MATHEMATICAL BOLD ITALIC CAPITAL ALPHA..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA
-	{0x1D736, 0x1D74E, prLower},   // L&  [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA
-	{0x1D750, 0x1D755, prLower},   // L&   [6] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC PI SYMBOL
-	{0x1D756, 0x1D76E, prUpper},   // L&  [25] MATHEMATICAL SANS-SERIF BOLD CAPITAL ALPHA..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA
-	{0x1D770, 0x1D788, prLower},   // L&  [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA
-	{0x1D78A, 0x1D78F, prLower},   // L&   [6] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD PI SYMBOL
-	{0x1D790, 0x1D7A8, prUpper},   // L&  [25] MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA
-	{0x1D7AA, 0x1D7C2, prLower},   // L&  [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA
-	{0x1D7C4, 0x1D7C9, prLower},   // L&   [6] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOL
-	{0x1D7CA, 0x1D7CA, prUpper},   // L&       MATHEMATICAL BOLD CAPITAL DIGAMMA
-	{0x1D7CB, 0x1D7CB, prLower},   // L&       MATHEMATICAL BOLD SMALL DIGAMMA
-	{0x1D7CE, 0x1D7FF, prNumeric}, // Nd  [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE
-	{0x1DA00, 0x1DA36, prExtend},  // Mn  [55] SIGNWRITING HEAD RIM..SIGNWRITING AIR SUCKING IN
-	{0x1DA3B, 0x1DA6C, prExtend},  // Mn  [50] SIGNWRITING MOUTH CLOSED NEUTRAL..SIGNWRITING EXCITEMENT
-	{0x1DA75, 0x1DA75, prExtend},  // Mn       SIGNWRITING UPPER BODY TILTING FROM HIP JOINTS
-	{0x1DA84, 0x1DA84, prExtend},  // Mn       SIGNWRITING LOCATION HEAD NECK
-	{0x1DA88, 0x1DA88, prSTerm},   // Po       SIGNWRITING FULL STOP
-	{0x1DA9B, 0x1DA9F, prExtend},  // Mn   [5] SIGNWRITING FILL MODIFIER-2..SIGNWRITING FILL MODIFIER-6
-	{0x1DAA1, 0x1DAAF, prExtend},  // Mn  [15] SIGNWRITING ROTATION MODIFIER-2..SIGNWRITING ROTATION MODIFIER-16
-	{0x1DF00, 0x1DF09, prLower},   // L&  [10] LATIN SMALL LETTER FENG DIGRAPH WITH TRILL..LATIN SMALL LETTER T WITH HOOK AND RETROFLEX HOOK
-	{0x1DF0A, 0x1DF0A, prOLetter}, // Lo       LATIN LETTER RETROFLEX CLICK WITH RETROFLEX HOOK
-	{0x1DF0B, 0x1DF1E, prLower},   // L&  [20] LATIN SMALL LETTER ESH WITH DOUBLE BAR..LATIN SMALL LETTER S WITH CURL
-	{0x1DF25, 0x1DF2A, prLower},   // L&   [6] LATIN SMALL LETTER D WITH MID-HEIGHT LEFT HOOK..LATIN SMALL LETTER T WITH MID-HEIGHT LEFT HOOK
-	{0x1E000, 0x1E006, prExtend},  // Mn   [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE
-	{0x1E008, 0x1E018, prExtend},  // Mn  [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU
-	{0x1E01B, 0x1E021, prExtend},  // Mn   [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI
-	{0x1E023, 0x1E024, prExtend},  // Mn   [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS
-	{0x1E026, 0x1E02A, prExtend},  // Mn   [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA
-	{0x1E030, 0x1E06D, prLower},   // Lm  [62] MODIFIER LETTER CYRILLIC SMALL A..MODIFIER LETTER CYRILLIC SMALL STRAIGHT U WITH STROKE
-	{0x1E08F, 0x1E08F, prExtend},  // Mn       COMBINING CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
-	{0x1E100, 0x1E12C, prOLetter}, // Lo  [45] NYIAKENG PUACHUE HMONG LETTER MA..NYIAKENG PUACHUE HMONG LETTER W
-	{0x1E130, 0x1E136, prExtend},  // Mn   [7] NYIAKENG PUACHUE HMONG TONE-B..NYIAKENG PUACHUE HMONG TONE-D
-	{0x1E137, 0x1E13D, prOLetter}, // Lm   [7] NYIAKENG PUACHUE HMONG SIGN FOR PERSON..NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER
-	{0x1E140, 0x1E149, prNumeric}, // Nd  [10] NYIAKENG PUACHUE HMONG DIGIT ZERO..NYIAKENG PUACHUE HMONG DIGIT NINE
-	{0x1E14E, 0x1E14E, prOLetter}, // Lo       NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ
-	{0x1E290, 0x1E2AD, prOLetter}, // Lo  [30] TOTO LETTER PA..TOTO LETTER A
-	{0x1E2AE, 0x1E2AE, prExtend},  // Mn       TOTO SIGN RISING TONE
-	{0x1E2C0, 0x1E2EB, prOLetter}, // Lo  [44] WANCHO LETTER AA..WANCHO LETTER YIH
-	{0x1E2EC, 0x1E2EF, prExtend},  // Mn   [4] WANCHO TONE TUP..WANCHO TONE KOINI
-	{0x1E2F0, 0x1E2F9, prNumeric}, // Nd  [10] WANCHO DIGIT ZERO..WANCHO DIGIT NINE
-	{0x1E4D0, 0x1E4EA, prOLetter}, // Lo  [27] NAG MUNDARI LETTER O..NAG MUNDARI LETTER ELL
-	{0x1E4EB, 0x1E4EB, prOLetter}, // Lm       NAG MUNDARI SIGN OJOD
-	{0x1E4EC, 0x1E4EF, prExtend},  // Mn   [4] NAG MUNDARI SIGN MUHOR..NAG MUNDARI SIGN SUTUH
-	{0x1E4F0, 0x1E4F9, prNumeric}, // Nd  [10] NAG MUNDARI DIGIT ZERO..NAG MUNDARI DIGIT NINE
-	{0x1E7E0, 0x1E7E6, prOLetter}, // Lo   [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO
-	{0x1E7E8, 0x1E7EB, prOLetter}, // Lo   [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE
-	{0x1E7ED, 0x1E7EE, prOLetter}, // Lo   [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE
-	{0x1E7F0, 0x1E7FE, prOLetter}, // Lo  [15] ETHIOPIC SYLLABLE GURAGE QWI..ETHIOPIC SYLLABLE GURAGE PWEE
-	{0x1E800, 0x1E8C4, prOLetter}, // Lo [197] MENDE KIKAKUI SYLLABLE M001 KI..MENDE KIKAKUI SYLLABLE M060 NYON
-	{0x1E8D0, 0x1E8D6, prExtend},  // Mn   [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS
-	{0x1E900, 0x1E921, prUpper},   // L&  [34] ADLAM CAPITAL LETTER ALIF..ADLAM CAPITAL LETTER SHA
-	{0x1E922, 0x1E943, prLower},   // L&  [34] ADLAM SMALL LETTER ALIF..ADLAM SMALL LETTER SHA
-	{0x1E944, 0x1E94A, prExtend},  // Mn   [7] ADLAM ALIF LENGTHENER..ADLAM NUKTA
-	{0x1E94B, 0x1E94B, prOLetter}, // Lm       ADLAM NASALIZATION MARK
-	{0x1E950, 0x1E959, prNumeric}, // Nd  [10] ADLAM DIGIT ZERO..ADLAM DIGIT NINE
-	{0x1EE00, 0x1EE03, prOLetter}, // Lo   [4] ARABIC MATHEMATICAL ALEF..ARABIC MATHEMATICAL DAL
-	{0x1EE05, 0x1EE1F, prOLetter}, // Lo  [27] ARABIC MATHEMATICAL WAW..ARABIC MATHEMATICAL DOTLESS QAF
-	{0x1EE21, 0x1EE22, prOLetter}, // Lo   [2] ARABIC MATHEMATICAL INITIAL BEH..ARABIC MATHEMATICAL INITIAL JEEM
-	{0x1EE24, 0x1EE24, prOLetter}, // Lo       ARABIC MATHEMATICAL INITIAL HEH
-	{0x1EE27, 0x1EE27, prOLetter}, // Lo       ARABIC MATHEMATICAL INITIAL HAH
-	{0x1EE29, 0x1EE32, prOLetter}, // Lo  [10] ARABIC MATHEMATICAL INITIAL YEH..ARABIC MATHEMATICAL INITIAL QAF
-	{0x1EE34, 0x1EE37, prOLetter}, // Lo   [4] ARABIC MATHEMATICAL INITIAL SHEEN..ARABIC MATHEMATICAL INITIAL KHAH
-	{0x1EE39, 0x1EE39, prOLetter}, // Lo       ARABIC MATHEMATICAL INITIAL DAD
-	{0x1EE3B, 0x1EE3B, prOLetter}, // Lo       ARABIC MATHEMATICAL INITIAL GHAIN
-	{0x1EE42, 0x1EE42, prOLetter}, // Lo       ARABIC MATHEMATICAL TAILED JEEM
-	{0x1EE47, 0x1EE47, prOLetter}, // Lo       ARABIC MATHEMATICAL TAILED HAH
-	{0x1EE49, 0x1EE49, prOLetter}, // Lo       ARABIC MATHEMATICAL TAILED YEH
-	{0x1EE4B, 0x1EE4B, prOLetter}, // Lo       ARABIC MATHEMATICAL TAILED LAM
-	{0x1EE4D, 0x1EE4F, prOLetter}, // Lo   [3] ARABIC MATHEMATICAL TAILED NOON..ARABIC MATHEMATICAL TAILED AIN
-	{0x1EE51, 0x1EE52, prOLetter}, // Lo   [2] ARABIC MATHEMATICAL TAILED SAD..ARABIC MATHEMATICAL TAILED QAF
-	{0x1EE54, 0x1EE54, prOLetter}, // Lo       ARABIC MATHEMATICAL TAILED SHEEN
-	{0x1EE57, 0x1EE57, prOLetter}, // Lo       ARABIC MATHEMATICAL TAILED KHAH
-	{0x1EE59, 0x1EE59, prOLetter}, // Lo       ARABIC MATHEMATICAL TAILED DAD
-	{0x1EE5B, 0x1EE5B, prOLetter}, // Lo       ARABIC MATHEMATICAL TAILED GHAIN
-	{0x1EE5D, 0x1EE5D, prOLetter}, // Lo       ARABIC MATHEMATICAL TAILED DOTLESS NOON
-	{0x1EE5F, 0x1EE5F, prOLetter}, // Lo       ARABIC MATHEMATICAL TAILED DOTLESS QAF
-	{0x1EE61, 0x1EE62, prOLetter}, // Lo   [2] ARABIC MATHEMATICAL STRETCHED BEH..ARABIC MATHEMATICAL STRETCHED JEEM
-	{0x1EE64, 0x1EE64, prOLetter}, // Lo       ARABIC MATHEMATICAL STRETCHED HEH
-	{0x1EE67, 0x1EE6A, prOLetter}, // Lo   [4] ARABIC MATHEMATICAL STRETCHED HAH..ARABIC MATHEMATICAL STRETCHED KAF
-	{0x1EE6C, 0x1EE72, prOLetter}, // Lo   [7] ARABIC MATHEMATICAL STRETCHED MEEM..ARABIC MATHEMATICAL STRETCHED QAF
-	{0x1EE74, 0x1EE77, prOLetter}, // Lo   [4] ARABIC MATHEMATICAL STRETCHED SHEEN..ARABIC MATHEMATICAL STRETCHED KHAH
-	{0x1EE79, 0x1EE7C, prOLetter}, // Lo   [4] ARABIC MATHEMATICAL STRETCHED DAD..ARABIC MATHEMATICAL STRETCHED DOTLESS BEH
-	{0x1EE7E, 0x1EE7E, prOLetter}, // Lo       ARABIC MATHEMATICAL STRETCHED DOTLESS FEH
-	{0x1EE80, 0x1EE89, prOLetter}, // Lo  [10] ARABIC MATHEMATICAL LOOPED ALEF..ARABIC MATHEMATICAL LOOPED YEH
-	{0x1EE8B, 0x1EE9B, prOLetter}, // Lo  [17] ARABIC MATHEMATICAL LOOPED LAM..ARABIC MATHEMATICAL LOOPED GHAIN
-	{0x1EEA1, 0x1EEA3, prOLetter}, // Lo   [3] ARABIC MATHEMATICAL DOUBLE-STRUCK BEH..ARABIC MATHEMATICAL DOUBLE-STRUCK DAL
-	{0x1EEA5, 0x1EEA9, prOLetter}, // Lo   [5] ARABIC MATHEMATICAL DOUBLE-STRUCK WAW..ARABIC MATHEMATICAL DOUBLE-STRUCK YEH
-	{0x1EEAB, 0x1EEBB, prOLetter}, // Lo  [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN
-	{0x1F130, 0x1F149, prUpper},   // So  [26] SQUARED LATIN CAPITAL LETTER A..SQUARED LATIN CAPITAL LETTER Z
-	{0x1F150, 0x1F169, prUpper},   // So  [26] NEGATIVE CIRCLED LATIN CAPITAL LETTER A..NEGATIVE CIRCLED LATIN CAPITAL LETTER Z
-	{0x1F170, 0x1F189, prUpper},   // So  [26] NEGATIVE SQUARED LATIN CAPITAL LETTER A..NEGATIVE SQUARED LATIN CAPITAL LETTER Z
-	{0x1F676, 0x1F678, prClose},   // So   [3] SANS-SERIF HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT..SANS-SERIF HEAVY LOW DOUBLE COMMA QUOTATION MARK ORNAMENT
-	{0x1FBF0, 0x1FBF9, prNumeric}, // Nd  [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE
-	{0x20000, 0x2A6DF, prOLetter}, // Lo [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF
-	{0x2A700, 0x2B739, prOLetter}, // Lo [4154] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B739
-	{0x2B740, 0x2B81D, prOLetter}, // Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D
-	{0x2B820, 0x2CEA1, prOLetter}, // Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1
-	{0x2CEB0, 0x2EBE0, prOLetter}, // Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0
-	{0x2F800, 0x2FA1D, prOLetter}, // Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
-	{0x30000, 0x3134A, prOLetter}, // Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A
-	{0x31350, 0x323AF, prOLetter}, // Lo [4192] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-323AF
-	{0xE0001, 0xE0001, prFormat},  // Cf       LANGUAGE TAG
-	{0xE0020, 0xE007F, prExtend},  // Cf  [96] TAG SPACE..CANCEL TAG
-	{0xE0100, 0xE01EF, prExtend},  // Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256
-}

+ 0 - 276
v2/vendor/github.com/rivo/uniseg/sentencerules.go

@@ -1,276 +0,0 @@
-package uniseg
-
-import "unicode/utf8"
-
-// The states of the sentence break parser.
-const (
-	sbAny = iota
-	sbCR
-	sbParaSep
-	sbATerm
-	sbUpper
-	sbLower
-	sbSB7
-	sbSB8Close
-	sbSB8Sp
-	sbSTerm
-	sbSB8aClose
-	sbSB8aSp
-)
-
-// sbTransitions implements the sentence break parser's state transitions. It's
-// anologous to [grTransitions], see comments there for details.
-//
-// Unicode version 15.0.0.
-func sbTransitions(state, prop int) (newState int, sentenceBreak bool, rule int) {
-	switch uint64(state) | uint64(prop)<<32 {
-	// SB3.
-	case sbAny | prCR<<32:
-		return sbCR, false, 9990
-	case sbCR | prLF<<32:
-		return sbParaSep, false, 30
-
-	// SB4.
-	case sbAny | prSep<<32:
-		return sbParaSep, false, 9990
-	case sbAny | prLF<<32:
-		return sbParaSep, false, 9990
-	case sbParaSep | prAny<<32:
-		return sbAny, true, 40
-	case sbCR | prAny<<32:
-		return sbAny, true, 40
-
-	// SB6.
-	case sbAny | prATerm<<32:
-		return sbATerm, false, 9990
-	case sbATerm | prNumeric<<32:
-		return sbAny, false, 60
-	case sbSB7 | prNumeric<<32:
-		return sbAny, false, 60 // Because ATerm also appears in SB7.
-
-	// SB7.
-	case sbAny | prUpper<<32:
-		return sbUpper, false, 9990
-	case sbAny | prLower<<32:
-		return sbLower, false, 9990
-	case sbUpper | prATerm<<32:
-		return sbSB7, false, 70
-	case sbLower | prATerm<<32:
-		return sbSB7, false, 70
-	case sbSB7 | prUpper<<32:
-		return sbUpper, false, 70
-
-	// SB8a.
-	case sbAny | prSTerm<<32:
-		return sbSTerm, false, 9990
-	case sbATerm | prSContinue<<32:
-		return sbAny, false, 81
-	case sbATerm | prATerm<<32:
-		return sbATerm, false, 81
-	case sbATerm | prSTerm<<32:
-		return sbSTerm, false, 81
-	case sbSB7 | prSContinue<<32:
-		return sbAny, false, 81
-	case sbSB7 | prATerm<<32:
-		return sbATerm, false, 81
-	case sbSB7 | prSTerm<<32:
-		return sbSTerm, false, 81
-	case sbSB8Close | prSContinue<<32:
-		return sbAny, false, 81
-	case sbSB8Close | prATerm<<32:
-		return sbATerm, false, 81
-	case sbSB8Close | prSTerm<<32:
-		return sbSTerm, false, 81
-	case sbSB8Sp | prSContinue<<32:
-		return sbAny, false, 81
-	case sbSB8Sp | prATerm<<32:
-		return sbATerm, false, 81
-	case sbSB8Sp | prSTerm<<32:
-		return sbSTerm, false, 81
-	case sbSTerm | prSContinue<<32:
-		return sbAny, false, 81
-	case sbSTerm | prATerm<<32:
-		return sbATerm, false, 81
-	case sbSTerm | prSTerm<<32:
-		return sbSTerm, false, 81
-	case sbSB8aClose | prSContinue<<32:
-		return sbAny, false, 81
-	case sbSB8aClose | prATerm<<32:
-		return sbATerm, false, 81
-	case sbSB8aClose | prSTerm<<32:
-		return sbSTerm, false, 81
-	case sbSB8aSp | prSContinue<<32:
-		return sbAny, false, 81
-	case sbSB8aSp | prATerm<<32:
-		return sbATerm, false, 81
-	case sbSB8aSp | prSTerm<<32:
-		return sbSTerm, false, 81
-
-	// SB9.
-	case sbATerm | prClose<<32:
-		return sbSB8Close, false, 90
-	case sbSB7 | prClose<<32:
-		return sbSB8Close, false, 90
-	case sbSB8Close | prClose<<32:
-		return sbSB8Close, false, 90
-	case sbATerm | prSp<<32:
-		return sbSB8Sp, false, 90
-	case sbSB7 | prSp<<32:
-		return sbSB8Sp, false, 90
-	case sbSB8Close | prSp<<32:
-		return sbSB8Sp, false, 90
-	case sbSTerm | prClose<<32:
-		return sbSB8aClose, false, 90
-	case sbSB8aClose | prClose<<32:
-		return sbSB8aClose, false, 90
-	case sbSTerm | prSp<<32:
-		return sbSB8aSp, false, 90
-	case sbSB8aClose | prSp<<32:
-		return sbSB8aSp, false, 90
-	case sbATerm | prSep<<32:
-		return sbParaSep, false, 90
-	case sbATerm | prCR<<32:
-		return sbParaSep, false, 90
-	case sbATerm | prLF<<32:
-		return sbParaSep, false, 90
-	case sbSB7 | prSep<<32:
-		return sbParaSep, false, 90
-	case sbSB7 | prCR<<32:
-		return sbParaSep, false, 90
-	case sbSB7 | prLF<<32:
-		return sbParaSep, false, 90
-	case sbSB8Close | prSep<<32:
-		return sbParaSep, false, 90
-	case sbSB8Close | prCR<<32:
-		return sbParaSep, false, 90
-	case sbSB8Close | prLF<<32:
-		return sbParaSep, false, 90
-	case sbSTerm | prSep<<32:
-		return sbParaSep, false, 90
-	case sbSTerm | prCR<<32:
-		return sbParaSep, false, 90
-	case sbSTerm | prLF<<32:
-		return sbParaSep, false, 90
-	case sbSB8aClose | prSep<<32:
-		return sbParaSep, false, 90
-	case sbSB8aClose | prCR<<32:
-		return sbParaSep, false, 90
-	case sbSB8aClose | prLF<<32:
-		return sbParaSep, false, 90
-
-	// SB10.
-	case sbSB8Sp | prSp<<32:
-		return sbSB8Sp, false, 100
-	case sbSB8aSp | prSp<<32:
-		return sbSB8aSp, false, 100
-	case sbSB8Sp | prSep<<32:
-		return sbParaSep, false, 100
-	case sbSB8Sp | prCR<<32:
-		return sbParaSep, false, 100
-	case sbSB8Sp | prLF<<32:
-		return sbParaSep, false, 100
-
-	// SB11.
-	case sbATerm | prAny<<32:
-		return sbAny, true, 110
-	case sbSB7 | prAny<<32:
-		return sbAny, true, 110
-	case sbSB8Close | prAny<<32:
-		return sbAny, true, 110
-	case sbSB8Sp | prAny<<32:
-		return sbAny, true, 110
-	case sbSTerm | prAny<<32:
-		return sbAny, true, 110
-	case sbSB8aClose | prAny<<32:
-		return sbAny, true, 110
-	case sbSB8aSp | prAny<<32:
-		return sbAny, true, 110
-	// We'll always break after ParaSep due to SB4.
-
-	default:
-		return -1, false, -1
-	}
-}
-
-// transitionSentenceBreakState determines the new state of the sentence break
-// parser given the current state and the next code point. It also returns
-// whether a sentence boundary was detected. If more than one code point is
-// needed to determine the new state, the byte slice or the string starting
-// after rune "r" can be used (whichever is not nil or empty) for further
-// lookups.
-func transitionSentenceBreakState(state int, r rune, b []byte, str string) (newState int, sentenceBreak bool) {
-	// Determine the property of the next character.
-	nextProperty := property(sentenceBreakCodePoints, r)
-
-	// SB5 (Replacing Ignore Rules).
-	if nextProperty == prExtend || nextProperty == prFormat {
-		if state == sbParaSep || state == sbCR {
-			return sbAny, true // Make sure we don't apply SB5 to SB3 or SB4.
-		}
-		if state < 0 {
-			return sbAny, true // SB1.
-		}
-		return state, false
-	}
-
-	// Find the applicable transition in the table.
-	var rule int
-	newState, sentenceBreak, rule = sbTransitions(state, nextProperty)
-	if newState < 0 {
-		// No specific transition found. Try the less specific ones.
-		anyPropState, anyPropProp, anyPropRule := sbTransitions(state, prAny)
-		anyStateState, anyStateProp, anyStateRule := sbTransitions(sbAny, nextProperty)
-		if anyPropState >= 0 && anyStateState >= 0 {
-			// Both apply. We'll use a mix (see comments for grTransitions).
-			newState, sentenceBreak, rule = anyStateState, anyStateProp, anyStateRule
-			if anyPropRule < anyStateRule {
-				sentenceBreak, rule = anyPropProp, anyPropRule
-			}
-		} else if anyPropState >= 0 {
-			// We only have a specific state.
-			newState, sentenceBreak, rule = anyPropState, anyPropProp, anyPropRule
-			// This branch will probably never be reached because okAnyState will
-			// always be true given the current transition map. But we keep it here
-			// for future modifications to the transition map where this may not be
-			// true anymore.
-		} else if anyStateState >= 0 {
-			// We only have a specific property.
-			newState, sentenceBreak, rule = anyStateState, anyStateProp, anyStateRule
-		} else {
-			// No known transition. SB999: Any × Any.
-			newState, sentenceBreak, rule = sbAny, false, 9990
-		}
-	}
-
-	// SB8.
-	if rule > 80 && (state == sbATerm || state == sbSB8Close || state == sbSB8Sp || state == sbSB7) {
-		// Check the right side of the rule.
-		var length int
-		for nextProperty != prOLetter &&
-			nextProperty != prUpper &&
-			nextProperty != prLower &&
-			nextProperty != prSep &&
-			nextProperty != prCR &&
-			nextProperty != prLF &&
-			nextProperty != prATerm &&
-			nextProperty != prSTerm {
-			// Move on to the next rune.
-			if b != nil { // Byte slice version.
-				r, length = utf8.DecodeRune(b)
-				b = b[length:]
-			} else { // String version.
-				r, length = utf8.DecodeRuneInString(str)
-				str = str[length:]
-			}
-			if r == utf8.RuneError {
-				break
-			}
-			nextProperty = property(sentenceBreakCodePoints, r)
-		}
-		if nextProperty == prLower {
-			return sbLower, false
-		}
-	}
-
-	return
-}

+ 0 - 242
v2/vendor/github.com/rivo/uniseg/step.go

@@ -1,242 +0,0 @@
-package uniseg
-
-import "unicode/utf8"
-
-// The bit masks used to extract boundary information returned by [Step].
-const (
-	MaskLine     = 3
-	MaskWord     = 4
-	MaskSentence = 8
-)
-
-// The number of bits to shift the boundary information returned by [Step] to
-// obtain the monospace width of the grapheme cluster.
-const ShiftWidth = 4
-
-// The bit positions by which boundary flags are shifted by the [Step] function.
-// These must correspond to the Mask constants.
-const (
-	shiftWord     = 2
-	shiftSentence = 3
-	// shiftwWidth is ShiftWidth above. No mask as these are always the remaining bits.
-)
-
-// The bit positions by which states are shifted by the [Step] function. These
-// values must ensure state values defined for each of the boundary algorithms
-// don't overlap (and that they all still fit in a single int). These must
-// correspond to the Mask constants.
-const (
-	shiftWordState     = 4
-	shiftSentenceState = 9
-	shiftLineState     = 13
-	shiftPropState     = 21 // No mask as these are always the remaining bits.
-)
-
-// The bit mask used to extract the state returned by the [Step] function, after
-// shifting. These values must correspond to the shift constants.
-const (
-	maskGraphemeState = 0xf
-	maskWordState     = 0x1f
-	maskSentenceState = 0xf
-	maskLineState     = 0xff
-)
-
-// Step returns the first grapheme cluster (user-perceived character) found in
-// the given byte slice. It also returns information about the boundary between
-// that grapheme cluster and the one following it as well as the monospace width
-// of the grapheme cluster. There are three types of boundary information: word
-// boundaries, sentence boundaries, and line breaks. This function is therefore
-// a combination of [FirstGraphemeCluster], [FirstWord], [FirstSentence], and
-// [FirstLineSegment].
-//
-// The "boundaries" return value can be evaluated as follows:
-//
-//   - boundaries&MaskWord != 0: The boundary is a word boundary.
-//   - boundaries&MaskWord == 0: The boundary is not a word boundary.
-//   - boundaries&MaskSentence != 0: The boundary is a sentence boundary.
-//   - boundaries&MaskSentence == 0: The boundary is not a sentence boundary.
-//   - boundaries&MaskLine == LineDontBreak: You must not break the line at the
-//     boundary.
-//   - boundaries&MaskLine == LineMustBreak: You must break the line at the
-//     boundary.
-//   - boundaries&MaskLine == LineCanBreak: You may or may not break the line at
-//     the boundary.
-//   - boundaries >> ShiftWidth: The width of the grapheme cluster for most
-//     monospace fonts where a value of 1 represents one character cell.
-//
-// This function can be called continuously to extract all grapheme clusters
-// from a byte slice, as illustrated in the examples below.
-//
-// If you don't know which state to pass, for example when calling the function
-// for the first time, you must pass -1. For consecutive calls, pass the state
-// and rest slice returned by the previous call.
-//
-// The "rest" slice is the sub-slice of the original byte slice "b" starting
-// after the last byte of the identified grapheme cluster. If the length of the
-// "rest" slice is 0, the entire byte slice "b" has been processed. The
-// "cluster" byte slice is the sub-slice of the input slice containing the
-// first identified grapheme cluster.
-//
-// Given an empty byte slice "b", the function returns nil values.
-//
-// While slightly less convenient than using the Graphemes class, this function
-// has much better performance and makes no allocations. It lends itself well to
-// large byte slices.
-//
-// Note that in accordance with [UAX #14 LB3], the final segment will end with
-// a mandatory line break (boundaries&MaskLine == LineMustBreak). You can choose
-// to ignore this by checking if the length of the "rest" slice is 0 and calling
-// [HasTrailingLineBreak] or [HasTrailingLineBreakInString] on the last rune.
-//
-// [UAX #14 LB3]: https://www.unicode.org/reports/tr14/#Algorithm
-func Step(b []byte, state int) (cluster, rest []byte, boundaries int, newState int) {
-	// An empty byte slice returns nothing.
-	if len(b) == 0 {
-		return
-	}
-
-	// Extract the first rune.
-	r, length := utf8.DecodeRune(b)
-	if len(b) <= length { // If we're already past the end, there is nothing else to parse.
-		var prop int
-		if state < 0 {
-			prop = propertyGraphemes(r)
-		} else {
-			prop = state >> shiftPropState
-		}
-		return b, nil, LineMustBreak | (1 << shiftWord) | (1 << shiftSentence) | (runeWidth(r, prop) << ShiftWidth), grAny | (wbAny << shiftWordState) | (sbAny << shiftSentenceState) | (lbAny << shiftLineState) | (prop << shiftPropState)
-	}
-
-	// If we don't know the state, determine it now.
-	var graphemeState, wordState, sentenceState, lineState, firstProp int
-	remainder := b[length:]
-	if state < 0 {
-		graphemeState, firstProp, _ = transitionGraphemeState(state, r)
-		wordState, _ = transitionWordBreakState(state, r, remainder, "")
-		sentenceState, _ = transitionSentenceBreakState(state, r, remainder, "")
-		lineState, _ = transitionLineBreakState(state, r, remainder, "")
-	} else {
-		graphemeState = state & maskGraphemeState
-		wordState = (state >> shiftWordState) & maskWordState
-		sentenceState = (state >> shiftSentenceState) & maskSentenceState
-		lineState = (state >> shiftLineState) & maskLineState
-		firstProp = state >> shiftPropState
-	}
-
-	// Transition until we find a grapheme cluster boundary.
-	width := runeWidth(r, firstProp)
-	for {
-		var (
-			graphemeBoundary, wordBoundary, sentenceBoundary bool
-			lineBreak, prop                                  int
-		)
-
-		r, l := utf8.DecodeRune(remainder)
-		remainder = b[length+l:]
-
-		graphemeState, prop, graphemeBoundary = transitionGraphemeState(graphemeState, r)
-		wordState, wordBoundary = transitionWordBreakState(wordState, r, remainder, "")
-		sentenceState, sentenceBoundary = transitionSentenceBreakState(sentenceState, r, remainder, "")
-		lineState, lineBreak = transitionLineBreakState(lineState, r, remainder, "")
-
-		if graphemeBoundary {
-			boundary := lineBreak | (width << ShiftWidth)
-			if wordBoundary {
-				boundary |= 1 << shiftWord
-			}
-			if sentenceBoundary {
-				boundary |= 1 << shiftSentence
-			}
-			return b[:length], b[length:], boundary, graphemeState | (wordState << shiftWordState) | (sentenceState << shiftSentenceState) | (lineState << shiftLineState) | (prop << shiftPropState)
-		}
-
-		if firstProp == prExtendedPictographic {
-			if r == vs15 {
-				width = 1
-			} else if r == vs16 {
-				width = 2
-			}
-		} else if firstProp != prRegionalIndicator && firstProp != prL {
-			width += runeWidth(r, prop)
-		}
-
-		length += l
-		if len(b) <= length {
-			return b, nil, LineMustBreak | (1 << shiftWord) | (1 << shiftSentence) | (width << ShiftWidth), grAny | (wbAny << shiftWordState) | (sbAny << shiftSentenceState) | (lbAny << shiftLineState) | (prop << shiftPropState)
-		}
-	}
-}
-
-// StepString is like [Step] but its input and outputs are strings.
-func StepString(str string, state int) (cluster, rest string, boundaries int, newState int) {
-	// An empty byte slice returns nothing.
-	if len(str) == 0 {
-		return
-	}
-
-	// Extract the first rune.
-	r, length := utf8.DecodeRuneInString(str)
-	if len(str) <= length { // If we're already past the end, there is nothing else to parse.
-		prop := propertyGraphemes(r)
-		return str, "", LineMustBreak | (1 << shiftWord) | (1 << shiftSentence) | (runeWidth(r, prop) << ShiftWidth), grAny | (wbAny << shiftWordState) | (sbAny << shiftSentenceState) | (lbAny << shiftLineState)
-	}
-
-	// If we don't know the state, determine it now.
-	var graphemeState, wordState, sentenceState, lineState, firstProp int
-	remainder := str[length:]
-	if state < 0 {
-		graphemeState, firstProp, _ = transitionGraphemeState(state, r)
-		wordState, _ = transitionWordBreakState(state, r, nil, remainder)
-		sentenceState, _ = transitionSentenceBreakState(state, r, nil, remainder)
-		lineState, _ = transitionLineBreakState(state, r, nil, remainder)
-	} else {
-		graphemeState = state & maskGraphemeState
-		wordState = (state >> shiftWordState) & maskWordState
-		sentenceState = (state >> shiftSentenceState) & maskSentenceState
-		lineState = (state >> shiftLineState) & maskLineState
-		firstProp = state >> shiftPropState
-	}
-
-	// Transition until we find a grapheme cluster boundary.
-	width := runeWidth(r, firstProp)
-	for {
-		var (
-			graphemeBoundary, wordBoundary, sentenceBoundary bool
-			lineBreak, prop                                  int
-		)
-
-		r, l := utf8.DecodeRuneInString(remainder)
-		remainder = str[length+l:]
-
-		graphemeState, prop, graphemeBoundary = transitionGraphemeState(graphemeState, r)
-		wordState, wordBoundary = transitionWordBreakState(wordState, r, nil, remainder)
-		sentenceState, sentenceBoundary = transitionSentenceBreakState(sentenceState, r, nil, remainder)
-		lineState, lineBreak = transitionLineBreakState(lineState, r, nil, remainder)
-
-		if graphemeBoundary {
-			boundary := lineBreak | (width << ShiftWidth)
-			if wordBoundary {
-				boundary |= 1 << shiftWord
-			}
-			if sentenceBoundary {
-				boundary |= 1 << shiftSentence
-			}
-			return str[:length], str[length:], boundary, graphemeState | (wordState << shiftWordState) | (sentenceState << shiftSentenceState) | (lineState << shiftLineState) | (prop << shiftPropState)
-		}
-
-		if firstProp == prExtendedPictographic {
-			if r == vs15 {
-				width = 1
-			} else if r == vs16 {
-				width = 2
-			}
-		} else if firstProp != prRegionalIndicator && firstProp != prL {
-			width += runeWidth(r, prop)
-		}
-
-		length += l
-		if len(str) <= length {
-			return str, "", LineMustBreak | (1 << shiftWord) | (1 << shiftSentence) | (width << ShiftWidth), grAny | (wbAny << shiftWordState) | (sbAny << shiftSentenceState) | (lbAny << shiftLineState) | (prop << shiftPropState)
-		}
-	}
-}

+ 0 - 61
v2/vendor/github.com/rivo/uniseg/width.go

@@ -1,61 +0,0 @@
-package uniseg
-
-// EastAsianAmbiguousWidth specifies the monospace width for East Asian
-// characters classified as Ambiguous. The default is 1 but some rare fonts
-// render them with a width of 2.
-var EastAsianAmbiguousWidth = 1
-
-// runeWidth returns the monospace width for the given rune. The provided
-// grapheme property is a value mapped by the [graphemeCodePoints] table.
-//
-// Every rune has a width of 1, except for runes with the following properties
-// (evaluated in this order):
-//
-//   - Control, CR, LF, Extend, ZWJ: Width of 0
-//   - \u2e3a, TWO-EM DASH: Width of 3
-//   - \u2e3b, THREE-EM DASH: Width of 4
-//   - East-Asian width Fullwidth and Wide: Width of 2 (Ambiguous and Neutral
-//     have a width of 1)
-//   - Regional Indicator: Width of 2
-//   - Extended Pictographic: Width of 2, unless Emoji Presentation is "No".
-func runeWidth(r rune, graphemeProperty int) int {
-	switch graphemeProperty {
-	case prControl, prCR, prLF, prExtend, prZWJ:
-		return 0
-	case prRegionalIndicator:
-		return 2
-	case prExtendedPictographic:
-		if property(emojiPresentation, r) == prEmojiPresentation {
-			return 2
-		}
-		return 1
-	}
-
-	switch r {
-	case 0x2e3a:
-		return 3
-	case 0x2e3b:
-		return 4
-	}
-
-	switch propertyEastAsianWidth(r) {
-	case prW, prF:
-		return 2
-	case prA:
-		return EastAsianAmbiguousWidth
-	}
-
-	return 1
-}
-
-// StringWidth returns the monospace width for the given string, that is, the
-// number of same-size cells to be occupied by the string.
-func StringWidth(s string) (width int) {
-	state := -1
-	for len(s) > 0 {
-		var w int
-		_, s, w, state = FirstGraphemeClusterInString(s, state)
-		width += w
-	}
-	return
-}

+ 0 - 89
v2/vendor/github.com/rivo/uniseg/word.go

@@ -1,89 +0,0 @@
-package uniseg
-
-import "unicode/utf8"
-
-// FirstWord returns the first word found in the given byte slice according to
-// the rules of [Unicode Standard Annex #29, Word Boundaries]. This function can
-// be called continuously to extract all words from a byte slice, as illustrated
-// in the example below.
-//
-// If you don't know the current state, for example when calling the function
-// for the first time, you must pass -1. For consecutive calls, pass the state
-// and rest slice returned by the previous call.
-//
-// The "rest" slice is the sub-slice of the original byte slice "b" starting
-// after the last byte of the identified word. If the length of the "rest" slice
-// is 0, the entire byte slice "b" has been processed. The "word" byte slice is
-// the sub-slice of the input slice containing the identified word.
-//
-// Given an empty byte slice "b", the function returns nil values.
-//
-// [Unicode Standard Annex #29, Word Boundaries]: http://unicode.org/reports/tr29/#Word_Boundaries
-func FirstWord(b []byte, state int) (word, rest []byte, newState int) {
-	// An empty byte slice returns nothing.
-	if len(b) == 0 {
-		return
-	}
-
-	// Extract the first rune.
-	r, length := utf8.DecodeRune(b)
-	if len(b) <= length { // If we're already past the end, there is nothing else to parse.
-		return b, nil, wbAny
-	}
-
-	// If we don't know the state, determine it now.
-	if state < 0 {
-		state, _ = transitionWordBreakState(state, r, b[length:], "")
-	}
-
-	// Transition until we find a boundary.
-	var boundary bool
-	for {
-		r, l := utf8.DecodeRune(b[length:])
-		state, boundary = transitionWordBreakState(state, r, b[length+l:], "")
-
-		if boundary {
-			return b[:length], b[length:], state
-		}
-
-		length += l
-		if len(b) <= length {
-			return b, nil, wbAny
-		}
-	}
-}
-
-// FirstWordInString is like [FirstWord] but its input and outputs are strings.
-func FirstWordInString(str string, state int) (word, rest string, newState int) {
-	// An empty byte slice returns nothing.
-	if len(str) == 0 {
-		return
-	}
-
-	// Extract the first rune.
-	r, length := utf8.DecodeRuneInString(str)
-	if len(str) <= length { // If we're already past the end, there is nothing else to parse.
-		return str, "", wbAny
-	}
-
-	// If we don't know the state, determine it now.
-	if state < 0 {
-		state, _ = transitionWordBreakState(state, r, nil, str[length:])
-	}
-
-	// Transition until we find a boundary.
-	var boundary bool
-	for {
-		r, l := utf8.DecodeRuneInString(str[length:])
-		state, boundary = transitionWordBreakState(state, r, nil, str[length+l:])
-
-		if boundary {
-			return str[:length], str[length:], state
-		}
-
-		length += l
-		if len(str) <= length {
-			return str, "", wbAny
-		}
-	}
-}

+ 0 - 1883
v2/vendor/github.com/rivo/uniseg/wordproperties.go

@@ -1,1883 +0,0 @@
-// Code generated via go generate from gen_properties.go. DO NOT EDIT.
-
-package uniseg
-
-// workBreakCodePoints are taken from
-// https://www.unicode.org/Public/15.0.0/ucd/auxiliary/WordBreakProperty.txt
-// and
-// https://unicode.org/Public/15.0.0/ucd/emoji/emoji-data.txt
-// ("Extended_Pictographic" only)
-// on September 5, 2023. See https://www.unicode.org/license.html for the Unicode
-// license agreement.
-var workBreakCodePoints = [][3]int{
-	{0x000A, 0x000A, prLF},                     // Cc       <control-000A>
-	{0x000B, 0x000C, prNewline},                // Cc   [2] <control-000B>..<control-000C>
-	{0x000D, 0x000D, prCR},                     // Cc       <control-000D>
-	{0x0020, 0x0020, prWSegSpace},              // Zs       SPACE
-	{0x0022, 0x0022, prDoubleQuote},            // Po       QUOTATION MARK
-	{0x0027, 0x0027, prSingleQuote},            // Po       APOSTROPHE
-	{0x002C, 0x002C, prMidNum},                 // Po       COMMA
-	{0x002E, 0x002E, prMidNumLet},              // Po       FULL STOP
-	{0x0030, 0x0039, prNumeric},                // Nd  [10] DIGIT ZERO..DIGIT NINE
-	{0x003A, 0x003A, prMidLetter},              // Po       COLON
-	{0x003B, 0x003B, prMidNum},                 // Po       SEMICOLON
-	{0x0041, 0x005A, prALetter},                // L&  [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z
-	{0x005F, 0x005F, prExtendNumLet},           // Pc       LOW LINE
-	{0x0061, 0x007A, prALetter},                // L&  [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z
-	{0x0085, 0x0085, prNewline},                // Cc       <control-0085>
-	{0x00A9, 0x00A9, prExtendedPictographic},   // E0.6   [1] (©️)       copyright
-	{0x00AA, 0x00AA, prALetter},                // Lo       FEMININE ORDINAL INDICATOR
-	{0x00AD, 0x00AD, prFormat},                 // Cf       SOFT HYPHEN
-	{0x00AE, 0x00AE, prExtendedPictographic},   // E0.6   [1] (®️)       registered
-	{0x00B5, 0x00B5, prALetter},                // L&       MICRO SIGN
-	{0x00B7, 0x00B7, prMidLetter},              // Po       MIDDLE DOT
-	{0x00BA, 0x00BA, prALetter},                // Lo       MASCULINE ORDINAL INDICATOR
-	{0x00C0, 0x00D6, prALetter},                // L&  [23] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER O WITH DIAERESIS
-	{0x00D8, 0x00F6, prALetter},                // L&  [31] LATIN CAPITAL LETTER O WITH STROKE..LATIN SMALL LETTER O WITH DIAERESIS
-	{0x00F8, 0x01BA, prALetter},                // L& [195] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER EZH WITH TAIL
-	{0x01BB, 0x01BB, prALetter},                // Lo       LATIN LETTER TWO WITH STROKE
-	{0x01BC, 0x01BF, prALetter},                // L&   [4] LATIN CAPITAL LETTER TONE FIVE..LATIN LETTER WYNN
-	{0x01C0, 0x01C3, prALetter},                // Lo   [4] LATIN LETTER DENTAL CLICK..LATIN LETTER RETROFLEX CLICK
-	{0x01C4, 0x0293, prALetter},                // L& [208] LATIN CAPITAL LETTER DZ WITH CARON..LATIN SMALL LETTER EZH WITH CURL
-	{0x0294, 0x0294, prALetter},                // Lo       LATIN LETTER GLOTTAL STOP
-	{0x0295, 0x02AF, prALetter},                // L&  [27] LATIN LETTER PHARYNGEAL VOICED FRICATIVE..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL
-	{0x02B0, 0x02C1, prALetter},                // Lm  [18] MODIFIER LETTER SMALL H..MODIFIER LETTER REVERSED GLOTTAL STOP
-	{0x02C2, 0x02C5, prALetter},                // Sk   [4] MODIFIER LETTER LEFT ARROWHEAD..MODIFIER LETTER DOWN ARROWHEAD
-	{0x02C6, 0x02D1, prALetter},                // Lm  [12] MODIFIER LETTER CIRCUMFLEX ACCENT..MODIFIER LETTER HALF TRIANGULAR COLON
-	{0x02D2, 0x02D7, prALetter},                // Sk   [6] MODIFIER LETTER CENTRED RIGHT HALF RING..MODIFIER LETTER MINUS SIGN
-	{0x02DE, 0x02DF, prALetter},                // Sk   [2] MODIFIER LETTER RHOTIC HOOK..MODIFIER LETTER CROSS ACCENT
-	{0x02E0, 0x02E4, prALetter},                // Lm   [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
-	{0x02E5, 0x02EB, prALetter},                // Sk   [7] MODIFIER LETTER EXTRA-HIGH TONE BAR..MODIFIER LETTER YANG DEPARTING TONE MARK
-	{0x02EC, 0x02EC, prALetter},                // Lm       MODIFIER LETTER VOICING
-	{0x02ED, 0x02ED, prALetter},                // Sk       MODIFIER LETTER UNASPIRATED
-	{0x02EE, 0x02EE, prALetter},                // Lm       MODIFIER LETTER DOUBLE APOSTROPHE
-	{0x02EF, 0x02FF, prALetter},                // Sk  [17] MODIFIER LETTER LOW DOWN ARROWHEAD..MODIFIER LETTER LOW LEFT ARROW
-	{0x0300, 0x036F, prExtend},                 // Mn [112] COMBINING GRAVE ACCENT..COMBINING LATIN SMALL LETTER X
-	{0x0370, 0x0373, prALetter},                // L&   [4] GREEK CAPITAL LETTER HETA..GREEK SMALL LETTER ARCHAIC SAMPI
-	{0x0374, 0x0374, prALetter},                // Lm       GREEK NUMERAL SIGN
-	{0x0376, 0x0377, prALetter},                // L&   [2] GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA..GREEK SMALL LETTER PAMPHYLIAN DIGAMMA
-	{0x037A, 0x037A, prALetter},                // Lm       GREEK YPOGEGRAMMENI
-	{0x037B, 0x037D, prALetter},                // L&   [3] GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL
-	{0x037E, 0x037E, prMidNum},                 // Po       GREEK QUESTION MARK
-	{0x037F, 0x037F, prALetter},                // L&       GREEK CAPITAL LETTER YOT
-	{0x0386, 0x0386, prALetter},                // L&       GREEK CAPITAL LETTER ALPHA WITH TONOS
-	{0x0387, 0x0387, prMidLetter},              // Po       GREEK ANO TELEIA
-	{0x0388, 0x038A, prALetter},                // L&   [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS
-	{0x038C, 0x038C, prALetter},                // L&       GREEK CAPITAL LETTER OMICRON WITH TONOS
-	{0x038E, 0x03A1, prALetter},                // L&  [20] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK CAPITAL LETTER RHO
-	{0x03A3, 0x03F5, prALetter},                // L&  [83] GREEK CAPITAL LETTER SIGMA..GREEK LUNATE EPSILON SYMBOL
-	{0x03F7, 0x0481, prALetter},                // L& [139] GREEK CAPITAL LETTER SHO..CYRILLIC SMALL LETTER KOPPA
-	{0x0483, 0x0487, prExtend},                 // Mn   [5] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC POKRYTIE
-	{0x0488, 0x0489, prExtend},                 // Me   [2] COMBINING CYRILLIC HUNDRED THOUSANDS SIGN..COMBINING CYRILLIC MILLIONS SIGN
-	{0x048A, 0x052F, prALetter},                // L& [166] CYRILLIC CAPITAL LETTER SHORT I WITH TAIL..CYRILLIC SMALL LETTER EL WITH DESCENDER
-	{0x0531, 0x0556, prALetter},                // L&  [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH
-	{0x0559, 0x0559, prALetter},                // Lm       ARMENIAN MODIFIER LETTER LEFT HALF RING
-	{0x055A, 0x055C, prALetter},                // Po   [3] ARMENIAN APOSTROPHE..ARMENIAN EXCLAMATION MARK
-	{0x055E, 0x055E, prALetter},                // Po       ARMENIAN QUESTION MARK
-	{0x055F, 0x055F, prMidLetter},              // Po       ARMENIAN ABBREVIATION MARK
-	{0x0560, 0x0588, prALetter},                // L&  [41] ARMENIAN SMALL LETTER TURNED AYB..ARMENIAN SMALL LETTER YI WITH STROKE
-	{0x0589, 0x0589, prMidNum},                 // Po       ARMENIAN FULL STOP
-	{0x058A, 0x058A, prALetter},                // Pd       ARMENIAN HYPHEN
-	{0x0591, 0x05BD, prExtend},                 // Mn  [45] HEBREW ACCENT ETNAHTA..HEBREW POINT METEG
-	{0x05BF, 0x05BF, prExtend},                 // Mn       HEBREW POINT RAFE
-	{0x05C1, 0x05C2, prExtend},                 // Mn   [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT
-	{0x05C4, 0x05C5, prExtend},                 // Mn   [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT
-	{0x05C7, 0x05C7, prExtend},                 // Mn       HEBREW POINT QAMATS QATAN
-	{0x05D0, 0x05EA, prHebrewLetter},           // Lo  [27] HEBREW LETTER ALEF..HEBREW LETTER TAV
-	{0x05EF, 0x05F2, prHebrewLetter},           // Lo   [4] HEBREW YOD TRIANGLE..HEBREW LIGATURE YIDDISH DOUBLE YOD
-	{0x05F3, 0x05F3, prALetter},                // Po       HEBREW PUNCTUATION GERESH
-	{0x05F4, 0x05F4, prMidLetter},              // Po       HEBREW PUNCTUATION GERSHAYIM
-	{0x0600, 0x0605, prFormat},                 // Cf   [6] ARABIC NUMBER SIGN..ARABIC NUMBER MARK ABOVE
-	{0x060C, 0x060D, prMidNum},                 // Po   [2] ARABIC COMMA..ARABIC DATE SEPARATOR
-	{0x0610, 0x061A, prExtend},                 // Mn  [11] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL KASRA
-	{0x061C, 0x061C, prFormat},                 // Cf       ARABIC LETTER MARK
-	{0x0620, 0x063F, prALetter},                // Lo  [32] ARABIC LETTER KASHMIRI YEH..ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE
-	{0x0640, 0x0640, prALetter},                // Lm       ARABIC TATWEEL
-	{0x0641, 0x064A, prALetter},                // Lo  [10] ARABIC LETTER FEH..ARABIC LETTER YEH
-	{0x064B, 0x065F, prExtend},                 // Mn  [21] ARABIC FATHATAN..ARABIC WAVY HAMZA BELOW
-	{0x0660, 0x0669, prNumeric},                // Nd  [10] ARABIC-INDIC DIGIT ZERO..ARABIC-INDIC DIGIT NINE
-	{0x066B, 0x066B, prNumeric},                // Po       ARABIC DECIMAL SEPARATOR
-	{0x066C, 0x066C, prMidNum},                 // Po       ARABIC THOUSANDS SEPARATOR
-	{0x066E, 0x066F, prALetter},                // Lo   [2] ARABIC LETTER DOTLESS BEH..ARABIC LETTER DOTLESS QAF
-	{0x0670, 0x0670, prExtend},                 // Mn       ARABIC LETTER SUPERSCRIPT ALEF
-	{0x0671, 0x06D3, prALetter},                // Lo  [99] ARABIC LETTER ALEF WASLA..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE
-	{0x06D5, 0x06D5, prALetter},                // Lo       ARABIC LETTER AE
-	{0x06D6, 0x06DC, prExtend},                 // Mn   [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN
-	{0x06DD, 0x06DD, prFormat},                 // Cf       ARABIC END OF AYAH
-	{0x06DF, 0x06E4, prExtend},                 // Mn   [6] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH MADDA
-	{0x06E5, 0x06E6, prALetter},                // Lm   [2] ARABIC SMALL WAW..ARABIC SMALL YEH
-	{0x06E7, 0x06E8, prExtend},                 // Mn   [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON
-	{0x06EA, 0x06ED, prExtend},                 // Mn   [4] ARABIC EMPTY CENTRE LOW STOP..ARABIC SMALL LOW MEEM
-	{0x06EE, 0x06EF, prALetter},                // Lo   [2] ARABIC LETTER DAL WITH INVERTED V..ARABIC LETTER REH WITH INVERTED V
-	{0x06F0, 0x06F9, prNumeric},                // Nd  [10] EXTENDED ARABIC-INDIC DIGIT ZERO..EXTENDED ARABIC-INDIC DIGIT NINE
-	{0x06FA, 0x06FC, prALetter},                // Lo   [3] ARABIC LETTER SHEEN WITH DOT BELOW..ARABIC LETTER GHAIN WITH DOT BELOW
-	{0x06FF, 0x06FF, prALetter},                // Lo       ARABIC LETTER HEH WITH INVERTED V
-	{0x070F, 0x070F, prFormat},                 // Cf       SYRIAC ABBREVIATION MARK
-	{0x0710, 0x0710, prALetter},                // Lo       SYRIAC LETTER ALAPH
-	{0x0711, 0x0711, prExtend},                 // Mn       SYRIAC LETTER SUPERSCRIPT ALAPH
-	{0x0712, 0x072F, prALetter},                // Lo  [30] SYRIAC LETTER BETH..SYRIAC LETTER PERSIAN DHALATH
-	{0x0730, 0x074A, prExtend},                 // Mn  [27] SYRIAC PTHAHA ABOVE..SYRIAC BARREKH
-	{0x074D, 0x07A5, prALetter},                // Lo  [89] SYRIAC LETTER SOGDIAN ZHAIN..THAANA LETTER WAAVU
-	{0x07A6, 0x07B0, prExtend},                 // Mn  [11] THAANA ABAFILI..THAANA SUKUN
-	{0x07B1, 0x07B1, prALetter},                // Lo       THAANA LETTER NAA
-	{0x07C0, 0x07C9, prNumeric},                // Nd  [10] NKO DIGIT ZERO..NKO DIGIT NINE
-	{0x07CA, 0x07EA, prALetter},                // Lo  [33] NKO LETTER A..NKO LETTER JONA RA
-	{0x07EB, 0x07F3, prExtend},                 // Mn   [9] NKO COMBINING SHORT HIGH TONE..NKO COMBINING DOUBLE DOT ABOVE
-	{0x07F4, 0x07F5, prALetter},                // Lm   [2] NKO HIGH TONE APOSTROPHE..NKO LOW TONE APOSTROPHE
-	{0x07F8, 0x07F8, prMidNum},                 // Po       NKO COMMA
-	{0x07FA, 0x07FA, prALetter},                // Lm       NKO LAJANYALAN
-	{0x07FD, 0x07FD, prExtend},                 // Mn       NKO DANTAYALAN
-	{0x0800, 0x0815, prALetter},                // Lo  [22] SAMARITAN LETTER ALAF..SAMARITAN LETTER TAAF
-	{0x0816, 0x0819, prExtend},                 // Mn   [4] SAMARITAN MARK IN..SAMARITAN MARK DAGESH
-	{0x081A, 0x081A, prALetter},                // Lm       SAMARITAN MODIFIER LETTER EPENTHETIC YUT
-	{0x081B, 0x0823, prExtend},                 // Mn   [9] SAMARITAN MARK EPENTHETIC YUT..SAMARITAN VOWEL SIGN A
-	{0x0824, 0x0824, prALetter},                // Lm       SAMARITAN MODIFIER LETTER SHORT A
-	{0x0825, 0x0827, prExtend},                 // Mn   [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U
-	{0x0828, 0x0828, prALetter},                // Lm       SAMARITAN MODIFIER LETTER I
-	{0x0829, 0x082D, prExtend},                 // Mn   [5] SAMARITAN VOWEL SIGN LONG I..SAMARITAN MARK NEQUDAA
-	{0x0840, 0x0858, prALetter},                // Lo  [25] MANDAIC LETTER HALQA..MANDAIC LETTER AIN
-	{0x0859, 0x085B, prExtend},                 // Mn   [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK
-	{0x0860, 0x086A, prALetter},                // Lo  [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA
-	{0x0870, 0x0887, prALetter},                // Lo  [24] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC BASELINE ROUND DOT
-	{0x0889, 0x088E, prALetter},                // Lo   [6] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC VERTICAL TAIL
-	{0x0890, 0x0891, prFormat},                 // Cf   [2] ARABIC POUND MARK ABOVE..ARABIC PIASTRE MARK ABOVE
-	{0x0898, 0x089F, prExtend},                 // Mn   [8] ARABIC SMALL HIGH WORD AL-JUZ..ARABIC HALF MADDA OVER MADDA
-	{0x08A0, 0x08C8, prALetter},                // Lo  [41] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER GRAF
-	{0x08C9, 0x08C9, prALetter},                // Lm       ARABIC SMALL FARSI YEH
-	{0x08CA, 0x08E1, prExtend},                 // Mn  [24] ARABIC SMALL HIGH FARSI YEH..ARABIC SMALL HIGH SIGN SAFHA
-	{0x08E2, 0x08E2, prFormat},                 // Cf       ARABIC DISPUTED END OF AYAH
-	{0x08E3, 0x0902, prExtend},                 // Mn  [32] ARABIC TURNED DAMMA BELOW..DEVANAGARI SIGN ANUSVARA
-	{0x0903, 0x0903, prExtend},                 // Mc       DEVANAGARI SIGN VISARGA
-	{0x0904, 0x0939, prALetter},                // Lo  [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA
-	{0x093A, 0x093A, prExtend},                 // Mn       DEVANAGARI VOWEL SIGN OE
-	{0x093B, 0x093B, prExtend},                 // Mc       DEVANAGARI VOWEL SIGN OOE
-	{0x093C, 0x093C, prExtend},                 // Mn       DEVANAGARI SIGN NUKTA
-	{0x093D, 0x093D, prALetter},                // Lo       DEVANAGARI SIGN AVAGRAHA
-	{0x093E, 0x0940, prExtend},                 // Mc   [3] DEVANAGARI VOWEL SIGN AA..DEVANAGARI VOWEL SIGN II
-	{0x0941, 0x0948, prExtend},                 // Mn   [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI
-	{0x0949, 0x094C, prExtend},                 // Mc   [4] DEVANAGARI VOWEL SIGN CANDRA O..DEVANAGARI VOWEL SIGN AU
-	{0x094D, 0x094D, prExtend},                 // Mn       DEVANAGARI SIGN VIRAMA
-	{0x094E, 0x094F, prExtend},                 // Mc   [2] DEVANAGARI VOWEL SIGN PRISHTHAMATRA E..DEVANAGARI VOWEL SIGN AW
-	{0x0950, 0x0950, prALetter},                // Lo       DEVANAGARI OM
-	{0x0951, 0x0957, prExtend},                 // Mn   [7] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI VOWEL SIGN UUE
-	{0x0958, 0x0961, prALetter},                // Lo  [10] DEVANAGARI LETTER QA..DEVANAGARI LETTER VOCALIC LL
-	{0x0962, 0x0963, prExtend},                 // Mn   [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL
-	{0x0966, 0x096F, prNumeric},                // Nd  [10] DEVANAGARI DIGIT ZERO..DEVANAGARI DIGIT NINE
-	{0x0971, 0x0971, prALetter},                // Lm       DEVANAGARI SIGN HIGH SPACING DOT
-	{0x0972, 0x0980, prALetter},                // Lo  [15] DEVANAGARI LETTER CANDRA A..BENGALI ANJI
-	{0x0981, 0x0981, prExtend},                 // Mn       BENGALI SIGN CANDRABINDU
-	{0x0982, 0x0983, prExtend},                 // Mc   [2] BENGALI SIGN ANUSVARA..BENGALI SIGN VISARGA
-	{0x0985, 0x098C, prALetter},                // Lo   [8] BENGALI LETTER A..BENGALI LETTER VOCALIC L
-	{0x098F, 0x0990, prALetter},                // Lo   [2] BENGALI LETTER E..BENGALI LETTER AI
-	{0x0993, 0x09A8, prALetter},                // Lo  [22] BENGALI LETTER O..BENGALI LETTER NA
-	{0x09AA, 0x09B0, prALetter},                // Lo   [7] BENGALI LETTER PA..BENGALI LETTER RA
-	{0x09B2, 0x09B2, prALetter},                // Lo       BENGALI LETTER LA
-	{0x09B6, 0x09B9, prALetter},                // Lo   [4] BENGALI LETTER SHA..BENGALI LETTER HA
-	{0x09BC, 0x09BC, prExtend},                 // Mn       BENGALI SIGN NUKTA
-	{0x09BD, 0x09BD, prALetter},                // Lo       BENGALI SIGN AVAGRAHA
-	{0x09BE, 0x09C0, prExtend},                 // Mc   [3] BENGALI VOWEL SIGN AA..BENGALI VOWEL SIGN II
-	{0x09C1, 0x09C4, prExtend},                 // Mn   [4] BENGALI VOWEL SIGN U..BENGALI VOWEL SIGN VOCALIC RR
-	{0x09C7, 0x09C8, prExtend},                 // Mc   [2] BENGALI VOWEL SIGN E..BENGALI VOWEL SIGN AI
-	{0x09CB, 0x09CC, prExtend},                 // Mc   [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU
-	{0x09CD, 0x09CD, prExtend},                 // Mn       BENGALI SIGN VIRAMA
-	{0x09CE, 0x09CE, prALetter},                // Lo       BENGALI LETTER KHANDA TA
-	{0x09D7, 0x09D7, prExtend},                 // Mc       BENGALI AU LENGTH MARK
-	{0x09DC, 0x09DD, prALetter},                // Lo   [2] BENGALI LETTER RRA..BENGALI LETTER RHA
-	{0x09DF, 0x09E1, prALetter},                // Lo   [3] BENGALI LETTER YYA..BENGALI LETTER VOCALIC LL
-	{0x09E2, 0x09E3, prExtend},                 // Mn   [2] BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL
-	{0x09E6, 0x09EF, prNumeric},                // Nd  [10] BENGALI DIGIT ZERO..BENGALI DIGIT NINE
-	{0x09F0, 0x09F1, prALetter},                // Lo   [2] BENGALI LETTER RA WITH MIDDLE DIAGONAL..BENGALI LETTER RA WITH LOWER DIAGONAL
-	{0x09FC, 0x09FC, prALetter},                // Lo       BENGALI LETTER VEDIC ANUSVARA
-	{0x09FE, 0x09FE, prExtend},                 // Mn       BENGALI SANDHI MARK
-	{0x0A01, 0x0A02, prExtend},                 // Mn   [2] GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN BINDI
-	{0x0A03, 0x0A03, prExtend},                 // Mc       GURMUKHI SIGN VISARGA
-	{0x0A05, 0x0A0A, prALetter},                // Lo   [6] GURMUKHI LETTER A..GURMUKHI LETTER UU
-	{0x0A0F, 0x0A10, prALetter},                // Lo   [2] GURMUKHI LETTER EE..GURMUKHI LETTER AI
-	{0x0A13, 0x0A28, prALetter},                // Lo  [22] GURMUKHI LETTER OO..GURMUKHI LETTER NA
-	{0x0A2A, 0x0A30, prALetter},                // Lo   [7] GURMUKHI LETTER PA..GURMUKHI LETTER RA
-	{0x0A32, 0x0A33, prALetter},                // Lo   [2] GURMUKHI LETTER LA..GURMUKHI LETTER LLA
-	{0x0A35, 0x0A36, prALetter},                // Lo   [2] GURMUKHI LETTER VA..GURMUKHI LETTER SHA
-	{0x0A38, 0x0A39, prALetter},                // Lo   [2] GURMUKHI LETTER SA..GURMUKHI LETTER HA
-	{0x0A3C, 0x0A3C, prExtend},                 // Mn       GURMUKHI SIGN NUKTA
-	{0x0A3E, 0x0A40, prExtend},                 // Mc   [3] GURMUKHI VOWEL SIGN AA..GURMUKHI VOWEL SIGN II
-	{0x0A41, 0x0A42, prExtend},                 // Mn   [2] GURMUKHI VOWEL SIGN U..GURMUKHI VOWEL SIGN UU
-	{0x0A47, 0x0A48, prExtend},                 // Mn   [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI
-	{0x0A4B, 0x0A4D, prExtend},                 // Mn   [3] GURMUKHI VOWEL SIGN OO..GURMUKHI SIGN VIRAMA
-	{0x0A51, 0x0A51, prExtend},                 // Mn       GURMUKHI SIGN UDAAT
-	{0x0A59, 0x0A5C, prALetter},                // Lo   [4] GURMUKHI LETTER KHHA..GURMUKHI LETTER RRA
-	{0x0A5E, 0x0A5E, prALetter},                // Lo       GURMUKHI LETTER FA
-	{0x0A66, 0x0A6F, prNumeric},                // Nd  [10] GURMUKHI DIGIT ZERO..GURMUKHI DIGIT NINE
-	{0x0A70, 0x0A71, prExtend},                 // Mn   [2] GURMUKHI TIPPI..GURMUKHI ADDAK
-	{0x0A72, 0x0A74, prALetter},                // Lo   [3] GURMUKHI IRI..GURMUKHI EK ONKAR
-	{0x0A75, 0x0A75, prExtend},                 // Mn       GURMUKHI SIGN YAKASH
-	{0x0A81, 0x0A82, prExtend},                 // Mn   [2] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN ANUSVARA
-	{0x0A83, 0x0A83, prExtend},                 // Mc       GUJARATI SIGN VISARGA
-	{0x0A85, 0x0A8D, prALetter},                // Lo   [9] GUJARATI LETTER A..GUJARATI VOWEL CANDRA E
-	{0x0A8F, 0x0A91, prALetter},                // Lo   [3] GUJARATI LETTER E..GUJARATI VOWEL CANDRA O
-	{0x0A93, 0x0AA8, prALetter},                // Lo  [22] GUJARATI LETTER O..GUJARATI LETTER NA
-	{0x0AAA, 0x0AB0, prALetter},                // Lo   [7] GUJARATI LETTER PA..GUJARATI LETTER RA
-	{0x0AB2, 0x0AB3, prALetter},                // Lo   [2] GUJARATI LETTER LA..GUJARATI LETTER LLA
-	{0x0AB5, 0x0AB9, prALetter},                // Lo   [5] GUJARATI LETTER VA..GUJARATI LETTER HA
-	{0x0ABC, 0x0ABC, prExtend},                 // Mn       GUJARATI SIGN NUKTA
-	{0x0ABD, 0x0ABD, prALetter},                // Lo       GUJARATI SIGN AVAGRAHA
-	{0x0ABE, 0x0AC0, prExtend},                 // Mc   [3] GUJARATI VOWEL SIGN AA..GUJARATI VOWEL SIGN II
-	{0x0AC1, 0x0AC5, prExtend},                 // Mn   [5] GUJARATI VOWEL SIGN U..GUJARATI VOWEL SIGN CANDRA E
-	{0x0AC7, 0x0AC8, prExtend},                 // Mn   [2] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN AI
-	{0x0AC9, 0x0AC9, prExtend},                 // Mc       GUJARATI VOWEL SIGN CANDRA O
-	{0x0ACB, 0x0ACC, prExtend},                 // Mc   [2] GUJARATI VOWEL SIGN O..GUJARATI VOWEL SIGN AU
-	{0x0ACD, 0x0ACD, prExtend},                 // Mn       GUJARATI SIGN VIRAMA
-	{0x0AD0, 0x0AD0, prALetter},                // Lo       GUJARATI OM
-	{0x0AE0, 0x0AE1, prALetter},                // Lo   [2] GUJARATI LETTER VOCALIC RR..GUJARATI LETTER VOCALIC LL
-	{0x0AE2, 0x0AE3, prExtend},                 // Mn   [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL
-	{0x0AE6, 0x0AEF, prNumeric},                // Nd  [10] GUJARATI DIGIT ZERO..GUJARATI DIGIT NINE
-	{0x0AF9, 0x0AF9, prALetter},                // Lo       GUJARATI LETTER ZHA
-	{0x0AFA, 0x0AFF, prExtend},                 // Mn   [6] GUJARATI SIGN SUKUN..GUJARATI SIGN TWO-CIRCLE NUKTA ABOVE
-	{0x0B01, 0x0B01, prExtend},                 // Mn       ORIYA SIGN CANDRABINDU
-	{0x0B02, 0x0B03, prExtend},                 // Mc   [2] ORIYA SIGN ANUSVARA..ORIYA SIGN VISARGA
-	{0x0B05, 0x0B0C, prALetter},                // Lo   [8] ORIYA LETTER A..ORIYA LETTER VOCALIC L
-	{0x0B0F, 0x0B10, prALetter},                // Lo   [2] ORIYA LETTER E..ORIYA LETTER AI
-	{0x0B13, 0x0B28, prALetter},                // Lo  [22] ORIYA LETTER O..ORIYA LETTER NA
-	{0x0B2A, 0x0B30, prALetter},                // Lo   [7] ORIYA LETTER PA..ORIYA LETTER RA
-	{0x0B32, 0x0B33, prALetter},                // Lo   [2] ORIYA LETTER LA..ORIYA LETTER LLA
-	{0x0B35, 0x0B39, prALetter},                // Lo   [5] ORIYA LETTER VA..ORIYA LETTER HA
-	{0x0B3C, 0x0B3C, prExtend},                 // Mn       ORIYA SIGN NUKTA
-	{0x0B3D, 0x0B3D, prALetter},                // Lo       ORIYA SIGN AVAGRAHA
-	{0x0B3E, 0x0B3E, prExtend},                 // Mc       ORIYA VOWEL SIGN AA
-	{0x0B3F, 0x0B3F, prExtend},                 // Mn       ORIYA VOWEL SIGN I
-	{0x0B40, 0x0B40, prExtend},                 // Mc       ORIYA VOWEL SIGN II
-	{0x0B41, 0x0B44, prExtend},                 // Mn   [4] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC RR
-	{0x0B47, 0x0B48, prExtend},                 // Mc   [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI
-	{0x0B4B, 0x0B4C, prExtend},                 // Mc   [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU
-	{0x0B4D, 0x0B4D, prExtend},                 // Mn       ORIYA SIGN VIRAMA
-	{0x0B55, 0x0B56, prExtend},                 // Mn   [2] ORIYA SIGN OVERLINE..ORIYA AI LENGTH MARK
-	{0x0B57, 0x0B57, prExtend},                 // Mc       ORIYA AU LENGTH MARK
-	{0x0B5C, 0x0B5D, prALetter},                // Lo   [2] ORIYA LETTER RRA..ORIYA LETTER RHA
-	{0x0B5F, 0x0B61, prALetter},                // Lo   [3] ORIYA LETTER YYA..ORIYA LETTER VOCALIC LL
-	{0x0B62, 0x0B63, prExtend},                 // Mn   [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL
-	{0x0B66, 0x0B6F, prNumeric},                // Nd  [10] ORIYA DIGIT ZERO..ORIYA DIGIT NINE
-	{0x0B71, 0x0B71, prALetter},                // Lo       ORIYA LETTER WA
-	{0x0B82, 0x0B82, prExtend},                 // Mn       TAMIL SIGN ANUSVARA
-	{0x0B83, 0x0B83, prALetter},                // Lo       TAMIL SIGN VISARGA
-	{0x0B85, 0x0B8A, prALetter},                // Lo   [6] TAMIL LETTER A..TAMIL LETTER UU
-	{0x0B8E, 0x0B90, prALetter},                // Lo   [3] TAMIL LETTER E..TAMIL LETTER AI
-	{0x0B92, 0x0B95, prALetter},                // Lo   [4] TAMIL LETTER O..TAMIL LETTER KA
-	{0x0B99, 0x0B9A, prALetter},                // Lo   [2] TAMIL LETTER NGA..TAMIL LETTER CA
-	{0x0B9C, 0x0B9C, prALetter},                // Lo       TAMIL LETTER JA
-	{0x0B9E, 0x0B9F, prALetter},                // Lo   [2] TAMIL LETTER NYA..TAMIL LETTER TTA
-	{0x0BA3, 0x0BA4, prALetter},                // Lo   [2] TAMIL LETTER NNA..TAMIL LETTER TA
-	{0x0BA8, 0x0BAA, prALetter},                // Lo   [3] TAMIL LETTER NA..TAMIL LETTER PA
-	{0x0BAE, 0x0BB9, prALetter},                // Lo  [12] TAMIL LETTER MA..TAMIL LETTER HA
-	{0x0BBE, 0x0BBF, prExtend},                 // Mc   [2] TAMIL VOWEL SIGN AA..TAMIL VOWEL SIGN I
-	{0x0BC0, 0x0BC0, prExtend},                 // Mn       TAMIL VOWEL SIGN II
-	{0x0BC1, 0x0BC2, prExtend},                 // Mc   [2] TAMIL VOWEL SIGN U..TAMIL VOWEL SIGN UU
-	{0x0BC6, 0x0BC8, prExtend},                 // Mc   [3] TAMIL VOWEL SIGN E..TAMIL VOWEL SIGN AI
-	{0x0BCA, 0x0BCC, prExtend},                 // Mc   [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU
-	{0x0BCD, 0x0BCD, prExtend},                 // Mn       TAMIL SIGN VIRAMA
-	{0x0BD0, 0x0BD0, prALetter},                // Lo       TAMIL OM
-	{0x0BD7, 0x0BD7, prExtend},                 // Mc       TAMIL AU LENGTH MARK
-	{0x0BE6, 0x0BEF, prNumeric},                // Nd  [10] TAMIL DIGIT ZERO..TAMIL DIGIT NINE
-	{0x0C00, 0x0C00, prExtend},                 // Mn       TELUGU SIGN COMBINING CANDRABINDU ABOVE
-	{0x0C01, 0x0C03, prExtend},                 // Mc   [3] TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA
-	{0x0C04, 0x0C04, prExtend},                 // Mn       TELUGU SIGN COMBINING ANUSVARA ABOVE
-	{0x0C05, 0x0C0C, prALetter},                // Lo   [8] TELUGU LETTER A..TELUGU LETTER VOCALIC L
-	{0x0C0E, 0x0C10, prALetter},                // Lo   [3] TELUGU LETTER E..TELUGU LETTER AI
-	{0x0C12, 0x0C28, prALetter},                // Lo  [23] TELUGU LETTER O..TELUGU LETTER NA
-	{0x0C2A, 0x0C39, prALetter},                // Lo  [16] TELUGU LETTER PA..TELUGU LETTER HA
-	{0x0C3C, 0x0C3C, prExtend},                 // Mn       TELUGU SIGN NUKTA
-	{0x0C3D, 0x0C3D, prALetter},                // Lo       TELUGU SIGN AVAGRAHA
-	{0x0C3E, 0x0C40, prExtend},                 // Mn   [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II
-	{0x0C41, 0x0C44, prExtend},                 // Mc   [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR
-	{0x0C46, 0x0C48, prExtend},                 // Mn   [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI
-	{0x0C4A, 0x0C4D, prExtend},                 // Mn   [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA
-	{0x0C55, 0x0C56, prExtend},                 // Mn   [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK
-	{0x0C58, 0x0C5A, prALetter},                // Lo   [3] TELUGU LETTER TSA..TELUGU LETTER RRRA
-	{0x0C5D, 0x0C5D, prALetter},                // Lo       TELUGU LETTER NAKAARA POLLU
-	{0x0C60, 0x0C61, prALetter},                // Lo   [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL
-	{0x0C62, 0x0C63, prExtend},                 // Mn   [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL
-	{0x0C66, 0x0C6F, prNumeric},                // Nd  [10] TELUGU DIGIT ZERO..TELUGU DIGIT NINE
-	{0x0C80, 0x0C80, prALetter},                // Lo       KANNADA SIGN SPACING CANDRABINDU
-	{0x0C81, 0x0C81, prExtend},                 // Mn       KANNADA SIGN CANDRABINDU
-	{0x0C82, 0x0C83, prExtend},                 // Mc   [2] KANNADA SIGN ANUSVARA..KANNADA SIGN VISARGA
-	{0x0C85, 0x0C8C, prALetter},                // Lo   [8] KANNADA LETTER A..KANNADA LETTER VOCALIC L
-	{0x0C8E, 0x0C90, prALetter},                // Lo   [3] KANNADA LETTER E..KANNADA LETTER AI
-	{0x0C92, 0x0CA8, prALetter},                // Lo  [23] KANNADA LETTER O..KANNADA LETTER NA
-	{0x0CAA, 0x0CB3, prALetter},                // Lo  [10] KANNADA LETTER PA..KANNADA LETTER LLA
-	{0x0CB5, 0x0CB9, prALetter},                // Lo   [5] KANNADA LETTER VA..KANNADA LETTER HA
-	{0x0CBC, 0x0CBC, prExtend},                 // Mn       KANNADA SIGN NUKTA
-	{0x0CBD, 0x0CBD, prALetter},                // Lo       KANNADA SIGN AVAGRAHA
-	{0x0CBE, 0x0CBE, prExtend},                 // Mc       KANNADA VOWEL SIGN AA
-	{0x0CBF, 0x0CBF, prExtend},                 // Mn       KANNADA VOWEL SIGN I
-	{0x0CC0, 0x0CC4, prExtend},                 // Mc   [5] KANNADA VOWEL SIGN II..KANNADA VOWEL SIGN VOCALIC RR
-	{0x0CC6, 0x0CC6, prExtend},                 // Mn       KANNADA VOWEL SIGN E
-	{0x0CC7, 0x0CC8, prExtend},                 // Mc   [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI
-	{0x0CCA, 0x0CCB, prExtend},                 // Mc   [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO
-	{0x0CCC, 0x0CCD, prExtend},                 // Mn   [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA
-	{0x0CD5, 0x0CD6, prExtend},                 // Mc   [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK
-	{0x0CDD, 0x0CDE, prALetter},                // Lo   [2] KANNADA LETTER NAKAARA POLLU..KANNADA LETTER FA
-	{0x0CE0, 0x0CE1, prALetter},                // Lo   [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL
-	{0x0CE2, 0x0CE3, prExtend},                 // Mn   [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL
-	{0x0CE6, 0x0CEF, prNumeric},                // Nd  [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE
-	{0x0CF1, 0x0CF2, prALetter},                // Lo   [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA
-	{0x0CF3, 0x0CF3, prExtend},                 // Mc       KANNADA SIGN COMBINING ANUSVARA ABOVE RIGHT
-	{0x0D00, 0x0D01, prExtend},                 // Mn   [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU
-	{0x0D02, 0x0D03, prExtend},                 // Mc   [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA
-	{0x0D04, 0x0D0C, prALetter},                // Lo   [9] MALAYALAM LETTER VEDIC ANUSVARA..MALAYALAM LETTER VOCALIC L
-	{0x0D0E, 0x0D10, prALetter},                // Lo   [3] MALAYALAM LETTER E..MALAYALAM LETTER AI
-	{0x0D12, 0x0D3A, prALetter},                // Lo  [41] MALAYALAM LETTER O..MALAYALAM LETTER TTTA
-	{0x0D3B, 0x0D3C, prExtend},                 // Mn   [2] MALAYALAM SIGN VERTICAL BAR VIRAMA..MALAYALAM SIGN CIRCULAR VIRAMA
-	{0x0D3D, 0x0D3D, prALetter},                // Lo       MALAYALAM SIGN AVAGRAHA
-	{0x0D3E, 0x0D40, prExtend},                 // Mc   [3] MALAYALAM VOWEL SIGN AA..MALAYALAM VOWEL SIGN II
-	{0x0D41, 0x0D44, prExtend},                 // Mn   [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR
-	{0x0D46, 0x0D48, prExtend},                 // Mc   [3] MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI
-	{0x0D4A, 0x0D4C, prExtend},                 // Mc   [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU
-	{0x0D4D, 0x0D4D, prExtend},                 // Mn       MALAYALAM SIGN VIRAMA
-	{0x0D4E, 0x0D4E, prALetter},                // Lo       MALAYALAM LETTER DOT REPH
-	{0x0D54, 0x0D56, prALetter},                // Lo   [3] MALAYALAM LETTER CHILLU M..MALAYALAM LETTER CHILLU LLL
-	{0x0D57, 0x0D57, prExtend},                 // Mc       MALAYALAM AU LENGTH MARK
-	{0x0D5F, 0x0D61, prALetter},                // Lo   [3] MALAYALAM LETTER ARCHAIC II..MALAYALAM LETTER VOCALIC LL
-	{0x0D62, 0x0D63, prExtend},                 // Mn   [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL
-	{0x0D66, 0x0D6F, prNumeric},                // Nd  [10] MALAYALAM DIGIT ZERO..MALAYALAM DIGIT NINE
-	{0x0D7A, 0x0D7F, prALetter},                // Lo   [6] MALAYALAM LETTER CHILLU NN..MALAYALAM LETTER CHILLU K
-	{0x0D81, 0x0D81, prExtend},                 // Mn       SINHALA SIGN CANDRABINDU
-	{0x0D82, 0x0D83, prExtend},                 // Mc   [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA
-	{0x0D85, 0x0D96, prALetter},                // Lo  [18] SINHALA LETTER AYANNA..SINHALA LETTER AUYANNA
-	{0x0D9A, 0x0DB1, prALetter},                // Lo  [24] SINHALA LETTER ALPAPRAANA KAYANNA..SINHALA LETTER DANTAJA NAYANNA
-	{0x0DB3, 0x0DBB, prALetter},                // Lo   [9] SINHALA LETTER SANYAKA DAYANNA..SINHALA LETTER RAYANNA
-	{0x0DBD, 0x0DBD, prALetter},                // Lo       SINHALA LETTER DANTAJA LAYANNA
-	{0x0DC0, 0x0DC6, prALetter},                // Lo   [7] SINHALA LETTER VAYANNA..SINHALA LETTER FAYANNA
-	{0x0DCA, 0x0DCA, prExtend},                 // Mn       SINHALA SIGN AL-LAKUNA
-	{0x0DCF, 0x0DD1, prExtend},                 // Mc   [3] SINHALA VOWEL SIGN AELA-PILLA..SINHALA VOWEL SIGN DIGA AEDA-PILLA
-	{0x0DD2, 0x0DD4, prExtend},                 // Mn   [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA
-	{0x0DD6, 0x0DD6, prExtend},                 // Mn       SINHALA VOWEL SIGN DIGA PAA-PILLA
-	{0x0DD8, 0x0DDF, prExtend},                 // Mc   [8] SINHALA VOWEL SIGN GAETTA-PILLA..SINHALA VOWEL SIGN GAYANUKITTA
-	{0x0DE6, 0x0DEF, prNumeric},                // Nd  [10] SINHALA LITH DIGIT ZERO..SINHALA LITH DIGIT NINE
-	{0x0DF2, 0x0DF3, prExtend},                 // Mc   [2] SINHALA VOWEL SIGN DIGA GAETTA-PILLA..SINHALA VOWEL SIGN DIGA GAYANUKITTA
-	{0x0E31, 0x0E31, prExtend},                 // Mn       THAI CHARACTER MAI HAN-AKAT
-	{0x0E34, 0x0E3A, prExtend},                 // Mn   [7] THAI CHARACTER SARA I..THAI CHARACTER PHINTHU
-	{0x0E47, 0x0E4E, prExtend},                 // Mn   [8] THAI CHARACTER MAITAIKHU..THAI CHARACTER YAMAKKAN
-	{0x0E50, 0x0E59, prNumeric},                // Nd  [10] THAI DIGIT ZERO..THAI DIGIT NINE
-	{0x0EB1, 0x0EB1, prExtend},                 // Mn       LAO VOWEL SIGN MAI KAN
-	{0x0EB4, 0x0EBC, prExtend},                 // Mn   [9] LAO VOWEL SIGN I..LAO SEMIVOWEL SIGN LO
-	{0x0EC8, 0x0ECE, prExtend},                 // Mn   [7] LAO TONE MAI EK..LAO YAMAKKAN
-	{0x0ED0, 0x0ED9, prNumeric},                // Nd  [10] LAO DIGIT ZERO..LAO DIGIT NINE
-	{0x0F00, 0x0F00, prALetter},                // Lo       TIBETAN SYLLABLE OM
-	{0x0F18, 0x0F19, prExtend},                 // Mn   [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS
-	{0x0F20, 0x0F29, prNumeric},                // Nd  [10] TIBETAN DIGIT ZERO..TIBETAN DIGIT NINE
-	{0x0F35, 0x0F35, prExtend},                 // Mn       TIBETAN MARK NGAS BZUNG NYI ZLA
-	{0x0F37, 0x0F37, prExtend},                 // Mn       TIBETAN MARK NGAS BZUNG SGOR RTAGS
-	{0x0F39, 0x0F39, prExtend},                 // Mn       TIBETAN MARK TSA -PHRU
-	{0x0F3E, 0x0F3F, prExtend},                 // Mc   [2] TIBETAN SIGN YAR TSHES..TIBETAN SIGN MAR TSHES
-	{0x0F40, 0x0F47, prALetter},                // Lo   [8] TIBETAN LETTER KA..TIBETAN LETTER JA
-	{0x0F49, 0x0F6C, prALetter},                // Lo  [36] TIBETAN LETTER NYA..TIBETAN LETTER RRA
-	{0x0F71, 0x0F7E, prExtend},                 // Mn  [14] TIBETAN VOWEL SIGN AA..TIBETAN SIGN RJES SU NGA RO
-	{0x0F7F, 0x0F7F, prExtend},                 // Mc       TIBETAN SIGN RNAM BCAD
-	{0x0F80, 0x0F84, prExtend},                 // Mn   [5] TIBETAN VOWEL SIGN REVERSED I..TIBETAN MARK HALANTA
-	{0x0F86, 0x0F87, prExtend},                 // Mn   [2] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS
-	{0x0F88, 0x0F8C, prALetter},                // Lo   [5] TIBETAN SIGN LCE TSA CAN..TIBETAN SIGN INVERTED MCHU CAN
-	{0x0F8D, 0x0F97, prExtend},                 // Mn  [11] TIBETAN SUBJOINED SIGN LCE TSA CAN..TIBETAN SUBJOINED LETTER JA
-	{0x0F99, 0x0FBC, prExtend},                 // Mn  [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA
-	{0x0FC6, 0x0FC6, prExtend},                 // Mn       TIBETAN SYMBOL PADMA GDAN
-	{0x102B, 0x102C, prExtend},                 // Mc   [2] MYANMAR VOWEL SIGN TALL AA..MYANMAR VOWEL SIGN AA
-	{0x102D, 0x1030, prExtend},                 // Mn   [4] MYANMAR VOWEL SIGN I..MYANMAR VOWEL SIGN UU
-	{0x1031, 0x1031, prExtend},                 // Mc       MYANMAR VOWEL SIGN E
-	{0x1032, 0x1037, prExtend},                 // Mn   [6] MYANMAR VOWEL SIGN AI..MYANMAR SIGN DOT BELOW
-	{0x1038, 0x1038, prExtend},                 // Mc       MYANMAR SIGN VISARGA
-	{0x1039, 0x103A, prExtend},                 // Mn   [2] MYANMAR SIGN VIRAMA..MYANMAR SIGN ASAT
-	{0x103B, 0x103C, prExtend},                 // Mc   [2] MYANMAR CONSONANT SIGN MEDIAL YA..MYANMAR CONSONANT SIGN MEDIAL RA
-	{0x103D, 0x103E, prExtend},                 // Mn   [2] MYANMAR CONSONANT SIGN MEDIAL WA..MYANMAR CONSONANT SIGN MEDIAL HA
-	{0x1040, 0x1049, prNumeric},                // Nd  [10] MYANMAR DIGIT ZERO..MYANMAR DIGIT NINE
-	{0x1056, 0x1057, prExtend},                 // Mc   [2] MYANMAR VOWEL SIGN VOCALIC R..MYANMAR VOWEL SIGN VOCALIC RR
-	{0x1058, 0x1059, prExtend},                 // Mn   [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL
-	{0x105E, 0x1060, prExtend},                 // Mn   [3] MYANMAR CONSONANT SIGN MON MEDIAL NA..MYANMAR CONSONANT SIGN MON MEDIAL LA
-	{0x1062, 0x1064, prExtend},                 // Mc   [3] MYANMAR VOWEL SIGN SGAW KAREN EU..MYANMAR TONE MARK SGAW KAREN KE PHO
-	{0x1067, 0x106D, prExtend},                 // Mc   [7] MYANMAR VOWEL SIGN WESTERN PWO KAREN EU..MYANMAR SIGN WESTERN PWO KAREN TONE-5
-	{0x1071, 0x1074, prExtend},                 // Mn   [4] MYANMAR VOWEL SIGN GEBA KAREN I..MYANMAR VOWEL SIGN KAYAH EE
-	{0x1082, 0x1082, prExtend},                 // Mn       MYANMAR CONSONANT SIGN SHAN MEDIAL WA
-	{0x1083, 0x1084, prExtend},                 // Mc   [2] MYANMAR VOWEL SIGN SHAN AA..MYANMAR VOWEL SIGN SHAN E
-	{0x1085, 0x1086, prExtend},                 // Mn   [2] MYANMAR VOWEL SIGN SHAN E ABOVE..MYANMAR VOWEL SIGN SHAN FINAL Y
-	{0x1087, 0x108C, prExtend},                 // Mc   [6] MYANMAR SIGN SHAN TONE-2..MYANMAR SIGN SHAN COUNCIL TONE-3
-	{0x108D, 0x108D, prExtend},                 // Mn       MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE
-	{0x108F, 0x108F, prExtend},                 // Mc       MYANMAR SIGN RUMAI PALAUNG TONE-5
-	{0x1090, 0x1099, prNumeric},                // Nd  [10] MYANMAR SHAN DIGIT ZERO..MYANMAR SHAN DIGIT NINE
-	{0x109A, 0x109C, prExtend},                 // Mc   [3] MYANMAR SIGN KHAMTI TONE-1..MYANMAR VOWEL SIGN AITON A
-	{0x109D, 0x109D, prExtend},                 // Mn       MYANMAR VOWEL SIGN AITON AI
-	{0x10A0, 0x10C5, prALetter},                // L&  [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE
-	{0x10C7, 0x10C7, prALetter},                // L&       GEORGIAN CAPITAL LETTER YN
-	{0x10CD, 0x10CD, prALetter},                // L&       GEORGIAN CAPITAL LETTER AEN
-	{0x10D0, 0x10FA, prALetter},                // L&  [43] GEORGIAN LETTER AN..GEORGIAN LETTER AIN
-	{0x10FC, 0x10FC, prALetter},                // Lm       MODIFIER LETTER GEORGIAN NAR
-	{0x10FD, 0x10FF, prALetter},                // L&   [3] GEORGIAN LETTER AEN..GEORGIAN LETTER LABIAL SIGN
-	{0x1100, 0x1248, prALetter},                // Lo [329] HANGUL CHOSEONG KIYEOK..ETHIOPIC SYLLABLE QWA
-	{0x124A, 0x124D, prALetter},                // Lo   [4] ETHIOPIC SYLLABLE QWI..ETHIOPIC SYLLABLE QWE
-	{0x1250, 0x1256, prALetter},                // Lo   [7] ETHIOPIC SYLLABLE QHA..ETHIOPIC SYLLABLE QHO
-	{0x1258, 0x1258, prALetter},                // Lo       ETHIOPIC SYLLABLE QHWA
-	{0x125A, 0x125D, prALetter},                // Lo   [4] ETHIOPIC SYLLABLE QHWI..ETHIOPIC SYLLABLE QHWE
-	{0x1260, 0x1288, prALetter},                // Lo  [41] ETHIOPIC SYLLABLE BA..ETHIOPIC SYLLABLE XWA
-	{0x128A, 0x128D, prALetter},                // Lo   [4] ETHIOPIC SYLLABLE XWI..ETHIOPIC SYLLABLE XWE
-	{0x1290, 0x12B0, prALetter},                // Lo  [33] ETHIOPIC SYLLABLE NA..ETHIOPIC SYLLABLE KWA
-	{0x12B2, 0x12B5, prALetter},                // Lo   [4] ETHIOPIC SYLLABLE KWI..ETHIOPIC SYLLABLE KWE
-	{0x12B8, 0x12BE, prALetter},                // Lo   [7] ETHIOPIC SYLLABLE KXA..ETHIOPIC SYLLABLE KXO
-	{0x12C0, 0x12C0, prALetter},                // Lo       ETHIOPIC SYLLABLE KXWA
-	{0x12C2, 0x12C5, prALetter},                // Lo   [4] ETHIOPIC SYLLABLE KXWI..ETHIOPIC SYLLABLE KXWE
-	{0x12C8, 0x12D6, prALetter},                // Lo  [15] ETHIOPIC SYLLABLE WA..ETHIOPIC SYLLABLE PHARYNGEAL O
-	{0x12D8, 0x1310, prALetter},                // Lo  [57] ETHIOPIC SYLLABLE ZA..ETHIOPIC SYLLABLE GWA
-	{0x1312, 0x1315, prALetter},                // Lo   [4] ETHIOPIC SYLLABLE GWI..ETHIOPIC SYLLABLE GWE
-	{0x1318, 0x135A, prALetter},                // Lo  [67] ETHIOPIC SYLLABLE GGA..ETHIOPIC SYLLABLE FYA
-	{0x135D, 0x135F, prExtend},                 // Mn   [3] ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK..ETHIOPIC COMBINING GEMINATION MARK
-	{0x1380, 0x138F, prALetter},                // Lo  [16] ETHIOPIC SYLLABLE SEBATBEIT MWA..ETHIOPIC SYLLABLE PWE
-	{0x13A0, 0x13F5, prALetter},                // L&  [86] CHEROKEE LETTER A..CHEROKEE LETTER MV
-	{0x13F8, 0x13FD, prALetter},                // L&   [6] CHEROKEE SMALL LETTER YE..CHEROKEE SMALL LETTER MV
-	{0x1401, 0x166C, prALetter},                // Lo [620] CANADIAN SYLLABICS E..CANADIAN SYLLABICS CARRIER TTSA
-	{0x166F, 0x167F, prALetter},                // Lo  [17] CANADIAN SYLLABICS QAI..CANADIAN SYLLABICS BLACKFOOT W
-	{0x1680, 0x1680, prWSegSpace},              // Zs       OGHAM SPACE MARK
-	{0x1681, 0x169A, prALetter},                // Lo  [26] OGHAM LETTER BEITH..OGHAM LETTER PEITH
-	{0x16A0, 0x16EA, prALetter},                // Lo  [75] RUNIC LETTER FEHU FEOH FE F..RUNIC LETTER X
-	{0x16EE, 0x16F0, prALetter},                // Nl   [3] RUNIC ARLAUG SYMBOL..RUNIC BELGTHOR SYMBOL
-	{0x16F1, 0x16F8, prALetter},                // Lo   [8] RUNIC LETTER K..RUNIC LETTER FRANKS CASKET AESC
-	{0x1700, 0x1711, prALetter},                // Lo  [18] TAGALOG LETTER A..TAGALOG LETTER HA
-	{0x1712, 0x1714, prExtend},                 // Mn   [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA
-	{0x1715, 0x1715, prExtend},                 // Mc       TAGALOG SIGN PAMUDPOD
-	{0x171F, 0x1731, prALetter},                // Lo  [19] TAGALOG LETTER ARCHAIC RA..HANUNOO LETTER HA
-	{0x1732, 0x1733, prExtend},                 // Mn   [2] HANUNOO VOWEL SIGN I..HANUNOO VOWEL SIGN U
-	{0x1734, 0x1734, prExtend},                 // Mc       HANUNOO SIGN PAMUDPOD
-	{0x1740, 0x1751, prALetter},                // Lo  [18] BUHID LETTER A..BUHID LETTER HA
-	{0x1752, 0x1753, prExtend},                 // Mn   [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U
-	{0x1760, 0x176C, prALetter},                // Lo  [13] TAGBANWA LETTER A..TAGBANWA LETTER YA
-	{0x176E, 0x1770, prALetter},                // Lo   [3] TAGBANWA LETTER LA..TAGBANWA LETTER SA
-	{0x1772, 0x1773, prExtend},                 // Mn   [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U
-	{0x17B4, 0x17B5, prExtend},                 // Mn   [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA
-	{0x17B6, 0x17B6, prExtend},                 // Mc       KHMER VOWEL SIGN AA
-	{0x17B7, 0x17BD, prExtend},                 // Mn   [7] KHMER VOWEL SIGN I..KHMER VOWEL SIGN UA
-	{0x17BE, 0x17C5, prExtend},                 // Mc   [8] KHMER VOWEL SIGN OE..KHMER VOWEL SIGN AU
-	{0x17C6, 0x17C6, prExtend},                 // Mn       KHMER SIGN NIKAHIT
-	{0x17C7, 0x17C8, prExtend},                 // Mc   [2] KHMER SIGN REAHMUK..KHMER SIGN YUUKALEAPINTU
-	{0x17C9, 0x17D3, prExtend},                 // Mn  [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT
-	{0x17DD, 0x17DD, prExtend},                 // Mn       KHMER SIGN ATTHACAN
-	{0x17E0, 0x17E9, prNumeric},                // Nd  [10] KHMER DIGIT ZERO..KHMER DIGIT NINE
-	{0x180B, 0x180D, prExtend},                 // Mn   [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE
-	{0x180E, 0x180E, prFormat},                 // Cf       MONGOLIAN VOWEL SEPARATOR
-	{0x180F, 0x180F, prExtend},                 // Mn       MONGOLIAN FREE VARIATION SELECTOR FOUR
-	{0x1810, 0x1819, prNumeric},                // Nd  [10] MONGOLIAN DIGIT ZERO..MONGOLIAN DIGIT NINE
-	{0x1820, 0x1842, prALetter},                // Lo  [35] MONGOLIAN LETTER A..MONGOLIAN LETTER CHI
-	{0x1843, 0x1843, prALetter},                // Lm       MONGOLIAN LETTER TODO LONG VOWEL SIGN
-	{0x1844, 0x1878, prALetter},                // Lo  [53] MONGOLIAN LETTER TODO E..MONGOLIAN LETTER CHA WITH TWO DOTS
-	{0x1880, 0x1884, prALetter},                // Lo   [5] MONGOLIAN LETTER ALI GALI ANUSVARA ONE..MONGOLIAN LETTER ALI GALI INVERTED UBADAMA
-	{0x1885, 0x1886, prExtend},                 // Mn   [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA
-	{0x1887, 0x18A8, prALetter},                // Lo  [34] MONGOLIAN LETTER ALI GALI A..MONGOLIAN LETTER MANCHU ALI GALI BHA
-	{0x18A9, 0x18A9, prExtend},                 // Mn       MONGOLIAN LETTER ALI GALI DAGALGA
-	{0x18AA, 0x18AA, prALetter},                // Lo       MONGOLIAN LETTER MANCHU ALI GALI LHA
-	{0x18B0, 0x18F5, prALetter},                // Lo  [70] CANADIAN SYLLABICS OY..CANADIAN SYLLABICS CARRIER DENTAL S
-	{0x1900, 0x191E, prALetter},                // Lo  [31] LIMBU VOWEL-CARRIER LETTER..LIMBU LETTER TRA
-	{0x1920, 0x1922, prExtend},                 // Mn   [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U
-	{0x1923, 0x1926, prExtend},                 // Mc   [4] LIMBU VOWEL SIGN EE..LIMBU VOWEL SIGN AU
-	{0x1927, 0x1928, prExtend},                 // Mn   [2] LIMBU VOWEL SIGN E..LIMBU VOWEL SIGN O
-	{0x1929, 0x192B, prExtend},                 // Mc   [3] LIMBU SUBJOINED LETTER YA..LIMBU SUBJOINED LETTER WA
-	{0x1930, 0x1931, prExtend},                 // Mc   [2] LIMBU SMALL LETTER KA..LIMBU SMALL LETTER NGA
-	{0x1932, 0x1932, prExtend},                 // Mn       LIMBU SMALL LETTER ANUSVARA
-	{0x1933, 0x1938, prExtend},                 // Mc   [6] LIMBU SMALL LETTER TA..LIMBU SMALL LETTER LA
-	{0x1939, 0x193B, prExtend},                 // Mn   [3] LIMBU SIGN MUKPHRENG..LIMBU SIGN SA-I
-	{0x1946, 0x194F, prNumeric},                // Nd  [10] LIMBU DIGIT ZERO..LIMBU DIGIT NINE
-	{0x19D0, 0x19D9, prNumeric},                // Nd  [10] NEW TAI LUE DIGIT ZERO..NEW TAI LUE DIGIT NINE
-	{0x1A00, 0x1A16, prALetter},                // Lo  [23] BUGINESE LETTER KA..BUGINESE LETTER HA
-	{0x1A17, 0x1A18, prExtend},                 // Mn   [2] BUGINESE VOWEL SIGN I..BUGINESE VOWEL SIGN U
-	{0x1A19, 0x1A1A, prExtend},                 // Mc   [2] BUGINESE VOWEL SIGN E..BUGINESE VOWEL SIGN O
-	{0x1A1B, 0x1A1B, prExtend},                 // Mn       BUGINESE VOWEL SIGN AE
-	{0x1A55, 0x1A55, prExtend},                 // Mc       TAI THAM CONSONANT SIGN MEDIAL RA
-	{0x1A56, 0x1A56, prExtend},                 // Mn       TAI THAM CONSONANT SIGN MEDIAL LA
-	{0x1A57, 0x1A57, prExtend},                 // Mc       TAI THAM CONSONANT SIGN LA TANG LAI
-	{0x1A58, 0x1A5E, prExtend},                 // Mn   [7] TAI THAM SIGN MAI KANG LAI..TAI THAM CONSONANT SIGN SA
-	{0x1A60, 0x1A60, prExtend},                 // Mn       TAI THAM SIGN SAKOT
-	{0x1A61, 0x1A61, prExtend},                 // Mc       TAI THAM VOWEL SIGN A
-	{0x1A62, 0x1A62, prExtend},                 // Mn       TAI THAM VOWEL SIGN MAI SAT
-	{0x1A63, 0x1A64, prExtend},                 // Mc   [2] TAI THAM VOWEL SIGN AA..TAI THAM VOWEL SIGN TALL AA
-	{0x1A65, 0x1A6C, prExtend},                 // Mn   [8] TAI THAM VOWEL SIGN I..TAI THAM VOWEL SIGN OA BELOW
-	{0x1A6D, 0x1A72, prExtend},                 // Mc   [6] TAI THAM VOWEL SIGN OY..TAI THAM VOWEL SIGN THAM AI
-	{0x1A73, 0x1A7C, prExtend},                 // Mn  [10] TAI THAM VOWEL SIGN OA ABOVE..TAI THAM SIGN KHUEN-LUE KARAN
-	{0x1A7F, 0x1A7F, prExtend},                 // Mn       TAI THAM COMBINING CRYPTOGRAMMIC DOT
-	{0x1A80, 0x1A89, prNumeric},                // Nd  [10] TAI THAM HORA DIGIT ZERO..TAI THAM HORA DIGIT NINE
-	{0x1A90, 0x1A99, prNumeric},                // Nd  [10] TAI THAM THAM DIGIT ZERO..TAI THAM THAM DIGIT NINE
-	{0x1AB0, 0x1ABD, prExtend},                 // Mn  [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW
-	{0x1ABE, 0x1ABE, prExtend},                 // Me       COMBINING PARENTHESES OVERLAY
-	{0x1ABF, 0x1ACE, prExtend},                 // Mn  [16] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER INSULAR T
-	{0x1B00, 0x1B03, prExtend},                 // Mn   [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG
-	{0x1B04, 0x1B04, prExtend},                 // Mc       BALINESE SIGN BISAH
-	{0x1B05, 0x1B33, prALetter},                // Lo  [47] BALINESE LETTER AKARA..BALINESE LETTER HA
-	{0x1B34, 0x1B34, prExtend},                 // Mn       BALINESE SIGN REREKAN
-	{0x1B35, 0x1B35, prExtend},                 // Mc       BALINESE VOWEL SIGN TEDUNG
-	{0x1B36, 0x1B3A, prExtend},                 // Mn   [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA
-	{0x1B3B, 0x1B3B, prExtend},                 // Mc       BALINESE VOWEL SIGN RA REPA TEDUNG
-	{0x1B3C, 0x1B3C, prExtend},                 // Mn       BALINESE VOWEL SIGN LA LENGA
-	{0x1B3D, 0x1B41, prExtend},                 // Mc   [5] BALINESE VOWEL SIGN LA LENGA TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG
-	{0x1B42, 0x1B42, prExtend},                 // Mn       BALINESE VOWEL SIGN PEPET
-	{0x1B43, 0x1B44, prExtend},                 // Mc   [2] BALINESE VOWEL SIGN PEPET TEDUNG..BALINESE ADEG ADEG
-	{0x1B45, 0x1B4C, prALetter},                // Lo   [8] BALINESE LETTER KAF SASAK..BALINESE LETTER ARCHAIC JNYA
-	{0x1B50, 0x1B59, prNumeric},                // Nd  [10] BALINESE DIGIT ZERO..BALINESE DIGIT NINE
-	{0x1B6B, 0x1B73, prExtend},                 // Mn   [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG
-	{0x1B80, 0x1B81, prExtend},                 // Mn   [2] SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PANGLAYAR
-	{0x1B82, 0x1B82, prExtend},                 // Mc       SUNDANESE SIGN PANGWISAD
-	{0x1B83, 0x1BA0, prALetter},                // Lo  [30] SUNDANESE LETTER A..SUNDANESE LETTER HA
-	{0x1BA1, 0x1BA1, prExtend},                 // Mc       SUNDANESE CONSONANT SIGN PAMINGKAL
-	{0x1BA2, 0x1BA5, prExtend},                 // Mn   [4] SUNDANESE CONSONANT SIGN PANYAKRA..SUNDANESE VOWEL SIGN PANYUKU
-	{0x1BA6, 0x1BA7, prExtend},                 // Mc   [2] SUNDANESE VOWEL SIGN PANAELAENG..SUNDANESE VOWEL SIGN PANOLONG
-	{0x1BA8, 0x1BA9, prExtend},                 // Mn   [2] SUNDANESE VOWEL SIGN PAMEPET..SUNDANESE VOWEL SIGN PANEULEUNG
-	{0x1BAA, 0x1BAA, prExtend},                 // Mc       SUNDANESE SIGN PAMAAEH
-	{0x1BAB, 0x1BAD, prExtend},                 // Mn   [3] SUNDANESE SIGN VIRAMA..SUNDANESE CONSONANT SIGN PASANGAN WA
-	{0x1BAE, 0x1BAF, prALetter},                // Lo   [2] SUNDANESE LETTER KHA..SUNDANESE LETTER SYA
-	{0x1BB0, 0x1BB9, prNumeric},                // Nd  [10] SUNDANESE DIGIT ZERO..SUNDANESE DIGIT NINE
-	{0x1BBA, 0x1BE5, prALetter},                // Lo  [44] SUNDANESE AVAGRAHA..BATAK LETTER U
-	{0x1BE6, 0x1BE6, prExtend},                 // Mn       BATAK SIGN TOMPI
-	{0x1BE7, 0x1BE7, prExtend},                 // Mc       BATAK VOWEL SIGN E
-	{0x1BE8, 0x1BE9, prExtend},                 // Mn   [2] BATAK VOWEL SIGN PAKPAK E..BATAK VOWEL SIGN EE
-	{0x1BEA, 0x1BEC, prExtend},                 // Mc   [3] BATAK VOWEL SIGN I..BATAK VOWEL SIGN O
-	{0x1BED, 0x1BED, prExtend},                 // Mn       BATAK VOWEL SIGN KARO O
-	{0x1BEE, 0x1BEE, prExtend},                 // Mc       BATAK VOWEL SIGN U
-	{0x1BEF, 0x1BF1, prExtend},                 // Mn   [3] BATAK VOWEL SIGN U FOR SIMALUNGUN SA..BATAK CONSONANT SIGN H
-	{0x1BF2, 0x1BF3, prExtend},                 // Mc   [2] BATAK PANGOLAT..BATAK PANONGONAN
-	{0x1C00, 0x1C23, prALetter},                // Lo  [36] LEPCHA LETTER KA..LEPCHA LETTER A
-	{0x1C24, 0x1C2B, prExtend},                 // Mc   [8] LEPCHA SUBJOINED LETTER YA..LEPCHA VOWEL SIGN UU
-	{0x1C2C, 0x1C33, prExtend},                 // Mn   [8] LEPCHA VOWEL SIGN E..LEPCHA CONSONANT SIGN T
-	{0x1C34, 0x1C35, prExtend},                 // Mc   [2] LEPCHA CONSONANT SIGN NYIN-DO..LEPCHA CONSONANT SIGN KANG
-	{0x1C36, 0x1C37, prExtend},                 // Mn   [2] LEPCHA SIGN RAN..LEPCHA SIGN NUKTA
-	{0x1C40, 0x1C49, prNumeric},                // Nd  [10] LEPCHA DIGIT ZERO..LEPCHA DIGIT NINE
-	{0x1C4D, 0x1C4F, prALetter},                // Lo   [3] LEPCHA LETTER TTA..LEPCHA LETTER DDA
-	{0x1C50, 0x1C59, prNumeric},                // Nd  [10] OL CHIKI DIGIT ZERO..OL CHIKI DIGIT NINE
-	{0x1C5A, 0x1C77, prALetter},                // Lo  [30] OL CHIKI LETTER LA..OL CHIKI LETTER OH
-	{0x1C78, 0x1C7D, prALetter},                // Lm   [6] OL CHIKI MU TTUDDAG..OL CHIKI AHAD
-	{0x1C80, 0x1C88, prALetter},                // L&   [9] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER UNBLENDED UK
-	{0x1C90, 0x1CBA, prALetter},                // L&  [43] GEORGIAN MTAVRULI CAPITAL LETTER AN..GEORGIAN MTAVRULI CAPITAL LETTER AIN
-	{0x1CBD, 0x1CBF, prALetter},                // L&   [3] GEORGIAN MTAVRULI CAPITAL LETTER AEN..GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN
-	{0x1CD0, 0x1CD2, prExtend},                 // Mn   [3] VEDIC TONE KARSHANA..VEDIC TONE PRENKHA
-	{0x1CD4, 0x1CE0, prExtend},                 // Mn  [13] VEDIC SIGN YAJURVEDIC MIDLINE SVARITA..VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA
-	{0x1CE1, 0x1CE1, prExtend},                 // Mc       VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA
-	{0x1CE2, 0x1CE8, prExtend},                 // Mn   [7] VEDIC SIGN VISARGA SVARITA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL
-	{0x1CE9, 0x1CEC, prALetter},                // Lo   [4] VEDIC SIGN ANUSVARA ANTARGOMUKHA..VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL
-	{0x1CED, 0x1CED, prExtend},                 // Mn       VEDIC SIGN TIRYAK
-	{0x1CEE, 0x1CF3, prALetter},                // Lo   [6] VEDIC SIGN HEXIFORM LONG ANUSVARA..VEDIC SIGN ROTATED ARDHAVISARGA
-	{0x1CF4, 0x1CF4, prExtend},                 // Mn       VEDIC TONE CANDRA ABOVE
-	{0x1CF5, 0x1CF6, prALetter},                // Lo   [2] VEDIC SIGN JIHVAMULIYA..VEDIC SIGN UPADHMANIYA
-	{0x1CF7, 0x1CF7, prExtend},                 // Mc       VEDIC SIGN ATIKRAMA
-	{0x1CF8, 0x1CF9, prExtend},                 // Mn   [2] VEDIC TONE RING ABOVE..VEDIC TONE DOUBLE RING ABOVE
-	{0x1CFA, 0x1CFA, prALetter},                // Lo       VEDIC SIGN DOUBLE ANUSVARA ANTARGOMUKHA
-	{0x1D00, 0x1D2B, prALetter},                // L&  [44] LATIN LETTER SMALL CAPITAL A..CYRILLIC LETTER SMALL CAPITAL EL
-	{0x1D2C, 0x1D6A, prALetter},                // Lm  [63] MODIFIER LETTER CAPITAL A..GREEK SUBSCRIPT SMALL LETTER CHI
-	{0x1D6B, 0x1D77, prALetter},                // L&  [13] LATIN SMALL LETTER UE..LATIN SMALL LETTER TURNED G
-	{0x1D78, 0x1D78, prALetter},                // Lm       MODIFIER LETTER CYRILLIC EN
-	{0x1D79, 0x1D9A, prALetter},                // L&  [34] LATIN SMALL LETTER INSULAR G..LATIN SMALL LETTER EZH WITH RETROFLEX HOOK
-	{0x1D9B, 0x1DBF, prALetter},                // Lm  [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA
-	{0x1DC0, 0x1DFF, prExtend},                 // Mn  [64] COMBINING DOTTED GRAVE ACCENT..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW
-	{0x1E00, 0x1F15, prALetter},                // L& [278] LATIN CAPITAL LETTER A WITH RING BELOW..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
-	{0x1F18, 0x1F1D, prALetter},                // L&   [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
-	{0x1F20, 0x1F45, prALetter},                // L&  [38] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
-	{0x1F48, 0x1F4D, prALetter},                // L&   [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
-	{0x1F50, 0x1F57, prALetter},                // L&   [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
-	{0x1F59, 0x1F59, prALetter},                // L&       GREEK CAPITAL LETTER UPSILON WITH DASIA
-	{0x1F5B, 0x1F5B, prALetter},                // L&       GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
-	{0x1F5D, 0x1F5D, prALetter},                // L&       GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
-	{0x1F5F, 0x1F7D, prALetter},                // L&  [31] GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI..GREEK SMALL LETTER OMEGA WITH OXIA
-	{0x1F80, 0x1FB4, prALetter},                // L&  [53] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
-	{0x1FB6, 0x1FBC, prALetter},                // L&   [7] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
-	{0x1FBE, 0x1FBE, prALetter},                // L&       GREEK PROSGEGRAMMENI
-	{0x1FC2, 0x1FC4, prALetter},                // L&   [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
-	{0x1FC6, 0x1FCC, prALetter},                // L&   [7] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
-	{0x1FD0, 0x1FD3, prALetter},                // L&   [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
-	{0x1FD6, 0x1FDB, prALetter},                // L&   [6] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK CAPITAL LETTER IOTA WITH OXIA
-	{0x1FE0, 0x1FEC, prALetter},                // L&  [13] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA
-	{0x1FF2, 0x1FF4, prALetter},                // L&   [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
-	{0x1FF6, 0x1FFC, prALetter},                // L&   [7] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
-	{0x2000, 0x2006, prWSegSpace},              // Zs   [7] EN QUAD..SIX-PER-EM SPACE
-	{0x2008, 0x200A, prWSegSpace},              // Zs   [3] PUNCTUATION SPACE..HAIR SPACE
-	{0x200C, 0x200C, prExtend},                 // Cf       ZERO WIDTH NON-JOINER
-	{0x200D, 0x200D, prZWJ},                    // Cf       ZERO WIDTH JOINER
-	{0x200E, 0x200F, prFormat},                 // Cf   [2] LEFT-TO-RIGHT MARK..RIGHT-TO-LEFT MARK
-	{0x2018, 0x2018, prMidNumLet},              // Pi       LEFT SINGLE QUOTATION MARK
-	{0x2019, 0x2019, prMidNumLet},              // Pf       RIGHT SINGLE QUOTATION MARK
-	{0x2024, 0x2024, prMidNumLet},              // Po       ONE DOT LEADER
-	{0x2027, 0x2027, prMidLetter},              // Po       HYPHENATION POINT
-	{0x2028, 0x2028, prNewline},                // Zl       LINE SEPARATOR
-	{0x2029, 0x2029, prNewline},                // Zp       PARAGRAPH SEPARATOR
-	{0x202A, 0x202E, prFormat},                 // Cf   [5] LEFT-TO-RIGHT EMBEDDING..RIGHT-TO-LEFT OVERRIDE
-	{0x202F, 0x202F, prExtendNumLet},           // Zs       NARROW NO-BREAK SPACE
-	{0x203C, 0x203C, prExtendedPictographic},   // E0.6   [1] (‼️)       double exclamation mark
-	{0x203F, 0x2040, prExtendNumLet},           // Pc   [2] UNDERTIE..CHARACTER TIE
-	{0x2044, 0x2044, prMidNum},                 // Sm       FRACTION SLASH
-	{0x2049, 0x2049, prExtendedPictographic},   // E0.6   [1] (⁉️)       exclamation question mark
-	{0x2054, 0x2054, prExtendNumLet},           // Pc       INVERTED UNDERTIE
-	{0x205F, 0x205F, prWSegSpace},              // Zs       MEDIUM MATHEMATICAL SPACE
-	{0x2060, 0x2064, prFormat},                 // Cf   [5] WORD JOINER..INVISIBLE PLUS
-	{0x2066, 0x206F, prFormat},                 // Cf  [10] LEFT-TO-RIGHT ISOLATE..NOMINAL DIGIT SHAPES
-	{0x2071, 0x2071, prALetter},                // Lm       SUPERSCRIPT LATIN SMALL LETTER I
-	{0x207F, 0x207F, prALetter},                // Lm       SUPERSCRIPT LATIN SMALL LETTER N
-	{0x2090, 0x209C, prALetter},                // Lm  [13] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER T
-	{0x20D0, 0x20DC, prExtend},                 // Mn  [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE
-	{0x20DD, 0x20E0, prExtend},                 // Me   [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH
-	{0x20E1, 0x20E1, prExtend},                 // Mn       COMBINING LEFT RIGHT ARROW ABOVE
-	{0x20E2, 0x20E4, prExtend},                 // Me   [3] COMBINING ENCLOSING SCREEN..COMBINING ENCLOSING UPWARD POINTING TRIANGLE
-	{0x20E5, 0x20F0, prExtend},                 // Mn  [12] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING ASTERISK ABOVE
-	{0x2102, 0x2102, prALetter},                // L&       DOUBLE-STRUCK CAPITAL C
-	{0x2107, 0x2107, prALetter},                // L&       EULER CONSTANT
-	{0x210A, 0x2113, prALetter},                // L&  [10] SCRIPT SMALL G..SCRIPT SMALL L
-	{0x2115, 0x2115, prALetter},                // L&       DOUBLE-STRUCK CAPITAL N
-	{0x2119, 0x211D, prALetter},                // L&   [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R
-	{0x2122, 0x2122, prExtendedPictographic},   // E0.6   [1] (™️)       trade mark
-	{0x2124, 0x2124, prALetter},                // L&       DOUBLE-STRUCK CAPITAL Z
-	{0x2126, 0x2126, prALetter},                // L&       OHM SIGN
-	{0x2128, 0x2128, prALetter},                // L&       BLACK-LETTER CAPITAL Z
-	{0x212A, 0x212D, prALetter},                // L&   [4] KELVIN SIGN..BLACK-LETTER CAPITAL C
-	{0x212F, 0x2134, prALetter},                // L&   [6] SCRIPT SMALL E..SCRIPT SMALL O
-	{0x2135, 0x2138, prALetter},                // Lo   [4] ALEF SYMBOL..DALET SYMBOL
-	{0x2139, 0x2139, prExtendedPictographic},   // E0.6   [1] (ℹ️)       information
-	{0x2139, 0x2139, prALetter},                // L&       INFORMATION SOURCE
-	{0x213C, 0x213F, prALetter},                // L&   [4] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK CAPITAL PI
-	{0x2145, 0x2149, prALetter},                // L&   [5] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL J
-	{0x214E, 0x214E, prALetter},                // L&       TURNED SMALL F
-	{0x2160, 0x2182, prALetter},                // Nl  [35] ROMAN NUMERAL ONE..ROMAN NUMERAL TEN THOUSAND
-	{0x2183, 0x2184, prALetter},                // L&   [2] ROMAN NUMERAL REVERSED ONE HUNDRED..LATIN SMALL LETTER REVERSED C
-	{0x2185, 0x2188, prALetter},                // Nl   [4] ROMAN NUMERAL SIX LATE FORM..ROMAN NUMERAL ONE HUNDRED THOUSAND
-	{0x2194, 0x2199, prExtendedPictographic},   // E0.6   [6] (↔️..↙️)    left-right arrow..down-left arrow
-	{0x21A9, 0x21AA, prExtendedPictographic},   // E0.6   [2] (↩️..↪️)    right arrow curving left..left arrow curving right
-	{0x231A, 0x231B, prExtendedPictographic},   // E0.6   [2] (⌚..⌛)    watch..hourglass done
-	{0x2328, 0x2328, prExtendedPictographic},   // E1.0   [1] (⌨️)       keyboard
-	{0x2388, 0x2388, prExtendedPictographic},   // E0.0   [1] (⎈)       HELM SYMBOL
-	{0x23CF, 0x23CF, prExtendedPictographic},   // E1.0   [1] (⏏️)       eject button
-	{0x23E9, 0x23EC, prExtendedPictographic},   // E0.6   [4] (⏩..⏬)    fast-forward button..fast down button
-	{0x23ED, 0x23EE, prExtendedPictographic},   // E0.7   [2] (⏭️..⏮️)    next track button..last track button
-	{0x23EF, 0x23EF, prExtendedPictographic},   // E1.0   [1] (⏯️)       play or pause button
-	{0x23F0, 0x23F0, prExtendedPictographic},   // E0.6   [1] (⏰)       alarm clock
-	{0x23F1, 0x23F2, prExtendedPictographic},   // E1.0   [2] (⏱️..⏲️)    stopwatch..timer clock
-	{0x23F3, 0x23F3, prExtendedPictographic},   // E0.6   [1] (⏳)       hourglass not done
-	{0x23F8, 0x23FA, prExtendedPictographic},   // E0.7   [3] (⏸️..⏺️)    pause button..record button
-	{0x24B6, 0x24E9, prALetter},                // So  [52] CIRCLED LATIN CAPITAL LETTER A..CIRCLED LATIN SMALL LETTER Z
-	{0x24C2, 0x24C2, prExtendedPictographic},   // E0.6   [1] (Ⓜ️)       circled M
-	{0x25AA, 0x25AB, prExtendedPictographic},   // E0.6   [2] (▪️..▫️)    black small square..white small square
-	{0x25B6, 0x25B6, prExtendedPictographic},   // E0.6   [1] (▶️)       play button
-	{0x25C0, 0x25C0, prExtendedPictographic},   // E0.6   [1] (◀️)       reverse button
-	{0x25FB, 0x25FE, prExtendedPictographic},   // E0.6   [4] (◻️..◾)    white medium square..black medium-small square
-	{0x2600, 0x2601, prExtendedPictographic},   // E0.6   [2] (☀️..☁️)    sun..cloud
-	{0x2602, 0x2603, prExtendedPictographic},   // E0.7   [2] (☂️..☃️)    umbrella..snowman
-	{0x2604, 0x2604, prExtendedPictographic},   // E1.0   [1] (☄️)       comet
-	{0x2605, 0x2605, prExtendedPictographic},   // E0.0   [1] (★)       BLACK STAR
-	{0x2607, 0x260D, prExtendedPictographic},   // E0.0   [7] (☇..☍)    LIGHTNING..OPPOSITION
-	{0x260E, 0x260E, prExtendedPictographic},   // E0.6   [1] (☎️)       telephone
-	{0x260F, 0x2610, prExtendedPictographic},   // E0.0   [2] (☏..☐)    WHITE TELEPHONE..BALLOT BOX
-	{0x2611, 0x2611, prExtendedPictographic},   // E0.6   [1] (☑️)       check box with check
-	{0x2612, 0x2612, prExtendedPictographic},   // E0.0   [1] (☒)       BALLOT BOX WITH X
-	{0x2614, 0x2615, prExtendedPictographic},   // E0.6   [2] (☔..☕)    umbrella with rain drops..hot beverage
-	{0x2616, 0x2617, prExtendedPictographic},   // E0.0   [2] (☖..☗)    WHITE SHOGI PIECE..BLACK SHOGI PIECE
-	{0x2618, 0x2618, prExtendedPictographic},   // E1.0   [1] (☘️)       shamrock
-	{0x2619, 0x261C, prExtendedPictographic},   // E0.0   [4] (☙..☜)    REVERSED ROTATED FLORAL HEART BULLET..WHITE LEFT POINTING INDEX
-	{0x261D, 0x261D, prExtendedPictographic},   // E0.6   [1] (☝️)       index pointing up
-	{0x261E, 0x261F, prExtendedPictographic},   // E0.0   [2] (☞..☟)    WHITE RIGHT POINTING INDEX..WHITE DOWN POINTING INDEX
-	{0x2620, 0x2620, prExtendedPictographic},   // E1.0   [1] (☠️)       skull and crossbones
-	{0x2621, 0x2621, prExtendedPictographic},   // E0.0   [1] (☡)       CAUTION SIGN
-	{0x2622, 0x2623, prExtendedPictographic},   // E1.0   [2] (☢️..☣️)    radioactive..biohazard
-	{0x2624, 0x2625, prExtendedPictographic},   // E0.0   [2] (☤..☥)    CADUCEUS..ANKH
-	{0x2626, 0x2626, prExtendedPictographic},   // E1.0   [1] (☦️)       orthodox cross
-	{0x2627, 0x2629, prExtendedPictographic},   // E0.0   [3] (☧..☩)    CHI RHO..CROSS OF JERUSALEM
-	{0x262A, 0x262A, prExtendedPictographic},   // E0.7   [1] (☪️)       star and crescent
-	{0x262B, 0x262D, prExtendedPictographic},   // E0.0   [3] (☫..☭)    FARSI SYMBOL..HAMMER AND SICKLE
-	{0x262E, 0x262E, prExtendedPictographic},   // E1.0   [1] (☮️)       peace symbol
-	{0x262F, 0x262F, prExtendedPictographic},   // E0.7   [1] (☯️)       yin yang
-	{0x2630, 0x2637, prExtendedPictographic},   // E0.0   [8] (☰..☷)    TRIGRAM FOR HEAVEN..TRIGRAM FOR EARTH
-	{0x2638, 0x2639, prExtendedPictographic},   // E0.7   [2] (☸️..☹️)    wheel of dharma..frowning face
-	{0x263A, 0x263A, prExtendedPictographic},   // E0.6   [1] (☺️)       smiling face
-	{0x263B, 0x263F, prExtendedPictographic},   // E0.0   [5] (☻..☿)    BLACK SMILING FACE..MERCURY
-	{0x2640, 0x2640, prExtendedPictographic},   // E4.0   [1] (♀️)       female sign
-	{0x2641, 0x2641, prExtendedPictographic},   // E0.0   [1] (♁)       EARTH
-	{0x2642, 0x2642, prExtendedPictographic},   // E4.0   [1] (♂️)       male sign
-	{0x2643, 0x2647, prExtendedPictographic},   // E0.0   [5] (♃..♇)    JUPITER..PLUTO
-	{0x2648, 0x2653, prExtendedPictographic},   // E0.6  [12] (♈..♓)    Aries..Pisces
-	{0x2654, 0x265E, prExtendedPictographic},   // E0.0  [11] (♔..♞)    WHITE CHESS KING..BLACK CHESS KNIGHT
-	{0x265F, 0x265F, prExtendedPictographic},   // E11.0  [1] (♟️)       chess pawn
-	{0x2660, 0x2660, prExtendedPictographic},   // E0.6   [1] (♠️)       spade suit
-	{0x2661, 0x2662, prExtendedPictographic},   // E0.0   [2] (♡..♢)    WHITE HEART SUIT..WHITE DIAMOND SUIT
-	{0x2663, 0x2663, prExtendedPictographic},   // E0.6   [1] (♣️)       club suit
-	{0x2664, 0x2664, prExtendedPictographic},   // E0.0   [1] (♤)       WHITE SPADE SUIT
-	{0x2665, 0x2666, prExtendedPictographic},   // E0.6   [2] (♥️..♦️)    heart suit..diamond suit
-	{0x2667, 0x2667, prExtendedPictographic},   // E0.0   [1] (♧)       WHITE CLUB SUIT
-	{0x2668, 0x2668, prExtendedPictographic},   // E0.6   [1] (♨️)       hot springs
-	{0x2669, 0x267A, prExtendedPictographic},   // E0.0  [18] (♩..♺)    QUARTER NOTE..RECYCLING SYMBOL FOR GENERIC MATERIALS
-	{0x267B, 0x267B, prExtendedPictographic},   // E0.6   [1] (♻️)       recycling symbol
-	{0x267C, 0x267D, prExtendedPictographic},   // E0.0   [2] (♼..♽)    RECYCLED PAPER SYMBOL..PARTIALLY-RECYCLED PAPER SYMBOL
-	{0x267E, 0x267E, prExtendedPictographic},   // E11.0  [1] (♾️)       infinity
-	{0x267F, 0x267F, prExtendedPictographic},   // E0.6   [1] (♿)       wheelchair symbol
-	{0x2680, 0x2685, prExtendedPictographic},   // E0.0   [6] (⚀..⚅)    DIE FACE-1..DIE FACE-6
-	{0x2690, 0x2691, prExtendedPictographic},   // E0.0   [2] (⚐..⚑)    WHITE FLAG..BLACK FLAG
-	{0x2692, 0x2692, prExtendedPictographic},   // E1.0   [1] (⚒️)       hammer and pick
-	{0x2693, 0x2693, prExtendedPictographic},   // E0.6   [1] (⚓)       anchor
-	{0x2694, 0x2694, prExtendedPictographic},   // E1.0   [1] (⚔️)       crossed swords
-	{0x2695, 0x2695, prExtendedPictographic},   // E4.0   [1] (⚕️)       medical symbol
-	{0x2696, 0x2697, prExtendedPictographic},   // E1.0   [2] (⚖️..⚗️)    balance scale..alembic
-	{0x2698, 0x2698, prExtendedPictographic},   // E0.0   [1] (⚘)       FLOWER
-	{0x2699, 0x2699, prExtendedPictographic},   // E1.0   [1] (⚙️)       gear
-	{0x269A, 0x269A, prExtendedPictographic},   // E0.0   [1] (⚚)       STAFF OF HERMES
-	{0x269B, 0x269C, prExtendedPictographic},   // E1.0   [2] (⚛️..⚜️)    atom symbol..fleur-de-lis
-	{0x269D, 0x269F, prExtendedPictographic},   // E0.0   [3] (⚝..⚟)    OUTLINED WHITE STAR..THREE LINES CONVERGING LEFT
-	{0x26A0, 0x26A1, prExtendedPictographic},   // E0.6   [2] (⚠️..⚡)    warning..high voltage
-	{0x26A2, 0x26A6, prExtendedPictographic},   // E0.0   [5] (⚢..⚦)    DOUBLED FEMALE SIGN..MALE WITH STROKE SIGN
-	{0x26A7, 0x26A7, prExtendedPictographic},   // E13.0  [1] (⚧️)       transgender symbol
-	{0x26A8, 0x26A9, prExtendedPictographic},   // E0.0   [2] (⚨..⚩)    VERTICAL MALE WITH STROKE SIGN..HORIZONTAL MALE WITH STROKE SIGN
-	{0x26AA, 0x26AB, prExtendedPictographic},   // E0.6   [2] (⚪..⚫)    white circle..black circle
-	{0x26AC, 0x26AF, prExtendedPictographic},   // E0.0   [4] (⚬..⚯)    MEDIUM SMALL WHITE CIRCLE..UNMARRIED PARTNERSHIP SYMBOL
-	{0x26B0, 0x26B1, prExtendedPictographic},   // E1.0   [2] (⚰️..⚱️)    coffin..funeral urn
-	{0x26B2, 0x26BC, prExtendedPictographic},   // E0.0  [11] (⚲..⚼)    NEUTER..SESQUIQUADRATE
-	{0x26BD, 0x26BE, prExtendedPictographic},   // E0.6   [2] (⚽..⚾)    soccer ball..baseball
-	{0x26BF, 0x26C3, prExtendedPictographic},   // E0.0   [5] (⚿..⛃)    SQUARED KEY..BLACK DRAUGHTS KING
-	{0x26C4, 0x26C5, prExtendedPictographic},   // E0.6   [2] (⛄..⛅)    snowman without snow..sun behind cloud
-	{0x26C6, 0x26C7, prExtendedPictographic},   // E0.0   [2] (⛆..⛇)    RAIN..BLACK SNOWMAN
-	{0x26C8, 0x26C8, prExtendedPictographic},   // E0.7   [1] (⛈️)       cloud with lightning and rain
-	{0x26C9, 0x26CD, prExtendedPictographic},   // E0.0   [5] (⛉..⛍)    TURNED WHITE SHOGI PIECE..DISABLED CAR
-	{0x26CE, 0x26CE, prExtendedPictographic},   // E0.6   [1] (⛎)       Ophiuchus
-	{0x26CF, 0x26CF, prExtendedPictographic},   // E0.7   [1] (⛏️)       pick
-	{0x26D0, 0x26D0, prExtendedPictographic},   // E0.0   [1] (⛐)       CAR SLIDING
-	{0x26D1, 0x26D1, prExtendedPictographic},   // E0.7   [1] (⛑️)       rescue worker’s helmet
-	{0x26D2, 0x26D2, prExtendedPictographic},   // E0.0   [1] (⛒)       CIRCLED CROSSING LANES
-	{0x26D3, 0x26D3, prExtendedPictographic},   // E0.7   [1] (⛓️)       chains
-	{0x26D4, 0x26D4, prExtendedPictographic},   // E0.6   [1] (⛔)       no entry
-	{0x26D5, 0x26E8, prExtendedPictographic},   // E0.0  [20] (⛕..⛨)    ALTERNATE ONE-WAY LEFT WAY TRAFFIC..BLACK CROSS ON SHIELD
-	{0x26E9, 0x26E9, prExtendedPictographic},   // E0.7   [1] (⛩️)       shinto shrine
-	{0x26EA, 0x26EA, prExtendedPictographic},   // E0.6   [1] (⛪)       church
-	{0x26EB, 0x26EF, prExtendedPictographic},   // E0.0   [5] (⛫..⛯)    CASTLE..MAP SYMBOL FOR LIGHTHOUSE
-	{0x26F0, 0x26F1, prExtendedPictographic},   // E0.7   [2] (⛰️..⛱️)    mountain..umbrella on ground
-	{0x26F2, 0x26F3, prExtendedPictographic},   // E0.6   [2] (⛲..⛳)    fountain..flag in hole
-	{0x26F4, 0x26F4, prExtendedPictographic},   // E0.7   [1] (⛴️)       ferry
-	{0x26F5, 0x26F5, prExtendedPictographic},   // E0.6   [1] (⛵)       sailboat
-	{0x26F6, 0x26F6, prExtendedPictographic},   // E0.0   [1] (⛶)       SQUARE FOUR CORNERS
-	{0x26F7, 0x26F9, prExtendedPictographic},   // E0.7   [3] (⛷️..⛹️)    skier..person bouncing ball
-	{0x26FA, 0x26FA, prExtendedPictographic},   // E0.6   [1] (⛺)       tent
-	{0x26FB, 0x26FC, prExtendedPictographic},   // E0.0   [2] (⛻..⛼)    JAPANESE BANK SYMBOL..HEADSTONE GRAVEYARD SYMBOL
-	{0x26FD, 0x26FD, prExtendedPictographic},   // E0.6   [1] (⛽)       fuel pump
-	{0x26FE, 0x2701, prExtendedPictographic},   // E0.0   [4] (⛾..✁)    CUP ON BLACK SQUARE..UPPER BLADE SCISSORS
-	{0x2702, 0x2702, prExtendedPictographic},   // E0.6   [1] (✂️)       scissors
-	{0x2703, 0x2704, prExtendedPictographic},   // E0.0   [2] (✃..✄)    LOWER BLADE SCISSORS..WHITE SCISSORS
-	{0x2705, 0x2705, prExtendedPictographic},   // E0.6   [1] (✅)       check mark button
-	{0x2708, 0x270C, prExtendedPictographic},   // E0.6   [5] (✈️..✌️)    airplane..victory hand
-	{0x270D, 0x270D, prExtendedPictographic},   // E0.7   [1] (✍️)       writing hand
-	{0x270E, 0x270E, prExtendedPictographic},   // E0.0   [1] (✎)       LOWER RIGHT PENCIL
-	{0x270F, 0x270F, prExtendedPictographic},   // E0.6   [1] (✏️)       pencil
-	{0x2710, 0x2711, prExtendedPictographic},   // E0.0   [2] (✐..✑)    UPPER RIGHT PENCIL..WHITE NIB
-	{0x2712, 0x2712, prExtendedPictographic},   // E0.6   [1] (✒️)       black nib
-	{0x2714, 0x2714, prExtendedPictographic},   // E0.6   [1] (✔️)       check mark
-	{0x2716, 0x2716, prExtendedPictographic},   // E0.6   [1] (✖️)       multiply
-	{0x271D, 0x271D, prExtendedPictographic},   // E0.7   [1] (✝️)       latin cross
-	{0x2721, 0x2721, prExtendedPictographic},   // E0.7   [1] (✡️)       star of David
-	{0x2728, 0x2728, prExtendedPictographic},   // E0.6   [1] (✨)       sparkles
-	{0x2733, 0x2734, prExtendedPictographic},   // E0.6   [2] (✳️..✴️)    eight-spoked asterisk..eight-pointed star
-	{0x2744, 0x2744, prExtendedPictographic},   // E0.6   [1] (❄️)       snowflake
-	{0x2747, 0x2747, prExtendedPictographic},   // E0.6   [1] (❇️)       sparkle
-	{0x274C, 0x274C, prExtendedPictographic},   // E0.6   [1] (❌)       cross mark
-	{0x274E, 0x274E, prExtendedPictographic},   // E0.6   [1] (❎)       cross mark button
-	{0x2753, 0x2755, prExtendedPictographic},   // E0.6   [3] (❓..❕)    red question mark..white exclamation mark
-	{0x2757, 0x2757, prExtendedPictographic},   // E0.6   [1] (❗)       red exclamation mark
-	{0x2763, 0x2763, prExtendedPictographic},   // E1.0   [1] (❣️)       heart exclamation
-	{0x2764, 0x2764, prExtendedPictographic},   // E0.6   [1] (❤️)       red heart
-	{0x2765, 0x2767, prExtendedPictographic},   // E0.0   [3] (❥..❧)    ROTATED HEAVY BLACK HEART BULLET..ROTATED FLORAL HEART BULLET
-	{0x2795, 0x2797, prExtendedPictographic},   // E0.6   [3] (➕..➗)    plus..divide
-	{0x27A1, 0x27A1, prExtendedPictographic},   // E0.6   [1] (➡️)       right arrow
-	{0x27B0, 0x27B0, prExtendedPictographic},   // E0.6   [1] (➰)       curly loop
-	{0x27BF, 0x27BF, prExtendedPictographic},   // E1.0   [1] (➿)       double curly loop
-	{0x2934, 0x2935, prExtendedPictographic},   // E0.6   [2] (⤴️..⤵️)    right arrow curving up..right arrow curving down
-	{0x2B05, 0x2B07, prExtendedPictographic},   // E0.6   [3] (⬅️..⬇️)    left arrow..down arrow
-	{0x2B1B, 0x2B1C, prExtendedPictographic},   // E0.6   [2] (⬛..⬜)    black large square..white large square
-	{0x2B50, 0x2B50, prExtendedPictographic},   // E0.6   [1] (⭐)       star
-	{0x2B55, 0x2B55, prExtendedPictographic},   // E0.6   [1] (⭕)       hollow red circle
-	{0x2C00, 0x2C7B, prALetter},                // L& [124] GLAGOLITIC CAPITAL LETTER AZU..LATIN LETTER SMALL CAPITAL TURNED E
-	{0x2C7C, 0x2C7D, prALetter},                // Lm   [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V
-	{0x2C7E, 0x2CE4, prALetter},                // L& [103] LATIN CAPITAL LETTER S WITH SWASH TAIL..COPTIC SYMBOL KAI
-	{0x2CEB, 0x2CEE, prALetter},                // L&   [4] COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI..COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA
-	{0x2CEF, 0x2CF1, prExtend},                 // Mn   [3] COPTIC COMBINING NI ABOVE..COPTIC COMBINING SPIRITUS LENIS
-	{0x2CF2, 0x2CF3, prALetter},                // L&   [2] COPTIC CAPITAL LETTER BOHAIRIC KHEI..COPTIC SMALL LETTER BOHAIRIC KHEI
-	{0x2D00, 0x2D25, prALetter},                // L&  [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE
-	{0x2D27, 0x2D27, prALetter},                // L&       GEORGIAN SMALL LETTER YN
-	{0x2D2D, 0x2D2D, prALetter},                // L&       GEORGIAN SMALL LETTER AEN
-	{0x2D30, 0x2D67, prALetter},                // Lo  [56] TIFINAGH LETTER YA..TIFINAGH LETTER YO
-	{0x2D6F, 0x2D6F, prALetter},                // Lm       TIFINAGH MODIFIER LETTER LABIALIZATION MARK
-	{0x2D7F, 0x2D7F, prExtend},                 // Mn       TIFINAGH CONSONANT JOINER
-	{0x2D80, 0x2D96, prALetter},                // Lo  [23] ETHIOPIC SYLLABLE LOA..ETHIOPIC SYLLABLE GGWE
-	{0x2DA0, 0x2DA6, prALetter},                // Lo   [7] ETHIOPIC SYLLABLE SSA..ETHIOPIC SYLLABLE SSO
-	{0x2DA8, 0x2DAE, prALetter},                // Lo   [7] ETHIOPIC SYLLABLE CCA..ETHIOPIC SYLLABLE CCO
-	{0x2DB0, 0x2DB6, prALetter},                // Lo   [7] ETHIOPIC SYLLABLE ZZA..ETHIOPIC SYLLABLE ZZO
-	{0x2DB8, 0x2DBE, prALetter},                // Lo   [7] ETHIOPIC SYLLABLE CCHA..ETHIOPIC SYLLABLE CCHO
-	{0x2DC0, 0x2DC6, prALetter},                // Lo   [7] ETHIOPIC SYLLABLE QYA..ETHIOPIC SYLLABLE QYO
-	{0x2DC8, 0x2DCE, prALetter},                // Lo   [7] ETHIOPIC SYLLABLE KYA..ETHIOPIC SYLLABLE KYO
-	{0x2DD0, 0x2DD6, prALetter},                // Lo   [7] ETHIOPIC SYLLABLE XYA..ETHIOPIC SYLLABLE XYO
-	{0x2DD8, 0x2DDE, prALetter},                // Lo   [7] ETHIOPIC SYLLABLE GYA..ETHIOPIC SYLLABLE GYO
-	{0x2DE0, 0x2DFF, prExtend},                 // Mn  [32] COMBINING CYRILLIC LETTER BE..COMBINING CYRILLIC LETTER IOTIFIED BIG YUS
-	{0x2E2F, 0x2E2F, prALetter},                // Lm       VERTICAL TILDE
-	{0x3000, 0x3000, prWSegSpace},              // Zs       IDEOGRAPHIC SPACE
-	{0x3005, 0x3005, prALetter},                // Lm       IDEOGRAPHIC ITERATION MARK
-	{0x302A, 0x302D, prExtend},                 // Mn   [4] IDEOGRAPHIC LEVEL TONE MARK..IDEOGRAPHIC ENTERING TONE MARK
-	{0x302E, 0x302F, prExtend},                 // Mc   [2] HANGUL SINGLE DOT TONE MARK..HANGUL DOUBLE DOT TONE MARK
-	{0x3030, 0x3030, prExtendedPictographic},   // E0.6   [1] (〰️)       wavy dash
-	{0x3031, 0x3035, prKatakana},               // Lm   [5] VERTICAL KANA REPEAT MARK..VERTICAL KANA REPEAT MARK LOWER HALF
-	{0x303B, 0x303B, prALetter},                // Lm       VERTICAL IDEOGRAPHIC ITERATION MARK
-	{0x303C, 0x303C, prALetter},                // Lo       MASU MARK
-	{0x303D, 0x303D, prExtendedPictographic},   // E0.6   [1] (〽️)       part alternation mark
-	{0x3099, 0x309A, prExtend},                 // Mn   [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
-	{0x309B, 0x309C, prKatakana},               // Sk   [2] KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
-	{0x30A0, 0x30A0, prKatakana},               // Pd       KATAKANA-HIRAGANA DOUBLE HYPHEN
-	{0x30A1, 0x30FA, prKatakana},               // Lo  [90] KATAKANA LETTER SMALL A..KATAKANA LETTER VO
-	{0x30FC, 0x30FE, prKatakana},               // Lm   [3] KATAKANA-HIRAGANA PROLONGED SOUND MARK..KATAKANA VOICED ITERATION MARK
-	{0x30FF, 0x30FF, prKatakana},               // Lo       KATAKANA DIGRAPH KOTO
-	{0x3105, 0x312F, prALetter},                // Lo  [43] BOPOMOFO LETTER B..BOPOMOFO LETTER NN
-	{0x3131, 0x318E, prALetter},                // Lo  [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE
-	{0x31A0, 0x31BF, prALetter},                // Lo  [32] BOPOMOFO LETTER BU..BOPOMOFO LETTER AH
-	{0x31F0, 0x31FF, prKatakana},               // Lo  [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO
-	{0x3297, 0x3297, prExtendedPictographic},   // E0.6   [1] (㊗️)       Japanese “congratulations” button
-	{0x3299, 0x3299, prExtendedPictographic},   // E0.6   [1] (㊙️)       Japanese “secret” button
-	{0x32D0, 0x32FE, prKatakana},               // So  [47] CIRCLED KATAKANA A..CIRCLED KATAKANA WO
-	{0x3300, 0x3357, prKatakana},               // So  [88] SQUARE APAATO..SQUARE WATTO
-	{0xA000, 0xA014, prALetter},                // Lo  [21] YI SYLLABLE IT..YI SYLLABLE E
-	{0xA015, 0xA015, prALetter},                // Lm       YI SYLLABLE WU
-	{0xA016, 0xA48C, prALetter},                // Lo [1143] YI SYLLABLE BIT..YI SYLLABLE YYR
-	{0xA4D0, 0xA4F7, prALetter},                // Lo  [40] LISU LETTER BA..LISU LETTER OE
-	{0xA4F8, 0xA4FD, prALetter},                // Lm   [6] LISU LETTER TONE MYA TI..LISU LETTER TONE MYA JEU
-	{0xA500, 0xA60B, prALetter},                // Lo [268] VAI SYLLABLE EE..VAI SYLLABLE NG
-	{0xA60C, 0xA60C, prALetter},                // Lm       VAI SYLLABLE LENGTHENER
-	{0xA610, 0xA61F, prALetter},                // Lo  [16] VAI SYLLABLE NDOLE FA..VAI SYMBOL JONG
-	{0xA620, 0xA629, prNumeric},                // Nd  [10] VAI DIGIT ZERO..VAI DIGIT NINE
-	{0xA62A, 0xA62B, prALetter},                // Lo   [2] VAI SYLLABLE NDOLE MA..VAI SYLLABLE NDOLE DO
-	{0xA640, 0xA66D, prALetter},                // L&  [46] CYRILLIC CAPITAL LETTER ZEMLYA..CYRILLIC SMALL LETTER DOUBLE MONOCULAR O
-	{0xA66E, 0xA66E, prALetter},                // Lo       CYRILLIC LETTER MULTIOCULAR O
-	{0xA66F, 0xA66F, prExtend},                 // Mn       COMBINING CYRILLIC VZMET
-	{0xA670, 0xA672, prExtend},                 // Me   [3] COMBINING CYRILLIC TEN MILLIONS SIGN..COMBINING CYRILLIC THOUSAND MILLIONS SIGN
-	{0xA674, 0xA67D, prExtend},                 // Mn  [10] COMBINING CYRILLIC LETTER UKRAINIAN IE..COMBINING CYRILLIC PAYEROK
-	{0xA67F, 0xA67F, prALetter},                // Lm       CYRILLIC PAYEROK
-	{0xA680, 0xA69B, prALetter},                // L&  [28] CYRILLIC CAPITAL LETTER DWE..CYRILLIC SMALL LETTER CROSSED O
-	{0xA69C, 0xA69D, prALetter},                // Lm   [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFIER LETTER CYRILLIC SOFT SIGN
-	{0xA69E, 0xA69F, prExtend},                 // Mn   [2] COMBINING CYRILLIC LETTER EF..COMBINING CYRILLIC LETTER IOTIFIED E
-	{0xA6A0, 0xA6E5, prALetter},                // Lo  [70] BAMUM LETTER A..BAMUM LETTER KI
-	{0xA6E6, 0xA6EF, prALetter},                // Nl  [10] BAMUM LETTER MO..BAMUM LETTER KOGHOM
-	{0xA6F0, 0xA6F1, prExtend},                 // Mn   [2] BAMUM COMBINING MARK KOQNDON..BAMUM COMBINING MARK TUKWENTIS
-	{0xA708, 0xA716, prALetter},                // Sk  [15] MODIFIER LETTER EXTRA-HIGH DOTTED TONE BAR..MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR
-	{0xA717, 0xA71F, prALetter},                // Lm   [9] MODIFIER LETTER DOT VERTICAL BAR..MODIFIER LETTER LOW INVERTED EXCLAMATION MARK
-	{0xA720, 0xA721, prALetter},                // Sk   [2] MODIFIER LETTER STRESS AND HIGH TONE..MODIFIER LETTER STRESS AND LOW TONE
-	{0xA722, 0xA76F, prALetter},                // L&  [78] LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF..LATIN SMALL LETTER CON
-	{0xA770, 0xA770, prALetter},                // Lm       MODIFIER LETTER US
-	{0xA771, 0xA787, prALetter},                // L&  [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER INSULAR T
-	{0xA788, 0xA788, prALetter},                // Lm       MODIFIER LETTER LOW CIRCUMFLEX ACCENT
-	{0xA789, 0xA78A, prALetter},                // Sk   [2] MODIFIER LETTER COLON..MODIFIER LETTER SHORT EQUALS SIGN
-	{0xA78B, 0xA78E, prALetter},                // L&   [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT
-	{0xA78F, 0xA78F, prALetter},                // Lo       LATIN LETTER SINOLOGICAL DOT
-	{0xA790, 0xA7CA, prALetter},                // L&  [59] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY
-	{0xA7D0, 0xA7D1, prALetter},                // L&   [2] LATIN CAPITAL LETTER CLOSED INSULAR G..LATIN SMALL LETTER CLOSED INSULAR G
-	{0xA7D3, 0xA7D3, prALetter},                // L&       LATIN SMALL LETTER DOUBLE THORN
-	{0xA7D5, 0xA7D9, prALetter},                // L&   [5] LATIN SMALL LETTER DOUBLE WYNN..LATIN SMALL LETTER SIGMOID S
-	{0xA7F2, 0xA7F4, prALetter},                // Lm   [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q
-	{0xA7F5, 0xA7F6, prALetter},                // L&   [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H
-	{0xA7F7, 0xA7F7, prALetter},                // Lo       LATIN EPIGRAPHIC LETTER SIDEWAYS I
-	{0xA7F8, 0xA7F9, prALetter},                // Lm   [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE
-	{0xA7FA, 0xA7FA, prALetter},                // L&       LATIN LETTER SMALL CAPITAL TURNED M
-	{0xA7FB, 0xA801, prALetter},                // Lo   [7] LATIN EPIGRAPHIC LETTER REVERSED F..SYLOTI NAGRI LETTER I
-	{0xA802, 0xA802, prExtend},                 // Mn       SYLOTI NAGRI SIGN DVISVARA
-	{0xA803, 0xA805, prALetter},                // Lo   [3] SYLOTI NAGRI LETTER U..SYLOTI NAGRI LETTER O
-	{0xA806, 0xA806, prExtend},                 // Mn       SYLOTI NAGRI SIGN HASANTA
-	{0xA807, 0xA80A, prALetter},                // Lo   [4] SYLOTI NAGRI LETTER KO..SYLOTI NAGRI LETTER GHO
-	{0xA80B, 0xA80B, prExtend},                 // Mn       SYLOTI NAGRI SIGN ANUSVARA
-	{0xA80C, 0xA822, prALetter},                // Lo  [23] SYLOTI NAGRI LETTER CO..SYLOTI NAGRI LETTER HO
-	{0xA823, 0xA824, prExtend},                 // Mc   [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN I
-	{0xA825, 0xA826, prExtend},                 // Mn   [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E
-	{0xA827, 0xA827, prExtend},                 // Mc       SYLOTI NAGRI VOWEL SIGN OO
-	{0xA82C, 0xA82C, prExtend},                 // Mn       SYLOTI NAGRI SIGN ALTERNATE HASANTA
-	{0xA840, 0xA873, prALetter},                // Lo  [52] PHAGS-PA LETTER KA..PHAGS-PA LETTER CANDRABINDU
-	{0xA880, 0xA881, prExtend},                 // Mc   [2] SAURASHTRA SIGN ANUSVARA..SAURASHTRA SIGN VISARGA
-	{0xA882, 0xA8B3, prALetter},                // Lo  [50] SAURASHTRA LETTER A..SAURASHTRA LETTER LLA
-	{0xA8B4, 0xA8C3, prExtend},                 // Mc  [16] SAURASHTRA CONSONANT SIGN HAARU..SAURASHTRA VOWEL SIGN AU
-	{0xA8C4, 0xA8C5, prExtend},                 // Mn   [2] SAURASHTRA SIGN VIRAMA..SAURASHTRA SIGN CANDRABINDU
-	{0xA8D0, 0xA8D9, prNumeric},                // Nd  [10] SAURASHTRA DIGIT ZERO..SAURASHTRA DIGIT NINE
-	{0xA8E0, 0xA8F1, prExtend},                 // Mn  [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA
-	{0xA8F2, 0xA8F7, prALetter},                // Lo   [6] DEVANAGARI SIGN SPACING CANDRABINDU..DEVANAGARI SIGN CANDRABINDU AVAGRAHA
-	{0xA8FB, 0xA8FB, prALetter},                // Lo       DEVANAGARI HEADSTROKE
-	{0xA8FD, 0xA8FE, prALetter},                // Lo   [2] DEVANAGARI JAIN OM..DEVANAGARI LETTER AY
-	{0xA8FF, 0xA8FF, prExtend},                 // Mn       DEVANAGARI VOWEL SIGN AY
-	{0xA900, 0xA909, prNumeric},                // Nd  [10] KAYAH LI DIGIT ZERO..KAYAH LI DIGIT NINE
-	{0xA90A, 0xA925, prALetter},                // Lo  [28] KAYAH LI LETTER KA..KAYAH LI LETTER OO
-	{0xA926, 0xA92D, prExtend},                 // Mn   [8] KAYAH LI VOWEL UE..KAYAH LI TONE CALYA PLOPHU
-	{0xA930, 0xA946, prALetter},                // Lo  [23] REJANG LETTER KA..REJANG LETTER A
-	{0xA947, 0xA951, prExtend},                 // Mn  [11] REJANG VOWEL SIGN I..REJANG CONSONANT SIGN R
-	{0xA952, 0xA953, prExtend},                 // Mc   [2] REJANG CONSONANT SIGN H..REJANG VIRAMA
-	{0xA960, 0xA97C, prALetter},                // Lo  [29] HANGUL CHOSEONG TIKEUT-MIEUM..HANGUL CHOSEONG SSANGYEORINHIEUH
-	{0xA980, 0xA982, prExtend},                 // Mn   [3] JAVANESE SIGN PANYANGGA..JAVANESE SIGN LAYAR
-	{0xA983, 0xA983, prExtend},                 // Mc       JAVANESE SIGN WIGNYAN
-	{0xA984, 0xA9B2, prALetter},                // Lo  [47] JAVANESE LETTER A..JAVANESE LETTER HA
-	{0xA9B3, 0xA9B3, prExtend},                 // Mn       JAVANESE SIGN CECAK TELU
-	{0xA9B4, 0xA9B5, prExtend},                 // Mc   [2] JAVANESE VOWEL SIGN TARUNG..JAVANESE VOWEL SIGN TOLONG
-	{0xA9B6, 0xA9B9, prExtend},                 // Mn   [4] JAVANESE VOWEL SIGN WULU..JAVANESE VOWEL SIGN SUKU MENDUT
-	{0xA9BA, 0xA9BB, prExtend},                 // Mc   [2] JAVANESE VOWEL SIGN TALING..JAVANESE VOWEL SIGN DIRGA MURE
-	{0xA9BC, 0xA9BD, prExtend},                 // Mn   [2] JAVANESE VOWEL SIGN PEPET..JAVANESE CONSONANT SIGN KERET
-	{0xA9BE, 0xA9C0, prExtend},                 // Mc   [3] JAVANESE CONSONANT SIGN PENGKAL..JAVANESE PANGKON
-	{0xA9CF, 0xA9CF, prALetter},                // Lm       JAVANESE PANGRANGKEP
-	{0xA9D0, 0xA9D9, prNumeric},                // Nd  [10] JAVANESE DIGIT ZERO..JAVANESE DIGIT NINE
-	{0xA9E5, 0xA9E5, prExtend},                 // Mn       MYANMAR SIGN SHAN SAW
-	{0xA9F0, 0xA9F9, prNumeric},                // Nd  [10] MYANMAR TAI LAING DIGIT ZERO..MYANMAR TAI LAING DIGIT NINE
-	{0xAA00, 0xAA28, prALetter},                // Lo  [41] CHAM LETTER A..CHAM LETTER HA
-	{0xAA29, 0xAA2E, prExtend},                 // Mn   [6] CHAM VOWEL SIGN AA..CHAM VOWEL SIGN OE
-	{0xAA2F, 0xAA30, prExtend},                 // Mc   [2] CHAM VOWEL SIGN O..CHAM VOWEL SIGN AI
-	{0xAA31, 0xAA32, prExtend},                 // Mn   [2] CHAM VOWEL SIGN AU..CHAM VOWEL SIGN UE
-	{0xAA33, 0xAA34, prExtend},                 // Mc   [2] CHAM CONSONANT SIGN YA..CHAM CONSONANT SIGN RA
-	{0xAA35, 0xAA36, prExtend},                 // Mn   [2] CHAM CONSONANT SIGN LA..CHAM CONSONANT SIGN WA
-	{0xAA40, 0xAA42, prALetter},                // Lo   [3] CHAM LETTER FINAL K..CHAM LETTER FINAL NG
-	{0xAA43, 0xAA43, prExtend},                 // Mn       CHAM CONSONANT SIGN FINAL NG
-	{0xAA44, 0xAA4B, prALetter},                // Lo   [8] CHAM LETTER FINAL CH..CHAM LETTER FINAL SS
-	{0xAA4C, 0xAA4C, prExtend},                 // Mn       CHAM CONSONANT SIGN FINAL M
-	{0xAA4D, 0xAA4D, prExtend},                 // Mc       CHAM CONSONANT SIGN FINAL H
-	{0xAA50, 0xAA59, prNumeric},                // Nd  [10] CHAM DIGIT ZERO..CHAM DIGIT NINE
-	{0xAA7B, 0xAA7B, prExtend},                 // Mc       MYANMAR SIGN PAO KAREN TONE
-	{0xAA7C, 0xAA7C, prExtend},                 // Mn       MYANMAR SIGN TAI LAING TONE-2
-	{0xAA7D, 0xAA7D, prExtend},                 // Mc       MYANMAR SIGN TAI LAING TONE-5
-	{0xAAB0, 0xAAB0, prExtend},                 // Mn       TAI VIET MAI KANG
-	{0xAAB2, 0xAAB4, prExtend},                 // Mn   [3] TAI VIET VOWEL I..TAI VIET VOWEL U
-	{0xAAB7, 0xAAB8, prExtend},                 // Mn   [2] TAI VIET MAI KHIT..TAI VIET VOWEL IA
-	{0xAABE, 0xAABF, prExtend},                 // Mn   [2] TAI VIET VOWEL AM..TAI VIET TONE MAI EK
-	{0xAAC1, 0xAAC1, prExtend},                 // Mn       TAI VIET TONE MAI THO
-	{0xAAE0, 0xAAEA, prALetter},                // Lo  [11] MEETEI MAYEK LETTER E..MEETEI MAYEK LETTER SSA
-	{0xAAEB, 0xAAEB, prExtend},                 // Mc       MEETEI MAYEK VOWEL SIGN II
-	{0xAAEC, 0xAAED, prExtend},                 // Mn   [2] MEETEI MAYEK VOWEL SIGN UU..MEETEI MAYEK VOWEL SIGN AAI
-	{0xAAEE, 0xAAEF, prExtend},                 // Mc   [2] MEETEI MAYEK VOWEL SIGN AU..MEETEI MAYEK VOWEL SIGN AAU
-	{0xAAF2, 0xAAF2, prALetter},                // Lo       MEETEI MAYEK ANJI
-	{0xAAF3, 0xAAF4, prALetter},                // Lm   [2] MEETEI MAYEK SYLLABLE REPETITION MARK..MEETEI MAYEK WORD REPETITION MARK
-	{0xAAF5, 0xAAF5, prExtend},                 // Mc       MEETEI MAYEK VOWEL SIGN VISARGA
-	{0xAAF6, 0xAAF6, prExtend},                 // Mn       MEETEI MAYEK VIRAMA
-	{0xAB01, 0xAB06, prALetter},                // Lo   [6] ETHIOPIC SYLLABLE TTHU..ETHIOPIC SYLLABLE TTHO
-	{0xAB09, 0xAB0E, prALetter},                // Lo   [6] ETHIOPIC SYLLABLE DDHU..ETHIOPIC SYLLABLE DDHO
-	{0xAB11, 0xAB16, prALetter},                // Lo   [6] ETHIOPIC SYLLABLE DZU..ETHIOPIC SYLLABLE DZO
-	{0xAB20, 0xAB26, prALetter},                // Lo   [7] ETHIOPIC SYLLABLE CCHHA..ETHIOPIC SYLLABLE CCHHO
-	{0xAB28, 0xAB2E, prALetter},                // Lo   [7] ETHIOPIC SYLLABLE BBA..ETHIOPIC SYLLABLE BBO
-	{0xAB30, 0xAB5A, prALetter},                // L&  [43] LATIN SMALL LETTER BARRED ALPHA..LATIN SMALL LETTER Y WITH SHORT RIGHT LEG
-	{0xAB5B, 0xAB5B, prALetter},                // Sk       MODIFIER BREVE WITH INVERTED BREVE
-	{0xAB5C, 0xAB5F, prALetter},                // Lm   [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK
-	{0xAB60, 0xAB68, prALetter},                // L&   [9] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE
-	{0xAB69, 0xAB69, prALetter},                // Lm       MODIFIER LETTER SMALL TURNED W
-	{0xAB70, 0xABBF, prALetter},                // L&  [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA
-	{0xABC0, 0xABE2, prALetter},                // Lo  [35] MEETEI MAYEK LETTER KOK..MEETEI MAYEK LETTER I LONSUM
-	{0xABE3, 0xABE4, prExtend},                 // Mc   [2] MEETEI MAYEK VOWEL SIGN ONAP..MEETEI MAYEK VOWEL SIGN INAP
-	{0xABE5, 0xABE5, prExtend},                 // Mn       MEETEI MAYEK VOWEL SIGN ANAP
-	{0xABE6, 0xABE7, prExtend},                 // Mc   [2] MEETEI MAYEK VOWEL SIGN YENAP..MEETEI MAYEK VOWEL SIGN SOUNAP
-	{0xABE8, 0xABE8, prExtend},                 // Mn       MEETEI MAYEK VOWEL SIGN UNAP
-	{0xABE9, 0xABEA, prExtend},                 // Mc   [2] MEETEI MAYEK VOWEL SIGN CHEINAP..MEETEI MAYEK VOWEL SIGN NUNG
-	{0xABEC, 0xABEC, prExtend},                 // Mc       MEETEI MAYEK LUM IYEK
-	{0xABED, 0xABED, prExtend},                 // Mn       MEETEI MAYEK APUN IYEK
-	{0xABF0, 0xABF9, prNumeric},                // Nd  [10] MEETEI MAYEK DIGIT ZERO..MEETEI MAYEK DIGIT NINE
-	{0xAC00, 0xD7A3, prALetter},                // Lo [11172] HANGUL SYLLABLE GA..HANGUL SYLLABLE HIH
-	{0xD7B0, 0xD7C6, prALetter},                // Lo  [23] HANGUL JUNGSEONG O-YEO..HANGUL JUNGSEONG ARAEA-E
-	{0xD7CB, 0xD7FB, prALetter},                // Lo  [49] HANGUL JONGSEONG NIEUN-RIEUL..HANGUL JONGSEONG PHIEUPH-THIEUTH
-	{0xFB00, 0xFB06, prALetter},                // L&   [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST
-	{0xFB13, 0xFB17, prALetter},                // L&   [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH
-	{0xFB1D, 0xFB1D, prHebrewLetter},           // Lo       HEBREW LETTER YOD WITH HIRIQ
-	{0xFB1E, 0xFB1E, prExtend},                 // Mn       HEBREW POINT JUDEO-SPANISH VARIKA
-	{0xFB1F, 0xFB28, prHebrewLetter},           // Lo  [10] HEBREW LIGATURE YIDDISH YOD YOD PATAH..HEBREW LETTER WIDE TAV
-	{0xFB2A, 0xFB36, prHebrewLetter},           // Lo  [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH
-	{0xFB38, 0xFB3C, prHebrewLetter},           // Lo   [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH
-	{0xFB3E, 0xFB3E, prHebrewLetter},           // Lo       HEBREW LETTER MEM WITH DAGESH
-	{0xFB40, 0xFB41, prHebrewLetter},           // Lo   [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH
-	{0xFB43, 0xFB44, prHebrewLetter},           // Lo   [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH
-	{0xFB46, 0xFB4F, prHebrewLetter},           // Lo  [10] HEBREW LETTER TSADI WITH DAGESH..HEBREW LIGATURE ALEF LAMED
-	{0xFB50, 0xFBB1, prALetter},                // Lo  [98] ARABIC LETTER ALEF WASLA ISOLATED FORM..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM
-	{0xFBD3, 0xFD3D, prALetter},                // Lo [363] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM
-	{0xFD50, 0xFD8F, prALetter},                // Lo  [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM
-	{0xFD92, 0xFDC7, prALetter},                // Lo  [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM
-	{0xFDF0, 0xFDFB, prALetter},                // Lo  [12] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE JALLAJALALOUHOU
-	{0xFE00, 0xFE0F, prExtend},                 // Mn  [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16
-	{0xFE10, 0xFE10, prMidNum},                 // Po       PRESENTATION FORM FOR VERTICAL COMMA
-	{0xFE13, 0xFE13, prMidLetter},              // Po       PRESENTATION FORM FOR VERTICAL COLON
-	{0xFE14, 0xFE14, prMidNum},                 // Po       PRESENTATION FORM FOR VERTICAL SEMICOLON
-	{0xFE20, 0xFE2F, prExtend},                 // Mn  [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC TITLO RIGHT HALF
-	{0xFE33, 0xFE34, prExtendNumLet},           // Pc   [2] PRESENTATION FORM FOR VERTICAL LOW LINE..PRESENTATION FORM FOR VERTICAL WAVY LOW LINE
-	{0xFE4D, 0xFE4F, prExtendNumLet},           // Pc   [3] DASHED LOW LINE..WAVY LOW LINE
-	{0xFE50, 0xFE50, prMidNum},                 // Po       SMALL COMMA
-	{0xFE52, 0xFE52, prMidNumLet},              // Po       SMALL FULL STOP
-	{0xFE54, 0xFE54, prMidNum},                 // Po       SMALL SEMICOLON
-	{0xFE55, 0xFE55, prMidLetter},              // Po       SMALL COLON
-	{0xFE70, 0xFE74, prALetter},                // Lo   [5] ARABIC FATHATAN ISOLATED FORM..ARABIC KASRATAN ISOLATED FORM
-	{0xFE76, 0xFEFC, prALetter},                // Lo [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM
-	{0xFEFF, 0xFEFF, prFormat},                 // Cf       ZERO WIDTH NO-BREAK SPACE
-	{0xFF07, 0xFF07, prMidNumLet},              // Po       FULLWIDTH APOSTROPHE
-	{0xFF0C, 0xFF0C, prMidNum},                 // Po       FULLWIDTH COMMA
-	{0xFF0E, 0xFF0E, prMidNumLet},              // Po       FULLWIDTH FULL STOP
-	{0xFF10, 0xFF19, prNumeric},                // Nd  [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE
-	{0xFF1A, 0xFF1A, prMidLetter},              // Po       FULLWIDTH COLON
-	{0xFF1B, 0xFF1B, prMidNum},                 // Po       FULLWIDTH SEMICOLON
-	{0xFF21, 0xFF3A, prALetter},                // L&  [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z
-	{0xFF3F, 0xFF3F, prExtendNumLet},           // Pc       FULLWIDTH LOW LINE
-	{0xFF41, 0xFF5A, prALetter},                // L&  [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z
-	{0xFF66, 0xFF6F, prKatakana},               // Lo  [10] HALFWIDTH KATAKANA LETTER WO..HALFWIDTH KATAKANA LETTER SMALL TU
-	{0xFF70, 0xFF70, prKatakana},               // Lm       HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK
-	{0xFF71, 0xFF9D, prKatakana},               // Lo  [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAKANA LETTER N
-	{0xFF9E, 0xFF9F, prExtend},                 // Lm   [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
-	{0xFFA0, 0xFFBE, prALetter},                // Lo  [31] HALFWIDTH HANGUL FILLER..HALFWIDTH HANGUL LETTER HIEUH
-	{0xFFC2, 0xFFC7, prALetter},                // Lo   [6] HALFWIDTH HANGUL LETTER A..HALFWIDTH HANGUL LETTER E
-	{0xFFCA, 0xFFCF, prALetter},                // Lo   [6] HALFWIDTH HANGUL LETTER YEO..HALFWIDTH HANGUL LETTER OE
-	{0xFFD2, 0xFFD7, prALetter},                // Lo   [6] HALFWIDTH HANGUL LETTER YO..HALFWIDTH HANGUL LETTER YU
-	{0xFFDA, 0xFFDC, prALetter},                // Lo   [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I
-	{0xFFF9, 0xFFFB, prFormat},                 // Cf   [3] INTERLINEAR ANNOTATION ANCHOR..INTERLINEAR ANNOTATION TERMINATOR
-	{0x10000, 0x1000B, prALetter},              // Lo  [12] LINEAR B SYLLABLE B008 A..LINEAR B SYLLABLE B046 JE
-	{0x1000D, 0x10026, prALetter},              // Lo  [26] LINEAR B SYLLABLE B036 JO..LINEAR B SYLLABLE B032 QO
-	{0x10028, 0x1003A, prALetter},              // Lo  [19] LINEAR B SYLLABLE B060 RA..LINEAR B SYLLABLE B042 WO
-	{0x1003C, 0x1003D, prALetter},              // Lo   [2] LINEAR B SYLLABLE B017 ZA..LINEAR B SYLLABLE B074 ZE
-	{0x1003F, 0x1004D, prALetter},              // Lo  [15] LINEAR B SYLLABLE B020 ZO..LINEAR B SYLLABLE B091 TWO
-	{0x10050, 0x1005D, prALetter},              // Lo  [14] LINEAR B SYMBOL B018..LINEAR B SYMBOL B089
-	{0x10080, 0x100FA, prALetter},              // Lo [123] LINEAR B IDEOGRAM B100 MAN..LINEAR B IDEOGRAM VESSEL B305
-	{0x10140, 0x10174, prALetter},              // Nl  [53] GREEK ACROPHONIC ATTIC ONE QUARTER..GREEK ACROPHONIC STRATIAN FIFTY MNAS
-	{0x101FD, 0x101FD, prExtend},               // Mn       PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE
-	{0x10280, 0x1029C, prALetter},              // Lo  [29] LYCIAN LETTER A..LYCIAN LETTER X
-	{0x102A0, 0x102D0, prALetter},              // Lo  [49] CARIAN LETTER A..CARIAN LETTER UUU3
-	{0x102E0, 0x102E0, prExtend},               // Mn       COPTIC EPACT THOUSANDS MARK
-	{0x10300, 0x1031F, prALetter},              // Lo  [32] OLD ITALIC LETTER A..OLD ITALIC LETTER ESS
-	{0x1032D, 0x10340, prALetter},              // Lo  [20] OLD ITALIC LETTER YE..GOTHIC LETTER PAIRTHRA
-	{0x10341, 0x10341, prALetter},              // Nl       GOTHIC LETTER NINETY
-	{0x10342, 0x10349, prALetter},              // Lo   [8] GOTHIC LETTER RAIDA..GOTHIC LETTER OTHAL
-	{0x1034A, 0x1034A, prALetter},              // Nl       GOTHIC LETTER NINE HUNDRED
-	{0x10350, 0x10375, prALetter},              // Lo  [38] OLD PERMIC LETTER AN..OLD PERMIC LETTER IA
-	{0x10376, 0x1037A, prExtend},               // Mn   [5] COMBINING OLD PERMIC LETTER AN..COMBINING OLD PERMIC LETTER SII
-	{0x10380, 0x1039D, prALetter},              // Lo  [30] UGARITIC LETTER ALPA..UGARITIC LETTER SSU
-	{0x103A0, 0x103C3, prALetter},              // Lo  [36] OLD PERSIAN SIGN A..OLD PERSIAN SIGN HA
-	{0x103C8, 0x103CF, prALetter},              // Lo   [8] OLD PERSIAN SIGN AURAMAZDAA..OLD PERSIAN SIGN BUUMISH
-	{0x103D1, 0x103D5, prALetter},              // Nl   [5] OLD PERSIAN NUMBER ONE..OLD PERSIAN NUMBER HUNDRED
-	{0x10400, 0x1044F, prALetter},              // L&  [80] DESERET CAPITAL LETTER LONG I..DESERET SMALL LETTER EW
-	{0x10450, 0x1049D, prALetter},              // Lo  [78] SHAVIAN LETTER PEEP..OSMANYA LETTER OO
-	{0x104A0, 0x104A9, prNumeric},              // Nd  [10] OSMANYA DIGIT ZERO..OSMANYA DIGIT NINE
-	{0x104B0, 0x104D3, prALetter},              // L&  [36] OSAGE CAPITAL LETTER A..OSAGE CAPITAL LETTER ZHA
-	{0x104D8, 0x104FB, prALetter},              // L&  [36] OSAGE SMALL LETTER A..OSAGE SMALL LETTER ZHA
-	{0x10500, 0x10527, prALetter},              // Lo  [40] ELBASAN LETTER A..ELBASAN LETTER KHE
-	{0x10530, 0x10563, prALetter},              // Lo  [52] CAUCASIAN ALBANIAN LETTER ALT..CAUCASIAN ALBANIAN LETTER KIW
-	{0x10570, 0x1057A, prALetter},              // L&  [11] VITHKUQI CAPITAL LETTER A..VITHKUQI CAPITAL LETTER GA
-	{0x1057C, 0x1058A, prALetter},              // L&  [15] VITHKUQI CAPITAL LETTER HA..VITHKUQI CAPITAL LETTER RE
-	{0x1058C, 0x10592, prALetter},              // L&   [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE
-	{0x10594, 0x10595, prALetter},              // L&   [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE
-	{0x10597, 0x105A1, prALetter},              // L&  [11] VITHKUQI SMALL LETTER A..VITHKUQI SMALL LETTER GA
-	{0x105A3, 0x105B1, prALetter},              // L&  [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE
-	{0x105B3, 0x105B9, prALetter},              // L&   [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE
-	{0x105BB, 0x105BC, prALetter},              // L&   [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE
-	{0x10600, 0x10736, prALetter},              // Lo [311] LINEAR A SIGN AB001..LINEAR A SIGN A664
-	{0x10740, 0x10755, prALetter},              // Lo  [22] LINEAR A SIGN A701 A..LINEAR A SIGN A732 JE
-	{0x10760, 0x10767, prALetter},              // Lo   [8] LINEAR A SIGN A800..LINEAR A SIGN A807
-	{0x10780, 0x10785, prALetter},              // Lm   [6] MODIFIER LETTER SMALL CAPITAL AA..MODIFIER LETTER SMALL B WITH HOOK
-	{0x10787, 0x107B0, prALetter},              // Lm  [42] MODIFIER LETTER SMALL DZ DIGRAPH..MODIFIER LETTER SMALL V WITH RIGHT HOOK
-	{0x107B2, 0x107BA, prALetter},              // Lm   [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL
-	{0x10800, 0x10805, prALetter},              // Lo   [6] CYPRIOT SYLLABLE A..CYPRIOT SYLLABLE JA
-	{0x10808, 0x10808, prALetter},              // Lo       CYPRIOT SYLLABLE JO
-	{0x1080A, 0x10835, prALetter},              // Lo  [44] CYPRIOT SYLLABLE KA..CYPRIOT SYLLABLE WO
-	{0x10837, 0x10838, prALetter},              // Lo   [2] CYPRIOT SYLLABLE XA..CYPRIOT SYLLABLE XE
-	{0x1083C, 0x1083C, prALetter},              // Lo       CYPRIOT SYLLABLE ZA
-	{0x1083F, 0x10855, prALetter},              // Lo  [23] CYPRIOT SYLLABLE ZO..IMPERIAL ARAMAIC LETTER TAW
-	{0x10860, 0x10876, prALetter},              // Lo  [23] PALMYRENE LETTER ALEPH..PALMYRENE LETTER TAW
-	{0x10880, 0x1089E, prALetter},              // Lo  [31] NABATAEAN LETTER FINAL ALEPH..NABATAEAN LETTER TAW
-	{0x108E0, 0x108F2, prALetter},              // Lo  [19] HATRAN LETTER ALEPH..HATRAN LETTER QOPH
-	{0x108F4, 0x108F5, prALetter},              // Lo   [2] HATRAN LETTER SHIN..HATRAN LETTER TAW
-	{0x10900, 0x10915, prALetter},              // Lo  [22] PHOENICIAN LETTER ALF..PHOENICIAN LETTER TAU
-	{0x10920, 0x10939, prALetter},              // Lo  [26] LYDIAN LETTER A..LYDIAN LETTER C
-	{0x10980, 0x109B7, prALetter},              // Lo  [56] MEROITIC HIEROGLYPHIC LETTER A..MEROITIC CURSIVE LETTER DA
-	{0x109BE, 0x109BF, prALetter},              // Lo   [2] MEROITIC CURSIVE LOGOGRAM RMT..MEROITIC CURSIVE LOGOGRAM IMN
-	{0x10A00, 0x10A00, prALetter},              // Lo       KHAROSHTHI LETTER A
-	{0x10A01, 0x10A03, prExtend},               // Mn   [3] KHAROSHTHI VOWEL SIGN I..KHAROSHTHI VOWEL SIGN VOCALIC R
-	{0x10A05, 0x10A06, prExtend},               // Mn   [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O
-	{0x10A0C, 0x10A0F, prExtend},               // Mn   [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA
-	{0x10A10, 0x10A13, prALetter},              // Lo   [4] KHAROSHTHI LETTER KA..KHAROSHTHI LETTER GHA
-	{0x10A15, 0x10A17, prALetter},              // Lo   [3] KHAROSHTHI LETTER CA..KHAROSHTHI LETTER JA
-	{0x10A19, 0x10A35, prALetter},              // Lo  [29] KHAROSHTHI LETTER NYA..KHAROSHTHI LETTER VHA
-	{0x10A38, 0x10A3A, prExtend},               // Mn   [3] KHAROSHTHI SIGN BAR ABOVE..KHAROSHTHI SIGN DOT BELOW
-	{0x10A3F, 0x10A3F, prExtend},               // Mn       KHAROSHTHI VIRAMA
-	{0x10A60, 0x10A7C, prALetter},              // Lo  [29] OLD SOUTH ARABIAN LETTER HE..OLD SOUTH ARABIAN LETTER THETH
-	{0x10A80, 0x10A9C, prALetter},              // Lo  [29] OLD NORTH ARABIAN LETTER HEH..OLD NORTH ARABIAN LETTER ZAH
-	{0x10AC0, 0x10AC7, prALetter},              // Lo   [8] MANICHAEAN LETTER ALEPH..MANICHAEAN LETTER WAW
-	{0x10AC9, 0x10AE4, prALetter},              // Lo  [28] MANICHAEAN LETTER ZAYIN..MANICHAEAN LETTER TAW
-	{0x10AE5, 0x10AE6, prExtend},               // Mn   [2] MANICHAEAN ABBREVIATION MARK ABOVE..MANICHAEAN ABBREVIATION MARK BELOW
-	{0x10B00, 0x10B35, prALetter},              // Lo  [54] AVESTAN LETTER A..AVESTAN LETTER HE
-	{0x10B40, 0x10B55, prALetter},              // Lo  [22] INSCRIPTIONAL PARTHIAN LETTER ALEPH..INSCRIPTIONAL PARTHIAN LETTER TAW
-	{0x10B60, 0x10B72, prALetter},              // Lo  [19] INSCRIPTIONAL PAHLAVI LETTER ALEPH..INSCRIPTIONAL PAHLAVI LETTER TAW
-	{0x10B80, 0x10B91, prALetter},              // Lo  [18] PSALTER PAHLAVI LETTER ALEPH..PSALTER PAHLAVI LETTER TAW
-	{0x10C00, 0x10C48, prALetter},              // Lo  [73] OLD TURKIC LETTER ORKHON A..OLD TURKIC LETTER ORKHON BASH
-	{0x10C80, 0x10CB2, prALetter},              // L&  [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US
-	{0x10CC0, 0x10CF2, prALetter},              // L&  [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US
-	{0x10D00, 0x10D23, prALetter},              // Lo  [36] HANIFI ROHINGYA LETTER A..HANIFI ROHINGYA MARK NA KHONNA
-	{0x10D24, 0x10D27, prExtend},               // Mn   [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI
-	{0x10D30, 0x10D39, prNumeric},              // Nd  [10] HANIFI ROHINGYA DIGIT ZERO..HANIFI ROHINGYA DIGIT NINE
-	{0x10E80, 0x10EA9, prALetter},              // Lo  [42] YEZIDI LETTER ELIF..YEZIDI LETTER ET
-	{0x10EAB, 0x10EAC, prExtend},               // Mn   [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK
-	{0x10EB0, 0x10EB1, prALetter},              // Lo   [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE
-	{0x10EFD, 0x10EFF, prExtend},               // Mn   [3] ARABIC SMALL LOW WORD SAKTA..ARABIC SMALL LOW WORD MADDA
-	{0x10F00, 0x10F1C, prALetter},              // Lo  [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL
-	{0x10F27, 0x10F27, prALetter},              // Lo       OLD SOGDIAN LIGATURE AYIN-DALETH
-	{0x10F30, 0x10F45, prALetter},              // Lo  [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN
-	{0x10F46, 0x10F50, prExtend},               // Mn  [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW
-	{0x10F70, 0x10F81, prALetter},              // Lo  [18] OLD UYGHUR LETTER ALEPH..OLD UYGHUR LETTER LESH
-	{0x10F82, 0x10F85, prExtend},               // Mn   [4] OLD UYGHUR COMBINING DOT ABOVE..OLD UYGHUR COMBINING TWO DOTS BELOW
-	{0x10FB0, 0x10FC4, prALetter},              // Lo  [21] CHORASMIAN LETTER ALEPH..CHORASMIAN LETTER TAW
-	{0x10FE0, 0x10FF6, prALetter},              // Lo  [23] ELYMAIC LETTER ALEPH..ELYMAIC LIGATURE ZAYIN-YODH
-	{0x11000, 0x11000, prExtend},               // Mc       BRAHMI SIGN CANDRABINDU
-	{0x11001, 0x11001, prExtend},               // Mn       BRAHMI SIGN ANUSVARA
-	{0x11002, 0x11002, prExtend},               // Mc       BRAHMI SIGN VISARGA
-	{0x11003, 0x11037, prALetter},              // Lo  [53] BRAHMI SIGN JIHVAMULIYA..BRAHMI LETTER OLD TAMIL NNNA
-	{0x11038, 0x11046, prExtend},               // Mn  [15] BRAHMI VOWEL SIGN AA..BRAHMI VIRAMA
-	{0x11066, 0x1106F, prNumeric},              // Nd  [10] BRAHMI DIGIT ZERO..BRAHMI DIGIT NINE
-	{0x11070, 0x11070, prExtend},               // Mn       BRAHMI SIGN OLD TAMIL VIRAMA
-	{0x11071, 0x11072, prALetter},              // Lo   [2] BRAHMI LETTER OLD TAMIL SHORT E..BRAHMI LETTER OLD TAMIL SHORT O
-	{0x11073, 0x11074, prExtend},               // Mn   [2] BRAHMI VOWEL SIGN OLD TAMIL SHORT E..BRAHMI VOWEL SIGN OLD TAMIL SHORT O
-	{0x11075, 0x11075, prALetter},              // Lo       BRAHMI LETTER OLD TAMIL LLA
-	{0x1107F, 0x11081, prExtend},               // Mn   [3] BRAHMI NUMBER JOINER..KAITHI SIGN ANUSVARA
-	{0x11082, 0x11082, prExtend},               // Mc       KAITHI SIGN VISARGA
-	{0x11083, 0x110AF, prALetter},              // Lo  [45] KAITHI LETTER A..KAITHI LETTER HA
-	{0x110B0, 0x110B2, prExtend},               // Mc   [3] KAITHI VOWEL SIGN AA..KAITHI VOWEL SIGN II
-	{0x110B3, 0x110B6, prExtend},               // Mn   [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI
-	{0x110B7, 0x110B8, prExtend},               // Mc   [2] KAITHI VOWEL SIGN O..KAITHI VOWEL SIGN AU
-	{0x110B9, 0x110BA, prExtend},               // Mn   [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA
-	{0x110BD, 0x110BD, prFormat},               // Cf       KAITHI NUMBER SIGN
-	{0x110C2, 0x110C2, prExtend},               // Mn       KAITHI VOWEL SIGN VOCALIC R
-	{0x110CD, 0x110CD, prFormat},               // Cf       KAITHI NUMBER SIGN ABOVE
-	{0x110D0, 0x110E8, prALetter},              // Lo  [25] SORA SOMPENG LETTER SAH..SORA SOMPENG LETTER MAE
-	{0x110F0, 0x110F9, prNumeric},              // Nd  [10] SORA SOMPENG DIGIT ZERO..SORA SOMPENG DIGIT NINE
-	{0x11100, 0x11102, prExtend},               // Mn   [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA
-	{0x11103, 0x11126, prALetter},              // Lo  [36] CHAKMA LETTER AA..CHAKMA LETTER HAA
-	{0x11127, 0x1112B, prExtend},               // Mn   [5] CHAKMA VOWEL SIGN A..CHAKMA VOWEL SIGN UU
-	{0x1112C, 0x1112C, prExtend},               // Mc       CHAKMA VOWEL SIGN E
-	{0x1112D, 0x11134, prExtend},               // Mn   [8] CHAKMA VOWEL SIGN AI..CHAKMA MAAYYAA
-	{0x11136, 0x1113F, prNumeric},              // Nd  [10] CHAKMA DIGIT ZERO..CHAKMA DIGIT NINE
-	{0x11144, 0x11144, prALetter},              // Lo       CHAKMA LETTER LHAA
-	{0x11145, 0x11146, prExtend},               // Mc   [2] CHAKMA VOWEL SIGN AA..CHAKMA VOWEL SIGN EI
-	{0x11147, 0x11147, prALetter},              // Lo       CHAKMA LETTER VAA
-	{0x11150, 0x11172, prALetter},              // Lo  [35] MAHAJANI LETTER A..MAHAJANI LETTER RRA
-	{0x11173, 0x11173, prExtend},               // Mn       MAHAJANI SIGN NUKTA
-	{0x11176, 0x11176, prALetter},              // Lo       MAHAJANI LIGATURE SHRI
-	{0x11180, 0x11181, prExtend},               // Mn   [2] SHARADA SIGN CANDRABINDU..SHARADA SIGN ANUSVARA
-	{0x11182, 0x11182, prExtend},               // Mc       SHARADA SIGN VISARGA
-	{0x11183, 0x111B2, prALetter},              // Lo  [48] SHARADA LETTER A..SHARADA LETTER HA
-	{0x111B3, 0x111B5, prExtend},               // Mc   [3] SHARADA VOWEL SIGN AA..SHARADA VOWEL SIGN II
-	{0x111B6, 0x111BE, prExtend},               // Mn   [9] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN O
-	{0x111BF, 0x111C0, prExtend},               // Mc   [2] SHARADA VOWEL SIGN AU..SHARADA SIGN VIRAMA
-	{0x111C1, 0x111C4, prALetter},              // Lo   [4] SHARADA SIGN AVAGRAHA..SHARADA OM
-	{0x111C9, 0x111CC, prExtend},               // Mn   [4] SHARADA SANDHI MARK..SHARADA EXTRA SHORT VOWEL MARK
-	{0x111CE, 0x111CE, prExtend},               // Mc       SHARADA VOWEL SIGN PRISHTHAMATRA E
-	{0x111CF, 0x111CF, prExtend},               // Mn       SHARADA SIGN INVERTED CANDRABINDU
-	{0x111D0, 0x111D9, prNumeric},              // Nd  [10] SHARADA DIGIT ZERO..SHARADA DIGIT NINE
-	{0x111DA, 0x111DA, prALetter},              // Lo       SHARADA EKAM
-	{0x111DC, 0x111DC, prALetter},              // Lo       SHARADA HEADSTROKE
-	{0x11200, 0x11211, prALetter},              // Lo  [18] KHOJKI LETTER A..KHOJKI LETTER JJA
-	{0x11213, 0x1122B, prALetter},              // Lo  [25] KHOJKI LETTER NYA..KHOJKI LETTER LLA
-	{0x1122C, 0x1122E, prExtend},               // Mc   [3] KHOJKI VOWEL SIGN AA..KHOJKI VOWEL SIGN II
-	{0x1122F, 0x11231, prExtend},               // Mn   [3] KHOJKI VOWEL SIGN U..KHOJKI VOWEL SIGN AI
-	{0x11232, 0x11233, prExtend},               // Mc   [2] KHOJKI VOWEL SIGN O..KHOJKI VOWEL SIGN AU
-	{0x11234, 0x11234, prExtend},               // Mn       KHOJKI SIGN ANUSVARA
-	{0x11235, 0x11235, prExtend},               // Mc       KHOJKI SIGN VIRAMA
-	{0x11236, 0x11237, prExtend},               // Mn   [2] KHOJKI SIGN NUKTA..KHOJKI SIGN SHADDA
-	{0x1123E, 0x1123E, prExtend},               // Mn       KHOJKI SIGN SUKUN
-	{0x1123F, 0x11240, prALetter},              // Lo   [2] KHOJKI LETTER QA..KHOJKI LETTER SHORT I
-	{0x11241, 0x11241, prExtend},               // Mn       KHOJKI VOWEL SIGN VOCALIC R
-	{0x11280, 0x11286, prALetter},              // Lo   [7] MULTANI LETTER A..MULTANI LETTER GA
-	{0x11288, 0x11288, prALetter},              // Lo       MULTANI LETTER GHA
-	{0x1128A, 0x1128D, prALetter},              // Lo   [4] MULTANI LETTER CA..MULTANI LETTER JJA
-	{0x1128F, 0x1129D, prALetter},              // Lo  [15] MULTANI LETTER NYA..MULTANI LETTER BA
-	{0x1129F, 0x112A8, prALetter},              // Lo  [10] MULTANI LETTER BHA..MULTANI LETTER RHA
-	{0x112B0, 0x112DE, prALetter},              // Lo  [47] KHUDAWADI LETTER A..KHUDAWADI LETTER HA
-	{0x112DF, 0x112DF, prExtend},               // Mn       KHUDAWADI SIGN ANUSVARA
-	{0x112E0, 0x112E2, prExtend},               // Mc   [3] KHUDAWADI VOWEL SIGN AA..KHUDAWADI VOWEL SIGN II
-	{0x112E3, 0x112EA, prExtend},               // Mn   [8] KHUDAWADI VOWEL SIGN U..KHUDAWADI SIGN VIRAMA
-	{0x112F0, 0x112F9, prNumeric},              // Nd  [10] KHUDAWADI DIGIT ZERO..KHUDAWADI DIGIT NINE
-	{0x11300, 0x11301, prExtend},               // Mn   [2] GRANTHA SIGN COMBINING ANUSVARA ABOVE..GRANTHA SIGN CANDRABINDU
-	{0x11302, 0x11303, prExtend},               // Mc   [2] GRANTHA SIGN ANUSVARA..GRANTHA SIGN VISARGA
-	{0x11305, 0x1130C, prALetter},              // Lo   [8] GRANTHA LETTER A..GRANTHA LETTER VOCALIC L
-	{0x1130F, 0x11310, prALetter},              // Lo   [2] GRANTHA LETTER EE..GRANTHA LETTER AI
-	{0x11313, 0x11328, prALetter},              // Lo  [22] GRANTHA LETTER OO..GRANTHA LETTER NA
-	{0x1132A, 0x11330, prALetter},              // Lo   [7] GRANTHA LETTER PA..GRANTHA LETTER RA
-	{0x11332, 0x11333, prALetter},              // Lo   [2] GRANTHA LETTER LA..GRANTHA LETTER LLA
-	{0x11335, 0x11339, prALetter},              // Lo   [5] GRANTHA LETTER VA..GRANTHA LETTER HA
-	{0x1133B, 0x1133C, prExtend},               // Mn   [2] COMBINING BINDU BELOW..GRANTHA SIGN NUKTA
-	{0x1133D, 0x1133D, prALetter},              // Lo       GRANTHA SIGN AVAGRAHA
-	{0x1133E, 0x1133F, prExtend},               // Mc   [2] GRANTHA VOWEL SIGN AA..GRANTHA VOWEL SIGN I
-	{0x11340, 0x11340, prExtend},               // Mn       GRANTHA VOWEL SIGN II
-	{0x11341, 0x11344, prExtend},               // Mc   [4] GRANTHA VOWEL SIGN U..GRANTHA VOWEL SIGN VOCALIC RR
-	{0x11347, 0x11348, prExtend},               // Mc   [2] GRANTHA VOWEL SIGN EE..GRANTHA VOWEL SIGN AI
-	{0x1134B, 0x1134D, prExtend},               // Mc   [3] GRANTHA VOWEL SIGN OO..GRANTHA SIGN VIRAMA
-	{0x11350, 0x11350, prALetter},              // Lo       GRANTHA OM
-	{0x11357, 0x11357, prExtend},               // Mc       GRANTHA AU LENGTH MARK
-	{0x1135D, 0x11361, prALetter},              // Lo   [5] GRANTHA SIGN PLUTA..GRANTHA LETTER VOCALIC LL
-	{0x11362, 0x11363, prExtend},               // Mc   [2] GRANTHA VOWEL SIGN VOCALIC L..GRANTHA VOWEL SIGN VOCALIC LL
-	{0x11366, 0x1136C, prExtend},               // Mn   [7] COMBINING GRANTHA DIGIT ZERO..COMBINING GRANTHA DIGIT SIX
-	{0x11370, 0x11374, prExtend},               // Mn   [5] COMBINING GRANTHA LETTER A..COMBINING GRANTHA LETTER PA
-	{0x11400, 0x11434, prALetter},              // Lo  [53] NEWA LETTER A..NEWA LETTER HA
-	{0x11435, 0x11437, prExtend},               // Mc   [3] NEWA VOWEL SIGN AA..NEWA VOWEL SIGN II
-	{0x11438, 0x1143F, prExtend},               // Mn   [8] NEWA VOWEL SIGN U..NEWA VOWEL SIGN AI
-	{0x11440, 0x11441, prExtend},               // Mc   [2] NEWA VOWEL SIGN O..NEWA VOWEL SIGN AU
-	{0x11442, 0x11444, prExtend},               // Mn   [3] NEWA SIGN VIRAMA..NEWA SIGN ANUSVARA
-	{0x11445, 0x11445, prExtend},               // Mc       NEWA SIGN VISARGA
-	{0x11446, 0x11446, prExtend},               // Mn       NEWA SIGN NUKTA
-	{0x11447, 0x1144A, prALetter},              // Lo   [4] NEWA SIGN AVAGRAHA..NEWA SIDDHI
-	{0x11450, 0x11459, prNumeric},              // Nd  [10] NEWA DIGIT ZERO..NEWA DIGIT NINE
-	{0x1145E, 0x1145E, prExtend},               // Mn       NEWA SANDHI MARK
-	{0x1145F, 0x11461, prALetter},              // Lo   [3] NEWA LETTER VEDIC ANUSVARA..NEWA SIGN UPADHMANIYA
-	{0x11480, 0x114AF, prALetter},              // Lo  [48] TIRHUTA ANJI..TIRHUTA LETTER HA
-	{0x114B0, 0x114B2, prExtend},               // Mc   [3] TIRHUTA VOWEL SIGN AA..TIRHUTA VOWEL SIGN II
-	{0x114B3, 0x114B8, prExtend},               // Mn   [6] TIRHUTA VOWEL SIGN U..TIRHUTA VOWEL SIGN VOCALIC LL
-	{0x114B9, 0x114B9, prExtend},               // Mc       TIRHUTA VOWEL SIGN E
-	{0x114BA, 0x114BA, prExtend},               // Mn       TIRHUTA VOWEL SIGN SHORT E
-	{0x114BB, 0x114BE, prExtend},               // Mc   [4] TIRHUTA VOWEL SIGN AI..TIRHUTA VOWEL SIGN AU
-	{0x114BF, 0x114C0, prExtend},               // Mn   [2] TIRHUTA SIGN CANDRABINDU..TIRHUTA SIGN ANUSVARA
-	{0x114C1, 0x114C1, prExtend},               // Mc       TIRHUTA SIGN VISARGA
-	{0x114C2, 0x114C3, prExtend},               // Mn   [2] TIRHUTA SIGN VIRAMA..TIRHUTA SIGN NUKTA
-	{0x114C4, 0x114C5, prALetter},              // Lo   [2] TIRHUTA SIGN AVAGRAHA..TIRHUTA GVANG
-	{0x114C7, 0x114C7, prALetter},              // Lo       TIRHUTA OM
-	{0x114D0, 0x114D9, prNumeric},              // Nd  [10] TIRHUTA DIGIT ZERO..TIRHUTA DIGIT NINE
-	{0x11580, 0x115AE, prALetter},              // Lo  [47] SIDDHAM LETTER A..SIDDHAM LETTER HA
-	{0x115AF, 0x115B1, prExtend},               // Mc   [3] SIDDHAM VOWEL SIGN AA..SIDDHAM VOWEL SIGN II
-	{0x115B2, 0x115B5, prExtend},               // Mn   [4] SIDDHAM VOWEL SIGN U..SIDDHAM VOWEL SIGN VOCALIC RR
-	{0x115B8, 0x115BB, prExtend},               // Mc   [4] SIDDHAM VOWEL SIGN E..SIDDHAM VOWEL SIGN AU
-	{0x115BC, 0x115BD, prExtend},               // Mn   [2] SIDDHAM SIGN CANDRABINDU..SIDDHAM SIGN ANUSVARA
-	{0x115BE, 0x115BE, prExtend},               // Mc       SIDDHAM SIGN VISARGA
-	{0x115BF, 0x115C0, prExtend},               // Mn   [2] SIDDHAM SIGN VIRAMA..SIDDHAM SIGN NUKTA
-	{0x115D8, 0x115DB, prALetter},              // Lo   [4] SIDDHAM LETTER THREE-CIRCLE ALTERNATE I..SIDDHAM LETTER ALTERNATE U
-	{0x115DC, 0x115DD, prExtend},               // Mn   [2] SIDDHAM VOWEL SIGN ALTERNATE U..SIDDHAM VOWEL SIGN ALTERNATE UU
-	{0x11600, 0x1162F, prALetter},              // Lo  [48] MODI LETTER A..MODI LETTER LLA
-	{0x11630, 0x11632, prExtend},               // Mc   [3] MODI VOWEL SIGN AA..MODI VOWEL SIGN II
-	{0x11633, 0x1163A, prExtend},               // Mn   [8] MODI VOWEL SIGN U..MODI VOWEL SIGN AI
-	{0x1163B, 0x1163C, prExtend},               // Mc   [2] MODI VOWEL SIGN O..MODI VOWEL SIGN AU
-	{0x1163D, 0x1163D, prExtend},               // Mn       MODI SIGN ANUSVARA
-	{0x1163E, 0x1163E, prExtend},               // Mc       MODI SIGN VISARGA
-	{0x1163F, 0x11640, prExtend},               // Mn   [2] MODI SIGN VIRAMA..MODI SIGN ARDHACANDRA
-	{0x11644, 0x11644, prALetter},              // Lo       MODI SIGN HUVA
-	{0x11650, 0x11659, prNumeric},              // Nd  [10] MODI DIGIT ZERO..MODI DIGIT NINE
-	{0x11680, 0x116AA, prALetter},              // Lo  [43] TAKRI LETTER A..TAKRI LETTER RRA
-	{0x116AB, 0x116AB, prExtend},               // Mn       TAKRI SIGN ANUSVARA
-	{0x116AC, 0x116AC, prExtend},               // Mc       TAKRI SIGN VISARGA
-	{0x116AD, 0x116AD, prExtend},               // Mn       TAKRI VOWEL SIGN AA
-	{0x116AE, 0x116AF, prExtend},               // Mc   [2] TAKRI VOWEL SIGN I..TAKRI VOWEL SIGN II
-	{0x116B0, 0x116B5, prExtend},               // Mn   [6] TAKRI VOWEL SIGN U..TAKRI VOWEL SIGN AU
-	{0x116B6, 0x116B6, prExtend},               // Mc       TAKRI SIGN VIRAMA
-	{0x116B7, 0x116B7, prExtend},               // Mn       TAKRI SIGN NUKTA
-	{0x116B8, 0x116B8, prALetter},              // Lo       TAKRI LETTER ARCHAIC KHA
-	{0x116C0, 0x116C9, prNumeric},              // Nd  [10] TAKRI DIGIT ZERO..TAKRI DIGIT NINE
-	{0x1171D, 0x1171F, prExtend},               // Mn   [3] AHOM CONSONANT SIGN MEDIAL LA..AHOM CONSONANT SIGN MEDIAL LIGATING RA
-	{0x11720, 0x11721, prExtend},               // Mc   [2] AHOM VOWEL SIGN A..AHOM VOWEL SIGN AA
-	{0x11722, 0x11725, prExtend},               // Mn   [4] AHOM VOWEL SIGN I..AHOM VOWEL SIGN UU
-	{0x11726, 0x11726, prExtend},               // Mc       AHOM VOWEL SIGN E
-	{0x11727, 0x1172B, prExtend},               // Mn   [5] AHOM VOWEL SIGN AW..AHOM SIGN KILLER
-	{0x11730, 0x11739, prNumeric},              // Nd  [10] AHOM DIGIT ZERO..AHOM DIGIT NINE
-	{0x11800, 0x1182B, prALetter},              // Lo  [44] DOGRA LETTER A..DOGRA LETTER RRA
-	{0x1182C, 0x1182E, prExtend},               // Mc   [3] DOGRA VOWEL SIGN AA..DOGRA VOWEL SIGN II
-	{0x1182F, 0x11837, prExtend},               // Mn   [9] DOGRA VOWEL SIGN U..DOGRA SIGN ANUSVARA
-	{0x11838, 0x11838, prExtend},               // Mc       DOGRA SIGN VISARGA
-	{0x11839, 0x1183A, prExtend},               // Mn   [2] DOGRA SIGN VIRAMA..DOGRA SIGN NUKTA
-	{0x118A0, 0x118DF, prALetter},              // L&  [64] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI SMALL LETTER VIYO
-	{0x118E0, 0x118E9, prNumeric},              // Nd  [10] WARANG CITI DIGIT ZERO..WARANG CITI DIGIT NINE
-	{0x118FF, 0x11906, prALetter},              // Lo   [8] WARANG CITI OM..DIVES AKURU LETTER E
-	{0x11909, 0x11909, prALetter},              // Lo       DIVES AKURU LETTER O
-	{0x1190C, 0x11913, prALetter},              // Lo   [8] DIVES AKURU LETTER KA..DIVES AKURU LETTER JA
-	{0x11915, 0x11916, prALetter},              // Lo   [2] DIVES AKURU LETTER NYA..DIVES AKURU LETTER TTA
-	{0x11918, 0x1192F, prALetter},              // Lo  [24] DIVES AKURU LETTER DDA..DIVES AKURU LETTER ZA
-	{0x11930, 0x11935, prExtend},               // Mc   [6] DIVES AKURU VOWEL SIGN AA..DIVES AKURU VOWEL SIGN E
-	{0x11937, 0x11938, prExtend},               // Mc   [2] DIVES AKURU VOWEL SIGN AI..DIVES AKURU VOWEL SIGN O
-	{0x1193B, 0x1193C, prExtend},               // Mn   [2] DIVES AKURU SIGN ANUSVARA..DIVES AKURU SIGN CANDRABINDU
-	{0x1193D, 0x1193D, prExtend},               // Mc       DIVES AKURU SIGN HALANTA
-	{0x1193E, 0x1193E, prExtend},               // Mn       DIVES AKURU VIRAMA
-	{0x1193F, 0x1193F, prALetter},              // Lo       DIVES AKURU PREFIXED NASAL SIGN
-	{0x11940, 0x11940, prExtend},               // Mc       DIVES AKURU MEDIAL YA
-	{0x11941, 0x11941, prALetter},              // Lo       DIVES AKURU INITIAL RA
-	{0x11942, 0x11942, prExtend},               // Mc       DIVES AKURU MEDIAL RA
-	{0x11943, 0x11943, prExtend},               // Mn       DIVES AKURU SIGN NUKTA
-	{0x11950, 0x11959, prNumeric},              // Nd  [10] DIVES AKURU DIGIT ZERO..DIVES AKURU DIGIT NINE
-	{0x119A0, 0x119A7, prALetter},              // Lo   [8] NANDINAGARI LETTER A..NANDINAGARI LETTER VOCALIC RR
-	{0x119AA, 0x119D0, prALetter},              // Lo  [39] NANDINAGARI LETTER E..NANDINAGARI LETTER RRA
-	{0x119D1, 0x119D3, prExtend},               // Mc   [3] NANDINAGARI VOWEL SIGN AA..NANDINAGARI VOWEL SIGN II
-	{0x119D4, 0x119D7, prExtend},               // Mn   [4] NANDINAGARI VOWEL SIGN U..NANDINAGARI VOWEL SIGN VOCALIC RR
-	{0x119DA, 0x119DB, prExtend},               // Mn   [2] NANDINAGARI VOWEL SIGN E..NANDINAGARI VOWEL SIGN AI
-	{0x119DC, 0x119DF, prExtend},               // Mc   [4] NANDINAGARI VOWEL SIGN O..NANDINAGARI SIGN VISARGA
-	{0x119E0, 0x119E0, prExtend},               // Mn       NANDINAGARI SIGN VIRAMA
-	{0x119E1, 0x119E1, prALetter},              // Lo       NANDINAGARI SIGN AVAGRAHA
-	{0x119E3, 0x119E3, prALetter},              // Lo       NANDINAGARI HEADSTROKE
-	{0x119E4, 0x119E4, prExtend},               // Mc       NANDINAGARI VOWEL SIGN PRISHTHAMATRA E
-	{0x11A00, 0x11A00, prALetter},              // Lo       ZANABAZAR SQUARE LETTER A
-	{0x11A01, 0x11A0A, prExtend},               // Mn  [10] ZANABAZAR SQUARE VOWEL SIGN I..ZANABAZAR SQUARE VOWEL LENGTH MARK
-	{0x11A0B, 0x11A32, prALetter},              // Lo  [40] ZANABAZAR SQUARE LETTER KA..ZANABAZAR SQUARE LETTER KSSA
-	{0x11A33, 0x11A38, prExtend},               // Mn   [6] ZANABAZAR SQUARE FINAL CONSONANT MARK..ZANABAZAR SQUARE SIGN ANUSVARA
-	{0x11A39, 0x11A39, prExtend},               // Mc       ZANABAZAR SQUARE SIGN VISARGA
-	{0x11A3A, 0x11A3A, prALetter},              // Lo       ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA
-	{0x11A3B, 0x11A3E, prExtend},               // Mn   [4] ZANABAZAR SQUARE CLUSTER-FINAL LETTER YA..ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA
-	{0x11A47, 0x11A47, prExtend},               // Mn       ZANABAZAR SQUARE SUBJOINER
-	{0x11A50, 0x11A50, prALetter},              // Lo       SOYOMBO LETTER A
-	{0x11A51, 0x11A56, prExtend},               // Mn   [6] SOYOMBO VOWEL SIGN I..SOYOMBO VOWEL SIGN OE
-	{0x11A57, 0x11A58, prExtend},               // Mc   [2] SOYOMBO VOWEL SIGN AI..SOYOMBO VOWEL SIGN AU
-	{0x11A59, 0x11A5B, prExtend},               // Mn   [3] SOYOMBO VOWEL SIGN VOCALIC R..SOYOMBO VOWEL LENGTH MARK
-	{0x11A5C, 0x11A89, prALetter},              // Lo  [46] SOYOMBO LETTER KA..SOYOMBO CLUSTER-INITIAL LETTER SA
-	{0x11A8A, 0x11A96, prExtend},               // Mn  [13] SOYOMBO FINAL CONSONANT SIGN G..SOYOMBO SIGN ANUSVARA
-	{0x11A97, 0x11A97, prExtend},               // Mc       SOYOMBO SIGN VISARGA
-	{0x11A98, 0x11A99, prExtend},               // Mn   [2] SOYOMBO GEMINATION MARK..SOYOMBO SUBJOINER
-	{0x11A9D, 0x11A9D, prALetter},              // Lo       SOYOMBO MARK PLUTA
-	{0x11AB0, 0x11AF8, prALetter},              // Lo  [73] CANADIAN SYLLABICS NATTILIK HI..PAU CIN HAU GLOTTAL STOP FINAL
-	{0x11C00, 0x11C08, prALetter},              // Lo   [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L
-	{0x11C0A, 0x11C2E, prALetter},              // Lo  [37] BHAIKSUKI LETTER E..BHAIKSUKI LETTER HA
-	{0x11C2F, 0x11C2F, prExtend},               // Mc       BHAIKSUKI VOWEL SIGN AA
-	{0x11C30, 0x11C36, prExtend},               // Mn   [7] BHAIKSUKI VOWEL SIGN I..BHAIKSUKI VOWEL SIGN VOCALIC L
-	{0x11C38, 0x11C3D, prExtend},               // Mn   [6] BHAIKSUKI VOWEL SIGN E..BHAIKSUKI SIGN ANUSVARA
-	{0x11C3E, 0x11C3E, prExtend},               // Mc       BHAIKSUKI SIGN VISARGA
-	{0x11C3F, 0x11C3F, prExtend},               // Mn       BHAIKSUKI SIGN VIRAMA
-	{0x11C40, 0x11C40, prALetter},              // Lo       BHAIKSUKI SIGN AVAGRAHA
-	{0x11C50, 0x11C59, prNumeric},              // Nd  [10] BHAIKSUKI DIGIT ZERO..BHAIKSUKI DIGIT NINE
-	{0x11C72, 0x11C8F, prALetter},              // Lo  [30] MARCHEN LETTER KA..MARCHEN LETTER A
-	{0x11C92, 0x11CA7, prExtend},               // Mn  [22] MARCHEN SUBJOINED LETTER KA..MARCHEN SUBJOINED LETTER ZA
-	{0x11CA9, 0x11CA9, prExtend},               // Mc       MARCHEN SUBJOINED LETTER YA
-	{0x11CAA, 0x11CB0, prExtend},               // Mn   [7] MARCHEN SUBJOINED LETTER RA..MARCHEN VOWEL SIGN AA
-	{0x11CB1, 0x11CB1, prExtend},               // Mc       MARCHEN VOWEL SIGN I
-	{0x11CB2, 0x11CB3, prExtend},               // Mn   [2] MARCHEN VOWEL SIGN U..MARCHEN VOWEL SIGN E
-	{0x11CB4, 0x11CB4, prExtend},               // Mc       MARCHEN VOWEL SIGN O
-	{0x11CB5, 0x11CB6, prExtend},               // Mn   [2] MARCHEN SIGN ANUSVARA..MARCHEN SIGN CANDRABINDU
-	{0x11D00, 0x11D06, prALetter},              // Lo   [7] MASARAM GONDI LETTER A..MASARAM GONDI LETTER E
-	{0x11D08, 0x11D09, prALetter},              // Lo   [2] MASARAM GONDI LETTER AI..MASARAM GONDI LETTER O
-	{0x11D0B, 0x11D30, prALetter},              // Lo  [38] MASARAM GONDI LETTER AU..MASARAM GONDI LETTER TRA
-	{0x11D31, 0x11D36, prExtend},               // Mn   [6] MASARAM GONDI VOWEL SIGN AA..MASARAM GONDI VOWEL SIGN VOCALIC R
-	{0x11D3A, 0x11D3A, prExtend},               // Mn       MASARAM GONDI VOWEL SIGN E
-	{0x11D3C, 0x11D3D, prExtend},               // Mn   [2] MASARAM GONDI VOWEL SIGN AI..MASARAM GONDI VOWEL SIGN O
-	{0x11D3F, 0x11D45, prExtend},               // Mn   [7] MASARAM GONDI VOWEL SIGN AU..MASARAM GONDI VIRAMA
-	{0x11D46, 0x11D46, prALetter},              // Lo       MASARAM GONDI REPHA
-	{0x11D47, 0x11D47, prExtend},               // Mn       MASARAM GONDI RA-KARA
-	{0x11D50, 0x11D59, prNumeric},              // Nd  [10] MASARAM GONDI DIGIT ZERO..MASARAM GONDI DIGIT NINE
-	{0x11D60, 0x11D65, prALetter},              // Lo   [6] GUNJALA GONDI LETTER A..GUNJALA GONDI LETTER UU
-	{0x11D67, 0x11D68, prALetter},              // Lo   [2] GUNJALA GONDI LETTER EE..GUNJALA GONDI LETTER AI
-	{0x11D6A, 0x11D89, prALetter},              // Lo  [32] GUNJALA GONDI LETTER OO..GUNJALA GONDI LETTER SA
-	{0x11D8A, 0x11D8E, prExtend},               // Mc   [5] GUNJALA GONDI VOWEL SIGN AA..GUNJALA GONDI VOWEL SIGN UU
-	{0x11D90, 0x11D91, prExtend},               // Mn   [2] GUNJALA GONDI VOWEL SIGN EE..GUNJALA GONDI VOWEL SIGN AI
-	{0x11D93, 0x11D94, prExtend},               // Mc   [2] GUNJALA GONDI VOWEL SIGN OO..GUNJALA GONDI VOWEL SIGN AU
-	{0x11D95, 0x11D95, prExtend},               // Mn       GUNJALA GONDI SIGN ANUSVARA
-	{0x11D96, 0x11D96, prExtend},               // Mc       GUNJALA GONDI SIGN VISARGA
-	{0x11D97, 0x11D97, prExtend},               // Mn       GUNJALA GONDI VIRAMA
-	{0x11D98, 0x11D98, prALetter},              // Lo       GUNJALA GONDI OM
-	{0x11DA0, 0x11DA9, prNumeric},              // Nd  [10] GUNJALA GONDI DIGIT ZERO..GUNJALA GONDI DIGIT NINE
-	{0x11EE0, 0x11EF2, prALetter},              // Lo  [19] MAKASAR LETTER KA..MAKASAR ANGKA
-	{0x11EF3, 0x11EF4, prExtend},               // Mn   [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U
-	{0x11EF5, 0x11EF6, prExtend},               // Mc   [2] MAKASAR VOWEL SIGN E..MAKASAR VOWEL SIGN O
-	{0x11F00, 0x11F01, prExtend},               // Mn   [2] KAWI SIGN CANDRABINDU..KAWI SIGN ANUSVARA
-	{0x11F02, 0x11F02, prALetter},              // Lo       KAWI SIGN REPHA
-	{0x11F03, 0x11F03, prExtend},               // Mc       KAWI SIGN VISARGA
-	{0x11F04, 0x11F10, prALetter},              // Lo  [13] KAWI LETTER A..KAWI LETTER O
-	{0x11F12, 0x11F33, prALetter},              // Lo  [34] KAWI LETTER KA..KAWI LETTER JNYA
-	{0x11F34, 0x11F35, prExtend},               // Mc   [2] KAWI VOWEL SIGN AA..KAWI VOWEL SIGN ALTERNATE AA
-	{0x11F36, 0x11F3A, prExtend},               // Mn   [5] KAWI VOWEL SIGN I..KAWI VOWEL SIGN VOCALIC R
-	{0x11F3E, 0x11F3F, prExtend},               // Mc   [2] KAWI VOWEL SIGN E..KAWI VOWEL SIGN AI
-	{0x11F40, 0x11F40, prExtend},               // Mn       KAWI VOWEL SIGN EU
-	{0x11F41, 0x11F41, prExtend},               // Mc       KAWI SIGN KILLER
-	{0x11F42, 0x11F42, prExtend},               // Mn       KAWI CONJOINER
-	{0x11F50, 0x11F59, prNumeric},              // Nd  [10] KAWI DIGIT ZERO..KAWI DIGIT NINE
-	{0x11FB0, 0x11FB0, prALetter},              // Lo       LISU LETTER YHA
-	{0x12000, 0x12399, prALetter},              // Lo [922] CUNEIFORM SIGN A..CUNEIFORM SIGN U U
-	{0x12400, 0x1246E, prALetter},              // Nl [111] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM
-	{0x12480, 0x12543, prALetter},              // Lo [196] CUNEIFORM SIGN AB TIMES NUN TENU..CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU
-	{0x12F90, 0x12FF0, prALetter},              // Lo  [97] CYPRO-MINOAN SIGN CM001..CYPRO-MINOAN SIGN CM114
-	{0x13000, 0x1342F, prALetter},              // Lo [1072] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH V011D
-	{0x13430, 0x1343F, prFormat},               // Cf  [16] EGYPTIAN HIEROGLYPH VERTICAL JOINER..EGYPTIAN HIEROGLYPH END WALLED ENCLOSURE
-	{0x13440, 0x13440, prExtend},               // Mn       EGYPTIAN HIEROGLYPH MIRROR HORIZONTALLY
-	{0x13441, 0x13446, prALetter},              // Lo   [6] EGYPTIAN HIEROGLYPH FULL BLANK..EGYPTIAN HIEROGLYPH WIDE LOST SIGN
-	{0x13447, 0x13455, prExtend},               // Mn  [15] EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP START..EGYPTIAN HIEROGLYPH MODIFIER DAMAGED
-	{0x14400, 0x14646, prALetter},              // Lo [583] ANATOLIAN HIEROGLYPH A001..ANATOLIAN HIEROGLYPH A530
-	{0x16800, 0x16A38, prALetter},              // Lo [569] BAMUM LETTER PHASE-A NGKUE MFON..BAMUM LETTER PHASE-F VUEQ
-	{0x16A40, 0x16A5E, prALetter},              // Lo  [31] MRO LETTER TA..MRO LETTER TEK
-	{0x16A60, 0x16A69, prNumeric},              // Nd  [10] MRO DIGIT ZERO..MRO DIGIT NINE
-	{0x16A70, 0x16ABE, prALetter},              // Lo  [79] TANGSA LETTER OZ..TANGSA LETTER ZA
-	{0x16AC0, 0x16AC9, prNumeric},              // Nd  [10] TANGSA DIGIT ZERO..TANGSA DIGIT NINE
-	{0x16AD0, 0x16AED, prALetter},              // Lo  [30] BASSA VAH LETTER ENNI..BASSA VAH LETTER I
-	{0x16AF0, 0x16AF4, prExtend},               // Mn   [5] BASSA VAH COMBINING HIGH TONE..BASSA VAH COMBINING HIGH-LOW TONE
-	{0x16B00, 0x16B2F, prALetter},              // Lo  [48] PAHAWH HMONG VOWEL KEEB..PAHAWH HMONG CONSONANT CAU
-	{0x16B30, 0x16B36, prExtend},               // Mn   [7] PAHAWH HMONG MARK CIM TUB..PAHAWH HMONG MARK CIM TAUM
-	{0x16B40, 0x16B43, prALetter},              // Lm   [4] PAHAWH HMONG SIGN VOS SEEV..PAHAWH HMONG SIGN IB YAM
-	{0x16B50, 0x16B59, prNumeric},              // Nd  [10] PAHAWH HMONG DIGIT ZERO..PAHAWH HMONG DIGIT NINE
-	{0x16B63, 0x16B77, prALetter},              // Lo  [21] PAHAWH HMONG SIGN VOS LUB..PAHAWH HMONG SIGN CIM NRES TOS
-	{0x16B7D, 0x16B8F, prALetter},              // Lo  [19] PAHAWH HMONG CLAN SIGN TSHEEJ..PAHAWH HMONG CLAN SIGN VWJ
-	{0x16E40, 0x16E7F, prALetter},              // L&  [64] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN SMALL LETTER Y
-	{0x16F00, 0x16F4A, prALetter},              // Lo  [75] MIAO LETTER PA..MIAO LETTER RTE
-	{0x16F4F, 0x16F4F, prExtend},               // Mn       MIAO SIGN CONSONANT MODIFIER BAR
-	{0x16F50, 0x16F50, prALetter},              // Lo       MIAO LETTER NASALIZATION
-	{0x16F51, 0x16F87, prExtend},               // Mc  [55] MIAO SIGN ASPIRATION..MIAO VOWEL SIGN UI
-	{0x16F8F, 0x16F92, prExtend},               // Mn   [4] MIAO TONE RIGHT..MIAO TONE BELOW
-	{0x16F93, 0x16F9F, prALetter},              // Lm  [13] MIAO LETTER TONE-2..MIAO LETTER REFORMED TONE-8
-	{0x16FE0, 0x16FE1, prALetter},              // Lm   [2] TANGUT ITERATION MARK..NUSHU ITERATION MARK
-	{0x16FE3, 0x16FE3, prALetter},              // Lm       OLD CHINESE ITERATION MARK
-	{0x16FE4, 0x16FE4, prExtend},               // Mn       KHITAN SMALL SCRIPT FILLER
-	{0x16FF0, 0x16FF1, prExtend},               // Mc   [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY
-	{0x1AFF0, 0x1AFF3, prKatakana},             // Lm   [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5
-	{0x1AFF5, 0x1AFFB, prKatakana},             // Lm   [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5
-	{0x1AFFD, 0x1AFFE, prKatakana},             // Lm   [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8
-	{0x1B000, 0x1B000, prKatakana},             // Lo       KATAKANA LETTER ARCHAIC E
-	{0x1B120, 0x1B122, prKatakana},             // Lo   [3] KATAKANA LETTER ARCHAIC YI..KATAKANA LETTER ARCHAIC WU
-	{0x1B155, 0x1B155, prKatakana},             // Lo       KATAKANA LETTER SMALL KO
-	{0x1B164, 0x1B167, prKatakana},             // Lo   [4] KATAKANA LETTER SMALL WI..KATAKANA LETTER SMALL N
-	{0x1BC00, 0x1BC6A, prALetter},              // Lo [107] DUPLOYAN LETTER H..DUPLOYAN LETTER VOCALIC M
-	{0x1BC70, 0x1BC7C, prALetter},              // Lo  [13] DUPLOYAN AFFIX LEFT HORIZONTAL SECANT..DUPLOYAN AFFIX ATTACHED TANGENT HOOK
-	{0x1BC80, 0x1BC88, prALetter},              // Lo   [9] DUPLOYAN AFFIX HIGH ACUTE..DUPLOYAN AFFIX HIGH VERTICAL
-	{0x1BC90, 0x1BC99, prALetter},              // Lo  [10] DUPLOYAN AFFIX LOW ACUTE..DUPLOYAN AFFIX LOW ARROW
-	{0x1BC9D, 0x1BC9E, prExtend},               // Mn   [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK
-	{0x1BCA0, 0x1BCA3, prFormat},               // Cf   [4] SHORTHAND FORMAT LETTER OVERLAP..SHORTHAND FORMAT UP STEP
-	{0x1CF00, 0x1CF2D, prExtend},               // Mn  [46] ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT..ZNAMENNY COMBINING MARK KRYZH ON LEFT
-	{0x1CF30, 0x1CF46, prExtend},               // Mn  [23] ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO..ZNAMENNY PRIZNAK MODIFIER ROG
-	{0x1D165, 0x1D166, prExtend},               // Mc   [2] MUSICAL SYMBOL COMBINING STEM..MUSICAL SYMBOL COMBINING SPRECHGESANG STEM
-	{0x1D167, 0x1D169, prExtend},               // Mn   [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3
-	{0x1D16D, 0x1D172, prExtend},               // Mc   [6] MUSICAL SYMBOL COMBINING AUGMENTATION DOT..MUSICAL SYMBOL COMBINING FLAG-5
-	{0x1D173, 0x1D17A, prFormat},               // Cf   [8] MUSICAL SYMBOL BEGIN BEAM..MUSICAL SYMBOL END PHRASE
-	{0x1D17B, 0x1D182, prExtend},               // Mn   [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE
-	{0x1D185, 0x1D18B, prExtend},               // Mn   [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE
-	{0x1D1AA, 0x1D1AD, prExtend},               // Mn   [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO
-	{0x1D242, 0x1D244, prExtend},               // Mn   [3] COMBINING GREEK MUSICAL TRISEME..COMBINING GREEK MUSICAL PENTASEME
-	{0x1D400, 0x1D454, prALetter},              // L&  [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G
-	{0x1D456, 0x1D49C, prALetter},              // L&  [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A
-	{0x1D49E, 0x1D49F, prALetter},              // L&   [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D
-	{0x1D4A2, 0x1D4A2, prALetter},              // L&       MATHEMATICAL SCRIPT CAPITAL G
-	{0x1D4A5, 0x1D4A6, prALetter},              // L&   [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K
-	{0x1D4A9, 0x1D4AC, prALetter},              // L&   [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q
-	{0x1D4AE, 0x1D4B9, prALetter},              // L&  [12] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT SMALL D
-	{0x1D4BB, 0x1D4BB, prALetter},              // L&       MATHEMATICAL SCRIPT SMALL F
-	{0x1D4BD, 0x1D4C3, prALetter},              // L&   [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N
-	{0x1D4C5, 0x1D505, prALetter},              // L&  [65] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL FRAKTUR CAPITAL B
-	{0x1D507, 0x1D50A, prALetter},              // L&   [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G
-	{0x1D50D, 0x1D514, prALetter},              // L&   [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q
-	{0x1D516, 0x1D51C, prALetter},              // L&   [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y
-	{0x1D51E, 0x1D539, prALetter},              // L&  [28] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B
-	{0x1D53B, 0x1D53E, prALetter},              // L&   [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G
-	{0x1D540, 0x1D544, prALetter},              // L&   [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M
-	{0x1D546, 0x1D546, prALetter},              // L&       MATHEMATICAL DOUBLE-STRUCK CAPITAL O
-	{0x1D54A, 0x1D550, prALetter},              // L&   [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y
-	{0x1D552, 0x1D6A5, prALetter},              // L& [340] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL ITALIC SMALL DOTLESS J
-	{0x1D6A8, 0x1D6C0, prALetter},              // L&  [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA
-	{0x1D6C2, 0x1D6DA, prALetter},              // L&  [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA
-	{0x1D6DC, 0x1D6FA, prALetter},              // L&  [31] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL ITALIC CAPITAL OMEGA
-	{0x1D6FC, 0x1D714, prALetter},              // L&  [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA
-	{0x1D716, 0x1D734, prALetter},              // L&  [31] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA
-	{0x1D736, 0x1D74E, prALetter},              // L&  [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA
-	{0x1D750, 0x1D76E, prALetter},              // L&  [31] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA
-	{0x1D770, 0x1D788, prALetter},              // L&  [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA
-	{0x1D78A, 0x1D7A8, prALetter},              // L&  [31] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA
-	{0x1D7AA, 0x1D7C2, prALetter},              // L&  [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA
-	{0x1D7C4, 0x1D7CB, prALetter},              // L&   [8] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD SMALL DIGAMMA
-	{0x1D7CE, 0x1D7FF, prNumeric},              // Nd  [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE
-	{0x1DA00, 0x1DA36, prExtend},               // Mn  [55] SIGNWRITING HEAD RIM..SIGNWRITING AIR SUCKING IN
-	{0x1DA3B, 0x1DA6C, prExtend},               // Mn  [50] SIGNWRITING MOUTH CLOSED NEUTRAL..SIGNWRITING EXCITEMENT
-	{0x1DA75, 0x1DA75, prExtend},               // Mn       SIGNWRITING UPPER BODY TILTING FROM HIP JOINTS
-	{0x1DA84, 0x1DA84, prExtend},               // Mn       SIGNWRITING LOCATION HEAD NECK
-	{0x1DA9B, 0x1DA9F, prExtend},               // Mn   [5] SIGNWRITING FILL MODIFIER-2..SIGNWRITING FILL MODIFIER-6
-	{0x1DAA1, 0x1DAAF, prExtend},               // Mn  [15] SIGNWRITING ROTATION MODIFIER-2..SIGNWRITING ROTATION MODIFIER-16
-	{0x1DF00, 0x1DF09, prALetter},              // L&  [10] LATIN SMALL LETTER FENG DIGRAPH WITH TRILL..LATIN SMALL LETTER T WITH HOOK AND RETROFLEX HOOK
-	{0x1DF0A, 0x1DF0A, prALetter},              // Lo       LATIN LETTER RETROFLEX CLICK WITH RETROFLEX HOOK
-	{0x1DF0B, 0x1DF1E, prALetter},              // L&  [20] LATIN SMALL LETTER ESH WITH DOUBLE BAR..LATIN SMALL LETTER S WITH CURL
-	{0x1DF25, 0x1DF2A, prALetter},              // L&   [6] LATIN SMALL LETTER D WITH MID-HEIGHT LEFT HOOK..LATIN SMALL LETTER T WITH MID-HEIGHT LEFT HOOK
-	{0x1E000, 0x1E006, prExtend},               // Mn   [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE
-	{0x1E008, 0x1E018, prExtend},               // Mn  [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU
-	{0x1E01B, 0x1E021, prExtend},               // Mn   [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI
-	{0x1E023, 0x1E024, prExtend},               // Mn   [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS
-	{0x1E026, 0x1E02A, prExtend},               // Mn   [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA
-	{0x1E030, 0x1E06D, prALetter},              // Lm  [62] MODIFIER LETTER CYRILLIC SMALL A..MODIFIER LETTER CYRILLIC SMALL STRAIGHT U WITH STROKE
-	{0x1E08F, 0x1E08F, prExtend},               // Mn       COMBINING CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
-	{0x1E100, 0x1E12C, prALetter},              // Lo  [45] NYIAKENG PUACHUE HMONG LETTER MA..NYIAKENG PUACHUE HMONG LETTER W
-	{0x1E130, 0x1E136, prExtend},               // Mn   [7] NYIAKENG PUACHUE HMONG TONE-B..NYIAKENG PUACHUE HMONG TONE-D
-	{0x1E137, 0x1E13D, prALetter},              // Lm   [7] NYIAKENG PUACHUE HMONG SIGN FOR PERSON..NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER
-	{0x1E140, 0x1E149, prNumeric},              // Nd  [10] NYIAKENG PUACHUE HMONG DIGIT ZERO..NYIAKENG PUACHUE HMONG DIGIT NINE
-	{0x1E14E, 0x1E14E, prALetter},              // Lo       NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ
-	{0x1E290, 0x1E2AD, prALetter},              // Lo  [30] TOTO LETTER PA..TOTO LETTER A
-	{0x1E2AE, 0x1E2AE, prExtend},               // Mn       TOTO SIGN RISING TONE
-	{0x1E2C0, 0x1E2EB, prALetter},              // Lo  [44] WANCHO LETTER AA..WANCHO LETTER YIH
-	{0x1E2EC, 0x1E2EF, prExtend},               // Mn   [4] WANCHO TONE TUP..WANCHO TONE KOINI
-	{0x1E2F0, 0x1E2F9, prNumeric},              // Nd  [10] WANCHO DIGIT ZERO..WANCHO DIGIT NINE
-	{0x1E4D0, 0x1E4EA, prALetter},              // Lo  [27] NAG MUNDARI LETTER O..NAG MUNDARI LETTER ELL
-	{0x1E4EB, 0x1E4EB, prALetter},              // Lm       NAG MUNDARI SIGN OJOD
-	{0x1E4EC, 0x1E4EF, prExtend},               // Mn   [4] NAG MUNDARI SIGN MUHOR..NAG MUNDARI SIGN SUTUH
-	{0x1E4F0, 0x1E4F9, prNumeric},              // Nd  [10] NAG MUNDARI DIGIT ZERO..NAG MUNDARI DIGIT NINE
-	{0x1E7E0, 0x1E7E6, prALetter},              // Lo   [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO
-	{0x1E7E8, 0x1E7EB, prALetter},              // Lo   [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE
-	{0x1E7ED, 0x1E7EE, prALetter},              // Lo   [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE
-	{0x1E7F0, 0x1E7FE, prALetter},              // Lo  [15] ETHIOPIC SYLLABLE GURAGE QWI..ETHIOPIC SYLLABLE GURAGE PWEE
-	{0x1E800, 0x1E8C4, prALetter},              // Lo [197] MENDE KIKAKUI SYLLABLE M001 KI..MENDE KIKAKUI SYLLABLE M060 NYON
-	{0x1E8D0, 0x1E8D6, prExtend},               // Mn   [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS
-	{0x1E900, 0x1E943, prALetter},              // L&  [68] ADLAM CAPITAL LETTER ALIF..ADLAM SMALL LETTER SHA
-	{0x1E944, 0x1E94A, prExtend},               // Mn   [7] ADLAM ALIF LENGTHENER..ADLAM NUKTA
-	{0x1E94B, 0x1E94B, prALetter},              // Lm       ADLAM NASALIZATION MARK
-	{0x1E950, 0x1E959, prNumeric},              // Nd  [10] ADLAM DIGIT ZERO..ADLAM DIGIT NINE
-	{0x1EE00, 0x1EE03, prALetter},              // Lo   [4] ARABIC MATHEMATICAL ALEF..ARABIC MATHEMATICAL DAL
-	{0x1EE05, 0x1EE1F, prALetter},              // Lo  [27] ARABIC MATHEMATICAL WAW..ARABIC MATHEMATICAL DOTLESS QAF
-	{0x1EE21, 0x1EE22, prALetter},              // Lo   [2] ARABIC MATHEMATICAL INITIAL BEH..ARABIC MATHEMATICAL INITIAL JEEM
-	{0x1EE24, 0x1EE24, prALetter},              // Lo       ARABIC MATHEMATICAL INITIAL HEH
-	{0x1EE27, 0x1EE27, prALetter},              // Lo       ARABIC MATHEMATICAL INITIAL HAH
-	{0x1EE29, 0x1EE32, prALetter},              // Lo  [10] ARABIC MATHEMATICAL INITIAL YEH..ARABIC MATHEMATICAL INITIAL QAF
-	{0x1EE34, 0x1EE37, prALetter},              // Lo   [4] ARABIC MATHEMATICAL INITIAL SHEEN..ARABIC MATHEMATICAL INITIAL KHAH
-	{0x1EE39, 0x1EE39, prALetter},              // Lo       ARABIC MATHEMATICAL INITIAL DAD
-	{0x1EE3B, 0x1EE3B, prALetter},              // Lo       ARABIC MATHEMATICAL INITIAL GHAIN
-	{0x1EE42, 0x1EE42, prALetter},              // Lo       ARABIC MATHEMATICAL TAILED JEEM
-	{0x1EE47, 0x1EE47, prALetter},              // Lo       ARABIC MATHEMATICAL TAILED HAH
-	{0x1EE49, 0x1EE49, prALetter},              // Lo       ARABIC MATHEMATICAL TAILED YEH
-	{0x1EE4B, 0x1EE4B, prALetter},              // Lo       ARABIC MATHEMATICAL TAILED LAM
-	{0x1EE4D, 0x1EE4F, prALetter},              // Lo   [3] ARABIC MATHEMATICAL TAILED NOON..ARABIC MATHEMATICAL TAILED AIN
-	{0x1EE51, 0x1EE52, prALetter},              // Lo   [2] ARABIC MATHEMATICAL TAILED SAD..ARABIC MATHEMATICAL TAILED QAF
-	{0x1EE54, 0x1EE54, prALetter},              // Lo       ARABIC MATHEMATICAL TAILED SHEEN
-	{0x1EE57, 0x1EE57, prALetter},              // Lo       ARABIC MATHEMATICAL TAILED KHAH
-	{0x1EE59, 0x1EE59, prALetter},              // Lo       ARABIC MATHEMATICAL TAILED DAD
-	{0x1EE5B, 0x1EE5B, prALetter},              // Lo       ARABIC MATHEMATICAL TAILED GHAIN
-	{0x1EE5D, 0x1EE5D, prALetter},              // Lo       ARABIC MATHEMATICAL TAILED DOTLESS NOON
-	{0x1EE5F, 0x1EE5F, prALetter},              // Lo       ARABIC MATHEMATICAL TAILED DOTLESS QAF
-	{0x1EE61, 0x1EE62, prALetter},              // Lo   [2] ARABIC MATHEMATICAL STRETCHED BEH..ARABIC MATHEMATICAL STRETCHED JEEM
-	{0x1EE64, 0x1EE64, prALetter},              // Lo       ARABIC MATHEMATICAL STRETCHED HEH
-	{0x1EE67, 0x1EE6A, prALetter},              // Lo   [4] ARABIC MATHEMATICAL STRETCHED HAH..ARABIC MATHEMATICAL STRETCHED KAF
-	{0x1EE6C, 0x1EE72, prALetter},              // Lo   [7] ARABIC MATHEMATICAL STRETCHED MEEM..ARABIC MATHEMATICAL STRETCHED QAF
-	{0x1EE74, 0x1EE77, prALetter},              // Lo   [4] ARABIC MATHEMATICAL STRETCHED SHEEN..ARABIC MATHEMATICAL STRETCHED KHAH
-	{0x1EE79, 0x1EE7C, prALetter},              // Lo   [4] ARABIC MATHEMATICAL STRETCHED DAD..ARABIC MATHEMATICAL STRETCHED DOTLESS BEH
-	{0x1EE7E, 0x1EE7E, prALetter},              // Lo       ARABIC MATHEMATICAL STRETCHED DOTLESS FEH
-	{0x1EE80, 0x1EE89, prALetter},              // Lo  [10] ARABIC MATHEMATICAL LOOPED ALEF..ARABIC MATHEMATICAL LOOPED YEH
-	{0x1EE8B, 0x1EE9B, prALetter},              // Lo  [17] ARABIC MATHEMATICAL LOOPED LAM..ARABIC MATHEMATICAL LOOPED GHAIN
-	{0x1EEA1, 0x1EEA3, prALetter},              // Lo   [3] ARABIC MATHEMATICAL DOUBLE-STRUCK BEH..ARABIC MATHEMATICAL DOUBLE-STRUCK DAL
-	{0x1EEA5, 0x1EEA9, prALetter},              // Lo   [5] ARABIC MATHEMATICAL DOUBLE-STRUCK WAW..ARABIC MATHEMATICAL DOUBLE-STRUCK YEH
-	{0x1EEAB, 0x1EEBB, prALetter},              // Lo  [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN
-	{0x1F000, 0x1F003, prExtendedPictographic}, // E0.0   [4] (🀀..🀃)    MAHJONG TILE EAST WIND..MAHJONG TILE NORTH WIND
-	{0x1F004, 0x1F004, prExtendedPictographic}, // E0.6   [1] (🀄)       mahjong red dragon
-	{0x1F005, 0x1F0CE, prExtendedPictographic}, // E0.0 [202] (🀅..🃎)    MAHJONG TILE GREEN DRAGON..PLAYING CARD KING OF DIAMONDS
-	{0x1F0CF, 0x1F0CF, prExtendedPictographic}, // E0.6   [1] (🃏)       joker
-	{0x1F0D0, 0x1F0FF, prExtendedPictographic}, // E0.0  [48] (🃐..🃿)    <reserved-1F0D0>..<reserved-1F0FF>
-	{0x1F10D, 0x1F10F, prExtendedPictographic}, // E0.0   [3] (🄍..🄏)    CIRCLED ZERO WITH SLASH..CIRCLED DOLLAR SIGN WITH OVERLAID BACKSLASH
-	{0x1F12F, 0x1F12F, prExtendedPictographic}, // E0.0   [1] (🄯)       COPYLEFT SYMBOL
-	{0x1F130, 0x1F149, prALetter},              // So  [26] SQUARED LATIN CAPITAL LETTER A..SQUARED LATIN CAPITAL LETTER Z
-	{0x1F150, 0x1F169, prALetter},              // So  [26] NEGATIVE CIRCLED LATIN CAPITAL LETTER A..NEGATIVE CIRCLED LATIN CAPITAL LETTER Z
-	{0x1F16C, 0x1F16F, prExtendedPictographic}, // E0.0   [4] (🅬..🅯)    RAISED MR SIGN..CIRCLED HUMAN FIGURE
-	{0x1F170, 0x1F189, prALetter},              // So  [26] NEGATIVE SQUARED LATIN CAPITAL LETTER A..NEGATIVE SQUARED LATIN CAPITAL LETTER Z
-	{0x1F170, 0x1F171, prExtendedPictographic}, // E0.6   [2] (🅰️..🅱️)    A button (blood type)..B button (blood type)
-	{0x1F17E, 0x1F17F, prExtendedPictographic}, // E0.6   [2] (🅾️..🅿️)    O button (blood type)..P button
-	{0x1F18E, 0x1F18E, prExtendedPictographic}, // E0.6   [1] (🆎)       AB button (blood type)
-	{0x1F191, 0x1F19A, prExtendedPictographic}, // E0.6  [10] (🆑..🆚)    CL button..VS button
-	{0x1F1AD, 0x1F1E5, prExtendedPictographic}, // E0.0  [57] (🆭..🇥)    MASK WORK SYMBOL..<reserved-1F1E5>
-	{0x1F1E6, 0x1F1FF, prRegionalIndicator},    // So  [26] REGIONAL INDICATOR SYMBOL LETTER A..REGIONAL INDICATOR SYMBOL LETTER Z
-	{0x1F201, 0x1F202, prExtendedPictographic}, // E0.6   [2] (🈁..🈂️)    Japanese “here” button..Japanese “service charge” button
-	{0x1F203, 0x1F20F, prExtendedPictographic}, // E0.0  [13] (🈃..🈏)    <reserved-1F203>..<reserved-1F20F>
-	{0x1F21A, 0x1F21A, prExtendedPictographic}, // E0.6   [1] (🈚)       Japanese “free of charge” button
-	{0x1F22F, 0x1F22F, prExtendedPictographic}, // E0.6   [1] (🈯)       Japanese “reserved” button
-	{0x1F232, 0x1F23A, prExtendedPictographic}, // E0.6   [9] (🈲..🈺)    Japanese “prohibited” button..Japanese “open for business” button
-	{0x1F23C, 0x1F23F, prExtendedPictographic}, // E0.0   [4] (🈼..🈿)    <reserved-1F23C>..<reserved-1F23F>
-	{0x1F249, 0x1F24F, prExtendedPictographic}, // E0.0   [7] (🉉..🉏)    <reserved-1F249>..<reserved-1F24F>
-	{0x1F250, 0x1F251, prExtendedPictographic}, // E0.6   [2] (🉐..🉑)    Japanese “bargain” button..Japanese “acceptable” button
-	{0x1F252, 0x1F2FF, prExtendedPictographic}, // E0.0 [174] (🉒..🋿)    <reserved-1F252>..<reserved-1F2FF>
-	{0x1F300, 0x1F30C, prExtendedPictographic}, // E0.6  [13] (🌀..🌌)    cyclone..milky way
-	{0x1F30D, 0x1F30E, prExtendedPictographic}, // E0.7   [2] (🌍..🌎)    globe showing Europe-Africa..globe showing Americas
-	{0x1F30F, 0x1F30F, prExtendedPictographic}, // E0.6   [1] (🌏)       globe showing Asia-Australia
-	{0x1F310, 0x1F310, prExtendedPictographic}, // E1.0   [1] (🌐)       globe with meridians
-	{0x1F311, 0x1F311, prExtendedPictographic}, // E0.6   [1] (🌑)       new moon
-	{0x1F312, 0x1F312, prExtendedPictographic}, // E1.0   [1] (🌒)       waxing crescent moon
-	{0x1F313, 0x1F315, prExtendedPictographic}, // E0.6   [3] (🌓..🌕)    first quarter moon..full moon
-	{0x1F316, 0x1F318, prExtendedPictographic}, // E1.0   [3] (🌖..🌘)    waning gibbous moon..waning crescent moon
-	{0x1F319, 0x1F319, prExtendedPictographic}, // E0.6   [1] (🌙)       crescent moon
-	{0x1F31A, 0x1F31A, prExtendedPictographic}, // E1.0   [1] (🌚)       new moon face
-	{0x1F31B, 0x1F31B, prExtendedPictographic}, // E0.6   [1] (🌛)       first quarter moon face
-	{0x1F31C, 0x1F31C, prExtendedPictographic}, // E0.7   [1] (🌜)       last quarter moon face
-	{0x1F31D, 0x1F31E, prExtendedPictographic}, // E1.0   [2] (🌝..🌞)    full moon face..sun with face
-	{0x1F31F, 0x1F320, prExtendedPictographic}, // E0.6   [2] (🌟..🌠)    glowing star..shooting star
-	{0x1F321, 0x1F321, prExtendedPictographic}, // E0.7   [1] (🌡️)       thermometer
-	{0x1F322, 0x1F323, prExtendedPictographic}, // E0.0   [2] (🌢..🌣)    BLACK DROPLET..WHITE SUN
-	{0x1F324, 0x1F32C, prExtendedPictographic}, // E0.7   [9] (🌤️..🌬️)    sun behind small cloud..wind face
-	{0x1F32D, 0x1F32F, prExtendedPictographic}, // E1.0   [3] (🌭..🌯)    hot dog..burrito
-	{0x1F330, 0x1F331, prExtendedPictographic}, // E0.6   [2] (🌰..🌱)    chestnut..seedling
-	{0x1F332, 0x1F333, prExtendedPictographic}, // E1.0   [2] (🌲..🌳)    evergreen tree..deciduous tree
-	{0x1F334, 0x1F335, prExtendedPictographic}, // E0.6   [2] (🌴..🌵)    palm tree..cactus
-	{0x1F336, 0x1F336, prExtendedPictographic}, // E0.7   [1] (🌶️)       hot pepper
-	{0x1F337, 0x1F34A, prExtendedPictographic}, // E0.6  [20] (🌷..🍊)    tulip..tangerine
-	{0x1F34B, 0x1F34B, prExtendedPictographic}, // E1.0   [1] (🍋)       lemon
-	{0x1F34C, 0x1F34F, prExtendedPictographic}, // E0.6   [4] (🍌..🍏)    banana..green apple
-	{0x1F350, 0x1F350, prExtendedPictographic}, // E1.0   [1] (🍐)       pear
-	{0x1F351, 0x1F37B, prExtendedPictographic}, // E0.6  [43] (🍑..🍻)    peach..clinking beer mugs
-	{0x1F37C, 0x1F37C, prExtendedPictographic}, // E1.0   [1] (🍼)       baby bottle
-	{0x1F37D, 0x1F37D, prExtendedPictographic}, // E0.7   [1] (🍽️)       fork and knife with plate
-	{0x1F37E, 0x1F37F, prExtendedPictographic}, // E1.0   [2] (🍾..🍿)    bottle with popping cork..popcorn
-	{0x1F380, 0x1F393, prExtendedPictographic}, // E0.6  [20] (🎀..🎓)    ribbon..graduation cap
-	{0x1F394, 0x1F395, prExtendedPictographic}, // E0.0   [2] (🎔..🎕)    HEART WITH TIP ON THE LEFT..BOUQUET OF FLOWERS
-	{0x1F396, 0x1F397, prExtendedPictographic}, // E0.7   [2] (🎖️..🎗️)    military medal..reminder ribbon
-	{0x1F398, 0x1F398, prExtendedPictographic}, // E0.0   [1] (🎘)       MUSICAL KEYBOARD WITH JACKS
-	{0x1F399, 0x1F39B, prExtendedPictographic}, // E0.7   [3] (🎙️..🎛️)    studio microphone..control knobs
-	{0x1F39C, 0x1F39D, prExtendedPictographic}, // E0.0   [2] (🎜..🎝)    BEAMED ASCENDING MUSICAL NOTES..BEAMED DESCENDING MUSICAL NOTES
-	{0x1F39E, 0x1F39F, prExtendedPictographic}, // E0.7   [2] (🎞️..🎟️)    film frames..admission tickets
-	{0x1F3A0, 0x1F3C4, prExtendedPictographic}, // E0.6  [37] (🎠..🏄)    carousel horse..person surfing
-	{0x1F3C5, 0x1F3C5, prExtendedPictographic}, // E1.0   [1] (🏅)       sports medal
-	{0x1F3C6, 0x1F3C6, prExtendedPictographic}, // E0.6   [1] (🏆)       trophy
-	{0x1F3C7, 0x1F3C7, prExtendedPictographic}, // E1.0   [1] (🏇)       horse racing
-	{0x1F3C8, 0x1F3C8, prExtendedPictographic}, // E0.6   [1] (🏈)       american football
-	{0x1F3C9, 0x1F3C9, prExtendedPictographic}, // E1.0   [1] (🏉)       rugby football
-	{0x1F3CA, 0x1F3CA, prExtendedPictographic}, // E0.6   [1] (🏊)       person swimming
-	{0x1F3CB, 0x1F3CE, prExtendedPictographic}, // E0.7   [4] (🏋️..🏎️)    person lifting weights..racing car
-	{0x1F3CF, 0x1F3D3, prExtendedPictographic}, // E1.0   [5] (🏏..🏓)    cricket game..ping pong
-	{0x1F3D4, 0x1F3DF, prExtendedPictographic}, // E0.7  [12] (🏔️..🏟️)    snow-capped mountain..stadium
-	{0x1F3E0, 0x1F3E3, prExtendedPictographic}, // E0.6   [4] (🏠..🏣)    house..Japanese post office
-	{0x1F3E4, 0x1F3E4, prExtendedPictographic}, // E1.0   [1] (🏤)       post office
-	{0x1F3E5, 0x1F3F0, prExtendedPictographic}, // E0.6  [12] (🏥..🏰)    hospital..castle
-	{0x1F3F1, 0x1F3F2, prExtendedPictographic}, // E0.0   [2] (🏱..🏲)    WHITE PENNANT..BLACK PENNANT
-	{0x1F3F3, 0x1F3F3, prExtendedPictographic}, // E0.7   [1] (🏳️)       white flag
-	{0x1F3F4, 0x1F3F4, prExtendedPictographic}, // E1.0   [1] (🏴)       black flag
-	{0x1F3F5, 0x1F3F5, prExtendedPictographic}, // E0.7   [1] (🏵️)       rosette
-	{0x1F3F6, 0x1F3F6, prExtendedPictographic}, // E0.0   [1] (🏶)       BLACK ROSETTE
-	{0x1F3F7, 0x1F3F7, prExtendedPictographic}, // E0.7   [1] (🏷️)       label
-	{0x1F3F8, 0x1F3FA, prExtendedPictographic}, // E1.0   [3] (🏸..🏺)    badminton..amphora
-	{0x1F3FB, 0x1F3FF, prExtend},               // Sk   [5] EMOJI MODIFIER FITZPATRICK TYPE-1-2..EMOJI MODIFIER FITZPATRICK TYPE-6
-	{0x1F400, 0x1F407, prExtendedPictographic}, // E1.0   [8] (🐀..🐇)    rat..rabbit
-	{0x1F408, 0x1F408, prExtendedPictographic}, // E0.7   [1] (🐈)       cat
-	{0x1F409, 0x1F40B, prExtendedPictographic}, // E1.0   [3] (🐉..🐋)    dragon..whale
-	{0x1F40C, 0x1F40E, prExtendedPictographic}, // E0.6   [3] (🐌..🐎)    snail..horse
-	{0x1F40F, 0x1F410, prExtendedPictographic}, // E1.0   [2] (🐏..🐐)    ram..goat
-	{0x1F411, 0x1F412, prExtendedPictographic}, // E0.6   [2] (🐑..🐒)    ewe..monkey
-	{0x1F413, 0x1F413, prExtendedPictographic}, // E1.0   [1] (🐓)       rooster
-	{0x1F414, 0x1F414, prExtendedPictographic}, // E0.6   [1] (🐔)       chicken
-	{0x1F415, 0x1F415, prExtendedPictographic}, // E0.7   [1] (🐕)       dog
-	{0x1F416, 0x1F416, prExtendedPictographic}, // E1.0   [1] (🐖)       pig
-	{0x1F417, 0x1F429, prExtendedPictographic}, // E0.6  [19] (🐗..🐩)    boar..poodle
-	{0x1F42A, 0x1F42A, prExtendedPictographic}, // E1.0   [1] (🐪)       camel
-	{0x1F42B, 0x1F43E, prExtendedPictographic}, // E0.6  [20] (🐫..🐾)    two-hump camel..paw prints
-	{0x1F43F, 0x1F43F, prExtendedPictographic}, // E0.7   [1] (🐿️)       chipmunk
-	{0x1F440, 0x1F440, prExtendedPictographic}, // E0.6   [1] (👀)       eyes
-	{0x1F441, 0x1F441, prExtendedPictographic}, // E0.7   [1] (👁️)       eye
-	{0x1F442, 0x1F464, prExtendedPictographic}, // E0.6  [35] (👂..👤)    ear..bust in silhouette
-	{0x1F465, 0x1F465, prExtendedPictographic}, // E1.0   [1] (👥)       busts in silhouette
-	{0x1F466, 0x1F46B, prExtendedPictographic}, // E0.6   [6] (👦..👫)    boy..woman and man holding hands
-	{0x1F46C, 0x1F46D, prExtendedPictographic}, // E1.0   [2] (👬..👭)    men holding hands..women holding hands
-	{0x1F46E, 0x1F4AC, prExtendedPictographic}, // E0.6  [63] (👮..💬)    police officer..speech balloon
-	{0x1F4AD, 0x1F4AD, prExtendedPictographic}, // E1.0   [1] (💭)       thought balloon
-	{0x1F4AE, 0x1F4B5, prExtendedPictographic}, // E0.6   [8] (💮..💵)    white flower..dollar banknote
-	{0x1F4B6, 0x1F4B7, prExtendedPictographic}, // E1.0   [2] (💶..💷)    euro banknote..pound banknote
-	{0x1F4B8, 0x1F4EB, prExtendedPictographic}, // E0.6  [52] (💸..📫)    money with wings..closed mailbox with raised flag
-	{0x1F4EC, 0x1F4ED, prExtendedPictographic}, // E0.7   [2] (📬..📭)    open mailbox with raised flag..open mailbox with lowered flag
-	{0x1F4EE, 0x1F4EE, prExtendedPictographic}, // E0.6   [1] (📮)       postbox
-	{0x1F4EF, 0x1F4EF, prExtendedPictographic}, // E1.0   [1] (📯)       postal horn
-	{0x1F4F0, 0x1F4F4, prExtendedPictographic}, // E0.6   [5] (📰..📴)    newspaper..mobile phone off
-	{0x1F4F5, 0x1F4F5, prExtendedPictographic}, // E1.0   [1] (📵)       no mobile phones
-	{0x1F4F6, 0x1F4F7, prExtendedPictographic}, // E0.6   [2] (📶..📷)    antenna bars..camera
-	{0x1F4F8, 0x1F4F8, prExtendedPictographic}, // E1.0   [1] (📸)       camera with flash
-	{0x1F4F9, 0x1F4FC, prExtendedPictographic}, // E0.6   [4] (📹..📼)    video camera..videocassette
-	{0x1F4FD, 0x1F4FD, prExtendedPictographic}, // E0.7   [1] (📽️)       film projector
-	{0x1F4FE, 0x1F4FE, prExtendedPictographic}, // E0.0   [1] (📾)       PORTABLE STEREO
-	{0x1F4FF, 0x1F502, prExtendedPictographic}, // E1.0   [4] (📿..🔂)    prayer beads..repeat single button
-	{0x1F503, 0x1F503, prExtendedPictographic}, // E0.6   [1] (🔃)       clockwise vertical arrows
-	{0x1F504, 0x1F507, prExtendedPictographic}, // E1.0   [4] (🔄..🔇)    counterclockwise arrows button..muted speaker
-	{0x1F508, 0x1F508, prExtendedPictographic}, // E0.7   [1] (🔈)       speaker low volume
-	{0x1F509, 0x1F509, prExtendedPictographic}, // E1.0   [1] (🔉)       speaker medium volume
-	{0x1F50A, 0x1F514, prExtendedPictographic}, // E0.6  [11] (🔊..🔔)    speaker high volume..bell
-	{0x1F515, 0x1F515, prExtendedPictographic}, // E1.0   [1] (🔕)       bell with slash
-	{0x1F516, 0x1F52B, prExtendedPictographic}, // E0.6  [22] (🔖..🔫)    bookmark..water pistol
-	{0x1F52C, 0x1F52D, prExtendedPictographic}, // E1.0   [2] (🔬..🔭)    microscope..telescope
-	{0x1F52E, 0x1F53D, prExtendedPictographic}, // E0.6  [16] (🔮..🔽)    crystal ball..downwards button
-	{0x1F546, 0x1F548, prExtendedPictographic}, // E0.0   [3] (🕆..🕈)    WHITE LATIN CROSS..CELTIC CROSS
-	{0x1F549, 0x1F54A, prExtendedPictographic}, // E0.7   [2] (🕉️..🕊️)    om..dove
-	{0x1F54B, 0x1F54E, prExtendedPictographic}, // E1.0   [4] (🕋..🕎)    kaaba..menorah
-	{0x1F54F, 0x1F54F, prExtendedPictographic}, // E0.0   [1] (🕏)       BOWL OF HYGIEIA
-	{0x1F550, 0x1F55B, prExtendedPictographic}, // E0.6  [12] (🕐..🕛)    one o’clock..twelve o’clock
-	{0x1F55C, 0x1F567, prExtendedPictographic}, // E0.7  [12] (🕜..🕧)    one-thirty..twelve-thirty
-	{0x1F568, 0x1F56E, prExtendedPictographic}, // E0.0   [7] (🕨..🕮)    RIGHT SPEAKER..BOOK
-	{0x1F56F, 0x1F570, prExtendedPictographic}, // E0.7   [2] (🕯️..🕰️)    candle..mantelpiece clock
-	{0x1F571, 0x1F572, prExtendedPictographic}, // E0.0   [2] (🕱..🕲)    BLACK SKULL AND CROSSBONES..NO PIRACY
-	{0x1F573, 0x1F579, prExtendedPictographic}, // E0.7   [7] (🕳️..🕹️)    hole..joystick
-	{0x1F57A, 0x1F57A, prExtendedPictographic}, // E3.0   [1] (🕺)       man dancing
-	{0x1F57B, 0x1F586, prExtendedPictographic}, // E0.0  [12] (🕻..🖆)    LEFT HAND TELEPHONE RECEIVER..PEN OVER STAMPED ENVELOPE
-	{0x1F587, 0x1F587, prExtendedPictographic}, // E0.7   [1] (🖇️)       linked paperclips
-	{0x1F588, 0x1F589, prExtendedPictographic}, // E0.0   [2] (🖈..🖉)    BLACK PUSHPIN..LOWER LEFT PENCIL
-	{0x1F58A, 0x1F58D, prExtendedPictographic}, // E0.7   [4] (🖊️..🖍️)    pen..crayon
-	{0x1F58E, 0x1F58F, prExtendedPictographic}, // E0.0   [2] (🖎..🖏)    LEFT WRITING HAND..TURNED OK HAND SIGN
-	{0x1F590, 0x1F590, prExtendedPictographic}, // E0.7   [1] (🖐️)       hand with fingers splayed
-	{0x1F591, 0x1F594, prExtendedPictographic}, // E0.0   [4] (🖑..🖔)    REVERSED RAISED HAND WITH FINGERS SPLAYED..REVERSED VICTORY HAND
-	{0x1F595, 0x1F596, prExtendedPictographic}, // E1.0   [2] (🖕..🖖)    middle finger..vulcan salute
-	{0x1F597, 0x1F5A3, prExtendedPictographic}, // E0.0  [13] (🖗..🖣)    WHITE DOWN POINTING LEFT HAND INDEX..BLACK DOWN POINTING BACKHAND INDEX
-	{0x1F5A4, 0x1F5A4, prExtendedPictographic}, // E3.0   [1] (🖤)       black heart
-	{0x1F5A5, 0x1F5A5, prExtendedPictographic}, // E0.7   [1] (🖥️)       desktop computer
-	{0x1F5A6, 0x1F5A7, prExtendedPictographic}, // E0.0   [2] (🖦..🖧)    KEYBOARD AND MOUSE..THREE NETWORKED COMPUTERS
-	{0x1F5A8, 0x1F5A8, prExtendedPictographic}, // E0.7   [1] (🖨️)       printer
-	{0x1F5A9, 0x1F5B0, prExtendedPictographic}, // E0.0   [8] (🖩..🖰)    POCKET CALCULATOR..TWO BUTTON MOUSE
-	{0x1F5B1, 0x1F5B2, prExtendedPictographic}, // E0.7   [2] (🖱️..🖲️)    computer mouse..trackball
-	{0x1F5B3, 0x1F5BB, prExtendedPictographic}, // E0.0   [9] (🖳..🖻)    OLD PERSONAL COMPUTER..DOCUMENT WITH PICTURE
-	{0x1F5BC, 0x1F5BC, prExtendedPictographic}, // E0.7   [1] (🖼️)       framed picture
-	{0x1F5BD, 0x1F5C1, prExtendedPictographic}, // E0.0   [5] (🖽..🗁)    FRAME WITH TILES..OPEN FOLDER
-	{0x1F5C2, 0x1F5C4, prExtendedPictographic}, // E0.7   [3] (🗂️..🗄️)    card index dividers..file cabinet
-	{0x1F5C5, 0x1F5D0, prExtendedPictographic}, // E0.0  [12] (🗅..🗐)    EMPTY NOTE..PAGES
-	{0x1F5D1, 0x1F5D3, prExtendedPictographic}, // E0.7   [3] (🗑️..🗓️)    wastebasket..spiral calendar
-	{0x1F5D4, 0x1F5DB, prExtendedPictographic}, // E0.0   [8] (🗔..🗛)    DESKTOP WINDOW..DECREASE FONT SIZE SYMBOL
-	{0x1F5DC, 0x1F5DE, prExtendedPictographic}, // E0.7   [3] (🗜️..🗞️)    clamp..rolled-up newspaper
-	{0x1F5DF, 0x1F5E0, prExtendedPictographic}, // E0.0   [2] (🗟..🗠)    PAGE WITH CIRCLED TEXT..STOCK CHART
-	{0x1F5E1, 0x1F5E1, prExtendedPictographic}, // E0.7   [1] (🗡️)       dagger
-	{0x1F5E2, 0x1F5E2, prExtendedPictographic}, // E0.0   [1] (🗢)       LIPS
-	{0x1F5E3, 0x1F5E3, prExtendedPictographic}, // E0.7   [1] (🗣️)       speaking head
-	{0x1F5E4, 0x1F5E7, prExtendedPictographic}, // E0.0   [4] (🗤..🗧)    THREE RAYS ABOVE..THREE RAYS RIGHT
-	{0x1F5E8, 0x1F5E8, prExtendedPictographic}, // E2.0   [1] (🗨️)       left speech bubble
-	{0x1F5E9, 0x1F5EE, prExtendedPictographic}, // E0.0   [6] (🗩..🗮)    RIGHT SPEECH BUBBLE..LEFT ANGER BUBBLE
-	{0x1F5EF, 0x1F5EF, prExtendedPictographic}, // E0.7   [1] (🗯️)       right anger bubble
-	{0x1F5F0, 0x1F5F2, prExtendedPictographic}, // E0.0   [3] (🗰..🗲)    MOOD BUBBLE..LIGHTNING MOOD
-	{0x1F5F3, 0x1F5F3, prExtendedPictographic}, // E0.7   [1] (🗳️)       ballot box with ballot
-	{0x1F5F4, 0x1F5F9, prExtendedPictographic}, // E0.0   [6] (🗴..🗹)    BALLOT SCRIPT X..BALLOT BOX WITH BOLD CHECK
-	{0x1F5FA, 0x1F5FA, prExtendedPictographic}, // E0.7   [1] (🗺️)       world map
-	{0x1F5FB, 0x1F5FF, prExtendedPictographic}, // E0.6   [5] (🗻..🗿)    mount fuji..moai
-	{0x1F600, 0x1F600, prExtendedPictographic}, // E1.0   [1] (😀)       grinning face
-	{0x1F601, 0x1F606, prExtendedPictographic}, // E0.6   [6] (😁..😆)    beaming face with smiling eyes..grinning squinting face
-	{0x1F607, 0x1F608, prExtendedPictographic}, // E1.0   [2] (😇..😈)    smiling face with halo..smiling face with horns
-	{0x1F609, 0x1F60D, prExtendedPictographic}, // E0.6   [5] (😉..😍)    winking face..smiling face with heart-eyes
-	{0x1F60E, 0x1F60E, prExtendedPictographic}, // E1.0   [1] (😎)       smiling face with sunglasses
-	{0x1F60F, 0x1F60F, prExtendedPictographic}, // E0.6   [1] (😏)       smirking face
-	{0x1F610, 0x1F610, prExtendedPictographic}, // E0.7   [1] (😐)       neutral face
-	{0x1F611, 0x1F611, prExtendedPictographic}, // E1.0   [1] (😑)       expressionless face
-	{0x1F612, 0x1F614, prExtendedPictographic}, // E0.6   [3] (😒..😔)    unamused face..pensive face
-	{0x1F615, 0x1F615, prExtendedPictographic}, // E1.0   [1] (😕)       confused face
-	{0x1F616, 0x1F616, prExtendedPictographic}, // E0.6   [1] (😖)       confounded face
-	{0x1F617, 0x1F617, prExtendedPictographic}, // E1.0   [1] (😗)       kissing face
-	{0x1F618, 0x1F618, prExtendedPictographic}, // E0.6   [1] (😘)       face blowing a kiss
-	{0x1F619, 0x1F619, prExtendedPictographic}, // E1.0   [1] (😙)       kissing face with smiling eyes
-	{0x1F61A, 0x1F61A, prExtendedPictographic}, // E0.6   [1] (😚)       kissing face with closed eyes
-	{0x1F61B, 0x1F61B, prExtendedPictographic}, // E1.0   [1] (😛)       face with tongue
-	{0x1F61C, 0x1F61E, prExtendedPictographic}, // E0.6   [3] (😜..😞)    winking face with tongue..disappointed face
-	{0x1F61F, 0x1F61F, prExtendedPictographic}, // E1.0   [1] (😟)       worried face
-	{0x1F620, 0x1F625, prExtendedPictographic}, // E0.6   [6] (😠..😥)    angry face..sad but relieved face
-	{0x1F626, 0x1F627, prExtendedPictographic}, // E1.0   [2] (😦..😧)    frowning face with open mouth..anguished face
-	{0x1F628, 0x1F62B, prExtendedPictographic}, // E0.6   [4] (😨..😫)    fearful face..tired face
-	{0x1F62C, 0x1F62C, prExtendedPictographic}, // E1.0   [1] (😬)       grimacing face
-	{0x1F62D, 0x1F62D, prExtendedPictographic}, // E0.6   [1] (😭)       loudly crying face
-	{0x1F62E, 0x1F62F, prExtendedPictographic}, // E1.0   [2] (😮..😯)    face with open mouth..hushed face
-	{0x1F630, 0x1F633, prExtendedPictographic}, // E0.6   [4] (😰..😳)    anxious face with sweat..flushed face
-	{0x1F634, 0x1F634, prExtendedPictographic}, // E1.0   [1] (😴)       sleeping face
-	{0x1F635, 0x1F635, prExtendedPictographic}, // E0.6   [1] (😵)       face with crossed-out eyes
-	{0x1F636, 0x1F636, prExtendedPictographic}, // E1.0   [1] (😶)       face without mouth
-	{0x1F637, 0x1F640, prExtendedPictographic}, // E0.6  [10] (😷..🙀)    face with medical mask..weary cat
-	{0x1F641, 0x1F644, prExtendedPictographic}, // E1.0   [4] (🙁..🙄)    slightly frowning face..face with rolling eyes
-	{0x1F645, 0x1F64F, prExtendedPictographic}, // E0.6  [11] (🙅..🙏)    person gesturing NO..folded hands
-	{0x1F680, 0x1F680, prExtendedPictographic}, // E0.6   [1] (🚀)       rocket
-	{0x1F681, 0x1F682, prExtendedPictographic}, // E1.0   [2] (🚁..🚂)    helicopter..locomotive
-	{0x1F683, 0x1F685, prExtendedPictographic}, // E0.6   [3] (🚃..🚅)    railway car..bullet train
-	{0x1F686, 0x1F686, prExtendedPictographic}, // E1.0   [1] (🚆)       train
-	{0x1F687, 0x1F687, prExtendedPictographic}, // E0.6   [1] (🚇)       metro
-	{0x1F688, 0x1F688, prExtendedPictographic}, // E1.0   [1] (🚈)       light rail
-	{0x1F689, 0x1F689, prExtendedPictographic}, // E0.6   [1] (🚉)       station
-	{0x1F68A, 0x1F68B, prExtendedPictographic}, // E1.0   [2] (🚊..🚋)    tram..tram car
-	{0x1F68C, 0x1F68C, prExtendedPictographic}, // E0.6   [1] (🚌)       bus
-	{0x1F68D, 0x1F68D, prExtendedPictographic}, // E0.7   [1] (🚍)       oncoming bus
-	{0x1F68E, 0x1F68E, prExtendedPictographic}, // E1.0   [1] (🚎)       trolleybus
-	{0x1F68F, 0x1F68F, prExtendedPictographic}, // E0.6   [1] (🚏)       bus stop
-	{0x1F690, 0x1F690, prExtendedPictographic}, // E1.0   [1] (🚐)       minibus
-	{0x1F691, 0x1F693, prExtendedPictographic}, // E0.6   [3] (🚑..🚓)    ambulance..police car
-	{0x1F694, 0x1F694, prExtendedPictographic}, // E0.7   [1] (🚔)       oncoming police car
-	{0x1F695, 0x1F695, prExtendedPictographic}, // E0.6   [1] (🚕)       taxi
-	{0x1F696, 0x1F696, prExtendedPictographic}, // E1.0   [1] (🚖)       oncoming taxi
-	{0x1F697, 0x1F697, prExtendedPictographic}, // E0.6   [1] (🚗)       automobile
-	{0x1F698, 0x1F698, prExtendedPictographic}, // E0.7   [1] (🚘)       oncoming automobile
-	{0x1F699, 0x1F69A, prExtendedPictographic}, // E0.6   [2] (🚙..🚚)    sport utility vehicle..delivery truck
-	{0x1F69B, 0x1F6A1, prExtendedPictographic}, // E1.0   [7] (🚛..🚡)    articulated lorry..aerial tramway
-	{0x1F6A2, 0x1F6A2, prExtendedPictographic}, // E0.6   [1] (🚢)       ship
-	{0x1F6A3, 0x1F6A3, prExtendedPictographic}, // E1.0   [1] (🚣)       person rowing boat
-	{0x1F6A4, 0x1F6A5, prExtendedPictographic}, // E0.6   [2] (🚤..🚥)    speedboat..horizontal traffic light
-	{0x1F6A6, 0x1F6A6, prExtendedPictographic}, // E1.0   [1] (🚦)       vertical traffic light
-	{0x1F6A7, 0x1F6AD, prExtendedPictographic}, // E0.6   [7] (🚧..🚭)    construction..no smoking
-	{0x1F6AE, 0x1F6B1, prExtendedPictographic}, // E1.0   [4] (🚮..🚱)    litter in bin sign..non-potable water
-	{0x1F6B2, 0x1F6B2, prExtendedPictographic}, // E0.6   [1] (🚲)       bicycle
-	{0x1F6B3, 0x1F6B5, prExtendedPictographic}, // E1.0   [3] (🚳..🚵)    no bicycles..person mountain biking
-	{0x1F6B6, 0x1F6B6, prExtendedPictographic}, // E0.6   [1] (🚶)       person walking
-	{0x1F6B7, 0x1F6B8, prExtendedPictographic}, // E1.0   [2] (🚷..🚸)    no pedestrians..children crossing
-	{0x1F6B9, 0x1F6BE, prExtendedPictographic}, // E0.6   [6] (🚹..🚾)    men’s room..water closet
-	{0x1F6BF, 0x1F6BF, prExtendedPictographic}, // E1.0   [1] (🚿)       shower
-	{0x1F6C0, 0x1F6C0, prExtendedPictographic}, // E0.6   [1] (🛀)       person taking bath
-	{0x1F6C1, 0x1F6C5, prExtendedPictographic}, // E1.0   [5] (🛁..🛅)    bathtub..left luggage
-	{0x1F6C6, 0x1F6CA, prExtendedPictographic}, // E0.0   [5] (🛆..🛊)    TRIANGLE WITH ROUNDED CORNERS..GIRLS SYMBOL
-	{0x1F6CB, 0x1F6CB, prExtendedPictographic}, // E0.7   [1] (🛋️)       couch and lamp
-	{0x1F6CC, 0x1F6CC, prExtendedPictographic}, // E1.0   [1] (🛌)       person in bed
-	{0x1F6CD, 0x1F6CF, prExtendedPictographic}, // E0.7   [3] (🛍️..🛏️)    shopping bags..bed
-	{0x1F6D0, 0x1F6D0, prExtendedPictographic}, // E1.0   [1] (🛐)       place of worship
-	{0x1F6D1, 0x1F6D2, prExtendedPictographic}, // E3.0   [2] (🛑..🛒)    stop sign..shopping cart
-	{0x1F6D3, 0x1F6D4, prExtendedPictographic}, // E0.0   [2] (🛓..🛔)    STUPA..PAGODA
-	{0x1F6D5, 0x1F6D5, prExtendedPictographic}, // E12.0  [1] (🛕)       hindu temple
-	{0x1F6D6, 0x1F6D7, prExtendedPictographic}, // E13.0  [2] (🛖..🛗)    hut..elevator
-	{0x1F6D8, 0x1F6DB, prExtendedPictographic}, // E0.0   [4] (🛘..🛛)    <reserved-1F6D8>..<reserved-1F6DB>
-	{0x1F6DC, 0x1F6DC, prExtendedPictographic}, // E15.0  [1] (🛜)       wireless
-	{0x1F6DD, 0x1F6DF, prExtendedPictographic}, // E14.0  [3] (🛝..🛟)    playground slide..ring buoy
-	{0x1F6E0, 0x1F6E5, prExtendedPictographic}, // E0.7   [6] (🛠️..🛥️)    hammer and wrench..motor boat
-	{0x1F6E6, 0x1F6E8, prExtendedPictographic}, // E0.0   [3] (🛦..🛨)    UP-POINTING MILITARY AIRPLANE..UP-POINTING SMALL AIRPLANE
-	{0x1F6E9, 0x1F6E9, prExtendedPictographic}, // E0.7   [1] (🛩️)       small airplane
-	{0x1F6EA, 0x1F6EA, prExtendedPictographic}, // E0.0   [1] (🛪)       NORTHEAST-POINTING AIRPLANE
-	{0x1F6EB, 0x1F6EC, prExtendedPictographic}, // E1.0   [2] (🛫..🛬)    airplane departure..airplane arrival
-	{0x1F6ED, 0x1F6EF, prExtendedPictographic}, // E0.0   [3] (🛭..🛯)    <reserved-1F6ED>..<reserved-1F6EF>
-	{0x1F6F0, 0x1F6F0, prExtendedPictographic}, // E0.7   [1] (🛰️)       satellite
-	{0x1F6F1, 0x1F6F2, prExtendedPictographic}, // E0.0   [2] (🛱..🛲)    ONCOMING FIRE ENGINE..DIESEL LOCOMOTIVE
-	{0x1F6F3, 0x1F6F3, prExtendedPictographic}, // E0.7   [1] (🛳️)       passenger ship
-	{0x1F6F4, 0x1F6F6, prExtendedPictographic}, // E3.0   [3] (🛴..🛶)    kick scooter..canoe
-	{0x1F6F7, 0x1F6F8, prExtendedPictographic}, // E5.0   [2] (🛷..🛸)    sled..flying saucer
-	{0x1F6F9, 0x1F6F9, prExtendedPictographic}, // E11.0  [1] (🛹)       skateboard
-	{0x1F6FA, 0x1F6FA, prExtendedPictographic}, // E12.0  [1] (🛺)       auto rickshaw
-	{0x1F6FB, 0x1F6FC, prExtendedPictographic}, // E13.0  [2] (🛻..🛼)    pickup truck..roller skate
-	{0x1F6FD, 0x1F6FF, prExtendedPictographic}, // E0.0   [3] (🛽..🛿)    <reserved-1F6FD>..<reserved-1F6FF>
-	{0x1F774, 0x1F77F, prExtendedPictographic}, // E0.0  [12] (🝴..🝿)    LOT OF FORTUNE..ORCUS
-	{0x1F7D5, 0x1F7DF, prExtendedPictographic}, // E0.0  [11] (🟕..🟟)    CIRCLED TRIANGLE..<reserved-1F7DF>
-	{0x1F7E0, 0x1F7EB, prExtendedPictographic}, // E12.0 [12] (🟠..🟫)    orange circle..brown square
-	{0x1F7EC, 0x1F7EF, prExtendedPictographic}, // E0.0   [4] (🟬..🟯)    <reserved-1F7EC>..<reserved-1F7EF>
-	{0x1F7F0, 0x1F7F0, prExtendedPictographic}, // E14.0  [1] (🟰)       heavy equals sign
-	{0x1F7F1, 0x1F7FF, prExtendedPictographic}, // E0.0  [15] (🟱..🟿)    <reserved-1F7F1>..<reserved-1F7FF>
-	{0x1F80C, 0x1F80F, prExtendedPictographic}, // E0.0   [4] (🠌..🠏)    <reserved-1F80C>..<reserved-1F80F>
-	{0x1F848, 0x1F84F, prExtendedPictographic}, // E0.0   [8] (🡈..🡏)    <reserved-1F848>..<reserved-1F84F>
-	{0x1F85A, 0x1F85F, prExtendedPictographic}, // E0.0   [6] (🡚..🡟)    <reserved-1F85A>..<reserved-1F85F>
-	{0x1F888, 0x1F88F, prExtendedPictographic}, // E0.0   [8] (🢈..🢏)    <reserved-1F888>..<reserved-1F88F>
-	{0x1F8AE, 0x1F8FF, prExtendedPictographic}, // E0.0  [82] (🢮..🣿)    <reserved-1F8AE>..<reserved-1F8FF>
-	{0x1F90C, 0x1F90C, prExtendedPictographic}, // E13.0  [1] (🤌)       pinched fingers
-	{0x1F90D, 0x1F90F, prExtendedPictographic}, // E12.0  [3] (🤍..🤏)    white heart..pinching hand
-	{0x1F910, 0x1F918, prExtendedPictographic}, // E1.0   [9] (🤐..🤘)    zipper-mouth face..sign of the horns
-	{0x1F919, 0x1F91E, prExtendedPictographic}, // E3.0   [6] (🤙..🤞)    call me hand..crossed fingers
-	{0x1F91F, 0x1F91F, prExtendedPictographic}, // E5.0   [1] (🤟)       love-you gesture
-	{0x1F920, 0x1F927, prExtendedPictographic}, // E3.0   [8] (🤠..🤧)    cowboy hat face..sneezing face
-	{0x1F928, 0x1F92F, prExtendedPictographic}, // E5.0   [8] (🤨..🤯)    face with raised eyebrow..exploding head
-	{0x1F930, 0x1F930, prExtendedPictographic}, // E3.0   [1] (🤰)       pregnant woman
-	{0x1F931, 0x1F932, prExtendedPictographic}, // E5.0   [2] (🤱..🤲)    breast-feeding..palms up together
-	{0x1F933, 0x1F93A, prExtendedPictographic}, // E3.0   [8] (🤳..🤺)    selfie..person fencing
-	{0x1F93C, 0x1F93E, prExtendedPictographic}, // E3.0   [3] (🤼..🤾)    people wrestling..person playing handball
-	{0x1F93F, 0x1F93F, prExtendedPictographic}, // E12.0  [1] (🤿)       diving mask
-	{0x1F940, 0x1F945, prExtendedPictographic}, // E3.0   [6] (🥀..🥅)    wilted flower..goal net
-	{0x1F947, 0x1F94B, prExtendedPictographic}, // E3.0   [5] (🥇..🥋)    1st place medal..martial arts uniform
-	{0x1F94C, 0x1F94C, prExtendedPictographic}, // E5.0   [1] (🥌)       curling stone
-	{0x1F94D, 0x1F94F, prExtendedPictographic}, // E11.0  [3] (🥍..🥏)    lacrosse..flying disc
-	{0x1F950, 0x1F95E, prExtendedPictographic}, // E3.0  [15] (🥐..🥞)    croissant..pancakes
-	{0x1F95F, 0x1F96B, prExtendedPictographic}, // E5.0  [13] (🥟..🥫)    dumpling..canned food
-	{0x1F96C, 0x1F970, prExtendedPictographic}, // E11.0  [5] (🥬..🥰)    leafy green..smiling face with hearts
-	{0x1F971, 0x1F971, prExtendedPictographic}, // E12.0  [1] (🥱)       yawning face
-	{0x1F972, 0x1F972, prExtendedPictographic}, // E13.0  [1] (🥲)       smiling face with tear
-	{0x1F973, 0x1F976, prExtendedPictographic}, // E11.0  [4] (🥳..🥶)    partying face..cold face
-	{0x1F977, 0x1F978, prExtendedPictographic}, // E13.0  [2] (🥷..🥸)    ninja..disguised face
-	{0x1F979, 0x1F979, prExtendedPictographic}, // E14.0  [1] (🥹)       face holding back tears
-	{0x1F97A, 0x1F97A, prExtendedPictographic}, // E11.0  [1] (🥺)       pleading face
-	{0x1F97B, 0x1F97B, prExtendedPictographic}, // E12.0  [1] (🥻)       sari
-	{0x1F97C, 0x1F97F, prExtendedPictographic}, // E11.0  [4] (🥼..🥿)    lab coat..flat shoe
-	{0x1F980, 0x1F984, prExtendedPictographic}, // E1.0   [5] (🦀..🦄)    crab..unicorn
-	{0x1F985, 0x1F991, prExtendedPictographic}, // E3.0  [13] (🦅..🦑)    eagle..squid
-	{0x1F992, 0x1F997, prExtendedPictographic}, // E5.0   [6] (🦒..🦗)    giraffe..cricket
-	{0x1F998, 0x1F9A2, prExtendedPictographic}, // E11.0 [11] (🦘..🦢)    kangaroo..swan
-	{0x1F9A3, 0x1F9A4, prExtendedPictographic}, // E13.0  [2] (🦣..🦤)    mammoth..dodo
-	{0x1F9A5, 0x1F9AA, prExtendedPictographic}, // E12.0  [6] (🦥..🦪)    sloth..oyster
-	{0x1F9AB, 0x1F9AD, prExtendedPictographic}, // E13.0  [3] (🦫..🦭)    beaver..seal
-	{0x1F9AE, 0x1F9AF, prExtendedPictographic}, // E12.0  [2] (🦮..🦯)    guide dog..white cane
-	{0x1F9B0, 0x1F9B9, prExtendedPictographic}, // E11.0 [10] (🦰..🦹)    red hair..supervillain
-	{0x1F9BA, 0x1F9BF, prExtendedPictographic}, // E12.0  [6] (🦺..🦿)    safety vest..mechanical leg
-	{0x1F9C0, 0x1F9C0, prExtendedPictographic}, // E1.0   [1] (🧀)       cheese wedge
-	{0x1F9C1, 0x1F9C2, prExtendedPictographic}, // E11.0  [2] (🧁..🧂)    cupcake..salt
-	{0x1F9C3, 0x1F9CA, prExtendedPictographic}, // E12.0  [8] (🧃..🧊)    beverage box..ice
-	{0x1F9CB, 0x1F9CB, prExtendedPictographic}, // E13.0  [1] (🧋)       bubble tea
-	{0x1F9CC, 0x1F9CC, prExtendedPictographic}, // E14.0  [1] (🧌)       troll
-	{0x1F9CD, 0x1F9CF, prExtendedPictographic}, // E12.0  [3] (🧍..🧏)    person standing..deaf person
-	{0x1F9D0, 0x1F9E6, prExtendedPictographic}, // E5.0  [23] (🧐..🧦)    face with monocle..socks
-	{0x1F9E7, 0x1F9FF, prExtendedPictographic}, // E11.0 [25] (🧧..🧿)    red envelope..nazar amulet
-	{0x1FA00, 0x1FA6F, prExtendedPictographic}, // E0.0 [112] (🨀..🩯)    NEUTRAL CHESS KING..<reserved-1FA6F>
-	{0x1FA70, 0x1FA73, prExtendedPictographic}, // E12.0  [4] (🩰..🩳)    ballet shoes..shorts
-	{0x1FA74, 0x1FA74, prExtendedPictographic}, // E13.0  [1] (🩴)       thong sandal
-	{0x1FA75, 0x1FA77, prExtendedPictographic}, // E15.0  [3] (🩵..🩷)    light blue heart..pink heart
-	{0x1FA78, 0x1FA7A, prExtendedPictographic}, // E12.0  [3] (🩸..🩺)    drop of blood..stethoscope
-	{0x1FA7B, 0x1FA7C, prExtendedPictographic}, // E14.0  [2] (🩻..🩼)    x-ray..crutch
-	{0x1FA7D, 0x1FA7F, prExtendedPictographic}, // E0.0   [3] (🩽..🩿)    <reserved-1FA7D>..<reserved-1FA7F>
-	{0x1FA80, 0x1FA82, prExtendedPictographic}, // E12.0  [3] (🪀..🪂)    yo-yo..parachute
-	{0x1FA83, 0x1FA86, prExtendedPictographic}, // E13.0  [4] (🪃..🪆)    boomerang..nesting dolls
-	{0x1FA87, 0x1FA88, prExtendedPictographic}, // E15.0  [2] (🪇..🪈)    maracas..flute
-	{0x1FA89, 0x1FA8F, prExtendedPictographic}, // E0.0   [7] (🪉..🪏)    <reserved-1FA89>..<reserved-1FA8F>
-	{0x1FA90, 0x1FA95, prExtendedPictographic}, // E12.0  [6] (🪐..🪕)    ringed planet..banjo
-	{0x1FA96, 0x1FAA8, prExtendedPictographic}, // E13.0 [19] (🪖..🪨)    military helmet..rock
-	{0x1FAA9, 0x1FAAC, prExtendedPictographic}, // E14.0  [4] (🪩..🪬)    mirror ball..hamsa
-	{0x1FAAD, 0x1FAAF, prExtendedPictographic}, // E15.0  [3] (🪭..🪯)    folding hand fan..khanda
-	{0x1FAB0, 0x1FAB6, prExtendedPictographic}, // E13.0  [7] (🪰..🪶)    fly..feather
-	{0x1FAB7, 0x1FABA, prExtendedPictographic}, // E14.0  [4] (🪷..🪺)    lotus..nest with eggs
-	{0x1FABB, 0x1FABD, prExtendedPictographic}, // E15.0  [3] (🪻..🪽)    hyacinth..wing
-	{0x1FABE, 0x1FABE, prExtendedPictographic}, // E0.0   [1] (🪾)       <reserved-1FABE>
-	{0x1FABF, 0x1FABF, prExtendedPictographic}, // E15.0  [1] (🪿)       goose
-	{0x1FAC0, 0x1FAC2, prExtendedPictographic}, // E13.0  [3] (🫀..🫂)    anatomical heart..people hugging
-	{0x1FAC3, 0x1FAC5, prExtendedPictographic}, // E14.0  [3] (🫃..🫅)    pregnant man..person with crown
-	{0x1FAC6, 0x1FACD, prExtendedPictographic}, // E0.0   [8] (🫆..🫍)    <reserved-1FAC6>..<reserved-1FACD>
-	{0x1FACE, 0x1FACF, prExtendedPictographic}, // E15.0  [2] (🫎..🫏)    moose..donkey
-	{0x1FAD0, 0x1FAD6, prExtendedPictographic}, // E13.0  [7] (🫐..🫖)    blueberries..teapot
-	{0x1FAD7, 0x1FAD9, prExtendedPictographic}, // E14.0  [3] (🫗..🫙)    pouring liquid..jar
-	{0x1FADA, 0x1FADB, prExtendedPictographic}, // E15.0  [2] (🫚..🫛)    ginger root..pea pod
-	{0x1FADC, 0x1FADF, prExtendedPictographic}, // E0.0   [4] (🫜..🫟)    <reserved-1FADC>..<reserved-1FADF>
-	{0x1FAE0, 0x1FAE7, prExtendedPictographic}, // E14.0  [8] (🫠..🫧)    melting face..bubbles
-	{0x1FAE8, 0x1FAE8, prExtendedPictographic}, // E15.0  [1] (🫨)       shaking face
-	{0x1FAE9, 0x1FAEF, prExtendedPictographic}, // E0.0   [7] (🫩..🫯)    <reserved-1FAE9>..<reserved-1FAEF>
-	{0x1FAF0, 0x1FAF6, prExtendedPictographic}, // E14.0  [7] (🫰..🫶)    hand with index finger and thumb crossed..heart hands
-	{0x1FAF7, 0x1FAF8, prExtendedPictographic}, // E15.0  [2] (🫷..🫸)    leftwards pushing hand..rightwards pushing hand
-	{0x1FAF9, 0x1FAFF, prExtendedPictographic}, // E0.0   [7] (🫹..🫿)    <reserved-1FAF9>..<reserved-1FAFF>
-	{0x1FBF0, 0x1FBF9, prNumeric},              // Nd  [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE
-	{0x1FC00, 0x1FFFD, prExtendedPictographic}, // E0.0[1022] (🰀..🿽)    <reserved-1FC00>..<reserved-1FFFD>
-	{0xE0001, 0xE0001, prFormat},               // Cf       LANGUAGE TAG
-	{0xE0020, 0xE007F, prExtend},               // Cf  [96] TAG SPACE..CANCEL TAG
-	{0xE0100, 0xE01EF, prExtend},               // Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256
-}

+ 0 - 282
v2/vendor/github.com/rivo/uniseg/wordrules.go

@@ -1,282 +0,0 @@
-package uniseg
-
-import "unicode/utf8"
-
-// The states of the word break parser.
-const (
-	wbAny = iota
-	wbCR
-	wbLF
-	wbNewline
-	wbWSegSpace
-	wbHebrewLetter
-	wbALetter
-	wbWB7
-	wbWB7c
-	wbNumeric
-	wbWB11
-	wbKatakana
-	wbExtendNumLet
-	wbOddRI
-	wbEvenRI
-	wbZWJBit = 16 // This bit is set for any states followed by at least one zero-width joiner (see WB4 and WB3c).
-)
-
-// wbTransitions implements the word break parser's state transitions. It's
-// anologous to [grTransitions], see comments there for details.
-//
-// Unicode version 15.0.0.
-func wbTransitions(state, prop int) (newState int, wordBreak bool, rule int) {
-	switch uint64(state) | uint64(prop)<<32 {
-	// WB3b.
-	case wbAny | prNewline<<32:
-		return wbNewline, true, 32
-	case wbAny | prCR<<32:
-		return wbCR, true, 32
-	case wbAny | prLF<<32:
-		return wbLF, true, 32
-
-	// WB3a.
-	case wbNewline | prAny<<32:
-		return wbAny, true, 31
-	case wbCR | prAny<<32:
-		return wbAny, true, 31
-	case wbLF | prAny<<32:
-		return wbAny, true, 31
-
-	// WB3.
-	case wbCR | prLF<<32:
-		return wbLF, false, 30
-
-	// WB3d.
-	case wbAny | prWSegSpace<<32:
-		return wbWSegSpace, true, 9990
-	case wbWSegSpace | prWSegSpace<<32:
-		return wbWSegSpace, false, 34
-
-	// WB5.
-	case wbAny | prALetter<<32:
-		return wbALetter, true, 9990
-	case wbAny | prHebrewLetter<<32:
-		return wbHebrewLetter, true, 9990
-	case wbALetter | prALetter<<32:
-		return wbALetter, false, 50
-	case wbALetter | prHebrewLetter<<32:
-		return wbHebrewLetter, false, 50
-	case wbHebrewLetter | prALetter<<32:
-		return wbALetter, false, 50
-	case wbHebrewLetter | prHebrewLetter<<32:
-		return wbHebrewLetter, false, 50
-
-	// WB7. Transitions to wbWB7 handled by transitionWordBreakState().
-	case wbWB7 | prALetter<<32:
-		return wbALetter, false, 70
-	case wbWB7 | prHebrewLetter<<32:
-		return wbHebrewLetter, false, 70
-
-	// WB7a.
-	case wbHebrewLetter | prSingleQuote<<32:
-		return wbAny, false, 71
-
-	// WB7c. Transitions to wbWB7c handled by transitionWordBreakState().
-	case wbWB7c | prHebrewLetter<<32:
-		return wbHebrewLetter, false, 73
-
-	// WB8.
-	case wbAny | prNumeric<<32:
-		return wbNumeric, true, 9990
-	case wbNumeric | prNumeric<<32:
-		return wbNumeric, false, 80
-
-	// WB9.
-	case wbALetter | prNumeric<<32:
-		return wbNumeric, false, 90
-	case wbHebrewLetter | prNumeric<<32:
-		return wbNumeric, false, 90
-
-	// WB10.
-	case wbNumeric | prALetter<<32:
-		return wbALetter, false, 100
-	case wbNumeric | prHebrewLetter<<32:
-		return wbHebrewLetter, false, 100
-
-	// WB11. Transitions to wbWB11 handled by transitionWordBreakState().
-	case wbWB11 | prNumeric<<32:
-		return wbNumeric, false, 110
-
-	// WB13.
-	case wbAny | prKatakana<<32:
-		return wbKatakana, true, 9990
-	case wbKatakana | prKatakana<<32:
-		return wbKatakana, false, 130
-
-	// WB13a.
-	case wbAny | prExtendNumLet<<32:
-		return wbExtendNumLet, true, 9990
-	case wbALetter | prExtendNumLet<<32:
-		return wbExtendNumLet, false, 131
-	case wbHebrewLetter | prExtendNumLet<<32:
-		return wbExtendNumLet, false, 131
-	case wbNumeric | prExtendNumLet<<32:
-		return wbExtendNumLet, false, 131
-	case wbKatakana | prExtendNumLet<<32:
-		return wbExtendNumLet, false, 131
-	case wbExtendNumLet | prExtendNumLet<<32:
-		return wbExtendNumLet, false, 131
-
-	// WB13b.
-	case wbExtendNumLet | prALetter<<32:
-		return wbALetter, false, 132
-	case wbExtendNumLet | prHebrewLetter<<32:
-		return wbHebrewLetter, false, 132
-	case wbExtendNumLet | prNumeric<<32:
-		return wbNumeric, false, 132
-	case wbExtendNumLet | prKatakana<<32:
-		return wbKatakana, false, 132
-
-	default:
-		return -1, false, -1
-	}
-}
-
-// transitionWordBreakState determines the new state of the word break parser
-// given the current state and the next code point. It also returns whether a
-// word boundary was detected. If more than one code point is needed to
-// determine the new state, the byte slice or the string starting after rune "r"
-// can be used (whichever is not nil or empty) for further lookups.
-func transitionWordBreakState(state int, r rune, b []byte, str string) (newState int, wordBreak bool) {
-	// Determine the property of the next character.
-	nextProperty := property(workBreakCodePoints, r)
-
-	// "Replacing Ignore Rules".
-	if nextProperty == prZWJ {
-		// WB4 (for zero-width joiners).
-		if state == wbNewline || state == wbCR || state == wbLF {
-			return wbAny | wbZWJBit, true // Make sure we don't apply WB4 to WB3a.
-		}
-		if state < 0 {
-			return wbAny | wbZWJBit, false
-		}
-		return state | wbZWJBit, false
-	} else if nextProperty == prExtend || nextProperty == prFormat {
-		// WB4 (for Extend and Format).
-		if state == wbNewline || state == wbCR || state == wbLF {
-			return wbAny, true // Make sure we don't apply WB4 to WB3a.
-		}
-		if state == wbWSegSpace || state == wbAny|wbZWJBit {
-			return wbAny, false // We don't break but this is also not WB3d or WB3c.
-		}
-		if state < 0 {
-			return wbAny, false
-		}
-		return state, false
-	} else if nextProperty == prExtendedPictographic && state >= 0 && state&wbZWJBit != 0 {
-		// WB3c.
-		return wbAny, false
-	}
-	if state >= 0 {
-		state = state &^ wbZWJBit
-	}
-
-	// Find the applicable transition in the table.
-	var rule int
-	newState, wordBreak, rule = wbTransitions(state, nextProperty)
-	if newState < 0 {
-		// No specific transition found. Try the less specific ones.
-		anyPropState, anyPropWordBreak, anyPropRule := wbTransitions(state, prAny)
-		anyStateState, anyStateWordBreak, anyStateRule := wbTransitions(wbAny, nextProperty)
-		if anyPropState >= 0 && anyStateState >= 0 {
-			// Both apply. We'll use a mix (see comments for grTransitions).
-			newState, wordBreak, rule = anyStateState, anyStateWordBreak, anyStateRule
-			if anyPropRule < anyStateRule {
-				wordBreak, rule = anyPropWordBreak, anyPropRule
-			}
-		} else if anyPropState >= 0 {
-			// We only have a specific state.
-			newState, wordBreak, rule = anyPropState, anyPropWordBreak, anyPropRule
-			// This branch will probably never be reached because okAnyState will
-			// always be true given the current transition map. But we keep it here
-			// for future modifications to the transition map where this may not be
-			// true anymore.
-		} else if anyStateState >= 0 {
-			// We only have a specific property.
-			newState, wordBreak, rule = anyStateState, anyStateWordBreak, anyStateRule
-		} else {
-			// No known transition. WB999: Any ÷ Any.
-			newState, wordBreak, rule = wbAny, true, 9990
-		}
-	}
-
-	// For those rules that need to look up runes further in the string, we
-	// determine the property after nextProperty, skipping over Format, Extend,
-	// and ZWJ (according to WB4). It's -1 if not needed, if such a rune cannot
-	// be determined (because the text ends or the rune is faulty).
-	farProperty := -1
-	if rule > 60 &&
-		(state == wbALetter || state == wbHebrewLetter || state == wbNumeric) &&
-		(nextProperty == prMidLetter || nextProperty == prMidNumLet || nextProperty == prSingleQuote || // WB6.
-			nextProperty == prDoubleQuote || // WB7b.
-			nextProperty == prMidNum) { // WB12.
-		for {
-			var (
-				r      rune
-				length int
-			)
-			if b != nil { // Byte slice version.
-				r, length = utf8.DecodeRune(b)
-				b = b[length:]
-			} else { // String version.
-				r, length = utf8.DecodeRuneInString(str)
-				str = str[length:]
-			}
-			if r == utf8.RuneError {
-				break
-			}
-			prop := property(workBreakCodePoints, r)
-			if prop == prExtend || prop == prFormat || prop == prZWJ {
-				continue
-			}
-			farProperty = prop
-			break
-		}
-	}
-
-	// WB6.
-	if rule > 60 &&
-		(state == wbALetter || state == wbHebrewLetter) &&
-		(nextProperty == prMidLetter || nextProperty == prMidNumLet || nextProperty == prSingleQuote) &&
-		(farProperty == prALetter || farProperty == prHebrewLetter) {
-		return wbWB7, false
-	}
-
-	// WB7b.
-	if rule > 72 &&
-		state == wbHebrewLetter &&
-		nextProperty == prDoubleQuote &&
-		farProperty == prHebrewLetter {
-		return wbWB7c, false
-	}
-
-	// WB12.
-	if rule > 120 &&
-		state == wbNumeric &&
-		(nextProperty == prMidNum || nextProperty == prMidNumLet || nextProperty == prSingleQuote) &&
-		farProperty == prNumeric {
-		return wbWB11, false
-	}
-
-	// WB15 and WB16.
-	if newState == wbAny && nextProperty == prRegionalIndicator {
-		if state != wbOddRI && state != wbEvenRI { // Includes state == -1.
-			// Transition into the first RI.
-			return wbOddRI, true
-		}
-		if state == wbOddRI {
-			// Don't break pairs of Regional Indicators.
-			return wbEvenRI, false
-		}
-		return wbOddRI, true // We can break after a pair.
-	}
-
-	return
-}

+ 2 - 0
v2/vendor/github.com/valyala/fasthttp/.golangci.yml

@@ -31,6 +31,7 @@ linters:
     - nestif
     - nlreturn
     - noctx
+    - noinlineerr
     - nonamedreturns
     - paralleltest
     - testableexamples
@@ -42,6 +43,7 @@ linters:
     - varnamelen
     - wrapcheck
     - wsl
+    - wsl_v5
   settings:
     gocritic:
       disabled-checks:

+ 80 - 70
v2/vendor/github.com/valyala/fasthttp/README.md

@@ -16,7 +16,7 @@ Currently fasthttp is successfully used by [VertaMedia](https://vertamedia.com/)
 in a production serving up to 200K rps from more than 1.5M concurrent keep-alive
 connections per physical server.
 
-[TechEmpower Benchmark round 19 results](https://www.techempower.com/benchmarks/#section=data-r19&hw=ph&test=plaintext)
+[TechEmpower Benchmark round 23 results](https://www.techempower.com/benchmarks/#section=data-r23&hw=ph&test=plaintext)
 
 [Server Benchmarks](#http-server-performance-comparison-with-nethttp)
 
@@ -36,15 +36,13 @@ connections per physical server.
 
 [Fasthttp best practices](#fasthttp-best-practices)
 
-[Tricks with byte buffers](#tricks-with-byte-buffers)
-
 [Related projects](#related-projects)
 
 [FAQ](#faq)
 
 ## HTTP server performance comparison with [net/http](https://pkg.go.dev/net/http)
 
-In short, fasthttp server is up to 10 times faster than net/http.
+In short, fasthttp server is up to 6 times faster than net/http.
 Below are benchmark results.
 
 _GOMAXPROCS=1_
@@ -53,28 +51,30 @@ net/http server:
 
 ```
 $ GOMAXPROCS=1 go test -bench=NetHTTPServerGet -benchmem -benchtime=10s
-BenchmarkNetHTTPServerGet1ReqPerConn                	 1000000	     12052 ns/op	    2297 B/op	      29 allocs/op
-BenchmarkNetHTTPServerGet2ReqPerConn                	 1000000	     12278 ns/op	    2327 B/op	      24 allocs/op
-BenchmarkNetHTTPServerGet10ReqPerConn               	 2000000	      8903 ns/op	    2112 B/op	      19 allocs/op
-BenchmarkNetHTTPServerGet10KReqPerConn              	 2000000	      8451 ns/op	    2058 B/op	      18 allocs/op
-BenchmarkNetHTTPServerGet1ReqPerConn10KClients      	  500000	     26733 ns/op	    3229 B/op	      29 allocs/op
-BenchmarkNetHTTPServerGet2ReqPerConn10KClients      	 1000000	     23351 ns/op	    3211 B/op	      24 allocs/op
-BenchmarkNetHTTPServerGet10ReqPerConn10KClients     	 1000000	     13390 ns/op	    2483 B/op	      19 allocs/op
-BenchmarkNetHTTPServerGet100ReqPerConn10KClients    	 1000000	     13484 ns/op	    2171 B/op	      18 allocs/op
+cpu: Intel(R) Xeon(R) CPU @ 2.20GHz
+BenchmarkNetHTTPServerGet1ReqPerConn                      722565             15327 ns/op            3258 B/op         36 allocs/op
+BenchmarkNetHTTPServerGet2ReqPerConn                      990067             11533 ns/op            2817 B/op         28 allocs/op
+BenchmarkNetHTTPServerGet10ReqPerConn                    1376821              8734 ns/op            2483 B/op         23 allocs/op
+BenchmarkNetHTTPServerGet10KReqPerConn                   1691265              7151 ns/op            2385 B/op         21 allocs/op
+BenchmarkNetHTTPServerGet1ReqPerConn10KClients            643940             17152 ns/op            3529 B/op         36 allocs/op
+BenchmarkNetHTTPServerGet2ReqPerConn10KClients            868576             14010 ns/op            2826 B/op         28 allocs/op
+BenchmarkNetHTTPServerGet10ReqPerConn10KClients          1297398              9329 ns/op            2611 B/op         23 allocs/op
+BenchmarkNetHTTPServerGet100ReqPerConn10KClients         1467963              7902 ns/op            2450 B/op         21 allocs/op
 ```
 
 fasthttp server:
 
 ```
 $ GOMAXPROCS=1 go test -bench=kServerGet -benchmem -benchtime=10s
-BenchmarkServerGet1ReqPerConn                       	10000000	      1559 ns/op	       0 B/op	       0 allocs/op
-BenchmarkServerGet2ReqPerConn                       	10000000	      1248 ns/op	       0 B/op	       0 allocs/op
-BenchmarkServerGet10ReqPerConn                      	20000000	       797 ns/op	       0 B/op	       0 allocs/op
-BenchmarkServerGet10KReqPerConn                     	20000000	       716 ns/op	       0 B/op	       0 allocs/op
-BenchmarkServerGet1ReqPerConn10KClients             	10000000	      1974 ns/op	       0 B/op	       0 allocs/op
-BenchmarkServerGet2ReqPerConn10KClients             	10000000	      1352 ns/op	       0 B/op	       0 allocs/op
-BenchmarkServerGet10ReqPerConn10KClients            	20000000	       789 ns/op	       2 B/op	       0 allocs/op
-BenchmarkServerGet100ReqPerConn10KClients           	20000000	       604 ns/op	       0 B/op	       0 allocs/op
+cpu: Intel(R) Xeon(R) CPU @ 2.20GHz
+BenchmarkServerGet1ReqPerConn                    4304683              2733 ns/op               0 B/op          0 allocs/op
+BenchmarkServerGet2ReqPerConn                    5685157              2140 ns/op               0 B/op          0 allocs/op
+BenchmarkServerGet10ReqPerConn                   7659729              1550 ns/op               0 B/op          0 allocs/op
+BenchmarkServerGet10KReqPerConn                  8580660              1422 ns/op               0 B/op          0 allocs/op
+BenchmarkServerGet1ReqPerConn10KClients          4092148              3009 ns/op               0 B/op          0 allocs/op
+BenchmarkServerGet2ReqPerConn10KClients          5272755              2208 ns/op               0 B/op          0 allocs/op
+BenchmarkServerGet10ReqPerConn10KClients         7566351              1546 ns/op               0 B/op          0 allocs/op
+BenchmarkServerGet100ReqPerConn10KClients        8369295              1418 ns/op               0 B/op          0 allocs/op
 ```
 
 _GOMAXPROCS=4_
@@ -83,33 +83,35 @@ net/http server:
 
 ```
 $ GOMAXPROCS=4 go test -bench=NetHTTPServerGet -benchmem -benchtime=10s
-BenchmarkNetHTTPServerGet1ReqPerConn-4                  	 3000000	      4529 ns/op	    2389 B/op	      29 allocs/op
-BenchmarkNetHTTPServerGet2ReqPerConn-4                  	 5000000	      3896 ns/op	    2418 B/op	      24 allocs/op
-BenchmarkNetHTTPServerGet10ReqPerConn-4                 	 5000000	      3145 ns/op	    2160 B/op	      19 allocs/op
-BenchmarkNetHTTPServerGet10KReqPerConn-4                	 5000000	      3054 ns/op	    2065 B/op	      18 allocs/op
-BenchmarkNetHTTPServerGet1ReqPerConn10KClients-4        	 1000000	     10321 ns/op	    3710 B/op	      30 allocs/op
-BenchmarkNetHTTPServerGet2ReqPerConn10KClients-4        	 2000000	      7556 ns/op	    3296 B/op	      24 allocs/op
-BenchmarkNetHTTPServerGet10ReqPerConn10KClients-4       	 5000000	      3905 ns/op	    2349 B/op	      19 allocs/op
-BenchmarkNetHTTPServerGet100ReqPerConn10KClients-4      	 5000000	      3435 ns/op	    2130 B/op	      18 allocs/op
+cpu: Intel(R) Xeon(R) CPU @ 2.20GHz
+BenchmarkNetHTTPServerGet1ReqPerConn-4                   2670654              4542 ns/op            3263 B/op         36 allocs/op
+BenchmarkNetHTTPServerGet2ReqPerConn-4                   3376021              3559 ns/op            2823 B/op         28 allocs/op
+BenchmarkNetHTTPServerGet10ReqPerConn-4                  4387959              2707 ns/op            2489 B/op         23 allocs/op
+BenchmarkNetHTTPServerGet10KReqPerConn-4                 5412049              2179 ns/op            2386 B/op         21 allocs/op
+BenchmarkNetHTTPServerGet1ReqPerConn10KClients-4         2226048              5216 ns/op            3289 B/op         36 allocs/op
+BenchmarkNetHTTPServerGet2ReqPerConn10KClients-4         2989957              3982 ns/op            2839 B/op         28 allocs/op
+BenchmarkNetHTTPServerGet10ReqPerConn10KClients-4        4383570              2834 ns/op            2514 B/op         23 allocs/op
+BenchmarkNetHTTPServerGet100ReqPerConn10KClients-4       5315100              2394 ns/op            2419 B/op         21 allocs/op
 ```
 
 fasthttp server:
 
 ```
 $ GOMAXPROCS=4 go test -bench=kServerGet -benchmem -benchtime=10s
-BenchmarkServerGet1ReqPerConn-4                         	10000000	      1141 ns/op	       0 B/op	       0 allocs/op
-BenchmarkServerGet2ReqPerConn-4                         	20000000	       707 ns/op	       0 B/op	       0 allocs/op
-BenchmarkServerGet10ReqPerConn-4                        	30000000	       341 ns/op	       0 B/op	       0 allocs/op
-BenchmarkServerGet10KReqPerConn-4                       	50000000	       310 ns/op	       0 B/op	       0 allocs/op
-BenchmarkServerGet1ReqPerConn10KClients-4               	10000000	      1119 ns/op	       0 B/op	       0 allocs/op
-BenchmarkServerGet2ReqPerConn10KClients-4               	20000000	       644 ns/op	       0 B/op	       0 allocs/op
-BenchmarkServerGet10ReqPerConn10KClients-4              	30000000	       346 ns/op	       0 B/op	       0 allocs/op
-BenchmarkServerGet100ReqPerConn10KClients-4             	50000000	       282 ns/op	       0 B/op	       0 allocs/op
+cpu: Intel(R) Xeon(R) CPU @ 2.20GHz
+BenchmarkServerGet1ReqPerConn-4                  7797037              1494 ns/op               0 B/op          0 allocs/op
+BenchmarkServerGet2ReqPerConn-4                 13004892               963.7 ns/op             0 B/op          0 allocs/op
+BenchmarkServerGet10ReqPerConn-4                22479348               522.6 ns/op             0 B/op          0 allocs/op
+BenchmarkServerGet10KReqPerConn-4               25899390               451.4 ns/op             0 B/op          0 allocs/op
+BenchmarkServerGet1ReqPerConn10KClients-4        8421531              1469 ns/op               0 B/op          0 allocs/op
+BenchmarkServerGet2ReqPerConn10KClients-4       13426772               903.7 ns/op             0 B/op          0 allocs/op
+BenchmarkServerGet10ReqPerConn10KClients-4      21899584               513.5 ns/op             0 B/op          0 allocs/op
+BenchmarkServerGet100ReqPerConn10KClients-4     25291686               439.4 ns/op             0 B/op          0 allocs/op
 ```
 
 ## HTTP client comparison with net/http
 
-In short, fasthttp client is up to 10 times faster than net/http.
+In short, fasthttp client is up to 4 times faster than net/http.
 Below are benchmark results.
 
 _GOMAXPROCS=1_
@@ -118,28 +120,34 @@ net/http client:
 
 ```
 $ GOMAXPROCS=1 go test -bench='HTTPClient(Do|GetEndToEnd)' -benchmem -benchtime=10s
-BenchmarkNetHTTPClientDoFastServer                  	 1000000	     12567 ns/op	    2616 B/op	      35 allocs/op
-BenchmarkNetHTTPClientGetEndToEnd1TCP               	  200000	     67030 ns/op	    5028 B/op	      56 allocs/op
-BenchmarkNetHTTPClientGetEndToEnd10TCP              	  300000	     51098 ns/op	    5031 B/op	      56 allocs/op
-BenchmarkNetHTTPClientGetEndToEnd100TCP             	  300000	     45096 ns/op	    5026 B/op	      55 allocs/op
-BenchmarkNetHTTPClientGetEndToEnd1Inmemory          	  500000	     24779 ns/op	    5035 B/op	      57 allocs/op
-BenchmarkNetHTTPClientGetEndToEnd10Inmemory         	 1000000	     26425 ns/op	    5035 B/op	      57 allocs/op
-BenchmarkNetHTTPClientGetEndToEnd100Inmemory        	  500000	     28515 ns/op	    5045 B/op	      57 allocs/op
-BenchmarkNetHTTPClientGetEndToEnd1000Inmemory       	  500000	     39511 ns/op	    5096 B/op	      56 allocs/op
+cpu: Intel(R) Xeon(R) CPU @ 2.20GHz
+BenchmarkNetHTTPClientDoFastServer                        885637             13883 ns/op            3384 B/op         44 allocs/op
+BenchmarkNetHTTPClientGetEndToEnd1TCP                     203875             55619 ns/op            6296 B/op         70 allocs/op
+BenchmarkNetHTTPClientGetEndToEnd10TCP                    231290             54618 ns/op            6299 B/op         70 allocs/op
+BenchmarkNetHTTPClientGetEndToEnd100TCP                   202879             58278 ns/op            6304 B/op         69 allocs/op
+BenchmarkNetHTTPClientGetEndToEnd1Inmemory                396764             26878 ns/op            6216 B/op         69 allocs/op
+BenchmarkNetHTTPClientGetEndToEnd10Inmemory               396422             28373 ns/op            6209 B/op         68 allocs/op
+BenchmarkNetHTTPClientGetEndToEnd100Inmemory              363976             33101 ns/op            6326 B/op         68 allocs/op
+BenchmarkNetHTTPClientGetEndToEnd1000Inmemory             208881             51725 ns/op            8298 B/op         84 allocs/op
+BenchmarkNetHTTPClientGetEndToEndWaitConn1Inmemory           237          50451765 ns/op            7474 B/op         79 allocs/op
+BenchmarkNetHTTPClientGetEndToEndWaitConn10Inmemory          237          50447244 ns/op            7434 B/op         77 allocs/op
+BenchmarkNetHTTPClientGetEndToEndWaitConn100Inmemory         238          50067993 ns/op            8639 B/op         82 allocs/op
+BenchmarkNetHTTPClientGetEndToEndWaitConn1000Inmemory       1366           7324990 ns/op            4064 B/op         44 allocs/op
 ```
 
 fasthttp client:
 
 ```
 $ GOMAXPROCS=1 go test -bench='kClient(Do|GetEndToEnd)' -benchmem -benchtime=10s
-BenchmarkClientDoFastServer                         	20000000	       865 ns/op	       0 B/op	       0 allocs/op
-BenchmarkClientGetEndToEnd1TCP                      	 1000000	     18711 ns/op	       0 B/op	       0 allocs/op
-BenchmarkClientGetEndToEnd10TCP                     	 1000000	     14664 ns/op	       0 B/op	       0 allocs/op
-BenchmarkClientGetEndToEnd100TCP                    	 1000000	     14043 ns/op	       1 B/op	       0 allocs/op
-BenchmarkClientGetEndToEnd1Inmemory                 	 5000000	      3965 ns/op	       0 B/op	       0 allocs/op
-BenchmarkClientGetEndToEnd10Inmemory                	 3000000	      4060 ns/op	       0 B/op	       0 allocs/op
-BenchmarkClientGetEndToEnd100Inmemory               	 5000000	      3396 ns/op	       0 B/op	       0 allocs/op
-BenchmarkClientGetEndToEnd1000Inmemory              	 5000000	      3306 ns/op	       2 B/op	       0 allocs/op
+cpu: Intel(R) Xeon(R) CPU @ 2.20GHz
+BenchmarkClientGetEndToEnd1TCP                    406376             26558 ns/op               0 B/op          0 allocs/op
+BenchmarkClientGetEndToEnd10TCP                   517425             23595 ns/op               0 B/op          0 allocs/op
+BenchmarkClientGetEndToEnd100TCP                  474800             25153 ns/op               3 B/op          0 allocs/op
+BenchmarkClientGetEndToEnd1Inmemory              2563800              4827 ns/op               0 B/op          0 allocs/op
+BenchmarkClientGetEndToEnd10Inmemory             2460135              4805 ns/op               0 B/op          0 allocs/op
+BenchmarkClientGetEndToEnd100Inmemory            2520543              4846 ns/op               0 B/op          0 allocs/op
+BenchmarkClientGetEndToEnd1000Inmemory           2437015              4914 ns/op               2 B/op          0 allocs/op
+BenchmarkClientGetEndToEnd10KInmemory            2481050              5049 ns/op               9 B/op          0 allocs/op
 ```
 
 _GOMAXPROCS=4_
@@ -148,28 +156,29 @@ net/http client:
 
 ```
 $ GOMAXPROCS=4 go test -bench='HTTPClient(Do|GetEndToEnd)' -benchmem -benchtime=10s
-BenchmarkNetHTTPClientDoFastServer-4                    	 2000000	      8774 ns/op	    2619 B/op	      35 allocs/op
-BenchmarkNetHTTPClientGetEndToEnd1TCP-4                 	  500000	     22951 ns/op	    5047 B/op	      56 allocs/op
-BenchmarkNetHTTPClientGetEndToEnd10TCP-4                	 1000000	     19182 ns/op	    5037 B/op	      55 allocs/op
-BenchmarkNetHTTPClientGetEndToEnd100TCP-4               	 1000000	     16535 ns/op	    5031 B/op	      55 allocs/op
-BenchmarkNetHTTPClientGetEndToEnd1Inmemory-4            	 1000000	     14495 ns/op	    5038 B/op	      56 allocs/op
-BenchmarkNetHTTPClientGetEndToEnd10Inmemory-4           	 1000000	     10237 ns/op	    5034 B/op	      56 allocs/op
-BenchmarkNetHTTPClientGetEndToEnd100Inmemory-4          	 1000000	     10125 ns/op	    5045 B/op	      56 allocs/op
-BenchmarkNetHTTPClientGetEndToEnd1000Inmemory-4         	 1000000	     11132 ns/op	    5136 B/op	      56 allocs/op
+cpu: Intel(R) Xeon(R) CPU @ 2.20GHz
+BenchmarkNetHTTPClientGetEndToEnd1TCP-4                           767133             16175 ns/op            6304 B/op         69 allocs/op
+BenchmarkNetHTTPClientGetEndToEnd10TCP-4                          785198             15276 ns/op            6295 B/op         69 allocs/op
+BenchmarkNetHTTPClientGetEndToEnd100TCP-4                         780464             15605 ns/op            6305 B/op         69 allocs/op
+BenchmarkNetHTTPClientGetEndToEnd1Inmemory-4                     1356932              8772 ns/op            6220 B/op         68 allocs/op
+BenchmarkNetHTTPClientGetEndToEnd10Inmemory-4                    1379245              8726 ns/op            6213 B/op         68 allocs/op
+BenchmarkNetHTTPClientGetEndToEnd100Inmemory-4                   1119213             10294 ns/op            6418 B/op         68 allocs/op
+BenchmarkNetHTTPClientGetEndToEnd1000Inmemory-4                   504194             31010 ns/op           17668 B/op        102 allocs/op
 ```
 
 fasthttp client:
 
 ```
 $ GOMAXPROCS=4 go test -bench='kClient(Do|GetEndToEnd)' -benchmem -benchtime=10s
-BenchmarkClientDoFastServer-4                           	50000000	       397 ns/op	       0 B/op	       0 allocs/op
-BenchmarkClientGetEndToEnd1TCP-4                        	 2000000	      7388 ns/op	       0 B/op	       0 allocs/op
-BenchmarkClientGetEndToEnd10TCP-4                       	 2000000	      6689 ns/op	       0 B/op	       0 allocs/op
-BenchmarkClientGetEndToEnd100TCP-4                      	 3000000	      4927 ns/op	       1 B/op	       0 allocs/op
-BenchmarkClientGetEndToEnd1Inmemory-4                   	10000000	      1604 ns/op	       0 B/op	       0 allocs/op
-BenchmarkClientGetEndToEnd10Inmemory-4                  	10000000	      1458 ns/op	       0 B/op	       0 allocs/op
-BenchmarkClientGetEndToEnd100Inmemory-4                 	10000000	      1329 ns/op	       0 B/op	       0 allocs/op
-BenchmarkClientGetEndToEnd1000Inmemory-4                	10000000	      1316 ns/op	       5 B/op	       0 allocs/op
+cpu: Intel(R) Xeon(R) CPU @ 2.20GHz
+BenchmarkClientGetEndToEnd1TCP-4                         1474552              8143 ns/op               0 B/op          0 allocs/op
+BenchmarkClientGetEndToEnd10TCP-4                        1710270              7186 ns/op               0 B/op          0 allocs/op
+BenchmarkClientGetEndToEnd100TCP-4                       1701672              6892 ns/op               4 B/op          0 allocs/op
+BenchmarkClientGetEndToEnd1Inmemory-4                    6797713              1590 ns/op               0 B/op          0 allocs/op
+BenchmarkClientGetEndToEnd10Inmemory-4                   6663642              1782 ns/op               0 B/op          0 allocs/op
+BenchmarkClientGetEndToEnd100Inmemory-4                  6608209              1867 ns/op               0 B/op          0 allocs/op
+BenchmarkClientGetEndToEnd1000Inmemory-4                 6254452              2645 ns/op               8 B/op          0 allocs/op
+BenchmarkClientGetEndToEnd10KInmemory-4                  6944584              1966 ns/op              17 B/op          0 allocs/op
 ```
 
 ## Install
@@ -580,6 +589,7 @@ This is an **unsafe** way, the result string and `[]byte` buffer share the same
 - [http2](https://github.com/dgrr/http2) - HTTP/2 implementation for fasthttp.
 - [router](https://github.com/fasthttp/router) - a high
   performance fasthttp request router that scales well.
+- [fasthttp-auth](https://github.com/casbin/fasthttp-auth) - Authorization middleware for fasthttp using Casbin.
 - [fastws](https://github.com/fasthttp/fastws) - Bloatless WebSocket package made for fasthttp
   to handle Read/Write operations concurrently.
 - [gramework](https://github.com/gramework/gramework) - a web framework made by one of fasthttp maintainers.
@@ -653,7 +663,7 @@ This is an **unsafe** way, the result string and `[]byte` buffer share the same
 - _Which GO versions are supported by fasthttp?_
 
   We support the same versions the Go team supports.
-  Currently that is Go 1.23.x and newer.
+  Currently that is Go 1.24.x and newer.
   Older versions might work, but won't officially be supported.
 
 - _Please provide real benchmark data and server information_

+ 2 - 2
v2/vendor/github.com/valyala/fasthttp/brotli.go

@@ -17,8 +17,8 @@ const (
 	CompressBrotliBestSpeed       = brotli.BestSpeed
 	CompressBrotliBestCompression = brotli.BestCompression
 
-	// Choose a default brotli compression level comparable to
-	// CompressDefaultCompression (gzip 6)
+	// CompressBrotliDefaultCompression chooses a default brotli compression level comparable to
+	// CompressDefaultCompression (gzip 6).
 	// See: https://github.com/valyala/fasthttp/issues/798#issuecomment-626293806
 	CompressBrotliDefaultCompression = 4
 )

+ 3 - 3
v2/vendor/github.com/valyala/fasthttp/client.go

@@ -924,7 +924,7 @@ type clientConn struct {
 	lastUseTime time.Time
 }
 
-// CreatedTime returns net.Conn the client.
+// Conn returns the underlying net.Conn associated with the client connection.
 func (cc *clientConn) Conn() net.Conn {
 	return cc.c
 }
@@ -1115,7 +1115,7 @@ var (
 	// exceed the max count.
 	ErrTooManyRedirects = errors.New("too many redirects detected when doing the request")
 
-	// HostClients are only able to follow redirects to the same protocol.
+	// ErrHostClientRedirectToDifferentScheme is returned when a HostClient follows a redirect to a different protocol.
 	ErrHostClientRedirectToDifferentScheme = errors.New("HostClient can't follow redirects to a different protocol," +
 		" please use Client instead")
 )
@@ -1522,7 +1522,7 @@ func (e *timeoutError) Error() string {
 	return "timeout"
 }
 
-// Only implement the Timeout() function of the net.Error interface.
+// Timeout implements the Timeout behavior of the net.Error interface.
 // This allows for checks like:
 //
 //	if x, ok := err.(interface{ Timeout() bool }); ok && x.Timeout() {

+ 243 - 44
v2/vendor/github.com/valyala/fasthttp/fasthttpadaptor/adaptor.go

@@ -4,10 +4,12 @@ package fasthttpadaptor
 
 import (
 	"bufio"
+	"fmt"
 	"io"
 	"net"
 	"net/http"
 	"sync"
+	"sync/atomic"
 
 	"github.com/valyala/fasthttp"
 )
@@ -56,67 +58,227 @@ func NewFastHTTPHandler(h http.Handler) fasthttp.RequestHandler {
 			ctx.Error("Internal Server Error", fasthttp.StatusInternalServerError)
 			return
 		}
-		w := netHTTPResponseWriter{
-			w:   ctx.Response.BodyWriter(),
-			ctx: ctx,
-		}
-		h.ServeHTTP(&w, r.WithContext(ctx))
 
-		ctx.SetStatusCode(w.StatusCode())
-		haveContentType := false
-		for k, vv := range w.Header() {
-			if k == fasthttp.HeaderContentType {
-				haveContentType = true
+		w := acquireWriter(ctx)
+		// Serve the net/http handler concurrently so we can react to Flush/Hijack.
+		go func() {
+			defer func() {
+				if rec := recover(); rec != nil {
+					ctx.Logger().Printf("panic in net/http handler: %v", rec)
+
+					select {
+					case w.modeCh <- modePanicked:
+					default:
+					}
+				} else {
+					// Signal completion if no other mode was selected yet.
+					select {
+					case w.modeCh <- modeDone:
+					default:
+					}
+				}
+
+				_ = w.Close()
+			}()
+
+			h.ServeHTTP(w, r.WithContext(ctx))
+		}()
+
+		// Decide mode by first event.
+		switch <-w.modeCh {
+		case modeDone:
+			// Buffered, no Flush() nor Hijack().
+			ctx.SetStatusCode(w.status())
+			haveContentType := false
+			for k, vv := range w.Header() {
+				if k == fasthttp.HeaderContentType {
+					haveContentType = true
+				}
+
+				for _, v := range vv {
+					ctx.Response.Header.Add(k, v)
+				}
 			}
 
-			for _, v := range vv {
-				ctx.Response.Header.Add(k, v)
+			if !haveContentType {
+				// From net/http.ResponseWriter.Write:
+				// If the Header does not contain a Content-Type line, Write adds a Content-Type set
+				// to the result of passing the initial 512 bytes of written data to DetectContentType.
+				l := min(len(w.responseBody), 512)
+				if l > 0 {
+					ctx.Response.Header.Set(fasthttp.HeaderContentType, http.DetectContentType(w.responseBody[:l]))
+				}
 			}
-		}
-		if !haveContentType {
-			// From net/http.ResponseWriter.Write:
-			// If the Header does not contain a Content-Type line, Write adds a Content-Type set
-			// to the result of passing the initial 512 bytes of written data to DetectContentType.
-			l := 512
-			b := ctx.Response.Body()
-			if len(b) < 512 {
-				l = len(b)
+			if len(w.responseBody) > 0 {
+				ctx.Response.SetBody(w.responseBody)
 			}
-			ctx.Response.Header.Set(fasthttp.HeaderContentType, http.DetectContentType(b[:l]))
+			releaseWriter(w)
+
+		case modeFlushed:
+			// Streaming: send headers and start SetBodyStreamWriter.
+			ctx.SetStatusCode(w.status())
+
+			haveContentType := false
+			for k, vv := range w.Header() {
+				// No Content-Length when streaming.
+				if k == fasthttp.HeaderContentLength {
+					continue
+				}
+				if k == fasthttp.HeaderContentType {
+					haveContentType = true
+				}
+				for _, v := range vv {
+					ctx.Response.Header.Add(k, v)
+				}
+			}
+			if !haveContentType {
+				w.mu.Lock()
+				if len(w.responseBody) > 0 {
+					l := min(len(w.responseBody), 512)
+					ctx.Response.Header.Set(fasthttp.HeaderContentType, http.DetectContentType(w.responseBody[:l]))
+				}
+				w.mu.Unlock()
+			}
+
+			ctx.SetBodyStreamWriter(func(bw *bufio.Writer) {
+				// Ensure cleanup only after the stream completes.
+				defer releaseWriter(w)
+
+				// Send pre-flush bytes.
+				if b := w.consumePreflush(); len(b) > 0 {
+					_, _ = bw.Write(b)
+					_ = bw.Flush()
+				}
+
+				// Stream subsequent writes from the pipe until EOF.
+				buf := bufferPool.Get().(*[]byte)
+				defer bufferPool.Put(buf)
+
+				for {
+					n, err := w.pr.Read(*buf)
+					if n > 0 {
+						if _, e := bw.Write((*buf)[:n]); e != nil {
+							return
+						}
+						if e := bw.Flush(); e != nil {
+							return
+						}
+					}
+					if err != nil {
+						return
+					}
+				}
+			})
+
+			// Signal the writer that streaming is ready so Flush() can return.
+			close(w.streamReady)
+
+		case modeHijacked:
+			return
+
+		case modePanicked:
+			panic("net/http handler panicked")
 		}
 	}
 }
 
-type netHTTPResponseWriter struct {
-	w          io.Writer
-	h          http.Header
+var bufferPool = sync.Pool{
+	New: func() any {
+		b := make([]byte, 32*1024)
+		return &b
+	},
+}
+
+const (
+	modeDone = iota + 1
+	modeFlushed
+	modeHijacked
+	modePanicked
+)
+
+// Writer implements http.ResponseWriter + http.Flusher + http.Hijacker for the adaptor.
+type writer struct {
 	ctx        *fasthttp.RequestCtx
-	statusCode int
+	h          http.Header
+	statusCode atomic.Int64
+
+	mu           sync.Mutex
+	responseBody []byte
+	bufPool      *[]byte
+
+	pr *io.PipeReader
+	pw *io.PipeWriter
+
+	hijacked atomic.Bool
+
+	modeCh chan int
+
+	streamReady chan struct{}
+
+	flushOnce sync.Once
+	closeOnce sync.Once
 }
 
-func (w *netHTTPResponseWriter) StatusCode() int {
-	if w.statusCode == 0 {
-		return http.StatusOK
+func acquireWriter(ctx *fasthttp.RequestCtx) *writer {
+	pr, pw := io.Pipe()
+	return &writer{
+		ctx:          ctx,
+		h:            make(http.Header),
+		responseBody: nil,
+		pr:           pr,
+		pw:           pw,
+		modeCh:       make(chan int, 1),
+		streamReady:  make(chan struct{}),
 	}
-	return w.statusCode
 }
 
-func (w *netHTTPResponseWriter) Header() http.Header {
-	if w.h == nil {
-		w.h = make(http.Header)
+func releaseWriter(w *writer) {
+	_ = w.Close()
+	if w.bufPool != nil {
+		bufferPool.Put(w.bufPool)
+		w.bufPool = nil
 	}
+}
+
+func (w *writer) Header() http.Header {
 	return w.h
 }
 
-func (w *netHTTPResponseWriter) WriteHeader(statusCode int) {
-	w.statusCode = statusCode
+func (w *writer) WriteHeader(code int) {
+	// Allow the same codes as net/http.
+	if code < 100 || code > 999 {
+		panic(fmt.Sprintf("invalid WriteHeader code %v", code))
+	}
+	w.statusCode.CompareAndSwap(0, int64(code))
 }
 
-func (w *netHTTPResponseWriter) Write(p []byte) (int, error) {
-	return w.w.Write(p)
+func (w *writer) Write(p []byte) (int, error) {
+	select {
+	case <-w.streamReady:
+		return w.pw.Write(p)
+	default:
+	}
+
+	w.mu.Lock()
+	defer w.mu.Unlock()
+
+	if w.responseBody == nil {
+		w.bufPool = bufferPool.Get().(*[]byte)
+		w.responseBody = (*w.bufPool)[:0]
+	}
+	w.responseBody = append(w.responseBody, p...)
+	return len(p), nil
 }
 
-func (w *netHTTPResponseWriter) Flush() {}
+func (w *writer) Flush() {
+	w.flushOnce.Do(func() {
+		select {
+		case w.modeCh <- modeFlushed:
+		default:
+		}
+	})
+	<-w.streamReady
+}
 
 type wrappedConn struct {
 	net.Conn
@@ -130,12 +292,15 @@ func (c *wrappedConn) Close() (err error) {
 		err = c.Conn.Close()
 		c.wg.Done()
 	})
-	return
+	return err
 }
 
-func (w *netHTTPResponseWriter) Hijack() (net.Conn, *bufio.ReadWriter, error) {
-	// Hijack assumes control of the connection, so we need to prevent fasthttp from closing it or
-	// doing anything else with it.
+func (w *writer) Hijack() (net.Conn, *bufio.ReadWriter, error) {
+	if !w.hijacked.CompareAndSwap(false, true) {
+		return nil, nil, http.ErrHijacked
+	}
+
+	// Tell fasthttp not to send any HTTP response before hijacking.
 	w.ctx.HijackSetNoResponse(true)
 
 	conn := &wrappedConn{Conn: w.ctx.Conn()}
@@ -147,13 +312,47 @@ func (w *netHTTPResponseWriter) Hijack() (net.Conn, *bufio.ReadWriter, error) {
 	bufW := bufio.NewWriter(conn)
 
 	// Write any unflushed body to the hijacked connection buffer.
-	unflushedBody := w.ctx.Response.Body()
+	unflushedBody := w.consumePreflush()
 	if len(unflushedBody) > 0 {
 		if _, err := bufW.Write(unflushedBody); err != nil {
-			conn.Close()
+			_ = conn.Close()
 			return nil, nil, err
 		}
 	}
 
+	select {
+	case w.modeCh <- modeHijacked:
+	default:
+	}
+
 	return conn, &bufio.ReadWriter{Reader: bufio.NewReader(conn), Writer: bufW}, nil
 }
+
+func (w *writer) Close() error {
+	w.closeOnce.Do(func() {
+		_ = w.pw.Close()
+		_ = w.pr.Close()
+	})
+	return nil
+}
+
+// status returns the effective status code (defaults to 200).
+func (w *writer) status() int {
+	code := int(w.statusCode.Load())
+	if code == 0 {
+		return http.StatusOK
+	}
+	return code
+}
+
+// consumePreflush returns pre-flush bytes and clears the buffer.
+func (w *writer) consumePreflush() []byte {
+	w.mu.Lock()
+	defer w.mu.Unlock()
+	if len(w.responseBody) == 0 {
+		return nil
+	}
+	out := w.responseBody
+	w.responseBody = nil
+	return out
+}

+ 1 - 1
v2/vendor/github.com/valyala/fasthttp/fasthttputil/pipeconns.go

@@ -229,7 +229,7 @@ func (e *timeoutError) Error() string {
 	return "timeout"
 }
 
-// Only implement the Timeout() function of the net.Error interface.
+// Timeout implements the Timeout method of the net.Error interface.
 // This allows for checks like:
 //
 //	if x, ok := err.(interface{ Timeout() bool }); ok && x.Timeout() {

+ 30 - 8
v2/vendor/github.com/valyala/fasthttp/header.go

@@ -47,9 +47,10 @@ type header struct {
 // ResponseHeader instance MUST NOT be used from concurrently running
 // goroutines.
 type ResponseHeader struct {
-	noCopy noCopy
 	header
 
+	noCopy noCopy
+
 	statusMessage   []byte
 	contentEncoding []byte
 	server          []byte
@@ -67,9 +68,10 @@ type ResponseHeader struct {
 // RequestHeader instance MUST NOT be used from concurrently running
 // goroutines.
 type RequestHeader struct {
-	noCopy noCopy
 	header
 
+	noCopy noCopy
+
 	method     []byte
 	requestURI []byte
 	host       []byte
@@ -2049,8 +2051,7 @@ func (h *ResponseHeader) PeekKeys() [][]byte {
 // Any future calls to the Peek* will modify the returned value.
 // Do not store references to returned value. Make copies instead.
 func (h *header) PeekTrailerKeys() [][]byte {
-	h.mulHeader = copyTrailer(h.mulHeader, h.trailer)
-	return h.mulHeader
+	return h.trailer
 }
 
 // Cookie returns cookie for the given key.
@@ -2809,8 +2810,16 @@ func (h *RequestHeader) parseFirstLine(buf []byte) (int, error) {
 
 	b = b[n+1:]
 
-	// parse requestURI
-	n = bytes.LastIndexByte(b, ' ')
+	// Check for extra whitespace after method - only one space should separate method from URI
+	if len(b) > 0 && b[0] == ' ' {
+		if h.secureErrorLogMessage {
+			return 0, errors.New("extra whitespace in request line")
+		}
+		return 0, fmt.Errorf("extra whitespace in request line %q", buf)
+	}
+
+	// parse requestURI - RFC 9112 requires exactly one space between components
+	n = bytes.IndexByte(b, ' ')
 	if n < 0 {
 		return 0, fmt.Errorf("cannot find whitespace in the first line of request %q", buf)
 	} else if n == 0 {
@@ -2820,6 +2829,14 @@ func (h *RequestHeader) parseFirstLine(buf []byte) (int, error) {
 		return 0, fmt.Errorf("requestURI cannot be empty in %q", buf)
 	}
 
+	// Check for extra whitespace - only one space should separate URI from HTTP version
+	if n+1 < len(b) && b[n+1] == ' ' {
+		if h.secureErrorLogMessage {
+			return 0, errors.New("extra whitespace in request line")
+		}
+		return 0, fmt.Errorf("extra whitespace in request line %q", buf)
+	}
+
 	protoStr := b[n+1:]
 
 	// Follow RFCs 7230 and 9112 and require that HTTP versions match the following pattern: HTTP/[0-9]\.[0-9]
@@ -3335,14 +3352,19 @@ func appendTrailerBytes(dst []byte, trailer [][]byte, sep []byte) []byte {
 }
 
 func copyTrailer(dst, src [][]byte) [][]byte {
-	if cap(dst) > len(src) {
+	if cap(dst) >= len(src) {
 		dst = dst[:len(src)]
 	} else {
 		dst = append(dst[:0], src...)
 	}
 
 	for i := range dst {
-		dst[i] = make([]byte, len(src[i]))
+		l := len(src[i])
+		if cap(dst[i]) >= l {
+			dst[i] = dst[i][:l]
+		} else {
+			dst[i] = make([]byte, l)
+		}
 		copy(dst[i], src[i])
 	}
 	return dst

+ 105 - 147
v2/vendor/github.com/valyala/fasthttp/headers.go

@@ -1,165 +1,123 @@
 package fasthttp
 
-// Headers.
 const (
-	// Authentication.
-	HeaderAuthorization      = "Authorization"
-	HeaderProxyAuthenticate  = "Proxy-Authenticate"
-	HeaderProxyAuthorization = "Proxy-Authorization"
-	HeaderWWWAuthenticate    = "WWW-Authenticate"
-
-	// Caching.
-	HeaderAge           = "Age"
-	HeaderCacheControl  = "Cache-Control"
-	HeaderClearSiteData = "Clear-Site-Data"
-	HeaderExpires       = "Expires"
-	HeaderPragma        = "Pragma"
-	HeaderWarning       = "Warning"
-
-	// Client hints.
-	HeaderAcceptCH         = "Accept-CH"
-	HeaderAcceptCHLifetime = "Accept-CH-Lifetime"
-	HeaderContentDPR       = "Content-DPR"
-	HeaderDPR              = "DPR"
-	HeaderEarlyData        = "Early-Data"
-	HeaderSaveData         = "Save-Data"
-	HeaderViewportWidth    = "Viewport-Width"
-	HeaderWidth            = "Width"
-
-	// Conditionals.
-	HeaderETag              = "ETag"
-	HeaderIfMatch           = "If-Match"
-	HeaderIfModifiedSince   = "If-Modified-Since"
-	HeaderIfNoneMatch       = "If-None-Match"
-	HeaderIfUnmodifiedSince = "If-Unmodified-Since"
-	HeaderLastModified      = "Last-Modified"
-	HeaderVary              = "Vary"
-
-	// Connection management.
-	HeaderConnection      = "Connection"
-	HeaderKeepAlive       = "Keep-Alive"
-	HeaderProxyConnection = "Proxy-Connection"
-
-	// Content negotiation.
-	HeaderAccept         = "Accept"
-	HeaderAcceptCharset  = "Accept-Charset"
-	HeaderAcceptEncoding = "Accept-Encoding"
-	HeaderAcceptLanguage = "Accept-Language"
-
-	// Controls.
-	HeaderCookie      = "Cookie"
-	HeaderExpect      = "Expect"
-	HeaderMaxForwards = "Max-Forwards"
-	HeaderSetCookie   = "Set-Cookie"
-
-	// CORS.
-	HeaderAccessControlAllowCredentials = "Access-Control-Allow-Credentials"
-	HeaderAccessControlAllowHeaders     = "Access-Control-Allow-Headers"
-	HeaderAccessControlAllowMethods     = "Access-Control-Allow-Methods"
-	HeaderAccessControlAllowOrigin      = "Access-Control-Allow-Origin"
-	HeaderAccessControlExposeHeaders    = "Access-Control-Expose-Headers"
-	HeaderAccessControlMaxAge           = "Access-Control-Max-Age"
-	HeaderAccessControlRequestHeaders   = "Access-Control-Request-Headers"
-	HeaderAccessControlRequestMethod    = "Access-Control-Request-Method"
-	HeaderOrigin                        = "Origin"
-	HeaderTimingAllowOrigin             = "Timing-Allow-Origin"
-	HeaderXPermittedCrossDomainPolicies = "X-Permitted-Cross-Domain-Policies"
-
-	// Do Not Track.
-	HeaderDNT = "DNT"
-	HeaderTk  = "Tk"
-
-	// Downloads.
-	HeaderContentDisposition = "Content-Disposition"
-
-	// Message body information.
-	HeaderContentEncoding = "Content-Encoding"
-	HeaderContentLanguage = "Content-Language"
-	HeaderContentLength   = "Content-Length"
-	HeaderContentLocation = "Content-Location"
-	HeaderContentType     = "Content-Type"
-
-	// Proxies.
-	HeaderForwarded       = "Forwarded"
-	HeaderVia             = "Via"
-	HeaderXForwardedFor   = "X-Forwarded-For"
-	HeaderXForwardedHost  = "X-Forwarded-Host"
-	HeaderXForwardedProto = "X-Forwarded-Proto"
-
-	// Redirects.
-	HeaderLocation = "Location"
-
-	// Request context.
-	HeaderFrom           = "From"
-	HeaderHost           = "Host"
-	HeaderReferer        = "Referer"
-	HeaderReferrerPolicy = "Referrer-Policy"
-	HeaderUserAgent      = "User-Agent"
-
-	// Response context.
-	HeaderAllow  = "Allow"
-	HeaderServer = "Server"
-
-	// Range requests.
-	HeaderAcceptRanges = "Accept-Ranges"
-	HeaderContentRange = "Content-Range"
-	HeaderIfRange      = "If-Range"
-	HeaderRange        = "Range"
-
-	// Security.
+	HeaderAccept                          = "Accept"
+	HeaderAcceptCH                        = "Accept-CH"
+	HeaderAcceptCharset                   = "Accept-Charset"
+	HeaderAcceptCHLifetime                = "Accept-CH-Lifetime"
+	HeaderAcceptEncoding                  = "Accept-Encoding"
+	HeaderAcceptLanguage                  = "Accept-Language"
+	HeaderAcceptPatch                     = "Accept-Patch"
+	HeaderAcceptPushPolicy                = "Accept-Push-Policy"
+	HeaderAcceptRanges                    = "Accept-Ranges"
+	HeaderAcceptSignature                 = "Accept-Signature"
+	HeaderAccessControlAllowCredentials   = "Access-Control-Allow-Credentials"
+	HeaderAccessControlAllowHeaders       = "Access-Control-Allow-Headers"
+	HeaderAccessControlAllowMethods       = "Access-Control-Allow-Methods"
+	HeaderAccessControlAllowOrigin        = "Access-Control-Allow-Origin"
+	HeaderAccessControlExposeHeaders      = "Access-Control-Expose-Headers"
+	HeaderAccessControlMaxAge             = "Access-Control-Max-Age"
+	HeaderAccessControlRequestHeaders     = "Access-Control-Request-Headers"
+	HeaderAccessControlRequestMethod      = "Access-Control-Request-Method"
+	HeaderAge                             = "Age"
+	HeaderAllow                           = "Allow"
+	HeaderAltSvc                          = "Alt-Svc"
+	HeaderAuthorization                   = "Authorization"
+	HeaderCacheControl                    = "Cache-Control"
+	HeaderClearSiteData                   = "Clear-Site-Data"
+	HeaderConnection                      = "Connection"
+	HeaderContentDisposition              = "Content-Disposition"
+	HeaderContentDPR                      = "Content-DPR"
+	HeaderContentEncoding                 = "Content-Encoding"
+	HeaderContentLanguage                 = "Content-Language"
+	HeaderContentLength                   = "Content-Length"
+	HeaderContentLocation                 = "Content-Location"
+	HeaderContentRange                    = "Content-Range"
 	HeaderContentSecurityPolicy           = "Content-Security-Policy"
 	HeaderContentSecurityPolicyReportOnly = "Content-Security-Policy-Report-Only"
+	HeaderContentType                     = "Content-Type"
+	HeaderCookie                          = "Cookie"
 	HeaderCrossOriginResourcePolicy       = "Cross-Origin-Resource-Policy"
+	HeaderDate                            = "Date"
+	HeaderDNT                             = "DNT"
+	HeaderDPR                             = "DPR"
+	HeaderEarlyData                       = "Early-Data"
+	HeaderETag                            = "ETag"
+	HeaderExpect                          = "Expect"
 	HeaderExpectCT                        = "Expect-CT"
+	HeaderExpires                         = "Expires"
 	HeaderFeaturePolicy                   = "Feature-Policy"
+	HeaderForwarded                       = "Forwarded"
+	HeaderFrom                            = "From"
+	HeaderHost                            = "Host"
+	HeaderIfMatch                         = "If-Match"
+	HeaderIfModifiedSince                 = "If-Modified-Since"
+	HeaderIfNoneMatch                     = "If-None-Match"
+	HeaderIfRange                         = "If-Range"
+	HeaderIfUnmodifiedSince               = "If-Unmodified-Since"
+	HeaderIndex                           = "Index"
+	HeaderKeepAlive                       = "Keep-Alive"
+	HeaderLargeAllocation                 = "Large-Allocation"
+	HeaderLastEventID                     = "Last-Event-ID"
+	HeaderLastModified                    = "Last-Modified"
+	HeaderLink                            = "Link"
+	HeaderLocation                        = "Location"
+	HeaderMaxForwards                     = "Max-Forwards"
+	HeaderNEL                             = "NEL"
+	HeaderOrigin                          = "Origin"
+	HeaderPingFrom                        = "Ping-From"
+	HeaderPingTo                          = "Ping-To"
+	HeaderPragma                          = "Pragma"
+	HeaderProxyAuthenticate               = "Proxy-Authenticate"
+	HeaderProxyAuthorization              = "Proxy-Authorization"
+	HeaderProxyConnection                 = "Proxy-Connection"
 	HeaderPublicKeyPins                   = "Public-Key-Pins"
 	HeaderPublicKeyPinsReportOnly         = "Public-Key-Pins-Report-Only"
+	HeaderPushPolicy                      = "Push-Policy"
+	HeaderRange                           = "Range"
+	HeaderReferer                         = "Referer"
+	HeaderReferrerPolicy                  = "Referrer-Policy"
+	HeaderReportTo                        = "Report-To"
+	HeaderRetryAfter                      = "Retry-After"
+	HeaderSaveData                        = "Save-Data"
+	HeaderSecWebSocketAccept              = "Sec-WebSocket-Accept"
+	HeaderSecWebSocketExtensions          = "Sec-WebSocket-Extensions" // #nosec G101
+	HeaderSecWebSocketKey                 = "Sec-WebSocket-Key"
+	HeaderSecWebSocketProtocol            = "Sec-WebSocket-Protocol"
+	HeaderSecWebSocketVersion             = "Sec-WebSocket-Version"
+	HeaderServer                          = "Server"
+	HeaderServerTiming                    = "Server-Timing"
+	HeaderSetCookie                       = "Set-Cookie"
+	HeaderSignature                       = "Signature"
+	HeaderSignedHeaders                   = "Signed-Headers"
+	HeaderSourceMap                       = "SourceMap"
 	HeaderStrictTransportSecurity         = "Strict-Transport-Security"
+	HeaderTE                              = "TE"
+	HeaderTimingAllowOrigin               = "Timing-Allow-Origin"
+	HeaderTk                              = "Tk"
+	HeaderTrailer                         = "Trailer"
+	HeaderTransferEncoding                = "Transfer-Encoding"
+	HeaderUpgrade                         = "Upgrade"
 	HeaderUpgradeInsecureRequests         = "Upgrade-Insecure-Requests"
+	HeaderUserAgent                       = "User-Agent"
+	HeaderVary                            = "Vary"
+	HeaderVia                             = "Via"
+	HeaderViewportWidth                   = "Viewport-Width"
+	HeaderWarning                         = "Warning"
+	HeaderWidth                           = "Width"
+	HeaderWWWAuthenticate                 = "WWW-Authenticate"
 	HeaderXContentTypeOptions             = "X-Content-Type-Options"
+	HeaderXDNSPrefetchControl             = "X-DNS-Prefetch-Control"
 	HeaderXDownloadOptions                = "X-Download-Options"
+	HeaderXForwardedFor                   = "X-Forwarded-For"
+	HeaderXForwardedHost                  = "X-Forwarded-Host"
+	HeaderXForwardedProto                 = "X-Forwarded-Proto"
 	HeaderXFrameOptions                   = "X-Frame-Options"
+	HeaderXPermittedCrossDomainPolicies   = "X-Permitted-Cross-Domain-Policies"
+	HeaderXPingback                       = "X-Pingback"
 	HeaderXPoweredBy                      = "X-Powered-By"
+	HeaderXRequestedWith                  = "X-Requested-With"
+	HeaderXRobotsTag                      = "X-Robots-Tag"
+	HeaderXUACompatible                   = "X-UA-Compatible"
 	HeaderXXSSProtection                  = "X-XSS-Protection"
-
-	// Server-sent event.
-	HeaderLastEventID = "Last-Event-ID"
-	HeaderNEL         = "NEL"
-	HeaderPingFrom    = "Ping-From"
-	HeaderPingTo      = "Ping-To"
-	HeaderReportTo    = "Report-To"
-
-	// Transfer coding.
-	HeaderTE               = "TE"
-	HeaderTrailer          = "Trailer"
-	HeaderTransferEncoding = "Transfer-Encoding"
-
-	// WebSockets.
-	HeaderSecWebSocketAccept     = "Sec-WebSocket-Accept"
-	HeaderSecWebSocketExtensions = "Sec-WebSocket-Extensions" // #nosec G101
-	HeaderSecWebSocketKey        = "Sec-WebSocket-Key"
-	HeaderSecWebSocketProtocol   = "Sec-WebSocket-Protocol"
-	HeaderSecWebSocketVersion    = "Sec-WebSocket-Version"
-
-	// Other.
-	HeaderAcceptPatch         = "Accept-Patch"
-	HeaderAcceptPushPolicy    = "Accept-Push-Policy"
-	HeaderAcceptSignature     = "Accept-Signature"
-	HeaderAltSvc              = "Alt-Svc"
-	HeaderDate                = "Date"
-	HeaderIndex               = "Index"
-	HeaderLargeAllocation     = "Large-Allocation"
-	HeaderLink                = "Link"
-	HeaderPushPolicy          = "Push-Policy"
-	HeaderRetryAfter          = "Retry-After"
-	HeaderServerTiming        = "Server-Timing"
-	HeaderSignature           = "Signature"
-	HeaderSignedHeaders       = "Signed-Headers"
-	HeaderSourceMap           = "SourceMap"
-	HeaderUpgrade             = "Upgrade"
-	HeaderXDNSPrefetchControl = "X-DNS-Prefetch-Control"
-	HeaderXPingback           = "X-Pingback"
-	HeaderXRequestedWith      = "X-Requested-With"
-	HeaderXRobotsTag          = "X-Robots-Tag"
-	HeaderXUACompatible       = "X-UA-Compatible"
 )

+ 2 - 2
v2/vendor/github.com/valyala/fasthttp/headerscanner.go

@@ -88,7 +88,7 @@ func (s *headerScanner) readLine() (line []byte) {
 	}
 
 	if len(line) == 0 {
-		return
+		return nil
 	}
 
 	// drop \n and possible preceding \r
@@ -99,7 +99,7 @@ func (s *headerScanner) readLine() (line []byte) {
 		}
 		line = line[:len(line)-drop]
 	}
-	return
+	return line
 }
 
 // readContinuedLineSlice reads continued lines from b until it finds a line

+ 12 - 3
v2/vendor/github.com/valyala/fasthttp/http.go

@@ -66,6 +66,7 @@ type Request struct {
 	// Group bool members in order to reduce Request object size.
 	parsedURI      bool
 	parsedPostArgs bool
+	uriParseErr    error
 
 	keepBodyBuffer bool
 
@@ -146,12 +147,14 @@ func (req *Request) Host() []byte {
 func (req *Request) SetRequestURI(requestURI string) {
 	req.Header.SetRequestURI(requestURI)
 	req.parsedURI = false
+	req.uriParseErr = nil
 }
 
 // SetRequestURIBytes sets RequestURI.
 func (req *Request) SetRequestURIBytes(requestURI []byte) {
 	req.Header.SetRequestURIBytes(requestURI)
 	req.parsedURI = false
+	req.uriParseErr = nil
 }
 
 // RequestURI returns request's URI.
@@ -346,6 +349,7 @@ type ReadCloserWithError interface {
 
 type closeReader struct {
 	io.Reader
+
 	closeFunc func(err error) error
 }
 
@@ -890,6 +894,7 @@ func (req *Request) copyToSkipBody(dst *Request) {
 
 	req.uri.CopyTo(&dst.uri)
 	dst.parsedURI = req.parsedURI
+	dst.uriParseErr = req.uriParseErr
 
 	req.postArgs.CopyTo(&dst.postArgs)
 	dst.parsedPostArgs = req.parsedPostArgs
@@ -959,19 +964,22 @@ func (req *Request) SetURI(newURI *URI) {
 	if newURI != nil {
 		newURI.CopyTo(&req.uri)
 		req.parsedURI = true
+		req.uriParseErr = nil
 		return
 	}
 	req.uri.Reset()
 	req.parsedURI = false
+	req.uriParseErr = nil
 }
 
 func (req *Request) parseURI() error {
 	if req.parsedURI {
-		return nil
+		return req.uriParseErr
 	}
-	req.parsedURI = true
 
-	return req.uri.parse(req.Header.Host(), req.Header.RequestURI(), req.isTLS)
+	req.parsedURI = true
+	req.uriParseErr = req.uri.parse(req.Header.Host(), req.Header.RequestURI(), req.isTLS)
+	return req.uriParseErr
 }
 
 // PostArgs returns POST arguments.
@@ -1145,6 +1153,7 @@ func (req *Request) resetSkipHeader() {
 	req.ResetBody()
 	req.uri.Reset()
 	req.parsedURI = false
+	req.uriParseErr = nil
 	req.postArgs.Reset()
 	req.parsedPostArgs = false
 	req.isTLS = false

+ 195 - 0
v2/vendor/github.com/valyala/fasthttp/ipv6.go

@@ -0,0 +1,195 @@
+package fasthttp
+
+import (
+	"bytes"
+	"errors"
+)
+
+var (
+	errInvalidIPv6Host    = errors.New("invalid IPv6 host")
+	errInvalidIPv6Zone    = errors.New("invalid IPv6 zone")
+	errInvalidIPv6Address = errors.New("invalid IPv6 address")
+)
+
+func validateIPv6Literal(host []byte) error {
+	if len(host) == 0 || host[0] != '[' {
+		return nil
+	}
+	end := bytes.IndexByte(host, ']')
+	if end < 0 || end == 1 {
+		return errInvalidIPv6Host
+	}
+	addr := host[1:end]
+
+	// Optional zone.
+	if zi := bytes.IndexByte(addr, '%'); zi >= 0 {
+		if zi == len(addr)-1 {
+			return errInvalidIPv6Zone
+		}
+		addr = addr[:zi]
+	}
+
+	// Must have a colon to be IPv6.
+	if bytes.IndexByte(addr, ':') < 0 {
+		return errInvalidIPv6Address
+	}
+
+	// IPv4-embedded?
+	if bytes.IndexByte(addr, '.') >= 0 {
+		lastColon := bytes.LastIndexByte(addr, ':')
+		if lastColon < 0 || lastColon == len(addr)-1 {
+			return errInvalidIPv6Address
+		}
+
+		ipv4 := addr[lastColon+1:]
+		if !validIPv4(ipv4) {
+			return errInvalidIPv6Address
+		}
+
+		head := addr[:lastColon]
+		seenDoubleAtSplit := lastColon > 0 && addr[lastColon-1] == ':'
+		if seenDoubleAtSplit {
+			head = addr[:lastColon-1]
+		}
+
+		hextets, seenDoubleHead, ok := parseIPv6Hextets(head, false)
+		if !ok {
+			return errInvalidIPv6Address
+		}
+
+		if seenDoubleHead && seenDoubleAtSplit {
+			return errInvalidIPv6Address
+		}
+
+		hextets += 2 // IPv4 tail = 2 hextets
+		seenDouble := seenDoubleHead || seenDoubleAtSplit
+
+		// '::' must compress at least one hextet.
+		if (!seenDouble && hextets != 8) || (seenDouble && hextets >= 8) {
+			return errInvalidIPv6Address
+		}
+		return nil
+	}
+
+	// Pure IPv6
+	hextets, seenDouble, ok := parseIPv6Hextets(addr, false)
+	if !ok {
+		return errInvalidIPv6Address
+	}
+	if (!seenDouble && hextets != 8) || (seenDouble && hextets >= 8) {
+		return errInvalidIPv6Address
+	}
+	return nil
+}
+
+func parseIPv6Hextets(s []byte, allowTrailingColon bool) (groups int, seenDouble, ok bool) {
+	n := len(s)
+	if n == 0 {
+		return 0, false, true
+	}
+	i := 0
+	justSawDouble := false
+
+	for i < n {
+		if s[i] == ':' {
+			if i+1 < n && s[i+1] == ':' {
+				if seenDouble || justSawDouble {
+					return 0, false, false
+				}
+				seenDouble = true
+				justSawDouble = true
+				i += 2
+				if i == n {
+					break
+				}
+				continue
+			}
+			if i == 0 {
+				return 0, false, false
+			}
+			if justSawDouble {
+				return 0, false, false
+			}
+			if i == n-1 {
+				if allowTrailingColon {
+					break
+				}
+				return 0, false, false
+			}
+			if !ishex(s[i+1]) {
+				return 0, false, false
+			}
+			i++
+			continue
+		}
+
+		justSawDouble = false
+		cnt := 0
+		for cnt < 4 && i < n && ishex(s[i]) {
+			i++
+			cnt++
+		}
+		if cnt == 0 {
+			return 0, false, false
+		}
+		groups++
+
+		if i < n && s[i] != ':' {
+			return 0, false, false
+		}
+	}
+	return groups, seenDouble, true
+}
+
+// validIPv4 validates a dotted-quad (exactly 4 parts, 0..255) with no leading zeros
+// unless the octet is exactly "0".
+func validIPv4(s []byte) bool {
+	parts := 0
+	i := 0
+	n := len(s)
+
+	for parts < 4 {
+		if i >= n {
+			return false
+		}
+
+		start := i
+		val := 0
+		digits := 0
+
+		for i < n {
+			c := s[i]
+			if c < '0' || c > '9' {
+				break
+			}
+			val = val*10 + int(c-'0')
+			if val > 255 {
+				return false
+			}
+			i++
+			digits++
+			if digits > 3 {
+				return false
+			}
+		}
+		if digits == 0 {
+			return false
+		}
+
+		// Disallow leading zeros like "00", "01", "001".
+		// Allowed: exactly "0" or any number that doesn't start with '0'.
+		if digits > 1 && s[start] == '0' {
+			return false
+		}
+
+		parts++
+		if parts == 4 {
+			return i == n // must consume all input
+		}
+		if i >= n || s[i] != '.' {
+			return false
+		}
+		i++ // skip dot
+	}
+	return false
+}

+ 64 - 52
v2/vendor/github.com/valyala/fasthttp/server.go

@@ -315,11 +315,11 @@ type Server struct {
 
 	mu sync.Mutex
 
-	concurrency uint32
-	open        int32
-	stop        int32
+	concurrency atomic.Uint32
+	open        atomic.Int32
+	stop        atomic.Int32
 
-	rejectedRequestsCount uint32
+	rejectedRequestsCount atomic.Uint32
 
 	// Whether to disable keep-alive connections.
 	//
@@ -1123,14 +1123,14 @@ func SaveMultipartFile(fh *multipart.FileHeader, path string) (err error) {
 	)
 	f, err = fh.Open()
 	if err != nil {
-		return
+		return err
 	}
 
 	var ok bool
 	if ff, ok = f.(*os.File); ok {
 		// Windows can't rename files that are opened.
 		if err = f.Close(); err != nil {
-			return
+			return err
 		}
 
 		// If renaming fails we try the normal copying method.
@@ -1141,7 +1141,7 @@ func SaveMultipartFile(fh *multipart.FileHeader, path string) (err error) {
 
 		// Reopen f for the code below.
 		if f, err = fh.Open(); err != nil {
-			return
+			return err
 		}
 	}
 
@@ -1153,7 +1153,7 @@ func SaveMultipartFile(fh *multipart.FileHeader, path string) (err error) {
 	}()
 
 	if ff, err = os.Create(path); err != nil {
-		return
+		return err
 	}
 	defer func() {
 		e := ff.Close()
@@ -1162,7 +1162,7 @@ func SaveMultipartFile(fh *multipart.FileHeader, path string) (err error) {
 		}
 	}()
 	_, err = copyZeroAlloc(ff, f)
-	return
+	return err
 }
 
 // FormValue returns form value associated with the given key.
@@ -1649,26 +1649,26 @@ func (s *Server) NextProto(key string, nph ServeHandler) {
 	s.nextProtos[key] = nph
 }
 
-func (s *Server) getNextProto(c net.Conn) (proto string, err error) {
+func (s *Server) getNextProto(c net.Conn) (string, error) {
 	if tlsConn, ok := c.(connTLSer); ok {
 		if s.ReadTimeout > 0 {
-			if err = c.SetReadDeadline(time.Now().Add(s.ReadTimeout)); err != nil {
-				return
+			if err := c.SetReadDeadline(time.Now().Add(s.ReadTimeout)); err != nil {
+				return "", err
 			}
 		}
 
 		if s.WriteTimeout > 0 {
-			if err = c.SetWriteDeadline(time.Now().Add(s.WriteTimeout)); err != nil {
-				return
+			if err := c.SetWriteDeadline(time.Now().Add(s.WriteTimeout)); err != nil {
+				return "", err
 			}
 		}
 
-		err = tlsConn.Handshake()
+		err := tlsConn.Handshake()
 		if err == nil {
-			proto = tlsConn.ConnectionState().NegotiatedProtocol
+			return tlsConn.ConnectionState().NegotiatedProtocol, nil
 		}
 	}
-	return
+	return "", nil
 }
 
 // ListenAndServe serves HTTP requests from the given TCP4 addr.
@@ -1871,8 +1871,8 @@ func (s *Server) Serve(ln net.Listener) error {
 	// This way we can't get into any weird state where just after accepting
 	// a connection Shutdown is called which reads open as 0 because it isn't
 	// incremented yet.
-	atomic.AddInt32(&s.open, 1)
-	defer atomic.AddInt32(&s.open, -1)
+	s.open.Add(1)
+	defer s.open.Add(-1)
 
 	for {
 		c, err := acceptConn(s, ln, &lastPerIPErrorTime)
@@ -1884,10 +1884,10 @@ func (s *Server) Serve(ln net.Listener) error {
 			return err
 		}
 		s.setState(c, StateNew)
-		atomic.AddInt32(&s.open, 1)
+		s.open.Add(1)
 		if !wp.Serve(c) {
-			atomic.AddInt32(&s.open, -1)
-			atomic.AddUint32(&s.rejectedRequestsCount, 1)
+			s.open.Add(-1)
+			s.rejectedRequestsCount.Add(1)
 			s.writeFastError(c, StatusServiceUnavailable,
 				"The connection cannot be served because Server.Concurrency limit exceeded")
 			c.Close()
@@ -1940,8 +1940,8 @@ func (s *Server) ShutdownWithContext(ctx context.Context) (err error) {
 	s.mu.Lock()
 	defer s.mu.Unlock()
 
-	atomic.StoreInt32(&s.stop, 1)
-	defer atomic.StoreInt32(&s.stop, 0)
+	s.stop.Store(1)
+	defer s.stop.Store(0)
 
 	if s.ln == nil {
 		return nil
@@ -1962,7 +1962,7 @@ func (s *Server) ShutdownWithContext(ctx context.Context) (err error) {
 	for {
 		s.closeIdleConns()
 
-		if open := atomic.LoadInt32(&s.open); open == 0 {
+		if open := s.open.Load(); open == 0 {
 			// There may be a pending request to call ctx.Done(). Therefore, we only set it to nil when open == 0.
 			s.done = nil
 			return lnerr
@@ -2082,19 +2082,19 @@ func (s *Server) ServeConn(c net.Conn) error {
 		c = pic
 	}
 
-	n := int(atomic.AddUint32(&s.concurrency, 1)) // #nosec G115
+	n := int(s.concurrency.Add(1)) // #nosec G115
 	if n > s.getConcurrency() {
-		atomic.AddUint32(&s.concurrency, ^uint32(0))
+		s.concurrency.Add(^uint32(0))
 		s.writeFastError(c, StatusServiceUnavailable, "The connection cannot be served because Server.Concurrency limit exceeded")
 		c.Close()
 		return ErrConcurrencyLimit
 	}
 
-	atomic.AddInt32(&s.open, 1)
+	s.open.Add(1)
 
 	err := s.serveConn(c)
 
-	atomic.AddUint32(&s.concurrency, ^uint32(0))
+	s.concurrency.Add(^uint32(0))
 
 	if err != errHijacked {
 		errc := c.Close()
@@ -2116,29 +2116,29 @@ var errHijacked = errors.New("connection has been hijacked")
 //
 // This function is intended be used by monitoring systems.
 func (s *Server) GetCurrentConcurrency() uint32 {
-	return atomic.LoadUint32(&s.concurrency)
+	return s.concurrency.Load()
 }
 
 // GetOpenConnectionsCount returns a number of opened connections.
 //
 // This function is intended be used by monitoring systems.
 func (s *Server) GetOpenConnectionsCount() int32 {
-	if atomic.LoadInt32(&s.stop) == 0 {
+	if s.stop.Load() == 0 {
 		// Decrement by one to avoid reporting the extra open value that gets
 		// counted while the server is listening.
-		return atomic.LoadInt32(&s.open) - 1
+		return s.open.Load() - 1
 	}
 	// This is not perfect, because s.stop could have changed to zero
 	// before we load the value of s.open. However, in the common case
 	// this avoids underreporting open connections by 1 during server shutdown.
-	return atomic.LoadInt32(&s.open)
+	return s.open.Load()
 }
 
 // GetRejectedConnectionsCount returns a number of rejected connections.
 //
 // This function is intended be used by monitoring systems.
 func (s *Server) GetRejectedConnectionsCount() uint32 {
-	return atomic.LoadUint32(&s.rejectedRequestsCount)
+	return s.rejectedRequestsCount.Load()
 }
 
 func (s *Server) getConcurrency() int {
@@ -2169,24 +2169,24 @@ func (s *Server) idleTimeout() time.Duration {
 }
 
 func (s *Server) serveConnCleanup() {
-	atomic.AddInt32(&s.open, -1)
-	atomic.AddUint32(&s.concurrency, ^uint32(0))
+	s.open.Add(-1)
+	s.concurrency.Add(^uint32(0))
 }
 
-func (s *Server) serveConn(c net.Conn) (err error) {
+func (s *Server) serveConn(c net.Conn) error {
 	defer s.serveConnCleanup()
-	atomic.AddUint32(&s.concurrency, 1)
+	s.concurrency.Add(1)
 
-	var proto string
-	if proto, err = s.getNextProto(c); err != nil {
-		return
+	proto, err := s.getNextProto(c)
+	if err != nil {
+		return err
 	}
 	if handler, ok := s.nextProtos[proto]; ok {
 		// Remove read or write deadlines that might have previously been set.
 		// The next handler is responsible for setting its own deadlines.
 		if s.ReadTimeout > 0 || s.WriteTimeout > 0 {
-			if err = c.SetDeadline(zeroTime); err != nil {
-				return
+			if err := c.SetDeadline(zeroTime); err != nil {
+				return err
 			}
 		}
 
@@ -2349,11 +2349,21 @@ func (s *Server) serveConn(c net.Conn) (err error) {
 						writeTimeout = s.WriteTimeout
 					}
 				}
-				// read body
-				if s.StreamRequestBody {
-					err = ctx.Request.readBodyStream(br, maxRequestBodySize, s.GetOnly, !s.DisablePreParseMultipartForm)
-				} else {
-					err = ctx.Request.readLimitBody(br, maxRequestBodySize, s.GetOnly, !s.DisablePreParseMultipartForm)
+
+				if err == nil {
+					if err = ctx.Request.parseURI(); err != nil {
+						bw = s.writeErrorResponse(bw, ctx, serverName, err)
+						break
+					}
+				}
+
+				if err == nil {
+					// read body
+					if s.StreamRequestBody {
+						err = ctx.Request.readBodyStream(br, maxRequestBodySize, s.GetOnly, !s.DisablePreParseMultipartForm)
+					} else {
+						err = ctx.Request.readLimitBody(br, maxRequestBodySize, s.GetOnly, !s.DisablePreParseMultipartForm)
+					}
 				}
 			}
 			// When StreamRequestBody is set to true, we cannot safely release br.
@@ -2487,7 +2497,7 @@ func (s *Server) serveConn(c net.Conn) (err error) {
 		connectionClose = connectionClose ||
 			(s.MaxRequestsPerConn > 0 && connRequestNum >= uint64(s.MaxRequestsPerConn)) || // #nosec G115
 			ctx.Response.Header.ConnectionClose() ||
-			(s.CloseOnShutdown && atomic.LoadInt32(&s.stop) == 1)
+			(s.CloseOnShutdown && s.stop.Load() == 1)
 		if connectionClose {
 			ctx.Response.Header.SetConnectionClose()
 		} else if !ctx.Request.Header.IsHTTP11() {
@@ -2563,7 +2573,7 @@ func (s *Server) serveConn(c net.Conn) (err error) {
 		ctx.Request.Reset()
 		ctx.Response.Reset()
 
-		if atomic.LoadInt32(&s.stop) == 1 {
+		if s.stop.Load() == 1 {
 			err = nil
 			break
 		}
@@ -2589,7 +2599,7 @@ func (s *Server) serveConn(c net.Conn) (err error) {
 	}
 	s.idleConnsMu.Unlock()
 
-	return
+	return err
 }
 
 func (s *Server) setState(nc net.Conn, state ConnState) {
@@ -2636,6 +2646,7 @@ func (s *Server) releaseHijackConn(hjc *hijackConn) {
 
 type hijackConn struct {
 	net.Conn
+
 	r io.Reader
 	s *Server
 }
@@ -2817,7 +2828,7 @@ func (ctx *RequestCtx) Init(req *Request, remoteAddr net.Addr, logger Logger) {
 // This method always returns 0, false and is only present to make
 // RequestCtx implement the context interface.
 func (ctx *RequestCtx) Deadline() (deadline time.Time, ok bool) {
-	return
+	return time.Time{}, false
 }
 
 // Done returns a channel that's closed when work done on behalf of this
@@ -2866,6 +2877,7 @@ var fakeServer = &Server{
 
 type fakeAddrer struct {
 	net.Conn
+
 	laddr net.Addr
 	raddr net.Addr
 }

+ 31 - 8
v2/vendor/github.com/valyala/fasthttp/tcpdialer.go

@@ -271,6 +271,22 @@ func (d *TCPDialer) DialDualStackTimeout(addr string, timeout time.Duration) (ne
 	return d.dial(addr, true, timeout)
 }
 
+// FlushDNSCache clears all cached DNS entries, forcing fresh DNS lookups on subsequent dials.
+// This is useful when you want to ensure fresh DNS resolution, for example after network changes.
+func (d *TCPDialer) FlushDNSCache() {
+	d.tcpAddrsMap.Range(func(k, v any) bool {
+		d.tcpAddrsMap.Delete(k)
+		return true
+	})
+}
+
+// FlushDNSCache clears all cached DNS entries for the default dialer,
+// forcing fresh DNS lookups on subsequent Dial* calls.
+// This is useful when you want to ensure fresh DNS resolution, for example after network changes.
+func FlushDNSCache() {
+	defaultDialer.FlushDNSCache()
+}
+
 func (d *TCPDialer) dial(addr string, dualStack bool, timeout time.Duration) (net.Conn, error) {
 	d.once.Do(func() {
 		if d.Concurrency > 0 {
@@ -406,17 +422,24 @@ type tcpAddrEntry struct {
 // by Dial* functions.
 const DefaultDNSCacheDuration = time.Minute
 
-func (d *TCPDialer) tcpAddrsClean() {
+// cleanExpiredDNSEntries removes expired DNS cache entries based on DNSCacheDuration.
+// This is the core cleanup logic used by both the background cleaner and manual cleanup.
+func (d *TCPDialer) cleanExpiredDNSEntries() {
 	expireDuration := 2 * d.DNSCacheDuration
+
+	t := time.Now()
+	d.tcpAddrsMap.Range(func(k, v any) bool {
+		if e, ok := v.(*tcpAddrEntry); ok && t.Sub(e.resolveTime) > expireDuration {
+			d.tcpAddrsMap.Delete(k)
+		}
+		return true
+	})
+}
+
+func (d *TCPDialer) tcpAddrsClean() {
 	for {
 		time.Sleep(time.Second)
-		t := time.Now()
-		d.tcpAddrsMap.Range(func(k, v any) bool {
-			if e, ok := v.(*tcpAddrEntry); ok && t.Sub(e.resolveTime) > expireDuration {
-				d.tcpAddrsMap.Delete(k)
-			}
-			return true
-		})
+		d.cleanExpiredDNSEntries()
 	}
 }
 

+ 2 - 2
v2/vendor/github.com/valyala/fasthttp/tcplisten/tcplisten_linux.go

@@ -59,7 +59,7 @@ func soMaxConn() (int, error) {
 func kernelVersion() (major, minor int) {
 	var uname unix.Utsname
 	if err := unix.Uname(&uname); err != nil {
-		return
+		return 0, 0
 	}
 
 	rl := uname.Release
@@ -87,7 +87,7 @@ func kernelVersion() (major, minor int) {
 	case 2:
 		return values[0], values[1]
 	}
-	return
+	return major, minor
 }
 
 // Linux stores the backlog as:

+ 66 - 5
v2/vendor/github.com/valyala/fasthttp/uri.go

@@ -289,6 +289,9 @@ func (u *URI) parse(host, uri []byte, isTLS bool) error {
 
 	if len(host) == 0 || bytes.Contains(uri, strColonSlashSlash) {
 		scheme, newHost, newURI := splitHostURI(host, uri)
+		if len(scheme) > 0 && !isValidScheme(scheme) {
+			return fmt.Errorf("invalid scheme %q", scheme)
+		}
 		u.SetSchemeBytes(scheme)
 		host = newHost
 		uri = newURI
@@ -298,8 +301,11 @@ func (u *URI) parse(host, uri []byte, isTLS bool) error {
 		u.SetSchemeBytes(strHTTPS)
 	}
 
-	if n := bytes.IndexByte(host, '@'); n >= 0 {
+	if n := bytes.LastIndexByte(host, '@'); n >= 0 {
 		auth := host[:n]
+		if !validUserinfo(auth) {
+			return ErrorInvalidURI
+		}
 		host = host[n+1:]
 
 		if n := bytes.IndexByte(auth, ':'); n >= 0 {
@@ -356,6 +362,48 @@ func (u *URI) parse(host, uri []byte, isTLS bool) error {
 	return nil
 }
 
+func validUserinfo(userinfo []byte) bool {
+	for _, c := range userinfo {
+		switch {
+		case 'A' <= c && c <= 'Z':
+			continue
+		case 'a' <= c && c <= 'z':
+			continue
+		case '0' <= c && c <= '9':
+			continue
+		}
+		switch c {
+		case '-', '.', '_', ':', '~', '!', '$', '&', '\'', '(', ')', '*', '+', ',', ';', '=', '%', '@':
+			continue
+		default:
+			return false
+		}
+	}
+	return true
+}
+
+func isValidScheme(scheme []byte) bool {
+	if len(scheme) == 0 {
+		return false
+	}
+	first := scheme[0]
+	if (first < 'a' || first > 'z') && (first < 'A' || first > 'Z') {
+		return false
+	}
+	for i := 1; i < len(scheme); i++ {
+		c := scheme[i]
+		if ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') || ('0' <= c && c <= '9') {
+			continue
+		}
+		switch c {
+		case '+', '-', '.':
+			continue
+		}
+		return false
+	}
+	return true
+}
+
 // parseHost parses host as an authority without user
 // information. That is, as host[:port].
 //
@@ -397,10 +445,20 @@ func parseHost(host []byte) ([]byte, error) {
 			}
 			return append(host1, append(host2, host3...)...), nil
 		}
-	} else if i := bytes.LastIndexByte(host, ':'); i != -1 {
-		colonPort := host[i:]
-		if !validOptionalPort(colonPort) {
-			return nil, fmt.Errorf("invalid port %q after host", colonPort)
+	} else {
+		if bytes.ContainsAny(host, "[]") {
+			return nil, fmt.Errorf("invalid host %q", host)
+		}
+
+		if i := bytes.LastIndexByte(host, ':'); i != -1 {
+			if bytes.IndexByte(host[:i], ':') != -1 {
+				return nil, fmt.Errorf("invalid host %q with multiple port delimiters", host)
+			}
+
+			colonPort := host[i:]
+			if !validOptionalPort(colonPort) {
+				return nil, fmt.Errorf("invalid port %q after host", colonPort)
+			}
 		}
 	}
 
@@ -408,6 +466,9 @@ func parseHost(host []byte) ([]byte, error) {
 	if host, err = unescape(host, encodeHost); err != nil {
 		return nil, err
 	}
+	if err = validateIPv6Literal(host); err != nil {
+		return nil, err
+	}
 	return host, nil
 }
 

+ 1 - 1
v2/vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/id.go

@@ -82,7 +82,7 @@ func marshalJSON(id []byte) ([]byte, error) {
 }
 
 // unmarshalJSON inflates trace id from hex string, possibly enclosed in quotes.
-func unmarshalJSON(dst []byte, src []byte) error {
+func unmarshalJSON(dst, src []byte) error {
 	if l := len(src); l >= 2 && src[0] == '"' && src[l-1] == '"' {
 		src = src[1 : l-1]
 	}

+ 1 - 1
v2/vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/number.go

@@ -41,7 +41,7 @@ func (i *protoInt64) UnmarshalJSON(data []byte) error {
 // strings or integers.
 type protoUint64 uint64
 
-// Int64 returns the protoUint64 as a uint64.
+// Uint64 returns the protoUint64 as a uint64.
 func (i *protoUint64) Uint64() uint64 { return uint64(*i) }
 
 // UnmarshalJSON decodes both strings and integers.

+ 43 - 27
v2/vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/span.go

@@ -10,6 +10,7 @@ import (
 	"errors"
 	"fmt"
 	"io"
+	"math"
 	"time"
 )
 
@@ -151,8 +152,8 @@ func (s Span) MarshalJSON() ([]byte, error) {
 	}{
 		Alias:        Alias(s),
 		ParentSpanID: parentSpanId,
-		StartTime:    uint64(startT),
-		EndTime:      uint64(endT),
+		StartTime:    uint64(startT), // nolint:gosec  // >0 checked above.
+		EndTime:      uint64(endT),   // nolint:gosec  // >0 checked above.
 	})
 }
 
@@ -201,11 +202,13 @@ func (s *Span) UnmarshalJSON(data []byte) error {
 		case "startTimeUnixNano", "start_time_unix_nano":
 			var val protoUint64
 			err = decoder.Decode(&val)
-			s.StartTime = time.Unix(0, int64(val.Uint64()))
+			v := int64(min(val.Uint64(), math.MaxInt64)) //nolint:gosec  // Overflow checked.
+			s.StartTime = time.Unix(0, v)
 		case "endTimeUnixNano", "end_time_unix_nano":
 			var val protoUint64
 			err = decoder.Decode(&val)
-			s.EndTime = time.Unix(0, int64(val.Uint64()))
+			v := int64(min(val.Uint64(), math.MaxInt64)) //nolint:gosec  // Overflow checked.
+			s.EndTime = time.Unix(0, v)
 		case "attributes":
 			err = decoder.Decode(&s.Attrs)
 		case "droppedAttributesCount", "dropped_attributes_count":
@@ -248,13 +251,20 @@ func (s *Span) UnmarshalJSON(data []byte) error {
 type SpanFlags int32
 
 const (
+	// SpanFlagsTraceFlagsMask is a mask for trace-flags.
+	//
 	// Bits 0-7 are used for trace flags.
 	SpanFlagsTraceFlagsMask SpanFlags = 255
-	// Bits 8 and 9 are used to indicate that the parent span or link span is remote.
-	// Bit 8 (`HAS_IS_REMOTE`) indicates whether the value is known.
-	// Bit 9 (`IS_REMOTE`) indicates whether the span or link is remote.
+	// SpanFlagsContextHasIsRemoteMask is a mask for HAS_IS_REMOTE status.
+	//
+	// Bits 8 and 9 are used to indicate that the parent span or link span is
+	// remote. Bit 8 (`HAS_IS_REMOTE`) indicates whether the value is known.
 	SpanFlagsContextHasIsRemoteMask SpanFlags = 256
-	// SpanFlagsContextHasIsRemoteMask indicates the Span is remote.
+	// SpanFlagsContextIsRemoteMask is a mask for IS_REMOTE status.
+	//
+	// Bits 8 and 9 are used to indicate that the parent span or link span is
+	// remote. Bit 9 (`IS_REMOTE`) indicates whether the span or link is
+	// remote.
 	SpanFlagsContextIsRemoteMask SpanFlags = 512
 )
 
@@ -263,26 +273,30 @@ const (
 type SpanKind int32
 
 const (
-	// Indicates that the span represents an internal operation within an application,
-	// as opposed to an operation happening at the boundaries. Default value.
+	// SpanKindInternal indicates that the span represents an internal
+	// operation within an application, as opposed to an operation happening at
+	// the boundaries.
 	SpanKindInternal SpanKind = 1
-	// Indicates that the span covers server-side handling of an RPC or other
-	// remote network request.
+	// SpanKindServer indicates that the span covers server-side handling of an
+	// RPC or other remote network request.
 	SpanKindServer SpanKind = 2
-	// Indicates that the span describes a request to some remote service.
+	// SpanKindClient indicates that the span describes a request to some
+	// remote service.
 	SpanKindClient SpanKind = 3
-	// Indicates that the span describes a producer sending a message to a broker.
-	// Unlike CLIENT and SERVER, there is often no direct critical path latency relationship
-	// between producer and consumer spans. A PRODUCER span ends when the message was accepted
-	// by the broker while the logical processing of the message might span a much longer time.
+	// SpanKindProducer indicates that the span describes a producer sending a
+	// message to a broker. Unlike SpanKindClient and SpanKindServer, there is
+	// often no direct critical path latency relationship between producer and
+	// consumer spans. A SpanKindProducer span ends when the message was
+	// accepted by the broker while the logical processing of the message might
+	// span a much longer time.
 	SpanKindProducer SpanKind = 4
-	// Indicates that the span describes consumer receiving a message from a broker.
-	// Like the PRODUCER kind, there is often no direct critical path latency relationship
-	// between producer and consumer spans.
+	// SpanKindConsumer indicates that the span describes a consumer receiving
+	// a message from a broker. Like SpanKindProducer, there is often no direct
+	// critical path latency relationship between producer and consumer spans.
 	SpanKindConsumer SpanKind = 5
 )
 
-// Event is a time-stamped annotation of the span, consisting of user-supplied
+// SpanEvent is a time-stamped annotation of the span, consisting of user-supplied
 // text description and key-value pairs.
 type SpanEvent struct {
 	// time_unix_nano is the time the event occurred.
@@ -312,7 +326,7 @@ func (e SpanEvent) MarshalJSON() ([]byte, error) {
 		Time uint64 `json:"timeUnixNano,omitempty"`
 	}{
 		Alias: Alias(e),
-		Time:  uint64(t),
+		Time:  uint64(t), //nolint:gosec  // >0 checked above
 	})
 }
 
@@ -347,7 +361,8 @@ func (se *SpanEvent) UnmarshalJSON(data []byte) error {
 		case "timeUnixNano", "time_unix_nano":
 			var val protoUint64
 			err = decoder.Decode(&val)
-			se.Time = time.Unix(0, int64(val.Uint64()))
+			v := int64(min(val.Uint64(), math.MaxInt64)) //nolint:gosec  // Overflow checked.
+			se.Time = time.Unix(0, v)
 		case "name":
 			err = decoder.Decode(&se.Name)
 		case "attributes":
@@ -365,10 +380,11 @@ func (se *SpanEvent) UnmarshalJSON(data []byte) error {
 	return nil
 }
 
-// A pointer from the current span to another span in the same trace or in a
-// different trace. For example, this can be used in batching operations,
-// where a single batch handler processes multiple requests from different
-// traces or when the handler receives a request from a different project.
+// SpanLink is a reference from the current span to another span in the same
+// trace or in a different trace. For example, this can be used in batching
+// operations, where a single batch handler processes multiple requests from
+// different traces or when the handler receives a request from a different
+// project.
 type SpanLink struct {
 	// A unique identifier of a trace that this linked span is part of. The ID is a
 	// 16-byte array.

+ 6 - 4
v2/vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/status.go

@@ -3,17 +3,19 @@
 
 package telemetry
 
+// StatusCode is the status of a Span.
+//
 // For the semantics of status codes see
 // https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/trace/api.md#set-status
 type StatusCode int32
 
 const (
-	// The default status.
+	// StatusCodeUnset is the default status.
 	StatusCodeUnset StatusCode = 0
-	// The Span has been validated by an Application developer or Operator to
-	// have completed successfully.
+	// StatusCodeOK is used when the Span has been validated by an Application
+	// developer or Operator to have completed successfully.
 	StatusCodeOK StatusCode = 1
-	// The Span contains an error.
+	// StatusCodeError is used when the Span contains an error.
 	StatusCodeError StatusCode = 2
 )
 

+ 2 - 2
v2/vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/traces.go

@@ -71,7 +71,7 @@ func (td *Traces) UnmarshalJSON(data []byte) error {
 	return nil
 }
 
-// A collection of ScopeSpans from a Resource.
+// ResourceSpans is a collection of ScopeSpans from a Resource.
 type ResourceSpans struct {
 	// The resource for the spans in this message.
 	// If this field is not set then no resource info is known.
@@ -128,7 +128,7 @@ func (rs *ResourceSpans) UnmarshalJSON(data []byte) error {
 	return nil
 }
 
-// A collection of Spans produced by an InstrumentationScope.
+// ScopeSpans is a collection of Spans produced by an InstrumentationScope.
 type ScopeSpans struct {
 	// The instrumentation scope information for the spans in this message.
 	// Semantically when InstrumentationScope isn't set, it is equivalent with

+ 6 - 8
v2/vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/value.go

@@ -1,8 +1,6 @@
 // Copyright The OpenTelemetry Authors
 // SPDX-License-Identifier: Apache-2.0
 
-//go:generate stringer -type=ValueKind -trimprefix=ValueKind
-
 package telemetry
 
 import (
@@ -23,7 +21,7 @@ import (
 // A zero value is valid and represents an empty value.
 type Value struct {
 	// Ensure forward compatibility by explicitly making this not comparable.
-	noCmp [0]func() //nolint: unused  // This is indeed used.
+	noCmp [0]func() //nolint:unused  // This is indeed used.
 
 	// num holds the value for Int64, Float64, and Bool. It holds the length
 	// for String, Bytes, Slice, Map.
@@ -92,7 +90,7 @@ func IntValue(v int) Value { return Int64Value(int64(v)) }
 
 // Int64Value returns a [Value] for an int64.
 func Int64Value(v int64) Value {
-	return Value{num: uint64(v), any: ValueKindInt64}
+	return Value{num: uint64(v), any: ValueKindInt64} //nolint:gosec  // Raw value conv.
 }
 
 // Float64Value returns a [Value] for a float64.
@@ -164,7 +162,7 @@ func (v Value) AsInt64() int64 {
 // this will return garbage.
 func (v Value) asInt64() int64 {
 	// Assumes v.num was a valid int64 (overflow not checked).
-	return int64(v.num) // nolint: gosec
+	return int64(v.num) //nolint:gosec  // Bounded.
 }
 
 // AsBool returns the value held by v as a bool.
@@ -309,13 +307,13 @@ func (v Value) String() string {
 		return v.asString()
 	case ValueKindInt64:
 		// Assumes v.num was a valid int64 (overflow not checked).
-		return strconv.FormatInt(int64(v.num), 10) // nolint: gosec
+		return strconv.FormatInt(int64(v.num), 10) //nolint:gosec  // Bounded.
 	case ValueKindFloat64:
 		return strconv.FormatFloat(v.asFloat64(), 'g', -1, 64)
 	case ValueKindBool:
 		return strconv.FormatBool(v.asBool())
 	case ValueKindBytes:
-		return fmt.Sprint(v.asBytes())
+		return string(v.asBytes())
 	case ValueKindMap:
 		return fmt.Sprint(v.asMap())
 	case ValueKindSlice:
@@ -343,7 +341,7 @@ func (v *Value) MarshalJSON() ([]byte, error) {
 	case ValueKindInt64:
 		return json.Marshal(struct {
 			Value string `json:"intValue"`
-		}{strconv.FormatInt(int64(v.num), 10)})
+		}{strconv.FormatInt(int64(v.num), 10)}) //nolint:gosec  // Raw value conv.
 	case ValueKindFloat64:
 		return json.Marshal(struct {
 			Value float64 `json:"doubleValue"`

+ 20 - 5
v2/vendor/go.opentelemetry.io/auto/sdk/span.go

@@ -6,6 +6,7 @@ package sdk
 import (
 	"encoding/json"
 	"fmt"
+	"math"
 	"reflect"
 	"runtime"
 	"strings"
@@ -16,7 +17,7 @@ import (
 
 	"go.opentelemetry.io/otel/attribute"
 	"go.opentelemetry.io/otel/codes"
-	semconv "go.opentelemetry.io/otel/semconv/v1.26.0"
+	semconv "go.opentelemetry.io/otel/semconv/v1.37.0"
 	"go.opentelemetry.io/otel/trace"
 	"go.opentelemetry.io/otel/trace/noop"
 
@@ -85,7 +86,12 @@ func (s *span) SetAttributes(attrs ...attribute.KeyValue) {
 	limit := maxSpan.Attrs
 	if limit == 0 {
 		// No attributes allowed.
-		s.span.DroppedAttrs += uint32(len(attrs))
+		n := int64(len(attrs))
+		if n > 0 {
+			s.span.DroppedAttrs += uint32( //nolint:gosec  // Bounds checked.
+				min(n, math.MaxUint32),
+			)
+		}
 		return
 	}
 
@@ -121,8 +127,13 @@ func (s *span) SetAttributes(attrs ...attribute.KeyValue) {
 // convCappedAttrs converts up to limit attrs into a []telemetry.Attr. The
 // number of dropped attributes is also returned.
 func convCappedAttrs(limit int, attrs []attribute.KeyValue) ([]telemetry.Attr, uint32) {
+	n := len(attrs)
 	if limit == 0 {
-		return nil, uint32(len(attrs))
+		var out uint32
+		if n > 0 {
+			out = uint32(min(int64(n), math.MaxUint32)) //nolint:gosec  // Bounds checked.
+		}
+		return nil, out
 	}
 
 	if limit < 0 {
@@ -130,8 +141,12 @@ func convCappedAttrs(limit int, attrs []attribute.KeyValue) ([]telemetry.Attr, u
 		return convAttrs(attrs), 0
 	}
 
-	limit = min(len(attrs), limit)
-	return convAttrs(attrs[:limit]), uint32(len(attrs) - limit)
+	if n < 0 {
+		n = 0
+	}
+
+	limit = min(n, limit)
+	return convAttrs(attrs[:limit]), uint32(n - limit) //nolint:gosec  // Bounds checked.
 }
 
 func convAttrs(attrs []attribute.KeyValue) []telemetry.Attr {

+ 23 - 6
v2/vendor/go.opentelemetry.io/auto/sdk/tracer.go

@@ -5,6 +5,7 @@ package sdk
 
 import (
 	"context"
+	"math"
 	"time"
 
 	"go.opentelemetry.io/otel/trace"
@@ -21,15 +22,20 @@ type tracer struct {
 
 var _ trace.Tracer = tracer{}
 
-func (t tracer) Start(ctx context.Context, name string, opts ...trace.SpanStartOption) (context.Context, trace.Span) {
-	var psc trace.SpanContext
+func (t tracer) Start(
+	ctx context.Context,
+	name string,
+	opts ...trace.SpanStartOption,
+) (context.Context, trace.Span) {
+	var psc, sc trace.SpanContext
 	sampled := true
 	span := new(span)
 
 	// Ask eBPF for sampling decision and span context info.
-	t.start(ctx, span, &psc, &sampled, &span.spanContext)
+	t.start(ctx, span, &psc, &sampled, &sc)
 
 	span.sampled.Store(sampled)
+	span.spanContext = sc
 
 	ctx = trace.ContextWithSpan(ctx, span)
 
@@ -58,7 +64,13 @@ func (t *tracer) start(
 // start is used for testing.
 var start = func(context.Context, *span, *trace.SpanContext, *bool, *trace.SpanContext) {}
 
-func (t tracer) traces(name string, cfg trace.SpanConfig, sc, psc trace.SpanContext) (*telemetry.Traces, *telemetry.Span) {
+var intToUint32Bound = min(math.MaxInt, math.MaxUint32)
+
+func (t tracer) traces(
+	name string,
+	cfg trace.SpanConfig,
+	sc, psc trace.SpanContext,
+) (*telemetry.Traces, *telemetry.Span) {
 	span := &telemetry.Span{
 		TraceID:      telemetry.TraceID(sc.TraceID()),
 		SpanID:       telemetry.SpanID(sc.SpanID()),
@@ -73,11 +85,16 @@ func (t tracer) traces(name string, cfg trace.SpanConfig, sc, psc trace.SpanCont
 
 	links := cfg.Links()
 	if limit := maxSpan.Links; limit == 0 {
-		span.DroppedLinks = uint32(len(links))
+		n := len(links)
+		if n > 0 {
+			bounded := max(min(n, intToUint32Bound), 0)
+			span.DroppedLinks = uint32(bounded) //nolint:gosec  // Bounds checked.
+		}
 	} else {
 		if limit > 0 {
 			n := max(len(links)-limit, 0)
-			span.DroppedLinks = uint32(n)
+			bounded := min(n, intToUint32Bound)
+			span.DroppedLinks = uint32(bounded) //nolint:gosec  // Bounds checked.
 			links = links[n:]
 		}
 		span.Links = convLinks(links)

+ 0 - 3
v2/vendor/go.opentelemetry.io/otel/semconv/v1.26.0/README.md

@@ -1,3 +0,0 @@
-# Semconv v1.26.0
-
-[![PkgGoDev](https://pkg.go.dev/badge/go.opentelemetry.io/otel/semconv/v1.26.0)](https://pkg.go.dev/go.opentelemetry.io/otel/semconv/v1.26.0)

+ 0 - 8996
v2/vendor/go.opentelemetry.io/otel/semconv/v1.26.0/attribute_group.go

@@ -1,8996 +0,0 @@
-// Copyright The OpenTelemetry Authors
-// SPDX-License-Identifier: Apache-2.0
-
-// Code generated from semantic convention specification. DO NOT EDIT.
-
-package semconv // import "go.opentelemetry.io/otel/semconv/v1.26.0"
-
-import "go.opentelemetry.io/otel/attribute"
-
-// The Android platform on which the Android application is running.
-const (
-	// AndroidOSAPILevelKey is the attribute Key conforming to the
-	// "android.os.api_level" semantic conventions. It represents the uniquely
-	// identifies the framework API revision offered by a version
-	// (`os.version`) of the android operating system. More information can be
-	// found
-	// [here](https://developer.android.com/guide/topics/manifest/uses-sdk-element#APILevels).
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: '33', '32'
-	AndroidOSAPILevelKey = attribute.Key("android.os.api_level")
-)
-
-// AndroidOSAPILevel returns an attribute KeyValue conforming to the
-// "android.os.api_level" semantic conventions. It represents the uniquely
-// identifies the framework API revision offered by a version (`os.version`) of
-// the android operating system. More information can be found
-// [here](https://developer.android.com/guide/topics/manifest/uses-sdk-element#APILevels).
-func AndroidOSAPILevel(val string) attribute.KeyValue {
-	return AndroidOSAPILevelKey.String(val)
-}
-
-// ASP.NET Core attributes
-const (
-	// AspnetcoreRateLimitingResultKey is the attribute Key conforming to the
-	// "aspnetcore.rate_limiting.result" semantic conventions. It represents
-	// the rate-limiting result, shows whether the lease was acquired or
-	// contains a rejection reason
-	//
-	// Type: Enum
-	// RequirementLevel: Required
-	// Stability: stable
-	// Examples: 'acquired', 'request_canceled'
-	AspnetcoreRateLimitingResultKey = attribute.Key("aspnetcore.rate_limiting.result")
-
-	// AspnetcoreDiagnosticsHandlerTypeKey is the attribute Key conforming to
-	// the "aspnetcore.diagnostics.handler.type" semantic conventions. It
-	// represents the full type name of the
-	// [`IExceptionHandler`](https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.diagnostics.iexceptionhandler)
-	// implementation that handled the exception.
-	//
-	// Type: string
-	// RequirementLevel: ConditionallyRequired (if and only if the exception
-	// was handled by this handler.)
-	// Stability: stable
-	// Examples: 'Contoso.MyHandler'
-	AspnetcoreDiagnosticsHandlerTypeKey = attribute.Key("aspnetcore.diagnostics.handler.type")
-
-	// AspnetcoreDiagnosticsExceptionResultKey is the attribute Key conforming
-	// to the "aspnetcore.diagnostics.exception.result" semantic conventions.
-	// It represents the aSP.NET Core exception middleware handling result
-	//
-	// Type: Enum
-	// RequirementLevel: Optional
-	// Stability: stable
-	// Examples: 'handled', 'unhandled'
-	AspnetcoreDiagnosticsExceptionResultKey = attribute.Key("aspnetcore.diagnostics.exception.result")
-
-	// AspnetcoreRateLimitingPolicyKey is the attribute Key conforming to the
-	// "aspnetcore.rate_limiting.policy" semantic conventions. It represents
-	// the rate limiting policy name.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: stable
-	// Examples: 'fixed', 'sliding', 'token'
-	AspnetcoreRateLimitingPolicyKey = attribute.Key("aspnetcore.rate_limiting.policy")
-
-	// AspnetcoreRequestIsUnhandledKey is the attribute Key conforming to the
-	// "aspnetcore.request.is_unhandled" semantic conventions. It represents
-	// the flag indicating if request was handled by the application pipeline.
-	//
-	// Type: boolean
-	// RequirementLevel: Optional
-	// Stability: stable
-	// Examples: True
-	AspnetcoreRequestIsUnhandledKey = attribute.Key("aspnetcore.request.is_unhandled")
-
-	// AspnetcoreRoutingIsFallbackKey is the attribute Key conforming to the
-	// "aspnetcore.routing.is_fallback" semantic conventions. It represents a
-	// value that indicates whether the matched route is a fallback route.
-	//
-	// Type: boolean
-	// RequirementLevel: Optional
-	// Stability: stable
-	// Examples: True
-	AspnetcoreRoutingIsFallbackKey = attribute.Key("aspnetcore.routing.is_fallback")
-
-	// AspnetcoreRoutingMatchStatusKey is the attribute Key conforming to the
-	// "aspnetcore.routing.match_status" semantic conventions. It represents
-	// the match result - success or failure
-	//
-	// Type: Enum
-	// RequirementLevel: Optional
-	// Stability: stable
-	// Examples: 'success', 'failure'
-	AspnetcoreRoutingMatchStatusKey = attribute.Key("aspnetcore.routing.match_status")
-)
-
-var (
-	// Lease was acquired
-	AspnetcoreRateLimitingResultAcquired = AspnetcoreRateLimitingResultKey.String("acquired")
-	// Lease request was rejected by the endpoint limiter
-	AspnetcoreRateLimitingResultEndpointLimiter = AspnetcoreRateLimitingResultKey.String("endpoint_limiter")
-	// Lease request was rejected by the global limiter
-	AspnetcoreRateLimitingResultGlobalLimiter = AspnetcoreRateLimitingResultKey.String("global_limiter")
-	// Lease request was canceled
-	AspnetcoreRateLimitingResultRequestCanceled = AspnetcoreRateLimitingResultKey.String("request_canceled")
-)
-
-var (
-	// Exception was handled by the exception handling middleware
-	AspnetcoreDiagnosticsExceptionResultHandled = AspnetcoreDiagnosticsExceptionResultKey.String("handled")
-	// Exception was not handled by the exception handling middleware
-	AspnetcoreDiagnosticsExceptionResultUnhandled = AspnetcoreDiagnosticsExceptionResultKey.String("unhandled")
-	// Exception handling was skipped because the response had started
-	AspnetcoreDiagnosticsExceptionResultSkipped = AspnetcoreDiagnosticsExceptionResultKey.String("skipped")
-	// Exception handling didn't run because the request was aborted
-	AspnetcoreDiagnosticsExceptionResultAborted = AspnetcoreDiagnosticsExceptionResultKey.String("aborted")
-)
-
-var (
-	// Match succeeded
-	AspnetcoreRoutingMatchStatusSuccess = AspnetcoreRoutingMatchStatusKey.String("success")
-	// Match failed
-	AspnetcoreRoutingMatchStatusFailure = AspnetcoreRoutingMatchStatusKey.String("failure")
-)
-
-// AspnetcoreDiagnosticsHandlerType returns an attribute KeyValue conforming
-// to the "aspnetcore.diagnostics.handler.type" semantic conventions. It
-// represents the full type name of the
-// [`IExceptionHandler`](https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.diagnostics.iexceptionhandler)
-// implementation that handled the exception.
-func AspnetcoreDiagnosticsHandlerType(val string) attribute.KeyValue {
-	return AspnetcoreDiagnosticsHandlerTypeKey.String(val)
-}
-
-// AspnetcoreRateLimitingPolicy returns an attribute KeyValue conforming to
-// the "aspnetcore.rate_limiting.policy" semantic conventions. It represents
-// the rate limiting policy name.
-func AspnetcoreRateLimitingPolicy(val string) attribute.KeyValue {
-	return AspnetcoreRateLimitingPolicyKey.String(val)
-}
-
-// AspnetcoreRequestIsUnhandled returns an attribute KeyValue conforming to
-// the "aspnetcore.request.is_unhandled" semantic conventions. It represents
-// the flag indicating if request was handled by the application pipeline.
-func AspnetcoreRequestIsUnhandled(val bool) attribute.KeyValue {
-	return AspnetcoreRequestIsUnhandledKey.Bool(val)
-}
-
-// AspnetcoreRoutingIsFallback returns an attribute KeyValue conforming to
-// the "aspnetcore.routing.is_fallback" semantic conventions. It represents a
-// value that indicates whether the matched route is a fallback route.
-func AspnetcoreRoutingIsFallback(val bool) attribute.KeyValue {
-	return AspnetcoreRoutingIsFallbackKey.Bool(val)
-}
-
-// Generic attributes for AWS services.
-const (
-	// AWSRequestIDKey is the attribute Key conforming to the "aws.request_id"
-	// semantic conventions. It represents the AWS request ID as returned in
-	// the response headers `x-amz-request-id` or `x-amz-requestid`.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: '79b9da39-b7ae-508a-a6bc-864b2829c622', 'C9ER4AJX75574TDJ'
-	AWSRequestIDKey = attribute.Key("aws.request_id")
-)
-
-// AWSRequestID returns an attribute KeyValue conforming to the
-// "aws.request_id" semantic conventions. It represents the AWS request ID as
-// returned in the response headers `x-amz-request-id` or `x-amz-requestid`.
-func AWSRequestID(val string) attribute.KeyValue {
-	return AWSRequestIDKey.String(val)
-}
-
-// Attributes for AWS DynamoDB.
-const (
-	// AWSDynamoDBAttributeDefinitionsKey is the attribute Key conforming to
-	// the "aws.dynamodb.attribute_definitions" semantic conventions. It
-	// represents the JSON-serialized value of each item in the
-	// `AttributeDefinitions` request field.
-	//
-	// Type: string[]
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: '{ "AttributeName": "string", "AttributeType": "string" }'
-	AWSDynamoDBAttributeDefinitionsKey = attribute.Key("aws.dynamodb.attribute_definitions")
-
-	// AWSDynamoDBAttributesToGetKey is the attribute Key conforming to the
-	// "aws.dynamodb.attributes_to_get" semantic conventions. It represents the
-	// value of the `AttributesToGet` request parameter.
-	//
-	// Type: string[]
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'lives', 'id'
-	AWSDynamoDBAttributesToGetKey = attribute.Key("aws.dynamodb.attributes_to_get")
-
-	// AWSDynamoDBConsistentReadKey is the attribute Key conforming to the
-	// "aws.dynamodb.consistent_read" semantic conventions. It represents the
-	// value of the `ConsistentRead` request parameter.
-	//
-	// Type: boolean
-	// RequirementLevel: Optional
-	// Stability: experimental
-	AWSDynamoDBConsistentReadKey = attribute.Key("aws.dynamodb.consistent_read")
-
-	// AWSDynamoDBConsumedCapacityKey is the attribute Key conforming to the
-	// "aws.dynamodb.consumed_capacity" semantic conventions. It represents the
-	// JSON-serialized value of each item in the `ConsumedCapacity` response
-	// field.
-	//
-	// Type: string[]
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: '{ "CapacityUnits": number, "GlobalSecondaryIndexes": {
-	// "string" : { "CapacityUnits": number, "ReadCapacityUnits": number,
-	// "WriteCapacityUnits": number } }, "LocalSecondaryIndexes": { "string" :
-	// { "CapacityUnits": number, "ReadCapacityUnits": number,
-	// "WriteCapacityUnits": number } }, "ReadCapacityUnits": number, "Table":
-	// { "CapacityUnits": number, "ReadCapacityUnits": number,
-	// "WriteCapacityUnits": number }, "TableName": "string",
-	// "WriteCapacityUnits": number }'
-	AWSDynamoDBConsumedCapacityKey = attribute.Key("aws.dynamodb.consumed_capacity")
-
-	// AWSDynamoDBCountKey is the attribute Key conforming to the
-	// "aws.dynamodb.count" semantic conventions. It represents the value of
-	// the `Count` response parameter.
-	//
-	// Type: int
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 10
-	AWSDynamoDBCountKey = attribute.Key("aws.dynamodb.count")
-
-	// AWSDynamoDBExclusiveStartTableKey is the attribute Key conforming to the
-	// "aws.dynamodb.exclusive_start_table" semantic conventions. It represents
-	// the value of the `ExclusiveStartTableName` request parameter.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'Users', 'CatsTable'
-	AWSDynamoDBExclusiveStartTableKey = attribute.Key("aws.dynamodb.exclusive_start_table")
-
-	// AWSDynamoDBGlobalSecondaryIndexUpdatesKey is the attribute Key
-	// conforming to the "aws.dynamodb.global_secondary_index_updates" semantic
-	// conventions. It represents the JSON-serialized value of each item in the
-	// `GlobalSecondaryIndexUpdates` request field.
-	//
-	// Type: string[]
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: '{ "Create": { "IndexName": "string", "KeySchema": [ {
-	// "AttributeName": "string", "KeyType": "string" } ], "Projection": {
-	// "NonKeyAttributes": [ "string" ], "ProjectionType": "string" },
-	// "ProvisionedThroughput": { "ReadCapacityUnits": number,
-	// "WriteCapacityUnits": number } }'
-	AWSDynamoDBGlobalSecondaryIndexUpdatesKey = attribute.Key("aws.dynamodb.global_secondary_index_updates")
-
-	// AWSDynamoDBGlobalSecondaryIndexesKey is the attribute Key conforming to
-	// the "aws.dynamodb.global_secondary_indexes" semantic conventions. It
-	// represents the JSON-serialized value of each item of the
-	// `GlobalSecondaryIndexes` request field
-	//
-	// Type: string[]
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: '{ "IndexName": "string", "KeySchema": [ { "AttributeName":
-	// "string", "KeyType": "string" } ], "Projection": { "NonKeyAttributes": [
-	// "string" ], "ProjectionType": "string" }, "ProvisionedThroughput": {
-	// "ReadCapacityUnits": number, "WriteCapacityUnits": number } }'
-	AWSDynamoDBGlobalSecondaryIndexesKey = attribute.Key("aws.dynamodb.global_secondary_indexes")
-
-	// AWSDynamoDBIndexNameKey is the attribute Key conforming to the
-	// "aws.dynamodb.index_name" semantic conventions. It represents the value
-	// of the `IndexName` request parameter.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'name_to_group'
-	AWSDynamoDBIndexNameKey = attribute.Key("aws.dynamodb.index_name")
-
-	// AWSDynamoDBItemCollectionMetricsKey is the attribute Key conforming to
-	// the "aws.dynamodb.item_collection_metrics" semantic conventions. It
-	// represents the JSON-serialized value of the `ItemCollectionMetrics`
-	// response field.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: '{ "string" : [ { "ItemCollectionKey": { "string" : { "B":
-	// blob, "BOOL": boolean, "BS": [ blob ], "L": [ "AttributeValue" ], "M": {
-	// "string" : "AttributeValue" }, "N": "string", "NS": [ "string" ],
-	// "NULL": boolean, "S": "string", "SS": [ "string" ] } },
-	// "SizeEstimateRangeGB": [ number ] } ] }'
-	AWSDynamoDBItemCollectionMetricsKey = attribute.Key("aws.dynamodb.item_collection_metrics")
-
-	// AWSDynamoDBLimitKey is the attribute Key conforming to the
-	// "aws.dynamodb.limit" semantic conventions. It represents the value of
-	// the `Limit` request parameter.
-	//
-	// Type: int
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 10
-	AWSDynamoDBLimitKey = attribute.Key("aws.dynamodb.limit")
-
-	// AWSDynamoDBLocalSecondaryIndexesKey is the attribute Key conforming to
-	// the "aws.dynamodb.local_secondary_indexes" semantic conventions. It
-	// represents the JSON-serialized value of each item of the
-	// `LocalSecondaryIndexes` request field.
-	//
-	// Type: string[]
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: '{ "IndexARN": "string", "IndexName": "string",
-	// "IndexSizeBytes": number, "ItemCount": number, "KeySchema": [ {
-	// "AttributeName": "string", "KeyType": "string" } ], "Projection": {
-	// "NonKeyAttributes": [ "string" ], "ProjectionType": "string" } }'
-	AWSDynamoDBLocalSecondaryIndexesKey = attribute.Key("aws.dynamodb.local_secondary_indexes")
-
-	// AWSDynamoDBProjectionKey is the attribute Key conforming to the
-	// "aws.dynamodb.projection" semantic conventions. It represents the value
-	// of the `ProjectionExpression` request parameter.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'Title', 'Title, Price, Color', 'Title, Description,
-	// RelatedItems, ProductReviews'
-	AWSDynamoDBProjectionKey = attribute.Key("aws.dynamodb.projection")
-
-	// AWSDynamoDBProvisionedReadCapacityKey is the attribute Key conforming to
-	// the "aws.dynamodb.provisioned_read_capacity" semantic conventions. It
-	// represents the value of the `ProvisionedThroughput.ReadCapacityUnits`
-	// request parameter.
-	//
-	// Type: double
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 1.0, 2.0
-	AWSDynamoDBProvisionedReadCapacityKey = attribute.Key("aws.dynamodb.provisioned_read_capacity")
-
-	// AWSDynamoDBProvisionedWriteCapacityKey is the attribute Key conforming
-	// to the "aws.dynamodb.provisioned_write_capacity" semantic conventions.
-	// It represents the value of the
-	// `ProvisionedThroughput.WriteCapacityUnits` request parameter.
-	//
-	// Type: double
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 1.0, 2.0
-	AWSDynamoDBProvisionedWriteCapacityKey = attribute.Key("aws.dynamodb.provisioned_write_capacity")
-
-	// AWSDynamoDBScanForwardKey is the attribute Key conforming to the
-	// "aws.dynamodb.scan_forward" semantic conventions. It represents the
-	// value of the `ScanIndexForward` request parameter.
-	//
-	// Type: boolean
-	// RequirementLevel: Optional
-	// Stability: experimental
-	AWSDynamoDBScanForwardKey = attribute.Key("aws.dynamodb.scan_forward")
-
-	// AWSDynamoDBScannedCountKey is the attribute Key conforming to the
-	// "aws.dynamodb.scanned_count" semantic conventions. It represents the
-	// value of the `ScannedCount` response parameter.
-	//
-	// Type: int
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 50
-	AWSDynamoDBScannedCountKey = attribute.Key("aws.dynamodb.scanned_count")
-
-	// AWSDynamoDBSegmentKey is the attribute Key conforming to the
-	// "aws.dynamodb.segment" semantic conventions. It represents the value of
-	// the `Segment` request parameter.
-	//
-	// Type: int
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 10
-	AWSDynamoDBSegmentKey = attribute.Key("aws.dynamodb.segment")
-
-	// AWSDynamoDBSelectKey is the attribute Key conforming to the
-	// "aws.dynamodb.select" semantic conventions. It represents the value of
-	// the `Select` request parameter.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'ALL_ATTRIBUTES', 'COUNT'
-	AWSDynamoDBSelectKey = attribute.Key("aws.dynamodb.select")
-
-	// AWSDynamoDBTableCountKey is the attribute Key conforming to the
-	// "aws.dynamodb.table_count" semantic conventions. It represents the
-	// number of items in the `TableNames` response parameter.
-	//
-	// Type: int
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 20
-	AWSDynamoDBTableCountKey = attribute.Key("aws.dynamodb.table_count")
-
-	// AWSDynamoDBTableNamesKey is the attribute Key conforming to the
-	// "aws.dynamodb.table_names" semantic conventions. It represents the keys
-	// in the `RequestItems` object field.
-	//
-	// Type: string[]
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'Users', 'Cats'
-	AWSDynamoDBTableNamesKey = attribute.Key("aws.dynamodb.table_names")
-
-	// AWSDynamoDBTotalSegmentsKey is the attribute Key conforming to the
-	// "aws.dynamodb.total_segments" semantic conventions. It represents the
-	// value of the `TotalSegments` request parameter.
-	//
-	// Type: int
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 100
-	AWSDynamoDBTotalSegmentsKey = attribute.Key("aws.dynamodb.total_segments")
-)
-
-// AWSDynamoDBAttributeDefinitions returns an attribute KeyValue conforming
-// to the "aws.dynamodb.attribute_definitions" semantic conventions. It
-// represents the JSON-serialized value of each item in the
-// `AttributeDefinitions` request field.
-func AWSDynamoDBAttributeDefinitions(val ...string) attribute.KeyValue {
-	return AWSDynamoDBAttributeDefinitionsKey.StringSlice(val)
-}
-
-// AWSDynamoDBAttributesToGet returns an attribute KeyValue conforming to
-// the "aws.dynamodb.attributes_to_get" semantic conventions. It represents the
-// value of the `AttributesToGet` request parameter.
-func AWSDynamoDBAttributesToGet(val ...string) attribute.KeyValue {
-	return AWSDynamoDBAttributesToGetKey.StringSlice(val)
-}
-
-// AWSDynamoDBConsistentRead returns an attribute KeyValue conforming to the
-// "aws.dynamodb.consistent_read" semantic conventions. It represents the value
-// of the `ConsistentRead` request parameter.
-func AWSDynamoDBConsistentRead(val bool) attribute.KeyValue {
-	return AWSDynamoDBConsistentReadKey.Bool(val)
-}
-
-// AWSDynamoDBConsumedCapacity returns an attribute KeyValue conforming to
-// the "aws.dynamodb.consumed_capacity" semantic conventions. It represents the
-// JSON-serialized value of each item in the `ConsumedCapacity` response field.
-func AWSDynamoDBConsumedCapacity(val ...string) attribute.KeyValue {
-	return AWSDynamoDBConsumedCapacityKey.StringSlice(val)
-}
-
-// AWSDynamoDBCount returns an attribute KeyValue conforming to the
-// "aws.dynamodb.count" semantic conventions. It represents the value of the
-// `Count` response parameter.
-func AWSDynamoDBCount(val int) attribute.KeyValue {
-	return AWSDynamoDBCountKey.Int(val)
-}
-
-// AWSDynamoDBExclusiveStartTable returns an attribute KeyValue conforming
-// to the "aws.dynamodb.exclusive_start_table" semantic conventions. It
-// represents the value of the `ExclusiveStartTableName` request parameter.
-func AWSDynamoDBExclusiveStartTable(val string) attribute.KeyValue {
-	return AWSDynamoDBExclusiveStartTableKey.String(val)
-}
-
-// AWSDynamoDBGlobalSecondaryIndexUpdates returns an attribute KeyValue
-// conforming to the "aws.dynamodb.global_secondary_index_updates" semantic
-// conventions. It represents the JSON-serialized value of each item in the
-// `GlobalSecondaryIndexUpdates` request field.
-func AWSDynamoDBGlobalSecondaryIndexUpdates(val ...string) attribute.KeyValue {
-	return AWSDynamoDBGlobalSecondaryIndexUpdatesKey.StringSlice(val)
-}
-
-// AWSDynamoDBGlobalSecondaryIndexes returns an attribute KeyValue
-// conforming to the "aws.dynamodb.global_secondary_indexes" semantic
-// conventions. It represents the JSON-serialized value of each item of the
-// `GlobalSecondaryIndexes` request field
-func AWSDynamoDBGlobalSecondaryIndexes(val ...string) attribute.KeyValue {
-	return AWSDynamoDBGlobalSecondaryIndexesKey.StringSlice(val)
-}
-
-// AWSDynamoDBIndexName returns an attribute KeyValue conforming to the
-// "aws.dynamodb.index_name" semantic conventions. It represents the value of
-// the `IndexName` request parameter.
-func AWSDynamoDBIndexName(val string) attribute.KeyValue {
-	return AWSDynamoDBIndexNameKey.String(val)
-}
-
-// AWSDynamoDBItemCollectionMetrics returns an attribute KeyValue conforming
-// to the "aws.dynamodb.item_collection_metrics" semantic conventions. It
-// represents the JSON-serialized value of the `ItemCollectionMetrics` response
-// field.
-func AWSDynamoDBItemCollectionMetrics(val string) attribute.KeyValue {
-	return AWSDynamoDBItemCollectionMetricsKey.String(val)
-}
-
-// AWSDynamoDBLimit returns an attribute KeyValue conforming to the
-// "aws.dynamodb.limit" semantic conventions. It represents the value of the
-// `Limit` request parameter.
-func AWSDynamoDBLimit(val int) attribute.KeyValue {
-	return AWSDynamoDBLimitKey.Int(val)
-}
-
-// AWSDynamoDBLocalSecondaryIndexes returns an attribute KeyValue conforming
-// to the "aws.dynamodb.local_secondary_indexes" semantic conventions. It
-// represents the JSON-serialized value of each item of the
-// `LocalSecondaryIndexes` request field.
-func AWSDynamoDBLocalSecondaryIndexes(val ...string) attribute.KeyValue {
-	return AWSDynamoDBLocalSecondaryIndexesKey.StringSlice(val)
-}
-
-// AWSDynamoDBProjection returns an attribute KeyValue conforming to the
-// "aws.dynamodb.projection" semantic conventions. It represents the value of
-// the `ProjectionExpression` request parameter.
-func AWSDynamoDBProjection(val string) attribute.KeyValue {
-	return AWSDynamoDBProjectionKey.String(val)
-}
-
-// AWSDynamoDBProvisionedReadCapacity returns an attribute KeyValue
-// conforming to the "aws.dynamodb.provisioned_read_capacity" semantic
-// conventions. It represents the value of the
-// `ProvisionedThroughput.ReadCapacityUnits` request parameter.
-func AWSDynamoDBProvisionedReadCapacity(val float64) attribute.KeyValue {
-	return AWSDynamoDBProvisionedReadCapacityKey.Float64(val)
-}
-
-// AWSDynamoDBProvisionedWriteCapacity returns an attribute KeyValue
-// conforming to the "aws.dynamodb.provisioned_write_capacity" semantic
-// conventions. It represents the value of the
-// `ProvisionedThroughput.WriteCapacityUnits` request parameter.
-func AWSDynamoDBProvisionedWriteCapacity(val float64) attribute.KeyValue {
-	return AWSDynamoDBProvisionedWriteCapacityKey.Float64(val)
-}
-
-// AWSDynamoDBScanForward returns an attribute KeyValue conforming to the
-// "aws.dynamodb.scan_forward" semantic conventions. It represents the value of
-// the `ScanIndexForward` request parameter.
-func AWSDynamoDBScanForward(val bool) attribute.KeyValue {
-	return AWSDynamoDBScanForwardKey.Bool(val)
-}
-
-// AWSDynamoDBScannedCount returns an attribute KeyValue conforming to the
-// "aws.dynamodb.scanned_count" semantic conventions. It represents the value
-// of the `ScannedCount` response parameter.
-func AWSDynamoDBScannedCount(val int) attribute.KeyValue {
-	return AWSDynamoDBScannedCountKey.Int(val)
-}
-
-// AWSDynamoDBSegment returns an attribute KeyValue conforming to the
-// "aws.dynamodb.segment" semantic conventions. It represents the value of the
-// `Segment` request parameter.
-func AWSDynamoDBSegment(val int) attribute.KeyValue {
-	return AWSDynamoDBSegmentKey.Int(val)
-}
-
-// AWSDynamoDBSelect returns an attribute KeyValue conforming to the
-// "aws.dynamodb.select" semantic conventions. It represents the value of the
-// `Select` request parameter.
-func AWSDynamoDBSelect(val string) attribute.KeyValue {
-	return AWSDynamoDBSelectKey.String(val)
-}
-
-// AWSDynamoDBTableCount returns an attribute KeyValue conforming to the
-// "aws.dynamodb.table_count" semantic conventions. It represents the number of
-// items in the `TableNames` response parameter.
-func AWSDynamoDBTableCount(val int) attribute.KeyValue {
-	return AWSDynamoDBTableCountKey.Int(val)
-}
-
-// AWSDynamoDBTableNames returns an attribute KeyValue conforming to the
-// "aws.dynamodb.table_names" semantic conventions. It represents the keys in
-// the `RequestItems` object field.
-func AWSDynamoDBTableNames(val ...string) attribute.KeyValue {
-	return AWSDynamoDBTableNamesKey.StringSlice(val)
-}
-
-// AWSDynamoDBTotalSegments returns an attribute KeyValue conforming to the
-// "aws.dynamodb.total_segments" semantic conventions. It represents the value
-// of the `TotalSegments` request parameter.
-func AWSDynamoDBTotalSegments(val int) attribute.KeyValue {
-	return AWSDynamoDBTotalSegmentsKey.Int(val)
-}
-
-// Attributes for AWS Elastic Container Service (ECS).
-const (
-	// AWSECSTaskIDKey is the attribute Key conforming to the "aws.ecs.task.id"
-	// semantic conventions. It represents the ID of a running ECS task. The ID
-	// MUST be extracted from `task.arn`.
-	//
-	// Type: string
-	// RequirementLevel: ConditionallyRequired (If and only if `task.arn` is
-	// populated.)
-	// Stability: experimental
-	// Examples: '10838bed-421f-43ef-870a-f43feacbbb5b',
-	// '23ebb8ac-c18f-46c6-8bbe-d55d0e37cfbd'
-	AWSECSTaskIDKey = attribute.Key("aws.ecs.task.id")
-
-	// AWSECSClusterARNKey is the attribute Key conforming to the
-	// "aws.ecs.cluster.arn" semantic conventions. It represents the ARN of an
-	// [ECS
-	// cluster](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/clusters.html).
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'arn:aws:ecs:us-west-2:123456789123:cluster/my-cluster'
-	AWSECSClusterARNKey = attribute.Key("aws.ecs.cluster.arn")
-
-	// AWSECSContainerARNKey is the attribute Key conforming to the
-	// "aws.ecs.container.arn" semantic conventions. It represents the Amazon
-	// Resource Name (ARN) of an [ECS container
-	// instance](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ECS_instances.html).
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples:
-	// 'arn:aws:ecs:us-west-1:123456789123:container/32624152-9086-4f0e-acae-1a75b14fe4d9'
-	AWSECSContainerARNKey = attribute.Key("aws.ecs.container.arn")
-
-	// AWSECSLaunchtypeKey is the attribute Key conforming to the
-	// "aws.ecs.launchtype" semantic conventions. It represents the [launch
-	// type](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/launch_types.html)
-	// for an ECS task.
-	//
-	// Type: Enum
-	// RequirementLevel: Optional
-	// Stability: experimental
-	AWSECSLaunchtypeKey = attribute.Key("aws.ecs.launchtype")
-
-	// AWSECSTaskARNKey is the attribute Key conforming to the
-	// "aws.ecs.task.arn" semantic conventions. It represents the ARN of a
-	// running [ECS
-	// task](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-account-settings.html#ecs-resource-ids).
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples:
-	// 'arn:aws:ecs:us-west-1:123456789123:task/10838bed-421f-43ef-870a-f43feacbbb5b',
-	// 'arn:aws:ecs:us-west-1:123456789123:task/my-cluster/task-id/23ebb8ac-c18f-46c6-8bbe-d55d0e37cfbd'
-	AWSECSTaskARNKey = attribute.Key("aws.ecs.task.arn")
-
-	// AWSECSTaskFamilyKey is the attribute Key conforming to the
-	// "aws.ecs.task.family" semantic conventions. It represents the family
-	// name of the [ECS task
-	// definition](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definitions.html)
-	// used to create the ECS task.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'opentelemetry-family'
-	AWSECSTaskFamilyKey = attribute.Key("aws.ecs.task.family")
-
-	// AWSECSTaskRevisionKey is the attribute Key conforming to the
-	// "aws.ecs.task.revision" semantic conventions. It represents the revision
-	// for the task definition used to create the ECS task.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: '8', '26'
-	AWSECSTaskRevisionKey = attribute.Key("aws.ecs.task.revision")
-)
-
-var (
-	// ec2
-	AWSECSLaunchtypeEC2 = AWSECSLaunchtypeKey.String("ec2")
-	// fargate
-	AWSECSLaunchtypeFargate = AWSECSLaunchtypeKey.String("fargate")
-)
-
-// AWSECSTaskID returns an attribute KeyValue conforming to the
-// "aws.ecs.task.id" semantic conventions. It represents the ID of a running
-// ECS task. The ID MUST be extracted from `task.arn`.
-func AWSECSTaskID(val string) attribute.KeyValue {
-	return AWSECSTaskIDKey.String(val)
-}
-
-// AWSECSClusterARN returns an attribute KeyValue conforming to the
-// "aws.ecs.cluster.arn" semantic conventions. It represents the ARN of an [ECS
-// cluster](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/clusters.html).
-func AWSECSClusterARN(val string) attribute.KeyValue {
-	return AWSECSClusterARNKey.String(val)
-}
-
-// AWSECSContainerARN returns an attribute KeyValue conforming to the
-// "aws.ecs.container.arn" semantic conventions. It represents the Amazon
-// Resource Name (ARN) of an [ECS container
-// instance](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ECS_instances.html).
-func AWSECSContainerARN(val string) attribute.KeyValue {
-	return AWSECSContainerARNKey.String(val)
-}
-
-// AWSECSTaskARN returns an attribute KeyValue conforming to the
-// "aws.ecs.task.arn" semantic conventions. It represents the ARN of a running
-// [ECS
-// task](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-account-settings.html#ecs-resource-ids).
-func AWSECSTaskARN(val string) attribute.KeyValue {
-	return AWSECSTaskARNKey.String(val)
-}
-
-// AWSECSTaskFamily returns an attribute KeyValue conforming to the
-// "aws.ecs.task.family" semantic conventions. It represents the family name of
-// the [ECS task
-// definition](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definitions.html)
-// used to create the ECS task.
-func AWSECSTaskFamily(val string) attribute.KeyValue {
-	return AWSECSTaskFamilyKey.String(val)
-}
-
-// AWSECSTaskRevision returns an attribute KeyValue conforming to the
-// "aws.ecs.task.revision" semantic conventions. It represents the revision for
-// the task definition used to create the ECS task.
-func AWSECSTaskRevision(val string) attribute.KeyValue {
-	return AWSECSTaskRevisionKey.String(val)
-}
-
-// Attributes for AWS Elastic Kubernetes Service (EKS).
-const (
-	// AWSEKSClusterARNKey is the attribute Key conforming to the
-	// "aws.eks.cluster.arn" semantic conventions. It represents the ARN of an
-	// EKS cluster.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'arn:aws:ecs:us-west-2:123456789123:cluster/my-cluster'
-	AWSEKSClusterARNKey = attribute.Key("aws.eks.cluster.arn")
-)
-
-// AWSEKSClusterARN returns an attribute KeyValue conforming to the
-// "aws.eks.cluster.arn" semantic conventions. It represents the ARN of an EKS
-// cluster.
-func AWSEKSClusterARN(val string) attribute.KeyValue {
-	return AWSEKSClusterARNKey.String(val)
-}
-
-// Attributes for AWS Logs.
-const (
-	// AWSLogGroupARNsKey is the attribute Key conforming to the
-	// "aws.log.group.arns" semantic conventions. It represents the Amazon
-	// Resource Name(s) (ARN) of the AWS log group(s).
-	//
-	// Type: string[]
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples:
-	// 'arn:aws:logs:us-west-1:123456789012:log-group:/aws/my/group:*'
-	// Note: See the [log group ARN format
-	// documentation](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/iam-access-control-overview-cwl.html#CWL_ARN_Format).
-	AWSLogGroupARNsKey = attribute.Key("aws.log.group.arns")
-
-	// AWSLogGroupNamesKey is the attribute Key conforming to the
-	// "aws.log.group.names" semantic conventions. It represents the name(s) of
-	// the AWS log group(s) an application is writing to.
-	//
-	// Type: string[]
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: '/aws/lambda/my-function', 'opentelemetry-service'
-	// Note: Multiple log groups must be supported for cases like
-	// multi-container applications, where a single application has sidecar
-	// containers, and each write to their own log group.
-	AWSLogGroupNamesKey = attribute.Key("aws.log.group.names")
-
-	// AWSLogStreamARNsKey is the attribute Key conforming to the
-	// "aws.log.stream.arns" semantic conventions. It represents the ARN(s) of
-	// the AWS log stream(s).
-	//
-	// Type: string[]
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples:
-	// 'arn:aws:logs:us-west-1:123456789012:log-group:/aws/my/group:log-stream:logs/main/10838bed-421f-43ef-870a-f43feacbbb5b'
-	// Note: See the [log stream ARN format
-	// documentation](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/iam-access-control-overview-cwl.html#CWL_ARN_Format).
-	// One log group can contain several log streams, so these ARNs necessarily
-	// identify both a log group and a log stream.
-	AWSLogStreamARNsKey = attribute.Key("aws.log.stream.arns")
-
-	// AWSLogStreamNamesKey is the attribute Key conforming to the
-	// "aws.log.stream.names" semantic conventions. It represents the name(s)
-	// of the AWS log stream(s) an application is writing to.
-	//
-	// Type: string[]
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'logs/main/10838bed-421f-43ef-870a-f43feacbbb5b'
-	AWSLogStreamNamesKey = attribute.Key("aws.log.stream.names")
-)
-
-// AWSLogGroupARNs returns an attribute KeyValue conforming to the
-// "aws.log.group.arns" semantic conventions. It represents the Amazon Resource
-// Name(s) (ARN) of the AWS log group(s).
-func AWSLogGroupARNs(val ...string) attribute.KeyValue {
-	return AWSLogGroupARNsKey.StringSlice(val)
-}
-
-// AWSLogGroupNames returns an attribute KeyValue conforming to the
-// "aws.log.group.names" semantic conventions. It represents the name(s) of the
-// AWS log group(s) an application is writing to.
-func AWSLogGroupNames(val ...string) attribute.KeyValue {
-	return AWSLogGroupNamesKey.StringSlice(val)
-}
-
-// AWSLogStreamARNs returns an attribute KeyValue conforming to the
-// "aws.log.stream.arns" semantic conventions. It represents the ARN(s) of the
-// AWS log stream(s).
-func AWSLogStreamARNs(val ...string) attribute.KeyValue {
-	return AWSLogStreamARNsKey.StringSlice(val)
-}
-
-// AWSLogStreamNames returns an attribute KeyValue conforming to the
-// "aws.log.stream.names" semantic conventions. It represents the name(s) of
-// the AWS log stream(s) an application is writing to.
-func AWSLogStreamNames(val ...string) attribute.KeyValue {
-	return AWSLogStreamNamesKey.StringSlice(val)
-}
-
-// Attributes for AWS Lambda.
-const (
-	// AWSLambdaInvokedARNKey is the attribute Key conforming to the
-	// "aws.lambda.invoked_arn" semantic conventions. It represents the full
-	// invoked ARN as provided on the `Context` passed to the function
-	// (`Lambda-Runtime-Invoked-Function-ARN` header on the
-	// `/runtime/invocation/next` applicable).
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'arn:aws:lambda:us-east-1:123456:function:myfunction:myalias'
-	// Note: This may be different from `cloud.resource_id` if an alias is
-	// involved.
-	AWSLambdaInvokedARNKey = attribute.Key("aws.lambda.invoked_arn")
-)
-
-// AWSLambdaInvokedARN returns an attribute KeyValue conforming to the
-// "aws.lambda.invoked_arn" semantic conventions. It represents the full
-// invoked ARN as provided on the `Context` passed to the function
-// (`Lambda-Runtime-Invoked-Function-ARN` header on the
-// `/runtime/invocation/next` applicable).
-func AWSLambdaInvokedARN(val string) attribute.KeyValue {
-	return AWSLambdaInvokedARNKey.String(val)
-}
-
-// Attributes for AWS S3.
-const (
-	// AWSS3BucketKey is the attribute Key conforming to the "aws.s3.bucket"
-	// semantic conventions. It represents the S3 bucket name the request
-	// refers to. Corresponds to the `--bucket` parameter of the [S3
-	// API](https://docs.aws.amazon.com/cli/latest/reference/s3api/index.html)
-	// operations.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'some-bucket-name'
-	// Note: The `bucket` attribute is applicable to all S3 operations that
-	// reference a bucket, i.e. that require the bucket name as a mandatory
-	// parameter.
-	// This applies to almost all S3 operations except `list-buckets`.
-	AWSS3BucketKey = attribute.Key("aws.s3.bucket")
-
-	// AWSS3CopySourceKey is the attribute Key conforming to the
-	// "aws.s3.copy_source" semantic conventions. It represents the source
-	// object (in the form `bucket`/`key`) for the copy operation.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'someFile.yml'
-	// Note: The `copy_source` attribute applies to S3 copy operations and
-	// corresponds to the `--copy-source` parameter
-	// of the [copy-object operation within the S3
-	// API](https://docs.aws.amazon.com/cli/latest/reference/s3api/copy-object.html).
-	// This applies in particular to the following operations:
-	//
-	// -
-	// [copy-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/copy-object.html)
-	// -
-	// [upload-part-copy](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part-copy.html)
-	AWSS3CopySourceKey = attribute.Key("aws.s3.copy_source")
-
-	// AWSS3DeleteKey is the attribute Key conforming to the "aws.s3.delete"
-	// semantic conventions. It represents the delete request container that
-	// specifies the objects to be deleted.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples:
-	// 'Objects=[{Key=string,VersionID=string},{Key=string,VersionID=string}],Quiet=boolean'
-	// Note: The `delete` attribute is only applicable to the
-	// [delete-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/delete-object.html)
-	// operation.
-	// The `delete` attribute corresponds to the `--delete` parameter of the
-	// [delete-objects operation within the S3
-	// API](https://docs.aws.amazon.com/cli/latest/reference/s3api/delete-objects.html).
-	AWSS3DeleteKey = attribute.Key("aws.s3.delete")
-
-	// AWSS3KeyKey is the attribute Key conforming to the "aws.s3.key" semantic
-	// conventions. It represents the S3 object key the request refers to.
-	// Corresponds to the `--key` parameter of the [S3
-	// API](https://docs.aws.amazon.com/cli/latest/reference/s3api/index.html)
-	// operations.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'someFile.yml'
-	// Note: The `key` attribute is applicable to all object-related S3
-	// operations, i.e. that require the object key as a mandatory parameter.
-	// This applies in particular to the following operations:
-	//
-	// -
-	// [copy-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/copy-object.html)
-	// -
-	// [delete-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/delete-object.html)
-	// -
-	// [get-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/get-object.html)
-	// -
-	// [head-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/head-object.html)
-	// -
-	// [put-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/put-object.html)
-	// -
-	// [restore-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/restore-object.html)
-	// -
-	// [select-object-content](https://docs.aws.amazon.com/cli/latest/reference/s3api/select-object-content.html)
-	// -
-	// [abort-multipart-upload](https://docs.aws.amazon.com/cli/latest/reference/s3api/abort-multipart-upload.html)
-	// -
-	// [complete-multipart-upload](https://docs.aws.amazon.com/cli/latest/reference/s3api/complete-multipart-upload.html)
-	// -
-	// [create-multipart-upload](https://docs.aws.amazon.com/cli/latest/reference/s3api/create-multipart-upload.html)
-	// -
-	// [list-parts](https://docs.aws.amazon.com/cli/latest/reference/s3api/list-parts.html)
-	// -
-	// [upload-part](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part.html)
-	// -
-	// [upload-part-copy](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part-copy.html)
-	AWSS3KeyKey = attribute.Key("aws.s3.key")
-
-	// AWSS3PartNumberKey is the attribute Key conforming to the
-	// "aws.s3.part_number" semantic conventions. It represents the part number
-	// of the part being uploaded in a multipart-upload operation. This is a
-	// positive integer between 1 and 10,000.
-	//
-	// Type: int
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 3456
-	// Note: The `part_number` attribute is only applicable to the
-	// [upload-part](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part.html)
-	// and
-	// [upload-part-copy](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part-copy.html)
-	// operations.
-	// The `part_number` attribute corresponds to the `--part-number` parameter
-	// of the
-	// [upload-part operation within the S3
-	// API](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part.html).
-	AWSS3PartNumberKey = attribute.Key("aws.s3.part_number")
-
-	// AWSS3UploadIDKey is the attribute Key conforming to the
-	// "aws.s3.upload_id" semantic conventions. It represents the upload ID
-	// that identifies the multipart upload.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'dfRtDYWFbkRONycy.Yxwh66Yjlx.cph0gtNBtJ'
-	// Note: The `upload_id` attribute applies to S3 multipart-upload
-	// operations and corresponds to the `--upload-id` parameter
-	// of the [S3
-	// API](https://docs.aws.amazon.com/cli/latest/reference/s3api/index.html)
-	// multipart operations.
-	// This applies in particular to the following operations:
-	//
-	// -
-	// [abort-multipart-upload](https://docs.aws.amazon.com/cli/latest/reference/s3api/abort-multipart-upload.html)
-	// -
-	// [complete-multipart-upload](https://docs.aws.amazon.com/cli/latest/reference/s3api/complete-multipart-upload.html)
-	// -
-	// [list-parts](https://docs.aws.amazon.com/cli/latest/reference/s3api/list-parts.html)
-	// -
-	// [upload-part](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part.html)
-	// -
-	// [upload-part-copy](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part-copy.html)
-	AWSS3UploadIDKey = attribute.Key("aws.s3.upload_id")
-)
-
-// AWSS3Bucket returns an attribute KeyValue conforming to the
-// "aws.s3.bucket" semantic conventions. It represents the S3 bucket name the
-// request refers to. Corresponds to the `--bucket` parameter of the [S3
-// API](https://docs.aws.amazon.com/cli/latest/reference/s3api/index.html)
-// operations.
-func AWSS3Bucket(val string) attribute.KeyValue {
-	return AWSS3BucketKey.String(val)
-}
-
-// AWSS3CopySource returns an attribute KeyValue conforming to the
-// "aws.s3.copy_source" semantic conventions. It represents the source object
-// (in the form `bucket`/`key`) for the copy operation.
-func AWSS3CopySource(val string) attribute.KeyValue {
-	return AWSS3CopySourceKey.String(val)
-}
-
-// AWSS3Delete returns an attribute KeyValue conforming to the
-// "aws.s3.delete" semantic conventions. It represents the delete request
-// container that specifies the objects to be deleted.
-func AWSS3Delete(val string) attribute.KeyValue {
-	return AWSS3DeleteKey.String(val)
-}
-
-// AWSS3Key returns an attribute KeyValue conforming to the "aws.s3.key"
-// semantic conventions. It represents the S3 object key the request refers to.
-// Corresponds to the `--key` parameter of the [S3
-// API](https://docs.aws.amazon.com/cli/latest/reference/s3api/index.html)
-// operations.
-func AWSS3Key(val string) attribute.KeyValue {
-	return AWSS3KeyKey.String(val)
-}
-
-// AWSS3PartNumber returns an attribute KeyValue conforming to the
-// "aws.s3.part_number" semantic conventions. It represents the part number of
-// the part being uploaded in a multipart-upload operation. This is a positive
-// integer between 1 and 10,000.
-func AWSS3PartNumber(val int) attribute.KeyValue {
-	return AWSS3PartNumberKey.Int(val)
-}
-
-// AWSS3UploadID returns an attribute KeyValue conforming to the
-// "aws.s3.upload_id" semantic conventions. It represents the upload ID that
-// identifies the multipart upload.
-func AWSS3UploadID(val string) attribute.KeyValue {
-	return AWSS3UploadIDKey.String(val)
-}
-
-// The web browser attributes
-const (
-	// BrowserBrandsKey is the attribute Key conforming to the "browser.brands"
-	// semantic conventions. It represents the array of brand name and version
-	// separated by a space
-	//
-	// Type: string[]
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: ' Not A;Brand 99', 'Chromium 99', 'Chrome 99'
-	// Note: This value is intended to be taken from the [UA client hints
-	// API](https://wicg.github.io/ua-client-hints/#interface)
-	// (`navigator.userAgentData.brands`).
-	BrowserBrandsKey = attribute.Key("browser.brands")
-
-	// BrowserLanguageKey is the attribute Key conforming to the
-	// "browser.language" semantic conventions. It represents the preferred
-	// language of the user using the browser
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'en', 'en-US', 'fr', 'fr-FR'
-	// Note: This value is intended to be taken from the Navigator API
-	// `navigator.language`.
-	BrowserLanguageKey = attribute.Key("browser.language")
-
-	// BrowserMobileKey is the attribute Key conforming to the "browser.mobile"
-	// semantic conventions. It represents a boolean that is true if the
-	// browser is running on a mobile device
-	//
-	// Type: boolean
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Note: This value is intended to be taken from the [UA client hints
-	// API](https://wicg.github.io/ua-client-hints/#interface)
-	// (`navigator.userAgentData.mobile`). If unavailable, this attribute
-	// SHOULD be left unset.
-	BrowserMobileKey = attribute.Key("browser.mobile")
-
-	// BrowserPlatformKey is the attribute Key conforming to the
-	// "browser.platform" semantic conventions. It represents the platform on
-	// which the browser is running
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'Windows', 'macOS', 'Android'
-	// Note: This value is intended to be taken from the [UA client hints
-	// API](https://wicg.github.io/ua-client-hints/#interface)
-	// (`navigator.userAgentData.platform`). If unavailable, the legacy
-	// `navigator.platform` API SHOULD NOT be used instead and this attribute
-	// SHOULD be left unset in order for the values to be consistent.
-	// The list of possible values is defined in the [W3C User-Agent Client
-	// Hints
-	// specification](https://wicg.github.io/ua-client-hints/#sec-ch-ua-platform).
-	// Note that some (but not all) of these values can overlap with values in
-	// the [`os.type` and `os.name` attributes](./os.md). However, for
-	// consistency, the values in the `browser.platform` attribute should
-	// capture the exact value that the user agent provides.
-	BrowserPlatformKey = attribute.Key("browser.platform")
-)
-
-// BrowserBrands returns an attribute KeyValue conforming to the
-// "browser.brands" semantic conventions. It represents the array of brand name
-// and version separated by a space
-func BrowserBrands(val ...string) attribute.KeyValue {
-	return BrowserBrandsKey.StringSlice(val)
-}
-
-// BrowserLanguage returns an attribute KeyValue conforming to the
-// "browser.language" semantic conventions. It represents the preferred
-// language of the user using the browser
-func BrowserLanguage(val string) attribute.KeyValue {
-	return BrowserLanguageKey.String(val)
-}
-
-// BrowserMobile returns an attribute KeyValue conforming to the
-// "browser.mobile" semantic conventions. It represents a boolean that is true
-// if the browser is running on a mobile device
-func BrowserMobile(val bool) attribute.KeyValue {
-	return BrowserMobileKey.Bool(val)
-}
-
-// BrowserPlatform returns an attribute KeyValue conforming to the
-// "browser.platform" semantic conventions. It represents the platform on which
-// the browser is running
-func BrowserPlatform(val string) attribute.KeyValue {
-	return BrowserPlatformKey.String(val)
-}
-
-// These attributes may be used to describe the client in a connection-based
-// network interaction where there is one side that initiates the connection
-// (the client is the side that initiates the connection). This covers all TCP
-// network interactions since TCP is connection-based and one side initiates
-// the connection (an exception is made for peer-to-peer communication over TCP
-// where the "user-facing" surface of the protocol / API doesn't expose a clear
-// notion of client and server). This also covers UDP network interactions
-// where one side initiates the interaction, e.g. QUIC (HTTP/3) and DNS.
-const (
-	// ClientAddressKey is the attribute Key conforming to the "client.address"
-	// semantic conventions. It represents the client address - domain name if
-	// available without reverse DNS lookup; otherwise, IP address or Unix
-	// domain socket name.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: stable
-	// Examples: 'client.example.com', '10.1.2.80', '/tmp/my.sock'
-	// Note: When observed from the server side, and when communicating through
-	// an intermediary, `client.address` SHOULD represent the client address
-	// behind any intermediaries,  for example proxies, if it's available.
-	ClientAddressKey = attribute.Key("client.address")
-
-	// ClientPortKey is the attribute Key conforming to the "client.port"
-	// semantic conventions. It represents the client port number.
-	//
-	// Type: int
-	// RequirementLevel: Optional
-	// Stability: stable
-	// Examples: 65123
-	// Note: When observed from the server side, and when communicating through
-	// an intermediary, `client.port` SHOULD represent the client port behind
-	// any intermediaries,  for example proxies, if it's available.
-	ClientPortKey = attribute.Key("client.port")
-)
-
-// ClientAddress returns an attribute KeyValue conforming to the
-// "client.address" semantic conventions. It represents the client address -
-// domain name if available without reverse DNS lookup; otherwise, IP address
-// or Unix domain socket name.
-func ClientAddress(val string) attribute.KeyValue {
-	return ClientAddressKey.String(val)
-}
-
-// ClientPort returns an attribute KeyValue conforming to the "client.port"
-// semantic conventions. It represents the client port number.
-func ClientPort(val int) attribute.KeyValue {
-	return ClientPortKey.Int(val)
-}
-
-// A cloud environment (e.g. GCP, Azure, AWS).
-const (
-	// CloudAccountIDKey is the attribute Key conforming to the
-	// "cloud.account.id" semantic conventions. It represents the cloud account
-	// ID the resource is assigned to.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: '111111111111', 'opentelemetry'
-	CloudAccountIDKey = attribute.Key("cloud.account.id")
-
-	// CloudAvailabilityZoneKey is the attribute Key conforming to the
-	// "cloud.availability_zone" semantic conventions. It represents the cloud
-	// regions often have multiple, isolated locations known as zones to
-	// increase availability. Availability zone represents the zone where the
-	// resource is running.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'us-east-1c'
-	// Note: Availability zones are called "zones" on Alibaba Cloud and Google
-	// Cloud.
-	CloudAvailabilityZoneKey = attribute.Key("cloud.availability_zone")
-
-	// CloudPlatformKey is the attribute Key conforming to the "cloud.platform"
-	// semantic conventions. It represents the cloud platform in use.
-	//
-	// Type: Enum
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Note: The prefix of the service SHOULD match the one specified in
-	// `cloud.provider`.
-	CloudPlatformKey = attribute.Key("cloud.platform")
-
-	// CloudProviderKey is the attribute Key conforming to the "cloud.provider"
-	// semantic conventions. It represents the name of the cloud provider.
-	//
-	// Type: Enum
-	// RequirementLevel: Optional
-	// Stability: experimental
-	CloudProviderKey = attribute.Key("cloud.provider")
-
-	// CloudRegionKey is the attribute Key conforming to the "cloud.region"
-	// semantic conventions. It represents the geographical region the resource
-	// is running.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'us-central1', 'us-east-1'
-	// Note: Refer to your provider's docs to see the available regions, for
-	// example [Alibaba Cloud
-	// regions](https://www.alibabacloud.com/help/doc-detail/40654.htm), [AWS
-	// regions](https://aws.amazon.com/about-aws/global-infrastructure/regions_az/),
-	// [Azure
-	// regions](https://azure.microsoft.com/global-infrastructure/geographies/),
-	// [Google Cloud regions](https://cloud.google.com/about/locations), or
-	// [Tencent Cloud
-	// regions](https://www.tencentcloud.com/document/product/213/6091).
-	CloudRegionKey = attribute.Key("cloud.region")
-
-	// CloudResourceIDKey is the attribute Key conforming to the
-	// "cloud.resource_id" semantic conventions. It represents the cloud
-	// provider-specific native identifier of the monitored cloud resource
-	// (e.g. an
-	// [ARN](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html)
-	// on AWS, a [fully qualified resource
-	// ID](https://learn.microsoft.com/rest/api/resources/resources/get-by-id)
-	// on Azure, a [full resource
-	// name](https://cloud.google.com/apis/design/resource_names#full_resource_name)
-	// on GCP)
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'arn:aws:lambda:REGION:ACCOUNT_ID:function:my-function',
-	// '//run.googleapis.com/projects/PROJECT_ID/locations/LOCATION_ID/services/SERVICE_ID',
-	// '/subscriptions/<SUBSCIPTION_GUID>/resourceGroups/<RG>/providers/Microsoft.Web/sites/<FUNCAPP>/functions/<FUNC>'
-	// Note: On some cloud providers, it may not be possible to determine the
-	// full ID at startup,
-	// so it may be necessary to set `cloud.resource_id` as a span attribute
-	// instead.
-	//
-	// The exact value to use for `cloud.resource_id` depends on the cloud
-	// provider.
-	// The following well-known definitions MUST be used if you set this
-	// attribute and they apply:
-	//
-	// * **AWS Lambda:** The function
-	// [ARN](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html).
-	//   Take care not to use the "invoked ARN" directly but replace any
-	//   [alias
-	// suffix](https://docs.aws.amazon.com/lambda/latest/dg/configuration-aliases.html)
-	//   with the resolved function version, as the same runtime instance may
-	// be invokable with
-	//   multiple different aliases.
-	// * **GCP:** The [URI of the
-	// resource](https://cloud.google.com/iam/docs/full-resource-names)
-	// * **Azure:** The [Fully Qualified Resource
-	// ID](https://docs.microsoft.com/rest/api/resources/resources/get-by-id)
-	// of the invoked function,
-	//   *not* the function app, having the form
-	// `/subscriptions/<SUBSCIPTION_GUID>/resourceGroups/<RG>/providers/Microsoft.Web/sites/<FUNCAPP>/functions/<FUNC>`.
-	//   This means that a span attribute MUST be used, as an Azure function
-	// app can host multiple functions that would usually share
-	//   a TracerProvider.
-	CloudResourceIDKey = attribute.Key("cloud.resource_id")
-)
-
-var (
-	// Alibaba Cloud Elastic Compute Service
-	CloudPlatformAlibabaCloudECS = CloudPlatformKey.String("alibaba_cloud_ecs")
-	// Alibaba Cloud Function Compute
-	CloudPlatformAlibabaCloudFc = CloudPlatformKey.String("alibaba_cloud_fc")
-	// Red Hat OpenShift on Alibaba Cloud
-	CloudPlatformAlibabaCloudOpenshift = CloudPlatformKey.String("alibaba_cloud_openshift")
-	// AWS Elastic Compute Cloud
-	CloudPlatformAWSEC2 = CloudPlatformKey.String("aws_ec2")
-	// AWS Elastic Container Service
-	CloudPlatformAWSECS = CloudPlatformKey.String("aws_ecs")
-	// AWS Elastic Kubernetes Service
-	CloudPlatformAWSEKS = CloudPlatformKey.String("aws_eks")
-	// AWS Lambda
-	CloudPlatformAWSLambda = CloudPlatformKey.String("aws_lambda")
-	// AWS Elastic Beanstalk
-	CloudPlatformAWSElasticBeanstalk = CloudPlatformKey.String("aws_elastic_beanstalk")
-	// AWS App Runner
-	CloudPlatformAWSAppRunner = CloudPlatformKey.String("aws_app_runner")
-	// Red Hat OpenShift on AWS (ROSA)
-	CloudPlatformAWSOpenshift = CloudPlatformKey.String("aws_openshift")
-	// Azure Virtual Machines
-	CloudPlatformAzureVM = CloudPlatformKey.String("azure_vm")
-	// Azure Container Apps
-	CloudPlatformAzureContainerApps = CloudPlatformKey.String("azure_container_apps")
-	// Azure Container Instances
-	CloudPlatformAzureContainerInstances = CloudPlatformKey.String("azure_container_instances")
-	// Azure Kubernetes Service
-	CloudPlatformAzureAKS = CloudPlatformKey.String("azure_aks")
-	// Azure Functions
-	CloudPlatformAzureFunctions = CloudPlatformKey.String("azure_functions")
-	// Azure App Service
-	CloudPlatformAzureAppService = CloudPlatformKey.String("azure_app_service")
-	// Azure Red Hat OpenShift
-	CloudPlatformAzureOpenshift = CloudPlatformKey.String("azure_openshift")
-	// Google Bare Metal Solution (BMS)
-	CloudPlatformGCPBareMetalSolution = CloudPlatformKey.String("gcp_bare_metal_solution")
-	// Google Cloud Compute Engine (GCE)
-	CloudPlatformGCPComputeEngine = CloudPlatformKey.String("gcp_compute_engine")
-	// Google Cloud Run
-	CloudPlatformGCPCloudRun = CloudPlatformKey.String("gcp_cloud_run")
-	// Google Cloud Kubernetes Engine (GKE)
-	CloudPlatformGCPKubernetesEngine = CloudPlatformKey.String("gcp_kubernetes_engine")
-	// Google Cloud Functions (GCF)
-	CloudPlatformGCPCloudFunctions = CloudPlatformKey.String("gcp_cloud_functions")
-	// Google Cloud App Engine (GAE)
-	CloudPlatformGCPAppEngine = CloudPlatformKey.String("gcp_app_engine")
-	// Red Hat OpenShift on Google Cloud
-	CloudPlatformGCPOpenshift = CloudPlatformKey.String("gcp_openshift")
-	// Red Hat OpenShift on IBM Cloud
-	CloudPlatformIbmCloudOpenshift = CloudPlatformKey.String("ibm_cloud_openshift")
-	// Tencent Cloud Cloud Virtual Machine (CVM)
-	CloudPlatformTencentCloudCvm = CloudPlatformKey.String("tencent_cloud_cvm")
-	// Tencent Cloud Elastic Kubernetes Service (EKS)
-	CloudPlatformTencentCloudEKS = CloudPlatformKey.String("tencent_cloud_eks")
-	// Tencent Cloud Serverless Cloud Function (SCF)
-	CloudPlatformTencentCloudScf = CloudPlatformKey.String("tencent_cloud_scf")
-)
-
-var (
-	// Alibaba Cloud
-	CloudProviderAlibabaCloud = CloudProviderKey.String("alibaba_cloud")
-	// Amazon Web Services
-	CloudProviderAWS = CloudProviderKey.String("aws")
-	// Microsoft Azure
-	CloudProviderAzure = CloudProviderKey.String("azure")
-	// Google Cloud Platform
-	CloudProviderGCP = CloudProviderKey.String("gcp")
-	// Heroku Platform as a Service
-	CloudProviderHeroku = CloudProviderKey.String("heroku")
-	// IBM Cloud
-	CloudProviderIbmCloud = CloudProviderKey.String("ibm_cloud")
-	// Tencent Cloud
-	CloudProviderTencentCloud = CloudProviderKey.String("tencent_cloud")
-)
-
-// CloudAccountID returns an attribute KeyValue conforming to the
-// "cloud.account.id" semantic conventions. It represents the cloud account ID
-// the resource is assigned to.
-func CloudAccountID(val string) attribute.KeyValue {
-	return CloudAccountIDKey.String(val)
-}
-
-// CloudAvailabilityZone returns an attribute KeyValue conforming to the
-// "cloud.availability_zone" semantic conventions. It represents the cloud
-// regions often have multiple, isolated locations known as zones to increase
-// availability. Availability zone represents the zone where the resource is
-// running.
-func CloudAvailabilityZone(val string) attribute.KeyValue {
-	return CloudAvailabilityZoneKey.String(val)
-}
-
-// CloudRegion returns an attribute KeyValue conforming to the
-// "cloud.region" semantic conventions. It represents the geographical region
-// the resource is running.
-func CloudRegion(val string) attribute.KeyValue {
-	return CloudRegionKey.String(val)
-}
-
-// CloudResourceID returns an attribute KeyValue conforming to the
-// "cloud.resource_id" semantic conventions. It represents the cloud
-// provider-specific native identifier of the monitored cloud resource (e.g. an
-// [ARN](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html)
-// on AWS, a [fully qualified resource
-// ID](https://learn.microsoft.com/rest/api/resources/resources/get-by-id) on
-// Azure, a [full resource
-// name](https://cloud.google.com/apis/design/resource_names#full_resource_name)
-// on GCP)
-func CloudResourceID(val string) attribute.KeyValue {
-	return CloudResourceIDKey.String(val)
-}
-
-// Attributes for CloudEvents.
-const (
-	// CloudeventsEventIDKey is the attribute Key conforming to the
-	// "cloudevents.event_id" semantic conventions. It represents the
-	// [event_id](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#id)
-	// uniquely identifies the event.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: '123e4567-e89b-12d3-a456-426614174000', '0001'
-	CloudeventsEventIDKey = attribute.Key("cloudevents.event_id")
-
-	// CloudeventsEventSourceKey is the attribute Key conforming to the
-	// "cloudevents.event_source" semantic conventions. It represents the
-	// [source](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#source-1)
-	// identifies the context in which an event happened.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'https://github.com/cloudevents',
-	// '/cloudevents/spec/pull/123', 'my-service'
-	CloudeventsEventSourceKey = attribute.Key("cloudevents.event_source")
-
-	// CloudeventsEventSpecVersionKey is the attribute Key conforming to the
-	// "cloudevents.event_spec_version" semantic conventions. It represents the
-	// [version of the CloudEvents
-	// specification](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#specversion)
-	// which the event uses.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: '1.0'
-	CloudeventsEventSpecVersionKey = attribute.Key("cloudevents.event_spec_version")
-
-	// CloudeventsEventSubjectKey is the attribute Key conforming to the
-	// "cloudevents.event_subject" semantic conventions. It represents the
-	// [subject](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#subject)
-	// of the event in the context of the event producer (identified by
-	// source).
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'mynewfile.jpg'
-	CloudeventsEventSubjectKey = attribute.Key("cloudevents.event_subject")
-
-	// CloudeventsEventTypeKey is the attribute Key conforming to the
-	// "cloudevents.event_type" semantic conventions. It represents the
-	// [event_type](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#type)
-	// contains a value describing the type of event related to the originating
-	// occurrence.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'com.github.pull_request.opened',
-	// 'com.example.object.deleted.v2'
-	CloudeventsEventTypeKey = attribute.Key("cloudevents.event_type")
-)
-
-// CloudeventsEventID returns an attribute KeyValue conforming to the
-// "cloudevents.event_id" semantic conventions. It represents the
-// [event_id](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#id)
-// uniquely identifies the event.
-func CloudeventsEventID(val string) attribute.KeyValue {
-	return CloudeventsEventIDKey.String(val)
-}
-
-// CloudeventsEventSource returns an attribute KeyValue conforming to the
-// "cloudevents.event_source" semantic conventions. It represents the
-// [source](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#source-1)
-// identifies the context in which an event happened.
-func CloudeventsEventSource(val string) attribute.KeyValue {
-	return CloudeventsEventSourceKey.String(val)
-}
-
-// CloudeventsEventSpecVersion returns an attribute KeyValue conforming to
-// the "cloudevents.event_spec_version" semantic conventions. It represents the
-// [version of the CloudEvents
-// specification](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#specversion)
-// which the event uses.
-func CloudeventsEventSpecVersion(val string) attribute.KeyValue {
-	return CloudeventsEventSpecVersionKey.String(val)
-}
-
-// CloudeventsEventSubject returns an attribute KeyValue conforming to the
-// "cloudevents.event_subject" semantic conventions. It represents the
-// [subject](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#subject)
-// of the event in the context of the event producer (identified by source).
-func CloudeventsEventSubject(val string) attribute.KeyValue {
-	return CloudeventsEventSubjectKey.String(val)
-}
-
-// CloudeventsEventType returns an attribute KeyValue conforming to the
-// "cloudevents.event_type" semantic conventions. It represents the
-// [event_type](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#type)
-// contains a value describing the type of event related to the originating
-// occurrence.
-func CloudeventsEventType(val string) attribute.KeyValue {
-	return CloudeventsEventTypeKey.String(val)
-}
-
-// These attributes allow to report this unit of code and therefore to provide
-// more context about the span.
-const (
-	// CodeColumnKey is the attribute Key conforming to the "code.column"
-	// semantic conventions. It represents the column number in `code.filepath`
-	// best representing the operation. It SHOULD point within the code unit
-	// named in `code.function`.
-	//
-	// Type: int
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 16
-	CodeColumnKey = attribute.Key("code.column")
-
-	// CodeFilepathKey is the attribute Key conforming to the "code.filepath"
-	// semantic conventions. It represents the source code file name that
-	// identifies the code unit as uniquely as possible (preferably an absolute
-	// file path).
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: '/usr/local/MyApplication/content_root/app/index.php'
-	CodeFilepathKey = attribute.Key("code.filepath")
-
-	// CodeFunctionKey is the attribute Key conforming to the "code.function"
-	// semantic conventions. It represents the method or function name, or
-	// equivalent (usually rightmost part of the code unit's name).
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'serveRequest'
-	CodeFunctionKey = attribute.Key("code.function")
-
-	// CodeLineNumberKey is the attribute Key conforming to the "code.lineno"
-	// semantic conventions. It represents the line number in `code.filepath`
-	// best representing the operation. It SHOULD point within the code unit
-	// named in `code.function`.
-	//
-	// Type: int
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 42
-	CodeLineNumberKey = attribute.Key("code.lineno")
-
-	// CodeNamespaceKey is the attribute Key conforming to the "code.namespace"
-	// semantic conventions. It represents the "namespace" within which
-	// `code.function` is defined. Usually the qualified class or module name,
-	// such that `code.namespace` + some separator + `code.function` form a
-	// unique identifier for the code unit.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'com.example.MyHTTPService'
-	CodeNamespaceKey = attribute.Key("code.namespace")
-
-	// CodeStacktraceKey is the attribute Key conforming to the
-	// "code.stacktrace" semantic conventions. It represents a stacktrace as a
-	// string in the natural representation for the language runtime. The
-	// representation is to be determined and documented by each language SIG.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'at
-	// com.example.GenerateTrace.methodB(GenerateTrace.java:13)\\n at '
-	//  'com.example.GenerateTrace.methodA(GenerateTrace.java:9)\\n at '
-	//  'com.example.GenerateTrace.main(GenerateTrace.java:5)'
-	CodeStacktraceKey = attribute.Key("code.stacktrace")
-)
-
-// CodeColumn returns an attribute KeyValue conforming to the "code.column"
-// semantic conventions. It represents the column number in `code.filepath`
-// best representing the operation. It SHOULD point within the code unit named
-// in `code.function`.
-func CodeColumn(val int) attribute.KeyValue {
-	return CodeColumnKey.Int(val)
-}
-
-// CodeFilepath returns an attribute KeyValue conforming to the
-// "code.filepath" semantic conventions. It represents the source code file
-// name that identifies the code unit as uniquely as possible (preferably an
-// absolute file path).
-func CodeFilepath(val string) attribute.KeyValue {
-	return CodeFilepathKey.String(val)
-}
-
-// CodeFunction returns an attribute KeyValue conforming to the
-// "code.function" semantic conventions. It represents the method or function
-// name, or equivalent (usually rightmost part of the code unit's name).
-func CodeFunction(val string) attribute.KeyValue {
-	return CodeFunctionKey.String(val)
-}
-
-// CodeLineNumber returns an attribute KeyValue conforming to the "code.lineno"
-// semantic conventions. It represents the line number in `code.filepath` best
-// representing the operation. It SHOULD point within the code unit named in
-// `code.function`.
-func CodeLineNumber(val int) attribute.KeyValue {
-	return CodeLineNumberKey.Int(val)
-}
-
-// CodeNamespace returns an attribute KeyValue conforming to the
-// "code.namespace" semantic conventions. It represents the "namespace" within
-// which `code.function` is defined. Usually the qualified class or module
-// name, such that `code.namespace` + some separator + `code.function` form a
-// unique identifier for the code unit.
-func CodeNamespace(val string) attribute.KeyValue {
-	return CodeNamespaceKey.String(val)
-}
-
-// CodeStacktrace returns an attribute KeyValue conforming to the
-// "code.stacktrace" semantic conventions. It represents a stacktrace as a
-// string in the natural representation for the language runtime. The
-// representation is to be determined and documented by each language SIG.
-func CodeStacktrace(val string) attribute.KeyValue {
-	return CodeStacktraceKey.String(val)
-}
-
-// A container instance.
-const (
-	// ContainerCommandKey is the attribute Key conforming to the
-	// "container.command" semantic conventions. It represents the command used
-	// to run the container (i.e. the command name).
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'otelcontribcol'
-	// Note: If using embedded credentials or sensitive data, it is recommended
-	// to remove them to prevent potential leakage.
-	ContainerCommandKey = attribute.Key("container.command")
-
-	// ContainerCommandArgsKey is the attribute Key conforming to the
-	// "container.command_args" semantic conventions. It represents the all the
-	// command arguments (including the command/executable itself) run by the
-	// container. [2]
-	//
-	// Type: string[]
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'otelcontribcol, --config, config.yaml'
-	ContainerCommandArgsKey = attribute.Key("container.command_args")
-
-	// ContainerCommandLineKey is the attribute Key conforming to the
-	// "container.command_line" semantic conventions. It represents the full
-	// command run by the container as a single string representing the full
-	// command. [2]
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'otelcontribcol --config config.yaml'
-	ContainerCommandLineKey = attribute.Key("container.command_line")
-
-	// ContainerCPUStateKey is the attribute Key conforming to the
-	// "container.cpu.state" semantic conventions. It represents the CPU state
-	// for this data point.
-	//
-	// Type: Enum
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'user', 'kernel'
-	ContainerCPUStateKey = attribute.Key("container.cpu.state")
-
-	// ContainerIDKey is the attribute Key conforming to the "container.id"
-	// semantic conventions. It represents the container ID. Usually a UUID, as
-	// for example used to [identify Docker
-	// containers](https://docs.docker.com/engine/reference/run/#container-identification).
-	// The UUID might be abbreviated.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'a3bf90e006b2'
-	ContainerIDKey = attribute.Key("container.id")
-
-	// ContainerImageIDKey is the attribute Key conforming to the
-	// "container.image.id" semantic conventions. It represents the runtime
-	// specific image identifier. Usually a hash algorithm followed by a UUID.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples:
-	// 'sha256:19c92d0a00d1b66d897bceaa7319bee0dd38a10a851c60bcec9474aa3f01e50f'
-	// Note: Docker defines a sha256 of the image id; `container.image.id`
-	// corresponds to the `Image` field from the Docker container inspect
-	// [API](https://docs.docker.com/engine/api/v1.43/#tag/Container/operation/ContainerInspect)
-	// endpoint.
-	// K8S defines a link to the container registry repository with digest
-	// `"imageID": "registry.azurecr.io
-	// /namespace/service/dockerfile@sha256:bdeabd40c3a8a492eaf9e8e44d0ebbb84bac7ee25ac0cf8a7159d25f62555625"`.
-	// The ID is assigned by the container runtime and can vary in different
-	// environments. Consider using `oci.manifest.digest` if it is important to
-	// identify the same image in different environments/runtimes.
-	ContainerImageIDKey = attribute.Key("container.image.id")
-
-	// ContainerImageNameKey is the attribute Key conforming to the
-	// "container.image.name" semantic conventions. It represents the name of
-	// the image the container was built on.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'gcr.io/opentelemetry/operator'
-	ContainerImageNameKey = attribute.Key("container.image.name")
-
-	// ContainerImageRepoDigestsKey is the attribute Key conforming to the
-	// "container.image.repo_digests" semantic conventions. It represents the
-	// repo digests of the container image as provided by the container
-	// runtime.
-	//
-	// Type: string[]
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples:
-	// 'example@sha256:afcc7f1ac1b49db317a7196c902e61c6c3c4607d63599ee1a82d702d249a0ccb',
-	// 'internal.registry.example.com:5000/example@sha256:b69959407d21e8a062e0416bf13405bb2b71ed7a84dde4158ebafacfa06f5578'
-	// Note:
-	// [Docker](https://docs.docker.com/engine/api/v1.43/#tag/Image/operation/ImageInspect)
-	// and
-	// [CRI](https://github.com/kubernetes/cri-api/blob/c75ef5b473bbe2d0a4fc92f82235efd665ea8e9f/pkg/apis/runtime/v1/api.proto#L1237-L1238)
-	// report those under the `RepoDigests` field.
-	ContainerImageRepoDigestsKey = attribute.Key("container.image.repo_digests")
-
-	// ContainerImageTagsKey is the attribute Key conforming to the
-	// "container.image.tags" semantic conventions. It represents the container
-	// image tags. An example can be found in [Docker Image
-	// Inspect](https://docs.docker.com/engine/api/v1.43/#tag/Image/operation/ImageInspect).
-	// Should be only the `<tag>` section of the full name for example from
-	// `registry.example.com/my-org/my-image:<tag>`.
-	//
-	// Type: string[]
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'v1.27.1', '3.5.7-0'
-	ContainerImageTagsKey = attribute.Key("container.image.tags")
-
-	// ContainerNameKey is the attribute Key conforming to the "container.name"
-	// semantic conventions. It represents the container name used by container
-	// runtime.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'opentelemetry-autoconf'
-	ContainerNameKey = attribute.Key("container.name")
-
-	// ContainerRuntimeKey is the attribute Key conforming to the
-	// "container.runtime" semantic conventions. It represents the container
-	// runtime managing this container.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'docker', 'containerd', 'rkt'
-	ContainerRuntimeKey = attribute.Key("container.runtime")
-)
-
-var (
-	// When tasks of the cgroup are in user mode (Linux). When all container processes are in user mode (Windows)
-	ContainerCPUStateUser = ContainerCPUStateKey.String("user")
-	// When CPU is used by the system (host OS)
-	ContainerCPUStateSystem = ContainerCPUStateKey.String("system")
-	// When tasks of the cgroup are in kernel mode (Linux). When all container processes are in kernel mode (Windows)
-	ContainerCPUStateKernel = ContainerCPUStateKey.String("kernel")
-)
-
-// ContainerCommand returns an attribute KeyValue conforming to the
-// "container.command" semantic conventions. It represents the command used to
-// run the container (i.e. the command name).
-func ContainerCommand(val string) attribute.KeyValue {
-	return ContainerCommandKey.String(val)
-}
-
-// ContainerCommandArgs returns an attribute KeyValue conforming to the
-// "container.command_args" semantic conventions. It represents the all the
-// command arguments (including the command/executable itself) run by the
-// container. [2]
-func ContainerCommandArgs(val ...string) attribute.KeyValue {
-	return ContainerCommandArgsKey.StringSlice(val)
-}
-
-// ContainerCommandLine returns an attribute KeyValue conforming to the
-// "container.command_line" semantic conventions. It represents the full
-// command run by the container as a single string representing the full
-// command. [2]
-func ContainerCommandLine(val string) attribute.KeyValue {
-	return ContainerCommandLineKey.String(val)
-}
-
-// ContainerID returns an attribute KeyValue conforming to the
-// "container.id" semantic conventions. It represents the container ID. Usually
-// a UUID, as for example used to [identify Docker
-// containers](https://docs.docker.com/engine/reference/run/#container-identification).
-// The UUID might be abbreviated.
-func ContainerID(val string) attribute.KeyValue {
-	return ContainerIDKey.String(val)
-}
-
-// ContainerImageID returns an attribute KeyValue conforming to the
-// "container.image.id" semantic conventions. It represents the runtime
-// specific image identifier. Usually a hash algorithm followed by a UUID.
-func ContainerImageID(val string) attribute.KeyValue {
-	return ContainerImageIDKey.String(val)
-}
-
-// ContainerImageName returns an attribute KeyValue conforming to the
-// "container.image.name" semantic conventions. It represents the name of the
-// image the container was built on.
-func ContainerImageName(val string) attribute.KeyValue {
-	return ContainerImageNameKey.String(val)
-}
-
-// ContainerImageRepoDigests returns an attribute KeyValue conforming to the
-// "container.image.repo_digests" semantic conventions. It represents the repo
-// digests of the container image as provided by the container runtime.
-func ContainerImageRepoDigests(val ...string) attribute.KeyValue {
-	return ContainerImageRepoDigestsKey.StringSlice(val)
-}
-
-// ContainerImageTags returns an attribute KeyValue conforming to the
-// "container.image.tags" semantic conventions. It represents the container
-// image tags. An example can be found in [Docker Image
-// Inspect](https://docs.docker.com/engine/api/v1.43/#tag/Image/operation/ImageInspect).
-// Should be only the `<tag>` section of the full name for example from
-// `registry.example.com/my-org/my-image:<tag>`.
-func ContainerImageTags(val ...string) attribute.KeyValue {
-	return ContainerImageTagsKey.StringSlice(val)
-}
-
-// ContainerName returns an attribute KeyValue conforming to the
-// "container.name" semantic conventions. It represents the container name used
-// by container runtime.
-func ContainerName(val string) attribute.KeyValue {
-	return ContainerNameKey.String(val)
-}
-
-// ContainerRuntime returns an attribute KeyValue conforming to the
-// "container.runtime" semantic conventions. It represents the container
-// runtime managing this container.
-func ContainerRuntime(val string) attribute.KeyValue {
-	return ContainerRuntimeKey.String(val)
-}
-
-// This group defines the attributes used to describe telemetry in the context
-// of databases.
-const (
-	// DBClientConnectionsPoolNameKey is the attribute Key conforming to the
-	// "db.client.connections.pool.name" semantic conventions. It represents
-	// the name of the connection pool; unique within the instrumented
-	// application. In case the connection pool implementation doesn't provide
-	// a name, instrumentation should use a combination of `server.address` and
-	// `server.port` attributes formatted as `server.address:server.port`.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'myDataSource'
-	DBClientConnectionsPoolNameKey = attribute.Key("db.client.connections.pool.name")
-
-	// DBClientConnectionsStateKey is the attribute Key conforming to the
-	// "db.client.connections.state" semantic conventions. It represents the
-	// state of a connection in the pool
-	//
-	// Type: Enum
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'idle'
-	DBClientConnectionsStateKey = attribute.Key("db.client.connections.state")
-
-	// DBCollectionNameKey is the attribute Key conforming to the
-	// "db.collection.name" semantic conventions. It represents the name of a
-	// collection (table, container) within the database.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'public.users', 'customers'
-	// Note: If the collection name is parsed from the query, it SHOULD match
-	// the value provided in the query and may be qualified with the schema and
-	// database name.
-	// It is RECOMMENDED to capture the value as provided by the application
-	// without attempting to do any case normalization.
-	DBCollectionNameKey = attribute.Key("db.collection.name")
-
-	// DBNamespaceKey is the attribute Key conforming to the "db.namespace"
-	// semantic conventions. It represents the name of the database, fully
-	// qualified within the server address and port.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'customers', 'test.users'
-	// Note: If a database system has multiple namespace components, they
-	// SHOULD be concatenated (potentially using database system specific
-	// conventions) from most general to most specific namespace component, and
-	// more specific namespaces SHOULD NOT be captured without the more general
-	// namespaces, to ensure that "startswith" queries for the more general
-	// namespaces will be valid.
-	// Semantic conventions for individual database systems SHOULD document
-	// what `db.namespace` means in the context of that system.
-	// It is RECOMMENDED to capture the value as provided by the application
-	// without attempting to do any case normalization.
-	DBNamespaceKey = attribute.Key("db.namespace")
-
-	// DBOperationNameKey is the attribute Key conforming to the
-	// "db.operation.name" semantic conventions. It represents the name of the
-	// operation or command being executed.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'findAndModify', 'HMSET', 'SELECT'
-	// Note: It is RECOMMENDED to capture the value as provided by the
-	// application without attempting to do any case normalization.
-	DBOperationNameKey = attribute.Key("db.operation.name")
-
-	// DBQueryTextKey is the attribute Key conforming to the "db.query.text"
-	// semantic conventions. It represents the database query being executed.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'SELECT * FROM wuser_table where username = ?', 'SET mykey
-	// "WuValue"'
-	DBQueryTextKey = attribute.Key("db.query.text")
-
-	// DBSystemKey is the attribute Key conforming to the "db.system" semantic
-	// conventions. It represents the database management system (DBMS) product
-	// as identified by the client instrumentation.
-	//
-	// Type: Enum
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Note: The actual DBMS may differ from the one identified by the client.
-	// For example, when using PostgreSQL client libraries to connect to a
-	// CockroachDB, the `db.system` is set to `postgresql` based on the
-	// instrumentation's best knowledge.
-	DBSystemKey = attribute.Key("db.system")
-)
-
-var (
-	// idle
-	DBClientConnectionsStateIdle = DBClientConnectionsStateKey.String("idle")
-	// used
-	DBClientConnectionsStateUsed = DBClientConnectionsStateKey.String("used")
-)
-
-var (
-	// Some other SQL database. Fallback only. See notes
-	DBSystemOtherSQL = DBSystemKey.String("other_sql")
-	// Microsoft SQL Server
-	DBSystemMSSQL = DBSystemKey.String("mssql")
-	// Microsoft SQL Server Compact
-	DBSystemMssqlcompact = DBSystemKey.String("mssqlcompact")
-	// MySQL
-	DBSystemMySQL = DBSystemKey.String("mysql")
-	// Oracle Database
-	DBSystemOracle = DBSystemKey.String("oracle")
-	// IBM DB2
-	DBSystemDB2 = DBSystemKey.String("db2")
-	// PostgreSQL
-	DBSystemPostgreSQL = DBSystemKey.String("postgresql")
-	// Amazon Redshift
-	DBSystemRedshift = DBSystemKey.String("redshift")
-	// Apache Hive
-	DBSystemHive = DBSystemKey.String("hive")
-	// Cloudscape
-	DBSystemCloudscape = DBSystemKey.String("cloudscape")
-	// HyperSQL DataBase
-	DBSystemHSQLDB = DBSystemKey.String("hsqldb")
-	// Progress Database
-	DBSystemProgress = DBSystemKey.String("progress")
-	// SAP MaxDB
-	DBSystemMaxDB = DBSystemKey.String("maxdb")
-	// SAP HANA
-	DBSystemHanaDB = DBSystemKey.String("hanadb")
-	// Ingres
-	DBSystemIngres = DBSystemKey.String("ingres")
-	// FirstSQL
-	DBSystemFirstSQL = DBSystemKey.String("firstsql")
-	// EnterpriseDB
-	DBSystemEDB = DBSystemKey.String("edb")
-	// InterSystems Caché
-	DBSystemCache = DBSystemKey.String("cache")
-	// Adabas (Adaptable Database System)
-	DBSystemAdabas = DBSystemKey.String("adabas")
-	// Firebird
-	DBSystemFirebird = DBSystemKey.String("firebird")
-	// Apache Derby
-	DBSystemDerby = DBSystemKey.String("derby")
-	// FileMaker
-	DBSystemFilemaker = DBSystemKey.String("filemaker")
-	// Informix
-	DBSystemInformix = DBSystemKey.String("informix")
-	// InstantDB
-	DBSystemInstantDB = DBSystemKey.String("instantdb")
-	// InterBase
-	DBSystemInterbase = DBSystemKey.String("interbase")
-	// MariaDB
-	DBSystemMariaDB = DBSystemKey.String("mariadb")
-	// Netezza
-	DBSystemNetezza = DBSystemKey.String("netezza")
-	// Pervasive PSQL
-	DBSystemPervasive = DBSystemKey.String("pervasive")
-	// PointBase
-	DBSystemPointbase = DBSystemKey.String("pointbase")
-	// SQLite
-	DBSystemSqlite = DBSystemKey.String("sqlite")
-	// Sybase
-	DBSystemSybase = DBSystemKey.String("sybase")
-	// Teradata
-	DBSystemTeradata = DBSystemKey.String("teradata")
-	// Vertica
-	DBSystemVertica = DBSystemKey.String("vertica")
-	// H2
-	DBSystemH2 = DBSystemKey.String("h2")
-	// ColdFusion IMQ
-	DBSystemColdfusion = DBSystemKey.String("coldfusion")
-	// Apache Cassandra
-	DBSystemCassandra = DBSystemKey.String("cassandra")
-	// Apache HBase
-	DBSystemHBase = DBSystemKey.String("hbase")
-	// MongoDB
-	DBSystemMongoDB = DBSystemKey.String("mongodb")
-	// Redis
-	DBSystemRedis = DBSystemKey.String("redis")
-	// Couchbase
-	DBSystemCouchbase = DBSystemKey.String("couchbase")
-	// CouchDB
-	DBSystemCouchDB = DBSystemKey.String("couchdb")
-	// Microsoft Azure Cosmos DB
-	DBSystemCosmosDB = DBSystemKey.String("cosmosdb")
-	// Amazon DynamoDB
-	DBSystemDynamoDB = DBSystemKey.String("dynamodb")
-	// Neo4j
-	DBSystemNeo4j = DBSystemKey.String("neo4j")
-	// Apache Geode
-	DBSystemGeode = DBSystemKey.String("geode")
-	// Elasticsearch
-	DBSystemElasticsearch = DBSystemKey.String("elasticsearch")
-	// Memcached
-	DBSystemMemcached = DBSystemKey.String("memcached")
-	// CockroachDB
-	DBSystemCockroachdb = DBSystemKey.String("cockroachdb")
-	// OpenSearch
-	DBSystemOpensearch = DBSystemKey.String("opensearch")
-	// ClickHouse
-	DBSystemClickhouse = DBSystemKey.String("clickhouse")
-	// Cloud Spanner
-	DBSystemSpanner = DBSystemKey.String("spanner")
-	// Trino
-	DBSystemTrino = DBSystemKey.String("trino")
-)
-
-// DBClientConnectionsPoolName returns an attribute KeyValue conforming to
-// the "db.client.connections.pool.name" semantic conventions. It represents
-// the name of the connection pool; unique within the instrumented application.
-// In case the connection pool implementation doesn't provide a name,
-// instrumentation should use a combination of `server.address` and
-// `server.port` attributes formatted as `server.address:server.port`.
-func DBClientConnectionsPoolName(val string) attribute.KeyValue {
-	return DBClientConnectionsPoolNameKey.String(val)
-}
-
-// DBCollectionName returns an attribute KeyValue conforming to the
-// "db.collection.name" semantic conventions. It represents the name of a
-// collection (table, container) within the database.
-func DBCollectionName(val string) attribute.KeyValue {
-	return DBCollectionNameKey.String(val)
-}
-
-// DBNamespace returns an attribute KeyValue conforming to the
-// "db.namespace" semantic conventions. It represents the name of the database,
-// fully qualified within the server address and port.
-func DBNamespace(val string) attribute.KeyValue {
-	return DBNamespaceKey.String(val)
-}
-
-// DBOperationName returns an attribute KeyValue conforming to the
-// "db.operation.name" semantic conventions. It represents the name of the
-// operation or command being executed.
-func DBOperationName(val string) attribute.KeyValue {
-	return DBOperationNameKey.String(val)
-}
-
-// DBQueryText returns an attribute KeyValue conforming to the
-// "db.query.text" semantic conventions. It represents the database query being
-// executed.
-func DBQueryText(val string) attribute.KeyValue {
-	return DBQueryTextKey.String(val)
-}
-
-// This group defines attributes for Cassandra.
-const (
-	// DBCassandraConsistencyLevelKey is the attribute Key conforming to the
-	// "db.cassandra.consistency_level" semantic conventions. It represents the
-	// consistency level of the query. Based on consistency values from
-	// [CQL](https://docs.datastax.com/en/cassandra-oss/3.0/cassandra/dml/dmlConfigConsistency.html).
-	//
-	// Type: Enum
-	// RequirementLevel: Optional
-	// Stability: experimental
-	DBCassandraConsistencyLevelKey = attribute.Key("db.cassandra.consistency_level")
-
-	// DBCassandraCoordinatorDCKey is the attribute Key conforming to the
-	// "db.cassandra.coordinator.dc" semantic conventions. It represents the
-	// data center of the coordinating node for a query.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'us-west-2'
-	DBCassandraCoordinatorDCKey = attribute.Key("db.cassandra.coordinator.dc")
-
-	// DBCassandraCoordinatorIDKey is the attribute Key conforming to the
-	// "db.cassandra.coordinator.id" semantic conventions. It represents the ID
-	// of the coordinating node for a query.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'be13faa2-8574-4d71-926d-27f16cf8a7af'
-	DBCassandraCoordinatorIDKey = attribute.Key("db.cassandra.coordinator.id")
-
-	// DBCassandraIdempotenceKey is the attribute Key conforming to the
-	// "db.cassandra.idempotence" semantic conventions. It represents the
-	// whether or not the query is idempotent.
-	//
-	// Type: boolean
-	// RequirementLevel: Optional
-	// Stability: experimental
-	DBCassandraIdempotenceKey = attribute.Key("db.cassandra.idempotence")
-
-	// DBCassandraPageSizeKey is the attribute Key conforming to the
-	// "db.cassandra.page_size" semantic conventions. It represents the fetch
-	// size used for paging, i.e. how many rows will be returned at once.
-	//
-	// Type: int
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 5000
-	DBCassandraPageSizeKey = attribute.Key("db.cassandra.page_size")
-
-	// DBCassandraSpeculativeExecutionCountKey is the attribute Key conforming
-	// to the "db.cassandra.speculative_execution_count" semantic conventions.
-	// It represents the number of times a query was speculatively executed.
-	// Not set or `0` if the query was not executed speculatively.
-	//
-	// Type: int
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 0, 2
-	DBCassandraSpeculativeExecutionCountKey = attribute.Key("db.cassandra.speculative_execution_count")
-)
-
-var (
-	// all
-	DBCassandraConsistencyLevelAll = DBCassandraConsistencyLevelKey.String("all")
-	// each_quorum
-	DBCassandraConsistencyLevelEachQuorum = DBCassandraConsistencyLevelKey.String("each_quorum")
-	// quorum
-	DBCassandraConsistencyLevelQuorum = DBCassandraConsistencyLevelKey.String("quorum")
-	// local_quorum
-	DBCassandraConsistencyLevelLocalQuorum = DBCassandraConsistencyLevelKey.String("local_quorum")
-	// one
-	DBCassandraConsistencyLevelOne = DBCassandraConsistencyLevelKey.String("one")
-	// two
-	DBCassandraConsistencyLevelTwo = DBCassandraConsistencyLevelKey.String("two")
-	// three
-	DBCassandraConsistencyLevelThree = DBCassandraConsistencyLevelKey.String("three")
-	// local_one
-	DBCassandraConsistencyLevelLocalOne = DBCassandraConsistencyLevelKey.String("local_one")
-	// any
-	DBCassandraConsistencyLevelAny = DBCassandraConsistencyLevelKey.String("any")
-	// serial
-	DBCassandraConsistencyLevelSerial = DBCassandraConsistencyLevelKey.String("serial")
-	// local_serial
-	DBCassandraConsistencyLevelLocalSerial = DBCassandraConsistencyLevelKey.String("local_serial")
-)
-
-// DBCassandraCoordinatorDC returns an attribute KeyValue conforming to the
-// "db.cassandra.coordinator.dc" semantic conventions. It represents the data
-// center of the coordinating node for a query.
-func DBCassandraCoordinatorDC(val string) attribute.KeyValue {
-	return DBCassandraCoordinatorDCKey.String(val)
-}
-
-// DBCassandraCoordinatorID returns an attribute KeyValue conforming to the
-// "db.cassandra.coordinator.id" semantic conventions. It represents the ID of
-// the coordinating node for a query.
-func DBCassandraCoordinatorID(val string) attribute.KeyValue {
-	return DBCassandraCoordinatorIDKey.String(val)
-}
-
-// DBCassandraIdempotence returns an attribute KeyValue conforming to the
-// "db.cassandra.idempotence" semantic conventions. It represents the whether
-// or not the query is idempotent.
-func DBCassandraIdempotence(val bool) attribute.KeyValue {
-	return DBCassandraIdempotenceKey.Bool(val)
-}
-
-// DBCassandraPageSize returns an attribute KeyValue conforming to the
-// "db.cassandra.page_size" semantic conventions. It represents the fetch size
-// used for paging, i.e. how many rows will be returned at once.
-func DBCassandraPageSize(val int) attribute.KeyValue {
-	return DBCassandraPageSizeKey.Int(val)
-}
-
-// DBCassandraSpeculativeExecutionCount returns an attribute KeyValue
-// conforming to the "db.cassandra.speculative_execution_count" semantic
-// conventions. It represents the number of times a query was speculatively
-// executed. Not set or `0` if the query was not executed speculatively.
-func DBCassandraSpeculativeExecutionCount(val int) attribute.KeyValue {
-	return DBCassandraSpeculativeExecutionCountKey.Int(val)
-}
-
-// This group defines attributes for Azure Cosmos DB.
-const (
-	// DBCosmosDBClientIDKey is the attribute Key conforming to the
-	// "db.cosmosdb.client_id" semantic conventions. It represents the unique
-	// Cosmos client instance id.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: '3ba4827d-4422-483f-b59f-85b74211c11d'
-	DBCosmosDBClientIDKey = attribute.Key("db.cosmosdb.client_id")
-
-	// DBCosmosDBConnectionModeKey is the attribute Key conforming to the
-	// "db.cosmosdb.connection_mode" semantic conventions. It represents the
-	// cosmos client connection mode.
-	//
-	// Type: Enum
-	// RequirementLevel: Optional
-	// Stability: experimental
-	DBCosmosDBConnectionModeKey = attribute.Key("db.cosmosdb.connection_mode")
-
-	// DBCosmosDBOperationTypeKey is the attribute Key conforming to the
-	// "db.cosmosdb.operation_type" semantic conventions. It represents the
-	// cosmosDB Operation Type.
-	//
-	// Type: Enum
-	// RequirementLevel: Optional
-	// Stability: experimental
-	DBCosmosDBOperationTypeKey = attribute.Key("db.cosmosdb.operation_type")
-
-	// DBCosmosDBRequestChargeKey is the attribute Key conforming to the
-	// "db.cosmosdb.request_charge" semantic conventions. It represents the rU
-	// consumed for that operation
-	//
-	// Type: double
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 46.18, 1.0
-	DBCosmosDBRequestChargeKey = attribute.Key("db.cosmosdb.request_charge")
-
-	// DBCosmosDBRequestContentLengthKey is the attribute Key conforming to the
-	// "db.cosmosdb.request_content_length" semantic conventions. It represents
-	// the request payload size in bytes
-	//
-	// Type: int
-	// RequirementLevel: Optional
-	// Stability: experimental
-	DBCosmosDBRequestContentLengthKey = attribute.Key("db.cosmosdb.request_content_length")
-
-	// DBCosmosDBStatusCodeKey is the attribute Key conforming to the
-	// "db.cosmosdb.status_code" semantic conventions. It represents the cosmos
-	// DB status code.
-	//
-	// Type: int
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 200, 201
-	DBCosmosDBStatusCodeKey = attribute.Key("db.cosmosdb.status_code")
-
-	// DBCosmosDBSubStatusCodeKey is the attribute Key conforming to the
-	// "db.cosmosdb.sub_status_code" semantic conventions. It represents the
-	// cosmos DB sub status code.
-	//
-	// Type: int
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 1000, 1002
-	DBCosmosDBSubStatusCodeKey = attribute.Key("db.cosmosdb.sub_status_code")
-)
-
-var (
-	// Gateway (HTTP) connections mode
-	DBCosmosDBConnectionModeGateway = DBCosmosDBConnectionModeKey.String("gateway")
-	// Direct connection
-	DBCosmosDBConnectionModeDirect = DBCosmosDBConnectionModeKey.String("direct")
-)
-
-var (
-	// invalid
-	DBCosmosDBOperationTypeInvalid = DBCosmosDBOperationTypeKey.String("Invalid")
-	// create
-	DBCosmosDBOperationTypeCreate = DBCosmosDBOperationTypeKey.String("Create")
-	// patch
-	DBCosmosDBOperationTypePatch = DBCosmosDBOperationTypeKey.String("Patch")
-	// read
-	DBCosmosDBOperationTypeRead = DBCosmosDBOperationTypeKey.String("Read")
-	// read_feed
-	DBCosmosDBOperationTypeReadFeed = DBCosmosDBOperationTypeKey.String("ReadFeed")
-	// delete
-	DBCosmosDBOperationTypeDelete = DBCosmosDBOperationTypeKey.String("Delete")
-	// replace
-	DBCosmosDBOperationTypeReplace = DBCosmosDBOperationTypeKey.String("Replace")
-	// execute
-	DBCosmosDBOperationTypeExecute = DBCosmosDBOperationTypeKey.String("Execute")
-	// query
-	DBCosmosDBOperationTypeQuery = DBCosmosDBOperationTypeKey.String("Query")
-	// head
-	DBCosmosDBOperationTypeHead = DBCosmosDBOperationTypeKey.String("Head")
-	// head_feed
-	DBCosmosDBOperationTypeHeadFeed = DBCosmosDBOperationTypeKey.String("HeadFeed")
-	// upsert
-	DBCosmosDBOperationTypeUpsert = DBCosmosDBOperationTypeKey.String("Upsert")
-	// batch
-	DBCosmosDBOperationTypeBatch = DBCosmosDBOperationTypeKey.String("Batch")
-	// query_plan
-	DBCosmosDBOperationTypeQueryPlan = DBCosmosDBOperationTypeKey.String("QueryPlan")
-	// execute_javascript
-	DBCosmosDBOperationTypeExecuteJavascript = DBCosmosDBOperationTypeKey.String("ExecuteJavaScript")
-)
-
-// DBCosmosDBClientID returns an attribute KeyValue conforming to the
-// "db.cosmosdb.client_id" semantic conventions. It represents the unique
-// Cosmos client instance id.
-func DBCosmosDBClientID(val string) attribute.KeyValue {
-	return DBCosmosDBClientIDKey.String(val)
-}
-
-// DBCosmosDBRequestCharge returns an attribute KeyValue conforming to the
-// "db.cosmosdb.request_charge" semantic conventions. It represents the rU
-// consumed for that operation
-func DBCosmosDBRequestCharge(val float64) attribute.KeyValue {
-	return DBCosmosDBRequestChargeKey.Float64(val)
-}
-
-// DBCosmosDBRequestContentLength returns an attribute KeyValue conforming
-// to the "db.cosmosdb.request_content_length" semantic conventions. It
-// represents the request payload size in bytes
-func DBCosmosDBRequestContentLength(val int) attribute.KeyValue {
-	return DBCosmosDBRequestContentLengthKey.Int(val)
-}
-
-// DBCosmosDBStatusCode returns an attribute KeyValue conforming to the
-// "db.cosmosdb.status_code" semantic conventions. It represents the cosmos DB
-// status code.
-func DBCosmosDBStatusCode(val int) attribute.KeyValue {
-	return DBCosmosDBStatusCodeKey.Int(val)
-}
-
-// DBCosmosDBSubStatusCode returns an attribute KeyValue conforming to the
-// "db.cosmosdb.sub_status_code" semantic conventions. It represents the cosmos
-// DB sub status code.
-func DBCosmosDBSubStatusCode(val int) attribute.KeyValue {
-	return DBCosmosDBSubStatusCodeKey.Int(val)
-}
-
-// This group defines attributes for Elasticsearch.
-const (
-	// DBElasticsearchClusterNameKey is the attribute Key conforming to the
-	// "db.elasticsearch.cluster.name" semantic conventions. It represents the
-	// represents the identifier of an Elasticsearch cluster.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'e9106fc68e3044f0b1475b04bf4ffd5f'
-	DBElasticsearchClusterNameKey = attribute.Key("db.elasticsearch.cluster.name")
-
-	// DBElasticsearchNodeNameKey is the attribute Key conforming to the
-	// "db.elasticsearch.node.name" semantic conventions. It represents the
-	// represents the human-readable identifier of the node/instance to which a
-	// request was routed.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'instance-0000000001'
-	DBElasticsearchNodeNameKey = attribute.Key("db.elasticsearch.node.name")
-)
-
-// DBElasticsearchClusterName returns an attribute KeyValue conforming to
-// the "db.elasticsearch.cluster.name" semantic conventions. It represents the
-// represents the identifier of an Elasticsearch cluster.
-func DBElasticsearchClusterName(val string) attribute.KeyValue {
-	return DBElasticsearchClusterNameKey.String(val)
-}
-
-// DBElasticsearchNodeName returns an attribute KeyValue conforming to the
-// "db.elasticsearch.node.name" semantic conventions. It represents the
-// represents the human-readable identifier of the node/instance to which a
-// request was routed.
-func DBElasticsearchNodeName(val string) attribute.KeyValue {
-	return DBElasticsearchNodeNameKey.String(val)
-}
-
-// Attributes for software deployments.
-const (
-	// DeploymentEnvironmentKey is the attribute Key conforming to the
-	// "deployment.environment" semantic conventions. It represents the name of
-	// the [deployment
-	// environment](https://wikipedia.org/wiki/Deployment_environment) (aka
-	// deployment tier).
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'staging', 'production'
-	// Note: `deployment.environment` does not affect the uniqueness
-	// constraints defined through
-	// the `service.namespace`, `service.name` and `service.instance.id`
-	// resource attributes.
-	// This implies that resources carrying the following attribute
-	// combinations MUST be
-	// considered to be identifying the same service:
-	//
-	// * `service.name=frontend`, `deployment.environment=production`
-	// * `service.name=frontend`, `deployment.environment=staging`.
-	DeploymentEnvironmentKey = attribute.Key("deployment.environment")
-)
-
-// DeploymentEnvironment returns an attribute KeyValue conforming to the
-// "deployment.environment" semantic conventions. It represents the name of the
-// [deployment environment](https://wikipedia.org/wiki/Deployment_environment)
-// (aka deployment tier).
-func DeploymentEnvironment(val string) attribute.KeyValue {
-	return DeploymentEnvironmentKey.String(val)
-}
-
-// Attributes that represents an occurrence of a lifecycle transition on the
-// Android platform.
-const (
-	// AndroidStateKey is the attribute Key conforming to the "android.state"
-	// semantic conventions. It represents the deprecated use the
-	// `device.app.lifecycle` event definition including `android.state` as a
-	// payload field instead.
-	//
-	// Type: Enum
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Note: The Android lifecycle states are defined in [Activity lifecycle
-	// callbacks](https://developer.android.com/guide/components/activities/activity-lifecycle#lc),
-	// and from which the `OS identifiers` are derived.
-	AndroidStateKey = attribute.Key("android.state")
-)
-
-var (
-	// Any time before Activity.onResume() or, if the app has no Activity, Context.startService() has been called in the app for the first time
-	AndroidStateCreated = AndroidStateKey.String("created")
-	// Any time after Activity.onPause() or, if the app has no Activity, Context.stopService() has been called when the app was in the foreground state
-	AndroidStateBackground = AndroidStateKey.String("background")
-	// Any time after Activity.onResume() or, if the app has no Activity, Context.startService() has been called when the app was in either the created or background states
-	AndroidStateForeground = AndroidStateKey.String("foreground")
-)
-
-// These attributes may be used to describe the receiver of a network
-// exchange/packet. These should be used when there is no client/server
-// relationship between the two sides, or when that relationship is unknown.
-// This covers low-level network interactions (e.g. packet tracing) where you
-// don't know if there was a connection or which side initiated it. This also
-// covers unidirectional UDP flows and peer-to-peer communication where the
-// "user-facing" surface of the protocol / API doesn't expose a clear notion of
-// client and server.
-const (
-	// DestinationAddressKey is the attribute Key conforming to the
-	// "destination.address" semantic conventions. It represents the
-	// destination address - domain name if available without reverse DNS
-	// lookup; otherwise, IP address or Unix domain socket name.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'destination.example.com', '10.1.2.80', '/tmp/my.sock'
-	// Note: When observed from the source side, and when communicating through
-	// an intermediary, `destination.address` SHOULD represent the destination
-	// address behind any intermediaries, for example proxies, if it's
-	// available.
-	DestinationAddressKey = attribute.Key("destination.address")
-
-	// DestinationPortKey is the attribute Key conforming to the
-	// "destination.port" semantic conventions. It represents the destination
-	// port number
-	//
-	// Type: int
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 3389, 2888
-	DestinationPortKey = attribute.Key("destination.port")
-)
-
-// DestinationAddress returns an attribute KeyValue conforming to the
-// "destination.address" semantic conventions. It represents the destination
-// address - domain name if available without reverse DNS lookup; otherwise, IP
-// address or Unix domain socket name.
-func DestinationAddress(val string) attribute.KeyValue {
-	return DestinationAddressKey.String(val)
-}
-
-// DestinationPort returns an attribute KeyValue conforming to the
-// "destination.port" semantic conventions. It represents the destination port
-// number
-func DestinationPort(val int) attribute.KeyValue {
-	return DestinationPortKey.Int(val)
-}
-
-// Describes device attributes.
-const (
-	// DeviceIDKey is the attribute Key conforming to the "device.id" semantic
-	// conventions. It represents a unique identifier representing the device
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: '2ab2916d-a51f-4ac8-80ee-45ac31a28092'
-	// Note: The device identifier MUST only be defined using the values
-	// outlined below. This value is not an advertising identifier and MUST NOT
-	// be used as such. On iOS (Swift or Objective-C), this value MUST be equal
-	// to the [vendor
-	// identifier](https://developer.apple.com/documentation/uikit/uidevice/1620059-identifierforvendor).
-	// On Android (Java or Kotlin), this value MUST be equal to the Firebase
-	// Installation ID or a globally unique UUID which is persisted across
-	// sessions in your application. More information can be found
-	// [here](https://developer.android.com/training/articles/user-data-ids) on
-	// best practices and exact implementation details. Caution should be taken
-	// when storing personal data or anything which can identify a user. GDPR
-	// and data protection laws may apply, ensure you do your own due
-	// diligence.
-	DeviceIDKey = attribute.Key("device.id")
-
-	// DeviceManufacturerKey is the attribute Key conforming to the
-	// "device.manufacturer" semantic conventions. It represents the name of
-	// the device manufacturer
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'Apple', 'Samsung'
-	// Note: The Android OS provides this field via
-	// [Build](https://developer.android.com/reference/android/os/Build#MANUFACTURER).
-	// iOS apps SHOULD hardcode the value `Apple`.
-	DeviceManufacturerKey = attribute.Key("device.manufacturer")
-
-	// DeviceModelIdentifierKey is the attribute Key conforming to the
-	// "device.model.identifier" semantic conventions. It represents the model
-	// identifier for the device
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'iPhone3,4', 'SM-G920F'
-	// Note: It's recommended this value represents a machine-readable version
-	// of the model identifier rather than the market or consumer-friendly name
-	// of the device.
-	DeviceModelIdentifierKey = attribute.Key("device.model.identifier")
-
-	// DeviceModelNameKey is the attribute Key conforming to the
-	// "device.model.name" semantic conventions. It represents the marketing
-	// name for the device model
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'iPhone 6s Plus', 'Samsung Galaxy S6'
-	// Note: It's recommended this value represents a human-readable version of
-	// the device model rather than a machine-readable alternative.
-	DeviceModelNameKey = attribute.Key("device.model.name")
-)
-
-// DeviceID returns an attribute KeyValue conforming to the "device.id"
-// semantic conventions. It represents a unique identifier representing the
-// device
-func DeviceID(val string) attribute.KeyValue {
-	return DeviceIDKey.String(val)
-}
-
-// DeviceManufacturer returns an attribute KeyValue conforming to the
-// "device.manufacturer" semantic conventions. It represents the name of the
-// device manufacturer
-func DeviceManufacturer(val string) attribute.KeyValue {
-	return DeviceManufacturerKey.String(val)
-}
-
-// DeviceModelIdentifier returns an attribute KeyValue conforming to the
-// "device.model.identifier" semantic conventions. It represents the model
-// identifier for the device
-func DeviceModelIdentifier(val string) attribute.KeyValue {
-	return DeviceModelIdentifierKey.String(val)
-}
-
-// DeviceModelName returns an attribute KeyValue conforming to the
-// "device.model.name" semantic conventions. It represents the marketing name
-// for the device model
-func DeviceModelName(val string) attribute.KeyValue {
-	return DeviceModelNameKey.String(val)
-}
-
-// These attributes may be used for any disk related operation.
-const (
-	// DiskIoDirectionKey is the attribute Key conforming to the
-	// "disk.io.direction" semantic conventions. It represents the disk IO
-	// operation direction.
-	//
-	// Type: Enum
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'read'
-	DiskIoDirectionKey = attribute.Key("disk.io.direction")
-)
-
-var (
-	// read
-	DiskIoDirectionRead = DiskIoDirectionKey.String("read")
-	// write
-	DiskIoDirectionWrite = DiskIoDirectionKey.String("write")
-)
-
-// The shared attributes used to report a DNS query.
-const (
-	// DNSQuestionNameKey is the attribute Key conforming to the
-	// "dns.question.name" semantic conventions. It represents the name being
-	// queried.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'www.example.com', 'opentelemetry.io'
-	// Note: If the name field contains non-printable characters (below 32 or
-	// above 126), those characters should be represented as escaped base 10
-	// integers (\DDD). Back slashes and quotes should be escaped. Tabs,
-	// carriage returns, and line feeds should be converted to \t, \r, and \n
-	// respectively.
-	DNSQuestionNameKey = attribute.Key("dns.question.name")
-)
-
-// DNSQuestionName returns an attribute KeyValue conforming to the
-// "dns.question.name" semantic conventions. It represents the name being
-// queried.
-func DNSQuestionName(val string) attribute.KeyValue {
-	return DNSQuestionNameKey.String(val)
-}
-
-// Attributes for operations with an authenticated and/or authorized enduser.
-const (
-	// EnduserIDKey is the attribute Key conforming to the "enduser.id"
-	// semantic conventions. It represents the username or client_id extracted
-	// from the access token or
-	// [Authorization](https://tools.ietf.org/html/rfc7235#section-4.2) header
-	// in the inbound request from outside the system.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'username'
-	EnduserIDKey = attribute.Key("enduser.id")
-
-	// EnduserRoleKey is the attribute Key conforming to the "enduser.role"
-	// semantic conventions. It represents the actual/assumed role the client
-	// is making the request under extracted from token or application security
-	// context.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'admin'
-	EnduserRoleKey = attribute.Key("enduser.role")
-
-	// EnduserScopeKey is the attribute Key conforming to the "enduser.scope"
-	// semantic conventions. It represents the scopes or granted authorities
-	// the client currently possesses extracted from token or application
-	// security context. The value would come from the scope associated with an
-	// [OAuth 2.0 Access
-	// Token](https://tools.ietf.org/html/rfc6749#section-3.3) or an attribute
-	// value in a [SAML 2.0
-	// Assertion](http://docs.oasis-open.org/security/saml/Post2.0/sstc-saml-tech-overview-2.0.html).
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'read:message, write:files'
-	EnduserScopeKey = attribute.Key("enduser.scope")
-)
-
-// EnduserID returns an attribute KeyValue conforming to the "enduser.id"
-// semantic conventions. It represents the username or client_id extracted from
-// the access token or
-// [Authorization](https://tools.ietf.org/html/rfc7235#section-4.2) header in
-// the inbound request from outside the system.
-func EnduserID(val string) attribute.KeyValue {
-	return EnduserIDKey.String(val)
-}
-
-// EnduserRole returns an attribute KeyValue conforming to the
-// "enduser.role" semantic conventions. It represents the actual/assumed role
-// the client is making the request under extracted from token or application
-// security context.
-func EnduserRole(val string) attribute.KeyValue {
-	return EnduserRoleKey.String(val)
-}
-
-// EnduserScope returns an attribute KeyValue conforming to the
-// "enduser.scope" semantic conventions. It represents the scopes or granted
-// authorities the client currently possesses extracted from token or
-// application security context. The value would come from the scope associated
-// with an [OAuth 2.0 Access
-// Token](https://tools.ietf.org/html/rfc6749#section-3.3) or an attribute
-// value in a [SAML 2.0
-// Assertion](http://docs.oasis-open.org/security/saml/Post2.0/sstc-saml-tech-overview-2.0.html).
-func EnduserScope(val string) attribute.KeyValue {
-	return EnduserScopeKey.String(val)
-}
-
-// The shared attributes used to report an error.
-const (
-	// ErrorTypeKey is the attribute Key conforming to the "error.type"
-	// semantic conventions. It represents the describes a class of error the
-	// operation ended with.
-	//
-	// Type: Enum
-	// RequirementLevel: Optional
-	// Stability: stable
-	// Examples: 'timeout', 'java.net.UnknownHostException',
-	// 'server_certificate_invalid', '500'
-	// Note: The `error.type` SHOULD be predictable, and SHOULD have low
-	// cardinality.
-	//
-	// When `error.type` is set to a type (e.g., an exception type), its
-	// canonical class name identifying the type within the artifact SHOULD be
-	// used.
-	//
-	// Instrumentations SHOULD document the list of errors they report.
-	//
-	// The cardinality of `error.type` within one instrumentation library
-	// SHOULD be low.
-	// Telemetry consumers that aggregate data from multiple instrumentation
-	// libraries and applications
-	// should be prepared for `error.type` to have high cardinality at query
-	// time when no
-	// additional filters are applied.
-	//
-	// If the operation has completed successfully, instrumentations SHOULD NOT
-	// set `error.type`.
-	//
-	// If a specific domain defines its own set of error identifiers (such as
-	// HTTP or gRPC status codes),
-	// it's RECOMMENDED to:
-	//
-	// * Use a domain-specific attribute
-	// * Set `error.type` to capture all errors, regardless of whether they are
-	// defined within the domain-specific set or not.
-	ErrorTypeKey = attribute.Key("error.type")
-)
-
-var (
-	// A fallback error value to be used when the instrumentation doesn't define a custom value
-	ErrorTypeOther = ErrorTypeKey.String("_OTHER")
-)
-
-// Attributes for Events represented using Log Records.
-const (
-	// EventNameKey is the attribute Key conforming to the "event.name"
-	// semantic conventions. It represents the identifies the class / type of
-	// event.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'browser.mouse.click', 'device.app.lifecycle'
-	// Note: Event names are subject to the same rules as [attribute
-	// names](https://github.com/open-telemetry/opentelemetry-specification/tree/v1.33.0/specification/common/attribute-naming.md).
-	// Notably, event names are namespaced to avoid collisions and provide a
-	// clean separation of semantics for events in separate domains like
-	// browser, mobile, and kubernetes.
-	EventNameKey = attribute.Key("event.name")
-)
-
-// EventName returns an attribute KeyValue conforming to the "event.name"
-// semantic conventions. It represents the identifies the class / type of
-// event.
-func EventName(val string) attribute.KeyValue {
-	return EventNameKey.String(val)
-}
-
-// The shared attributes used to report a single exception associated with a
-// span or log.
-const (
-	// ExceptionEscapedKey is the attribute Key conforming to the
-	// "exception.escaped" semantic conventions. It represents the sHOULD be
-	// set to true if the exception event is recorded at a point where it is
-	// known that the exception is escaping the scope of the span.
-	//
-	// Type: boolean
-	// RequirementLevel: Optional
-	// Stability: stable
-	// Note: An exception is considered to have escaped (or left) the scope of
-	// a span,
-	// if that span is ended while the exception is still logically "in
-	// flight".
-	// This may be actually "in flight" in some languages (e.g. if the
-	// exception
-	// is passed to a Context manager's `__exit__` method in Python) but will
-	// usually be caught at the point of recording the exception in most
-	// languages.
-	//
-	// It is usually not possible to determine at the point where an exception
-	// is thrown
-	// whether it will escape the scope of a span.
-	// However, it is trivial to know that an exception
-	// will escape, if one checks for an active exception just before ending
-	// the span,
-	// as done in the [example for recording span
-	// exceptions](https://opentelemetry.io/docs/specs/semconv/exceptions/exceptions-spans/#recording-an-exception).
-	//
-	// It follows that an exception may still escape the scope of the span
-	// even if the `exception.escaped` attribute was not set or set to false,
-	// since the event might have been recorded at a time where it was not
-	// clear whether the exception will escape.
-	ExceptionEscapedKey = attribute.Key("exception.escaped")
-
-	// ExceptionMessageKey is the attribute Key conforming to the
-	// "exception.message" semantic conventions. It represents the exception
-	// message.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: stable
-	// Examples: 'Division by zero', "Can't convert 'int' object to str
-	// implicitly"
-	ExceptionMessageKey = attribute.Key("exception.message")
-
-	// ExceptionStacktraceKey is the attribute Key conforming to the
-	// "exception.stacktrace" semantic conventions. It represents a stacktrace
-	// as a string in the natural representation for the language runtime. The
-	// representation is to be determined and documented by each language SIG.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: stable
-	// Examples: 'Exception in thread "main" java.lang.RuntimeException: Test
-	// exception\\n at '
-	//  'com.example.GenerateTrace.methodB(GenerateTrace.java:13)\\n at '
-	//  'com.example.GenerateTrace.methodA(GenerateTrace.java:9)\\n at '
-	//  'com.example.GenerateTrace.main(GenerateTrace.java:5)'
-	ExceptionStacktraceKey = attribute.Key("exception.stacktrace")
-
-	// ExceptionTypeKey is the attribute Key conforming to the "exception.type"
-	// semantic conventions. It represents the type of the exception (its
-	// fully-qualified class name, if applicable). The dynamic type of the
-	// exception should be preferred over the static type in languages that
-	// support it.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: stable
-	// Examples: 'java.net.ConnectException', 'OSError'
-	ExceptionTypeKey = attribute.Key("exception.type")
-)
-
-// ExceptionEscaped returns an attribute KeyValue conforming to the
-// "exception.escaped" semantic conventions. It represents the sHOULD be set to
-// true if the exception event is recorded at a point where it is known that
-// the exception is escaping the scope of the span.
-func ExceptionEscaped(val bool) attribute.KeyValue {
-	return ExceptionEscapedKey.Bool(val)
-}
-
-// ExceptionMessage returns an attribute KeyValue conforming to the
-// "exception.message" semantic conventions. It represents the exception
-// message.
-func ExceptionMessage(val string) attribute.KeyValue {
-	return ExceptionMessageKey.String(val)
-}
-
-// ExceptionStacktrace returns an attribute KeyValue conforming to the
-// "exception.stacktrace" semantic conventions. It represents a stacktrace as a
-// string in the natural representation for the language runtime. The
-// representation is to be determined and documented by each language SIG.
-func ExceptionStacktrace(val string) attribute.KeyValue {
-	return ExceptionStacktraceKey.String(val)
-}
-
-// ExceptionType returns an attribute KeyValue conforming to the
-// "exception.type" semantic conventions. It represents the type of the
-// exception (its fully-qualified class name, if applicable). The dynamic type
-// of the exception should be preferred over the static type in languages that
-// support it.
-func ExceptionType(val string) attribute.KeyValue {
-	return ExceptionTypeKey.String(val)
-}
-
-// FaaS attributes
-const (
-	// FaaSColdstartKey is the attribute Key conforming to the "faas.coldstart"
-	// semantic conventions. It represents a boolean that is true if the
-	// serverless function is executed for the first time (aka cold-start).
-	//
-	// Type: boolean
-	// RequirementLevel: Optional
-	// Stability: experimental
-	FaaSColdstartKey = attribute.Key("faas.coldstart")
-
-	// FaaSCronKey is the attribute Key conforming to the "faas.cron" semantic
-	// conventions. It represents a string containing the schedule period as
-	// [Cron
-	// Expression](https://docs.oracle.com/cd/E12058_01/doc/doc.1014/e12030/cron_expressions.htm).
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: '0/5 * * * ? *'
-	FaaSCronKey = attribute.Key("faas.cron")
-
-	// FaaSDocumentCollectionKey is the attribute Key conforming to the
-	// "faas.document.collection" semantic conventions. It represents the name
-	// of the source on which the triggering operation was performed. For
-	// example, in Cloud Storage or S3 corresponds to the bucket name, and in
-	// Cosmos DB to the database name.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'myBucketName', 'myDBName'
-	FaaSDocumentCollectionKey = attribute.Key("faas.document.collection")
-
-	// FaaSDocumentNameKey is the attribute Key conforming to the
-	// "faas.document.name" semantic conventions. It represents the document
-	// name/table subjected to the operation. For example, in Cloud Storage or
-	// S3 is the name of the file, and in Cosmos DB the table name.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'myFile.txt', 'myTableName'
-	FaaSDocumentNameKey = attribute.Key("faas.document.name")
-
-	// FaaSDocumentOperationKey is the attribute Key conforming to the
-	// "faas.document.operation" semantic conventions. It represents the
-	// describes the type of the operation that was performed on the data.
-	//
-	// Type: Enum
-	// RequirementLevel: Optional
-	// Stability: experimental
-	FaaSDocumentOperationKey = attribute.Key("faas.document.operation")
-
-	// FaaSDocumentTimeKey is the attribute Key conforming to the
-	// "faas.document.time" semantic conventions. It represents a string
-	// containing the time when the data was accessed in the [ISO
-	// 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format
-	// expressed in [UTC](https://www.w3.org/TR/NOTE-datetime).
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: '2020-01-23T13:47:06Z'
-	FaaSDocumentTimeKey = attribute.Key("faas.document.time")
-
-	// FaaSInstanceKey is the attribute Key conforming to the "faas.instance"
-	// semantic conventions. It represents the execution environment ID as a
-	// string, that will be potentially reused for other invocations to the
-	// same function/function version.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: '2021/06/28/[$LATEST]2f399eb14537447da05ab2a2e39309de'
-	// Note: * **AWS Lambda:** Use the (full) log stream name.
-	FaaSInstanceKey = attribute.Key("faas.instance")
-
-	// FaaSInvocationIDKey is the attribute Key conforming to the
-	// "faas.invocation_id" semantic conventions. It represents the invocation
-	// ID of the current function invocation.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'af9d5aa4-a685-4c5f-a22b-444f80b3cc28'
-	FaaSInvocationIDKey = attribute.Key("faas.invocation_id")
-
-	// FaaSInvokedNameKey is the attribute Key conforming to the
-	// "faas.invoked_name" semantic conventions. It represents the name of the
-	// invoked function.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'my-function'
-	// Note: SHOULD be equal to the `faas.name` resource attribute of the
-	// invoked function.
-	FaaSInvokedNameKey = attribute.Key("faas.invoked_name")
-
-	// FaaSInvokedProviderKey is the attribute Key conforming to the
-	// "faas.invoked_provider" semantic conventions. It represents the cloud
-	// provider of the invoked function.
-	//
-	// Type: Enum
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Note: SHOULD be equal to the `cloud.provider` resource attribute of the
-	// invoked function.
-	FaaSInvokedProviderKey = attribute.Key("faas.invoked_provider")
-
-	// FaaSInvokedRegionKey is the attribute Key conforming to the
-	// "faas.invoked_region" semantic conventions. It represents the cloud
-	// region of the invoked function.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'eu-central-1'
-	// Note: SHOULD be equal to the `cloud.region` resource attribute of the
-	// invoked function.
-	FaaSInvokedRegionKey = attribute.Key("faas.invoked_region")
-
-	// FaaSMaxMemoryKey is the attribute Key conforming to the
-	// "faas.max_memory" semantic conventions. It represents the amount of
-	// memory available to the serverless function converted to Bytes.
-	//
-	// Type: int
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 134217728
-	// Note: It's recommended to set this attribute since e.g. too little
-	// memory can easily stop a Java AWS Lambda function from working
-	// correctly. On AWS Lambda, the environment variable
-	// `AWS_LAMBDA_FUNCTION_MEMORY_SIZE` provides this information (which must
-	// be multiplied by 1,048,576).
-	FaaSMaxMemoryKey = attribute.Key("faas.max_memory")
-
-	// FaaSNameKey is the attribute Key conforming to the "faas.name" semantic
-	// conventions. It represents the name of the single function that this
-	// runtime instance executes.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'my-function', 'myazurefunctionapp/some-function-name'
-	// Note: This is the name of the function as configured/deployed on the
-	// FaaS
-	// platform and is usually different from the name of the callback
-	// function (which may be stored in the
-	// [`code.namespace`/`code.function`](/docs/general/attributes.md#source-code-attributes)
-	// span attributes).
-	//
-	// For some cloud providers, the above definition is ambiguous. The
-	// following
-	// definition of function name MUST be used for this attribute
-	// (and consequently the span name) for the listed cloud
-	// providers/products:
-	//
-	// * **Azure:**  The full name `<FUNCAPP>/<FUNC>`, i.e., function app name
-	//   followed by a forward slash followed by the function name (this form
-	//   can also be seen in the resource JSON for the function).
-	//   This means that a span attribute MUST be used, as an Azure function
-	//   app can host multiple functions that would usually share
-	//   a TracerProvider (see also the `cloud.resource_id` attribute).
-	FaaSNameKey = attribute.Key("faas.name")
-
-	// FaaSTimeKey is the attribute Key conforming to the "faas.time" semantic
-	// conventions. It represents a string containing the function invocation
-	// time in the [ISO
-	// 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format
-	// expressed in [UTC](https://www.w3.org/TR/NOTE-datetime).
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: '2020-01-23T13:47:06Z'
-	FaaSTimeKey = attribute.Key("faas.time")
-
-	// FaaSTriggerKey is the attribute Key conforming to the "faas.trigger"
-	// semantic conventions. It represents the type of the trigger which caused
-	// this function invocation.
-	//
-	// Type: Enum
-	// RequirementLevel: Optional
-	// Stability: experimental
-	FaaSTriggerKey = attribute.Key("faas.trigger")
-
-	// FaaSVersionKey is the attribute Key conforming to the "faas.version"
-	// semantic conventions. It represents the immutable version of the
-	// function being executed.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: '26', 'pinkfroid-00002'
-	// Note: Depending on the cloud provider and platform, use:
-	//
-	// * **AWS Lambda:** The [function
-	// version](https://docs.aws.amazon.com/lambda/latest/dg/configuration-versions.html)
-	//   (an integer represented as a decimal string).
-	// * **Google Cloud Run (Services):** The
-	// [revision](https://cloud.google.com/run/docs/managing/revisions)
-	//   (i.e., the function name plus the revision suffix).
-	// * **Google Cloud Functions:** The value of the
-	//   [`K_REVISION` environment
-	// variable](https://cloud.google.com/functions/docs/env-var#runtime_environment_variables_set_automatically).
-	// * **Azure Functions:** Not applicable. Do not set this attribute.
-	FaaSVersionKey = attribute.Key("faas.version")
-)
-
-var (
-	// When a new object is created
-	FaaSDocumentOperationInsert = FaaSDocumentOperationKey.String("insert")
-	// When an object is modified
-	FaaSDocumentOperationEdit = FaaSDocumentOperationKey.String("edit")
-	// When an object is deleted
-	FaaSDocumentOperationDelete = FaaSDocumentOperationKey.String("delete")
-)
-
-var (
-	// Alibaba Cloud
-	FaaSInvokedProviderAlibabaCloud = FaaSInvokedProviderKey.String("alibaba_cloud")
-	// Amazon Web Services
-	FaaSInvokedProviderAWS = FaaSInvokedProviderKey.String("aws")
-	// Microsoft Azure
-	FaaSInvokedProviderAzure = FaaSInvokedProviderKey.String("azure")
-	// Google Cloud Platform
-	FaaSInvokedProviderGCP = FaaSInvokedProviderKey.String("gcp")
-	// Tencent Cloud
-	FaaSInvokedProviderTencentCloud = FaaSInvokedProviderKey.String("tencent_cloud")
-)
-
-var (
-	// A response to some data source operation such as a database or filesystem read/write
-	FaaSTriggerDatasource = FaaSTriggerKey.String("datasource")
-	// To provide an answer to an inbound HTTP request
-	FaaSTriggerHTTP = FaaSTriggerKey.String("http")
-	// A function is set to be executed when messages are sent to a messaging system
-	FaaSTriggerPubsub = FaaSTriggerKey.String("pubsub")
-	// A function is scheduled to be executed regularly
-	FaaSTriggerTimer = FaaSTriggerKey.String("timer")
-	// If none of the others apply
-	FaaSTriggerOther = FaaSTriggerKey.String("other")
-)
-
-// FaaSColdstart returns an attribute KeyValue conforming to the
-// "faas.coldstart" semantic conventions. It represents a boolean that is true
-// if the serverless function is executed for the first time (aka cold-start).
-func FaaSColdstart(val bool) attribute.KeyValue {
-	return FaaSColdstartKey.Bool(val)
-}
-
-// FaaSCron returns an attribute KeyValue conforming to the "faas.cron"
-// semantic conventions. It represents a string containing the schedule period
-// as [Cron
-// Expression](https://docs.oracle.com/cd/E12058_01/doc/doc.1014/e12030/cron_expressions.htm).
-func FaaSCron(val string) attribute.KeyValue {
-	return FaaSCronKey.String(val)
-}
-
-// FaaSDocumentCollection returns an attribute KeyValue conforming to the
-// "faas.document.collection" semantic conventions. It represents the name of
-// the source on which the triggering operation was performed. For example, in
-// Cloud Storage or S3 corresponds to the bucket name, and in Cosmos DB to the
-// database name.
-func FaaSDocumentCollection(val string) attribute.KeyValue {
-	return FaaSDocumentCollectionKey.String(val)
-}
-
-// FaaSDocumentName returns an attribute KeyValue conforming to the
-// "faas.document.name" semantic conventions. It represents the document
-// name/table subjected to the operation. For example, in Cloud Storage or S3
-// is the name of the file, and in Cosmos DB the table name.
-func FaaSDocumentName(val string) attribute.KeyValue {
-	return FaaSDocumentNameKey.String(val)
-}
-
-// FaaSDocumentTime returns an attribute KeyValue conforming to the
-// "faas.document.time" semantic conventions. It represents a string containing
-// the time when the data was accessed in the [ISO
-// 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format
-// expressed in [UTC](https://www.w3.org/TR/NOTE-datetime).
-func FaaSDocumentTime(val string) attribute.KeyValue {
-	return FaaSDocumentTimeKey.String(val)
-}
-
-// FaaSInstance returns an attribute KeyValue conforming to the
-// "faas.instance" semantic conventions. It represents the execution
-// environment ID as a string, that will be potentially reused for other
-// invocations to the same function/function version.
-func FaaSInstance(val string) attribute.KeyValue {
-	return FaaSInstanceKey.String(val)
-}
-
-// FaaSInvocationID returns an attribute KeyValue conforming to the
-// "faas.invocation_id" semantic conventions. It represents the invocation ID
-// of the current function invocation.
-func FaaSInvocationID(val string) attribute.KeyValue {
-	return FaaSInvocationIDKey.String(val)
-}
-
-// FaaSInvokedName returns an attribute KeyValue conforming to the
-// "faas.invoked_name" semantic conventions. It represents the name of the
-// invoked function.
-func FaaSInvokedName(val string) attribute.KeyValue {
-	return FaaSInvokedNameKey.String(val)
-}
-
-// FaaSInvokedRegion returns an attribute KeyValue conforming to the
-// "faas.invoked_region" semantic conventions. It represents the cloud region
-// of the invoked function.
-func FaaSInvokedRegion(val string) attribute.KeyValue {
-	return FaaSInvokedRegionKey.String(val)
-}
-
-// FaaSMaxMemory returns an attribute KeyValue conforming to the
-// "faas.max_memory" semantic conventions. It represents the amount of memory
-// available to the serverless function converted to Bytes.
-func FaaSMaxMemory(val int) attribute.KeyValue {
-	return FaaSMaxMemoryKey.Int(val)
-}
-
-// FaaSName returns an attribute KeyValue conforming to the "faas.name"
-// semantic conventions. It represents the name of the single function that
-// this runtime instance executes.
-func FaaSName(val string) attribute.KeyValue {
-	return FaaSNameKey.String(val)
-}
-
-// FaaSTime returns an attribute KeyValue conforming to the "faas.time"
-// semantic conventions. It represents a string containing the function
-// invocation time in the [ISO
-// 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format
-// expressed in [UTC](https://www.w3.org/TR/NOTE-datetime).
-func FaaSTime(val string) attribute.KeyValue {
-	return FaaSTimeKey.String(val)
-}
-
-// FaaSVersion returns an attribute KeyValue conforming to the
-// "faas.version" semantic conventions. It represents the immutable version of
-// the function being executed.
-func FaaSVersion(val string) attribute.KeyValue {
-	return FaaSVersionKey.String(val)
-}
-
-// Attributes for Feature Flags.
-const (
-	// FeatureFlagKeyKey is the attribute Key conforming to the
-	// "feature_flag.key" semantic conventions. It represents the unique
-	// identifier of the feature flag.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'logo-color'
-	FeatureFlagKeyKey = attribute.Key("feature_flag.key")
-
-	// FeatureFlagProviderNameKey is the attribute Key conforming to the
-	// "feature_flag.provider_name" semantic conventions. It represents the
-	// name of the service provider that performs the flag evaluation.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'Flag Manager'
-	FeatureFlagProviderNameKey = attribute.Key("feature_flag.provider_name")
-
-	// FeatureFlagVariantKey is the attribute Key conforming to the
-	// "feature_flag.variant" semantic conventions. It represents the sHOULD be
-	// a semantic identifier for a value. If one is unavailable, a stringified
-	// version of the value can be used.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'red', 'true', 'on'
-	// Note: A semantic identifier, commonly referred to as a variant, provides
-	// a means
-	// for referring to a value without including the value itself. This can
-	// provide additional context for understanding the meaning behind a value.
-	// For example, the variant `red` maybe be used for the value `#c05543`.
-	//
-	// A stringified version of the value can be used in situations where a
-	// semantic identifier is unavailable. String representation of the value
-	// should be determined by the implementer.
-	FeatureFlagVariantKey = attribute.Key("feature_flag.variant")
-)
-
-// FeatureFlagKey returns an attribute KeyValue conforming to the
-// "feature_flag.key" semantic conventions. It represents the unique identifier
-// of the feature flag.
-func FeatureFlagKey(val string) attribute.KeyValue {
-	return FeatureFlagKeyKey.String(val)
-}
-
-// FeatureFlagProviderName returns an attribute KeyValue conforming to the
-// "feature_flag.provider_name" semantic conventions. It represents the name of
-// the service provider that performs the flag evaluation.
-func FeatureFlagProviderName(val string) attribute.KeyValue {
-	return FeatureFlagProviderNameKey.String(val)
-}
-
-// FeatureFlagVariant returns an attribute KeyValue conforming to the
-// "feature_flag.variant" semantic conventions. It represents the sHOULD be a
-// semantic identifier for a value. If one is unavailable, a stringified
-// version of the value can be used.
-func FeatureFlagVariant(val string) attribute.KeyValue {
-	return FeatureFlagVariantKey.String(val)
-}
-
-// Describes file attributes.
-const (
-	// FileDirectoryKey is the attribute Key conforming to the "file.directory"
-	// semantic conventions. It represents the directory where the file is
-	// located. It should include the drive letter, when appropriate.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: '/home/user', 'C:\\Program Files\\MyApp'
-	FileDirectoryKey = attribute.Key("file.directory")
-
-	// FileExtensionKey is the attribute Key conforming to the "file.extension"
-	// semantic conventions. It represents the file extension, excluding the
-	// leading dot.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'png', 'gz'
-	// Note: When the file name has multiple extensions (example.tar.gz), only
-	// the last one should be captured ("gz", not "tar.gz").
-	FileExtensionKey = attribute.Key("file.extension")
-
-	// FileNameKey is the attribute Key conforming to the "file.name" semantic
-	// conventions. It represents the name of the file including the extension,
-	// without the directory.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'example.png'
-	FileNameKey = attribute.Key("file.name")
-
-	// FilePathKey is the attribute Key conforming to the "file.path" semantic
-	// conventions. It represents the full path to the file, including the file
-	// name. It should include the drive letter, when appropriate.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: '/home/alice/example.png', 'C:\\Program
-	// Files\\MyApp\\myapp.exe'
-	FilePathKey = attribute.Key("file.path")
-
-	// FileSizeKey is the attribute Key conforming to the "file.size" semantic
-	// conventions. It represents the file size in bytes.
-	//
-	// Type: int
-	// RequirementLevel: Optional
-	// Stability: experimental
-	FileSizeKey = attribute.Key("file.size")
-)
-
-// FileDirectory returns an attribute KeyValue conforming to the
-// "file.directory" semantic conventions. It represents the directory where the
-// file is located. It should include the drive letter, when appropriate.
-func FileDirectory(val string) attribute.KeyValue {
-	return FileDirectoryKey.String(val)
-}
-
-// FileExtension returns an attribute KeyValue conforming to the
-// "file.extension" semantic conventions. It represents the file extension,
-// excluding the leading dot.
-func FileExtension(val string) attribute.KeyValue {
-	return FileExtensionKey.String(val)
-}
-
-// FileName returns an attribute KeyValue conforming to the "file.name"
-// semantic conventions. It represents the name of the file including the
-// extension, without the directory.
-func FileName(val string) attribute.KeyValue {
-	return FileNameKey.String(val)
-}
-
-// FilePath returns an attribute KeyValue conforming to the "file.path"
-// semantic conventions. It represents the full path to the file, including the
-// file name. It should include the drive letter, when appropriate.
-func FilePath(val string) attribute.KeyValue {
-	return FilePathKey.String(val)
-}
-
-// FileSize returns an attribute KeyValue conforming to the "file.size"
-// semantic conventions. It represents the file size in bytes.
-func FileSize(val int) attribute.KeyValue {
-	return FileSizeKey.Int(val)
-}
-
-// Attributes for Google Cloud Run.
-const (
-	// GCPCloudRunJobExecutionKey is the attribute Key conforming to the
-	// "gcp.cloud_run.job.execution" semantic conventions. It represents the
-	// name of the Cloud Run
-	// [execution](https://cloud.google.com/run/docs/managing/job-executions)
-	// being run for the Job, as set by the
-	// [`CLOUD_RUN_EXECUTION`](https://cloud.google.com/run/docs/container-contract#jobs-env-vars)
-	// environment variable.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'job-name-xxxx', 'sample-job-mdw84'
-	GCPCloudRunJobExecutionKey = attribute.Key("gcp.cloud_run.job.execution")
-
-	// GCPCloudRunJobTaskIndexKey is the attribute Key conforming to the
-	// "gcp.cloud_run.job.task_index" semantic conventions. It represents the
-	// index for a task within an execution as provided by the
-	// [`CLOUD_RUN_TASK_INDEX`](https://cloud.google.com/run/docs/container-contract#jobs-env-vars)
-	// environment variable.
-	//
-	// Type: int
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 0, 1
-	GCPCloudRunJobTaskIndexKey = attribute.Key("gcp.cloud_run.job.task_index")
-)
-
-// GCPCloudRunJobExecution returns an attribute KeyValue conforming to the
-// "gcp.cloud_run.job.execution" semantic conventions. It represents the name
-// of the Cloud Run
-// [execution](https://cloud.google.com/run/docs/managing/job-executions) being
-// run for the Job, as set by the
-// [`CLOUD_RUN_EXECUTION`](https://cloud.google.com/run/docs/container-contract#jobs-env-vars)
-// environment variable.
-func GCPCloudRunJobExecution(val string) attribute.KeyValue {
-	return GCPCloudRunJobExecutionKey.String(val)
-}
-
-// GCPCloudRunJobTaskIndex returns an attribute KeyValue conforming to the
-// "gcp.cloud_run.job.task_index" semantic conventions. It represents the index
-// for a task within an execution as provided by the
-// [`CLOUD_RUN_TASK_INDEX`](https://cloud.google.com/run/docs/container-contract#jobs-env-vars)
-// environment variable.
-func GCPCloudRunJobTaskIndex(val int) attribute.KeyValue {
-	return GCPCloudRunJobTaskIndexKey.Int(val)
-}
-
-// Attributes for Google Compute Engine (GCE).
-const (
-	// GCPGceInstanceHostnameKey is the attribute Key conforming to the
-	// "gcp.gce.instance.hostname" semantic conventions. It represents the
-	// hostname of a GCE instance. This is the full value of the default or
-	// [custom
-	// hostname](https://cloud.google.com/compute/docs/instances/custom-hostname-vm).
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'my-host1234.example.com',
-	// 'sample-vm.us-west1-b.c.my-project.internal'
-	GCPGceInstanceHostnameKey = attribute.Key("gcp.gce.instance.hostname")
-
-	// GCPGceInstanceNameKey is the attribute Key conforming to the
-	// "gcp.gce.instance.name" semantic conventions. It represents the instance
-	// name of a GCE instance. This is the value provided by `host.name`, the
-	// visible name of the instance in the Cloud Console UI, and the prefix for
-	// the default hostname of the instance as defined by the [default internal
-	// DNS
-	// name](https://cloud.google.com/compute/docs/internal-dns#instance-fully-qualified-domain-names).
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'instance-1', 'my-vm-name'
-	GCPGceInstanceNameKey = attribute.Key("gcp.gce.instance.name")
-)
-
-// GCPGceInstanceHostname returns an attribute KeyValue conforming to the
-// "gcp.gce.instance.hostname" semantic conventions. It represents the hostname
-// of a GCE instance. This is the full value of the default or [custom
-// hostname](https://cloud.google.com/compute/docs/instances/custom-hostname-vm).
-func GCPGceInstanceHostname(val string) attribute.KeyValue {
-	return GCPGceInstanceHostnameKey.String(val)
-}
-
-// GCPGceInstanceName returns an attribute KeyValue conforming to the
-// "gcp.gce.instance.name" semantic conventions. It represents the instance
-// name of a GCE instance. This is the value provided by `host.name`, the
-// visible name of the instance in the Cloud Console UI, and the prefix for the
-// default hostname of the instance as defined by the [default internal DNS
-// name](https://cloud.google.com/compute/docs/internal-dns#instance-fully-qualified-domain-names).
-func GCPGceInstanceName(val string) attribute.KeyValue {
-	return GCPGceInstanceNameKey.String(val)
-}
-
-// The attributes used to describe telemetry in the context of LLM (Large
-// Language Models) requests and responses.
-const (
-	// GenAiCompletionKey is the attribute Key conforming to the
-	// "gen_ai.completion" semantic conventions. It represents the full
-	// response received from the LLM.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: "[{'role': 'assistant', 'content': 'The capital of France is
-	// Paris.'}]"
-	// Note: It's RECOMMENDED to format completions as JSON string matching
-	// [OpenAI messages
-	// format](https://platform.openai.com/docs/guides/text-generation)
-	GenAiCompletionKey = attribute.Key("gen_ai.completion")
-
-	// GenAiPromptKey is the attribute Key conforming to the "gen_ai.prompt"
-	// semantic conventions. It represents the full prompt sent to an LLM.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: "[{'role': 'user', 'content': 'What is the capital of
-	// France?'}]"
-	// Note: It's RECOMMENDED to format prompts as JSON string matching [OpenAI
-	// messages
-	// format](https://platform.openai.com/docs/guides/text-generation)
-	GenAiPromptKey = attribute.Key("gen_ai.prompt")
-
-	// GenAiRequestMaxTokensKey is the attribute Key conforming to the
-	// "gen_ai.request.max_tokens" semantic conventions. It represents the
-	// maximum number of tokens the LLM generates for a request.
-	//
-	// Type: int
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 100
-	GenAiRequestMaxTokensKey = attribute.Key("gen_ai.request.max_tokens")
-
-	// GenAiRequestModelKey is the attribute Key conforming to the
-	// "gen_ai.request.model" semantic conventions. It represents the name of
-	// the LLM a request is being made to.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'gpt-4'
-	GenAiRequestModelKey = attribute.Key("gen_ai.request.model")
-
-	// GenAiRequestTemperatureKey is the attribute Key conforming to the
-	// "gen_ai.request.temperature" semantic conventions. It represents the
-	// temperature setting for the LLM request.
-	//
-	// Type: double
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 0.0
-	GenAiRequestTemperatureKey = attribute.Key("gen_ai.request.temperature")
-
-	// GenAiRequestTopPKey is the attribute Key conforming to the
-	// "gen_ai.request.top_p" semantic conventions. It represents the top_p
-	// sampling setting for the LLM request.
-	//
-	// Type: double
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 1.0
-	GenAiRequestTopPKey = attribute.Key("gen_ai.request.top_p")
-
-	// GenAiResponseFinishReasonsKey is the attribute Key conforming to the
-	// "gen_ai.response.finish_reasons" semantic conventions. It represents the
-	// array of reasons the model stopped generating tokens, corresponding to
-	// each generation received.
-	//
-	// Type: string[]
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'stop'
-	GenAiResponseFinishReasonsKey = attribute.Key("gen_ai.response.finish_reasons")
-
-	// GenAiResponseIDKey is the attribute Key conforming to the
-	// "gen_ai.response.id" semantic conventions. It represents the unique
-	// identifier for the completion.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'chatcmpl-123'
-	GenAiResponseIDKey = attribute.Key("gen_ai.response.id")
-
-	// GenAiResponseModelKey is the attribute Key conforming to the
-	// "gen_ai.response.model" semantic conventions. It represents the name of
-	// the LLM a response was generated from.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'gpt-4-0613'
-	GenAiResponseModelKey = attribute.Key("gen_ai.response.model")
-
-	// GenAiSystemKey is the attribute Key conforming to the "gen_ai.system"
-	// semantic conventions. It represents the Generative AI product as
-	// identified by the client instrumentation.
-	//
-	// Type: Enum
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'openai'
-	// Note: The actual GenAI product may differ from the one identified by the
-	// client. For example, when using OpenAI client libraries to communicate
-	// with Mistral, the `gen_ai.system` is set to `openai` based on the
-	// instrumentation's best knowledge.
-	GenAiSystemKey = attribute.Key("gen_ai.system")
-
-	// GenAiUsageCompletionTokensKey is the attribute Key conforming to the
-	// "gen_ai.usage.completion_tokens" semantic conventions. It represents the
-	// number of tokens used in the LLM response (completion).
-	//
-	// Type: int
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 180
-	GenAiUsageCompletionTokensKey = attribute.Key("gen_ai.usage.completion_tokens")
-
-	// GenAiUsagePromptTokensKey is the attribute Key conforming to the
-	// "gen_ai.usage.prompt_tokens" semantic conventions. It represents the
-	// number of tokens used in the LLM prompt.
-	//
-	// Type: int
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 100
-	GenAiUsagePromptTokensKey = attribute.Key("gen_ai.usage.prompt_tokens")
-)
-
-var (
-	// OpenAI
-	GenAiSystemOpenai = GenAiSystemKey.String("openai")
-)
-
-// GenAiCompletion returns an attribute KeyValue conforming to the
-// "gen_ai.completion" semantic conventions. It represents the full response
-// received from the LLM.
-func GenAiCompletion(val string) attribute.KeyValue {
-	return GenAiCompletionKey.String(val)
-}
-
-// GenAiPrompt returns an attribute KeyValue conforming to the
-// "gen_ai.prompt" semantic conventions. It represents the full prompt sent to
-// an LLM.
-func GenAiPrompt(val string) attribute.KeyValue {
-	return GenAiPromptKey.String(val)
-}
-
-// GenAiRequestMaxTokens returns an attribute KeyValue conforming to the
-// "gen_ai.request.max_tokens" semantic conventions. It represents the maximum
-// number of tokens the LLM generates for a request.
-func GenAiRequestMaxTokens(val int) attribute.KeyValue {
-	return GenAiRequestMaxTokensKey.Int(val)
-}
-
-// GenAiRequestModel returns an attribute KeyValue conforming to the
-// "gen_ai.request.model" semantic conventions. It represents the name of the
-// LLM a request is being made to.
-func GenAiRequestModel(val string) attribute.KeyValue {
-	return GenAiRequestModelKey.String(val)
-}
-
-// GenAiRequestTemperature returns an attribute KeyValue conforming to the
-// "gen_ai.request.temperature" semantic conventions. It represents the
-// temperature setting for the LLM request.
-func GenAiRequestTemperature(val float64) attribute.KeyValue {
-	return GenAiRequestTemperatureKey.Float64(val)
-}
-
-// GenAiRequestTopP returns an attribute KeyValue conforming to the
-// "gen_ai.request.top_p" semantic conventions. It represents the top_p
-// sampling setting for the LLM request.
-func GenAiRequestTopP(val float64) attribute.KeyValue {
-	return GenAiRequestTopPKey.Float64(val)
-}
-
-// GenAiResponseFinishReasons returns an attribute KeyValue conforming to
-// the "gen_ai.response.finish_reasons" semantic conventions. It represents the
-// array of reasons the model stopped generating tokens, corresponding to each
-// generation received.
-func GenAiResponseFinishReasons(val ...string) attribute.KeyValue {
-	return GenAiResponseFinishReasonsKey.StringSlice(val)
-}
-
-// GenAiResponseID returns an attribute KeyValue conforming to the
-// "gen_ai.response.id" semantic conventions. It represents the unique
-// identifier for the completion.
-func GenAiResponseID(val string) attribute.KeyValue {
-	return GenAiResponseIDKey.String(val)
-}
-
-// GenAiResponseModel returns an attribute KeyValue conforming to the
-// "gen_ai.response.model" semantic conventions. It represents the name of the
-// LLM a response was generated from.
-func GenAiResponseModel(val string) attribute.KeyValue {
-	return GenAiResponseModelKey.String(val)
-}
-
-// GenAiUsageCompletionTokens returns an attribute KeyValue conforming to
-// the "gen_ai.usage.completion_tokens" semantic conventions. It represents the
-// number of tokens used in the LLM response (completion).
-func GenAiUsageCompletionTokens(val int) attribute.KeyValue {
-	return GenAiUsageCompletionTokensKey.Int(val)
-}
-
-// GenAiUsagePromptTokens returns an attribute KeyValue conforming to the
-// "gen_ai.usage.prompt_tokens" semantic conventions. It represents the number
-// of tokens used in the LLM prompt.
-func GenAiUsagePromptTokens(val int) attribute.KeyValue {
-	return GenAiUsagePromptTokensKey.Int(val)
-}
-
-// Attributes for GraphQL.
-const (
-	// GraphqlDocumentKey is the attribute Key conforming to the
-	// "graphql.document" semantic conventions. It represents the GraphQL
-	// document being executed.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'query findBookByID { bookByID(id: ?) { name } }'
-	// Note: The value may be sanitized to exclude sensitive information.
-	GraphqlDocumentKey = attribute.Key("graphql.document")
-
-	// GraphqlOperationNameKey is the attribute Key conforming to the
-	// "graphql.operation.name" semantic conventions. It represents the name of
-	// the operation being executed.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'findBookByID'
-	GraphqlOperationNameKey = attribute.Key("graphql.operation.name")
-
-	// GraphqlOperationTypeKey is the attribute Key conforming to the
-	// "graphql.operation.type" semantic conventions. It represents the type of
-	// the operation being executed.
-	//
-	// Type: Enum
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'query', 'mutation', 'subscription'
-	GraphqlOperationTypeKey = attribute.Key("graphql.operation.type")
-)
-
-var (
-	// GraphQL query
-	GraphqlOperationTypeQuery = GraphqlOperationTypeKey.String("query")
-	// GraphQL mutation
-	GraphqlOperationTypeMutation = GraphqlOperationTypeKey.String("mutation")
-	// GraphQL subscription
-	GraphqlOperationTypeSubscription = GraphqlOperationTypeKey.String("subscription")
-)
-
-// GraphqlDocument returns an attribute KeyValue conforming to the
-// "graphql.document" semantic conventions. It represents the GraphQL document
-// being executed.
-func GraphqlDocument(val string) attribute.KeyValue {
-	return GraphqlDocumentKey.String(val)
-}
-
-// GraphqlOperationName returns an attribute KeyValue conforming to the
-// "graphql.operation.name" semantic conventions. It represents the name of the
-// operation being executed.
-func GraphqlOperationName(val string) attribute.KeyValue {
-	return GraphqlOperationNameKey.String(val)
-}
-
-// Attributes for the Android platform on which the Android application is
-// running.
-const (
-	// HerokuAppIDKey is the attribute Key conforming to the "heroku.app.id"
-	// semantic conventions. It represents the unique identifier for the
-	// application
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: '2daa2797-e42b-4624-9322-ec3f968df4da'
-	HerokuAppIDKey = attribute.Key("heroku.app.id")
-
-	// HerokuReleaseCommitKey is the attribute Key conforming to the
-	// "heroku.release.commit" semantic conventions. It represents the commit
-	// hash for the current release
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'e6134959463efd8966b20e75b913cafe3f5ec'
-	HerokuReleaseCommitKey = attribute.Key("heroku.release.commit")
-
-	// HerokuReleaseCreationTimestampKey is the attribute Key conforming to the
-	// "heroku.release.creation_timestamp" semantic conventions. It represents
-	// the time and date the release was created
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: '2022-10-23T18:00:42Z'
-	HerokuReleaseCreationTimestampKey = attribute.Key("heroku.release.creation_timestamp")
-)
-
-// HerokuAppID returns an attribute KeyValue conforming to the
-// "heroku.app.id" semantic conventions. It represents the unique identifier
-// for the application
-func HerokuAppID(val string) attribute.KeyValue {
-	return HerokuAppIDKey.String(val)
-}
-
-// HerokuReleaseCommit returns an attribute KeyValue conforming to the
-// "heroku.release.commit" semantic conventions. It represents the commit hash
-// for the current release
-func HerokuReleaseCommit(val string) attribute.KeyValue {
-	return HerokuReleaseCommitKey.String(val)
-}
-
-// HerokuReleaseCreationTimestamp returns an attribute KeyValue conforming
-// to the "heroku.release.creation_timestamp" semantic conventions. It
-// represents the time and date the release was created
-func HerokuReleaseCreationTimestamp(val string) attribute.KeyValue {
-	return HerokuReleaseCreationTimestampKey.String(val)
-}
-
-// A host is defined as a computing instance. For example, physical servers,
-// virtual machines, switches or disk array.
-const (
-	// HostArchKey is the attribute Key conforming to the "host.arch" semantic
-	// conventions. It represents the CPU architecture the host system is
-	// running on.
-	//
-	// Type: Enum
-	// RequirementLevel: Optional
-	// Stability: experimental
-	HostArchKey = attribute.Key("host.arch")
-
-	// HostCPUCacheL2SizeKey is the attribute Key conforming to the
-	// "host.cpu.cache.l2.size" semantic conventions. It represents the amount
-	// of level 2 memory cache available to the processor (in Bytes).
-	//
-	// Type: int
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 12288000
-	HostCPUCacheL2SizeKey = attribute.Key("host.cpu.cache.l2.size")
-
-	// HostCPUFamilyKey is the attribute Key conforming to the
-	// "host.cpu.family" semantic conventions. It represents the family or
-	// generation of the CPU.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: '6', 'PA-RISC 1.1e'
-	HostCPUFamilyKey = attribute.Key("host.cpu.family")
-
-	// HostCPUModelIDKey is the attribute Key conforming to the
-	// "host.cpu.model.id" semantic conventions. It represents the model
-	// identifier. It provides more granular information about the CPU,
-	// distinguishing it from other CPUs within the same family.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: '6', '9000/778/B180L'
-	HostCPUModelIDKey = attribute.Key("host.cpu.model.id")
-
-	// HostCPUModelNameKey is the attribute Key conforming to the
-	// "host.cpu.model.name" semantic conventions. It represents the model
-	// designation of the processor.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: '11th Gen Intel(R) Core(TM) i7-1185G7 @ 3.00GHz'
-	HostCPUModelNameKey = attribute.Key("host.cpu.model.name")
-
-	// HostCPUSteppingKey is the attribute Key conforming to the
-	// "host.cpu.stepping" semantic conventions. It represents the stepping or
-	// core revisions.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: '1', 'r1p1'
-	HostCPUSteppingKey = attribute.Key("host.cpu.stepping")
-
-	// HostCPUVendorIDKey is the attribute Key conforming to the
-	// "host.cpu.vendor.id" semantic conventions. It represents the processor
-	// manufacturer identifier. A maximum 12-character string.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'GenuineIntel'
-	// Note: [CPUID](https://wiki.osdev.org/CPUID) command returns the vendor
-	// ID string in EBX, EDX and ECX registers. Writing these to memory in this
-	// order results in a 12-character string.
-	HostCPUVendorIDKey = attribute.Key("host.cpu.vendor.id")
-
-	// HostIDKey is the attribute Key conforming to the "host.id" semantic
-	// conventions. It represents the unique host ID. For Cloud, this must be
-	// the instance_id assigned by the cloud provider. For non-containerized
-	// systems, this should be the `machine-id`. See the table below for the
-	// sources to use to determine the `machine-id` based on operating system.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'fdbf79e8af94cb7f9e8df36789187052'
-	HostIDKey = attribute.Key("host.id")
-
-	// HostImageIDKey is the attribute Key conforming to the "host.image.id"
-	// semantic conventions. It represents the vM image ID or host OS image ID.
-	// For Cloud, this value is from the provider.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'ami-07b06b442921831e5'
-	HostImageIDKey = attribute.Key("host.image.id")
-
-	// HostImageNameKey is the attribute Key conforming to the
-	// "host.image.name" semantic conventions. It represents the name of the VM
-	// image or OS install the host was instantiated from.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'infra-ami-eks-worker-node-7d4ec78312', 'CentOS-8-x86_64-1905'
-	HostImageNameKey = attribute.Key("host.image.name")
-
-	// HostImageVersionKey is the attribute Key conforming to the
-	// "host.image.version" semantic conventions. It represents the version
-	// string of the VM image or host OS as defined in [Version
-	// Attributes](/docs/resource/README.md#version-attributes).
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: '0.1'
-	HostImageVersionKey = attribute.Key("host.image.version")
-
-	// HostIPKey is the attribute Key conforming to the "host.ip" semantic
-	// conventions. It represents the available IP addresses of the host,
-	// excluding loopback interfaces.
-	//
-	// Type: string[]
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: '192.168.1.140', 'fe80::abc2:4a28:737a:609e'
-	// Note: IPv4 Addresses MUST be specified in dotted-quad notation. IPv6
-	// addresses MUST be specified in the [RFC
-	// 5952](https://www.rfc-editor.org/rfc/rfc5952.html) format.
-	HostIPKey = attribute.Key("host.ip")
-
-	// HostMacKey is the attribute Key conforming to the "host.mac" semantic
-	// conventions. It represents the available MAC addresses of the host,
-	// excluding loopback interfaces.
-	//
-	// Type: string[]
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'AC-DE-48-23-45-67', 'AC-DE-48-23-45-67-01-9F'
-	// Note: MAC Addresses MUST be represented in [IEEE RA hexadecimal
-	// form](https://standards.ieee.org/wp-content/uploads/import/documents/tutorials/eui.pdf):
-	// as hyphen-separated octets in uppercase hexadecimal form from most to
-	// least significant.
-	HostMacKey = attribute.Key("host.mac")
-
-	// HostNameKey is the attribute Key conforming to the "host.name" semantic
-	// conventions. It represents the name of the host. On Unix systems, it may
-	// contain what the hostname command returns, or the fully qualified
-	// hostname, or another name specified by the user.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'opentelemetry-test'
-	HostNameKey = attribute.Key("host.name")
-
-	// HostTypeKey is the attribute Key conforming to the "host.type" semantic
-	// conventions. It represents the type of host. For Cloud, this must be the
-	// machine type.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'n1-standard-1'
-	HostTypeKey = attribute.Key("host.type")
-)
-
-var (
-	// AMD64
-	HostArchAMD64 = HostArchKey.String("amd64")
-	// ARM32
-	HostArchARM32 = HostArchKey.String("arm32")
-	// ARM64
-	HostArchARM64 = HostArchKey.String("arm64")
-	// Itanium
-	HostArchIA64 = HostArchKey.String("ia64")
-	// 32-bit PowerPC
-	HostArchPPC32 = HostArchKey.String("ppc32")
-	// 64-bit PowerPC
-	HostArchPPC64 = HostArchKey.String("ppc64")
-	// IBM z/Architecture
-	HostArchS390x = HostArchKey.String("s390x")
-	// 32-bit x86
-	HostArchX86 = HostArchKey.String("x86")
-)
-
-// HostCPUCacheL2Size returns an attribute KeyValue conforming to the
-// "host.cpu.cache.l2.size" semantic conventions. It represents the amount of
-// level 2 memory cache available to the processor (in Bytes).
-func HostCPUCacheL2Size(val int) attribute.KeyValue {
-	return HostCPUCacheL2SizeKey.Int(val)
-}
-
-// HostCPUFamily returns an attribute KeyValue conforming to the
-// "host.cpu.family" semantic conventions. It represents the family or
-// generation of the CPU.
-func HostCPUFamily(val string) attribute.KeyValue {
-	return HostCPUFamilyKey.String(val)
-}
-
-// HostCPUModelID returns an attribute KeyValue conforming to the
-// "host.cpu.model.id" semantic conventions. It represents the model
-// identifier. It provides more granular information about the CPU,
-// distinguishing it from other CPUs within the same family.
-func HostCPUModelID(val string) attribute.KeyValue {
-	return HostCPUModelIDKey.String(val)
-}
-
-// HostCPUModelName returns an attribute KeyValue conforming to the
-// "host.cpu.model.name" semantic conventions. It represents the model
-// designation of the processor.
-func HostCPUModelName(val string) attribute.KeyValue {
-	return HostCPUModelNameKey.String(val)
-}
-
-// HostCPUStepping returns an attribute KeyValue conforming to the
-// "host.cpu.stepping" semantic conventions. It represents the stepping or core
-// revisions.
-func HostCPUStepping(val string) attribute.KeyValue {
-	return HostCPUSteppingKey.String(val)
-}
-
-// HostCPUVendorID returns an attribute KeyValue conforming to the
-// "host.cpu.vendor.id" semantic conventions. It represents the processor
-// manufacturer identifier. A maximum 12-character string.
-func HostCPUVendorID(val string) attribute.KeyValue {
-	return HostCPUVendorIDKey.String(val)
-}
-
-// HostID returns an attribute KeyValue conforming to the "host.id" semantic
-// conventions. It represents the unique host ID. For Cloud, this must be the
-// instance_id assigned by the cloud provider. For non-containerized systems,
-// this should be the `machine-id`. See the table below for the sources to use
-// to determine the `machine-id` based on operating system.
-func HostID(val string) attribute.KeyValue {
-	return HostIDKey.String(val)
-}
-
-// HostImageID returns an attribute KeyValue conforming to the
-// "host.image.id" semantic conventions. It represents the vM image ID or host
-// OS image ID. For Cloud, this value is from the provider.
-func HostImageID(val string) attribute.KeyValue {
-	return HostImageIDKey.String(val)
-}
-
-// HostImageName returns an attribute KeyValue conforming to the
-// "host.image.name" semantic conventions. It represents the name of the VM
-// image or OS install the host was instantiated from.
-func HostImageName(val string) attribute.KeyValue {
-	return HostImageNameKey.String(val)
-}
-
-// HostImageVersion returns an attribute KeyValue conforming to the
-// "host.image.version" semantic conventions. It represents the version string
-// of the VM image or host OS as defined in [Version
-// Attributes](/docs/resource/README.md#version-attributes).
-func HostImageVersion(val string) attribute.KeyValue {
-	return HostImageVersionKey.String(val)
-}
-
-// HostIP returns an attribute KeyValue conforming to the "host.ip" semantic
-// conventions. It represents the available IP addresses of the host, excluding
-// loopback interfaces.
-func HostIP(val ...string) attribute.KeyValue {
-	return HostIPKey.StringSlice(val)
-}
-
-// HostMac returns an attribute KeyValue conforming to the "host.mac"
-// semantic conventions. It represents the available MAC addresses of the host,
-// excluding loopback interfaces.
-func HostMac(val ...string) attribute.KeyValue {
-	return HostMacKey.StringSlice(val)
-}
-
-// HostName returns an attribute KeyValue conforming to the "host.name"
-// semantic conventions. It represents the name of the host. On Unix systems,
-// it may contain what the hostname command returns, or the fully qualified
-// hostname, or another name specified by the user.
-func HostName(val string) attribute.KeyValue {
-	return HostNameKey.String(val)
-}
-
-// HostType returns an attribute KeyValue conforming to the "host.type"
-// semantic conventions. It represents the type of host. For Cloud, this must
-// be the machine type.
-func HostType(val string) attribute.KeyValue {
-	return HostTypeKey.String(val)
-}
-
-// Semantic convention attributes in the HTTP namespace.
-const (
-	// HTTPConnectionStateKey is the attribute Key conforming to the
-	// "http.connection.state" semantic conventions. It represents the state of
-	// the HTTP connection in the HTTP connection pool.
-	//
-	// Type: Enum
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'active', 'idle'
-	HTTPConnectionStateKey = attribute.Key("http.connection.state")
-
-	// HTTPRequestBodySizeKey is the attribute Key conforming to the
-	// "http.request.body.size" semantic conventions. It represents the size of
-	// the request payload body in bytes. This is the number of bytes
-	// transferred excluding headers and is often, but not always, present as
-	// the
-	// [Content-Length](https://www.rfc-editor.org/rfc/rfc9110.html#field.content-length)
-	// header. For requests using transport encoding, this should be the
-	// compressed size.
-	//
-	// Type: int
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 3495
-	HTTPRequestBodySizeKey = attribute.Key("http.request.body.size")
-
-	// HTTPRequestMethodKey is the attribute Key conforming to the
-	// "http.request.method" semantic conventions. It represents the hTTP
-	// request method.
-	//
-	// Type: Enum
-	// RequirementLevel: Optional
-	// Stability: stable
-	// Examples: 'GET', 'POST', 'HEAD'
-	// Note: HTTP request method value SHOULD be "known" to the
-	// instrumentation.
-	// By default, this convention defines "known" methods as the ones listed
-	// in [RFC9110](https://www.rfc-editor.org/rfc/rfc9110.html#name-methods)
-	// and the PATCH method defined in
-	// [RFC5789](https://www.rfc-editor.org/rfc/rfc5789.html).
-	//
-	// If the HTTP request method is not known to instrumentation, it MUST set
-	// the `http.request.method` attribute to `_OTHER`.
-	//
-	// If the HTTP instrumentation could end up converting valid HTTP request
-	// methods to `_OTHER`, then it MUST provide a way to override
-	// the list of known HTTP methods. If this override is done via environment
-	// variable, then the environment variable MUST be named
-	// OTEL_INSTRUMENTATION_HTTP_KNOWN_METHODS and support a comma-separated
-	// list of case-sensitive known HTTP methods
-	// (this list MUST be a full override of the default known method, it is
-	// not a list of known methods in addition to the defaults).
-	//
-	// HTTP method names are case-sensitive and `http.request.method` attribute
-	// value MUST match a known HTTP method name exactly.
-	// Instrumentations for specific web frameworks that consider HTTP methods
-	// to be case insensitive, SHOULD populate a canonical equivalent.
-	// Tracing instrumentations that do so, MUST also set
-	// `http.request.method_original` to the original value.
-	HTTPRequestMethodKey = attribute.Key("http.request.method")
-
-	// HTTPRequestMethodOriginalKey is the attribute Key conforming to the
-	// "http.request.method_original" semantic conventions. It represents the
-	// original HTTP method sent by the client in the request line.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: stable
-	// Examples: 'GeT', 'ACL', 'foo'
-	HTTPRequestMethodOriginalKey = attribute.Key("http.request.method_original")
-
-	// HTTPRequestResendCountKey is the attribute Key conforming to the
-	// "http.request.resend_count" semantic conventions. It represents the
-	// ordinal number of request resending attempt (for any reason, including
-	// redirects).
-	//
-	// Type: int
-	// RequirementLevel: Optional
-	// Stability: stable
-	// Examples: 3
-	// Note: The resend count SHOULD be updated each time an HTTP request gets
-	// resent by the client, regardless of what was the cause of the resending
-	// (e.g. redirection, authorization failure, 503 Server Unavailable,
-	// network issues, or any other).
-	HTTPRequestResendCountKey = attribute.Key("http.request.resend_count")
-
-	// HTTPRequestSizeKey is the attribute Key conforming to the
-	// "http.request.size" semantic conventions. It represents the total size
-	// of the request in bytes. This should be the total number of bytes sent
-	// over the wire, including the request line (HTTP/1.1), framing (HTTP/2
-	// and HTTP/3), headers, and request body if any.
-	//
-	// Type: int
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 1437
-	HTTPRequestSizeKey = attribute.Key("http.request.size")
-
-	// HTTPResponseBodySizeKey is the attribute Key conforming to the
-	// "http.response.body.size" semantic conventions. It represents the size
-	// of the response payload body in bytes. This is the number of bytes
-	// transferred excluding headers and is often, but not always, present as
-	// the
-	// [Content-Length](https://www.rfc-editor.org/rfc/rfc9110.html#field.content-length)
-	// header. For requests using transport encoding, this should be the
-	// compressed size.
-	//
-	// Type: int
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 3495
-	HTTPResponseBodySizeKey = attribute.Key("http.response.body.size")
-
-	// HTTPResponseSizeKey is the attribute Key conforming to the
-	// "http.response.size" semantic conventions. It represents the total size
-	// of the response in bytes. This should be the total number of bytes sent
-	// over the wire, including the status line (HTTP/1.1), framing (HTTP/2 and
-	// HTTP/3), headers, and response body and trailers if any.
-	//
-	// Type: int
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 1437
-	HTTPResponseSizeKey = attribute.Key("http.response.size")
-
-	// HTTPResponseStatusCodeKey is the attribute Key conforming to the
-	// "http.response.status_code" semantic conventions. It represents the
-	// [HTTP response status
-	// code](https://tools.ietf.org/html/rfc7231#section-6).
-	//
-	// Type: int
-	// RequirementLevel: Optional
-	// Stability: stable
-	// Examples: 200
-	HTTPResponseStatusCodeKey = attribute.Key("http.response.status_code")
-
-	// HTTPRouteKey is the attribute Key conforming to the "http.route"
-	// semantic conventions. It represents the matched route, that is, the path
-	// template in the format used by the respective server framework.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: stable
-	// Examples: '/users/:userID?', '{controller}/{action}/{id?}'
-	// Note: MUST NOT be populated when this is not supported by the HTTP
-	// server framework as the route attribute should have low-cardinality and
-	// the URI path can NOT substitute it.
-	// SHOULD include the [application
-	// root](/docs/http/http-spans.md#http-server-definitions) if there is one.
-	HTTPRouteKey = attribute.Key("http.route")
-)
-
-var (
-	// active state
-	HTTPConnectionStateActive = HTTPConnectionStateKey.String("active")
-	// idle state
-	HTTPConnectionStateIdle = HTTPConnectionStateKey.String("idle")
-)
-
-var (
-	// CONNECT method
-	HTTPRequestMethodConnect = HTTPRequestMethodKey.String("CONNECT")
-	// DELETE method
-	HTTPRequestMethodDelete = HTTPRequestMethodKey.String("DELETE")
-	// GET method
-	HTTPRequestMethodGet = HTTPRequestMethodKey.String("GET")
-	// HEAD method
-	HTTPRequestMethodHead = HTTPRequestMethodKey.String("HEAD")
-	// OPTIONS method
-	HTTPRequestMethodOptions = HTTPRequestMethodKey.String("OPTIONS")
-	// PATCH method
-	HTTPRequestMethodPatch = HTTPRequestMethodKey.String("PATCH")
-	// POST method
-	HTTPRequestMethodPost = HTTPRequestMethodKey.String("POST")
-	// PUT method
-	HTTPRequestMethodPut = HTTPRequestMethodKey.String("PUT")
-	// TRACE method
-	HTTPRequestMethodTrace = HTTPRequestMethodKey.String("TRACE")
-	// Any HTTP method that the instrumentation has no prior knowledge of
-	HTTPRequestMethodOther = HTTPRequestMethodKey.String("_OTHER")
-)
-
-// HTTPRequestBodySize returns an attribute KeyValue conforming to the
-// "http.request.body.size" semantic conventions. It represents the size of the
-// request payload body in bytes. This is the number of bytes transferred
-// excluding headers and is often, but not always, present as the
-// [Content-Length](https://www.rfc-editor.org/rfc/rfc9110.html#field.content-length)
-// header. For requests using transport encoding, this should be the compressed
-// size.
-func HTTPRequestBodySize(val int) attribute.KeyValue {
-	return HTTPRequestBodySizeKey.Int(val)
-}
-
-// HTTPRequestMethodOriginal returns an attribute KeyValue conforming to the
-// "http.request.method_original" semantic conventions. It represents the
-// original HTTP method sent by the client in the request line.
-func HTTPRequestMethodOriginal(val string) attribute.KeyValue {
-	return HTTPRequestMethodOriginalKey.String(val)
-}
-
-// HTTPRequestResendCount returns an attribute KeyValue conforming to the
-// "http.request.resend_count" semantic conventions. It represents the ordinal
-// number of request resending attempt (for any reason, including redirects).
-func HTTPRequestResendCount(val int) attribute.KeyValue {
-	return HTTPRequestResendCountKey.Int(val)
-}
-
-// HTTPRequestSize returns an attribute KeyValue conforming to the
-// "http.request.size" semantic conventions. It represents the total size of
-// the request in bytes. This should be the total number of bytes sent over the
-// wire, including the request line (HTTP/1.1), framing (HTTP/2 and HTTP/3),
-// headers, and request body if any.
-func HTTPRequestSize(val int) attribute.KeyValue {
-	return HTTPRequestSizeKey.Int(val)
-}
-
-// HTTPResponseBodySize returns an attribute KeyValue conforming to the
-// "http.response.body.size" semantic conventions. It represents the size of
-// the response payload body in bytes. This is the number of bytes transferred
-// excluding headers and is often, but not always, present as the
-// [Content-Length](https://www.rfc-editor.org/rfc/rfc9110.html#field.content-length)
-// header. For requests using transport encoding, this should be the compressed
-// size.
-func HTTPResponseBodySize(val int) attribute.KeyValue {
-	return HTTPResponseBodySizeKey.Int(val)
-}
-
-// HTTPResponseSize returns an attribute KeyValue conforming to the
-// "http.response.size" semantic conventions. It represents the total size of
-// the response in bytes. This should be the total number of bytes sent over
-// the wire, including the status line (HTTP/1.1), framing (HTTP/2 and HTTP/3),
-// headers, and response body and trailers if any.
-func HTTPResponseSize(val int) attribute.KeyValue {
-	return HTTPResponseSizeKey.Int(val)
-}
-
-// HTTPResponseStatusCode returns an attribute KeyValue conforming to the
-// "http.response.status_code" semantic conventions. It represents the [HTTP
-// response status code](https://tools.ietf.org/html/rfc7231#section-6).
-func HTTPResponseStatusCode(val int) attribute.KeyValue {
-	return HTTPResponseStatusCodeKey.Int(val)
-}
-
-// HTTPRoute returns an attribute KeyValue conforming to the "http.route"
-// semantic conventions. It represents the matched route, that is, the path
-// template in the format used by the respective server framework.
-func HTTPRoute(val string) attribute.KeyValue {
-	return HTTPRouteKey.String(val)
-}
-
-// Java Virtual machine related attributes.
-const (
-	// JvmBufferPoolNameKey is the attribute Key conforming to the
-	// "jvm.buffer.pool.name" semantic conventions. It represents the name of
-	// the buffer pool.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'mapped', 'direct'
-	// Note: Pool names are generally obtained via
-	// [BufferPoolMXBean#getName()](https://docs.oracle.com/en/java/javase/11/docs/api/java.management/java/lang/management/BufferPoolMXBean.html#getName()).
-	JvmBufferPoolNameKey = attribute.Key("jvm.buffer.pool.name")
-
-	// JvmGcActionKey is the attribute Key conforming to the "jvm.gc.action"
-	// semantic conventions. It represents the name of the garbage collector
-	// action.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: stable
-	// Examples: 'end of minor GC', 'end of major GC'
-	// Note: Garbage collector action is generally obtained via
-	// [GarbageCollectionNotificationInfo#getGcAction()](https://docs.oracle.com/en/java/javase/11/docs/api/jdk.management/com/sun/management/GarbageCollectionNotificationInfo.html#getGcAction()).
-	JvmGcActionKey = attribute.Key("jvm.gc.action")
-
-	// JvmGcNameKey is the attribute Key conforming to the "jvm.gc.name"
-	// semantic conventions. It represents the name of the garbage collector.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: stable
-	// Examples: 'G1 Young Generation', 'G1 Old Generation'
-	// Note: Garbage collector name is generally obtained via
-	// [GarbageCollectionNotificationInfo#getGcName()](https://docs.oracle.com/en/java/javase/11/docs/api/jdk.management/com/sun/management/GarbageCollectionNotificationInfo.html#getGcName()).
-	JvmGcNameKey = attribute.Key("jvm.gc.name")
-
-	// JvmMemoryPoolNameKey is the attribute Key conforming to the
-	// "jvm.memory.pool.name" semantic conventions. It represents the name of
-	// the memory pool.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: stable
-	// Examples: 'G1 Old Gen', 'G1 Eden space', 'G1 Survivor Space'
-	// Note: Pool names are generally obtained via
-	// [MemoryPoolMXBean#getName()](https://docs.oracle.com/en/java/javase/11/docs/api/java.management/java/lang/management/MemoryPoolMXBean.html#getName()).
-	JvmMemoryPoolNameKey = attribute.Key("jvm.memory.pool.name")
-
-	// JvmMemoryTypeKey is the attribute Key conforming to the
-	// "jvm.memory.type" semantic conventions. It represents the type of
-	// memory.
-	//
-	// Type: Enum
-	// RequirementLevel: Optional
-	// Stability: stable
-	// Examples: 'heap', 'non_heap'
-	JvmMemoryTypeKey = attribute.Key("jvm.memory.type")
-
-	// JvmThreadDaemonKey is the attribute Key conforming to the
-	// "jvm.thread.daemon" semantic conventions. It represents the whether the
-	// thread is daemon or not.
-	//
-	// Type: boolean
-	// RequirementLevel: Optional
-	// Stability: stable
-	JvmThreadDaemonKey = attribute.Key("jvm.thread.daemon")
-
-	// JvmThreadStateKey is the attribute Key conforming to the
-	// "jvm.thread.state" semantic conventions. It represents the state of the
-	// thread.
-	//
-	// Type: Enum
-	// RequirementLevel: Optional
-	// Stability: stable
-	// Examples: 'runnable', 'blocked'
-	JvmThreadStateKey = attribute.Key("jvm.thread.state")
-)
-
-var (
-	// Heap memory
-	JvmMemoryTypeHeap = JvmMemoryTypeKey.String("heap")
-	// Non-heap memory
-	JvmMemoryTypeNonHeap = JvmMemoryTypeKey.String("non_heap")
-)
-
-var (
-	// A thread that has not yet started is in this state
-	JvmThreadStateNew = JvmThreadStateKey.String("new")
-	// A thread executing in the Java virtual machine is in this state
-	JvmThreadStateRunnable = JvmThreadStateKey.String("runnable")
-	// A thread that is blocked waiting for a monitor lock is in this state
-	JvmThreadStateBlocked = JvmThreadStateKey.String("blocked")
-	// A thread that is waiting indefinitely for another thread to perform a particular action is in this state
-	JvmThreadStateWaiting = JvmThreadStateKey.String("waiting")
-	// A thread that is waiting for another thread to perform an action for up to a specified waiting time is in this state
-	JvmThreadStateTimedWaiting = JvmThreadStateKey.String("timed_waiting")
-	// A thread that has exited is in this state
-	JvmThreadStateTerminated = JvmThreadStateKey.String("terminated")
-)
-
-// JvmBufferPoolName returns an attribute KeyValue conforming to the
-// "jvm.buffer.pool.name" semantic conventions. It represents the name of the
-// buffer pool.
-func JvmBufferPoolName(val string) attribute.KeyValue {
-	return JvmBufferPoolNameKey.String(val)
-}
-
-// JvmGcAction returns an attribute KeyValue conforming to the
-// "jvm.gc.action" semantic conventions. It represents the name of the garbage
-// collector action.
-func JvmGcAction(val string) attribute.KeyValue {
-	return JvmGcActionKey.String(val)
-}
-
-// JvmGcName returns an attribute KeyValue conforming to the "jvm.gc.name"
-// semantic conventions. It represents the name of the garbage collector.
-func JvmGcName(val string) attribute.KeyValue {
-	return JvmGcNameKey.String(val)
-}
-
-// JvmMemoryPoolName returns an attribute KeyValue conforming to the
-// "jvm.memory.pool.name" semantic conventions. It represents the name of the
-// memory pool.
-func JvmMemoryPoolName(val string) attribute.KeyValue {
-	return JvmMemoryPoolNameKey.String(val)
-}
-
-// JvmThreadDaemon returns an attribute KeyValue conforming to the
-// "jvm.thread.daemon" semantic conventions. It represents the whether the
-// thread is daemon or not.
-func JvmThreadDaemon(val bool) attribute.KeyValue {
-	return JvmThreadDaemonKey.Bool(val)
-}
-
-// Kubernetes resource attributes.
-const (
-	// K8SClusterNameKey is the attribute Key conforming to the
-	// "k8s.cluster.name" semantic conventions. It represents the name of the
-	// cluster.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'opentelemetry-cluster'
-	K8SClusterNameKey = attribute.Key("k8s.cluster.name")
-
-	// K8SClusterUIDKey is the attribute Key conforming to the
-	// "k8s.cluster.uid" semantic conventions. It represents a pseudo-ID for
-	// the cluster, set to the UID of the `kube-system` namespace.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: '218fc5a9-a5f1-4b54-aa05-46717d0ab26d'
-	// Note: K8S doesn't have support for obtaining a cluster ID. If this is
-	// ever
-	// added, we will recommend collecting the `k8s.cluster.uid` through the
-	// official APIs. In the meantime, we are able to use the `uid` of the
-	// `kube-system` namespace as a proxy for cluster ID. Read on for the
-	// rationale.
-	//
-	// Every object created in a K8S cluster is assigned a distinct UID. The
-	// `kube-system` namespace is used by Kubernetes itself and will exist
-	// for the lifetime of the cluster. Using the `uid` of the `kube-system`
-	// namespace is a reasonable proxy for the K8S ClusterID as it will only
-	// change if the cluster is rebuilt. Furthermore, Kubernetes UIDs are
-	// UUIDs as standardized by
-	// [ISO/IEC 9834-8 and ITU-T
-	// X.667](https://www.itu.int/ITU-T/studygroups/com17/oid.html).
-	// Which states:
-	//
-	// > If generated according to one of the mechanisms defined in Rec.
-	//   ITU-T X.667 | ISO/IEC 9834-8, a UUID is either guaranteed to be
-	//   different from all other UUIDs generated before 3603 A.D., or is
-	//   extremely likely to be different (depending on the mechanism chosen).
-	//
-	// Therefore, UIDs between clusters should be extremely unlikely to
-	// conflict.
-	K8SClusterUIDKey = attribute.Key("k8s.cluster.uid")
-
-	// K8SContainerNameKey is the attribute Key conforming to the
-	// "k8s.container.name" semantic conventions. It represents the name of the
-	// Container from Pod specification, must be unique within a Pod. Container
-	// runtime usually uses different globally unique name (`container.name`).
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'redis'
-	K8SContainerNameKey = attribute.Key("k8s.container.name")
-
-	// K8SContainerRestartCountKey is the attribute Key conforming to the
-	// "k8s.container.restart_count" semantic conventions. It represents the
-	// number of times the container was restarted. This attribute can be used
-	// to identify a particular container (running or stopped) within a
-	// container spec.
-	//
-	// Type: int
-	// RequirementLevel: Optional
-	// Stability: experimental
-	K8SContainerRestartCountKey = attribute.Key("k8s.container.restart_count")
-
-	// K8SContainerStatusLastTerminatedReasonKey is the attribute Key
-	// conforming to the "k8s.container.status.last_terminated_reason" semantic
-	// conventions. It represents the last terminated reason of the Container.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'Evicted', 'Error'
-	K8SContainerStatusLastTerminatedReasonKey = attribute.Key("k8s.container.status.last_terminated_reason")
-
-	// K8SCronJobNameKey is the attribute Key conforming to the
-	// "k8s.cronjob.name" semantic conventions. It represents the name of the
-	// CronJob.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'opentelemetry'
-	K8SCronJobNameKey = attribute.Key("k8s.cronjob.name")
-
-	// K8SCronJobUIDKey is the attribute Key conforming to the
-	// "k8s.cronjob.uid" semantic conventions. It represents the UID of the
-	// CronJob.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: '275ecb36-5aa8-4c2a-9c47-d8bb681b9aff'
-	K8SCronJobUIDKey = attribute.Key("k8s.cronjob.uid")
-
-	// K8SDaemonSetNameKey is the attribute Key conforming to the
-	// "k8s.daemonset.name" semantic conventions. It represents the name of the
-	// DaemonSet.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'opentelemetry'
-	K8SDaemonSetNameKey = attribute.Key("k8s.daemonset.name")
-
-	// K8SDaemonSetUIDKey is the attribute Key conforming to the
-	// "k8s.daemonset.uid" semantic conventions. It represents the UID of the
-	// DaemonSet.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: '275ecb36-5aa8-4c2a-9c47-d8bb681b9aff'
-	K8SDaemonSetUIDKey = attribute.Key("k8s.daemonset.uid")
-
-	// K8SDeploymentNameKey is the attribute Key conforming to the
-	// "k8s.deployment.name" semantic conventions. It represents the name of
-	// the Deployment.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'opentelemetry'
-	K8SDeploymentNameKey = attribute.Key("k8s.deployment.name")
-
-	// K8SDeploymentUIDKey is the attribute Key conforming to the
-	// "k8s.deployment.uid" semantic conventions. It represents the UID of the
-	// Deployment.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: '275ecb36-5aa8-4c2a-9c47-d8bb681b9aff'
-	K8SDeploymentUIDKey = attribute.Key("k8s.deployment.uid")
-
-	// K8SJobNameKey is the attribute Key conforming to the "k8s.job.name"
-	// semantic conventions. It represents the name of the Job.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'opentelemetry'
-	K8SJobNameKey = attribute.Key("k8s.job.name")
-
-	// K8SJobUIDKey is the attribute Key conforming to the "k8s.job.uid"
-	// semantic conventions. It represents the UID of the Job.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: '275ecb36-5aa8-4c2a-9c47-d8bb681b9aff'
-	K8SJobUIDKey = attribute.Key("k8s.job.uid")
-
-	// K8SNamespaceNameKey is the attribute Key conforming to the
-	// "k8s.namespace.name" semantic conventions. It represents the name of the
-	// namespace that the pod is running in.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'default'
-	K8SNamespaceNameKey = attribute.Key("k8s.namespace.name")
-
-	// K8SNodeNameKey is the attribute Key conforming to the "k8s.node.name"
-	// semantic conventions. It represents the name of the Node.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'node-1'
-	K8SNodeNameKey = attribute.Key("k8s.node.name")
-
-	// K8SNodeUIDKey is the attribute Key conforming to the "k8s.node.uid"
-	// semantic conventions. It represents the UID of the Node.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: '1eb3a0c6-0477-4080-a9cb-0cb7db65c6a2'
-	K8SNodeUIDKey = attribute.Key("k8s.node.uid")
-
-	// K8SPodNameKey is the attribute Key conforming to the "k8s.pod.name"
-	// semantic conventions. It represents the name of the Pod.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'opentelemetry-pod-autoconf'
-	K8SPodNameKey = attribute.Key("k8s.pod.name")
-
-	// K8SPodUIDKey is the attribute Key conforming to the "k8s.pod.uid"
-	// semantic conventions. It represents the UID of the Pod.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: '275ecb36-5aa8-4c2a-9c47-d8bb681b9aff'
-	K8SPodUIDKey = attribute.Key("k8s.pod.uid")
-
-	// K8SReplicaSetNameKey is the attribute Key conforming to the
-	// "k8s.replicaset.name" semantic conventions. It represents the name of
-	// the ReplicaSet.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'opentelemetry'
-	K8SReplicaSetNameKey = attribute.Key("k8s.replicaset.name")
-
-	// K8SReplicaSetUIDKey is the attribute Key conforming to the
-	// "k8s.replicaset.uid" semantic conventions. It represents the UID of the
-	// ReplicaSet.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: '275ecb36-5aa8-4c2a-9c47-d8bb681b9aff'
-	K8SReplicaSetUIDKey = attribute.Key("k8s.replicaset.uid")
-
-	// K8SStatefulSetNameKey is the attribute Key conforming to the
-	// "k8s.statefulset.name" semantic conventions. It represents the name of
-	// the StatefulSet.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'opentelemetry'
-	K8SStatefulSetNameKey = attribute.Key("k8s.statefulset.name")
-
-	// K8SStatefulSetUIDKey is the attribute Key conforming to the
-	// "k8s.statefulset.uid" semantic conventions. It represents the UID of the
-	// StatefulSet.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: '275ecb36-5aa8-4c2a-9c47-d8bb681b9aff'
-	K8SStatefulSetUIDKey = attribute.Key("k8s.statefulset.uid")
-)
-
-// K8SClusterName returns an attribute KeyValue conforming to the
-// "k8s.cluster.name" semantic conventions. It represents the name of the
-// cluster.
-func K8SClusterName(val string) attribute.KeyValue {
-	return K8SClusterNameKey.String(val)
-}
-
-// K8SClusterUID returns an attribute KeyValue conforming to the
-// "k8s.cluster.uid" semantic conventions. It represents a pseudo-ID for the
-// cluster, set to the UID of the `kube-system` namespace.
-func K8SClusterUID(val string) attribute.KeyValue {
-	return K8SClusterUIDKey.String(val)
-}
-
-// K8SContainerName returns an attribute KeyValue conforming to the
-// "k8s.container.name" semantic conventions. It represents the name of the
-// Container from Pod specification, must be unique within a Pod. Container
-// runtime usually uses different globally unique name (`container.name`).
-func K8SContainerName(val string) attribute.KeyValue {
-	return K8SContainerNameKey.String(val)
-}
-
-// K8SContainerRestartCount returns an attribute KeyValue conforming to the
-// "k8s.container.restart_count" semantic conventions. It represents the number
-// of times the container was restarted. This attribute can be used to identify
-// a particular container (running or stopped) within a container spec.
-func K8SContainerRestartCount(val int) attribute.KeyValue {
-	return K8SContainerRestartCountKey.Int(val)
-}
-
-// K8SContainerStatusLastTerminatedReason returns an attribute KeyValue
-// conforming to the "k8s.container.status.last_terminated_reason" semantic
-// conventions. It represents the last terminated reason of the Container.
-func K8SContainerStatusLastTerminatedReason(val string) attribute.KeyValue {
-	return K8SContainerStatusLastTerminatedReasonKey.String(val)
-}
-
-// K8SCronJobName returns an attribute KeyValue conforming to the
-// "k8s.cronjob.name" semantic conventions. It represents the name of the
-// CronJob.
-func K8SCronJobName(val string) attribute.KeyValue {
-	return K8SCronJobNameKey.String(val)
-}
-
-// K8SCronJobUID returns an attribute KeyValue conforming to the
-// "k8s.cronjob.uid" semantic conventions. It represents the UID of the
-// CronJob.
-func K8SCronJobUID(val string) attribute.KeyValue {
-	return K8SCronJobUIDKey.String(val)
-}
-
-// K8SDaemonSetName returns an attribute KeyValue conforming to the
-// "k8s.daemonset.name" semantic conventions. It represents the name of the
-// DaemonSet.
-func K8SDaemonSetName(val string) attribute.KeyValue {
-	return K8SDaemonSetNameKey.String(val)
-}
-
-// K8SDaemonSetUID returns an attribute KeyValue conforming to the
-// "k8s.daemonset.uid" semantic conventions. It represents the UID of the
-// DaemonSet.
-func K8SDaemonSetUID(val string) attribute.KeyValue {
-	return K8SDaemonSetUIDKey.String(val)
-}
-
-// K8SDeploymentName returns an attribute KeyValue conforming to the
-// "k8s.deployment.name" semantic conventions. It represents the name of the
-// Deployment.
-func K8SDeploymentName(val string) attribute.KeyValue {
-	return K8SDeploymentNameKey.String(val)
-}
-
-// K8SDeploymentUID returns an attribute KeyValue conforming to the
-// "k8s.deployment.uid" semantic conventions. It represents the UID of the
-// Deployment.
-func K8SDeploymentUID(val string) attribute.KeyValue {
-	return K8SDeploymentUIDKey.String(val)
-}
-
-// K8SJobName returns an attribute KeyValue conforming to the "k8s.job.name"
-// semantic conventions. It represents the name of the Job.
-func K8SJobName(val string) attribute.KeyValue {
-	return K8SJobNameKey.String(val)
-}
-
-// K8SJobUID returns an attribute KeyValue conforming to the "k8s.job.uid"
-// semantic conventions. It represents the UID of the Job.
-func K8SJobUID(val string) attribute.KeyValue {
-	return K8SJobUIDKey.String(val)
-}
-
-// K8SNamespaceName returns an attribute KeyValue conforming to the
-// "k8s.namespace.name" semantic conventions. It represents the name of the
-// namespace that the pod is running in.
-func K8SNamespaceName(val string) attribute.KeyValue {
-	return K8SNamespaceNameKey.String(val)
-}
-
-// K8SNodeName returns an attribute KeyValue conforming to the
-// "k8s.node.name" semantic conventions. It represents the name of the Node.
-func K8SNodeName(val string) attribute.KeyValue {
-	return K8SNodeNameKey.String(val)
-}
-
-// K8SNodeUID returns an attribute KeyValue conforming to the "k8s.node.uid"
-// semantic conventions. It represents the UID of the Node.
-func K8SNodeUID(val string) attribute.KeyValue {
-	return K8SNodeUIDKey.String(val)
-}
-
-// K8SPodName returns an attribute KeyValue conforming to the "k8s.pod.name"
-// semantic conventions. It represents the name of the Pod.
-func K8SPodName(val string) attribute.KeyValue {
-	return K8SPodNameKey.String(val)
-}
-
-// K8SPodUID returns an attribute KeyValue conforming to the "k8s.pod.uid"
-// semantic conventions. It represents the UID of the Pod.
-func K8SPodUID(val string) attribute.KeyValue {
-	return K8SPodUIDKey.String(val)
-}
-
-// K8SReplicaSetName returns an attribute KeyValue conforming to the
-// "k8s.replicaset.name" semantic conventions. It represents the name of the
-// ReplicaSet.
-func K8SReplicaSetName(val string) attribute.KeyValue {
-	return K8SReplicaSetNameKey.String(val)
-}
-
-// K8SReplicaSetUID returns an attribute KeyValue conforming to the
-// "k8s.replicaset.uid" semantic conventions. It represents the UID of the
-// ReplicaSet.
-func K8SReplicaSetUID(val string) attribute.KeyValue {
-	return K8SReplicaSetUIDKey.String(val)
-}
-
-// K8SStatefulSetName returns an attribute KeyValue conforming to the
-// "k8s.statefulset.name" semantic conventions. It represents the name of the
-// StatefulSet.
-func K8SStatefulSetName(val string) attribute.KeyValue {
-	return K8SStatefulSetNameKey.String(val)
-}
-
-// K8SStatefulSetUID returns an attribute KeyValue conforming to the
-// "k8s.statefulset.uid" semantic conventions. It represents the UID of the
-// StatefulSet.
-func K8SStatefulSetUID(val string) attribute.KeyValue {
-	return K8SStatefulSetUIDKey.String(val)
-}
-
-// Log attributes
-const (
-	// LogIostreamKey is the attribute Key conforming to the "log.iostream"
-	// semantic conventions. It represents the stream associated with the log.
-	// See below for a list of well-known values.
-	//
-	// Type: Enum
-	// RequirementLevel: Optional
-	// Stability: experimental
-	LogIostreamKey = attribute.Key("log.iostream")
-)
-
-var (
-	// Logs from stdout stream
-	LogIostreamStdout = LogIostreamKey.String("stdout")
-	// Events from stderr stream
-	LogIostreamStderr = LogIostreamKey.String("stderr")
-)
-
-// Attributes for a file to which log was emitted.
-const (
-	// LogFileNameKey is the attribute Key conforming to the "log.file.name"
-	// semantic conventions. It represents the basename of the file.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'audit.log'
-	LogFileNameKey = attribute.Key("log.file.name")
-
-	// LogFileNameResolvedKey is the attribute Key conforming to the
-	// "log.file.name_resolved" semantic conventions. It represents the
-	// basename of the file, with symlinks resolved.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'uuid.log'
-	LogFileNameResolvedKey = attribute.Key("log.file.name_resolved")
-
-	// LogFilePathKey is the attribute Key conforming to the "log.file.path"
-	// semantic conventions. It represents the full path to the file.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: '/var/log/mysql/audit.log'
-	LogFilePathKey = attribute.Key("log.file.path")
-
-	// LogFilePathResolvedKey is the attribute Key conforming to the
-	// "log.file.path_resolved" semantic conventions. It represents the full
-	// path to the file, with symlinks resolved.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: '/var/lib/docker/uuid.log'
-	LogFilePathResolvedKey = attribute.Key("log.file.path_resolved")
-)
-
-// LogFileName returns an attribute KeyValue conforming to the
-// "log.file.name" semantic conventions. It represents the basename of the
-// file.
-func LogFileName(val string) attribute.KeyValue {
-	return LogFileNameKey.String(val)
-}
-
-// LogFileNameResolved returns an attribute KeyValue conforming to the
-// "log.file.name_resolved" semantic conventions. It represents the basename of
-// the file, with symlinks resolved.
-func LogFileNameResolved(val string) attribute.KeyValue {
-	return LogFileNameResolvedKey.String(val)
-}
-
-// LogFilePath returns an attribute KeyValue conforming to the
-// "log.file.path" semantic conventions. It represents the full path to the
-// file.
-func LogFilePath(val string) attribute.KeyValue {
-	return LogFilePathKey.String(val)
-}
-
-// LogFilePathResolved returns an attribute KeyValue conforming to the
-// "log.file.path_resolved" semantic conventions. It represents the full path
-// to the file, with symlinks resolved.
-func LogFilePathResolved(val string) attribute.KeyValue {
-	return LogFilePathResolvedKey.String(val)
-}
-
-// The generic attributes that may be used in any Log Record.
-const (
-	// LogRecordUIDKey is the attribute Key conforming to the "log.record.uid"
-	// semantic conventions. It represents a unique identifier for the Log
-	// Record.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: '01ARZ3NDEKTSV4RRFFQ69G5FAV'
-	// Note: If an id is provided, other log records with the same id will be
-	// considered duplicates and can be removed safely. This means, that two
-	// distinguishable log records MUST have different values.
-	// The id MAY be an [Universally Unique Lexicographically Sortable
-	// Identifier (ULID)](https://github.com/ulid/spec), but other identifiers
-	// (e.g. UUID) may be used as needed.
-	LogRecordUIDKey = attribute.Key("log.record.uid")
-)
-
-// LogRecordUID returns an attribute KeyValue conforming to the
-// "log.record.uid" semantic conventions. It represents a unique identifier for
-// the Log Record.
-func LogRecordUID(val string) attribute.KeyValue {
-	return LogRecordUIDKey.String(val)
-}
-
-// Attributes describing telemetry around messaging systems and messaging
-// activities.
-const (
-	// MessagingBatchMessageCountKey is the attribute Key conforming to the
-	// "messaging.batch.message_count" semantic conventions. It represents the
-	// number of messages sent, received, or processed in the scope of the
-	// batching operation.
-	//
-	// Type: int
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 0, 1, 2
-	// Note: Instrumentations SHOULD NOT set `messaging.batch.message_count` on
-	// spans that operate with a single message. When a messaging client
-	// library supports both batch and single-message API for the same
-	// operation, instrumentations SHOULD use `messaging.batch.message_count`
-	// for batching APIs and SHOULD NOT use it for single-message APIs.
-	MessagingBatchMessageCountKey = attribute.Key("messaging.batch.message_count")
-
-	// MessagingClientIDKey is the attribute Key conforming to the
-	// "messaging.client.id" semantic conventions. It represents a unique
-	// identifier for the client that consumes or produces a message.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'client-5', 'myhost@8742@s8083jm'
-	MessagingClientIDKey = attribute.Key("messaging.client.id")
-
-	// MessagingDestinationAnonymousKey is the attribute Key conforming to the
-	// "messaging.destination.anonymous" semantic conventions. It represents a
-	// boolean that is true if the message destination is anonymous (could be
-	// unnamed or have auto-generated name).
-	//
-	// Type: boolean
-	// RequirementLevel: Optional
-	// Stability: experimental
-	MessagingDestinationAnonymousKey = attribute.Key("messaging.destination.anonymous")
-
-	// MessagingDestinationNameKey is the attribute Key conforming to the
-	// "messaging.destination.name" semantic conventions. It represents the
-	// message destination name
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'MyQueue', 'MyTopic'
-	// Note: Destination name SHOULD uniquely identify a specific queue, topic
-	// or other entity within the broker. If
-	// the broker doesn't have such notion, the destination name SHOULD
-	// uniquely identify the broker.
-	MessagingDestinationNameKey = attribute.Key("messaging.destination.name")
-
-	// MessagingDestinationPartitionIDKey is the attribute Key conforming to
-	// the "messaging.destination.partition.id" semantic conventions. It
-	// represents the identifier of the partition messages are sent to or
-	// received from, unique within the `messaging.destination.name`.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: '1'
-	MessagingDestinationPartitionIDKey = attribute.Key("messaging.destination.partition.id")
-
-	// MessagingDestinationTemplateKey is the attribute Key conforming to the
-	// "messaging.destination.template" semantic conventions. It represents the
-	// low cardinality representation of the messaging destination name
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: '/customers/{customerID}'
-	// Note: Destination names could be constructed from templates. An example
-	// would be a destination name involving a user name or product id.
-	// Although the destination name in this case is of high cardinality, the
-	// underlying template is of low cardinality and can be effectively used
-	// for grouping and aggregation.
-	MessagingDestinationTemplateKey = attribute.Key("messaging.destination.template")
-
-	// MessagingDestinationTemporaryKey is the attribute Key conforming to the
-	// "messaging.destination.temporary" semantic conventions. It represents a
-	// boolean that is true if the message destination is temporary and might
-	// not exist anymore after messages are processed.
-	//
-	// Type: boolean
-	// RequirementLevel: Optional
-	// Stability: experimental
-	MessagingDestinationTemporaryKey = attribute.Key("messaging.destination.temporary")
-
-	// MessagingDestinationPublishAnonymousKey is the attribute Key conforming
-	// to the "messaging.destination_publish.anonymous" semantic conventions.
-	// It represents a boolean that is true if the publish message destination
-	// is anonymous (could be unnamed or have auto-generated name).
-	//
-	// Type: boolean
-	// RequirementLevel: Optional
-	// Stability: experimental
-	MessagingDestinationPublishAnonymousKey = attribute.Key("messaging.destination_publish.anonymous")
-
-	// MessagingDestinationPublishNameKey is the attribute Key conforming to
-	// the "messaging.destination_publish.name" semantic conventions. It
-	// represents the name of the original destination the message was
-	// published to
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'MyQueue', 'MyTopic'
-	// Note: The name SHOULD uniquely identify a specific queue, topic, or
-	// other entity within the broker. If
-	// the broker doesn't have such notion, the original destination name
-	// SHOULD uniquely identify the broker.
-	MessagingDestinationPublishNameKey = attribute.Key("messaging.destination_publish.name")
-
-	// MessagingMessageBodySizeKey is the attribute Key conforming to the
-	// "messaging.message.body.size" semantic conventions. It represents the
-	// size of the message body in bytes.
-	//
-	// Type: int
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 1439
-	// Note: This can refer to both the compressed or uncompressed body size.
-	// If both sizes are known, the uncompressed
-	// body size should be used.
-	MessagingMessageBodySizeKey = attribute.Key("messaging.message.body.size")
-
-	// MessagingMessageConversationIDKey is the attribute Key conforming to the
-	// "messaging.message.conversation_id" semantic conventions. It represents
-	// the conversation ID identifying the conversation to which the message
-	// belongs, represented as a string. Sometimes called "Correlation ID".
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'MyConversationID'
-	MessagingMessageConversationIDKey = attribute.Key("messaging.message.conversation_id")
-
-	// MessagingMessageEnvelopeSizeKey is the attribute Key conforming to the
-	// "messaging.message.envelope.size" semantic conventions. It represents
-	// the size of the message body and metadata in bytes.
-	//
-	// Type: int
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 2738
-	// Note: This can refer to both the compressed or uncompressed size. If
-	// both sizes are known, the uncompressed
-	// size should be used.
-	MessagingMessageEnvelopeSizeKey = attribute.Key("messaging.message.envelope.size")
-
-	// MessagingMessageIDKey is the attribute Key conforming to the
-	// "messaging.message.id" semantic conventions. It represents a value used
-	// by the messaging system as an identifier for the message, represented as
-	// a string.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: '452a7c7c7c7048c2f887f61572b18fc2'
-	MessagingMessageIDKey = attribute.Key("messaging.message.id")
-
-	// MessagingOperationNameKey is the attribute Key conforming to the
-	// "messaging.operation.name" semantic conventions. It represents the
-	// system-specific name of the messaging operation.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'ack', 'nack', 'send'
-	MessagingOperationNameKey = attribute.Key("messaging.operation.name")
-
-	// MessagingOperationTypeKey is the attribute Key conforming to the
-	// "messaging.operation.type" semantic conventions. It represents a string
-	// identifying the type of the messaging operation.
-	//
-	// Type: Enum
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Note: If a custom value is used, it MUST be of low cardinality.
-	MessagingOperationTypeKey = attribute.Key("messaging.operation.type")
-
-	// MessagingSystemKey is the attribute Key conforming to the
-	// "messaging.system" semantic conventions. It represents the messaging
-	// system as identified by the client instrumentation.
-	//
-	// Type: Enum
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Note: The actual messaging system may differ from the one known by the
-	// client. For example, when using Kafka client libraries to communicate
-	// with Azure Event Hubs, the `messaging.system` is set to `kafka` based on
-	// the instrumentation's best knowledge.
-	MessagingSystemKey = attribute.Key("messaging.system")
-)
-
-var (
-	// One or more messages are provided for publishing to an intermediary. If a single message is published, the context of the "Publish" span can be used as the creation context and no "Create" span needs to be created
-	MessagingOperationTypePublish = MessagingOperationTypeKey.String("publish")
-	// A message is created. "Create" spans always refer to a single message and are used to provide a unique creation context for messages in batch publishing scenarios
-	MessagingOperationTypeCreate = MessagingOperationTypeKey.String("create")
-	// One or more messages are requested by a consumer. This operation refers to pull-based scenarios, where consumers explicitly call methods of messaging SDKs to receive messages
-	MessagingOperationTypeReceive = MessagingOperationTypeKey.String("receive")
-	// One or more messages are delivered to or processed by a consumer
-	MessagingOperationTypeDeliver = MessagingOperationTypeKey.String("process")
-	// One or more messages are settled
-	MessagingOperationTypeSettle = MessagingOperationTypeKey.String("settle")
-)
-
-var (
-	// Apache ActiveMQ
-	MessagingSystemActivemq = MessagingSystemKey.String("activemq")
-	// Amazon Simple Queue Service (SQS)
-	MessagingSystemAWSSqs = MessagingSystemKey.String("aws_sqs")
-	// Azure Event Grid
-	MessagingSystemEventgrid = MessagingSystemKey.String("eventgrid")
-	// Azure Event Hubs
-	MessagingSystemEventhubs = MessagingSystemKey.String("eventhubs")
-	// Azure Service Bus
-	MessagingSystemServicebus = MessagingSystemKey.String("servicebus")
-	// Google Cloud Pub/Sub
-	MessagingSystemGCPPubsub = MessagingSystemKey.String("gcp_pubsub")
-	// Java Message Service
-	MessagingSystemJms = MessagingSystemKey.String("jms")
-	// Apache Kafka
-	MessagingSystemKafka = MessagingSystemKey.String("kafka")
-	// RabbitMQ
-	MessagingSystemRabbitmq = MessagingSystemKey.String("rabbitmq")
-	// Apache RocketMQ
-	MessagingSystemRocketmq = MessagingSystemKey.String("rocketmq")
-)
-
-// MessagingBatchMessageCount returns an attribute KeyValue conforming to
-// the "messaging.batch.message_count" semantic conventions. It represents the
-// number of messages sent, received, or processed in the scope of the batching
-// operation.
-func MessagingBatchMessageCount(val int) attribute.KeyValue {
-	return MessagingBatchMessageCountKey.Int(val)
-}
-
-// MessagingClientID returns an attribute KeyValue conforming to the
-// "messaging.client.id" semantic conventions. It represents a unique
-// identifier for the client that consumes or produces a message.
-func MessagingClientID(val string) attribute.KeyValue {
-	return MessagingClientIDKey.String(val)
-}
-
-// MessagingDestinationAnonymous returns an attribute KeyValue conforming to
-// the "messaging.destination.anonymous" semantic conventions. It represents a
-// boolean that is true if the message destination is anonymous (could be
-// unnamed or have auto-generated name).
-func MessagingDestinationAnonymous(val bool) attribute.KeyValue {
-	return MessagingDestinationAnonymousKey.Bool(val)
-}
-
-// MessagingDestinationName returns an attribute KeyValue conforming to the
-// "messaging.destination.name" semantic conventions. It represents the message
-// destination name
-func MessagingDestinationName(val string) attribute.KeyValue {
-	return MessagingDestinationNameKey.String(val)
-}
-
-// MessagingDestinationPartitionID returns an attribute KeyValue conforming
-// to the "messaging.destination.partition.id" semantic conventions. It
-// represents the identifier of the partition messages are sent to or received
-// from, unique within the `messaging.destination.name`.
-func MessagingDestinationPartitionID(val string) attribute.KeyValue {
-	return MessagingDestinationPartitionIDKey.String(val)
-}
-
-// MessagingDestinationTemplate returns an attribute KeyValue conforming to
-// the "messaging.destination.template" semantic conventions. It represents the
-// low cardinality representation of the messaging destination name
-func MessagingDestinationTemplate(val string) attribute.KeyValue {
-	return MessagingDestinationTemplateKey.String(val)
-}
-
-// MessagingDestinationTemporary returns an attribute KeyValue conforming to
-// the "messaging.destination.temporary" semantic conventions. It represents a
-// boolean that is true if the message destination is temporary and might not
-// exist anymore after messages are processed.
-func MessagingDestinationTemporary(val bool) attribute.KeyValue {
-	return MessagingDestinationTemporaryKey.Bool(val)
-}
-
-// MessagingDestinationPublishAnonymous returns an attribute KeyValue
-// conforming to the "messaging.destination_publish.anonymous" semantic
-// conventions. It represents a boolean that is true if the publish message
-// destination is anonymous (could be unnamed or have auto-generated name).
-func MessagingDestinationPublishAnonymous(val bool) attribute.KeyValue {
-	return MessagingDestinationPublishAnonymousKey.Bool(val)
-}
-
-// MessagingDestinationPublishName returns an attribute KeyValue conforming
-// to the "messaging.destination_publish.name" semantic conventions. It
-// represents the name of the original destination the message was published to
-func MessagingDestinationPublishName(val string) attribute.KeyValue {
-	return MessagingDestinationPublishNameKey.String(val)
-}
-
-// MessagingMessageBodySize returns an attribute KeyValue conforming to the
-// "messaging.message.body.size" semantic conventions. It represents the size
-// of the message body in bytes.
-func MessagingMessageBodySize(val int) attribute.KeyValue {
-	return MessagingMessageBodySizeKey.Int(val)
-}
-
-// MessagingMessageConversationID returns an attribute KeyValue conforming
-// to the "messaging.message.conversation_id" semantic conventions. It
-// represents the conversation ID identifying the conversation to which the
-// message belongs, represented as a string. Sometimes called "Correlation ID".
-func MessagingMessageConversationID(val string) attribute.KeyValue {
-	return MessagingMessageConversationIDKey.String(val)
-}
-
-// MessagingMessageEnvelopeSize returns an attribute KeyValue conforming to
-// the "messaging.message.envelope.size" semantic conventions. It represents
-// the size of the message body and metadata in bytes.
-func MessagingMessageEnvelopeSize(val int) attribute.KeyValue {
-	return MessagingMessageEnvelopeSizeKey.Int(val)
-}
-
-// MessagingMessageID returns an attribute KeyValue conforming to the
-// "messaging.message.id" semantic conventions. It represents a value used by
-// the messaging system as an identifier for the message, represented as a
-// string.
-func MessagingMessageID(val string) attribute.KeyValue {
-	return MessagingMessageIDKey.String(val)
-}
-
-// MessagingOperationName returns an attribute KeyValue conforming to the
-// "messaging.operation.name" semantic conventions. It represents the
-// system-specific name of the messaging operation.
-func MessagingOperationName(val string) attribute.KeyValue {
-	return MessagingOperationNameKey.String(val)
-}
-
-// This group describes attributes specific to Apache Kafka.
-const (
-	// MessagingKafkaConsumerGroupKey is the attribute Key conforming to the
-	// "messaging.kafka.consumer.group" semantic conventions. It represents the
-	// name of the Kafka Consumer Group that is handling the message. Only
-	// applies to consumers, not producers.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'my-group'
-	MessagingKafkaConsumerGroupKey = attribute.Key("messaging.kafka.consumer.group")
-
-	// MessagingKafkaMessageKeyKey is the attribute Key conforming to the
-	// "messaging.kafka.message.key" semantic conventions. It represents the
-	// message keys in Kafka are used for grouping alike messages to ensure
-	// they're processed on the same partition. They differ from
-	// `messaging.message.id` in that they're not unique. If the key is `null`,
-	// the attribute MUST NOT be set.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'myKey'
-	// Note: If the key type is not string, it's string representation has to
-	// be supplied for the attribute. If the key has no unambiguous, canonical
-	// string form, don't include its value.
-	MessagingKafkaMessageKeyKey = attribute.Key("messaging.kafka.message.key")
-
-	// MessagingKafkaMessageOffsetKey is the attribute Key conforming to the
-	// "messaging.kafka.message.offset" semantic conventions. It represents the
-	// offset of a record in the corresponding Kafka partition.
-	//
-	// Type: int
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 42
-	MessagingKafkaMessageOffsetKey = attribute.Key("messaging.kafka.message.offset")
-
-	// MessagingKafkaMessageTombstoneKey is the attribute Key conforming to the
-	// "messaging.kafka.message.tombstone" semantic conventions. It represents
-	// a boolean that is true if the message is a tombstone.
-	//
-	// Type: boolean
-	// RequirementLevel: Optional
-	// Stability: experimental
-	MessagingKafkaMessageTombstoneKey = attribute.Key("messaging.kafka.message.tombstone")
-)
-
-// MessagingKafkaConsumerGroup returns an attribute KeyValue conforming to
-// the "messaging.kafka.consumer.group" semantic conventions. It represents the
-// name of the Kafka Consumer Group that is handling the message. Only applies
-// to consumers, not producers.
-func MessagingKafkaConsumerGroup(val string) attribute.KeyValue {
-	return MessagingKafkaConsumerGroupKey.String(val)
-}
-
-// MessagingKafkaMessageKey returns an attribute KeyValue conforming to the
-// "messaging.kafka.message.key" semantic conventions. It represents the
-// message keys in Kafka are used for grouping alike messages to ensure they're
-// processed on the same partition. They differ from `messaging.message.id` in
-// that they're not unique. If the key is `null`, the attribute MUST NOT be
-// set.
-func MessagingKafkaMessageKey(val string) attribute.KeyValue {
-	return MessagingKafkaMessageKeyKey.String(val)
-}
-
-// MessagingKafkaMessageOffset returns an attribute KeyValue conforming to
-// the "messaging.kafka.message.offset" semantic conventions. It represents the
-// offset of a record in the corresponding Kafka partition.
-func MessagingKafkaMessageOffset(val int) attribute.KeyValue {
-	return MessagingKafkaMessageOffsetKey.Int(val)
-}
-
-// MessagingKafkaMessageTombstone returns an attribute KeyValue conforming
-// to the "messaging.kafka.message.tombstone" semantic conventions. It
-// represents a boolean that is true if the message is a tombstone.
-func MessagingKafkaMessageTombstone(val bool) attribute.KeyValue {
-	return MessagingKafkaMessageTombstoneKey.Bool(val)
-}
-
-// This group describes attributes specific to RabbitMQ.
-const (
-	// MessagingRabbitmqDestinationRoutingKeyKey is the attribute Key
-	// conforming to the "messaging.rabbitmq.destination.routing_key" semantic
-	// conventions. It represents the rabbitMQ message routing key.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'myKey'
-	MessagingRabbitmqDestinationRoutingKeyKey = attribute.Key("messaging.rabbitmq.destination.routing_key")
-
-	// MessagingRabbitmqMessageDeliveryTagKey is the attribute Key conforming
-	// to the "messaging.rabbitmq.message.delivery_tag" semantic conventions.
-	// It represents the rabbitMQ message delivery tag
-	//
-	// Type: int
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 123
-	MessagingRabbitmqMessageDeliveryTagKey = attribute.Key("messaging.rabbitmq.message.delivery_tag")
-)
-
-// MessagingRabbitmqDestinationRoutingKey returns an attribute KeyValue
-// conforming to the "messaging.rabbitmq.destination.routing_key" semantic
-// conventions. It represents the rabbitMQ message routing key.
-func MessagingRabbitmqDestinationRoutingKey(val string) attribute.KeyValue {
-	return MessagingRabbitmqDestinationRoutingKeyKey.String(val)
-}
-
-// MessagingRabbitmqMessageDeliveryTag returns an attribute KeyValue
-// conforming to the "messaging.rabbitmq.message.delivery_tag" semantic
-// conventions. It represents the rabbitMQ message delivery tag
-func MessagingRabbitmqMessageDeliveryTag(val int) attribute.KeyValue {
-	return MessagingRabbitmqMessageDeliveryTagKey.Int(val)
-}
-
-// This group describes attributes specific to RocketMQ.
-const (
-	// MessagingRocketmqClientGroupKey is the attribute Key conforming to the
-	// "messaging.rocketmq.client_group" semantic conventions. It represents
-	// the name of the RocketMQ producer/consumer group that is handling the
-	// message. The client type is identified by the SpanKind.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'myConsumerGroup'
-	MessagingRocketmqClientGroupKey = attribute.Key("messaging.rocketmq.client_group")
-
-	// MessagingRocketmqConsumptionModelKey is the attribute Key conforming to
-	// the "messaging.rocketmq.consumption_model" semantic conventions. It
-	// represents the model of message consumption. This only applies to
-	// consumer spans.
-	//
-	// Type: Enum
-	// RequirementLevel: Optional
-	// Stability: experimental
-	MessagingRocketmqConsumptionModelKey = attribute.Key("messaging.rocketmq.consumption_model")
-
-	// MessagingRocketmqMessageDelayTimeLevelKey is the attribute Key
-	// conforming to the "messaging.rocketmq.message.delay_time_level" semantic
-	// conventions. It represents the delay time level for delay message, which
-	// determines the message delay time.
-	//
-	// Type: int
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 3
-	MessagingRocketmqMessageDelayTimeLevelKey = attribute.Key("messaging.rocketmq.message.delay_time_level")
-
-	// MessagingRocketmqMessageDeliveryTimestampKey is the attribute Key
-	// conforming to the "messaging.rocketmq.message.delivery_timestamp"
-	// semantic conventions. It represents the timestamp in milliseconds that
-	// the delay message is expected to be delivered to consumer.
-	//
-	// Type: int
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 1665987217045
-	MessagingRocketmqMessageDeliveryTimestampKey = attribute.Key("messaging.rocketmq.message.delivery_timestamp")
-
-	// MessagingRocketmqMessageGroupKey is the attribute Key conforming to the
-	// "messaging.rocketmq.message.group" semantic conventions. It represents
-	// the it is essential for FIFO message. Messages that belong to the same
-	// message group are always processed one by one within the same consumer
-	// group.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'myMessageGroup'
-	MessagingRocketmqMessageGroupKey = attribute.Key("messaging.rocketmq.message.group")
-
-	// MessagingRocketmqMessageKeysKey is the attribute Key conforming to the
-	// "messaging.rocketmq.message.keys" semantic conventions. It represents
-	// the key(s) of message, another way to mark message besides message id.
-	//
-	// Type: string[]
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'keyA', 'keyB'
-	MessagingRocketmqMessageKeysKey = attribute.Key("messaging.rocketmq.message.keys")
-
-	// MessagingRocketmqMessageTagKey is the attribute Key conforming to the
-	// "messaging.rocketmq.message.tag" semantic conventions. It represents the
-	// secondary classifier of message besides topic.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'tagA'
-	MessagingRocketmqMessageTagKey = attribute.Key("messaging.rocketmq.message.tag")
-
-	// MessagingRocketmqMessageTypeKey is the attribute Key conforming to the
-	// "messaging.rocketmq.message.type" semantic conventions. It represents
-	// the type of message.
-	//
-	// Type: Enum
-	// RequirementLevel: Optional
-	// Stability: experimental
-	MessagingRocketmqMessageTypeKey = attribute.Key("messaging.rocketmq.message.type")
-
-	// MessagingRocketmqNamespaceKey is the attribute Key conforming to the
-	// "messaging.rocketmq.namespace" semantic conventions. It represents the
-	// namespace of RocketMQ resources, resources in different namespaces are
-	// individual.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'myNamespace'
-	MessagingRocketmqNamespaceKey = attribute.Key("messaging.rocketmq.namespace")
-)
-
-var (
-	// Clustering consumption model
-	MessagingRocketmqConsumptionModelClustering = MessagingRocketmqConsumptionModelKey.String("clustering")
-	// Broadcasting consumption model
-	MessagingRocketmqConsumptionModelBroadcasting = MessagingRocketmqConsumptionModelKey.String("broadcasting")
-)
-
-var (
-	// Normal message
-	MessagingRocketmqMessageTypeNormal = MessagingRocketmqMessageTypeKey.String("normal")
-	// FIFO message
-	MessagingRocketmqMessageTypeFifo = MessagingRocketmqMessageTypeKey.String("fifo")
-	// Delay message
-	MessagingRocketmqMessageTypeDelay = MessagingRocketmqMessageTypeKey.String("delay")
-	// Transaction message
-	MessagingRocketmqMessageTypeTransaction = MessagingRocketmqMessageTypeKey.String("transaction")
-)
-
-// MessagingRocketmqClientGroup returns an attribute KeyValue conforming to
-// the "messaging.rocketmq.client_group" semantic conventions. It represents
-// the name of the RocketMQ producer/consumer group that is handling the
-// message. The client type is identified by the SpanKind.
-func MessagingRocketmqClientGroup(val string) attribute.KeyValue {
-	return MessagingRocketmqClientGroupKey.String(val)
-}
-
-// MessagingRocketmqMessageDelayTimeLevel returns an attribute KeyValue
-// conforming to the "messaging.rocketmq.message.delay_time_level" semantic
-// conventions. It represents the delay time level for delay message, which
-// determines the message delay time.
-func MessagingRocketmqMessageDelayTimeLevel(val int) attribute.KeyValue {
-	return MessagingRocketmqMessageDelayTimeLevelKey.Int(val)
-}
-
-// MessagingRocketmqMessageDeliveryTimestamp returns an attribute KeyValue
-// conforming to the "messaging.rocketmq.message.delivery_timestamp" semantic
-// conventions. It represents the timestamp in milliseconds that the delay
-// message is expected to be delivered to consumer.
-func MessagingRocketmqMessageDeliveryTimestamp(val int) attribute.KeyValue {
-	return MessagingRocketmqMessageDeliveryTimestampKey.Int(val)
-}
-
-// MessagingRocketmqMessageGroup returns an attribute KeyValue conforming to
-// the "messaging.rocketmq.message.group" semantic conventions. It represents
-// the it is essential for FIFO message. Messages that belong to the same
-// message group are always processed one by one within the same consumer
-// group.
-func MessagingRocketmqMessageGroup(val string) attribute.KeyValue {
-	return MessagingRocketmqMessageGroupKey.String(val)
-}
-
-// MessagingRocketmqMessageKeys returns an attribute KeyValue conforming to
-// the "messaging.rocketmq.message.keys" semantic conventions. It represents
-// the key(s) of message, another way to mark message besides message id.
-func MessagingRocketmqMessageKeys(val ...string) attribute.KeyValue {
-	return MessagingRocketmqMessageKeysKey.StringSlice(val)
-}
-
-// MessagingRocketmqMessageTag returns an attribute KeyValue conforming to
-// the "messaging.rocketmq.message.tag" semantic conventions. It represents the
-// secondary classifier of message besides topic.
-func MessagingRocketmqMessageTag(val string) attribute.KeyValue {
-	return MessagingRocketmqMessageTagKey.String(val)
-}
-
-// MessagingRocketmqNamespace returns an attribute KeyValue conforming to
-// the "messaging.rocketmq.namespace" semantic conventions. It represents the
-// namespace of RocketMQ resources, resources in different namespaces are
-// individual.
-func MessagingRocketmqNamespace(val string) attribute.KeyValue {
-	return MessagingRocketmqNamespaceKey.String(val)
-}
-
-// This group describes attributes specific to GCP Pub/Sub.
-const (
-	// MessagingGCPPubsubMessageAckDeadlineKey is the attribute Key conforming
-	// to the "messaging.gcp_pubsub.message.ack_deadline" semantic conventions.
-	// It represents the ack deadline in seconds set for the modify ack
-	// deadline request.
-	//
-	// Type: int
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 10
-	MessagingGCPPubsubMessageAckDeadlineKey = attribute.Key("messaging.gcp_pubsub.message.ack_deadline")
-
-	// MessagingGCPPubsubMessageAckIDKey is the attribute Key conforming to the
-	// "messaging.gcp_pubsub.message.ack_id" semantic conventions. It
-	// represents the ack id for a given message.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'ack_id'
-	MessagingGCPPubsubMessageAckIDKey = attribute.Key("messaging.gcp_pubsub.message.ack_id")
-
-	// MessagingGCPPubsubMessageDeliveryAttemptKey is the attribute Key
-	// conforming to the "messaging.gcp_pubsub.message.delivery_attempt"
-	// semantic conventions. It represents the delivery attempt for a given
-	// message.
-	//
-	// Type: int
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 2
-	MessagingGCPPubsubMessageDeliveryAttemptKey = attribute.Key("messaging.gcp_pubsub.message.delivery_attempt")
-
-	// MessagingGCPPubsubMessageOrderingKeyKey is the attribute Key conforming
-	// to the "messaging.gcp_pubsub.message.ordering_key" semantic conventions.
-	// It represents the ordering key for a given message. If the attribute is
-	// not present, the message does not have an ordering key.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'ordering_key'
-	MessagingGCPPubsubMessageOrderingKeyKey = attribute.Key("messaging.gcp_pubsub.message.ordering_key")
-)
-
-// MessagingGCPPubsubMessageAckDeadline returns an attribute KeyValue
-// conforming to the "messaging.gcp_pubsub.message.ack_deadline" semantic
-// conventions. It represents the ack deadline in seconds set for the modify
-// ack deadline request.
-func MessagingGCPPubsubMessageAckDeadline(val int) attribute.KeyValue {
-	return MessagingGCPPubsubMessageAckDeadlineKey.Int(val)
-}
-
-// MessagingGCPPubsubMessageAckID returns an attribute KeyValue conforming
-// to the "messaging.gcp_pubsub.message.ack_id" semantic conventions. It
-// represents the ack id for a given message.
-func MessagingGCPPubsubMessageAckID(val string) attribute.KeyValue {
-	return MessagingGCPPubsubMessageAckIDKey.String(val)
-}
-
-// MessagingGCPPubsubMessageDeliveryAttempt returns an attribute KeyValue
-// conforming to the "messaging.gcp_pubsub.message.delivery_attempt" semantic
-// conventions. It represents the delivery attempt for a given message.
-func MessagingGCPPubsubMessageDeliveryAttempt(val int) attribute.KeyValue {
-	return MessagingGCPPubsubMessageDeliveryAttemptKey.Int(val)
-}
-
-// MessagingGCPPubsubMessageOrderingKey returns an attribute KeyValue
-// conforming to the "messaging.gcp_pubsub.message.ordering_key" semantic
-// conventions. It represents the ordering key for a given message. If the
-// attribute is not present, the message does not have an ordering key.
-func MessagingGCPPubsubMessageOrderingKey(val string) attribute.KeyValue {
-	return MessagingGCPPubsubMessageOrderingKeyKey.String(val)
-}
-
-// This group describes attributes specific to Azure Service Bus.
-const (
-	// MessagingServicebusDestinationSubscriptionNameKey is the attribute Key
-	// conforming to the "messaging.servicebus.destination.subscription_name"
-	// semantic conventions. It represents the name of the subscription in the
-	// topic messages are received from.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'mySubscription'
-	MessagingServicebusDestinationSubscriptionNameKey = attribute.Key("messaging.servicebus.destination.subscription_name")
-
-	// MessagingServicebusDispositionStatusKey is the attribute Key conforming
-	// to the "messaging.servicebus.disposition_status" semantic conventions.
-	// It represents the describes the [settlement
-	// type](https://learn.microsoft.com/azure/service-bus-messaging/message-transfers-locks-settlement#peeklock).
-	//
-	// Type: Enum
-	// RequirementLevel: Optional
-	// Stability: experimental
-	MessagingServicebusDispositionStatusKey = attribute.Key("messaging.servicebus.disposition_status")
-
-	// MessagingServicebusMessageDeliveryCountKey is the attribute Key
-	// conforming to the "messaging.servicebus.message.delivery_count" semantic
-	// conventions. It represents the number of deliveries that have been
-	// attempted for this message.
-	//
-	// Type: int
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 2
-	MessagingServicebusMessageDeliveryCountKey = attribute.Key("messaging.servicebus.message.delivery_count")
-
-	// MessagingServicebusMessageEnqueuedTimeKey is the attribute Key
-	// conforming to the "messaging.servicebus.message.enqueued_time" semantic
-	// conventions. It represents the UTC epoch seconds at which the message
-	// has been accepted and stored in the entity.
-	//
-	// Type: int
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 1701393730
-	MessagingServicebusMessageEnqueuedTimeKey = attribute.Key("messaging.servicebus.message.enqueued_time")
-)
-
-var (
-	// Message is completed
-	MessagingServicebusDispositionStatusComplete = MessagingServicebusDispositionStatusKey.String("complete")
-	// Message is abandoned
-	MessagingServicebusDispositionStatusAbandon = MessagingServicebusDispositionStatusKey.String("abandon")
-	// Message is sent to dead letter queue
-	MessagingServicebusDispositionStatusDeadLetter = MessagingServicebusDispositionStatusKey.String("dead_letter")
-	// Message is deferred
-	MessagingServicebusDispositionStatusDefer = MessagingServicebusDispositionStatusKey.String("defer")
-)
-
-// MessagingServicebusDestinationSubscriptionName returns an attribute
-// KeyValue conforming to the
-// "messaging.servicebus.destination.subscription_name" semantic conventions.
-// It represents the name of the subscription in the topic messages are
-// received from.
-func MessagingServicebusDestinationSubscriptionName(val string) attribute.KeyValue {
-	return MessagingServicebusDestinationSubscriptionNameKey.String(val)
-}
-
-// MessagingServicebusMessageDeliveryCount returns an attribute KeyValue
-// conforming to the "messaging.servicebus.message.delivery_count" semantic
-// conventions. It represents the number of deliveries that have been attempted
-// for this message.
-func MessagingServicebusMessageDeliveryCount(val int) attribute.KeyValue {
-	return MessagingServicebusMessageDeliveryCountKey.Int(val)
-}
-
-// MessagingServicebusMessageEnqueuedTime returns an attribute KeyValue
-// conforming to the "messaging.servicebus.message.enqueued_time" semantic
-// conventions. It represents the UTC epoch seconds at which the message has
-// been accepted and stored in the entity.
-func MessagingServicebusMessageEnqueuedTime(val int) attribute.KeyValue {
-	return MessagingServicebusMessageEnqueuedTimeKey.Int(val)
-}
-
-// This group describes attributes specific to Azure Event Hubs.
-const (
-	// MessagingEventhubsConsumerGroupKey is the attribute Key conforming to
-	// the "messaging.eventhubs.consumer.group" semantic conventions. It
-	// represents the name of the consumer group the event consumer is
-	// associated with.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'indexer'
-	MessagingEventhubsConsumerGroupKey = attribute.Key("messaging.eventhubs.consumer.group")
-
-	// MessagingEventhubsMessageEnqueuedTimeKey is the attribute Key conforming
-	// to the "messaging.eventhubs.message.enqueued_time" semantic conventions.
-	// It represents the UTC epoch seconds at which the message has been
-	// accepted and stored in the entity.
-	//
-	// Type: int
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 1701393730
-	MessagingEventhubsMessageEnqueuedTimeKey = attribute.Key("messaging.eventhubs.message.enqueued_time")
-)
-
-// MessagingEventhubsConsumerGroup returns an attribute KeyValue conforming
-// to the "messaging.eventhubs.consumer.group" semantic conventions. It
-// represents the name of the consumer group the event consumer is associated
-// with.
-func MessagingEventhubsConsumerGroup(val string) attribute.KeyValue {
-	return MessagingEventhubsConsumerGroupKey.String(val)
-}
-
-// MessagingEventhubsMessageEnqueuedTime returns an attribute KeyValue
-// conforming to the "messaging.eventhubs.message.enqueued_time" semantic
-// conventions. It represents the UTC epoch seconds at which the message has
-// been accepted and stored in the entity.
-func MessagingEventhubsMessageEnqueuedTime(val int) attribute.KeyValue {
-	return MessagingEventhubsMessageEnqueuedTimeKey.Int(val)
-}
-
-// These attributes may be used for any network related operation.
-const (
-	// NetworkCarrierIccKey is the attribute Key conforming to the
-	// "network.carrier.icc" semantic conventions. It represents the ISO 3166-1
-	// alpha-2 2-character country code associated with the mobile carrier
-	// network.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'DE'
-	NetworkCarrierIccKey = attribute.Key("network.carrier.icc")
-
-	// NetworkCarrierMccKey is the attribute Key conforming to the
-	// "network.carrier.mcc" semantic conventions. It represents the mobile
-	// carrier country code.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: '310'
-	NetworkCarrierMccKey = attribute.Key("network.carrier.mcc")
-
-	// NetworkCarrierMncKey is the attribute Key conforming to the
-	// "network.carrier.mnc" semantic conventions. It represents the mobile
-	// carrier network code.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: '001'
-	NetworkCarrierMncKey = attribute.Key("network.carrier.mnc")
-
-	// NetworkCarrierNameKey is the attribute Key conforming to the
-	// "network.carrier.name" semantic conventions. It represents the name of
-	// the mobile carrier.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'sprint'
-	NetworkCarrierNameKey = attribute.Key("network.carrier.name")
-
-	// NetworkConnectionSubtypeKey is the attribute Key conforming to the
-	// "network.connection.subtype" semantic conventions. It represents the
-	// this describes more details regarding the connection.type. It may be the
-	// type of cell technology connection, but it could be used for describing
-	// details about a wifi connection.
-	//
-	// Type: Enum
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'LTE'
-	NetworkConnectionSubtypeKey = attribute.Key("network.connection.subtype")
-
-	// NetworkConnectionTypeKey is the attribute Key conforming to the
-	// "network.connection.type" semantic conventions. It represents the
-	// internet connection type.
-	//
-	// Type: Enum
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'wifi'
-	NetworkConnectionTypeKey = attribute.Key("network.connection.type")
-
-	// NetworkIoDirectionKey is the attribute Key conforming to the
-	// "network.io.direction" semantic conventions. It represents the network
-	// IO operation direction.
-	//
-	// Type: Enum
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'transmit'
-	NetworkIoDirectionKey = attribute.Key("network.io.direction")
-
-	// NetworkLocalAddressKey is the attribute Key conforming to the
-	// "network.local.address" semantic conventions. It represents the local
-	// address of the network connection - IP address or Unix domain socket
-	// name.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: stable
-	// Examples: '10.1.2.80', '/tmp/my.sock'
-	NetworkLocalAddressKey = attribute.Key("network.local.address")
-
-	// NetworkLocalPortKey is the attribute Key conforming to the
-	// "network.local.port" semantic conventions. It represents the local port
-	// number of the network connection.
-	//
-	// Type: int
-	// RequirementLevel: Optional
-	// Stability: stable
-	// Examples: 65123
-	NetworkLocalPortKey = attribute.Key("network.local.port")
-
-	// NetworkPeerAddressKey is the attribute Key conforming to the
-	// "network.peer.address" semantic conventions. It represents the peer
-	// address of the network connection - IP address or Unix domain socket
-	// name.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: stable
-	// Examples: '10.1.2.80', '/tmp/my.sock'
-	NetworkPeerAddressKey = attribute.Key("network.peer.address")
-
-	// NetworkPeerPortKey is the attribute Key conforming to the
-	// "network.peer.port" semantic conventions. It represents the peer port
-	// number of the network connection.
-	//
-	// Type: int
-	// RequirementLevel: Optional
-	// Stability: stable
-	// Examples: 65123
-	NetworkPeerPortKey = attribute.Key("network.peer.port")
-
-	// NetworkProtocolNameKey is the attribute Key conforming to the
-	// "network.protocol.name" semantic conventions. It represents the [OSI
-	// application layer](https://osi-model.com/application-layer/) or non-OSI
-	// equivalent.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: stable
-	// Examples: 'amqp', 'http', 'mqtt'
-	// Note: The value SHOULD be normalized to lowercase.
-	NetworkProtocolNameKey = attribute.Key("network.protocol.name")
-
-	// NetworkProtocolVersionKey is the attribute Key conforming to the
-	// "network.protocol.version" semantic conventions. It represents the
-	// actual version of the protocol used for network communication.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: stable
-	// Examples: '1.1', '2'
-	// Note: If protocol version is subject to negotiation (for example using
-	// [ALPN](https://www.rfc-editor.org/rfc/rfc7301.html)), this attribute
-	// SHOULD be set to the negotiated version. If the actual protocol version
-	// is not known, this attribute SHOULD NOT be set.
-	NetworkProtocolVersionKey = attribute.Key("network.protocol.version")
-
-	// NetworkTransportKey is the attribute Key conforming to the
-	// "network.transport" semantic conventions. It represents the [OSI
-	// transport layer](https://osi-model.com/transport-layer/) or
-	// [inter-process communication
-	// method](https://wikipedia.org/wiki/Inter-process_communication).
-	//
-	// Type: Enum
-	// RequirementLevel: Optional
-	// Stability: stable
-	// Examples: 'tcp', 'udp'
-	// Note: The value SHOULD be normalized to lowercase.
-	//
-	// Consider always setting the transport when setting a port number, since
-	// a port number is ambiguous without knowing the transport. For example
-	// different processes could be listening on TCP port 12345 and UDP port
-	// 12345.
-	NetworkTransportKey = attribute.Key("network.transport")
-
-	// NetworkTypeKey is the attribute Key conforming to the "network.type"
-	// semantic conventions. It represents the [OSI network
-	// layer](https://osi-model.com/network-layer/) or non-OSI equivalent.
-	//
-	// Type: Enum
-	// RequirementLevel: Optional
-	// Stability: stable
-	// Examples: 'ipv4', 'ipv6'
-	// Note: The value SHOULD be normalized to lowercase.
-	NetworkTypeKey = attribute.Key("network.type")
-)
-
-var (
-	// GPRS
-	NetworkConnectionSubtypeGprs = NetworkConnectionSubtypeKey.String("gprs")
-	// EDGE
-	NetworkConnectionSubtypeEdge = NetworkConnectionSubtypeKey.String("edge")
-	// UMTS
-	NetworkConnectionSubtypeUmts = NetworkConnectionSubtypeKey.String("umts")
-	// CDMA
-	NetworkConnectionSubtypeCdma = NetworkConnectionSubtypeKey.String("cdma")
-	// EVDO Rel. 0
-	NetworkConnectionSubtypeEvdo0 = NetworkConnectionSubtypeKey.String("evdo_0")
-	// EVDO Rev. A
-	NetworkConnectionSubtypeEvdoA = NetworkConnectionSubtypeKey.String("evdo_a")
-	// CDMA2000 1XRTT
-	NetworkConnectionSubtypeCdma20001xrtt = NetworkConnectionSubtypeKey.String("cdma2000_1xrtt")
-	// HSDPA
-	NetworkConnectionSubtypeHsdpa = NetworkConnectionSubtypeKey.String("hsdpa")
-	// HSUPA
-	NetworkConnectionSubtypeHsupa = NetworkConnectionSubtypeKey.String("hsupa")
-	// HSPA
-	NetworkConnectionSubtypeHspa = NetworkConnectionSubtypeKey.String("hspa")
-	// IDEN
-	NetworkConnectionSubtypeIden = NetworkConnectionSubtypeKey.String("iden")
-	// EVDO Rev. B
-	NetworkConnectionSubtypeEvdoB = NetworkConnectionSubtypeKey.String("evdo_b")
-	// LTE
-	NetworkConnectionSubtypeLte = NetworkConnectionSubtypeKey.String("lte")
-	// EHRPD
-	NetworkConnectionSubtypeEhrpd = NetworkConnectionSubtypeKey.String("ehrpd")
-	// HSPAP
-	NetworkConnectionSubtypeHspap = NetworkConnectionSubtypeKey.String("hspap")
-	// GSM
-	NetworkConnectionSubtypeGsm = NetworkConnectionSubtypeKey.String("gsm")
-	// TD-SCDMA
-	NetworkConnectionSubtypeTdScdma = NetworkConnectionSubtypeKey.String("td_scdma")
-	// IWLAN
-	NetworkConnectionSubtypeIwlan = NetworkConnectionSubtypeKey.String("iwlan")
-	// 5G NR (New Radio)
-	NetworkConnectionSubtypeNr = NetworkConnectionSubtypeKey.String("nr")
-	// 5G NRNSA (New Radio Non-Standalone)
-	NetworkConnectionSubtypeNrnsa = NetworkConnectionSubtypeKey.String("nrnsa")
-	// LTE CA
-	NetworkConnectionSubtypeLteCa = NetworkConnectionSubtypeKey.String("lte_ca")
-)
-
-var (
-	// wifi
-	NetworkConnectionTypeWifi = NetworkConnectionTypeKey.String("wifi")
-	// wired
-	NetworkConnectionTypeWired = NetworkConnectionTypeKey.String("wired")
-	// cell
-	NetworkConnectionTypeCell = NetworkConnectionTypeKey.String("cell")
-	// unavailable
-	NetworkConnectionTypeUnavailable = NetworkConnectionTypeKey.String("unavailable")
-	// unknown
-	NetworkConnectionTypeUnknown = NetworkConnectionTypeKey.String("unknown")
-)
-
-var (
-	// transmit
-	NetworkIoDirectionTransmit = NetworkIoDirectionKey.String("transmit")
-	// receive
-	NetworkIoDirectionReceive = NetworkIoDirectionKey.String("receive")
-)
-
-var (
-	// TCP
-	NetworkTransportTCP = NetworkTransportKey.String("tcp")
-	// UDP
-	NetworkTransportUDP = NetworkTransportKey.String("udp")
-	// Named or anonymous pipe
-	NetworkTransportPipe = NetworkTransportKey.String("pipe")
-	// Unix domain socket
-	NetworkTransportUnix = NetworkTransportKey.String("unix")
-)
-
-var (
-	// IPv4
-	NetworkTypeIpv4 = NetworkTypeKey.String("ipv4")
-	// IPv6
-	NetworkTypeIpv6 = NetworkTypeKey.String("ipv6")
-)
-
-// NetworkCarrierIcc returns an attribute KeyValue conforming to the
-// "network.carrier.icc" semantic conventions. It represents the ISO 3166-1
-// alpha-2 2-character country code associated with the mobile carrier network.
-func NetworkCarrierIcc(val string) attribute.KeyValue {
-	return NetworkCarrierIccKey.String(val)
-}
-
-// NetworkCarrierMcc returns an attribute KeyValue conforming to the
-// "network.carrier.mcc" semantic conventions. It represents the mobile carrier
-// country code.
-func NetworkCarrierMcc(val string) attribute.KeyValue {
-	return NetworkCarrierMccKey.String(val)
-}
-
-// NetworkCarrierMnc returns an attribute KeyValue conforming to the
-// "network.carrier.mnc" semantic conventions. It represents the mobile carrier
-// network code.
-func NetworkCarrierMnc(val string) attribute.KeyValue {
-	return NetworkCarrierMncKey.String(val)
-}
-
-// NetworkCarrierName returns an attribute KeyValue conforming to the
-// "network.carrier.name" semantic conventions. It represents the name of the
-// mobile carrier.
-func NetworkCarrierName(val string) attribute.KeyValue {
-	return NetworkCarrierNameKey.String(val)
-}
-
-// NetworkLocalAddress returns an attribute KeyValue conforming to the
-// "network.local.address" semantic conventions. It represents the local
-// address of the network connection - IP address or Unix domain socket name.
-func NetworkLocalAddress(val string) attribute.KeyValue {
-	return NetworkLocalAddressKey.String(val)
-}
-
-// NetworkLocalPort returns an attribute KeyValue conforming to the
-// "network.local.port" semantic conventions. It represents the local port
-// number of the network connection.
-func NetworkLocalPort(val int) attribute.KeyValue {
-	return NetworkLocalPortKey.Int(val)
-}
-
-// NetworkPeerAddress returns an attribute KeyValue conforming to the
-// "network.peer.address" semantic conventions. It represents the peer address
-// of the network connection - IP address or Unix domain socket name.
-func NetworkPeerAddress(val string) attribute.KeyValue {
-	return NetworkPeerAddressKey.String(val)
-}
-
-// NetworkPeerPort returns an attribute KeyValue conforming to the
-// "network.peer.port" semantic conventions. It represents the peer port number
-// of the network connection.
-func NetworkPeerPort(val int) attribute.KeyValue {
-	return NetworkPeerPortKey.Int(val)
-}
-
-// NetworkProtocolName returns an attribute KeyValue conforming to the
-// "network.protocol.name" semantic conventions. It represents the [OSI
-// application layer](https://osi-model.com/application-layer/) or non-OSI
-// equivalent.
-func NetworkProtocolName(val string) attribute.KeyValue {
-	return NetworkProtocolNameKey.String(val)
-}
-
-// NetworkProtocolVersion returns an attribute KeyValue conforming to the
-// "network.protocol.version" semantic conventions. It represents the actual
-// version of the protocol used for network communication.
-func NetworkProtocolVersion(val string) attribute.KeyValue {
-	return NetworkProtocolVersionKey.String(val)
-}
-
-// An OCI image manifest.
-const (
-	// OciManifestDigestKey is the attribute Key conforming to the
-	// "oci.manifest.digest" semantic conventions. It represents the digest of
-	// the OCI image manifest. For container images specifically is the digest
-	// by which the container image is known.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples:
-	// 'sha256:e4ca62c0d62f3e886e684806dfe9d4e0cda60d54986898173c1083856cfda0f4'
-	// Note: Follows [OCI Image Manifest
-	// Specification](https://github.com/opencontainers/image-spec/blob/main/manifest.md),
-	// and specifically the [Digest
-	// property](https://github.com/opencontainers/image-spec/blob/main/descriptor.md#digests).
-	// An example can be found in [Example Image
-	// Manifest](https://docs.docker.com/registry/spec/manifest-v2-2/#example-image-manifest).
-	OciManifestDigestKey = attribute.Key("oci.manifest.digest")
-)
-
-// OciManifestDigest returns an attribute KeyValue conforming to the
-// "oci.manifest.digest" semantic conventions. It represents the digest of the
-// OCI image manifest. For container images specifically is the digest by which
-// the container image is known.
-func OciManifestDigest(val string) attribute.KeyValue {
-	return OciManifestDigestKey.String(val)
-}
-
-// Attributes used by the OpenTracing Shim layer.
-const (
-	// OpentracingRefTypeKey is the attribute Key conforming to the
-	// "opentracing.ref_type" semantic conventions. It represents the
-	// parent-child Reference type
-	//
-	// Type: Enum
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Note: The causal relationship between a child Span and a parent Span.
-	OpentracingRefTypeKey = attribute.Key("opentracing.ref_type")
-)
-
-var (
-	// The parent Span depends on the child Span in some capacity
-	OpentracingRefTypeChildOf = OpentracingRefTypeKey.String("child_of")
-	// The parent Span doesn't depend in any way on the result of the child Span
-	OpentracingRefTypeFollowsFrom = OpentracingRefTypeKey.String("follows_from")
-)
-
-// The operating system (OS) on which the process represented by this resource
-// is running.
-const (
-	// OSBuildIDKey is the attribute Key conforming to the "os.build_id"
-	// semantic conventions. It represents the unique identifier for a
-	// particular build or compilation of the operating system.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'TQ3C.230805.001.B2', '20E247', '22621'
-	OSBuildIDKey = attribute.Key("os.build_id")
-
-	// OSDescriptionKey is the attribute Key conforming to the "os.description"
-	// semantic conventions. It represents the human readable (not intended to
-	// be parsed) OS version information, like e.g. reported by `ver` or
-	// `lsb_release -a` commands.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'Microsoft Windows [Version 10.0.18363.778]', 'Ubuntu 18.04.1
-	// LTS'
-	OSDescriptionKey = attribute.Key("os.description")
-
-	// OSNameKey is the attribute Key conforming to the "os.name" semantic
-	// conventions. It represents the human readable operating system name.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'iOS', 'Android', 'Ubuntu'
-	OSNameKey = attribute.Key("os.name")
-
-	// OSTypeKey is the attribute Key conforming to the "os.type" semantic
-	// conventions. It represents the operating system type.
-	//
-	// Type: Enum
-	// RequirementLevel: Optional
-	// Stability: experimental
-	OSTypeKey = attribute.Key("os.type")
-
-	// OSVersionKey is the attribute Key conforming to the "os.version"
-	// semantic conventions. It represents the version string of the operating
-	// system as defined in [Version
-	// Attributes](/docs/resource/README.md#version-attributes).
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: '14.2.1', '18.04.1'
-	OSVersionKey = attribute.Key("os.version")
-)
-
-var (
-	// Microsoft Windows
-	OSTypeWindows = OSTypeKey.String("windows")
-	// Linux
-	OSTypeLinux = OSTypeKey.String("linux")
-	// Apple Darwin
-	OSTypeDarwin = OSTypeKey.String("darwin")
-	// FreeBSD
-	OSTypeFreeBSD = OSTypeKey.String("freebsd")
-	// NetBSD
-	OSTypeNetBSD = OSTypeKey.String("netbsd")
-	// OpenBSD
-	OSTypeOpenBSD = OSTypeKey.String("openbsd")
-	// DragonFly BSD
-	OSTypeDragonflyBSD = OSTypeKey.String("dragonflybsd")
-	// HP-UX (Hewlett Packard Unix)
-	OSTypeHPUX = OSTypeKey.String("hpux")
-	// AIX (Advanced Interactive eXecutive)
-	OSTypeAIX = OSTypeKey.String("aix")
-	// SunOS, Oracle Solaris
-	OSTypeSolaris = OSTypeKey.String("solaris")
-	// IBM z/OS
-	OSTypeZOS = OSTypeKey.String("z_os")
-)
-
-// OSBuildID returns an attribute KeyValue conforming to the "os.build_id"
-// semantic conventions. It represents the unique identifier for a particular
-// build or compilation of the operating system.
-func OSBuildID(val string) attribute.KeyValue {
-	return OSBuildIDKey.String(val)
-}
-
-// OSDescription returns an attribute KeyValue conforming to the
-// "os.description" semantic conventions. It represents the human readable (not
-// intended to be parsed) OS version information, like e.g. reported by `ver`
-// or `lsb_release -a` commands.
-func OSDescription(val string) attribute.KeyValue {
-	return OSDescriptionKey.String(val)
-}
-
-// OSName returns an attribute KeyValue conforming to the "os.name" semantic
-// conventions. It represents the human readable operating system name.
-func OSName(val string) attribute.KeyValue {
-	return OSNameKey.String(val)
-}
-
-// OSVersion returns an attribute KeyValue conforming to the "os.version"
-// semantic conventions. It represents the version string of the operating
-// system as defined in [Version
-// Attributes](/docs/resource/README.md#version-attributes).
-func OSVersion(val string) attribute.KeyValue {
-	return OSVersionKey.String(val)
-}
-
-// Attributes reserved for OpenTelemetry
-const (
-	// OTelStatusCodeKey is the attribute Key conforming to the
-	// "otel.status_code" semantic conventions. It represents the name of the
-	// code, either "OK" or "ERROR". MUST NOT be set if the status code is
-	// UNSET.
-	//
-	// Type: Enum
-	// RequirementLevel: Optional
-	// Stability: stable
-	OTelStatusCodeKey = attribute.Key("otel.status_code")
-
-	// OTelStatusDescriptionKey is the attribute Key conforming to the
-	// "otel.status_description" semantic conventions. It represents the
-	// description of the Status if it has a value, otherwise not set.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: stable
-	// Examples: 'resource not found'
-	OTelStatusDescriptionKey = attribute.Key("otel.status_description")
-)
-
-var (
-	// The operation has been validated by an Application developer or Operator to have completed successfully
-	OTelStatusCodeOk = OTelStatusCodeKey.String("OK")
-	// The operation contains an error
-	OTelStatusCodeError = OTelStatusCodeKey.String("ERROR")
-)
-
-// OTelStatusDescription returns an attribute KeyValue conforming to the
-// "otel.status_description" semantic conventions. It represents the
-// description of the Status if it has a value, otherwise not set.
-func OTelStatusDescription(val string) attribute.KeyValue {
-	return OTelStatusDescriptionKey.String(val)
-}
-
-// Attributes used by non-OTLP exporters to represent OpenTelemetry Scope's
-// concepts.
-const (
-	// OTelScopeNameKey is the attribute Key conforming to the
-	// "otel.scope.name" semantic conventions. It represents the name of the
-	// instrumentation scope - (`InstrumentationScope.Name` in OTLP).
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: stable
-	// Examples: 'io.opentelemetry.contrib.mongodb'
-	OTelScopeNameKey = attribute.Key("otel.scope.name")
-
-	// OTelScopeVersionKey is the attribute Key conforming to the
-	// "otel.scope.version" semantic conventions. It represents the version of
-	// the instrumentation scope - (`InstrumentationScope.Version` in OTLP).
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: stable
-	// Examples: '1.0.0'
-	OTelScopeVersionKey = attribute.Key("otel.scope.version")
-)
-
-// OTelScopeName returns an attribute KeyValue conforming to the
-// "otel.scope.name" semantic conventions. It represents the name of the
-// instrumentation scope - (`InstrumentationScope.Name` in OTLP).
-func OTelScopeName(val string) attribute.KeyValue {
-	return OTelScopeNameKey.String(val)
-}
-
-// OTelScopeVersion returns an attribute KeyValue conforming to the
-// "otel.scope.version" semantic conventions. It represents the version of the
-// instrumentation scope - (`InstrumentationScope.Version` in OTLP).
-func OTelScopeVersion(val string) attribute.KeyValue {
-	return OTelScopeVersionKey.String(val)
-}
-
-// Operations that access some remote service.
-const (
-	// PeerServiceKey is the attribute Key conforming to the "peer.service"
-	// semantic conventions. It represents the
-	// [`service.name`](/docs/resource/README.md#service) of the remote
-	// service. SHOULD be equal to the actual `service.name` resource attribute
-	// of the remote service if any.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'AuthTokenCache'
-	PeerServiceKey = attribute.Key("peer.service")
-)
-
-// PeerService returns an attribute KeyValue conforming to the
-// "peer.service" semantic conventions. It represents the
-// [`service.name`](/docs/resource/README.md#service) of the remote service.
-// SHOULD be equal to the actual `service.name` resource attribute of the
-// remote service if any.
-func PeerService(val string) attribute.KeyValue {
-	return PeerServiceKey.String(val)
-}
-
-// An operating system process.
-const (
-	// ProcessCommandKey is the attribute Key conforming to the
-	// "process.command" semantic conventions. It represents the command used
-	// to launch the process (i.e. the command name). On Linux based systems,
-	// can be set to the zeroth string in `proc/[pid]/cmdline`. On Windows, can
-	// be set to the first parameter extracted from `GetCommandLineW`.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'cmd/otelcol'
-	ProcessCommandKey = attribute.Key("process.command")
-
-	// ProcessCommandArgsKey is the attribute Key conforming to the
-	// "process.command_args" semantic conventions. It represents the all the
-	// command arguments (including the command/executable itself) as received
-	// by the process. On Linux-based systems (and some other Unixoid systems
-	// supporting procfs), can be set according to the list of null-delimited
-	// strings extracted from `proc/[pid]/cmdline`. For libc-based executables,
-	// this would be the full argv vector passed to `main`.
-	//
-	// Type: string[]
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'cmd/otecol', '--config=config.yaml'
-	ProcessCommandArgsKey = attribute.Key("process.command_args")
-
-	// ProcessCommandLineKey is the attribute Key conforming to the
-	// "process.command_line" semantic conventions. It represents the full
-	// command used to launch the process as a single string representing the
-	// full command. On Windows, can be set to the result of `GetCommandLineW`.
-	// Do not set this if you have to assemble it just for monitoring; use
-	// `process.command_args` instead.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'C:\\cmd\\otecol --config="my directory\\config.yaml"'
-	ProcessCommandLineKey = attribute.Key("process.command_line")
-
-	// ProcessContextSwitchTypeKey is the attribute Key conforming to the
-	// "process.context_switch_type" semantic conventions. It represents the
-	// specifies whether the context switches for this data point were
-	// voluntary or involuntary.
-	//
-	// Type: Enum
-	// RequirementLevel: Optional
-	// Stability: experimental
-	ProcessContextSwitchTypeKey = attribute.Key("process.context_switch_type")
-
-	// ProcessCreationTimeKey is the attribute Key conforming to the
-	// "process.creation.time" semantic conventions. It represents the date and
-	// time the process was created, in ISO 8601 format.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: '2023-11-21T09:25:34.853Z'
-	ProcessCreationTimeKey = attribute.Key("process.creation.time")
-
-	// ProcessExecutableNameKey is the attribute Key conforming to the
-	// "process.executable.name" semantic conventions. It represents the name
-	// of the process executable. On Linux based systems, can be set to the
-	// `Name` in `proc/[pid]/status`. On Windows, can be set to the base name
-	// of `GetProcessImageFileNameW`.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'otelcol'
-	ProcessExecutableNameKey = attribute.Key("process.executable.name")
-
-	// ProcessExecutablePathKey is the attribute Key conforming to the
-	// "process.executable.path" semantic conventions. It represents the full
-	// path to the process executable. On Linux based systems, can be set to
-	// the target of `proc/[pid]/exe`. On Windows, can be set to the result of
-	// `GetProcessImageFileNameW`.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: '/usr/bin/cmd/otelcol'
-	ProcessExecutablePathKey = attribute.Key("process.executable.path")
-
-	// ProcessExitCodeKey is the attribute Key conforming to the
-	// "process.exit.code" semantic conventions. It represents the exit code of
-	// the process.
-	//
-	// Type: int
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 127
-	ProcessExitCodeKey = attribute.Key("process.exit.code")
-
-	// ProcessExitTimeKey is the attribute Key conforming to the
-	// "process.exit.time" semantic conventions. It represents the date and
-	// time the process exited, in ISO 8601 format.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: '2023-11-21T09:26:12.315Z'
-	ProcessExitTimeKey = attribute.Key("process.exit.time")
-
-	// ProcessGroupLeaderPIDKey is the attribute Key conforming to the
-	// "process.group_leader.pid" semantic conventions. It represents the PID
-	// of the process's group leader. This is also the process group ID (PGID)
-	// of the process.
-	//
-	// Type: int
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 23
-	ProcessGroupLeaderPIDKey = attribute.Key("process.group_leader.pid")
-
-	// ProcessInteractiveKey is the attribute Key conforming to the
-	// "process.interactive" semantic conventions. It represents the whether
-	// the process is connected to an interactive shell.
-	//
-	// Type: boolean
-	// RequirementLevel: Optional
-	// Stability: experimental
-	ProcessInteractiveKey = attribute.Key("process.interactive")
-
-	// ProcessOwnerKey is the attribute Key conforming to the "process.owner"
-	// semantic conventions. It represents the username of the user that owns
-	// the process.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'root'
-	ProcessOwnerKey = attribute.Key("process.owner")
-
-	// ProcessPagingFaultTypeKey is the attribute Key conforming to the
-	// "process.paging.fault_type" semantic conventions. It represents the type
-	// of page fault for this data point. Type `major` is for major/hard page
-	// faults, and `minor` is for minor/soft page faults.
-	//
-	// Type: Enum
-	// RequirementLevel: Optional
-	// Stability: experimental
-	ProcessPagingFaultTypeKey = attribute.Key("process.paging.fault_type")
-
-	// ProcessParentPIDKey is the attribute Key conforming to the
-	// "process.parent_pid" semantic conventions. It represents the parent
-	// Process identifier (PPID).
-	//
-	// Type: int
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 111
-	ProcessParentPIDKey = attribute.Key("process.parent_pid")
-
-	// ProcessPIDKey is the attribute Key conforming to the "process.pid"
-	// semantic conventions. It represents the process identifier (PID).
-	//
-	// Type: int
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 1234
-	ProcessPIDKey = attribute.Key("process.pid")
-
-	// ProcessRealUserIDKey is the attribute Key conforming to the
-	// "process.real_user.id" semantic conventions. It represents the real user
-	// ID (RUID) of the process.
-	//
-	// Type: int
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 1000
-	ProcessRealUserIDKey = attribute.Key("process.real_user.id")
-
-	// ProcessRealUserNameKey is the attribute Key conforming to the
-	// "process.real_user.name" semantic conventions. It represents the
-	// username of the real user of the process.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'operator'
-	ProcessRealUserNameKey = attribute.Key("process.real_user.name")
-
-	// ProcessRuntimeDescriptionKey is the attribute Key conforming to the
-	// "process.runtime.description" semantic conventions. It represents an
-	// additional description about the runtime of the process, for example a
-	// specific vendor customization of the runtime environment.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'Eclipse OpenJ9 Eclipse OpenJ9 VM openj9-0.21.0'
-	ProcessRuntimeDescriptionKey = attribute.Key("process.runtime.description")
-
-	// ProcessRuntimeNameKey is the attribute Key conforming to the
-	// "process.runtime.name" semantic conventions. It represents the name of
-	// the runtime of this process. For compiled native binaries, this SHOULD
-	// be the name of the compiler.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'OpenJDK Runtime Environment'
-	ProcessRuntimeNameKey = attribute.Key("process.runtime.name")
-
-	// ProcessRuntimeVersionKey is the attribute Key conforming to the
-	// "process.runtime.version" semantic conventions. It represents the
-	// version of the runtime of this process, as returned by the runtime
-	// without modification.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: '14.0.2'
-	ProcessRuntimeVersionKey = attribute.Key("process.runtime.version")
-
-	// ProcessSavedUserIDKey is the attribute Key conforming to the
-	// "process.saved_user.id" semantic conventions. It represents the saved
-	// user ID (SUID) of the process.
-	//
-	// Type: int
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 1002
-	ProcessSavedUserIDKey = attribute.Key("process.saved_user.id")
-
-	// ProcessSavedUserNameKey is the attribute Key conforming to the
-	// "process.saved_user.name" semantic conventions. It represents the
-	// username of the saved user.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'operator'
-	ProcessSavedUserNameKey = attribute.Key("process.saved_user.name")
-
-	// ProcessSessionLeaderPIDKey is the attribute Key conforming to the
-	// "process.session_leader.pid" semantic conventions. It represents the PID
-	// of the process's session leader. This is also the session ID (SID) of
-	// the process.
-	//
-	// Type: int
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 14
-	ProcessSessionLeaderPIDKey = attribute.Key("process.session_leader.pid")
-
-	// ProcessUserIDKey is the attribute Key conforming to the
-	// "process.user.id" semantic conventions. It represents the effective user
-	// ID (EUID) of the process.
-	//
-	// Type: int
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 1001
-	ProcessUserIDKey = attribute.Key("process.user.id")
-
-	// ProcessUserNameKey is the attribute Key conforming to the
-	// "process.user.name" semantic conventions. It represents the username of
-	// the effective user of the process.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'root'
-	ProcessUserNameKey = attribute.Key("process.user.name")
-
-	// ProcessVpidKey is the attribute Key conforming to the "process.vpid"
-	// semantic conventions. It represents the virtual process identifier.
-	//
-	// Type: int
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 12
-	// Note: The process ID within a PID namespace. This is not necessarily
-	// unique across all processes on the host but it is unique within the
-	// process namespace that the process exists within.
-	ProcessVpidKey = attribute.Key("process.vpid")
-)
-
-var (
-	// voluntary
-	ProcessContextSwitchTypeVoluntary = ProcessContextSwitchTypeKey.String("voluntary")
-	// involuntary
-	ProcessContextSwitchTypeInvoluntary = ProcessContextSwitchTypeKey.String("involuntary")
-)
-
-var (
-	// major
-	ProcessPagingFaultTypeMajor = ProcessPagingFaultTypeKey.String("major")
-	// minor
-	ProcessPagingFaultTypeMinor = ProcessPagingFaultTypeKey.String("minor")
-)
-
-// ProcessCommand returns an attribute KeyValue conforming to the
-// "process.command" semantic conventions. It represents the command used to
-// launch the process (i.e. the command name). On Linux based systems, can be
-// set to the zeroth string in `proc/[pid]/cmdline`. On Windows, can be set to
-// the first parameter extracted from `GetCommandLineW`.
-func ProcessCommand(val string) attribute.KeyValue {
-	return ProcessCommandKey.String(val)
-}
-
-// ProcessCommandArgs returns an attribute KeyValue conforming to the
-// "process.command_args" semantic conventions. It represents the all the
-// command arguments (including the command/executable itself) as received by
-// the process. On Linux-based systems (and some other Unixoid systems
-// supporting procfs), can be set according to the list of null-delimited
-// strings extracted from `proc/[pid]/cmdline`. For libc-based executables,
-// this would be the full argv vector passed to `main`.
-func ProcessCommandArgs(val ...string) attribute.KeyValue {
-	return ProcessCommandArgsKey.StringSlice(val)
-}
-
-// ProcessCommandLine returns an attribute KeyValue conforming to the
-// "process.command_line" semantic conventions. It represents the full command
-// used to launch the process as a single string representing the full command.
-// On Windows, can be set to the result of `GetCommandLineW`. Do not set this
-// if you have to assemble it just for monitoring; use `process.command_args`
-// instead.
-func ProcessCommandLine(val string) attribute.KeyValue {
-	return ProcessCommandLineKey.String(val)
-}
-
-// ProcessCreationTime returns an attribute KeyValue conforming to the
-// "process.creation.time" semantic conventions. It represents the date and
-// time the process was created, in ISO 8601 format.
-func ProcessCreationTime(val string) attribute.KeyValue {
-	return ProcessCreationTimeKey.String(val)
-}
-
-// ProcessExecutableName returns an attribute KeyValue conforming to the
-// "process.executable.name" semantic conventions. It represents the name of
-// the process executable. On Linux based systems, can be set to the `Name` in
-// `proc/[pid]/status`. On Windows, can be set to the base name of
-// `GetProcessImageFileNameW`.
-func ProcessExecutableName(val string) attribute.KeyValue {
-	return ProcessExecutableNameKey.String(val)
-}
-
-// ProcessExecutablePath returns an attribute KeyValue conforming to the
-// "process.executable.path" semantic conventions. It represents the full path
-// to the process executable. On Linux based systems, can be set to the target
-// of `proc/[pid]/exe`. On Windows, can be set to the result of
-// `GetProcessImageFileNameW`.
-func ProcessExecutablePath(val string) attribute.KeyValue {
-	return ProcessExecutablePathKey.String(val)
-}
-
-// ProcessExitCode returns an attribute KeyValue conforming to the
-// "process.exit.code" semantic conventions. It represents the exit code of the
-// process.
-func ProcessExitCode(val int) attribute.KeyValue {
-	return ProcessExitCodeKey.Int(val)
-}
-
-// ProcessExitTime returns an attribute KeyValue conforming to the
-// "process.exit.time" semantic conventions. It represents the date and time
-// the process exited, in ISO 8601 format.
-func ProcessExitTime(val string) attribute.KeyValue {
-	return ProcessExitTimeKey.String(val)
-}
-
-// ProcessGroupLeaderPID returns an attribute KeyValue conforming to the
-// "process.group_leader.pid" semantic conventions. It represents the PID of
-// the process's group leader. This is also the process group ID (PGID) of the
-// process.
-func ProcessGroupLeaderPID(val int) attribute.KeyValue {
-	return ProcessGroupLeaderPIDKey.Int(val)
-}
-
-// ProcessInteractive returns an attribute KeyValue conforming to the
-// "process.interactive" semantic conventions. It represents the whether the
-// process is connected to an interactive shell.
-func ProcessInteractive(val bool) attribute.KeyValue {
-	return ProcessInteractiveKey.Bool(val)
-}
-
-// ProcessOwner returns an attribute KeyValue conforming to the
-// "process.owner" semantic conventions. It represents the username of the user
-// that owns the process.
-func ProcessOwner(val string) attribute.KeyValue {
-	return ProcessOwnerKey.String(val)
-}
-
-// ProcessParentPID returns an attribute KeyValue conforming to the
-// "process.parent_pid" semantic conventions. It represents the parent Process
-// identifier (PPID).
-func ProcessParentPID(val int) attribute.KeyValue {
-	return ProcessParentPIDKey.Int(val)
-}
-
-// ProcessPID returns an attribute KeyValue conforming to the "process.pid"
-// semantic conventions. It represents the process identifier (PID).
-func ProcessPID(val int) attribute.KeyValue {
-	return ProcessPIDKey.Int(val)
-}
-
-// ProcessRealUserID returns an attribute KeyValue conforming to the
-// "process.real_user.id" semantic conventions. It represents the real user ID
-// (RUID) of the process.
-func ProcessRealUserID(val int) attribute.KeyValue {
-	return ProcessRealUserIDKey.Int(val)
-}
-
-// ProcessRealUserName returns an attribute KeyValue conforming to the
-// "process.real_user.name" semantic conventions. It represents the username of
-// the real user of the process.
-func ProcessRealUserName(val string) attribute.KeyValue {
-	return ProcessRealUserNameKey.String(val)
-}
-
-// ProcessRuntimeDescription returns an attribute KeyValue conforming to the
-// "process.runtime.description" semantic conventions. It represents an
-// additional description about the runtime of the process, for example a
-// specific vendor customization of the runtime environment.
-func ProcessRuntimeDescription(val string) attribute.KeyValue {
-	return ProcessRuntimeDescriptionKey.String(val)
-}
-
-// ProcessRuntimeName returns an attribute KeyValue conforming to the
-// "process.runtime.name" semantic conventions. It represents the name of the
-// runtime of this process. For compiled native binaries, this SHOULD be the
-// name of the compiler.
-func ProcessRuntimeName(val string) attribute.KeyValue {
-	return ProcessRuntimeNameKey.String(val)
-}
-
-// ProcessRuntimeVersion returns an attribute KeyValue conforming to the
-// "process.runtime.version" semantic conventions. It represents the version of
-// the runtime of this process, as returned by the runtime without
-// modification.
-func ProcessRuntimeVersion(val string) attribute.KeyValue {
-	return ProcessRuntimeVersionKey.String(val)
-}
-
-// ProcessSavedUserID returns an attribute KeyValue conforming to the
-// "process.saved_user.id" semantic conventions. It represents the saved user
-// ID (SUID) of the process.
-func ProcessSavedUserID(val int) attribute.KeyValue {
-	return ProcessSavedUserIDKey.Int(val)
-}
-
-// ProcessSavedUserName returns an attribute KeyValue conforming to the
-// "process.saved_user.name" semantic conventions. It represents the username
-// of the saved user.
-func ProcessSavedUserName(val string) attribute.KeyValue {
-	return ProcessSavedUserNameKey.String(val)
-}
-
-// ProcessSessionLeaderPID returns an attribute KeyValue conforming to the
-// "process.session_leader.pid" semantic conventions. It represents the PID of
-// the process's session leader. This is also the session ID (SID) of the
-// process.
-func ProcessSessionLeaderPID(val int) attribute.KeyValue {
-	return ProcessSessionLeaderPIDKey.Int(val)
-}
-
-// ProcessUserID returns an attribute KeyValue conforming to the
-// "process.user.id" semantic conventions. It represents the effective user ID
-// (EUID) of the process.
-func ProcessUserID(val int) attribute.KeyValue {
-	return ProcessUserIDKey.Int(val)
-}
-
-// ProcessUserName returns an attribute KeyValue conforming to the
-// "process.user.name" semantic conventions. It represents the username of the
-// effective user of the process.
-func ProcessUserName(val string) attribute.KeyValue {
-	return ProcessUserNameKey.String(val)
-}
-
-// ProcessVpid returns an attribute KeyValue conforming to the
-// "process.vpid" semantic conventions. It represents the virtual process
-// identifier.
-func ProcessVpid(val int) attribute.KeyValue {
-	return ProcessVpidKey.Int(val)
-}
-
-// Attributes for process CPU
-const (
-	// ProcessCPUStateKey is the attribute Key conforming to the
-	// "process.cpu.state" semantic conventions. It represents the CPU state of
-	// the process.
-	//
-	// Type: Enum
-	// RequirementLevel: Optional
-	// Stability: experimental
-	ProcessCPUStateKey = attribute.Key("process.cpu.state")
-)
-
-var (
-	// system
-	ProcessCPUStateSystem = ProcessCPUStateKey.String("system")
-	// user
-	ProcessCPUStateUser = ProcessCPUStateKey.String("user")
-	// wait
-	ProcessCPUStateWait = ProcessCPUStateKey.String("wait")
-)
-
-// Attributes for remote procedure calls.
-const (
-	// RPCConnectRPCErrorCodeKey is the attribute Key conforming to the
-	// "rpc.connect_rpc.error_code" semantic conventions. It represents the
-	// [error codes](https://connect.build/docs/protocol/#error-codes) of the
-	// Connect request. Error codes are always string values.
-	//
-	// Type: Enum
-	// RequirementLevel: Optional
-	// Stability: experimental
-	RPCConnectRPCErrorCodeKey = attribute.Key("rpc.connect_rpc.error_code")
-
-	// RPCGRPCStatusCodeKey is the attribute Key conforming to the
-	// "rpc.grpc.status_code" semantic conventions. It represents the [numeric
-	// status
-	// code](https://github.com/grpc/grpc/blob/v1.33.2/doc/statuscodes.md) of
-	// the gRPC request.
-	//
-	// Type: Enum
-	// RequirementLevel: Optional
-	// Stability: experimental
-	RPCGRPCStatusCodeKey = attribute.Key("rpc.grpc.status_code")
-
-	// RPCJsonrpcErrorCodeKey is the attribute Key conforming to the
-	// "rpc.jsonrpc.error_code" semantic conventions. It represents the
-	// `error.code` property of response if it is an error response.
-	//
-	// Type: int
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: -32700, 100
-	RPCJsonrpcErrorCodeKey = attribute.Key("rpc.jsonrpc.error_code")
-
-	// RPCJsonrpcErrorMessageKey is the attribute Key conforming to the
-	// "rpc.jsonrpc.error_message" semantic conventions. It represents the
-	// `error.message` property of response if it is an error response.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'Parse error', 'User already exists'
-	RPCJsonrpcErrorMessageKey = attribute.Key("rpc.jsonrpc.error_message")
-
-	// RPCJsonrpcRequestIDKey is the attribute Key conforming to the
-	// "rpc.jsonrpc.request_id" semantic conventions. It represents the `id`
-	// property of request or response. Since protocol allows id to be int,
-	// string, `null` or missing (for notifications), value is expected to be
-	// cast to string for simplicity. Use empty string in case of `null` value.
-	// Omit entirely if this is a notification.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: '10', 'request-7', ''
-	RPCJsonrpcRequestIDKey = attribute.Key("rpc.jsonrpc.request_id")
-
-	// RPCJsonrpcVersionKey is the attribute Key conforming to the
-	// "rpc.jsonrpc.version" semantic conventions. It represents the protocol
-	// version as in `jsonrpc` property of request/response. Since JSON-RPC 1.0
-	// doesn't specify this, the value can be omitted.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: '2.0', '1.0'
-	RPCJsonrpcVersionKey = attribute.Key("rpc.jsonrpc.version")
-
-	// RPCMessageCompressedSizeKey is the attribute Key conforming to the
-	// "rpc.message.compressed_size" semantic conventions. It represents the
-	// compressed size of the message in bytes.
-	//
-	// Type: int
-	// RequirementLevel: Optional
-	// Stability: experimental
-	RPCMessageCompressedSizeKey = attribute.Key("rpc.message.compressed_size")
-
-	// RPCMessageIDKey is the attribute Key conforming to the "rpc.message.id"
-	// semantic conventions. It represents the mUST be calculated as two
-	// different counters starting from `1` one for sent messages and one for
-	// received message.
-	//
-	// Type: int
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Note: This way we guarantee that the values will be consistent between
-	// different implementations.
-	RPCMessageIDKey = attribute.Key("rpc.message.id")
-
-	// RPCMessageTypeKey is the attribute Key conforming to the
-	// "rpc.message.type" semantic conventions. It represents the whether this
-	// is a received or sent message.
-	//
-	// Type: Enum
-	// RequirementLevel: Optional
-	// Stability: experimental
-	RPCMessageTypeKey = attribute.Key("rpc.message.type")
-
-	// RPCMessageUncompressedSizeKey is the attribute Key conforming to the
-	// "rpc.message.uncompressed_size" semantic conventions. It represents the
-	// uncompressed size of the message in bytes.
-	//
-	// Type: int
-	// RequirementLevel: Optional
-	// Stability: experimental
-	RPCMessageUncompressedSizeKey = attribute.Key("rpc.message.uncompressed_size")
-
-	// RPCMethodKey is the attribute Key conforming to the "rpc.method"
-	// semantic conventions. It represents the name of the (logical) method
-	// being called, must be equal to the $method part in the span name.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'exampleMethod'
-	// Note: This is the logical name of the method from the RPC interface
-	// perspective, which can be different from the name of any implementing
-	// method/function. The `code.function` attribute may be used to store the
-	// latter (e.g., method actually executing the call on the server side, RPC
-	// client stub method on the client side).
-	RPCMethodKey = attribute.Key("rpc.method")
-
-	// RPCServiceKey is the attribute Key conforming to the "rpc.service"
-	// semantic conventions. It represents the full (logical) name of the
-	// service being called, including its package name, if applicable.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'myservice.EchoService'
-	// Note: This is the logical name of the service from the RPC interface
-	// perspective, which can be different from the name of any implementing
-	// class. The `code.namespace` attribute may be used to store the latter
-	// (despite the attribute name, it may include a class name; e.g., class
-	// with method actually executing the call on the server side, RPC client
-	// stub class on the client side).
-	RPCServiceKey = attribute.Key("rpc.service")
-
-	// RPCSystemKey is the attribute Key conforming to the "rpc.system"
-	// semantic conventions. It represents a string identifying the remoting
-	// system. See below for a list of well-known identifiers.
-	//
-	// Type: Enum
-	// RequirementLevel: Optional
-	// Stability: experimental
-	RPCSystemKey = attribute.Key("rpc.system")
-)
-
-var (
-	// cancelled
-	RPCConnectRPCErrorCodeCancelled = RPCConnectRPCErrorCodeKey.String("cancelled")
-	// unknown
-	RPCConnectRPCErrorCodeUnknown = RPCConnectRPCErrorCodeKey.String("unknown")
-	// invalid_argument
-	RPCConnectRPCErrorCodeInvalidArgument = RPCConnectRPCErrorCodeKey.String("invalid_argument")
-	// deadline_exceeded
-	RPCConnectRPCErrorCodeDeadlineExceeded = RPCConnectRPCErrorCodeKey.String("deadline_exceeded")
-	// not_found
-	RPCConnectRPCErrorCodeNotFound = RPCConnectRPCErrorCodeKey.String("not_found")
-	// already_exists
-	RPCConnectRPCErrorCodeAlreadyExists = RPCConnectRPCErrorCodeKey.String("already_exists")
-	// permission_denied
-	RPCConnectRPCErrorCodePermissionDenied = RPCConnectRPCErrorCodeKey.String("permission_denied")
-	// resource_exhausted
-	RPCConnectRPCErrorCodeResourceExhausted = RPCConnectRPCErrorCodeKey.String("resource_exhausted")
-	// failed_precondition
-	RPCConnectRPCErrorCodeFailedPrecondition = RPCConnectRPCErrorCodeKey.String("failed_precondition")
-	// aborted
-	RPCConnectRPCErrorCodeAborted = RPCConnectRPCErrorCodeKey.String("aborted")
-	// out_of_range
-	RPCConnectRPCErrorCodeOutOfRange = RPCConnectRPCErrorCodeKey.String("out_of_range")
-	// unimplemented
-	RPCConnectRPCErrorCodeUnimplemented = RPCConnectRPCErrorCodeKey.String("unimplemented")
-	// internal
-	RPCConnectRPCErrorCodeInternal = RPCConnectRPCErrorCodeKey.String("internal")
-	// unavailable
-	RPCConnectRPCErrorCodeUnavailable = RPCConnectRPCErrorCodeKey.String("unavailable")
-	// data_loss
-	RPCConnectRPCErrorCodeDataLoss = RPCConnectRPCErrorCodeKey.String("data_loss")
-	// unauthenticated
-	RPCConnectRPCErrorCodeUnauthenticated = RPCConnectRPCErrorCodeKey.String("unauthenticated")
-)
-
-var (
-	// OK
-	RPCGRPCStatusCodeOk = RPCGRPCStatusCodeKey.Int(0)
-	// CANCELLED
-	RPCGRPCStatusCodeCancelled = RPCGRPCStatusCodeKey.Int(1)
-	// UNKNOWN
-	RPCGRPCStatusCodeUnknown = RPCGRPCStatusCodeKey.Int(2)
-	// INVALID_ARGUMENT
-	RPCGRPCStatusCodeInvalidArgument = RPCGRPCStatusCodeKey.Int(3)
-	// DEADLINE_EXCEEDED
-	RPCGRPCStatusCodeDeadlineExceeded = RPCGRPCStatusCodeKey.Int(4)
-	// NOT_FOUND
-	RPCGRPCStatusCodeNotFound = RPCGRPCStatusCodeKey.Int(5)
-	// ALREADY_EXISTS
-	RPCGRPCStatusCodeAlreadyExists = RPCGRPCStatusCodeKey.Int(6)
-	// PERMISSION_DENIED
-	RPCGRPCStatusCodePermissionDenied = RPCGRPCStatusCodeKey.Int(7)
-	// RESOURCE_EXHAUSTED
-	RPCGRPCStatusCodeResourceExhausted = RPCGRPCStatusCodeKey.Int(8)
-	// FAILED_PRECONDITION
-	RPCGRPCStatusCodeFailedPrecondition = RPCGRPCStatusCodeKey.Int(9)
-	// ABORTED
-	RPCGRPCStatusCodeAborted = RPCGRPCStatusCodeKey.Int(10)
-	// OUT_OF_RANGE
-	RPCGRPCStatusCodeOutOfRange = RPCGRPCStatusCodeKey.Int(11)
-	// UNIMPLEMENTED
-	RPCGRPCStatusCodeUnimplemented = RPCGRPCStatusCodeKey.Int(12)
-	// INTERNAL
-	RPCGRPCStatusCodeInternal = RPCGRPCStatusCodeKey.Int(13)
-	// UNAVAILABLE
-	RPCGRPCStatusCodeUnavailable = RPCGRPCStatusCodeKey.Int(14)
-	// DATA_LOSS
-	RPCGRPCStatusCodeDataLoss = RPCGRPCStatusCodeKey.Int(15)
-	// UNAUTHENTICATED
-	RPCGRPCStatusCodeUnauthenticated = RPCGRPCStatusCodeKey.Int(16)
-)
-
-var (
-	// sent
-	RPCMessageTypeSent = RPCMessageTypeKey.String("SENT")
-	// received
-	RPCMessageTypeReceived = RPCMessageTypeKey.String("RECEIVED")
-)
-
-var (
-	// gRPC
-	RPCSystemGRPC = RPCSystemKey.String("grpc")
-	// Java RMI
-	RPCSystemJavaRmi = RPCSystemKey.String("java_rmi")
-	// .NET WCF
-	RPCSystemDotnetWcf = RPCSystemKey.String("dotnet_wcf")
-	// Apache Dubbo
-	RPCSystemApacheDubbo = RPCSystemKey.String("apache_dubbo")
-	// Connect RPC
-	RPCSystemConnectRPC = RPCSystemKey.String("connect_rpc")
-)
-
-// RPCJsonrpcErrorCode returns an attribute KeyValue conforming to the
-// "rpc.jsonrpc.error_code" semantic conventions. It represents the
-// `error.code` property of response if it is an error response.
-func RPCJsonrpcErrorCode(val int) attribute.KeyValue {
-	return RPCJsonrpcErrorCodeKey.Int(val)
-}
-
-// RPCJsonrpcErrorMessage returns an attribute KeyValue conforming to the
-// "rpc.jsonrpc.error_message" semantic conventions. It represents the
-// `error.message` property of response if it is an error response.
-func RPCJsonrpcErrorMessage(val string) attribute.KeyValue {
-	return RPCJsonrpcErrorMessageKey.String(val)
-}
-
-// RPCJsonrpcRequestID returns an attribute KeyValue conforming to the
-// "rpc.jsonrpc.request_id" semantic conventions. It represents the `id`
-// property of request or response. Since protocol allows id to be int, string,
-// `null` or missing (for notifications), value is expected to be cast to
-// string for simplicity. Use empty string in case of `null` value. Omit
-// entirely if this is a notification.
-func RPCJsonrpcRequestID(val string) attribute.KeyValue {
-	return RPCJsonrpcRequestIDKey.String(val)
-}
-
-// RPCJsonrpcVersion returns an attribute KeyValue conforming to the
-// "rpc.jsonrpc.version" semantic conventions. It represents the protocol
-// version as in `jsonrpc` property of request/response. Since JSON-RPC 1.0
-// doesn't specify this, the value can be omitted.
-func RPCJsonrpcVersion(val string) attribute.KeyValue {
-	return RPCJsonrpcVersionKey.String(val)
-}
-
-// RPCMessageCompressedSize returns an attribute KeyValue conforming to the
-// "rpc.message.compressed_size" semantic conventions. It represents the
-// compressed size of the message in bytes.
-func RPCMessageCompressedSize(val int) attribute.KeyValue {
-	return RPCMessageCompressedSizeKey.Int(val)
-}
-
-// RPCMessageID returns an attribute KeyValue conforming to the
-// "rpc.message.id" semantic conventions. It represents the mUST be calculated
-// as two different counters starting from `1` one for sent messages and one
-// for received message.
-func RPCMessageID(val int) attribute.KeyValue {
-	return RPCMessageIDKey.Int(val)
-}
-
-// RPCMessageUncompressedSize returns an attribute KeyValue conforming to
-// the "rpc.message.uncompressed_size" semantic conventions. It represents the
-// uncompressed size of the message in bytes.
-func RPCMessageUncompressedSize(val int) attribute.KeyValue {
-	return RPCMessageUncompressedSizeKey.Int(val)
-}
-
-// RPCMethod returns an attribute KeyValue conforming to the "rpc.method"
-// semantic conventions. It represents the name of the (logical) method being
-// called, must be equal to the $method part in the span name.
-func RPCMethod(val string) attribute.KeyValue {
-	return RPCMethodKey.String(val)
-}
-
-// RPCService returns an attribute KeyValue conforming to the "rpc.service"
-// semantic conventions. It represents the full (logical) name of the service
-// being called, including its package name, if applicable.
-func RPCService(val string) attribute.KeyValue {
-	return RPCServiceKey.String(val)
-}
-
-// These attributes may be used to describe the server in a connection-based
-// network interaction where there is one side that initiates the connection
-// (the client is the side that initiates the connection). This covers all TCP
-// network interactions since TCP is connection-based and one side initiates
-// the connection (an exception is made for peer-to-peer communication over TCP
-// where the "user-facing" surface of the protocol / API doesn't expose a clear
-// notion of client and server). This also covers UDP network interactions
-// where one side initiates the interaction, e.g. QUIC (HTTP/3) and DNS.
-const (
-	// ServerAddressKey is the attribute Key conforming to the "server.address"
-	// semantic conventions. It represents the server domain name if available
-	// without reverse DNS lookup; otherwise, IP address or Unix domain socket
-	// name.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: stable
-	// Examples: 'example.com', '10.1.2.80', '/tmp/my.sock'
-	// Note: When observed from the client side, and when communicating through
-	// an intermediary, `server.address` SHOULD represent the server address
-	// behind any intermediaries, for example proxies, if it's available.
-	ServerAddressKey = attribute.Key("server.address")
-
-	// ServerPortKey is the attribute Key conforming to the "server.port"
-	// semantic conventions. It represents the server port number.
-	//
-	// Type: int
-	// RequirementLevel: Optional
-	// Stability: stable
-	// Examples: 80, 8080, 443
-	// Note: When observed from the client side, and when communicating through
-	// an intermediary, `server.port` SHOULD represent the server port behind
-	// any intermediaries, for example proxies, if it's available.
-	ServerPortKey = attribute.Key("server.port")
-)
-
-// ServerAddress returns an attribute KeyValue conforming to the
-// "server.address" semantic conventions. It represents the server domain name
-// if available without reverse DNS lookup; otherwise, IP address or Unix
-// domain socket name.
-func ServerAddress(val string) attribute.KeyValue {
-	return ServerAddressKey.String(val)
-}
-
-// ServerPort returns an attribute KeyValue conforming to the "server.port"
-// semantic conventions. It represents the server port number.
-func ServerPort(val int) attribute.KeyValue {
-	return ServerPortKey.Int(val)
-}
-
-// A service instance.
-const (
-	// ServiceInstanceIDKey is the attribute Key conforming to the
-	// "service.instance.id" semantic conventions. It represents the string ID
-	// of the service instance.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: '627cc493-f310-47de-96bd-71410b7dec09'
-	// Note: MUST be unique for each instance of the same
-	// `service.namespace,service.name` pair (in other words
-	// `service.namespace,service.name,service.instance.id` triplet MUST be
-	// globally unique). The ID helps to
-	// distinguish instances of the same service that exist at the same time
-	// (e.g. instances of a horizontally scaled
-	// service).
-	//
-	// Implementations, such as SDKs, are recommended to generate a random
-	// Version 1 or Version 4 [RFC
-	// 4122](https://www.ietf.org/rfc/rfc4122.txt) UUID, but are free to use an
-	// inherent unique ID as the source of
-	// this value if stability is desirable. In that case, the ID SHOULD be
-	// used as source of a UUID Version 5 and
-	// SHOULD use the following UUID as the namespace:
-	// `4d63009a-8d0f-11ee-aad7-4c796ed8e320`.
-	//
-	// UUIDs are typically recommended, as only an opaque value for the
-	// purposes of identifying a service instance is
-	// needed. Similar to what can be seen in the man page for the
-	// [`/etc/machine-id`](https://www.freedesktop.org/software/systemd/man/machine-id.html)
-	// file, the underlying
-	// data, such as pod name and namespace should be treated as confidential,
-	// being the user's choice to expose it
-	// or not via another resource attribute.
-	//
-	// For applications running behind an application server (like unicorn), we
-	// do not recommend using one identifier
-	// for all processes participating in the application. Instead, it's
-	// recommended each division (e.g. a worker
-	// thread in unicorn) to have its own instance.id.
-	//
-	// It's not recommended for a Collector to set `service.instance.id` if it
-	// can't unambiguously determine the
-	// service instance that is generating that telemetry. For instance,
-	// creating an UUID based on `pod.name` will
-	// likely be wrong, as the Collector might not know from which container
-	// within that pod the telemetry originated.
-	// However, Collectors can set the `service.instance.id` if they can
-	// unambiguously determine the service instance
-	// for that telemetry. This is typically the case for scraping receivers,
-	// as they know the target address and
-	// port.
-	ServiceInstanceIDKey = attribute.Key("service.instance.id")
-
-	// ServiceNameKey is the attribute Key conforming to the "service.name"
-	// semantic conventions. It represents the logical name of the service.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: stable
-	// Examples: 'shoppingcart'
-	// Note: MUST be the same for all instances of horizontally scaled
-	// services. If the value was not specified, SDKs MUST fallback to
-	// `unknown_service:` concatenated with
-	// [`process.executable.name`](process.md), e.g. `unknown_service:bash`. If
-	// `process.executable.name` is not available, the value MUST be set to
-	// `unknown_service`.
-	ServiceNameKey = attribute.Key("service.name")
-
-	// ServiceNamespaceKey is the attribute Key conforming to the
-	// "service.namespace" semantic conventions. It represents a namespace for
-	// `service.name`.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'Shop'
-	// Note: A string value having a meaning that helps to distinguish a group
-	// of services, for example the team name that owns a group of services.
-	// `service.name` is expected to be unique within the same namespace. If
-	// `service.namespace` is not specified in the Resource then `service.name`
-	// is expected to be unique for all services that have no explicit
-	// namespace defined (so the empty/unspecified namespace is simply one more
-	// valid namespace). Zero-length namespace string is assumed equal to
-	// unspecified namespace.
-	ServiceNamespaceKey = attribute.Key("service.namespace")
-
-	// ServiceVersionKey is the attribute Key conforming to the
-	// "service.version" semantic conventions. It represents the version string
-	// of the service API or implementation. The format is not defined by these
-	// conventions.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: stable
-	// Examples: '2.0.0', 'a01dbef8a'
-	ServiceVersionKey = attribute.Key("service.version")
-)
-
-// ServiceInstanceID returns an attribute KeyValue conforming to the
-// "service.instance.id" semantic conventions. It represents the string ID of
-// the service instance.
-func ServiceInstanceID(val string) attribute.KeyValue {
-	return ServiceInstanceIDKey.String(val)
-}
-
-// ServiceName returns an attribute KeyValue conforming to the
-// "service.name" semantic conventions. It represents the logical name of the
-// service.
-func ServiceName(val string) attribute.KeyValue {
-	return ServiceNameKey.String(val)
-}
-
-// ServiceNamespace returns an attribute KeyValue conforming to the
-// "service.namespace" semantic conventions. It represents a namespace for
-// `service.name`.
-func ServiceNamespace(val string) attribute.KeyValue {
-	return ServiceNamespaceKey.String(val)
-}
-
-// ServiceVersion returns an attribute KeyValue conforming to the
-// "service.version" semantic conventions. It represents the version string of
-// the service API or implementation. The format is not defined by these
-// conventions.
-func ServiceVersion(val string) attribute.KeyValue {
-	return ServiceVersionKey.String(val)
-}
-
-// Session is defined as the period of time encompassing all activities
-// performed by the application and the actions executed by the end user.
-// Consequently, a Session is represented as a collection of Logs, Events, and
-// Spans emitted by the Client Application throughout the Session's duration.
-// Each Session is assigned a unique identifier, which is included as an
-// attribute in the Logs, Events, and Spans generated during the Session's
-// lifecycle.
-// When a session reaches end of life, typically due to user inactivity or
-// session timeout, a new session identifier will be assigned. The previous
-// session identifier may be provided by the instrumentation so that telemetry
-// backends can link the two sessions.
-const (
-	// SessionIDKey is the attribute Key conforming to the "session.id"
-	// semantic conventions. It represents a unique id to identify a session.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: '00112233-4455-6677-8899-aabbccddeeff'
-	SessionIDKey = attribute.Key("session.id")
-
-	// SessionPreviousIDKey is the attribute Key conforming to the
-	// "session.previous_id" semantic conventions. It represents the previous
-	// `session.id` for this user, when known.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: '00112233-4455-6677-8899-aabbccddeeff'
-	SessionPreviousIDKey = attribute.Key("session.previous_id")
-)
-
-// SessionID returns an attribute KeyValue conforming to the "session.id"
-// semantic conventions. It represents a unique id to identify a session.
-func SessionID(val string) attribute.KeyValue {
-	return SessionIDKey.String(val)
-}
-
-// SessionPreviousID returns an attribute KeyValue conforming to the
-// "session.previous_id" semantic conventions. It represents the previous
-// `session.id` for this user, when known.
-func SessionPreviousID(val string) attribute.KeyValue {
-	return SessionPreviousIDKey.String(val)
-}
-
-// SignalR attributes
-const (
-	// SignalrConnectionStatusKey is the attribute Key conforming to the
-	// "signalr.connection.status" semantic conventions. It represents the
-	// signalR HTTP connection closure status.
-	//
-	// Type: Enum
-	// RequirementLevel: Optional
-	// Stability: stable
-	// Examples: 'app_shutdown', 'timeout'
-	SignalrConnectionStatusKey = attribute.Key("signalr.connection.status")
-
-	// SignalrTransportKey is the attribute Key conforming to the
-	// "signalr.transport" semantic conventions. It represents the [SignalR
-	// transport
-	// type](https://github.com/dotnet/aspnetcore/blob/main/src/SignalR/docs/specs/TransportProtocols.md)
-	//
-	// Type: Enum
-	// RequirementLevel: Optional
-	// Stability: stable
-	// Examples: 'web_sockets', 'long_polling'
-	SignalrTransportKey = attribute.Key("signalr.transport")
-)
-
-var (
-	// The connection was closed normally
-	SignalrConnectionStatusNormalClosure = SignalrConnectionStatusKey.String("normal_closure")
-	// The connection was closed due to a timeout
-	SignalrConnectionStatusTimeout = SignalrConnectionStatusKey.String("timeout")
-	// The connection was closed because the app is shutting down
-	SignalrConnectionStatusAppShutdown = SignalrConnectionStatusKey.String("app_shutdown")
-)
-
-var (
-	// ServerSentEvents protocol
-	SignalrTransportServerSentEvents = SignalrTransportKey.String("server_sent_events")
-	// LongPolling protocol
-	SignalrTransportLongPolling = SignalrTransportKey.String("long_polling")
-	// WebSockets protocol
-	SignalrTransportWebSockets = SignalrTransportKey.String("web_sockets")
-)
-
-// These attributes may be used to describe the sender of a network
-// exchange/packet. These should be used when there is no client/server
-// relationship between the two sides, or when that relationship is unknown.
-// This covers low-level network interactions (e.g. packet tracing) where you
-// don't know if there was a connection or which side initiated it. This also
-// covers unidirectional UDP flows and peer-to-peer communication where the
-// "user-facing" surface of the protocol / API doesn't expose a clear notion of
-// client and server.
-const (
-	// SourceAddressKey is the attribute Key conforming to the "source.address"
-	// semantic conventions. It represents the source address - domain name if
-	// available without reverse DNS lookup; otherwise, IP address or Unix
-	// domain socket name.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'source.example.com', '10.1.2.80', '/tmp/my.sock'
-	// Note: When observed from the destination side, and when communicating
-	// through an intermediary, `source.address` SHOULD represent the source
-	// address behind any intermediaries, for example proxies, if it's
-	// available.
-	SourceAddressKey = attribute.Key("source.address")
-
-	// SourcePortKey is the attribute Key conforming to the "source.port"
-	// semantic conventions. It represents the source port number
-	//
-	// Type: int
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 3389, 2888
-	SourcePortKey = attribute.Key("source.port")
-)
-
-// SourceAddress returns an attribute KeyValue conforming to the
-// "source.address" semantic conventions. It represents the source address -
-// domain name if available without reverse DNS lookup; otherwise, IP address
-// or Unix domain socket name.
-func SourceAddress(val string) attribute.KeyValue {
-	return SourceAddressKey.String(val)
-}
-
-// SourcePort returns an attribute KeyValue conforming to the "source.port"
-// semantic conventions. It represents the source port number
-func SourcePort(val int) attribute.KeyValue {
-	return SourcePortKey.Int(val)
-}
-
-// Describes System attributes
-const (
-	// SystemDeviceKey is the attribute Key conforming to the "system.device"
-	// semantic conventions. It represents the device identifier
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: '(identifier)'
-	SystemDeviceKey = attribute.Key("system.device")
-)
-
-// SystemDevice returns an attribute KeyValue conforming to the
-// "system.device" semantic conventions. It represents the device identifier
-func SystemDevice(val string) attribute.KeyValue {
-	return SystemDeviceKey.String(val)
-}
-
-// Describes System CPU attributes
-const (
-	// SystemCPULogicalNumberKey is the attribute Key conforming to the
-	// "system.cpu.logical_number" semantic conventions. It represents the
-	// logical CPU number [0..n-1]
-	//
-	// Type: int
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 1
-	SystemCPULogicalNumberKey = attribute.Key("system.cpu.logical_number")
-
-	// SystemCPUStateKey is the attribute Key conforming to the
-	// "system.cpu.state" semantic conventions. It represents the state of the
-	// CPU
-	//
-	// Type: Enum
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'idle', 'interrupt'
-	SystemCPUStateKey = attribute.Key("system.cpu.state")
-)
-
-var (
-	// user
-	SystemCPUStateUser = SystemCPUStateKey.String("user")
-	// system
-	SystemCPUStateSystem = SystemCPUStateKey.String("system")
-	// nice
-	SystemCPUStateNice = SystemCPUStateKey.String("nice")
-	// idle
-	SystemCPUStateIdle = SystemCPUStateKey.String("idle")
-	// iowait
-	SystemCPUStateIowait = SystemCPUStateKey.String("iowait")
-	// interrupt
-	SystemCPUStateInterrupt = SystemCPUStateKey.String("interrupt")
-	// steal
-	SystemCPUStateSteal = SystemCPUStateKey.String("steal")
-)
-
-// SystemCPULogicalNumber returns an attribute KeyValue conforming to the
-// "system.cpu.logical_number" semantic conventions. It represents the logical
-// CPU number [0..n-1]
-func SystemCPULogicalNumber(val int) attribute.KeyValue {
-	return SystemCPULogicalNumberKey.Int(val)
-}
-
-// Describes System Memory attributes
-const (
-	// SystemMemoryStateKey is the attribute Key conforming to the
-	// "system.memory.state" semantic conventions. It represents the memory
-	// state
-	//
-	// Type: Enum
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'free', 'cached'
-	SystemMemoryStateKey = attribute.Key("system.memory.state")
-)
-
-var (
-	// used
-	SystemMemoryStateUsed = SystemMemoryStateKey.String("used")
-	// free
-	SystemMemoryStateFree = SystemMemoryStateKey.String("free")
-	// shared
-	SystemMemoryStateShared = SystemMemoryStateKey.String("shared")
-	// buffers
-	SystemMemoryStateBuffers = SystemMemoryStateKey.String("buffers")
-	// cached
-	SystemMemoryStateCached = SystemMemoryStateKey.String("cached")
-)
-
-// Describes System Memory Paging attributes
-const (
-	// SystemPagingDirectionKey is the attribute Key conforming to the
-	// "system.paging.direction" semantic conventions. It represents the paging
-	// access direction
-	//
-	// Type: Enum
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'in'
-	SystemPagingDirectionKey = attribute.Key("system.paging.direction")
-
-	// SystemPagingStateKey is the attribute Key conforming to the
-	// "system.paging.state" semantic conventions. It represents the memory
-	// paging state
-	//
-	// Type: Enum
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'free'
-	SystemPagingStateKey = attribute.Key("system.paging.state")
-
-	// SystemPagingTypeKey is the attribute Key conforming to the
-	// "system.paging.type" semantic conventions. It represents the memory
-	// paging type
-	//
-	// Type: Enum
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'minor'
-	SystemPagingTypeKey = attribute.Key("system.paging.type")
-)
-
-var (
-	// in
-	SystemPagingDirectionIn = SystemPagingDirectionKey.String("in")
-	// out
-	SystemPagingDirectionOut = SystemPagingDirectionKey.String("out")
-)
-
-var (
-	// used
-	SystemPagingStateUsed = SystemPagingStateKey.String("used")
-	// free
-	SystemPagingStateFree = SystemPagingStateKey.String("free")
-)
-
-var (
-	// major
-	SystemPagingTypeMajor = SystemPagingTypeKey.String("major")
-	// minor
-	SystemPagingTypeMinor = SystemPagingTypeKey.String("minor")
-)
-
-// Describes Filesystem attributes
-const (
-	// SystemFilesystemModeKey is the attribute Key conforming to the
-	// "system.filesystem.mode" semantic conventions. It represents the
-	// filesystem mode
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'rw, ro'
-	SystemFilesystemModeKey = attribute.Key("system.filesystem.mode")
-
-	// SystemFilesystemMountpointKey is the attribute Key conforming to the
-	// "system.filesystem.mountpoint" semantic conventions. It represents the
-	// filesystem mount path
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: '/mnt/data'
-	SystemFilesystemMountpointKey = attribute.Key("system.filesystem.mountpoint")
-
-	// SystemFilesystemStateKey is the attribute Key conforming to the
-	// "system.filesystem.state" semantic conventions. It represents the
-	// filesystem state
-	//
-	// Type: Enum
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'used'
-	SystemFilesystemStateKey = attribute.Key("system.filesystem.state")
-
-	// SystemFilesystemTypeKey is the attribute Key conforming to the
-	// "system.filesystem.type" semantic conventions. It represents the
-	// filesystem type
-	//
-	// Type: Enum
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'ext4'
-	SystemFilesystemTypeKey = attribute.Key("system.filesystem.type")
-)
-
-var (
-	// used
-	SystemFilesystemStateUsed = SystemFilesystemStateKey.String("used")
-	// free
-	SystemFilesystemStateFree = SystemFilesystemStateKey.String("free")
-	// reserved
-	SystemFilesystemStateReserved = SystemFilesystemStateKey.String("reserved")
-)
-
-var (
-	// fat32
-	SystemFilesystemTypeFat32 = SystemFilesystemTypeKey.String("fat32")
-	// exfat
-	SystemFilesystemTypeExfat = SystemFilesystemTypeKey.String("exfat")
-	// ntfs
-	SystemFilesystemTypeNtfs = SystemFilesystemTypeKey.String("ntfs")
-	// refs
-	SystemFilesystemTypeRefs = SystemFilesystemTypeKey.String("refs")
-	// hfsplus
-	SystemFilesystemTypeHfsplus = SystemFilesystemTypeKey.String("hfsplus")
-	// ext4
-	SystemFilesystemTypeExt4 = SystemFilesystemTypeKey.String("ext4")
-)
-
-// SystemFilesystemMode returns an attribute KeyValue conforming to the
-// "system.filesystem.mode" semantic conventions. It represents the filesystem
-// mode
-func SystemFilesystemMode(val string) attribute.KeyValue {
-	return SystemFilesystemModeKey.String(val)
-}
-
-// SystemFilesystemMountpoint returns an attribute KeyValue conforming to
-// the "system.filesystem.mountpoint" semantic conventions. It represents the
-// filesystem mount path
-func SystemFilesystemMountpoint(val string) attribute.KeyValue {
-	return SystemFilesystemMountpointKey.String(val)
-}
-
-// Describes Network attributes
-const (
-	// SystemNetworkStateKey is the attribute Key conforming to the
-	// "system.network.state" semantic conventions. It represents a stateless
-	// protocol MUST NOT set this attribute
-	//
-	// Type: Enum
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'close_wait'
-	SystemNetworkStateKey = attribute.Key("system.network.state")
-)
-
-var (
-	// close
-	SystemNetworkStateClose = SystemNetworkStateKey.String("close")
-	// close_wait
-	SystemNetworkStateCloseWait = SystemNetworkStateKey.String("close_wait")
-	// closing
-	SystemNetworkStateClosing = SystemNetworkStateKey.String("closing")
-	// delete
-	SystemNetworkStateDelete = SystemNetworkStateKey.String("delete")
-	// established
-	SystemNetworkStateEstablished = SystemNetworkStateKey.String("established")
-	// fin_wait_1
-	SystemNetworkStateFinWait1 = SystemNetworkStateKey.String("fin_wait_1")
-	// fin_wait_2
-	SystemNetworkStateFinWait2 = SystemNetworkStateKey.String("fin_wait_2")
-	// last_ack
-	SystemNetworkStateLastAck = SystemNetworkStateKey.String("last_ack")
-	// listen
-	SystemNetworkStateListen = SystemNetworkStateKey.String("listen")
-	// syn_recv
-	SystemNetworkStateSynRecv = SystemNetworkStateKey.String("syn_recv")
-	// syn_sent
-	SystemNetworkStateSynSent = SystemNetworkStateKey.String("syn_sent")
-	// time_wait
-	SystemNetworkStateTimeWait = SystemNetworkStateKey.String("time_wait")
-)
-
-// Describes System Process attributes
-const (
-	// SystemProcessStatusKey is the attribute Key conforming to the
-	// "system.process.status" semantic conventions. It represents the process
-	// state, e.g., [Linux Process State
-	// Codes](https://man7.org/linux/man-pages/man1/ps.1.html#PROCESS_STATE_CODES)
-	//
-	// Type: Enum
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'running'
-	SystemProcessStatusKey = attribute.Key("system.process.status")
-)
-
-var (
-	// running
-	SystemProcessStatusRunning = SystemProcessStatusKey.String("running")
-	// sleeping
-	SystemProcessStatusSleeping = SystemProcessStatusKey.String("sleeping")
-	// stopped
-	SystemProcessStatusStopped = SystemProcessStatusKey.String("stopped")
-	// defunct
-	SystemProcessStatusDefunct = SystemProcessStatusKey.String("defunct")
-)
-
-// Attributes for telemetry SDK.
-const (
-	// TelemetrySDKLanguageKey is the attribute Key conforming to the
-	// "telemetry.sdk.language" semantic conventions. It represents the
-	// language of the telemetry SDK.
-	//
-	// Type: Enum
-	// RequirementLevel: Required
-	// Stability: stable
-	TelemetrySDKLanguageKey = attribute.Key("telemetry.sdk.language")
-
-	// TelemetrySDKNameKey is the attribute Key conforming to the
-	// "telemetry.sdk.name" semantic conventions. It represents the name of the
-	// telemetry SDK as defined above.
-	//
-	// Type: string
-	// RequirementLevel: Required
-	// Stability: stable
-	// Examples: 'opentelemetry'
-	// Note: The OpenTelemetry SDK MUST set the `telemetry.sdk.name` attribute
-	// to `opentelemetry`.
-	// If another SDK, like a fork or a vendor-provided implementation, is
-	// used, this SDK MUST set the
-	// `telemetry.sdk.name` attribute to the fully-qualified class or module
-	// name of this SDK's main entry point
-	// or another suitable identifier depending on the language.
-	// The identifier `opentelemetry` is reserved and MUST NOT be used in this
-	// case.
-	// All custom identifiers SHOULD be stable across different versions of an
-	// implementation.
-	TelemetrySDKNameKey = attribute.Key("telemetry.sdk.name")
-
-	// TelemetrySDKVersionKey is the attribute Key conforming to the
-	// "telemetry.sdk.version" semantic conventions. It represents the version
-	// string of the telemetry SDK.
-	//
-	// Type: string
-	// RequirementLevel: Required
-	// Stability: stable
-	// Examples: '1.2.3'
-	TelemetrySDKVersionKey = attribute.Key("telemetry.sdk.version")
-
-	// TelemetryDistroNameKey is the attribute Key conforming to the
-	// "telemetry.distro.name" semantic conventions. It represents the name of
-	// the auto instrumentation agent or distribution, if used.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'parts-unlimited-java'
-	// Note: Official auto instrumentation agents and distributions SHOULD set
-	// the `telemetry.distro.name` attribute to
-	// a string starting with `opentelemetry-`, e.g.
-	// `opentelemetry-java-instrumentation`.
-	TelemetryDistroNameKey = attribute.Key("telemetry.distro.name")
-
-	// TelemetryDistroVersionKey is the attribute Key conforming to the
-	// "telemetry.distro.version" semantic conventions. It represents the
-	// version string of the auto instrumentation agent or distribution, if
-	// used.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: '1.2.3'
-	TelemetryDistroVersionKey = attribute.Key("telemetry.distro.version")
-)
-
-var (
-	// cpp
-	TelemetrySDKLanguageCPP = TelemetrySDKLanguageKey.String("cpp")
-	// dotnet
-	TelemetrySDKLanguageDotnet = TelemetrySDKLanguageKey.String("dotnet")
-	// erlang
-	TelemetrySDKLanguageErlang = TelemetrySDKLanguageKey.String("erlang")
-	// go
-	TelemetrySDKLanguageGo = TelemetrySDKLanguageKey.String("go")
-	// java
-	TelemetrySDKLanguageJava = TelemetrySDKLanguageKey.String("java")
-	// nodejs
-	TelemetrySDKLanguageNodejs = TelemetrySDKLanguageKey.String("nodejs")
-	// php
-	TelemetrySDKLanguagePHP = TelemetrySDKLanguageKey.String("php")
-	// python
-	TelemetrySDKLanguagePython = TelemetrySDKLanguageKey.String("python")
-	// ruby
-	TelemetrySDKLanguageRuby = TelemetrySDKLanguageKey.String("ruby")
-	// rust
-	TelemetrySDKLanguageRust = TelemetrySDKLanguageKey.String("rust")
-	// swift
-	TelemetrySDKLanguageSwift = TelemetrySDKLanguageKey.String("swift")
-	// webjs
-	TelemetrySDKLanguageWebjs = TelemetrySDKLanguageKey.String("webjs")
-)
-
-// TelemetrySDKName returns an attribute KeyValue conforming to the
-// "telemetry.sdk.name" semantic conventions. It represents the name of the
-// telemetry SDK as defined above.
-func TelemetrySDKName(val string) attribute.KeyValue {
-	return TelemetrySDKNameKey.String(val)
-}
-
-// TelemetrySDKVersion returns an attribute KeyValue conforming to the
-// "telemetry.sdk.version" semantic conventions. It represents the version
-// string of the telemetry SDK.
-func TelemetrySDKVersion(val string) attribute.KeyValue {
-	return TelemetrySDKVersionKey.String(val)
-}
-
-// TelemetryDistroName returns an attribute KeyValue conforming to the
-// "telemetry.distro.name" semantic conventions. It represents the name of the
-// auto instrumentation agent or distribution, if used.
-func TelemetryDistroName(val string) attribute.KeyValue {
-	return TelemetryDistroNameKey.String(val)
-}
-
-// TelemetryDistroVersion returns an attribute KeyValue conforming to the
-// "telemetry.distro.version" semantic conventions. It represents the version
-// string of the auto instrumentation agent or distribution, if used.
-func TelemetryDistroVersion(val string) attribute.KeyValue {
-	return TelemetryDistroVersionKey.String(val)
-}
-
-// These attributes may be used for any operation to store information about a
-// thread that started a span.
-const (
-	// ThreadIDKey is the attribute Key conforming to the "thread.id" semantic
-	// conventions. It represents the current "managed" thread ID (as opposed
-	// to OS thread ID).
-	//
-	// Type: int
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 42
-	ThreadIDKey = attribute.Key("thread.id")
-
-	// ThreadNameKey is the attribute Key conforming to the "thread.name"
-	// semantic conventions. It represents the current thread name.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'main'
-	ThreadNameKey = attribute.Key("thread.name")
-)
-
-// ThreadID returns an attribute KeyValue conforming to the "thread.id"
-// semantic conventions. It represents the current "managed" thread ID (as
-// opposed to OS thread ID).
-func ThreadID(val int) attribute.KeyValue {
-	return ThreadIDKey.Int(val)
-}
-
-// ThreadName returns an attribute KeyValue conforming to the "thread.name"
-// semantic conventions. It represents the current thread name.
-func ThreadName(val string) attribute.KeyValue {
-	return ThreadNameKey.String(val)
-}
-
-// Semantic convention attributes in the TLS namespace.
-const (
-	// TLSCipherKey is the attribute Key conforming to the "tls.cipher"
-	// semantic conventions. It represents the string indicating the
-	// [cipher](https://datatracker.ietf.org/doc/html/rfc5246#appendix-A.5)
-	// used during the current connection.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'TLS_RSA_WITH_3DES_EDE_CBC_SHA',
-	// 'TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256'
-	// Note: The values allowed for `tls.cipher` MUST be one of the
-	// `Descriptions` of the [registered TLS Cipher
-	// Suits](https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#table-tls-parameters-4).
-	TLSCipherKey = attribute.Key("tls.cipher")
-
-	// TLSClientCertificateKey is the attribute Key conforming to the
-	// "tls.client.certificate" semantic conventions. It represents the
-	// pEM-encoded stand-alone certificate offered by the client. This is
-	// usually mutually-exclusive of `client.certificate_chain` since this
-	// value also exists in that list.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'MII...'
-	TLSClientCertificateKey = attribute.Key("tls.client.certificate")
-
-	// TLSClientCertificateChainKey is the attribute Key conforming to the
-	// "tls.client.certificate_chain" semantic conventions. It represents the
-	// array of PEM-encoded certificates that make up the certificate chain
-	// offered by the client. This is usually mutually-exclusive of
-	// `client.certificate` since that value should be the first certificate in
-	// the chain.
-	//
-	// Type: string[]
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'MII...', 'MI...'
-	TLSClientCertificateChainKey = attribute.Key("tls.client.certificate_chain")
-
-	// TLSClientHashMd5Key is the attribute Key conforming to the
-	// "tls.client.hash.md5" semantic conventions. It represents the
-	// certificate fingerprint using the MD5 digest of DER-encoded version of
-	// certificate offered by the client. For consistency with other hash
-	// values, this value should be formatted as an uppercase hash.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: '0F76C7F2C55BFD7D8E8B8F4BFBF0C9EC'
-	TLSClientHashMd5Key = attribute.Key("tls.client.hash.md5")
-
-	// TLSClientHashSha1Key is the attribute Key conforming to the
-	// "tls.client.hash.sha1" semantic conventions. It represents the
-	// certificate fingerprint using the SHA1 digest of DER-encoded version of
-	// certificate offered by the client. For consistency with other hash
-	// values, this value should be formatted as an uppercase hash.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: '9E393D93138888D288266C2D915214D1D1CCEB2A'
-	TLSClientHashSha1Key = attribute.Key("tls.client.hash.sha1")
-
-	// TLSClientHashSha256Key is the attribute Key conforming to the
-	// "tls.client.hash.sha256" semantic conventions. It represents the
-	// certificate fingerprint using the SHA256 digest of DER-encoded version
-	// of certificate offered by the client. For consistency with other hash
-	// values, this value should be formatted as an uppercase hash.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples:
-	// '0687F666A054EF17A08E2F2162EAB4CBC0D265E1D7875BE74BF3C712CA92DAF0'
-	TLSClientHashSha256Key = attribute.Key("tls.client.hash.sha256")
-
-	// TLSClientIssuerKey is the attribute Key conforming to the
-	// "tls.client.issuer" semantic conventions. It represents the
-	// distinguished name of
-	// [subject](https://datatracker.ietf.org/doc/html/rfc5280#section-4.1.2.6)
-	// of the issuer of the x.509 certificate presented by the client.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'CN=Example Root CA, OU=Infrastructure Team, DC=example,
-	// DC=com'
-	TLSClientIssuerKey = attribute.Key("tls.client.issuer")
-
-	// TLSClientJa3Key is the attribute Key conforming to the "tls.client.ja3"
-	// semantic conventions. It represents a hash that identifies clients based
-	// on how they perform an SSL/TLS handshake.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'd4e5b18d6b55c71272893221c96ba240'
-	TLSClientJa3Key = attribute.Key("tls.client.ja3")
-
-	// TLSClientNotAfterKey is the attribute Key conforming to the
-	// "tls.client.not_after" semantic conventions. It represents the date/Time
-	// indicating when client certificate is no longer considered valid.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: '2021-01-01T00:00:00.000Z'
-	TLSClientNotAfterKey = attribute.Key("tls.client.not_after")
-
-	// TLSClientNotBeforeKey is the attribute Key conforming to the
-	// "tls.client.not_before" semantic conventions. It represents the
-	// date/Time indicating when client certificate is first considered valid.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: '1970-01-01T00:00:00.000Z'
-	TLSClientNotBeforeKey = attribute.Key("tls.client.not_before")
-
-	// TLSClientServerNameKey is the attribute Key conforming to the
-	// "tls.client.server_name" semantic conventions. It represents the also
-	// called an SNI, this tells the server which hostname to which the client
-	// is attempting to connect to.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'opentelemetry.io'
-	TLSClientServerNameKey = attribute.Key("tls.client.server_name")
-
-	// TLSClientSubjectKey is the attribute Key conforming to the
-	// "tls.client.subject" semantic conventions. It represents the
-	// distinguished name of subject of the x.509 certificate presented by the
-	// client.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'CN=myclient, OU=Documentation Team, DC=example, DC=com'
-	TLSClientSubjectKey = attribute.Key("tls.client.subject")
-
-	// TLSClientSupportedCiphersKey is the attribute Key conforming to the
-	// "tls.client.supported_ciphers" semantic conventions. It represents the
-	// array of ciphers offered by the client during the client hello.
-	//
-	// Type: string[]
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: '"TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384",
-	// "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384", "..."'
-	TLSClientSupportedCiphersKey = attribute.Key("tls.client.supported_ciphers")
-
-	// TLSCurveKey is the attribute Key conforming to the "tls.curve" semantic
-	// conventions. It represents the string indicating the curve used for the
-	// given cipher, when applicable
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'secp256r1'
-	TLSCurveKey = attribute.Key("tls.curve")
-
-	// TLSEstablishedKey is the attribute Key conforming to the
-	// "tls.established" semantic conventions. It represents the boolean flag
-	// indicating if the TLS negotiation was successful and transitioned to an
-	// encrypted tunnel.
-	//
-	// Type: boolean
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: True
-	TLSEstablishedKey = attribute.Key("tls.established")
-
-	// TLSNextProtocolKey is the attribute Key conforming to the
-	// "tls.next_protocol" semantic conventions. It represents the string
-	// indicating the protocol being tunneled. Per the values in the [IANA
-	// registry](https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#alpn-protocol-ids),
-	// this string should be lower case.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'http/1.1'
-	TLSNextProtocolKey = attribute.Key("tls.next_protocol")
-
-	// TLSProtocolNameKey is the attribute Key conforming to the
-	// "tls.protocol.name" semantic conventions. It represents the normalized
-	// lowercase protocol name parsed from original string of the negotiated
-	// [SSL/TLS protocol
-	// version](https://www.openssl.org/docs/man1.1.1/man3/SSL_get_version.html#RETURN-VALUES)
-	//
-	// Type: Enum
-	// RequirementLevel: Optional
-	// Stability: experimental
-	TLSProtocolNameKey = attribute.Key("tls.protocol.name")
-
-	// TLSProtocolVersionKey is the attribute Key conforming to the
-	// "tls.protocol.version" semantic conventions. It represents the numeric
-	// part of the version parsed from the original string of the negotiated
-	// [SSL/TLS protocol
-	// version](https://www.openssl.org/docs/man1.1.1/man3/SSL_get_version.html#RETURN-VALUES)
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: '1.2', '3'
-	TLSProtocolVersionKey = attribute.Key("tls.protocol.version")
-
-	// TLSResumedKey is the attribute Key conforming to the "tls.resumed"
-	// semantic conventions. It represents the boolean flag indicating if this
-	// TLS connection was resumed from an existing TLS negotiation.
-	//
-	// Type: boolean
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: True
-	TLSResumedKey = attribute.Key("tls.resumed")
-
-	// TLSServerCertificateKey is the attribute Key conforming to the
-	// "tls.server.certificate" semantic conventions. It represents the
-	// pEM-encoded stand-alone certificate offered by the server. This is
-	// usually mutually-exclusive of `server.certificate_chain` since this
-	// value also exists in that list.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'MII...'
-	TLSServerCertificateKey = attribute.Key("tls.server.certificate")
-
-	// TLSServerCertificateChainKey is the attribute Key conforming to the
-	// "tls.server.certificate_chain" semantic conventions. It represents the
-	// array of PEM-encoded certificates that make up the certificate chain
-	// offered by the server. This is usually mutually-exclusive of
-	// `server.certificate` since that value should be the first certificate in
-	// the chain.
-	//
-	// Type: string[]
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'MII...', 'MI...'
-	TLSServerCertificateChainKey = attribute.Key("tls.server.certificate_chain")
-
-	// TLSServerHashMd5Key is the attribute Key conforming to the
-	// "tls.server.hash.md5" semantic conventions. It represents the
-	// certificate fingerprint using the MD5 digest of DER-encoded version of
-	// certificate offered by the server. For consistency with other hash
-	// values, this value should be formatted as an uppercase hash.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: '0F76C7F2C55BFD7D8E8B8F4BFBF0C9EC'
-	TLSServerHashMd5Key = attribute.Key("tls.server.hash.md5")
-
-	// TLSServerHashSha1Key is the attribute Key conforming to the
-	// "tls.server.hash.sha1" semantic conventions. It represents the
-	// certificate fingerprint using the SHA1 digest of DER-encoded version of
-	// certificate offered by the server. For consistency with other hash
-	// values, this value should be formatted as an uppercase hash.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: '9E393D93138888D288266C2D915214D1D1CCEB2A'
-	TLSServerHashSha1Key = attribute.Key("tls.server.hash.sha1")
-
-	// TLSServerHashSha256Key is the attribute Key conforming to the
-	// "tls.server.hash.sha256" semantic conventions. It represents the
-	// certificate fingerprint using the SHA256 digest of DER-encoded version
-	// of certificate offered by the server. For consistency with other hash
-	// values, this value should be formatted as an uppercase hash.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples:
-	// '0687F666A054EF17A08E2F2162EAB4CBC0D265E1D7875BE74BF3C712CA92DAF0'
-	TLSServerHashSha256Key = attribute.Key("tls.server.hash.sha256")
-
-	// TLSServerIssuerKey is the attribute Key conforming to the
-	// "tls.server.issuer" semantic conventions. It represents the
-	// distinguished name of
-	// [subject](https://datatracker.ietf.org/doc/html/rfc5280#section-4.1.2.6)
-	// of the issuer of the x.509 certificate presented by the client.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'CN=Example Root CA, OU=Infrastructure Team, DC=example,
-	// DC=com'
-	TLSServerIssuerKey = attribute.Key("tls.server.issuer")
-
-	// TLSServerJa3sKey is the attribute Key conforming to the
-	// "tls.server.ja3s" semantic conventions. It represents a hash that
-	// identifies servers based on how they perform an SSL/TLS handshake.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'd4e5b18d6b55c71272893221c96ba240'
-	TLSServerJa3sKey = attribute.Key("tls.server.ja3s")
-
-	// TLSServerNotAfterKey is the attribute Key conforming to the
-	// "tls.server.not_after" semantic conventions. It represents the date/Time
-	// indicating when server certificate is no longer considered valid.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: '2021-01-01T00:00:00.000Z'
-	TLSServerNotAfterKey = attribute.Key("tls.server.not_after")
-
-	// TLSServerNotBeforeKey is the attribute Key conforming to the
-	// "tls.server.not_before" semantic conventions. It represents the
-	// date/Time indicating when server certificate is first considered valid.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: '1970-01-01T00:00:00.000Z'
-	TLSServerNotBeforeKey = attribute.Key("tls.server.not_before")
-
-	// TLSServerSubjectKey is the attribute Key conforming to the
-	// "tls.server.subject" semantic conventions. It represents the
-	// distinguished name of subject of the x.509 certificate presented by the
-	// server.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'CN=myserver, OU=Documentation Team, DC=example, DC=com'
-	TLSServerSubjectKey = attribute.Key("tls.server.subject")
-)
-
-var (
-	// ssl
-	TLSProtocolNameSsl = TLSProtocolNameKey.String("ssl")
-	// tls
-	TLSProtocolNameTLS = TLSProtocolNameKey.String("tls")
-)
-
-// TLSCipher returns an attribute KeyValue conforming to the "tls.cipher"
-// semantic conventions. It represents the string indicating the
-// [cipher](https://datatracker.ietf.org/doc/html/rfc5246#appendix-A.5) used
-// during the current connection.
-func TLSCipher(val string) attribute.KeyValue {
-	return TLSCipherKey.String(val)
-}
-
-// TLSClientCertificate returns an attribute KeyValue conforming to the
-// "tls.client.certificate" semantic conventions. It represents the pEM-encoded
-// stand-alone certificate offered by the client. This is usually
-// mutually-exclusive of `client.certificate_chain` since this value also
-// exists in that list.
-func TLSClientCertificate(val string) attribute.KeyValue {
-	return TLSClientCertificateKey.String(val)
-}
-
-// TLSClientCertificateChain returns an attribute KeyValue conforming to the
-// "tls.client.certificate_chain" semantic conventions. It represents the array
-// of PEM-encoded certificates that make up the certificate chain offered by
-// the client. This is usually mutually-exclusive of `client.certificate` since
-// that value should be the first certificate in the chain.
-func TLSClientCertificateChain(val ...string) attribute.KeyValue {
-	return TLSClientCertificateChainKey.StringSlice(val)
-}
-
-// TLSClientHashMd5 returns an attribute KeyValue conforming to the
-// "tls.client.hash.md5" semantic conventions. It represents the certificate
-// fingerprint using the MD5 digest of DER-encoded version of certificate
-// offered by the client. For consistency with other hash values, this value
-// should be formatted as an uppercase hash.
-func TLSClientHashMd5(val string) attribute.KeyValue {
-	return TLSClientHashMd5Key.String(val)
-}
-
-// TLSClientHashSha1 returns an attribute KeyValue conforming to the
-// "tls.client.hash.sha1" semantic conventions. It represents the certificate
-// fingerprint using the SHA1 digest of DER-encoded version of certificate
-// offered by the client. For consistency with other hash values, this value
-// should be formatted as an uppercase hash.
-func TLSClientHashSha1(val string) attribute.KeyValue {
-	return TLSClientHashSha1Key.String(val)
-}
-
-// TLSClientHashSha256 returns an attribute KeyValue conforming to the
-// "tls.client.hash.sha256" semantic conventions. It represents the certificate
-// fingerprint using the SHA256 digest of DER-encoded version of certificate
-// offered by the client. For consistency with other hash values, this value
-// should be formatted as an uppercase hash.
-func TLSClientHashSha256(val string) attribute.KeyValue {
-	return TLSClientHashSha256Key.String(val)
-}
-
-// TLSClientIssuer returns an attribute KeyValue conforming to the
-// "tls.client.issuer" semantic conventions. It represents the distinguished
-// name of
-// [subject](https://datatracker.ietf.org/doc/html/rfc5280#section-4.1.2.6) of
-// the issuer of the x.509 certificate presented by the client.
-func TLSClientIssuer(val string) attribute.KeyValue {
-	return TLSClientIssuerKey.String(val)
-}
-
-// TLSClientJa3 returns an attribute KeyValue conforming to the
-// "tls.client.ja3" semantic conventions. It represents a hash that identifies
-// clients based on how they perform an SSL/TLS handshake.
-func TLSClientJa3(val string) attribute.KeyValue {
-	return TLSClientJa3Key.String(val)
-}
-
-// TLSClientNotAfter returns an attribute KeyValue conforming to the
-// "tls.client.not_after" semantic conventions. It represents the date/Time
-// indicating when client certificate is no longer considered valid.
-func TLSClientNotAfter(val string) attribute.KeyValue {
-	return TLSClientNotAfterKey.String(val)
-}
-
-// TLSClientNotBefore returns an attribute KeyValue conforming to the
-// "tls.client.not_before" semantic conventions. It represents the date/Time
-// indicating when client certificate is first considered valid.
-func TLSClientNotBefore(val string) attribute.KeyValue {
-	return TLSClientNotBeforeKey.String(val)
-}
-
-// TLSClientServerName returns an attribute KeyValue conforming to the
-// "tls.client.server_name" semantic conventions. It represents the also called
-// an SNI, this tells the server which hostname to which the client is
-// attempting to connect to.
-func TLSClientServerName(val string) attribute.KeyValue {
-	return TLSClientServerNameKey.String(val)
-}
-
-// TLSClientSubject returns an attribute KeyValue conforming to the
-// "tls.client.subject" semantic conventions. It represents the distinguished
-// name of subject of the x.509 certificate presented by the client.
-func TLSClientSubject(val string) attribute.KeyValue {
-	return TLSClientSubjectKey.String(val)
-}
-
-// TLSClientSupportedCiphers returns an attribute KeyValue conforming to the
-// "tls.client.supported_ciphers" semantic conventions. It represents the array
-// of ciphers offered by the client during the client hello.
-func TLSClientSupportedCiphers(val ...string) attribute.KeyValue {
-	return TLSClientSupportedCiphersKey.StringSlice(val)
-}
-
-// TLSCurve returns an attribute KeyValue conforming to the "tls.curve"
-// semantic conventions. It represents the string indicating the curve used for
-// the given cipher, when applicable
-func TLSCurve(val string) attribute.KeyValue {
-	return TLSCurveKey.String(val)
-}
-
-// TLSEstablished returns an attribute KeyValue conforming to the
-// "tls.established" semantic conventions. It represents the boolean flag
-// indicating if the TLS negotiation was successful and transitioned to an
-// encrypted tunnel.
-func TLSEstablished(val bool) attribute.KeyValue {
-	return TLSEstablishedKey.Bool(val)
-}
-
-// TLSNextProtocol returns an attribute KeyValue conforming to the
-// "tls.next_protocol" semantic conventions. It represents the string
-// indicating the protocol being tunneled. Per the values in the [IANA
-// registry](https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#alpn-protocol-ids),
-// this string should be lower case.
-func TLSNextProtocol(val string) attribute.KeyValue {
-	return TLSNextProtocolKey.String(val)
-}
-
-// TLSProtocolVersion returns an attribute KeyValue conforming to the
-// "tls.protocol.version" semantic conventions. It represents the numeric part
-// of the version parsed from the original string of the negotiated [SSL/TLS
-// protocol
-// version](https://www.openssl.org/docs/man1.1.1/man3/SSL_get_version.html#RETURN-VALUES)
-func TLSProtocolVersion(val string) attribute.KeyValue {
-	return TLSProtocolVersionKey.String(val)
-}
-
-// TLSResumed returns an attribute KeyValue conforming to the "tls.resumed"
-// semantic conventions. It represents the boolean flag indicating if this TLS
-// connection was resumed from an existing TLS negotiation.
-func TLSResumed(val bool) attribute.KeyValue {
-	return TLSResumedKey.Bool(val)
-}
-
-// TLSServerCertificate returns an attribute KeyValue conforming to the
-// "tls.server.certificate" semantic conventions. It represents the pEM-encoded
-// stand-alone certificate offered by the server. This is usually
-// mutually-exclusive of `server.certificate_chain` since this value also
-// exists in that list.
-func TLSServerCertificate(val string) attribute.KeyValue {
-	return TLSServerCertificateKey.String(val)
-}
-
-// TLSServerCertificateChain returns an attribute KeyValue conforming to the
-// "tls.server.certificate_chain" semantic conventions. It represents the array
-// of PEM-encoded certificates that make up the certificate chain offered by
-// the server. This is usually mutually-exclusive of `server.certificate` since
-// that value should be the first certificate in the chain.
-func TLSServerCertificateChain(val ...string) attribute.KeyValue {
-	return TLSServerCertificateChainKey.StringSlice(val)
-}
-
-// TLSServerHashMd5 returns an attribute KeyValue conforming to the
-// "tls.server.hash.md5" semantic conventions. It represents the certificate
-// fingerprint using the MD5 digest of DER-encoded version of certificate
-// offered by the server. For consistency with other hash values, this value
-// should be formatted as an uppercase hash.
-func TLSServerHashMd5(val string) attribute.KeyValue {
-	return TLSServerHashMd5Key.String(val)
-}
-
-// TLSServerHashSha1 returns an attribute KeyValue conforming to the
-// "tls.server.hash.sha1" semantic conventions. It represents the certificate
-// fingerprint using the SHA1 digest of DER-encoded version of certificate
-// offered by the server. For consistency with other hash values, this value
-// should be formatted as an uppercase hash.
-func TLSServerHashSha1(val string) attribute.KeyValue {
-	return TLSServerHashSha1Key.String(val)
-}
-
-// TLSServerHashSha256 returns an attribute KeyValue conforming to the
-// "tls.server.hash.sha256" semantic conventions. It represents the certificate
-// fingerprint using the SHA256 digest of DER-encoded version of certificate
-// offered by the server. For consistency with other hash values, this value
-// should be formatted as an uppercase hash.
-func TLSServerHashSha256(val string) attribute.KeyValue {
-	return TLSServerHashSha256Key.String(val)
-}
-
-// TLSServerIssuer returns an attribute KeyValue conforming to the
-// "tls.server.issuer" semantic conventions. It represents the distinguished
-// name of
-// [subject](https://datatracker.ietf.org/doc/html/rfc5280#section-4.1.2.6) of
-// the issuer of the x.509 certificate presented by the client.
-func TLSServerIssuer(val string) attribute.KeyValue {
-	return TLSServerIssuerKey.String(val)
-}
-
-// TLSServerJa3s returns an attribute KeyValue conforming to the
-// "tls.server.ja3s" semantic conventions. It represents a hash that identifies
-// servers based on how they perform an SSL/TLS handshake.
-func TLSServerJa3s(val string) attribute.KeyValue {
-	return TLSServerJa3sKey.String(val)
-}
-
-// TLSServerNotAfter returns an attribute KeyValue conforming to the
-// "tls.server.not_after" semantic conventions. It represents the date/Time
-// indicating when server certificate is no longer considered valid.
-func TLSServerNotAfter(val string) attribute.KeyValue {
-	return TLSServerNotAfterKey.String(val)
-}
-
-// TLSServerNotBefore returns an attribute KeyValue conforming to the
-// "tls.server.not_before" semantic conventions. It represents the date/Time
-// indicating when server certificate is first considered valid.
-func TLSServerNotBefore(val string) attribute.KeyValue {
-	return TLSServerNotBeforeKey.String(val)
-}
-
-// TLSServerSubject returns an attribute KeyValue conforming to the
-// "tls.server.subject" semantic conventions. It represents the distinguished
-// name of subject of the x.509 certificate presented by the server.
-func TLSServerSubject(val string) attribute.KeyValue {
-	return TLSServerSubjectKey.String(val)
-}
-
-// Attributes describing URL.
-const (
-	// URLDomainKey is the attribute Key conforming to the "url.domain"
-	// semantic conventions. It represents the domain extracted from the
-	// `url.full`, such as "opentelemetry.io".
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'www.foo.bar', 'opentelemetry.io', '3.12.167.2',
-	// '[1080:0:0:0:8:800:200C:417A]'
-	// Note: In some cases a URL may refer to an IP and/or port directly,
-	// without a domain name. In this case, the IP address would go to the
-	// domain field. If the URL contains a [literal IPv6
-	// address](https://www.rfc-editor.org/rfc/rfc2732#section-2) enclosed by
-	// `[` and `]`, the `[` and `]` characters should also be captured in the
-	// domain field.
-	URLDomainKey = attribute.Key("url.domain")
-
-	// URLExtensionKey is the attribute Key conforming to the "url.extension"
-	// semantic conventions. It represents the file extension extracted from
-	// the `url.full`, excluding the leading dot.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'png', 'gz'
-	// Note: The file extension is only set if it exists, as not every url has
-	// a file extension. When the file name has multiple extensions
-	// `example.tar.gz`, only the last one should be captured `gz`, not
-	// `tar.gz`.
-	URLExtensionKey = attribute.Key("url.extension")
-
-	// URLFragmentKey is the attribute Key conforming to the "url.fragment"
-	// semantic conventions. It represents the [URI
-	// fragment](https://www.rfc-editor.org/rfc/rfc3986#section-3.5) component
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: stable
-	// Examples: 'SemConv'
-	URLFragmentKey = attribute.Key("url.fragment")
-
-	// URLFullKey is the attribute Key conforming to the "url.full" semantic
-	// conventions. It represents the absolute URL describing a network
-	// resource according to [RFC3986](https://www.rfc-editor.org/rfc/rfc3986)
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: stable
-	// Examples: 'https://www.foo.bar/search?q=OpenTelemetry#SemConv',
-	// '//localhost'
-	// Note: For network calls, URL usually has
-	// `scheme://host[:port][path][?query][#fragment]` format, where the
-	// fragment is not transmitted over HTTP, but if it is known, it SHOULD be
-	// included nevertheless.
-	// `url.full` MUST NOT contain credentials passed via URL in form of
-	// `https://username:password@www.example.com/`. In such case username and
-	// password SHOULD be redacted and attribute's value SHOULD be
-	// `https://REDACTED:REDACTED@www.example.com/`.
-	// `url.full` SHOULD capture the absolute URL when it is available (or can
-	// be reconstructed). Sensitive content provided in `url.full` SHOULD be
-	// scrubbed when instrumentations can identify it.
-	URLFullKey = attribute.Key("url.full")
-
-	// URLOriginalKey is the attribute Key conforming to the "url.original"
-	// semantic conventions. It represents the unmodified original URL as seen
-	// in the event source.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'https://www.foo.bar/search?q=OpenTelemetry#SemConv',
-	// 'search?q=OpenTelemetry'
-	// Note: In network monitoring, the observed URL may be a full URL, whereas
-	// in access logs, the URL is often just represented as a path. This field
-	// is meant to represent the URL as it was observed, complete or not.
-	// `url.original` might contain credentials passed via URL in form of
-	// `https://username:password@www.example.com/`. In such case password and
-	// username SHOULD NOT be redacted and attribute's value SHOULD remain the
-	// same.
-	URLOriginalKey = attribute.Key("url.original")
-
-	// URLPathKey is the attribute Key conforming to the "url.path" semantic
-	// conventions. It represents the [URI
-	// path](https://www.rfc-editor.org/rfc/rfc3986#section-3.3) component
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: stable
-	// Examples: '/search'
-	// Note: Sensitive content provided in `url.path` SHOULD be scrubbed when
-	// instrumentations can identify it.
-	URLPathKey = attribute.Key("url.path")
-
-	// URLPortKey is the attribute Key conforming to the "url.port" semantic
-	// conventions. It represents the port extracted from the `url.full`
-	//
-	// Type: int
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 443
-	URLPortKey = attribute.Key("url.port")
-
-	// URLQueryKey is the attribute Key conforming to the "url.query" semantic
-	// conventions. It represents the [URI
-	// query](https://www.rfc-editor.org/rfc/rfc3986#section-3.4) component
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: stable
-	// Examples: 'q=OpenTelemetry'
-	// Note: Sensitive content provided in `url.query` SHOULD be scrubbed when
-	// instrumentations can identify it.
-	URLQueryKey = attribute.Key("url.query")
-
-	// URLRegisteredDomainKey is the attribute Key conforming to the
-	// "url.registered_domain" semantic conventions. It represents the highest
-	// registered url domain, stripped of the subdomain.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'example.com', 'foo.co.uk'
-	// Note: This value can be determined precisely with the [public suffix
-	// list](http://publicsuffix.org). For example, the registered domain for
-	// `foo.example.com` is `example.com`. Trying to approximate this by simply
-	// taking the last two labels will not work well for TLDs such as `co.uk`.
-	URLRegisteredDomainKey = attribute.Key("url.registered_domain")
-
-	// URLSchemeKey is the attribute Key conforming to the "url.scheme"
-	// semantic conventions. It represents the [URI
-	// scheme](https://www.rfc-editor.org/rfc/rfc3986#section-3.1) component
-	// identifying the used protocol.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: stable
-	// Examples: 'https', 'ftp', 'telnet'
-	URLSchemeKey = attribute.Key("url.scheme")
-
-	// URLSubdomainKey is the attribute Key conforming to the "url.subdomain"
-	// semantic conventions. It represents the subdomain portion of a fully
-	// qualified domain name includes all of the names except the host name
-	// under the registered_domain. In a partially qualified domain, or if the
-	// qualification level of the full name cannot be determined, subdomain
-	// contains all of the names below the registered domain.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'east', 'sub2.sub1'
-	// Note: The subdomain portion of `www.east.mydomain.co.uk` is `east`. If
-	// the domain has multiple levels of subdomain, such as
-	// `sub2.sub1.example.com`, the subdomain field should contain `sub2.sub1`,
-	// with no trailing period.
-	URLSubdomainKey = attribute.Key("url.subdomain")
-
-	// URLTemplateKey is the attribute Key conforming to the "url.template"
-	// semantic conventions. It represents the low-cardinality template of an
-	// [absolute path
-	// reference](https://www.rfc-editor.org/rfc/rfc3986#section-4.2).
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: '/users/{id}', '/users/:id', '/users?id={id}'
-	URLTemplateKey = attribute.Key("url.template")
-
-	// URLTopLevelDomainKey is the attribute Key conforming to the
-	// "url.top_level_domain" semantic conventions. It represents the effective
-	// top level domain (eTLD), also known as the domain suffix, is the last
-	// part of the domain name. For example, the top level domain for
-	// example.com is `com`.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'com', 'co.uk'
-	// Note: This value can be determined precisely with the [public suffix
-	// list](http://publicsuffix.org).
-	URLTopLevelDomainKey = attribute.Key("url.top_level_domain")
-)
-
-// URLDomain returns an attribute KeyValue conforming to the "url.domain"
-// semantic conventions. It represents the domain extracted from the
-// `url.full`, such as "opentelemetry.io".
-func URLDomain(val string) attribute.KeyValue {
-	return URLDomainKey.String(val)
-}
-
-// URLExtension returns an attribute KeyValue conforming to the
-// "url.extension" semantic conventions. It represents the file extension
-// extracted from the `url.full`, excluding the leading dot.
-func URLExtension(val string) attribute.KeyValue {
-	return URLExtensionKey.String(val)
-}
-
-// URLFragment returns an attribute KeyValue conforming to the
-// "url.fragment" semantic conventions. It represents the [URI
-// fragment](https://www.rfc-editor.org/rfc/rfc3986#section-3.5) component
-func URLFragment(val string) attribute.KeyValue {
-	return URLFragmentKey.String(val)
-}
-
-// URLFull returns an attribute KeyValue conforming to the "url.full"
-// semantic conventions. It represents the absolute URL describing a network
-// resource according to [RFC3986](https://www.rfc-editor.org/rfc/rfc3986)
-func URLFull(val string) attribute.KeyValue {
-	return URLFullKey.String(val)
-}
-
-// URLOriginal returns an attribute KeyValue conforming to the
-// "url.original" semantic conventions. It represents the unmodified original
-// URL as seen in the event source.
-func URLOriginal(val string) attribute.KeyValue {
-	return URLOriginalKey.String(val)
-}
-
-// URLPath returns an attribute KeyValue conforming to the "url.path"
-// semantic conventions. It represents the [URI
-// path](https://www.rfc-editor.org/rfc/rfc3986#section-3.3) component
-func URLPath(val string) attribute.KeyValue {
-	return URLPathKey.String(val)
-}
-
-// URLPort returns an attribute KeyValue conforming to the "url.port"
-// semantic conventions. It represents the port extracted from the `url.full`
-func URLPort(val int) attribute.KeyValue {
-	return URLPortKey.Int(val)
-}
-
-// URLQuery returns an attribute KeyValue conforming to the "url.query"
-// semantic conventions. It represents the [URI
-// query](https://www.rfc-editor.org/rfc/rfc3986#section-3.4) component
-func URLQuery(val string) attribute.KeyValue {
-	return URLQueryKey.String(val)
-}
-
-// URLRegisteredDomain returns an attribute KeyValue conforming to the
-// "url.registered_domain" semantic conventions. It represents the highest
-// registered url domain, stripped of the subdomain.
-func URLRegisteredDomain(val string) attribute.KeyValue {
-	return URLRegisteredDomainKey.String(val)
-}
-
-// URLScheme returns an attribute KeyValue conforming to the "url.scheme"
-// semantic conventions. It represents the [URI
-// scheme](https://www.rfc-editor.org/rfc/rfc3986#section-3.1) component
-// identifying the used protocol.
-func URLScheme(val string) attribute.KeyValue {
-	return URLSchemeKey.String(val)
-}
-
-// URLSubdomain returns an attribute KeyValue conforming to the
-// "url.subdomain" semantic conventions. It represents the subdomain portion of
-// a fully qualified domain name includes all of the names except the host name
-// under the registered_domain. In a partially qualified domain, or if the
-// qualification level of the full name cannot be determined, subdomain
-// contains all of the names below the registered domain.
-func URLSubdomain(val string) attribute.KeyValue {
-	return URLSubdomainKey.String(val)
-}
-
-// URLTemplate returns an attribute KeyValue conforming to the
-// "url.template" semantic conventions. It represents the low-cardinality
-// template of an [absolute path
-// reference](https://www.rfc-editor.org/rfc/rfc3986#section-4.2).
-func URLTemplate(val string) attribute.KeyValue {
-	return URLTemplateKey.String(val)
-}
-
-// URLTopLevelDomain returns an attribute KeyValue conforming to the
-// "url.top_level_domain" semantic conventions. It represents the effective top
-// level domain (eTLD), also known as the domain suffix, is the last part of
-// the domain name. For example, the top level domain for example.com is `com`.
-func URLTopLevelDomain(val string) attribute.KeyValue {
-	return URLTopLevelDomainKey.String(val)
-}
-
-// Describes user-agent attributes.
-const (
-	// UserAgentNameKey is the attribute Key conforming to the
-	// "user_agent.name" semantic conventions. It represents the name of the
-	// user-agent extracted from original. Usually refers to the browser's
-	// name.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'Safari', 'YourApp'
-	// Note: [Example](https://www.whatsmyua.info) of extracting browser's name
-	// from original string. In the case of using a user-agent for non-browser
-	// products, such as microservices with multiple names/versions inside the
-	// `user_agent.original`, the most significant name SHOULD be selected. In
-	// such a scenario it should align with `user_agent.version`
-	UserAgentNameKey = attribute.Key("user_agent.name")
-
-	// UserAgentOriginalKey is the attribute Key conforming to the
-	// "user_agent.original" semantic conventions. It represents the value of
-	// the [HTTP
-	// User-Agent](https://www.rfc-editor.org/rfc/rfc9110.html#field.user-agent)
-	// header sent by the client.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: stable
-	// Examples: 'CERN-LineMode/2.15 libwww/2.17b3', 'Mozilla/5.0 (iPhone; CPU
-	// iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko)
-	// Version/14.1.2 Mobile/15E148 Safari/604.1', 'YourApp/1.0.0
-	// grpc-java-okhttp/1.27.2'
-	UserAgentOriginalKey = attribute.Key("user_agent.original")
-
-	// UserAgentVersionKey is the attribute Key conforming to the
-	// "user_agent.version" semantic conventions. It represents the version of
-	// the user-agent extracted from original. Usually refers to the browser's
-	// version
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: '14.1.2', '1.0.0'
-	// Note: [Example](https://www.whatsmyua.info) of extracting browser's
-	// version from original string. In the case of using a user-agent for
-	// non-browser products, such as microservices with multiple names/versions
-	// inside the `user_agent.original`, the most significant version SHOULD be
-	// selected. In such a scenario it should align with `user_agent.name`
-	UserAgentVersionKey = attribute.Key("user_agent.version")
-)
-
-// UserAgentName returns an attribute KeyValue conforming to the
-// "user_agent.name" semantic conventions. It represents the name of the
-// user-agent extracted from original. Usually refers to the browser's name.
-func UserAgentName(val string) attribute.KeyValue {
-	return UserAgentNameKey.String(val)
-}
-
-// UserAgentOriginal returns an attribute KeyValue conforming to the
-// "user_agent.original" semantic conventions. It represents the value of the
-// [HTTP
-// User-Agent](https://www.rfc-editor.org/rfc/rfc9110.html#field.user-agent)
-// header sent by the client.
-func UserAgentOriginal(val string) attribute.KeyValue {
-	return UserAgentOriginalKey.String(val)
-}
-
-// UserAgentVersion returns an attribute KeyValue conforming to the
-// "user_agent.version" semantic conventions. It represents the version of the
-// user-agent extracted from original. Usually refers to the browser's version
-func UserAgentVersion(val string) attribute.KeyValue {
-	return UserAgentVersionKey.String(val)
-}
-
-// The attributes used to describe the packaged software running the
-// application code.
-const (
-	// WebEngineDescriptionKey is the attribute Key conforming to the
-	// "webengine.description" semantic conventions. It represents the
-	// additional description of the web engine (e.g. detailed version and
-	// edition information).
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'WildFly Full 21.0.0.Final (WildFly Core 13.0.1.Final) -
-	// 2.2.2.Final'
-	WebEngineDescriptionKey = attribute.Key("webengine.description")
-
-	// WebEngineNameKey is the attribute Key conforming to the "webengine.name"
-	// semantic conventions. It represents the name of the web engine.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: 'WildFly'
-	WebEngineNameKey = attribute.Key("webengine.name")
-
-	// WebEngineVersionKey is the attribute Key conforming to the
-	// "webengine.version" semantic conventions. It represents the version of
-	// the web engine.
-	//
-	// Type: string
-	// RequirementLevel: Optional
-	// Stability: experimental
-	// Examples: '21.0.0'
-	WebEngineVersionKey = attribute.Key("webengine.version")
-)
-
-// WebEngineDescription returns an attribute KeyValue conforming to the
-// "webengine.description" semantic conventions. It represents the additional
-// description of the web engine (e.g. detailed version and edition
-// information).
-func WebEngineDescription(val string) attribute.KeyValue {
-	return WebEngineDescriptionKey.String(val)
-}
-
-// WebEngineName returns an attribute KeyValue conforming to the
-// "webengine.name" semantic conventions. It represents the name of the web
-// engine.
-func WebEngineName(val string) attribute.KeyValue {
-	return WebEngineNameKey.String(val)
-}
-
-// WebEngineVersion returns an attribute KeyValue conforming to the
-// "webengine.version" semantic conventions. It represents the version of the
-// web engine.
-func WebEngineVersion(val string) attribute.KeyValue {
-	return WebEngineVersionKey.String(val)
-}

+ 0 - 9
v2/vendor/go.opentelemetry.io/otel/semconv/v1.26.0/doc.go

@@ -1,9 +0,0 @@
-// Copyright The OpenTelemetry Authors
-// SPDX-License-Identifier: Apache-2.0
-
-// Package semconv implements OpenTelemetry semantic conventions.
-//
-// OpenTelemetry semantic conventions are agreed standardized naming
-// patterns for OpenTelemetry things. This package represents the v1.26.0
-// version of the OpenTelemetry semantic conventions.
-package semconv // import "go.opentelemetry.io/otel/semconv/v1.26.0"

+ 0 - 9
v2/vendor/go.opentelemetry.io/otel/semconv/v1.26.0/exception.go

@@ -1,9 +0,0 @@
-// Copyright The OpenTelemetry Authors
-// SPDX-License-Identifier: Apache-2.0
-
-package semconv // import "go.opentelemetry.io/otel/semconv/v1.26.0"
-
-const (
-	// ExceptionEventName is the name of the Span event representing an exception.
-	ExceptionEventName = "exception"
-)

+ 0 - 1307
v2/vendor/go.opentelemetry.io/otel/semconv/v1.26.0/metric.go

@@ -1,1307 +0,0 @@
-// Copyright The OpenTelemetry Authors
-// SPDX-License-Identifier: Apache-2.0
-
-// Code generated from semantic convention specification. DO NOT EDIT.
-
-package semconv // import "go.opentelemetry.io/otel/semconv/v1.26.0"
-
-const (
-
-	// ContainerCPUTime is the metric conforming to the "container.cpu.time"
-	// semantic conventions. It represents the total CPU time consumed.
-	// Instrument: counter
-	// Unit: s
-	// Stability: Experimental
-	ContainerCPUTimeName        = "container.cpu.time"
-	ContainerCPUTimeUnit        = "s"
-	ContainerCPUTimeDescription = "Total CPU time consumed"
-
-	// ContainerMemoryUsage is the metric conforming to the
-	// "container.memory.usage" semantic conventions. It represents the memory
-	// usage of the container.
-	// Instrument: counter
-	// Unit: By
-	// Stability: Experimental
-	ContainerMemoryUsageName        = "container.memory.usage"
-	ContainerMemoryUsageUnit        = "By"
-	ContainerMemoryUsageDescription = "Memory usage of the container."
-
-	// ContainerDiskIo is the metric conforming to the "container.disk.io" semantic
-	// conventions. It represents the disk bytes for the container.
-	// Instrument: counter
-	// Unit: By
-	// Stability: Experimental
-	ContainerDiskIoName        = "container.disk.io"
-	ContainerDiskIoUnit        = "By"
-	ContainerDiskIoDescription = "Disk bytes for the container."
-
-	// ContainerNetworkIo is the metric conforming to the "container.network.io"
-	// semantic conventions. It represents the network bytes for the container.
-	// Instrument: counter
-	// Unit: By
-	// Stability: Experimental
-	ContainerNetworkIoName        = "container.network.io"
-	ContainerNetworkIoUnit        = "By"
-	ContainerNetworkIoDescription = "Network bytes for the container."
-
-	// DBClientOperationDuration is the metric conforming to the
-	// "db.client.operation.duration" semantic conventions. It represents the
-	// duration of database client operations.
-	// Instrument: histogram
-	// Unit: s
-	// Stability: Experimental
-	DBClientOperationDurationName        = "db.client.operation.duration"
-	DBClientOperationDurationUnit        = "s"
-	DBClientOperationDurationDescription = "Duration of database client operations."
-
-	// DBClientConnectionCount is the metric conforming to the
-	// "db.client.connection.count" semantic conventions. It represents the number
-	// of connections that are currently in state described by the `state`
-	// attribute.
-	// Instrument: updowncounter
-	// Unit: {connection}
-	// Stability: Experimental
-	DBClientConnectionCountName        = "db.client.connection.count"
-	DBClientConnectionCountUnit        = "{connection}"
-	DBClientConnectionCountDescription = "The number of connections that are currently in state described by the `state` attribute"
-
-	// DBClientConnectionIdleMax is the metric conforming to the
-	// "db.client.connection.idle.max" semantic conventions. It represents the
-	// maximum number of idle open connections allowed.
-	// Instrument: updowncounter
-	// Unit: {connection}
-	// Stability: Experimental
-	DBClientConnectionIdleMaxName        = "db.client.connection.idle.max"
-	DBClientConnectionIdleMaxUnit        = "{connection}"
-	DBClientConnectionIdleMaxDescription = "The maximum number of idle open connections allowed"
-
-	// DBClientConnectionIdleMin is the metric conforming to the
-	// "db.client.connection.idle.min" semantic conventions. It represents the
-	// minimum number of idle open connections allowed.
-	// Instrument: updowncounter
-	// Unit: {connection}
-	// Stability: Experimental
-	DBClientConnectionIdleMinName        = "db.client.connection.idle.min"
-	DBClientConnectionIdleMinUnit        = "{connection}"
-	DBClientConnectionIdleMinDescription = "The minimum number of idle open connections allowed"
-
-	// DBClientConnectionMax is the metric conforming to the
-	// "db.client.connection.max" semantic conventions. It represents the maximum
-	// number of open connections allowed.
-	// Instrument: updowncounter
-	// Unit: {connection}
-	// Stability: Experimental
-	DBClientConnectionMaxName        = "db.client.connection.max"
-	DBClientConnectionMaxUnit        = "{connection}"
-	DBClientConnectionMaxDescription = "The maximum number of open connections allowed"
-
-	// DBClientConnectionPendingRequests is the metric conforming to the
-	// "db.client.connection.pending_requests" semantic conventions. It represents
-	// the number of pending requests for an open connection, cumulative for the
-	// entire pool.
-	// Instrument: updowncounter
-	// Unit: {request}
-	// Stability: Experimental
-	DBClientConnectionPendingRequestsName        = "db.client.connection.pending_requests"
-	DBClientConnectionPendingRequestsUnit        = "{request}"
-	DBClientConnectionPendingRequestsDescription = "The number of pending requests for an open connection, cumulative for the entire pool"
-
-	// DBClientConnectionTimeouts is the metric conforming to the
-	// "db.client.connection.timeouts" semantic conventions. It represents the
-	// number of connection timeouts that have occurred trying to obtain a
-	// connection from the pool.
-	// Instrument: counter
-	// Unit: {timeout}
-	// Stability: Experimental
-	DBClientConnectionTimeoutsName        = "db.client.connection.timeouts"
-	DBClientConnectionTimeoutsUnit        = "{timeout}"
-	DBClientConnectionTimeoutsDescription = "The number of connection timeouts that have occurred trying to obtain a connection from the pool"
-
-	// DBClientConnectionCreateTime is the metric conforming to the
-	// "db.client.connection.create_time" semantic conventions. It represents the
-	// time it took to create a new connection.
-	// Instrument: histogram
-	// Unit: s
-	// Stability: Experimental
-	DBClientConnectionCreateTimeName        = "db.client.connection.create_time"
-	DBClientConnectionCreateTimeUnit        = "s"
-	DBClientConnectionCreateTimeDescription = "The time it took to create a new connection"
-
-	// DBClientConnectionWaitTime is the metric conforming to the
-	// "db.client.connection.wait_time" semantic conventions. It represents the
-	// time it took to obtain an open connection from the pool.
-	// Instrument: histogram
-	// Unit: s
-	// Stability: Experimental
-	DBClientConnectionWaitTimeName        = "db.client.connection.wait_time"
-	DBClientConnectionWaitTimeUnit        = "s"
-	DBClientConnectionWaitTimeDescription = "The time it took to obtain an open connection from the pool"
-
-	// DBClientConnectionUseTime is the metric conforming to the
-	// "db.client.connection.use_time" semantic conventions. It represents the time
-	// between borrowing a connection and returning it to the pool.
-	// Instrument: histogram
-	// Unit: s
-	// Stability: Experimental
-	DBClientConnectionUseTimeName        = "db.client.connection.use_time"
-	DBClientConnectionUseTimeUnit        = "s"
-	DBClientConnectionUseTimeDescription = "The time between borrowing a connection and returning it to the pool"
-
-	// DBClientConnectionsUsage is the metric conforming to the
-	// "db.client.connections.usage" semantic conventions. It represents the
-	// deprecated, use `db.client.connection.count` instead.
-	// Instrument: updowncounter
-	// Unit: {connection}
-	// Stability: Experimental
-	DBClientConnectionsUsageName        = "db.client.connections.usage"
-	DBClientConnectionsUsageUnit        = "{connection}"
-	DBClientConnectionsUsageDescription = "Deprecated, use `db.client.connection.count` instead."
-
-	// DBClientConnectionsIdleMax is the metric conforming to the
-	// "db.client.connections.idle.max" semantic conventions. It represents the
-	// deprecated, use `db.client.connection.idle.max` instead.
-	// Instrument: updowncounter
-	// Unit: {connection}
-	// Stability: Experimental
-	DBClientConnectionsIdleMaxName        = "db.client.connections.idle.max"
-	DBClientConnectionsIdleMaxUnit        = "{connection}"
-	DBClientConnectionsIdleMaxDescription = "Deprecated, use `db.client.connection.idle.max` instead."
-
-	// DBClientConnectionsIdleMin is the metric conforming to the
-	// "db.client.connections.idle.min" semantic conventions. It represents the
-	// deprecated, use `db.client.connection.idle.min` instead.
-	// Instrument: updowncounter
-	// Unit: {connection}
-	// Stability: Experimental
-	DBClientConnectionsIdleMinName        = "db.client.connections.idle.min"
-	DBClientConnectionsIdleMinUnit        = "{connection}"
-	DBClientConnectionsIdleMinDescription = "Deprecated, use `db.client.connection.idle.min` instead."
-
-	// DBClientConnectionsMax is the metric conforming to the
-	// "db.client.connections.max" semantic conventions. It represents the
-	// deprecated, use `db.client.connection.max` instead.
-	// Instrument: updowncounter
-	// Unit: {connection}
-	// Stability: Experimental
-	DBClientConnectionsMaxName        = "db.client.connections.max"
-	DBClientConnectionsMaxUnit        = "{connection}"
-	DBClientConnectionsMaxDescription = "Deprecated, use `db.client.connection.max` instead."
-
-	// DBClientConnectionsPendingRequests is the metric conforming to the
-	// "db.client.connections.pending_requests" semantic conventions. It represents
-	// the deprecated, use `db.client.connection.pending_requests` instead.
-	// Instrument: updowncounter
-	// Unit: {request}
-	// Stability: Experimental
-	DBClientConnectionsPendingRequestsName        = "db.client.connections.pending_requests"
-	DBClientConnectionsPendingRequestsUnit        = "{request}"
-	DBClientConnectionsPendingRequestsDescription = "Deprecated, use `db.client.connection.pending_requests` instead."
-
-	// DBClientConnectionsTimeouts is the metric conforming to the
-	// "db.client.connections.timeouts" semantic conventions. It represents the
-	// deprecated, use `db.client.connection.timeouts` instead.
-	// Instrument: counter
-	// Unit: {timeout}
-	// Stability: Experimental
-	DBClientConnectionsTimeoutsName        = "db.client.connections.timeouts"
-	DBClientConnectionsTimeoutsUnit        = "{timeout}"
-	DBClientConnectionsTimeoutsDescription = "Deprecated, use `db.client.connection.timeouts` instead."
-
-	// DBClientConnectionsCreateTime is the metric conforming to the
-	// "db.client.connections.create_time" semantic conventions. It represents the
-	// deprecated, use `db.client.connection.create_time` instead. Note: the unit
-	// also changed from `ms` to `s`.
-	// Instrument: histogram
-	// Unit: ms
-	// Stability: Experimental
-	DBClientConnectionsCreateTimeName        = "db.client.connections.create_time"
-	DBClientConnectionsCreateTimeUnit        = "ms"
-	DBClientConnectionsCreateTimeDescription = "Deprecated, use `db.client.connection.create_time` instead. Note: the unit also changed from `ms` to `s`."
-
-	// DBClientConnectionsWaitTime is the metric conforming to the
-	// "db.client.connections.wait_time" semantic conventions. It represents the
-	// deprecated, use `db.client.connection.wait_time` instead. Note: the unit
-	// also changed from `ms` to `s`.
-	// Instrument: histogram
-	// Unit: ms
-	// Stability: Experimental
-	DBClientConnectionsWaitTimeName        = "db.client.connections.wait_time"
-	DBClientConnectionsWaitTimeUnit        = "ms"
-	DBClientConnectionsWaitTimeDescription = "Deprecated, use `db.client.connection.wait_time` instead. Note: the unit also changed from `ms` to `s`."
-
-	// DBClientConnectionsUseTime is the metric conforming to the
-	// "db.client.connections.use_time" semantic conventions. It represents the
-	// deprecated, use `db.client.connection.use_time` instead. Note: the unit also
-	// changed from `ms` to `s`.
-	// Instrument: histogram
-	// Unit: ms
-	// Stability: Experimental
-	DBClientConnectionsUseTimeName        = "db.client.connections.use_time"
-	DBClientConnectionsUseTimeUnit        = "ms"
-	DBClientConnectionsUseTimeDescription = "Deprecated, use `db.client.connection.use_time` instead. Note: the unit also changed from `ms` to `s`."
-
-	// DNSLookupDuration is the metric conforming to the "dns.lookup.duration"
-	// semantic conventions. It represents the measures the time taken to perform a
-	// DNS lookup.
-	// Instrument: histogram
-	// Unit: s
-	// Stability: Experimental
-	DNSLookupDurationName        = "dns.lookup.duration"
-	DNSLookupDurationUnit        = "s"
-	DNSLookupDurationDescription = "Measures the time taken to perform a DNS lookup."
-
-	// AspnetcoreRoutingMatchAttempts is the metric conforming to the
-	// "aspnetcore.routing.match_attempts" semantic conventions. It represents the
-	// number of requests that were attempted to be matched to an endpoint.
-	// Instrument: counter
-	// Unit: {match_attempt}
-	// Stability: Stable
-	AspnetcoreRoutingMatchAttemptsName        = "aspnetcore.routing.match_attempts"
-	AspnetcoreRoutingMatchAttemptsUnit        = "{match_attempt}"
-	AspnetcoreRoutingMatchAttemptsDescription = "Number of requests that were attempted to be matched to an endpoint."
-
-	// AspnetcoreDiagnosticsExceptions is the metric conforming to the
-	// "aspnetcore.diagnostics.exceptions" semantic conventions. It represents the
-	// number of exceptions caught by exception handling middleware.
-	// Instrument: counter
-	// Unit: {exception}
-	// Stability: Stable
-	AspnetcoreDiagnosticsExceptionsName        = "aspnetcore.diagnostics.exceptions"
-	AspnetcoreDiagnosticsExceptionsUnit        = "{exception}"
-	AspnetcoreDiagnosticsExceptionsDescription = "Number of exceptions caught by exception handling middleware."
-
-	// AspnetcoreRateLimitingActiveRequestLeases is the metric conforming to the
-	// "aspnetcore.rate_limiting.active_request_leases" semantic conventions. It
-	// represents the number of requests that are currently active on the server
-	// that hold a rate limiting lease.
-	// Instrument: updowncounter
-	// Unit: {request}
-	// Stability: Stable
-	AspnetcoreRateLimitingActiveRequestLeasesName        = "aspnetcore.rate_limiting.active_request_leases"
-	AspnetcoreRateLimitingActiveRequestLeasesUnit        = "{request}"
-	AspnetcoreRateLimitingActiveRequestLeasesDescription = "Number of requests that are currently active on the server that hold a rate limiting lease."
-
-	// AspnetcoreRateLimitingRequestLeaseDuration is the metric conforming to the
-	// "aspnetcore.rate_limiting.request_lease.duration" semantic conventions. It
-	// represents the duration of rate limiting lease held by requests on the
-	// server.
-	// Instrument: histogram
-	// Unit: s
-	// Stability: Stable
-	AspnetcoreRateLimitingRequestLeaseDurationName        = "aspnetcore.rate_limiting.request_lease.duration"
-	AspnetcoreRateLimitingRequestLeaseDurationUnit        = "s"
-	AspnetcoreRateLimitingRequestLeaseDurationDescription = "The duration of rate limiting lease held by requests on the server."
-
-	// AspnetcoreRateLimitingRequestTimeInQueue is the metric conforming to the
-	// "aspnetcore.rate_limiting.request.time_in_queue" semantic conventions. It
-	// represents the time the request spent in a queue waiting to acquire a rate
-	// limiting lease.
-	// Instrument: histogram
-	// Unit: s
-	// Stability: Stable
-	AspnetcoreRateLimitingRequestTimeInQueueName        = "aspnetcore.rate_limiting.request.time_in_queue"
-	AspnetcoreRateLimitingRequestTimeInQueueUnit        = "s"
-	AspnetcoreRateLimitingRequestTimeInQueueDescription = "The time the request spent in a queue waiting to acquire a rate limiting lease."
-
-	// AspnetcoreRateLimitingQueuedRequests is the metric conforming to the
-	// "aspnetcore.rate_limiting.queued_requests" semantic conventions. It
-	// represents the number of requests that are currently queued, waiting to
-	// acquire a rate limiting lease.
-	// Instrument: updowncounter
-	// Unit: {request}
-	// Stability: Stable
-	AspnetcoreRateLimitingQueuedRequestsName        = "aspnetcore.rate_limiting.queued_requests"
-	AspnetcoreRateLimitingQueuedRequestsUnit        = "{request}"
-	AspnetcoreRateLimitingQueuedRequestsDescription = "Number of requests that are currently queued, waiting to acquire a rate limiting lease."
-
-	// AspnetcoreRateLimitingRequests is the metric conforming to the
-	// "aspnetcore.rate_limiting.requests" semantic conventions. It represents the
-	// number of requests that tried to acquire a rate limiting lease.
-	// Instrument: counter
-	// Unit: {request}
-	// Stability: Stable
-	AspnetcoreRateLimitingRequestsName        = "aspnetcore.rate_limiting.requests"
-	AspnetcoreRateLimitingRequestsUnit        = "{request}"
-	AspnetcoreRateLimitingRequestsDescription = "Number of requests that tried to acquire a rate limiting lease."
-
-	// KestrelActiveConnections is the metric conforming to the
-	// "kestrel.active_connections" semantic conventions. It represents the number
-	// of connections that are currently active on the server.
-	// Instrument: updowncounter
-	// Unit: {connection}
-	// Stability: Stable
-	KestrelActiveConnectionsName        = "kestrel.active_connections"
-	KestrelActiveConnectionsUnit        = "{connection}"
-	KestrelActiveConnectionsDescription = "Number of connections that are currently active on the server."
-
-	// KestrelConnectionDuration is the metric conforming to the
-	// "kestrel.connection.duration" semantic conventions. It represents the
-	// duration of connections on the server.
-	// Instrument: histogram
-	// Unit: s
-	// Stability: Stable
-	KestrelConnectionDurationName        = "kestrel.connection.duration"
-	KestrelConnectionDurationUnit        = "s"
-	KestrelConnectionDurationDescription = "The duration of connections on the server."
-
-	// KestrelRejectedConnections is the metric conforming to the
-	// "kestrel.rejected_connections" semantic conventions. It represents the
-	// number of connections rejected by the server.
-	// Instrument: counter
-	// Unit: {connection}
-	// Stability: Stable
-	KestrelRejectedConnectionsName        = "kestrel.rejected_connections"
-	KestrelRejectedConnectionsUnit        = "{connection}"
-	KestrelRejectedConnectionsDescription = "Number of connections rejected by the server."
-
-	// KestrelQueuedConnections is the metric conforming to the
-	// "kestrel.queued_connections" semantic conventions. It represents the number
-	// of connections that are currently queued and are waiting to start.
-	// Instrument: updowncounter
-	// Unit: {connection}
-	// Stability: Stable
-	KestrelQueuedConnectionsName        = "kestrel.queued_connections"
-	KestrelQueuedConnectionsUnit        = "{connection}"
-	KestrelQueuedConnectionsDescription = "Number of connections that are currently queued and are waiting to start."
-
-	// KestrelQueuedRequests is the metric conforming to the
-	// "kestrel.queued_requests" semantic conventions. It represents the number of
-	// HTTP requests on multiplexed connections (HTTP/2 and HTTP/3) that are
-	// currently queued and are waiting to start.
-	// Instrument: updowncounter
-	// Unit: {request}
-	// Stability: Stable
-	KestrelQueuedRequestsName        = "kestrel.queued_requests"
-	KestrelQueuedRequestsUnit        = "{request}"
-	KestrelQueuedRequestsDescription = "Number of HTTP requests on multiplexed connections (HTTP/2 and HTTP/3) that are currently queued and are waiting to start."
-
-	// KestrelUpgradedConnections is the metric conforming to the
-	// "kestrel.upgraded_connections" semantic conventions. It represents the
-	// number of connections that are currently upgraded (WebSockets). .
-	// Instrument: updowncounter
-	// Unit: {connection}
-	// Stability: Stable
-	KestrelUpgradedConnectionsName        = "kestrel.upgraded_connections"
-	KestrelUpgradedConnectionsUnit        = "{connection}"
-	KestrelUpgradedConnectionsDescription = "Number of connections that are currently upgraded (WebSockets). ."
-
-	// KestrelTLSHandshakeDuration is the metric conforming to the
-	// "kestrel.tls_handshake.duration" semantic conventions. It represents the
-	// duration of TLS handshakes on the server.
-	// Instrument: histogram
-	// Unit: s
-	// Stability: Stable
-	KestrelTLSHandshakeDurationName        = "kestrel.tls_handshake.duration"
-	KestrelTLSHandshakeDurationUnit        = "s"
-	KestrelTLSHandshakeDurationDescription = "The duration of TLS handshakes on the server."
-
-	// KestrelActiveTLSHandshakes is the metric conforming to the
-	// "kestrel.active_tls_handshakes" semantic conventions. It represents the
-	// number of TLS handshakes that are currently in progress on the server.
-	// Instrument: updowncounter
-	// Unit: {handshake}
-	// Stability: Stable
-	KestrelActiveTLSHandshakesName        = "kestrel.active_tls_handshakes"
-	KestrelActiveTLSHandshakesUnit        = "{handshake}"
-	KestrelActiveTLSHandshakesDescription = "Number of TLS handshakes that are currently in progress on the server."
-
-	// SignalrServerConnectionDuration is the metric conforming to the
-	// "signalr.server.connection.duration" semantic conventions. It represents the
-	// duration of connections on the server.
-	// Instrument: histogram
-	// Unit: s
-	// Stability: Stable
-	SignalrServerConnectionDurationName        = "signalr.server.connection.duration"
-	SignalrServerConnectionDurationUnit        = "s"
-	SignalrServerConnectionDurationDescription = "The duration of connections on the server."
-
-	// SignalrServerActiveConnections is the metric conforming to the
-	// "signalr.server.active_connections" semantic conventions. It represents the
-	// number of connections that are currently active on the server.
-	// Instrument: updowncounter
-	// Unit: {connection}
-	// Stability: Stable
-	SignalrServerActiveConnectionsName        = "signalr.server.active_connections"
-	SignalrServerActiveConnectionsUnit        = "{connection}"
-	SignalrServerActiveConnectionsDescription = "Number of connections that are currently active on the server."
-
-	// FaaSInvokeDuration is the metric conforming to the "faas.invoke_duration"
-	// semantic conventions. It represents the measures the duration of the
-	// function's logic execution.
-	// Instrument: histogram
-	// Unit: s
-	// Stability: Experimental
-	FaaSInvokeDurationName        = "faas.invoke_duration"
-	FaaSInvokeDurationUnit        = "s"
-	FaaSInvokeDurationDescription = "Measures the duration of the function's logic execution"
-
-	// FaaSInitDuration is the metric conforming to the "faas.init_duration"
-	// semantic conventions. It represents the measures the duration of the
-	// function's initialization, such as a cold start.
-	// Instrument: histogram
-	// Unit: s
-	// Stability: Experimental
-	FaaSInitDurationName        = "faas.init_duration"
-	FaaSInitDurationUnit        = "s"
-	FaaSInitDurationDescription = "Measures the duration of the function's initialization, such as a cold start"
-
-	// FaaSColdstarts is the metric conforming to the "faas.coldstarts" semantic
-	// conventions. It represents the number of invocation cold starts.
-	// Instrument: counter
-	// Unit: {coldstart}
-	// Stability: Experimental
-	FaaSColdstartsName        = "faas.coldstarts"
-	FaaSColdstartsUnit        = "{coldstart}"
-	FaaSColdstartsDescription = "Number of invocation cold starts"
-
-	// FaaSErrors is the metric conforming to the "faas.errors" semantic
-	// conventions. It represents the number of invocation errors.
-	// Instrument: counter
-	// Unit: {error}
-	// Stability: Experimental
-	FaaSErrorsName        = "faas.errors"
-	FaaSErrorsUnit        = "{error}"
-	FaaSErrorsDescription = "Number of invocation errors"
-
-	// FaaSInvocations is the metric conforming to the "faas.invocations" semantic
-	// conventions. It represents the number of successful invocations.
-	// Instrument: counter
-	// Unit: {invocation}
-	// Stability: Experimental
-	FaaSInvocationsName        = "faas.invocations"
-	FaaSInvocationsUnit        = "{invocation}"
-	FaaSInvocationsDescription = "Number of successful invocations"
-
-	// FaaSTimeouts is the metric conforming to the "faas.timeouts" semantic
-	// conventions. It represents the number of invocation timeouts.
-	// Instrument: counter
-	// Unit: {timeout}
-	// Stability: Experimental
-	FaaSTimeoutsName        = "faas.timeouts"
-	FaaSTimeoutsUnit        = "{timeout}"
-	FaaSTimeoutsDescription = "Number of invocation timeouts"
-
-	// FaaSMemUsage is the metric conforming to the "faas.mem_usage" semantic
-	// conventions. It represents the distribution of max memory usage per
-	// invocation.
-	// Instrument: histogram
-	// Unit: By
-	// Stability: Experimental
-	FaaSMemUsageName        = "faas.mem_usage"
-	FaaSMemUsageUnit        = "By"
-	FaaSMemUsageDescription = "Distribution of max memory usage per invocation"
-
-	// FaaSCPUUsage is the metric conforming to the "faas.cpu_usage" semantic
-	// conventions. It represents the distribution of CPU usage per invocation.
-	// Instrument: histogram
-	// Unit: s
-	// Stability: Experimental
-	FaaSCPUUsageName        = "faas.cpu_usage"
-	FaaSCPUUsageUnit        = "s"
-	FaaSCPUUsageDescription = "Distribution of CPU usage per invocation"
-
-	// FaaSNetIo is the metric conforming to the "faas.net_io" semantic
-	// conventions. It represents the distribution of net I/O usage per invocation.
-	// Instrument: histogram
-	// Unit: By
-	// Stability: Experimental
-	FaaSNetIoName        = "faas.net_io"
-	FaaSNetIoUnit        = "By"
-	FaaSNetIoDescription = "Distribution of net I/O usage per invocation"
-
-	// HTTPServerRequestDuration is the metric conforming to the
-	// "http.server.request.duration" semantic conventions. It represents the
-	// duration of HTTP server requests.
-	// Instrument: histogram
-	// Unit: s
-	// Stability: Stable
-	HTTPServerRequestDurationName        = "http.server.request.duration"
-	HTTPServerRequestDurationUnit        = "s"
-	HTTPServerRequestDurationDescription = "Duration of HTTP server requests."
-
-	// HTTPServerActiveRequests is the metric conforming to the
-	// "http.server.active_requests" semantic conventions. It represents the number
-	// of active HTTP server requests.
-	// Instrument: updowncounter
-	// Unit: {request}
-	// Stability: Experimental
-	HTTPServerActiveRequestsName        = "http.server.active_requests"
-	HTTPServerActiveRequestsUnit        = "{request}"
-	HTTPServerActiveRequestsDescription = "Number of active HTTP server requests."
-
-	// HTTPServerRequestBodySize is the metric conforming to the
-	// "http.server.request.body.size" semantic conventions. It represents the size
-	// of HTTP server request bodies.
-	// Instrument: histogram
-	// Unit: By
-	// Stability: Experimental
-	HTTPServerRequestBodySizeName        = "http.server.request.body.size"
-	HTTPServerRequestBodySizeUnit        = "By"
-	HTTPServerRequestBodySizeDescription = "Size of HTTP server request bodies."
-
-	// HTTPServerResponseBodySize is the metric conforming to the
-	// "http.server.response.body.size" semantic conventions. It represents the
-	// size of HTTP server response bodies.
-	// Instrument: histogram
-	// Unit: By
-	// Stability: Experimental
-	HTTPServerResponseBodySizeName        = "http.server.response.body.size"
-	HTTPServerResponseBodySizeUnit        = "By"
-	HTTPServerResponseBodySizeDescription = "Size of HTTP server response bodies."
-
-	// HTTPClientRequestDuration is the metric conforming to the
-	// "http.client.request.duration" semantic conventions. It represents the
-	// duration of HTTP client requests.
-	// Instrument: histogram
-	// Unit: s
-	// Stability: Stable
-	HTTPClientRequestDurationName        = "http.client.request.duration"
-	HTTPClientRequestDurationUnit        = "s"
-	HTTPClientRequestDurationDescription = "Duration of HTTP client requests."
-
-	// HTTPClientRequestBodySize is the metric conforming to the
-	// "http.client.request.body.size" semantic conventions. It represents the size
-	// of HTTP client request bodies.
-	// Instrument: histogram
-	// Unit: By
-	// Stability: Experimental
-	HTTPClientRequestBodySizeName        = "http.client.request.body.size"
-	HTTPClientRequestBodySizeUnit        = "By"
-	HTTPClientRequestBodySizeDescription = "Size of HTTP client request bodies."
-
-	// HTTPClientResponseBodySize is the metric conforming to the
-	// "http.client.response.body.size" semantic conventions. It represents the
-	// size of HTTP client response bodies.
-	// Instrument: histogram
-	// Unit: By
-	// Stability: Experimental
-	HTTPClientResponseBodySizeName        = "http.client.response.body.size"
-	HTTPClientResponseBodySizeUnit        = "By"
-	HTTPClientResponseBodySizeDescription = "Size of HTTP client response bodies."
-
-	// HTTPClientOpenConnections is the metric conforming to the
-	// "http.client.open_connections" semantic conventions. It represents the
-	// number of outbound HTTP connections that are currently active or idle on the
-	// client.
-	// Instrument: updowncounter
-	// Unit: {connection}
-	// Stability: Experimental
-	HTTPClientOpenConnectionsName        = "http.client.open_connections"
-	HTTPClientOpenConnectionsUnit        = "{connection}"
-	HTTPClientOpenConnectionsDescription = "Number of outbound HTTP connections that are currently active or idle on the client."
-
-	// HTTPClientConnectionDuration is the metric conforming to the
-	// "http.client.connection.duration" semantic conventions. It represents the
-	// duration of the successfully established outbound HTTP connections.
-	// Instrument: histogram
-	// Unit: s
-	// Stability: Experimental
-	HTTPClientConnectionDurationName        = "http.client.connection.duration"
-	HTTPClientConnectionDurationUnit        = "s"
-	HTTPClientConnectionDurationDescription = "The duration of the successfully established outbound HTTP connections."
-
-	// HTTPClientActiveRequests is the metric conforming to the
-	// "http.client.active_requests" semantic conventions. It represents the number
-	// of active HTTP requests.
-	// Instrument: updowncounter
-	// Unit: {request}
-	// Stability: Experimental
-	HTTPClientActiveRequestsName        = "http.client.active_requests"
-	HTTPClientActiveRequestsUnit        = "{request}"
-	HTTPClientActiveRequestsDescription = "Number of active HTTP requests."
-
-	// JvmMemoryInit is the metric conforming to the "jvm.memory.init" semantic
-	// conventions. It represents the measure of initial memory requested.
-	// Instrument: updowncounter
-	// Unit: By
-	// Stability: Experimental
-	JvmMemoryInitName        = "jvm.memory.init"
-	JvmMemoryInitUnit        = "By"
-	JvmMemoryInitDescription = "Measure of initial memory requested."
-
-	// JvmSystemCPUUtilization is the metric conforming to the
-	// "jvm.system.cpu.utilization" semantic conventions. It represents the recent
-	// CPU utilization for the whole system as reported by the JVM.
-	// Instrument: gauge
-	// Unit: 1
-	// Stability: Experimental
-	JvmSystemCPUUtilizationName        = "jvm.system.cpu.utilization"
-	JvmSystemCPUUtilizationUnit        = "1"
-	JvmSystemCPUUtilizationDescription = "Recent CPU utilization for the whole system as reported by the JVM."
-
-	// JvmSystemCPULoad1m is the metric conforming to the "jvm.system.cpu.load_1m"
-	// semantic conventions. It represents the average CPU load of the whole system
-	// for the last minute as reported by the JVM.
-	// Instrument: gauge
-	// Unit: {run_queue_item}
-	// Stability: Experimental
-	JvmSystemCPULoad1mName        = "jvm.system.cpu.load_1m"
-	JvmSystemCPULoad1mUnit        = "{run_queue_item}"
-	JvmSystemCPULoad1mDescription = "Average CPU load of the whole system for the last minute as reported by the JVM."
-
-	// JvmBufferMemoryUsage is the metric conforming to the
-	// "jvm.buffer.memory.usage" semantic conventions. It represents the measure of
-	// memory used by buffers.
-	// Instrument: updowncounter
-	// Unit: By
-	// Stability: Experimental
-	JvmBufferMemoryUsageName        = "jvm.buffer.memory.usage"
-	JvmBufferMemoryUsageUnit        = "By"
-	JvmBufferMemoryUsageDescription = "Measure of memory used by buffers."
-
-	// JvmBufferMemoryLimit is the metric conforming to the
-	// "jvm.buffer.memory.limit" semantic conventions. It represents the measure of
-	// total memory capacity of buffers.
-	// Instrument: updowncounter
-	// Unit: By
-	// Stability: Experimental
-	JvmBufferMemoryLimitName        = "jvm.buffer.memory.limit"
-	JvmBufferMemoryLimitUnit        = "By"
-	JvmBufferMemoryLimitDescription = "Measure of total memory capacity of buffers."
-
-	// JvmBufferCount is the metric conforming to the "jvm.buffer.count" semantic
-	// conventions. It represents the number of buffers in the pool.
-	// Instrument: updowncounter
-	// Unit: {buffer}
-	// Stability: Experimental
-	JvmBufferCountName        = "jvm.buffer.count"
-	JvmBufferCountUnit        = "{buffer}"
-	JvmBufferCountDescription = "Number of buffers in the pool."
-
-	// JvmMemoryUsed is the metric conforming to the "jvm.memory.used" semantic
-	// conventions. It represents the measure of memory used.
-	// Instrument: updowncounter
-	// Unit: By
-	// Stability: Stable
-	JvmMemoryUsedName        = "jvm.memory.used"
-	JvmMemoryUsedUnit        = "By"
-	JvmMemoryUsedDescription = "Measure of memory used."
-
-	// JvmMemoryCommitted is the metric conforming to the "jvm.memory.committed"
-	// semantic conventions. It represents the measure of memory committed.
-	// Instrument: updowncounter
-	// Unit: By
-	// Stability: Stable
-	JvmMemoryCommittedName        = "jvm.memory.committed"
-	JvmMemoryCommittedUnit        = "By"
-	JvmMemoryCommittedDescription = "Measure of memory committed."
-
-	// JvmMemoryLimit is the metric conforming to the "jvm.memory.limit" semantic
-	// conventions. It represents the measure of max obtainable memory.
-	// Instrument: updowncounter
-	// Unit: By
-	// Stability: Stable
-	JvmMemoryLimitName        = "jvm.memory.limit"
-	JvmMemoryLimitUnit        = "By"
-	JvmMemoryLimitDescription = "Measure of max obtainable memory."
-
-	// JvmMemoryUsedAfterLastGc is the metric conforming to the
-	// "jvm.memory.used_after_last_gc" semantic conventions. It represents the
-	// measure of memory used, as measured after the most recent garbage collection
-	// event on this pool.
-	// Instrument: updowncounter
-	// Unit: By
-	// Stability: Stable
-	JvmMemoryUsedAfterLastGcName        = "jvm.memory.used_after_last_gc"
-	JvmMemoryUsedAfterLastGcUnit        = "By"
-	JvmMemoryUsedAfterLastGcDescription = "Measure of memory used, as measured after the most recent garbage collection event on this pool."
-
-	// JvmGcDuration is the metric conforming to the "jvm.gc.duration" semantic
-	// conventions. It represents the duration of JVM garbage collection actions.
-	// Instrument: histogram
-	// Unit: s
-	// Stability: Stable
-	JvmGcDurationName        = "jvm.gc.duration"
-	JvmGcDurationUnit        = "s"
-	JvmGcDurationDescription = "Duration of JVM garbage collection actions."
-
-	// JvmThreadCount is the metric conforming to the "jvm.thread.count" semantic
-	// conventions. It represents the number of executing platform threads.
-	// Instrument: updowncounter
-	// Unit: {thread}
-	// Stability: Stable
-	JvmThreadCountName        = "jvm.thread.count"
-	JvmThreadCountUnit        = "{thread}"
-	JvmThreadCountDescription = "Number of executing platform threads."
-
-	// JvmClassLoaded is the metric conforming to the "jvm.class.loaded" semantic
-	// conventions. It represents the number of classes loaded since JVM start.
-	// Instrument: counter
-	// Unit: {class}
-	// Stability: Stable
-	JvmClassLoadedName        = "jvm.class.loaded"
-	JvmClassLoadedUnit        = "{class}"
-	JvmClassLoadedDescription = "Number of classes loaded since JVM start."
-
-	// JvmClassUnloaded is the metric conforming to the "jvm.class.unloaded"
-	// semantic conventions. It represents the number of classes unloaded since JVM
-	// start.
-	// Instrument: counter
-	// Unit: {class}
-	// Stability: Stable
-	JvmClassUnloadedName        = "jvm.class.unloaded"
-	JvmClassUnloadedUnit        = "{class}"
-	JvmClassUnloadedDescription = "Number of classes unloaded since JVM start."
-
-	// JvmClassCount is the metric conforming to the "jvm.class.count" semantic
-	// conventions. It represents the number of classes currently loaded.
-	// Instrument: updowncounter
-	// Unit: {class}
-	// Stability: Stable
-	JvmClassCountName        = "jvm.class.count"
-	JvmClassCountUnit        = "{class}"
-	JvmClassCountDescription = "Number of classes currently loaded."
-
-	// JvmCPUCount is the metric conforming to the "jvm.cpu.count" semantic
-	// conventions. It represents the number of processors available to the Java
-	// virtual machine.
-	// Instrument: updowncounter
-	// Unit: {cpu}
-	// Stability: Stable
-	JvmCPUCountName        = "jvm.cpu.count"
-	JvmCPUCountUnit        = "{cpu}"
-	JvmCPUCountDescription = "Number of processors available to the Java virtual machine."
-
-	// JvmCPUTime is the metric conforming to the "jvm.cpu.time" semantic
-	// conventions. It represents the cPU time used by the process as reported by
-	// the JVM.
-	// Instrument: counter
-	// Unit: s
-	// Stability: Stable
-	JvmCPUTimeName        = "jvm.cpu.time"
-	JvmCPUTimeUnit        = "s"
-	JvmCPUTimeDescription = "CPU time used by the process as reported by the JVM."
-
-	// JvmCPURecentUtilization is the metric conforming to the
-	// "jvm.cpu.recent_utilization" semantic conventions. It represents the recent
-	// CPU utilization for the process as reported by the JVM.
-	// Instrument: gauge
-	// Unit: 1
-	// Stability: Stable
-	JvmCPURecentUtilizationName        = "jvm.cpu.recent_utilization"
-	JvmCPURecentUtilizationUnit        = "1"
-	JvmCPURecentUtilizationDescription = "Recent CPU utilization for the process as reported by the JVM."
-
-	// MessagingPublishDuration is the metric conforming to the
-	// "messaging.publish.duration" semantic conventions. It represents the
-	// measures the duration of publish operation.
-	// Instrument: histogram
-	// Unit: s
-	// Stability: Experimental
-	MessagingPublishDurationName        = "messaging.publish.duration"
-	MessagingPublishDurationUnit        = "s"
-	MessagingPublishDurationDescription = "Measures the duration of publish operation."
-
-	// MessagingReceiveDuration is the metric conforming to the
-	// "messaging.receive.duration" semantic conventions. It represents the
-	// measures the duration of receive operation.
-	// Instrument: histogram
-	// Unit: s
-	// Stability: Experimental
-	MessagingReceiveDurationName        = "messaging.receive.duration"
-	MessagingReceiveDurationUnit        = "s"
-	MessagingReceiveDurationDescription = "Measures the duration of receive operation."
-
-	// MessagingProcessDuration is the metric conforming to the
-	// "messaging.process.duration" semantic conventions. It represents the
-	// measures the duration of process operation.
-	// Instrument: histogram
-	// Unit: s
-	// Stability: Experimental
-	MessagingProcessDurationName        = "messaging.process.duration"
-	MessagingProcessDurationUnit        = "s"
-	MessagingProcessDurationDescription = "Measures the duration of process operation."
-
-	// MessagingPublishMessages is the metric conforming to the
-	// "messaging.publish.messages" semantic conventions. It represents the
-	// measures the number of published messages.
-	// Instrument: counter
-	// Unit: {message}
-	// Stability: Experimental
-	MessagingPublishMessagesName        = "messaging.publish.messages"
-	MessagingPublishMessagesUnit        = "{message}"
-	MessagingPublishMessagesDescription = "Measures the number of published messages."
-
-	// MessagingReceiveMessages is the metric conforming to the
-	// "messaging.receive.messages" semantic conventions. It represents the
-	// measures the number of received messages.
-	// Instrument: counter
-	// Unit: {message}
-	// Stability: Experimental
-	MessagingReceiveMessagesName        = "messaging.receive.messages"
-	MessagingReceiveMessagesUnit        = "{message}"
-	MessagingReceiveMessagesDescription = "Measures the number of received messages."
-
-	// MessagingProcessMessages is the metric conforming to the
-	// "messaging.process.messages" semantic conventions. It represents the
-	// measures the number of processed messages.
-	// Instrument: counter
-	// Unit: {message}
-	// Stability: Experimental
-	MessagingProcessMessagesName        = "messaging.process.messages"
-	MessagingProcessMessagesUnit        = "{message}"
-	MessagingProcessMessagesDescription = "Measures the number of processed messages."
-
-	// ProcessCPUTime is the metric conforming to the "process.cpu.time" semantic
-	// conventions. It represents the total CPU seconds broken down by different
-	// states.
-	// Instrument: counter
-	// Unit: s
-	// Stability: Experimental
-	ProcessCPUTimeName        = "process.cpu.time"
-	ProcessCPUTimeUnit        = "s"
-	ProcessCPUTimeDescription = "Total CPU seconds broken down by different states."
-
-	// ProcessCPUUtilization is the metric conforming to the
-	// "process.cpu.utilization" semantic conventions. It represents the difference
-	// in process.cpu.time since the last measurement, divided by the elapsed time
-	// and number of CPUs available to the process.
-	// Instrument: gauge
-	// Unit: 1
-	// Stability: Experimental
-	ProcessCPUUtilizationName        = "process.cpu.utilization"
-	ProcessCPUUtilizationUnit        = "1"
-	ProcessCPUUtilizationDescription = "Difference in process.cpu.time since the last measurement, divided by the elapsed time and number of CPUs available to the process."
-
-	// ProcessMemoryUsage is the metric conforming to the "process.memory.usage"
-	// semantic conventions. It represents the amount of physical memory in use.
-	// Instrument: updowncounter
-	// Unit: By
-	// Stability: Experimental
-	ProcessMemoryUsageName        = "process.memory.usage"
-	ProcessMemoryUsageUnit        = "By"
-	ProcessMemoryUsageDescription = "The amount of physical memory in use."
-
-	// ProcessMemoryVirtual is the metric conforming to the
-	// "process.memory.virtual" semantic conventions. It represents the amount of
-	// committed virtual memory.
-	// Instrument: updowncounter
-	// Unit: By
-	// Stability: Experimental
-	ProcessMemoryVirtualName        = "process.memory.virtual"
-	ProcessMemoryVirtualUnit        = "By"
-	ProcessMemoryVirtualDescription = "The amount of committed virtual memory."
-
-	// ProcessDiskIo is the metric conforming to the "process.disk.io" semantic
-	// conventions. It represents the disk bytes transferred.
-	// Instrument: counter
-	// Unit: By
-	// Stability: Experimental
-	ProcessDiskIoName        = "process.disk.io"
-	ProcessDiskIoUnit        = "By"
-	ProcessDiskIoDescription = "Disk bytes transferred."
-
-	// ProcessNetworkIo is the metric conforming to the "process.network.io"
-	// semantic conventions. It represents the network bytes transferred.
-	// Instrument: counter
-	// Unit: By
-	// Stability: Experimental
-	ProcessNetworkIoName        = "process.network.io"
-	ProcessNetworkIoUnit        = "By"
-	ProcessNetworkIoDescription = "Network bytes transferred."
-
-	// ProcessThreadCount is the metric conforming to the "process.thread.count"
-	// semantic conventions. It represents the process threads count.
-	// Instrument: updowncounter
-	// Unit: {thread}
-	// Stability: Experimental
-	ProcessThreadCountName        = "process.thread.count"
-	ProcessThreadCountUnit        = "{thread}"
-	ProcessThreadCountDescription = "Process threads count."
-
-	// ProcessOpenFileDescriptorCount is the metric conforming to the
-	// "process.open_file_descriptor.count" semantic conventions. It represents the
-	// number of file descriptors in use by the process.
-	// Instrument: updowncounter
-	// Unit: {count}
-	// Stability: Experimental
-	ProcessOpenFileDescriptorCountName        = "process.open_file_descriptor.count"
-	ProcessOpenFileDescriptorCountUnit        = "{count}"
-	ProcessOpenFileDescriptorCountDescription = "Number of file descriptors in use by the process."
-
-	// ProcessContextSwitches is the metric conforming to the
-	// "process.context_switches" semantic conventions. It represents the number of
-	// times the process has been context switched.
-	// Instrument: counter
-	// Unit: {count}
-	// Stability: Experimental
-	ProcessContextSwitchesName        = "process.context_switches"
-	ProcessContextSwitchesUnit        = "{count}"
-	ProcessContextSwitchesDescription = "Number of times the process has been context switched."
-
-	// ProcessPagingFaults is the metric conforming to the "process.paging.faults"
-	// semantic conventions. It represents the number of page faults the process
-	// has made.
-	// Instrument: counter
-	// Unit: {fault}
-	// Stability: Experimental
-	ProcessPagingFaultsName        = "process.paging.faults"
-	ProcessPagingFaultsUnit        = "{fault}"
-	ProcessPagingFaultsDescription = "Number of page faults the process has made."
-
-	// RPCServerDuration is the metric conforming to the "rpc.server.duration"
-	// semantic conventions. It represents the measures the duration of inbound
-	// RPC.
-	// Instrument: histogram
-	// Unit: ms
-	// Stability: Experimental
-	RPCServerDurationName        = "rpc.server.duration"
-	RPCServerDurationUnit        = "ms"
-	RPCServerDurationDescription = "Measures the duration of inbound RPC."
-
-	// RPCServerRequestSize is the metric conforming to the
-	// "rpc.server.request.size" semantic conventions. It represents the measures
-	// the size of RPC request messages (uncompressed).
-	// Instrument: histogram
-	// Unit: By
-	// Stability: Experimental
-	RPCServerRequestSizeName        = "rpc.server.request.size"
-	RPCServerRequestSizeUnit        = "By"
-	RPCServerRequestSizeDescription = "Measures the size of RPC request messages (uncompressed)."
-
-	// RPCServerResponseSize is the metric conforming to the
-	// "rpc.server.response.size" semantic conventions. It represents the measures
-	// the size of RPC response messages (uncompressed).
-	// Instrument: histogram
-	// Unit: By
-	// Stability: Experimental
-	RPCServerResponseSizeName        = "rpc.server.response.size"
-	RPCServerResponseSizeUnit        = "By"
-	RPCServerResponseSizeDescription = "Measures the size of RPC response messages (uncompressed)."
-
-	// RPCServerRequestsPerRPC is the metric conforming to the
-	// "rpc.server.requests_per_rpc" semantic conventions. It represents the
-	// measures the number of messages received per RPC.
-	// Instrument: histogram
-	// Unit: {count}
-	// Stability: Experimental
-	RPCServerRequestsPerRPCName        = "rpc.server.requests_per_rpc"
-	RPCServerRequestsPerRPCUnit        = "{count}"
-	RPCServerRequestsPerRPCDescription = "Measures the number of messages received per RPC."
-
-	// RPCServerResponsesPerRPC is the metric conforming to the
-	// "rpc.server.responses_per_rpc" semantic conventions. It represents the
-	// measures the number of messages sent per RPC.
-	// Instrument: histogram
-	// Unit: {count}
-	// Stability: Experimental
-	RPCServerResponsesPerRPCName        = "rpc.server.responses_per_rpc"
-	RPCServerResponsesPerRPCUnit        = "{count}"
-	RPCServerResponsesPerRPCDescription = "Measures the number of messages sent per RPC."
-
-	// RPCClientDuration is the metric conforming to the "rpc.client.duration"
-	// semantic conventions. It represents the measures the duration of outbound
-	// RPC.
-	// Instrument: histogram
-	// Unit: ms
-	// Stability: Experimental
-	RPCClientDurationName        = "rpc.client.duration"
-	RPCClientDurationUnit        = "ms"
-	RPCClientDurationDescription = "Measures the duration of outbound RPC."
-
-	// RPCClientRequestSize is the metric conforming to the
-	// "rpc.client.request.size" semantic conventions. It represents the measures
-	// the size of RPC request messages (uncompressed).
-	// Instrument: histogram
-	// Unit: By
-	// Stability: Experimental
-	RPCClientRequestSizeName        = "rpc.client.request.size"
-	RPCClientRequestSizeUnit        = "By"
-	RPCClientRequestSizeDescription = "Measures the size of RPC request messages (uncompressed)."
-
-	// RPCClientResponseSize is the metric conforming to the
-	// "rpc.client.response.size" semantic conventions. It represents the measures
-	// the size of RPC response messages (uncompressed).
-	// Instrument: histogram
-	// Unit: By
-	// Stability: Experimental
-	RPCClientResponseSizeName        = "rpc.client.response.size"
-	RPCClientResponseSizeUnit        = "By"
-	RPCClientResponseSizeDescription = "Measures the size of RPC response messages (uncompressed)."
-
-	// RPCClientRequestsPerRPC is the metric conforming to the
-	// "rpc.client.requests_per_rpc" semantic conventions. It represents the
-	// measures the number of messages received per RPC.
-	// Instrument: histogram
-	// Unit: {count}
-	// Stability: Experimental
-	RPCClientRequestsPerRPCName        = "rpc.client.requests_per_rpc"
-	RPCClientRequestsPerRPCUnit        = "{count}"
-	RPCClientRequestsPerRPCDescription = "Measures the number of messages received per RPC."
-
-	// RPCClientResponsesPerRPC is the metric conforming to the
-	// "rpc.client.responses_per_rpc" semantic conventions. It represents the
-	// measures the number of messages sent per RPC.
-	// Instrument: histogram
-	// Unit: {count}
-	// Stability: Experimental
-	RPCClientResponsesPerRPCName        = "rpc.client.responses_per_rpc"
-	RPCClientResponsesPerRPCUnit        = "{count}"
-	RPCClientResponsesPerRPCDescription = "Measures the number of messages sent per RPC."
-
-	// SystemCPUTime is the metric conforming to the "system.cpu.time" semantic
-	// conventions. It represents the seconds each logical CPU spent on each mode.
-	// Instrument: counter
-	// Unit: s
-	// Stability: Experimental
-	SystemCPUTimeName        = "system.cpu.time"
-	SystemCPUTimeUnit        = "s"
-	SystemCPUTimeDescription = "Seconds each logical CPU spent on each mode"
-
-	// SystemCPUUtilization is the metric conforming to the
-	// "system.cpu.utilization" semantic conventions. It represents the difference
-	// in system.cpu.time since the last measurement, divided by the elapsed time
-	// and number of logical CPUs.
-	// Instrument: gauge
-	// Unit: 1
-	// Stability: Experimental
-	SystemCPUUtilizationName        = "system.cpu.utilization"
-	SystemCPUUtilizationUnit        = "1"
-	SystemCPUUtilizationDescription = "Difference in system.cpu.time since the last measurement, divided by the elapsed time and number of logical CPUs"
-
-	// SystemCPUFrequency is the metric conforming to the "system.cpu.frequency"
-	// semantic conventions. It represents the reports the current frequency of the
-	// CPU in Hz.
-	// Instrument: gauge
-	// Unit: {Hz}
-	// Stability: Experimental
-	SystemCPUFrequencyName        = "system.cpu.frequency"
-	SystemCPUFrequencyUnit        = "{Hz}"
-	SystemCPUFrequencyDescription = "Reports the current frequency of the CPU in Hz"
-
-	// SystemCPUPhysicalCount is the metric conforming to the
-	// "system.cpu.physical.count" semantic conventions. It represents the reports
-	// the number of actual physical processor cores on the hardware.
-	// Instrument: updowncounter
-	// Unit: {cpu}
-	// Stability: Experimental
-	SystemCPUPhysicalCountName        = "system.cpu.physical.count"
-	SystemCPUPhysicalCountUnit        = "{cpu}"
-	SystemCPUPhysicalCountDescription = "Reports the number of actual physical processor cores on the hardware"
-
-	// SystemCPULogicalCount is the metric conforming to the
-	// "system.cpu.logical.count" semantic conventions. It represents the reports
-	// the number of logical (virtual) processor cores created by the operating
-	// system to manage multitasking.
-	// Instrument: updowncounter
-	// Unit: {cpu}
-	// Stability: Experimental
-	SystemCPULogicalCountName        = "system.cpu.logical.count"
-	SystemCPULogicalCountUnit        = "{cpu}"
-	SystemCPULogicalCountDescription = "Reports the number of logical (virtual) processor cores created by the operating system to manage multitasking"
-
-	// SystemMemoryUsage is the metric conforming to the "system.memory.usage"
-	// semantic conventions. It represents the reports memory in use by state.
-	// Instrument: updowncounter
-	// Unit: By
-	// Stability: Experimental
-	SystemMemoryUsageName        = "system.memory.usage"
-	SystemMemoryUsageUnit        = "By"
-	SystemMemoryUsageDescription = "Reports memory in use by state."
-
-	// SystemMemoryLimit is the metric conforming to the "system.memory.limit"
-	// semantic conventions. It represents the total memory available in the
-	// system.
-	// Instrument: updowncounter
-	// Unit: By
-	// Stability: Experimental
-	SystemMemoryLimitName        = "system.memory.limit"
-	SystemMemoryLimitUnit        = "By"
-	SystemMemoryLimitDescription = "Total memory available in the system."
-
-	// SystemMemoryShared is the metric conforming to the "system.memory.shared"
-	// semantic conventions. It represents the shared memory used (mostly by
-	// tmpfs).
-	// Instrument: updowncounter
-	// Unit: By
-	// Stability: Experimental
-	SystemMemorySharedName        = "system.memory.shared"
-	SystemMemorySharedUnit        = "By"
-	SystemMemorySharedDescription = "Shared memory used (mostly by tmpfs)."
-
-	// SystemMemoryUtilization is the metric conforming to the
-	// "system.memory.utilization" semantic conventions.
-	// Instrument: gauge
-	// Unit: 1
-	// Stability: Experimental
-	// NOTE: The description (brief) for this metric is not defined in the semantic-conventions repository.
-	SystemMemoryUtilizationName = "system.memory.utilization"
-	SystemMemoryUtilizationUnit = "1"
-
-	// SystemPagingUsage is the metric conforming to the "system.paging.usage"
-	// semantic conventions. It represents the unix swap or windows pagefile usage.
-	// Instrument: updowncounter
-	// Unit: By
-	// Stability: Experimental
-	SystemPagingUsageName        = "system.paging.usage"
-	SystemPagingUsageUnit        = "By"
-	SystemPagingUsageDescription = "Unix swap or windows pagefile usage"
-
-	// SystemPagingUtilization is the metric conforming to the
-	// "system.paging.utilization" semantic conventions.
-	// Instrument: gauge
-	// Unit: 1
-	// Stability: Experimental
-	// NOTE: The description (brief) for this metric is not defined in the semantic-conventions repository.
-	SystemPagingUtilizationName = "system.paging.utilization"
-	SystemPagingUtilizationUnit = "1"
-
-	// SystemPagingFaults is the metric conforming to the "system.paging.faults"
-	// semantic conventions.
-	// Instrument: counter
-	// Unit: {fault}
-	// Stability: Experimental
-	// NOTE: The description (brief) for this metric is not defined in the semantic-conventions repository.
-	SystemPagingFaultsName = "system.paging.faults"
-	SystemPagingFaultsUnit = "{fault}"
-
-	// SystemPagingOperations is the metric conforming to the
-	// "system.paging.operations" semantic conventions.
-	// Instrument: counter
-	// Unit: {operation}
-	// Stability: Experimental
-	// NOTE: The description (brief) for this metric is not defined in the semantic-conventions repository.
-	SystemPagingOperationsName = "system.paging.operations"
-	SystemPagingOperationsUnit = "{operation}"
-
-	// SystemDiskIo is the metric conforming to the "system.disk.io" semantic
-	// conventions.
-	// Instrument: counter
-	// Unit: By
-	// Stability: Experimental
-	// NOTE: The description (brief) for this metric is not defined in the semantic-conventions repository.
-	SystemDiskIoName = "system.disk.io"
-	SystemDiskIoUnit = "By"
-
-	// SystemDiskOperations is the metric conforming to the
-	// "system.disk.operations" semantic conventions.
-	// Instrument: counter
-	// Unit: {operation}
-	// Stability: Experimental
-	// NOTE: The description (brief) for this metric is not defined in the semantic-conventions repository.
-	SystemDiskOperationsName = "system.disk.operations"
-	SystemDiskOperationsUnit = "{operation}"
-
-	// SystemDiskIoTime is the metric conforming to the "system.disk.io_time"
-	// semantic conventions. It represents the time disk spent activated.
-	// Instrument: counter
-	// Unit: s
-	// Stability: Experimental
-	SystemDiskIoTimeName        = "system.disk.io_time"
-	SystemDiskIoTimeUnit        = "s"
-	SystemDiskIoTimeDescription = "Time disk spent activated"
-
-	// SystemDiskOperationTime is the metric conforming to the
-	// "system.disk.operation_time" semantic conventions. It represents the sum of
-	// the time each operation took to complete.
-	// Instrument: counter
-	// Unit: s
-	// Stability: Experimental
-	SystemDiskOperationTimeName        = "system.disk.operation_time"
-	SystemDiskOperationTimeUnit        = "s"
-	SystemDiskOperationTimeDescription = "Sum of the time each operation took to complete"
-
-	// SystemDiskMerged is the metric conforming to the "system.disk.merged"
-	// semantic conventions.
-	// Instrument: counter
-	// Unit: {operation}
-	// Stability: Experimental
-	// NOTE: The description (brief) for this metric is not defined in the semantic-conventions repository.
-	SystemDiskMergedName = "system.disk.merged"
-	SystemDiskMergedUnit = "{operation}"
-
-	// SystemFilesystemUsage is the metric conforming to the
-	// "system.filesystem.usage" semantic conventions.
-	// Instrument: updowncounter
-	// Unit: By
-	// Stability: Experimental
-	// NOTE: The description (brief) for this metric is not defined in the semantic-conventions repository.
-	SystemFilesystemUsageName = "system.filesystem.usage"
-	SystemFilesystemUsageUnit = "By"
-
-	// SystemFilesystemUtilization is the metric conforming to the
-	// "system.filesystem.utilization" semantic conventions.
-	// Instrument: gauge
-	// Unit: 1
-	// Stability: Experimental
-	// NOTE: The description (brief) for this metric is not defined in the semantic-conventions repository.
-	SystemFilesystemUtilizationName = "system.filesystem.utilization"
-	SystemFilesystemUtilizationUnit = "1"
-
-	// SystemNetworkDropped is the metric conforming to the
-	// "system.network.dropped" semantic conventions. It represents the count of
-	// packets that are dropped or discarded even though there was no error.
-	// Instrument: counter
-	// Unit: {packet}
-	// Stability: Experimental
-	SystemNetworkDroppedName        = "system.network.dropped"
-	SystemNetworkDroppedUnit        = "{packet}"
-	SystemNetworkDroppedDescription = "Count of packets that are dropped or discarded even though there was no error"
-
-	// SystemNetworkPackets is the metric conforming to the
-	// "system.network.packets" semantic conventions.
-	// Instrument: counter
-	// Unit: {packet}
-	// Stability: Experimental
-	// NOTE: The description (brief) for this metric is not defined in the semantic-conventions repository.
-	SystemNetworkPacketsName = "system.network.packets"
-	SystemNetworkPacketsUnit = "{packet}"
-
-	// SystemNetworkErrors is the metric conforming to the "system.network.errors"
-	// semantic conventions. It represents the count of network errors detected.
-	// Instrument: counter
-	// Unit: {error}
-	// Stability: Experimental
-	SystemNetworkErrorsName        = "system.network.errors"
-	SystemNetworkErrorsUnit        = "{error}"
-	SystemNetworkErrorsDescription = "Count of network errors detected"
-
-	// SystemNetworkIo is the metric conforming to the "system.network.io" semantic
-	// conventions.
-	// Instrument: counter
-	// Unit: By
-	// Stability: Experimental
-	// NOTE: The description (brief) for this metric is not defined in the semantic-conventions repository.
-	SystemNetworkIoName = "system.network.io"
-	SystemNetworkIoUnit = "By"
-
-	// SystemNetworkConnections is the metric conforming to the
-	// "system.network.connections" semantic conventions.
-	// Instrument: updowncounter
-	// Unit: {connection}
-	// Stability: Experimental
-	// NOTE: The description (brief) for this metric is not defined in the semantic-conventions repository.
-	SystemNetworkConnectionsName = "system.network.connections"
-	SystemNetworkConnectionsUnit = "{connection}"
-
-	// SystemProcessCount is the metric conforming to the "system.process.count"
-	// semantic conventions. It represents the total number of processes in each
-	// state.
-	// Instrument: updowncounter
-	// Unit: {process}
-	// Stability: Experimental
-	SystemProcessCountName        = "system.process.count"
-	SystemProcessCountUnit        = "{process}"
-	SystemProcessCountDescription = "Total number of processes in each state"
-
-	// SystemProcessCreated is the metric conforming to the
-	// "system.process.created" semantic conventions. It represents the total
-	// number of processes created over uptime of the host.
-	// Instrument: counter
-	// Unit: {process}
-	// Stability: Experimental
-	SystemProcessCreatedName        = "system.process.created"
-	SystemProcessCreatedUnit        = "{process}"
-	SystemProcessCreatedDescription = "Total number of processes created over uptime of the host"
-
-	// SystemLinuxMemoryAvailable is the metric conforming to the
-	// "system.linux.memory.available" semantic conventions. It represents an
-	// estimate of how much memory is available for starting new applications,
-	// without causing swapping.
-	// Instrument: updowncounter
-	// Unit: By
-	// Stability: Experimental
-	SystemLinuxMemoryAvailableName        = "system.linux.memory.available"
-	SystemLinuxMemoryAvailableUnit        = "By"
-	SystemLinuxMemoryAvailableDescription = "An estimate of how much memory is available for starting new applications, without causing swapping"
-)

+ 0 - 9
v2/vendor/go.opentelemetry.io/otel/semconv/v1.26.0/schema.go

@@ -1,9 +0,0 @@
-// Copyright The OpenTelemetry Authors
-// SPDX-License-Identifier: Apache-2.0
-
-package semconv // import "go.opentelemetry.io/otel/semconv/v1.26.0"
-
-// SchemaURL is the schema URL that matches the version of the semantic conventions
-// that this package defines. Semconv packages starting from v1.4.0 must declare
-// non-empty schema URL in the form https://opentelemetry.io/schemas/<version>
-const SchemaURL = "https://opentelemetry.io/schemas/1.26.0"

+ 8 - 1
v2/vendor/golang.org/x/sys/unix/affinity_linux.go

@@ -38,8 +38,15 @@ func SchedSetaffinity(pid int, set *CPUSet) error {
 
 // Zero clears the set s, so that it contains no CPUs.
 func (s *CPUSet) Zero() {
+	clear(s[:])
+}
+
+// Fill adds all possible CPU bits to the set s. On Linux, [SchedSetaffinity]
+// will silently ignore any invalid CPU bits in [CPUSet] so this is an
+// efficient way of resetting the CPU affinity of a process.
+func (s *CPUSet) Fill() {
 	for i := range s {
-		s[i] = 0
+		s[i] = ^cpuMask(0)
 	}
 }
 

+ 1 - 3
v2/vendor/golang.org/x/sys/unix/fdset.go

@@ -23,7 +23,5 @@ func (fds *FdSet) IsSet(fd int) bool {
 
 // Zero clears the set fds.
 func (fds *FdSet) Zero() {
-	for i := range fds.Bits {
-		fds.Bits[i] = 0
-	}
+	clear(fds.Bits[:])
 }

+ 1 - 3
v2/vendor/golang.org/x/sys/unix/ifreq_linux.go

@@ -111,9 +111,7 @@ func (ifr *Ifreq) SetUint32(v uint32) {
 // clear zeroes the ifreq's union field to prevent trailing garbage data from
 // being sent to the kernel if an ifreq is reused.
 func (ifr *Ifreq) clear() {
-	for i := range ifr.raw.Ifru {
-		ifr.raw.Ifru[i] = 0
-	}
+	clear(ifr.raw.Ifru[:])
 }
 
 // TODO(mdlayher): export as IfreqData? For now we can provide helpers such as

+ 1 - 0
v2/vendor/golang.org/x/sys/unix/mkall.sh

@@ -49,6 +49,7 @@ esac
 if [[ "$GOOS" = "linux" ]]; then
 	# Use the Docker-based build system
 	# Files generated through docker (use $cmd so you can Ctl-C the build or run)
+	set -e
 	$cmd docker build --tag generate:$GOOS $GOOS
 	$cmd docker run --interactive --tty --volume $(cd -- "$(dirname -- "$0")/.." && pwd):/build generate:$GOOS
 	exit

+ 1 - 3
v2/vendor/golang.org/x/sys/unix/syscall_linux.go

@@ -801,9 +801,7 @@ func (sa *SockaddrPPPoE) sockaddr() (unsafe.Pointer, _Socklen, error) {
 	// one. The kernel expects SID to be in network byte order.
 	binary.BigEndian.PutUint16(sa.raw[6:8], sa.SID)
 	copy(sa.raw[8:14], sa.Remote)
-	for i := 14; i < 14+IFNAMSIZ; i++ {
-		sa.raw[i] = 0
-	}
+	clear(sa.raw[14 : 14+IFNAMSIZ])
 	copy(sa.raw[14:], sa.Dev)
 	return unsafe.Pointer(&sa.raw), SizeofSockaddrPPPoX, nil
 }

+ 17 - 0
v2/vendor/golang.org/x/sys/unix/syscall_netbsd.go

@@ -248,6 +248,23 @@ func Statvfs(path string, buf *Statvfs_t) (err error) {
 	return Statvfs1(path, buf, ST_WAIT)
 }
 
+func Getvfsstat(buf []Statvfs_t, flags int) (n int, err error) {
+	var (
+		_p0     unsafe.Pointer
+		bufsize uintptr
+	)
+	if len(buf) > 0 {
+		_p0 = unsafe.Pointer(&buf[0])
+		bufsize = unsafe.Sizeof(Statvfs_t{}) * uintptr(len(buf))
+	}
+	r0, _, e1 := Syscall(SYS_GETVFSSTAT, uintptr(_p0), bufsize, uintptr(flags))
+	n = int(r0)
+	if e1 != 0 {
+		err = e1
+	}
+	return
+}
+
 /*
  * Exposed directly
  */

+ 1 - 1
v2/vendor/golang.org/x/sys/unix/syscall_solaris.go

@@ -629,7 +629,7 @@ func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err e
 //sys	Kill(pid int, signum syscall.Signal) (err error)
 //sys	Lchown(path string, uid int, gid int) (err error)
 //sys	Link(path string, link string) (err error)
-//sys	Listen(s int, backlog int) (err error) = libsocket.__xnet_llisten
+//sys	Listen(s int, backlog int) (err error) = libsocket.__xnet_listen
 //sys	Lstat(path string, stat *Stat_t) (err error)
 //sys	Madvise(b []byte, advice int) (err error)
 //sys	Mkdir(path string, mode uint32) (err error)

+ 4 - 4
v2/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go

@@ -72,7 +72,7 @@ import (
 //go:cgo_import_dynamic libc_kill kill "libc.so"
 //go:cgo_import_dynamic libc_lchown lchown "libc.so"
 //go:cgo_import_dynamic libc_link link "libc.so"
-//go:cgo_import_dynamic libc___xnet_llisten __xnet_llisten "libsocket.so"
+//go:cgo_import_dynamic libc___xnet_listen __xnet_listen "libsocket.so"
 //go:cgo_import_dynamic libc_lstat lstat "libc.so"
 //go:cgo_import_dynamic libc_madvise madvise "libc.so"
 //go:cgo_import_dynamic libc_mkdir mkdir "libc.so"
@@ -221,7 +221,7 @@ import (
 //go:linkname procKill libc_kill
 //go:linkname procLchown libc_lchown
 //go:linkname procLink libc_link
-//go:linkname proc__xnet_llisten libc___xnet_llisten
+//go:linkname proc__xnet_listen libc___xnet_listen
 //go:linkname procLstat libc_lstat
 //go:linkname procMadvise libc_madvise
 //go:linkname procMkdir libc_mkdir
@@ -371,7 +371,7 @@ var (
 	procKill,
 	procLchown,
 	procLink,
-	proc__xnet_llisten,
+	proc__xnet_listen,
 	procLstat,
 	procMadvise,
 	procMkdir,
@@ -1178,7 +1178,7 @@ func Link(path string, link string) (err error) {
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Listen(s int, backlog int) (err error) {
-	_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_llisten)), 2, uintptr(s), uintptr(backlog), 0, 0, 0, 0)
+	_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_listen)), 2, uintptr(s), uintptr(backlog), 0, 0, 0, 0)
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}

+ 41 - 0
v2/vendor/golang.org/x/sys/unix/ztypes_linux.go

@@ -632,6 +632,8 @@ const (
 	IFA_FLAGS          = 0x8
 	IFA_RT_PRIORITY    = 0x9
 	IFA_TARGET_NETNSID = 0xa
+	IFAL_LABEL         = 0x2
+	IFAL_ADDRESS       = 0x1
 	RT_SCOPE_UNIVERSE  = 0x0
 	RT_SCOPE_SITE      = 0xc8
 	RT_SCOPE_LINK      = 0xfd
@@ -689,6 +691,7 @@ const (
 	SizeofRtAttr       = 0x4
 	SizeofIfInfomsg    = 0x10
 	SizeofIfAddrmsg    = 0x8
+	SizeofIfAddrlblmsg = 0xc
 	SizeofIfaCacheinfo = 0x10
 	SizeofRtMsg        = 0xc
 	SizeofRtNexthop    = 0x8
@@ -740,6 +743,15 @@ type IfAddrmsg struct {
 	Index     uint32
 }
 
+type IfAddrlblmsg struct {
+	Family    uint8
+	_         uint8
+	Prefixlen uint8
+	Flags     uint8
+	Index     uint32
+	Seq       uint32
+}
+
 type IfaCacheinfo struct {
 	Prefered uint32
 	Valid    uint32
@@ -3052,6 +3064,23 @@ const (
 )
 
 const (
+	TCA_UNSPEC            = 0x0
+	TCA_KIND              = 0x1
+	TCA_OPTIONS           = 0x2
+	TCA_STATS             = 0x3
+	TCA_XSTATS            = 0x4
+	TCA_RATE              = 0x5
+	TCA_FCNT              = 0x6
+	TCA_STATS2            = 0x7
+	TCA_STAB              = 0x8
+	TCA_PAD               = 0x9
+	TCA_DUMP_INVISIBLE    = 0xa
+	TCA_CHAIN             = 0xb
+	TCA_HW_OFFLOAD        = 0xc
+	TCA_INGRESS_BLOCK     = 0xd
+	TCA_EGRESS_BLOCK      = 0xe
+	TCA_DUMP_FLAGS        = 0xf
+	TCA_EXT_WARN_MSG      = 0x10
 	RTNLGRP_NONE          = 0x0
 	RTNLGRP_LINK          = 0x1
 	RTNLGRP_NOTIFY        = 0x2
@@ -3086,6 +3115,18 @@ const (
 	RTNLGRP_IPV6_MROUTE_R = 0x1f
 	RTNLGRP_NEXTHOP       = 0x20
 	RTNLGRP_BRVLAN        = 0x21
+	RTNLGRP_MCTP_IFADDR   = 0x22
+	RTNLGRP_TUNNEL        = 0x23
+	RTNLGRP_STATS         = 0x24
+	RTNLGRP_IPV4_MCADDR   = 0x25
+	RTNLGRP_IPV6_MCADDR   = 0x26
+	RTNLGRP_IPV6_ACADDR   = 0x27
+	TCA_ROOT_UNSPEC       = 0x0
+	TCA_ROOT_TAB          = 0x1
+	TCA_ROOT_FLAGS        = 0x2
+	TCA_ROOT_COUNT        = 0x3
+	TCA_ROOT_TIME_DELTA   = 0x4
+	TCA_ROOT_EXT_WARN_MSG = 0x5
 )
 
 type CapUserHeader struct {

+ 2 - 0
v2/vendor/golang.org/x/sys/windows/syscall_windows.go

@@ -321,6 +321,8 @@ func NewCallbackCDecl(fn interface{}) uintptr {
 //sys	SetConsoleOutputCP(cp uint32) (err error) = kernel32.SetConsoleOutputCP
 //sys	WriteConsole(console Handle, buf *uint16, towrite uint32, written *uint32, reserved *byte) (err error) = kernel32.WriteConsoleW
 //sys	ReadConsole(console Handle, buf *uint16, toread uint32, read *uint32, inputControl *byte) (err error) = kernel32.ReadConsoleW
+//sys	GetNumberOfConsoleInputEvents(console Handle, numevents *uint32) (err error) = kernel32.GetNumberOfConsoleInputEvents
+//sys	FlushConsoleInputBuffer(console Handle) (err error) = kernel32.FlushConsoleInputBuffer
 //sys	resizePseudoConsole(pconsole Handle, size uint32) (hr error) = kernel32.ResizePseudoConsole
 //sys	CreateToolhelp32Snapshot(flags uint32, processId uint32) (handle Handle, err error) [failretval==InvalidHandle] = kernel32.CreateToolhelp32Snapshot
 //sys	Module32First(snapshot Handle, moduleEntry *ModuleEntry32) (err error) = kernel32.Module32FirstW

+ 22 - 0
v2/vendor/golang.org/x/sys/windows/types_windows.go

@@ -65,6 +65,22 @@ var signals = [...]string{
 	15: "terminated",
 }
 
+// File flags for [os.OpenFile]. The O_ prefix is used to indicate
+// that these flags are specific to the OpenFile function.
+const (
+	O_FILE_FLAG_OPEN_NO_RECALL     = FILE_FLAG_OPEN_NO_RECALL
+	O_FILE_FLAG_OPEN_REPARSE_POINT = FILE_FLAG_OPEN_REPARSE_POINT
+	O_FILE_FLAG_SESSION_AWARE      = FILE_FLAG_SESSION_AWARE
+	O_FILE_FLAG_POSIX_SEMANTICS    = FILE_FLAG_POSIX_SEMANTICS
+	O_FILE_FLAG_BACKUP_SEMANTICS   = FILE_FLAG_BACKUP_SEMANTICS
+	O_FILE_FLAG_DELETE_ON_CLOSE    = FILE_FLAG_DELETE_ON_CLOSE
+	O_FILE_FLAG_SEQUENTIAL_SCAN    = FILE_FLAG_SEQUENTIAL_SCAN
+	O_FILE_FLAG_RANDOM_ACCESS      = FILE_FLAG_RANDOM_ACCESS
+	O_FILE_FLAG_NO_BUFFERING       = FILE_FLAG_NO_BUFFERING
+	O_FILE_FLAG_OVERLAPPED         = FILE_FLAG_OVERLAPPED
+	O_FILE_FLAG_WRITE_THROUGH      = FILE_FLAG_WRITE_THROUGH
+)
+
 const (
 	FILE_READ_DATA        = 0x00000001
 	FILE_READ_ATTRIBUTES  = 0x00000080
@@ -1976,6 +1992,12 @@ const (
 	SYMBOLIC_LINK_FLAG_DIRECTORY     = 0x1
 )
 
+// FILE_ZERO_DATA_INFORMATION from winioctl.h
+type FileZeroDataInformation struct {
+	FileOffset      int64
+	BeyondFinalZero int64
+}
+
 const (
 	ComputerNameNetBIOS                   = 0
 	ComputerNameDnsHostname               = 1

File diff ditekan karena terlalu besar
+ 115 - 113
v2/vendor/golang.org/x/sys/windows/zsyscall_windows.go


+ 35 - 17
v2/vendor/google.golang.org/protobuf/internal/filedesc/desc.go

@@ -72,9 +72,10 @@ type (
 		EditionFeatures EditionFeatures
 	}
 	FileL2 struct {
-		Options   func() protoreflect.ProtoMessage
-		Imports   FileImports
-		Locations SourceLocations
+		Options       func() protoreflect.ProtoMessage
+		Imports       FileImports
+		OptionImports func() protoreflect.FileImports
+		Locations     SourceLocations
 	}
 
 	// EditionFeatures is a frequently-instantiated struct, so please take care
@@ -126,12 +127,9 @@ func (fd *File) ParentFile() protoreflect.FileDescriptor { return fd }
 func (fd *File) Parent() protoreflect.Descriptor         { return nil }
 func (fd *File) Index() int                              { return 0 }
 func (fd *File) Syntax() protoreflect.Syntax             { return fd.L1.Syntax }
-
-// Not exported and just used to reconstruct the original FileDescriptor proto
-func (fd *File) Edition() int32                  { return int32(fd.L1.Edition) }
-func (fd *File) Name() protoreflect.Name         { return fd.L1.Package.Name() }
-func (fd *File) FullName() protoreflect.FullName { return fd.L1.Package }
-func (fd *File) IsPlaceholder() bool             { return false }
+func (fd *File) Name() protoreflect.Name                 { return fd.L1.Package.Name() }
+func (fd *File) FullName() protoreflect.FullName         { return fd.L1.Package }
+func (fd *File) IsPlaceholder() bool                     { return false }
 func (fd *File) Options() protoreflect.ProtoMessage {
 	if f := fd.lazyInit().Options; f != nil {
 		return f()
@@ -150,6 +148,16 @@ func (fd *File) Format(s fmt.State, r rune)                    { descfmt.FormatD
 func (fd *File) ProtoType(protoreflect.FileDescriptor)         {}
 func (fd *File) ProtoInternal(pragma.DoNotImplement)           {}
 
+// The next two are not part of the FileDescriptor interface. They are just used to reconstruct
+// the original FileDescriptor proto.
+func (fd *File) Edition() int32 { return int32(fd.L1.Edition) }
+func (fd *File) OptionImports() protoreflect.FileImports {
+	if f := fd.lazyInit().OptionImports; f != nil {
+		return f()
+	}
+	return emptyFiles
+}
+
 func (fd *File) lazyInit() *FileL2 {
 	if atomic.LoadUint32(&fd.once) == 0 {
 		fd.lazyInitOnce()
@@ -182,9 +190,9 @@ type (
 		L2 *EnumL2 // protected by fileDesc.once
 	}
 	EnumL1 struct {
-		eagerValues bool // controls whether EnumL2.Values is already populated
-
 		EditionFeatures EditionFeatures
+		Visibility      int32
+		eagerValues     bool // controls whether EnumL2.Values is already populated
 	}
 	EnumL2 struct {
 		Options        func() protoreflect.ProtoMessage
@@ -219,6 +227,11 @@ func (ed *Enum) ReservedNames() protoreflect.Names       { return &ed.lazyInit()
 func (ed *Enum) ReservedRanges() protoreflect.EnumRanges { return &ed.lazyInit().ReservedRanges }
 func (ed *Enum) Format(s fmt.State, r rune)              { descfmt.FormatDesc(s, r, ed) }
 func (ed *Enum) ProtoType(protoreflect.EnumDescriptor)   {}
+
+// This is not part of the EnumDescriptor interface. It is just used to reconstruct
+// the original FileDescriptor proto.
+func (ed *Enum) Visibility() int32 { return ed.L1.Visibility }
+
 func (ed *Enum) lazyInit() *EnumL2 {
 	ed.L0.ParentFile.lazyInit() // implicitly initializes L2
 	return ed.L2
@@ -244,13 +257,13 @@ type (
 		L2 *MessageL2 // protected by fileDesc.once
 	}
 	MessageL1 struct {
-		Enums        Enums
-		Messages     Messages
-		Extensions   Extensions
-		IsMapEntry   bool // promoted from google.protobuf.MessageOptions
-		IsMessageSet bool // promoted from google.protobuf.MessageOptions
-
+		Enums           Enums
+		Messages        Messages
+		Extensions      Extensions
 		EditionFeatures EditionFeatures
+		Visibility      int32
+		IsMapEntry      bool // promoted from google.protobuf.MessageOptions
+		IsMessageSet    bool // promoted from google.protobuf.MessageOptions
 	}
 	MessageL2 struct {
 		Options               func() protoreflect.ProtoMessage
@@ -319,6 +332,11 @@ func (md *Message) Messages() protoreflect.MessageDescriptors     { return &md.L
 func (md *Message) Extensions() protoreflect.ExtensionDescriptors { return &md.L1.Extensions }
 func (md *Message) ProtoType(protoreflect.MessageDescriptor)      {}
 func (md *Message) Format(s fmt.State, r rune)                    { descfmt.FormatDesc(s, r, md) }
+
+// This is not part of the MessageDescriptor interface. It is just used to reconstruct
+// the original FileDescriptor proto.
+func (md *Message) Visibility() int32 { return md.L1.Visibility }
+
 func (md *Message) lazyInit() *MessageL2 {
 	md.L0.ParentFile.lazyInit() // implicitly initializes L2
 	return md.L2

+ 14 - 0
v2/vendor/google.golang.org/protobuf/internal/filedesc/desc_init.go

@@ -284,6 +284,13 @@ func (ed *Enum) unmarshalSeed(b []byte, sb *strs.Builder, pf *File, pd protorefl
 			case genid.EnumDescriptorProto_Value_field_number:
 				numValues++
 			}
+		case protowire.VarintType:
+			v, m := protowire.ConsumeVarint(b)
+			b = b[m:]
+			switch num {
+			case genid.EnumDescriptorProto_Visibility_field_number:
+				ed.L1.Visibility = int32(v)
+			}
 		default:
 			m := protowire.ConsumeFieldValue(num, typ, b)
 			b = b[m:]
@@ -365,6 +372,13 @@ func (md *Message) unmarshalSeed(b []byte, sb *strs.Builder, pf *File, pd protor
 				md.unmarshalSeedOptions(v)
 			}
 			prevField = num
+		case protowire.VarintType:
+			v, m := protowire.ConsumeVarint(b)
+			b = b[m:]
+			switch num {
+			case genid.DescriptorProto_Visibility_field_number:
+				md.L1.Visibility = int32(v)
+			}
 		default:
 			m := protowire.ConsumeFieldValue(num, typ, b)
 			b = b[m:]

+ 20 - 0
v2/vendor/google.golang.org/protobuf/internal/filedesc/desc_lazy.go

@@ -134,6 +134,7 @@ func (fd *File) unmarshalFull(b []byte) {
 
 	var enumIdx, messageIdx, extensionIdx, serviceIdx int
 	var rawOptions []byte
+	var optionImports []string
 	fd.L2 = new(FileL2)
 	for len(b) > 0 {
 		num, typ, n := protowire.ConsumeTag(b)
@@ -157,6 +158,8 @@ func (fd *File) unmarshalFull(b []byte) {
 					imp = PlaceholderFile(path)
 				}
 				fd.L2.Imports = append(fd.L2.Imports, protoreflect.FileImport{FileDescriptor: imp})
+			case genid.FileDescriptorProto_OptionDependency_field_number:
+				optionImports = append(optionImports, sb.MakeString(v))
 			case genid.FileDescriptorProto_EnumType_field_number:
 				fd.L1.Enums.List[enumIdx].unmarshalFull(v, sb)
 				enumIdx++
@@ -178,6 +181,23 @@ func (fd *File) unmarshalFull(b []byte) {
 		}
 	}
 	fd.L2.Options = fd.builder.optionsUnmarshaler(&descopts.File, rawOptions)
+	if len(optionImports) > 0 {
+		var imps FileImports
+		var once sync.Once
+		fd.L2.OptionImports = func() protoreflect.FileImports {
+			once.Do(func() {
+				imps = make(FileImports, len(optionImports))
+				for i, path := range optionImports {
+					imp, _ := fd.builder.FileRegistry.FindFileByPath(path)
+					if imp == nil {
+						imp = PlaceholderFile(path)
+					}
+					imps[i] = protoreflect.FileImport{FileDescriptor: imp}
+				}
+			})
+			return &imps
+		}
+	}
 }
 
 func (ed *Enum) unmarshalFull(b []byte, sb *strs.Builder) {

+ 7 - 5
v2/vendor/google.golang.org/protobuf/internal/filedesc/editions.go

@@ -13,8 +13,10 @@ import (
 	"google.golang.org/protobuf/reflect/protoreflect"
 )
 
-var defaultsCache = make(map[Edition]EditionFeatures)
-var defaultsKeys = []Edition{}
+var (
+	defaultsCache = make(map[Edition]EditionFeatures)
+	defaultsKeys  = []Edition{}
+)
 
 func init() {
 	unmarshalEditionDefaults(editiondefaults.Defaults)
@@ -41,7 +43,7 @@ func unmarshalGoFeature(b []byte, parent EditionFeatures) EditionFeatures {
 			b = b[m:]
 			parent.StripEnumPrefix = int(v)
 		default:
-			panic(fmt.Sprintf("unkown field number %d while unmarshalling GoFeatures", num))
+			panic(fmt.Sprintf("unknown field number %d while unmarshalling GoFeatures", num))
 		}
 	}
 	return parent
@@ -76,7 +78,7 @@ func unmarshalFeatureSet(b []byte, parent EditionFeatures) EditionFeatures {
 				// DefaultSymbolVisibility is enforced in protoc, runtimes should not
 				// inspect this value.
 			default:
-				panic(fmt.Sprintf("unkown field number %d while unmarshalling FeatureSet", num))
+				panic(fmt.Sprintf("unknown field number %d while unmarshalling FeatureSet", num))
 			}
 		case protowire.BytesType:
 			v, m := protowire.ConsumeBytes(b)
@@ -150,7 +152,7 @@ func unmarshalEditionDefaults(b []byte) {
 			_, m := protowire.ConsumeVarint(b)
 			b = b[m:]
 		default:
-			panic(fmt.Sprintf("unkown field number %d while unmarshalling EditionDefault", num))
+			panic(fmt.Sprintf("unknown field number %d while unmarshalling EditionDefault", num))
 		}
 	}
 }

+ 1 - 1
v2/vendor/google.golang.org/protobuf/internal/version/version.go

@@ -52,7 +52,7 @@ import (
 const (
 	Major      = 1
 	Minor      = 36
-	Patch      = 8
+	Patch      = 10
 	PreRelease = ""
 )
 

+ 16 - 16
v2/vendor/modules.txt

@@ -8,6 +8,10 @@ github.com/andybalholm/brotli/matchfinder
 # github.com/cespare/xxhash/v2 v2.3.0
 ## explicit; go 1.11
 github.com/cespare/xxhash/v2
+# github.com/clipperhouse/uax29/v2 v2.2.0
+## explicit; go 1.18
+github.com/clipperhouse/uax29/v2/graphemes
+github.com/clipperhouse/uax29/v2/internal/iterators
 # github.com/dgraph-io/badger/v4 v4.8.0
 ## explicit; go 1.23.0
 github.com/dgraph-io/badger/v4
@@ -52,7 +56,7 @@ github.com/gofiber/fiber/v2/middleware/compress
 github.com/gofiber/fiber/v2/middleware/filesystem
 github.com/gofiber/fiber/v2/middleware/monitor
 github.com/gofiber/fiber/v2/utils
-# github.com/google/flatbuffers v25.2.10+incompatible
+# github.com/google/flatbuffers v25.9.23+incompatible
 ## explicit
 github.com/google/flatbuffers/go
 # github.com/google/uuid v1.6.0
@@ -80,25 +84,22 @@ github.com/mattn/go-colorable
 # github.com/mattn/go-isatty v0.0.20
 ## explicit; go 1.15
 github.com/mattn/go-isatty
-# github.com/mattn/go-runewidth v0.0.16
-## explicit; go 1.9
+# github.com/mattn/go-runewidth v0.0.19
+## explicit; go 1.20
 github.com/mattn/go-runewidth
-# github.com/rivo/uniseg v0.4.7
-## explicit; go 1.18
-github.com/rivo/uniseg
 # github.com/valyala/bytebufferpool v1.0.0
 ## explicit
 github.com/valyala/bytebufferpool
-# github.com/valyala/fasthttp v1.65.0
-## explicit; go 1.23.0
+# github.com/valyala/fasthttp v1.67.0
+## explicit; go 1.24.0
 github.com/valyala/fasthttp
 github.com/valyala/fasthttp/fasthttpadaptor
 github.com/valyala/fasthttp/fasthttputil
 github.com/valyala/fasthttp/reuseport
 github.com/valyala/fasthttp/stackless
 github.com/valyala/fasthttp/tcplisten
-# go.opentelemetry.io/auto/sdk v1.1.0
-## explicit; go 1.22.0
+# go.opentelemetry.io/auto/sdk v1.2.1
+## explicit; go 1.24.0
 go.opentelemetry.io/auto/sdk
 go.opentelemetry.io/auto/sdk/internal/telemetry
 # go.opentelemetry.io/otel v1.38.0
@@ -111,7 +112,6 @@ go.opentelemetry.io/otel/codes
 go.opentelemetry.io/otel/internal/baggage
 go.opentelemetry.io/otel/internal/global
 go.opentelemetry.io/otel/propagation
-go.opentelemetry.io/otel/semconv/v1.26.0
 go.opentelemetry.io/otel/semconv/v1.37.0
 # go.opentelemetry.io/otel/metric v1.38.0
 ## explicit; go 1.23.0
@@ -123,15 +123,15 @@ go.opentelemetry.io/otel/trace
 go.opentelemetry.io/otel/trace/embedded
 go.opentelemetry.io/otel/trace/internal/telemetry
 go.opentelemetry.io/otel/trace/noop
-# golang.org/x/net v0.43.0
-## explicit; go 1.23.0
+# golang.org/x/net v0.46.0
+## explicit; go 1.24.0
 golang.org/x/net/internal/timeseries
 golang.org/x/net/trace
-# golang.org/x/sys v0.35.0
-## explicit; go 1.23.0
+# golang.org/x/sys v0.37.0
+## explicit; go 1.24.0
 golang.org/x/sys/unix
 golang.org/x/sys/windows
-# google.golang.org/protobuf v1.36.8
+# google.golang.org/protobuf v1.36.10
 ## explicit; go 1.23
 google.golang.org/protobuf/encoding/prototext
 google.golang.org/protobuf/encoding/protowire

Beberapa file tidak ditampilkan karena terlalu banyak file yang berubah dalam diff ini