From 1d305a9c1b420b0e191f022f4d494d9b9f0c028e Mon Sep 17 00:00:00 2001 From: nlohmann Date: Tue, 1 Apr 2025 12:43:11 +0000 Subject: [PATCH] deploy: d41ca94fa85d5119852e2f7a3f94335cc7cb0486 --- api/adl_serializer/from_json/index.html | 2 +- api/adl_serializer/index.html | 2 +- api/adl_serializer/to_json/index.html | 2 +- api/basic_json/accept/index.html | 2 +- api/basic_json/array/index.html | 2 +- api/basic_json/array_t/index.html | 2 +- api/basic_json/at/index.html | 2 +- api/basic_json/back/index.html | 2 +- api/basic_json/basic_json/index.html | 2 +- api/basic_json/begin/index.html | 2 +- api/basic_json/binary/index.html | 2 +- api/basic_json/binary_t/index.html | 2 +- api/basic_json/boolean_t/index.html | 2 +- api/basic_json/cbegin/index.html | 2 +- api/basic_json/cbor_tag_handler_t/index.html | 2 +- api/basic_json/cend/index.html | 2 +- api/basic_json/clear/index.html | 2 +- api/basic_json/contains/index.html | 2 +- api/basic_json/count/index.html | 2 +- api/basic_json/crbegin/index.html | 2 +- api/basic_json/crend/index.html | 2 +- .../default_object_comparator_t/index.html | 2 +- api/basic_json/diff/index.html | 2 +- api/basic_json/dump/index.html | 2 +- api/basic_json/emplace/index.html | 2 +- api/basic_json/emplace_back/index.html | 2 +- api/basic_json/empty/index.html | 2 +- api/basic_json/end/index.html | 2 +- api/basic_json/end_pos/index.html | 2 +- api/basic_json/erase/index.html | 2 +- api/basic_json/error_handler_t/index.html | 2 +- api/basic_json/exception/index.html | 2 +- api/basic_json/find/index.html | 2 +- api/basic_json/flatten/index.html | 2 +- api/basic_json/from_bjdata/index.html | 2 +- api/basic_json/from_bson/index.html | 2 +- api/basic_json/from_cbor/index.html | 2 +- api/basic_json/from_msgpack/index.html | 2 +- api/basic_json/from_ubjson/index.html | 2 +- api/basic_json/front/index.html | 2 +- api/basic_json/get/index.html | 2 +- api/basic_json/get_allocator/index.html | 2 +- api/basic_json/get_binary/index.html | 2 +- api/basic_json/get_ptr/index.html | 2 +- api/basic_json/get_ref/index.html | 2 +- api/basic_json/get_to/index.html | 2 +- api/basic_json/index.html | 2 +- api/basic_json/input_format_t/index.html | 2 +- api/basic_json/insert/index.html | 2 +- api/basic_json/invalid_iterator/index.html | 2 +- api/basic_json/is_array/index.html | 2 +- api/basic_json/is_binary/index.html | 2 +- api/basic_json/is_boolean/index.html | 2 +- api/basic_json/is_discarded/index.html | 2 +- api/basic_json/is_null/index.html | 2 +- api/basic_json/is_number/index.html | 2 +- api/basic_json/is_number_float/index.html | 2 +- api/basic_json/is_number_integer/index.html | 2 +- api/basic_json/is_number_unsigned/index.html | 2 +- api/basic_json/is_object/index.html | 2 +- api/basic_json/is_primitive/index.html | 2 +- api/basic_json/is_string/index.html | 2 +- api/basic_json/is_structured/index.html | 2 +- api/basic_json/items/index.html | 2 +- api/basic_json/json_base_class_t/index.html | 2 +- api/basic_json/json_serializer/index.html | 2 +- api/basic_json/max_size/index.html | 2 +- api/basic_json/merge_patch/index.html | 2 +- api/basic_json/meta/index.html | 2 +- api/basic_json/number_float_t/index.html | 2 +- api/basic_json/number_integer_t/index.html | 2 +- api/basic_json/number_unsigned_t/index.html | 2 +- api/basic_json/object/index.html | 2 +- api/basic_json/object_comparator_t/index.html | 2 +- api/basic_json/object_t/index.html | 2 +- api/basic_json/operator+=/index.html | 2 +- api/basic_json/operator=/index.html | 2 +- api/basic_json/operator[]/index.html | 2 +- api/basic_json/operator_ValueType/index.html | 2 +- api/basic_json/operator_eq/index.html | 2 +- api/basic_json/operator_ge/index.html | 2 +- api/basic_json/operator_gt/index.html | 2 +- api/basic_json/operator_le/index.html | 2 +- api/basic_json/operator_lt/index.html | 2 +- api/basic_json/operator_ne/index.html | 2 +- api/basic_json/operator_spaceship/index.html | 2 +- api/basic_json/operator_value_t/index.html | 2 +- api/basic_json/other_error/index.html | 2 +- api/basic_json/out_of_range/index.html | 2 +- api/basic_json/parse/index.html | 2 +- api/basic_json/parse_error/index.html | 2 +- api/basic_json/parse_event_t/index.html | 2 +- api/basic_json/parser_callback_t/index.html | 2 +- api/basic_json/patch/index.html | 2 +- api/basic_json/patch_inplace/index.html | 2 +- api/basic_json/push_back/index.html | 2 +- api/basic_json/rbegin/index.html | 2 +- api/basic_json/rend/index.html | 2 +- api/basic_json/sax_parse/index.html | 2 +- api/basic_json/size/index.html | 2 +- api/basic_json/start_pos/index.html | 2 +- api/basic_json/std_hash/index.html | 2 +- api/basic_json/std_swap/index.html | 2 +- api/basic_json/string_t/index.html | 2 +- api/basic_json/swap/index.html | 2 +- api/basic_json/to_bjdata/index.html | 2 +- api/basic_json/to_bson/index.html | 2 +- api/basic_json/to_cbor/index.html | 2 +- api/basic_json/to_msgpack/index.html | 2 +- api/basic_json/to_string/index.html | 2 +- api/basic_json/to_ubjson/index.html | 2 +- api/basic_json/type/index.html | 2 +- api/basic_json/type_error/index.html | 2 +- api/basic_json/type_name/index.html | 2 +- api/basic_json/unflatten/index.html | 2 +- api/basic_json/update/index.html | 2 +- api/basic_json/value/index.html | 2 +- api/basic_json/value_t/index.html | 2 +- api/basic_json/~basic_json/index.html | 2 +- .../byte_container_with_subtype/index.html | 2 +- .../clear_subtype/index.html | 2 +- .../has_subtype/index.html | 2 +- api/byte_container_with_subtype/index.html | 2 +- .../set_subtype/index.html | 2 +- .../subtype/index.html | 2 +- api/json/index.html | 2 +- api/json_pointer/back/index.html | 2 +- api/json_pointer/empty/index.html | 2 +- api/json_pointer/index.html | 2 +- api/json_pointer/json_pointer/index.html | 2 +- api/json_pointer/operator_eq/index.html | 2 +- api/json_pointer/operator_ne/index.html | 2 +- api/json_pointer/operator_slash/index.html | 2 +- api/json_pointer/operator_slasheq/index.html | 2 +- api/json_pointer/operator_string_t/index.html | 2 +- api/json_pointer/parent_pointer/index.html | 2 +- api/json_pointer/pop_back/index.html | 2 +- api/json_pointer/push_back/index.html | 2 +- api/json_pointer/string_t/index.html | 2 +- api/json_pointer/to_string/index.html | 2 +- api/json_sax/binary/index.html | 2 +- api/json_sax/boolean/index.html | 2 +- api/json_sax/end_array/index.html | 2 +- api/json_sax/end_object/index.html | 2 +- api/json_sax/index.html | 2 +- api/json_sax/key/index.html | 2 +- api/json_sax/null/index.html | 2 +- api/json_sax/number_float/index.html | 2 +- api/json_sax/number_integer/index.html | 2 +- api/json_sax/number_unsigned/index.html | 2 +- api/json_sax/parse_error/index.html | 2 +- api/json_sax/start_array/index.html | 2 +- api/json_sax/start_object/index.html | 2 +- api/json_sax/string/index.html | 2 +- api/macros/index.html | 2 +- api/macros/json_assert/index.html | 2 +- .../json_diagnostic_positions/index.html | 2 +- api/macros/json_diagnostics/index.html | 2 +- .../index.html | 2 +- api/macros/json_has_cpp_11/index.html | 2 +- api/macros/json_has_filesystem/index.html | 2 +- api/macros/json_has_ranges/index.html | 2 +- api/macros/json_has_static_rtti/index.html | 2 +- .../json_has_three_way_comparison/index.html | 2 +- api/macros/json_no_io/index.html | 2 +- api/macros/json_noexception/index.html | 2 +- .../index.html | 2 +- .../index.html | 2 +- api/macros/json_throw_user/index.html | 2 +- api/macros/json_use_global_udls/index.html | 2 +- .../json_use_implicit_conversions/index.html | 2 +- .../index.html | 2 +- .../nlohmann_define_derived_type/index.html | 2 +- .../nlohmann_define_type_intrusive/index.html | 2 +- .../index.html | 2 +- api/macros/nlohmann_json_namespace/index.html | 2 +- .../nlohmann_json_namespace_begin/index.html | 2 +- .../index.html | 2 +- .../nlohmann_json_serialize_enum/index.html | 2 +- .../nlohmann_json_version_major/index.html | 2 +- api/operator_gtgt/index.html | 2 +- api/operator_literal_json/index.html | 2 +- api/operator_literal_json_pointer/index.html | 2 +- api/operator_ltlt/index.html | 2 +- api/ordered_json/index.html | 2 +- api/ordered_map/index.html | 2 +- community/code_of_conduct/index.html | 2 +- community/contribution_guidelines/index.html | 2 +- community/governance/index.html | 2 +- community/index.html | 2 +- community/quality_assurance/index.html | 2 +- community/security_policy/index.html | 2 +- features/arbitrary_types/index.html | 2 +- features/assertions/index.html | 2 +- features/binary_formats/bjdata/index.html | 2 +- features/binary_formats/bson/index.html | 2 +- features/binary_formats/cbor/index.html | 2 +- features/binary_formats/index.html | 2 +- .../binary_formats/messagepack/index.html | 2 +- features/binary_formats/ubjson/index.html | 2 +- features/binary_values/index.html | 2 +- features/comments/index.html | 2 +- .../element_access/checked_access/index.html | 2 +- .../element_access/default_value/index.html | 2 +- features/element_access/index.html | 2 +- .../unchecked_access/index.html | 2 +- features/enum_conversion/index.html | 2 +- features/iterators/index.html | 2 +- features/json_patch/index.html | 2 +- features/json_pointer/index.html | 2 +- features/macros/index.html | 2 +- features/merge_patch/index.html | 2 +- features/namespace/index.html | 2 +- features/object_order/index.html | 2 +- features/parsing/index.html | 2 +- features/parsing/json_lines/index.html | 2 +- features/parsing/parse_exceptions/index.html | 2 +- features/parsing/parser_callbacks/index.html | 2 +- features/parsing/sax_interface/index.html | 2 +- features/types/index.html | 2 +- features/types/number_handling/index.html | 2 +- home/architecture/index.html | 2 +- home/customers/index.html | 2 +- home/design_goals/index.html | 2 +- home/exceptions/index.html | 2 +- home/faq/index.html | 2 +- home/license/index.html | 2 +- home/releases/index.html | 2 +- home/sponsors/index.html | 2 +- images/customers.png | Bin 1014336 -> 1020636 bytes index.html | 2 +- integration/cmake/index.html | 6 +- integration/index.html | 2 +- integration/migration_guide/index.html | 2 +- integration/package_managers/index.html | 2 +- integration/pkg-config/index.html | 2 +- search/search_index.json | 2 +- sitemap.xml | 470 +++++++++--------- sitemap.xml.gz | Bin 1726 -> 1726 bytes 239 files changed, 473 insertions(+), 473 deletions(-) diff --git a/api/adl_serializer/from_json/index.html b/api/adl_serializer/from_json/index.html index 416acf83f..0de504887 100644 --- a/api/adl_serializer/from_json/index.html +++ b/api/adl_serializer/from_json/index.html @@ -101,4 +101,4 @@ std::cout << p.name << " (" << p.age << ") lives in " << p.address << std::endl; }

Output:

Ned Flanders (60) lives in 744 Evergreen Terrace
-

See also

Version history

\ No newline at end of file +

See also

Version history

\ No newline at end of file diff --git a/api/adl_serializer/index.html b/api/adl_serializer/index.html index 2aa161fd5..ed8149015 100644 --- a/api/adl_serializer/index.html +++ b/api/adl_serializer/index.html @@ -12,4 +12,4 @@ // same thing, but with the "from_json" method } }; -

Member functions

Version history

\ No newline at end of file +

Member functions

Version history

\ No newline at end of file diff --git a/api/adl_serializer/to_json/index.html b/api/adl_serializer/to_json/index.html index 6193876c5..a3422e5b9 100644 --- a/api/adl_serializer/to_json/index.html +++ b/api/adl_serializer/to_json/index.html @@ -35,4 +35,4 @@ std::cout << j << std::endl; }

Output:

{"address":"744 Evergreen Terrace","age":60,"name":"Ned Flanders"}
-

See also

Version history

\ No newline at end of file +

See also

Version history

\ No newline at end of file diff --git a/api/basic_json/accept/index.html b/api/basic_json/accept/index.html index 5ab23354e..a21cbba00 100644 --- a/api/basic_json/accept/index.html +++ b/api/basic_json/accept/index.html @@ -34,4 +34,4 @@ << json::accept(invalid_text) << '\n'; }

Output:

true false
-

See also

Version history

Deprecation

Overload (2) replaces calls to accept with a pair of iterators as their first parameter which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like accept({ptr, ptr+len}, ...); with accept(ptr, ptr+len, ...);.

You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

\ No newline at end of file +

See also

Version history

Deprecation

Overload (2) replaces calls to accept with a pair of iterators as their first parameter which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like accept({ptr, ptr+len}, ...); with accept(ptr, ptr+len, ...);.

You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

\ No newline at end of file diff --git a/api/basic_json/array/index.html b/api/basic_json/array/index.html index d5b9998b4..bc995f718 100644 --- a/api/basic_json/array/index.html +++ b/api/basic_json/array/index.html @@ -22,4 +22,4 @@ [] [1,2,3,4] [["one",1],["two",2]] -

See also

Version history

\ No newline at end of file +

See also

Version history

\ No newline at end of file diff --git a/api/basic_json/array_t/index.html b/api/basic_json/array_t/index.html index 5bb20d21d..e8efa66d2 100644 --- a/api/basic_json/array_t/index.html +++ b/api/basic_json/array_t/index.html @@ -14,4 +14,4 @@ std::cout << std::boolalpha << std::is_same<std::vector<json>, json::array_t>::value << std::endl; }

Output:

true
-

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/basic_json/at/index.html b/api/basic_json/at/index.html index f7d93a191..7a4eb8b5b 100644 --- a/api/basic_json/at/index.html +++ b/api/basic_json/at/index.html @@ -498,4 +498,4 @@ [json.exception.out_of_range.402] array index '-' (2) is out of range [json.exception.out_of_range.403] key 'foo' not found [json.exception.out_of_range.404] unresolved reference token 'foo' -

See also

Version history

  1. Added in version 1.0.0.
  2. Added in version 1.0.0.
  3. Added in version 3.11.0.
  4. Added in version 2.0.0.
\ No newline at end of file +

See also

Version history

  1. Added in version 1.0.0.
  2. Added in version 1.0.0.
  3. Added in version 3.11.0.
  4. Added in version 2.0.0.
\ No newline at end of file diff --git a/api/basic_json/back/index.html b/api/basic_json/back/index.html index 790922e2b..88483e70f 100644 --- a/api/basic_json/back/index.html +++ b/api/basic_json/back/index.html @@ -49,4 +49,4 @@ 16 "Hello, world" [json.exception.invalid_iterator.214] cannot get value -

See also

Version history

\ No newline at end of file +

See also

Version history

\ No newline at end of file diff --git a/api/basic_json/basic_json/index.html b/api/basic_json/basic_json/index.html index 60e0b257a..e22e222d8 100644 --- a/api/basic_json/basic_json/index.html +++ b/api/basic_json/basic_json/index.html @@ -455,4 +455,4 @@ }

Output:

null
 23
-

Version history

  1. Since version 1.0.0.
  2. Since version 1.0.0.
  3. Since version 2.1.0.
  4. Since version 3.2.0.
  5. Since version 1.0.0.
  6. Since version 1.0.0.
  7. Since version 1.0.0.
  8. Since version 1.0.0.
  9. Since version 1.0.0.
\ No newline at end of file +

Version history

  1. Since version 1.0.0.
  2. Since version 1.0.0.
  3. Since version 2.1.0.
  4. Since version 3.2.0.
  5. Since version 1.0.0.
  6. Since version 1.0.0.
  7. Since version 1.0.0.
  8. Since version 1.0.0.
  9. Since version 1.0.0.
\ No newline at end of file diff --git a/api/basic_json/begin/index.html b/api/basic_json/begin/index.html index 8086902c9..da98ab865 100644 --- a/api/basic_json/begin/index.html +++ b/api/basic_json/begin/index.html @@ -17,4 +17,4 @@ std::cout << *it << '\n'; }

Output:

1
-

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/basic_json/binary/index.html b/api/basic_json/binary/index.html index 768c22f20..3389a7523 100644 --- a/api/basic_json/binary/index.html +++ b/api/basic_json/binary/index.html @@ -24,4 +24,4 @@ std::cout << "type: " << j.type_name() << ", subtype: " << j.get_binary().subtype() << std::endl; }

Output:

type: binary, subtype: 42
-

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/basic_json/binary_t/index.html b/api/basic_json/binary_t/index.html index 117a2452e..7929ef8f7 100644 --- a/api/basic_json/binary_t/index.html +++ b/api/basic_json/binary_t/index.html @@ -10,4 +10,4 @@ std::cout << std::boolalpha << std::is_same<nlohmann::byte_container_with_subtype<std::vector<std::uint8_t>>, json::binary_t>::value << std::endl; }

Output:

true
-

See also

Version history

\ No newline at end of file +

See also

Version history

\ No newline at end of file diff --git a/api/basic_json/boolean_t/index.html b/api/basic_json/boolean_t/index.html index 019c35ad5..c13e27a6c 100644 --- a/api/basic_json/boolean_t/index.html +++ b/api/basic_json/boolean_t/index.html @@ -10,4 +10,4 @@ std::cout << std::boolalpha << std::is_same<bool, json::boolean_t>::value << std::endl; }

Output:

true
-

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/basic_json/cbegin/index.html b/api/basic_json/cbegin/index.html index 0b1342b05..27f24842f 100644 --- a/api/basic_json/cbegin/index.html +++ b/api/basic_json/cbegin/index.html @@ -16,4 +16,4 @@ std::cout << *it << '\n'; }

Output:

1
-

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/basic_json/cbor_tag_handler_t/index.html b/api/basic_json/cbor_tag_handler_t/index.html index b91b5f234..960d863db 100644 --- a/api/basic_json/cbor_tag_handler_t/index.html +++ b/api/basic_json/cbor_tag_handler_t/index.html @@ -35,4 +35,4 @@

Output:

[json.exception.parse_error.112] parse error at byte 1: syntax error while parsing CBOR value: invalid byte: 0xD8
 {"bytes":[202,254,186,190],"subtype":null}
 {"bytes":[202,254,186,190],"subtype":66}
-

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/basic_json/cend/index.html b/api/basic_json/cend/index.html index c8da48db3..255133baf 100644 --- a/api/basic_json/cend/index.html +++ b/api/basic_json/cend/index.html @@ -19,4 +19,4 @@ std::cout << *it << '\n'; }

Output:

5
-

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/basic_json/clear/index.html b/api/basic_json/clear/index.html index e45ef2239..e08561de6 100644 --- a/api/basic_json/clear/index.html +++ b/api/basic_json/clear/index.html @@ -41,4 +41,4 @@ {} [] "" -

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/basic_json/contains/index.html b/api/basic_json/contains/index.html index 3ae841d2d..760c9ca74 100644 --- a/api/basic_json/contains/index.html +++ b/api/basic_json/contains/index.html @@ -101,4 +101,4 @@ false false false -

Version history

  1. Added in version 3.11.0.
  2. Added in version 3.6.0. Extended template KeyType to support comparable types in version 3.11.0.
  3. Added in version 3.7.0.
\ No newline at end of file +

Version history

  1. Added in version 3.11.0.
  2. Added in version 3.6.0. Extended template KeyType to support comparable types in version 3.11.0.
  3. Added in version 3.7.0.
\ No newline at end of file diff --git a/api/basic_json/count/index.html b/api/basic_json/count/index.html index 031253c88..7b9664cf3 100644 --- a/api/basic_json/count/index.html +++ b/api/basic_json/count/index.html @@ -46,4 +46,4 @@ }

Output:

number of elements with key "two": 1
 number of elements with key "three": 0
-

Version history

  1. Added in version 3.11.0.
  2. Added in version 1.0.0. Changed parameter key type to KeyType&& in version 3.11.0.
\ No newline at end of file +

Version history

  1. Added in version 3.11.0.
  2. Added in version 1.0.0. Changed parameter key type to KeyType&& in version 3.11.0.
\ No newline at end of file diff --git a/api/basic_json/crbegin/index.html b/api/basic_json/crbegin/index.html index 58cb537ec..c26826c8b 100644 --- a/api/basic_json/crbegin/index.html +++ b/api/basic_json/crbegin/index.html @@ -16,4 +16,4 @@ std::cout << *it << '\n'; }

Output:

5
-

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/basic_json/crend/index.html b/api/basic_json/crend/index.html index b70fd3803..03bb8f627 100644 --- a/api/basic_json/crend/index.html +++ b/api/basic_json/crend/index.html @@ -19,4 +19,4 @@ std::cout << *it << '\n'; }

Output:

1
-

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/basic_json/default_object_comparator_t/index.html b/api/basic_json/default_object_comparator_t/index.html index 3dca57f3d..aa2319e98 100644 --- a/api/basic_json/default_object_comparator_t/index.html +++ b/api/basic_json/default_object_comparator_t/index.html @@ -14,4 +14,4 @@ }

Output:

one < two : true
 three < four : false
-

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/basic_json/diff/index.html b/api/basic_json/diff/index.html index 11b190040..b8694607d 100644 --- a/api/basic_json/diff/index.html +++ b/api/basic_json/diff/index.html @@ -63,4 +63,4 @@ "world" ] } -

See also

Version history

\ No newline at end of file +

See also

Version history

\ No newline at end of file diff --git a/api/basic_json/dump/index.html b/api/basic_json/dump/index.html index a86a0fd49..388315bf4 100644 --- a/api/basic_json/dump/index.html +++ b/api/basic_json/dump/index.html @@ -105,4 +105,4 @@ [json.exception.type_error.316] invalid UTF-8 byte at index 2: 0xA9 string with replaced invalid characters: "ä�ü" string with ignored invalid characters: "äü" -

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/basic_json/emplace/index.html b/api/basic_json/emplace/index.html index 9dadc599b..cb1b18e47 100644 --- a/api/basic_json/emplace/index.html +++ b/api/basic_json/emplace/index.html @@ -37,4 +37,4 @@ 3 true {"A":"a","B":"b"} "b" false -

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/basic_json/emplace_back/index.html b/api/basic_json/emplace_back/index.html index da0a4f4db..d25dffc7d 100644 --- a/api/basic_json/emplace_back/index.html +++ b/api/basic_json/emplace_back/index.html @@ -28,4 +28,4 @@ null [1,2,3,4,5,6] ["first",["second","second","second"]] -

See also

Version history

\ No newline at end of file +

See also

Version history

\ No newline at end of file diff --git a/api/basic_json/empty/index.html b/api/basic_json/empty/index.html index 3700fae9b..58afa0e8e 100644 --- a/api/basic_json/empty/index.html +++ b/api/basic_json/empty/index.html @@ -42,4 +42,4 @@ false true false -

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/basic_json/end/index.html b/api/basic_json/end/index.html index 1aee989d3..a00fbfc17 100644 --- a/api/basic_json/end/index.html +++ b/api/basic_json/end/index.html @@ -20,4 +20,4 @@ std::cout << *it << '\n'; }

Output:

5
-

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/basic_json/end_pos/index.html b/api/basic_json/end_pos/index.html index b748c572f..a20c699c9 100644 --- a/api/basic_json/end_pos/index.html +++ b/api/basic_json/end_pos/index.html @@ -101,4 +101,4 @@ Original string: 1 Parsed string: 1 -

The output shows the start/end positions of all the objects and fields in the JSON string.

See also

Version history

\ No newline at end of file +

The output shows the start/end positions of all the objects and fields in the JSON string.

See also

Version history

\ No newline at end of file diff --git a/api/basic_json/erase/index.html b/api/basic_json/erase/index.html index 16c13e7da..cf3444f89 100644 --- a/api/basic_json/erase/index.html +++ b/api/basic_json/erase/index.html @@ -148,4 +148,4 @@ std::cout << j_array << '\n'; }

Output:

[0,1,3,4,5]
-

Version history

  1. Added in version 1.0.0. Added support for binary types in version 3.8.0.
  2. Added in version 1.0.0. Added support for binary types in version 3.8.0.
  3. Added in version 1.0.0.
  4. Added in version 3.11.0.
  5. Added in version 1.0.0.
\ No newline at end of file +

Version history

  1. Added in version 1.0.0. Added support for binary types in version 3.8.0.
  2. Added in version 1.0.0. Added support for binary types in version 3.8.0.
  3. Added in version 1.0.0.
  4. Added in version 3.11.0.
  5. Added in version 1.0.0.
\ No newline at end of file diff --git a/api/basic_json/error_handler_t/index.html b/api/basic_json/error_handler_t/index.html index 2c0bda462..2f194ba1a 100644 --- a/api/basic_json/error_handler_t/index.html +++ b/api/basic_json/error_handler_t/index.html @@ -30,4 +30,4 @@

Output:

[json.exception.type_error.316] invalid UTF-8 byte at index 2: 0xA9
 string with replaced invalid characters: "ä�ü"
 string with ignored invalid characters: "äü"
-

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/basic_json/exception/index.html b/api/basic_json/exception/index.html index eed4075da..703ed71b9 100644 --- a/api/basic_json/exception/index.html +++ b/api/basic_json/exception/index.html @@ -49,4 +49,4 @@ }

Output:

message: [json.exception.out_of_range.403] key 'non-existing' not found
 exception id: 403
-

See also

List of exceptions

Version history

\ No newline at end of file +

See also

List of exceptions

Version history

\ No newline at end of file diff --git a/api/basic_json/find/index.html b/api/basic_json/find/index.html index 6989caf98..5a8e1b868 100644 --- a/api/basic_json/find/index.html +++ b/api/basic_json/find/index.html @@ -55,4 +55,4 @@

Output:

"two" was found: true
 value at key "two": 2
 "three" was found: false
-

See also

Version history

  1. Added in version 3.11.0.
  2. Added in version 1.0.0. Changed to support comparable types in version 3.11.0.
\ No newline at end of file +

See also

Version history

  1. Added in version 3.11.0.
  2. Added in version 1.0.0. Changed to support comparable types in version 3.11.0.
\ No newline at end of file diff --git a/api/basic_json/flatten/index.html b/api/basic_json/flatten/index.html index e6fa4cb81..9c990aa87 100644 --- a/api/basic_json/flatten/index.html +++ b/api/basic_json/flatten/index.html @@ -43,4 +43,4 @@ "/object/value": 42.99, "/pi": 3.141 } -

See also

Version history

\ No newline at end of file +

See also

Version history

\ No newline at end of file diff --git a/api/basic_json/from_bjdata/index.html b/api/basic_json/from_bjdata/index.html index 69a5730be..3d0cf5ee0 100644 --- a/api/basic_json/from_bjdata/index.html +++ b/api/basic_json/from_bjdata/index.html @@ -32,4 +32,4 @@ "compact": true, "schema": 0 } -

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/basic_json/from_bson/index.html b/api/basic_json/from_bson/index.html index 85094258d..54776bb7e 100644 --- a/api/basic_json/from_bson/index.html +++ b/api/basic_json/from_bson/index.html @@ -33,4 +33,4 @@ "compact": true, "schema": 0 } -

See also

Version history

Deprecation

You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

\ No newline at end of file +

See also

Version history

Deprecation

You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

\ No newline at end of file diff --git a/api/basic_json/from_cbor/index.html b/api/basic_json/from_cbor/index.html index eef479429..705eebdd2 100644 --- a/api/basic_json/from_cbor/index.html +++ b/api/basic_json/from_cbor/index.html @@ -35,4 +35,4 @@ "compact": true, "schema": 0 } -

Version history

Deprecation

You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

\ No newline at end of file +

Version history

Deprecation

You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

\ No newline at end of file diff --git a/api/basic_json/from_msgpack/index.html b/api/basic_json/from_msgpack/index.html index 150e4b25b..756fdbabd 100644 --- a/api/basic_json/from_msgpack/index.html +++ b/api/basic_json/from_msgpack/index.html @@ -32,4 +32,4 @@ "compact": true, "schema": 0 } -

Version history

Deprecation

You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

\ No newline at end of file +

Version history

Deprecation

You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

\ No newline at end of file diff --git a/api/basic_json/from_ubjson/index.html b/api/basic_json/from_ubjson/index.html index a9911669d..414035950 100644 --- a/api/basic_json/from_ubjson/index.html +++ b/api/basic_json/from_ubjson/index.html @@ -32,4 +32,4 @@ "compact": true, "schema": 0 } -

Version history

Deprecation

You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

\ No newline at end of file +

Version history

Deprecation

You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

\ No newline at end of file diff --git a/api/basic_json/front/index.html b/api/basic_json/front/index.html index b64e491f8..bd2f100cc 100644 --- a/api/basic_json/front/index.html +++ b/api/basic_json/front/index.html @@ -35,4 +35,4 @@ 1 1 "Hello, world" -

See also

Version history

\ No newline at end of file +

See also

Version history

\ No newline at end of file diff --git a/api/basic_json/get/index.html b/api/basic_json/get/index.html index 3a27b437b..2d0a7333b 100644 --- a/api/basic_json/get/index.html +++ b/api/basic_json/get/index.html @@ -103,4 +103,4 @@ }

Output:

17 17 17 17
 true
-

Version history

  1. Since version 2.1.0.
  2. Since version 2.1.0. Extended to work with other specializations of basic_json in version 3.2.0.
  3. Since version 1.0.0.
\ No newline at end of file +

Version history

  1. Since version 2.1.0.
  2. Since version 2.1.0. Extended to work with other specializations of basic_json in version 3.2.0.
  3. Since version 1.0.0.
\ No newline at end of file diff --git a/api/basic_json/get_allocator/index.html b/api/basic_json/get_allocator/index.html index bae7271af..accec13d6 100644 --- a/api/basic_json/get_allocator/index.html +++ b/api/basic_json/get_allocator/index.html @@ -18,4 +18,4 @@ traits_t::deallocate(alloc, j, 1); }

Output:

"Hello, world!"
-

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/basic_json/get_binary/index.html b/api/basic_json/get_binary/index.html index ccc85461e..6321287c3 100644 --- a/api/basic_json/get_binary/index.html +++ b/api/basic_json/get_binary/index.html @@ -18,4 +18,4 @@ std::cout << "type: " << j.type_name() << ", subtype: " << j.get_binary().subtype() << std::endl; }

Output:

type: binary, subtype: 42
-

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/basic_json/get_ptr/index.html b/api/basic_json/get_ptr/index.html index 678f9103c..8c63eaaf7 100644 --- a/api/basic_json/get_ptr/index.html +++ b/api/basic_json/get_ptr/index.html @@ -44,4 +44,4 @@ value at 0x6000029fc088 is 1 }

Output:

17 17 17 17
 true
-

See also

Version history

\ No newline at end of file +

See also

Version history

\ No newline at end of file diff --git a/api/basic_json/get_ref/index.html b/api/basic_json/get_ref/index.html index b319b0d7c..92fc064ac 100644 --- a/api/basic_json/get_ref/index.html +++ b/api/basic_json/get_ref/index.html @@ -32,4 +32,4 @@ }

Output:

17 17
 [json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is number
-

See also

Version history

\ No newline at end of file +

See also

Version history

\ No newline at end of file diff --git a/api/basic_json/get_to/index.html b/api/basic_json/get_to/index.html index 822ecdad6..3710c716c 100644 --- a/api/basic_json/get_to/index.html +++ b/api/basic_json/get_to/index.html @@ -74,4 +74,4 @@ null: null boolean: true array: [1,2,3,4,5] -

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/basic_json/index.html b/api/basic_json/index.html index 65e650311..6cc3f6531 100644 --- a/api/basic_json/index.html +++ b/api/basic_json/index.html @@ -78,4 +78,4 @@ "pi": 3.141, "size": 8 } -

See also

Version history

\ No newline at end of file +

See also

Version history

\ No newline at end of file diff --git a/api/basic_json/input_format_t/index.html b/api/basic_json/input_format_t/index.html index a0cb30c9b..54df7367e 100644 --- a/api/basic_json/input_format_t/index.html +++ b/api/basic_json/input_format_t/index.html @@ -123,4 +123,4 @@

Output:

binary(val=[...])
 
 result: true
-

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/basic_json/insert/index.html b/api/basic_json/insert/index.html index c02a0ee9f..c8a0d6e31 100644 --- a/api/basic_json/insert/index.html +++ b/api/basic_json/insert/index.html @@ -116,4 +116,4 @@

Output:

{"one":"eins","two":"zwei"}
 {"eleven":"elf","seventeen":"siebzehn"}
 {"eleven":"elf","one":"eins","seventeen":"siebzehn","two":"zwei"}
-

Version history

  1. Added in version 1.0.0.
  2. Added in version 1.0.0.
  3. Added in version 1.0.0.
  4. Added in version 1.0.0.
  5. Added in version 3.0.0.
\ No newline at end of file +

Version history

  1. Added in version 1.0.0.
  2. Added in version 1.0.0.
  3. Added in version 1.0.0.
  4. Added in version 1.0.0.
  5. Added in version 3.0.0.
\ No newline at end of file diff --git a/api/basic_json/invalid_iterator/index.html b/api/basic_json/invalid_iterator/index.html index 496484251..fa1094669 100644 --- a/api/basic_json/invalid_iterator/index.html +++ b/api/basic_json/invalid_iterator/index.html @@ -50,4 +50,4 @@ }

Output:

message: [json.exception.invalid_iterator.207] cannot use key() for non-object iterators
 exception id: 207
-

See also

Version history

\ No newline at end of file +

See also

Version history

\ No newline at end of file diff --git a/api/basic_json/is_array/index.html b/api/basic_json/is_array/index.html index acce12f2c..8c69abd88 100644 --- a/api/basic_json/is_array/index.html +++ b/api/basic_json/is_array/index.html @@ -38,4 +38,4 @@ true false false -

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/basic_json/is_binary/index.html b/api/basic_json/is_binary/index.html index 40b118499..fd86c0482 100644 --- a/api/basic_json/is_binary/index.html +++ b/api/basic_json/is_binary/index.html @@ -38,4 +38,4 @@ false false true -

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/basic_json/is_boolean/index.html b/api/basic_json/is_boolean/index.html index d51976e5a..c31063c0e 100644 --- a/api/basic_json/is_boolean/index.html +++ b/api/basic_json/is_boolean/index.html @@ -38,4 +38,4 @@ false false false -

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/basic_json/is_discarded/index.html b/api/basic_json/is_discarded/index.html index 0d33f76eb..96e74ce28 100644 --- a/api/basic_json/is_discarded/index.html +++ b/api/basic_json/is_discarded/index.html @@ -40,4 +40,4 @@ false false false -

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/basic_json/is_null/index.html b/api/basic_json/is_null/index.html index ca5b28163..90c575c38 100644 --- a/api/basic_json/is_null/index.html +++ b/api/basic_json/is_null/index.html @@ -38,4 +38,4 @@ false false false -

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/basic_json/is_number/index.html b/api/basic_json/is_number/index.html index f3992f5f6..090e9d51d 100644 --- a/api/basic_json/is_number/index.html +++ b/api/basic_json/is_number/index.html @@ -42,4 +42,4 @@ false false false -

See also

Version history

\ No newline at end of file +

See also

Version history

\ No newline at end of file diff --git a/api/basic_json/is_number_float/index.html b/api/basic_json/is_number_float/index.html index b2123cf08..01469389f 100644 --- a/api/basic_json/is_number_float/index.html +++ b/api/basic_json/is_number_float/index.html @@ -38,4 +38,4 @@ false false false -

See also

Version history

\ No newline at end of file +

See also

Version history

\ No newline at end of file diff --git a/api/basic_json/is_number_integer/index.html b/api/basic_json/is_number_integer/index.html index 78c7f9789..87c830f3d 100644 --- a/api/basic_json/is_number_integer/index.html +++ b/api/basic_json/is_number_integer/index.html @@ -38,4 +38,4 @@ false false false -

See also

Version history

\ No newline at end of file +

See also

Version history

\ No newline at end of file diff --git a/api/basic_json/is_number_unsigned/index.html b/api/basic_json/is_number_unsigned/index.html index 4dcfbd5b2..f2bac972e 100644 --- a/api/basic_json/is_number_unsigned/index.html +++ b/api/basic_json/is_number_unsigned/index.html @@ -38,4 +38,4 @@ false false false -

See also

Version history

\ No newline at end of file +

See also

Version history

\ No newline at end of file diff --git a/api/basic_json/is_object/index.html b/api/basic_json/is_object/index.html index b2fd473af..f3fbf720a 100644 --- a/api/basic_json/is_object/index.html +++ b/api/basic_json/is_object/index.html @@ -38,4 +38,4 @@ false false false -

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/basic_json/is_primitive/index.html b/api/basic_json/is_primitive/index.html index a94335b2e..6b5d30f84 100644 --- a/api/basic_json/is_primitive/index.html +++ b/api/basic_json/is_primitive/index.html @@ -42,4 +42,4 @@ false true true -

See also

Version history

\ No newline at end of file +

See also

Version history

\ No newline at end of file diff --git a/api/basic_json/is_string/index.html b/api/basic_json/is_string/index.html index 59fa040c7..a0758cf48 100644 --- a/api/basic_json/is_string/index.html +++ b/api/basic_json/is_string/index.html @@ -38,4 +38,4 @@ false true false -

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/basic_json/is_structured/index.html b/api/basic_json/is_structured/index.html index d72eadf20..abc5b1cb9 100644 --- a/api/basic_json/is_structured/index.html +++ b/api/basic_json/is_structured/index.html @@ -42,4 +42,4 @@ true false false -

See also

Version history

\ No newline at end of file +

See also

Version history

\ No newline at end of file diff --git a/api/basic_json/items/index.html b/api/basic_json/items/index.html index 3ac6f5fa8..cde80b6a9 100644 --- a/api/basic_json/items/index.html +++ b/api/basic_json/items/index.html @@ -47,4 +47,4 @@ key: 2, value: 4 key: 3, value: 8 key: 4, value: 16 -

Version history

Deprecation

This function replaces the static function iterator_wrapper which was introduced in version 1.0.0, but has been deprecated in version 3.1.0. Function iterator_wrapper will be removed in version 4.0.0. Please replace all occurrences of iterator_wrapper(j) with j.items().

You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

\ No newline at end of file +

Version history

Deprecation

This function replaces the static function iterator_wrapper which was introduced in version 1.0.0, but has been deprecated in version 3.1.0. Function iterator_wrapper will be removed in version 4.0.0. Please replace all occurrences of iterator_wrapper(j) with j.items().

You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

\ No newline at end of file diff --git a/api/basic_json/json_base_class_t/index.html b/api/basic_json/json_base_class_t/index.html index 2e9feeaf6..59cbd8054 100644 --- a/api/basic_json/json_base_class_t/index.html +++ b/api/basic_json/json_base_class_t/index.html @@ -91,4 +91,4 @@ /null - metadata = 42 -> null /object - metadata = 21 -> {"uint":1} /object/uint - metadata = 42 -> 1 -

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/basic_json/json_serializer/index.html b/api/basic_json/json_serializer/index.html index 1de323b97..0e817f5bf 100644 --- a/api/basic_json/json_serializer/index.html +++ b/api/basic_json/json_serializer/index.html @@ -54,4 +54,4 @@ std::cout << p.name << " (" << p.age << ") lives in " << p.address << std::endl; }

Output:

Ned Flanders (60) lives in 744 Evergreen Terrace
-

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/basic_json/max_size/index.html b/api/basic_json/max_size/index.html index 41efbb4c7..36bd57dc9 100644 --- a/api/basic_json/max_size/index.html +++ b/api/basic_json/max_size/index.html @@ -31,4 +31,4 @@ 115292150460684697 576460752303423487 1 -

Note the output is platform-dependent.

Version history

\ No newline at end of file +

Note the output is platform-dependent.

Version history

\ No newline at end of file diff --git a/api/basic_json/merge_patch/index.html b/api/basic_json/merge_patch/index.html index bed051045..410380092 100644 --- a/api/basic_json/merge_patch/index.html +++ b/api/basic_json/merge_patch/index.html @@ -64,4 +64,4 @@ ], "title": "Hello!" } -

See also

Version history

\ No newline at end of file +

See also

Version history

\ No newline at end of file diff --git a/api/basic_json/meta/index.html b/api/basic_json/meta/index.html index 42b0790cd..7980cd50e 100644 --- a/api/basic_json/meta/index.html +++ b/api/basic_json/meta/index.html @@ -27,4 +27,4 @@ "string": "3.11.3" } } -

Note the output is platform-dependent.

See also

Version history

\ No newline at end of file +

Note the output is platform-dependent.

See also

Version history

\ No newline at end of file diff --git a/api/basic_json/number_float_t/index.html b/api/basic_json/number_float_t/index.html index 0542c8c16..b0a7824d4 100644 --- a/api/basic_json/number_float_t/index.html +++ b/api/basic_json/number_float_t/index.html @@ -10,4 +10,4 @@ std::cout << std::boolalpha << std::is_same<double, json::number_float_t>::value << std::endl; }

Output:

true
-

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/basic_json/number_integer_t/index.html b/api/basic_json/number_integer_t/index.html index 1a638107f..47fac781f 100644 --- a/api/basic_json/number_integer_t/index.html +++ b/api/basic_json/number_integer_t/index.html @@ -10,4 +10,4 @@ std::cout << std::boolalpha << std::is_same<std::int64_t, json::number_integer_t>::value << std::endl; }

Output:

true
-

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/basic_json/number_unsigned_t/index.html b/api/basic_json/number_unsigned_t/index.html index 9c812ffa8..7d385eb6c 100644 --- a/api/basic_json/number_unsigned_t/index.html +++ b/api/basic_json/number_unsigned_t/index.html @@ -10,4 +10,4 @@ std::cout << std::boolalpha << std::is_same<std::uint64_t, json::number_unsigned_t>::value << std::endl; }

Output:

true
-

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/basic_json/object/index.html b/api/basic_json/object/index.html index 0bac9e3a0..9f864bdba 100644 --- a/api/basic_json/object/index.html +++ b/api/basic_json/object/index.html @@ -31,4 +31,4 @@ {} {"one":1,"two":2} [json.exception.type_error.301] cannot create object from initializer list -

See also

Version history

\ No newline at end of file +

See also

Version history

\ No newline at end of file diff --git a/api/basic_json/object_comparator_t/index.html b/api/basic_json/object_comparator_t/index.html index 0b92393c0..612c4da79 100644 --- a/api/basic_json/object_comparator_t/index.html +++ b/api/basic_json/object_comparator_t/index.html @@ -14,4 +14,4 @@ }

Output:

json::object_comparator_t("one", "two") = true
 json::object_comparator_t("three", "four") = false
-

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/basic_json/object_t/index.html b/api/basic_json/object_t/index.html index b484e2dbf..d22537c35 100644 --- a/api/basic_json/object_t/index.html +++ b/api/basic_json/object_t/index.html @@ -28,4 +28,4 @@ std::cout << std::boolalpha << std::is_same<std::map<json::string_t, json>, json::object_t>::value << std::endl; }

Output:

true
-

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/basic_json/operator+=/index.html b/api/basic_json/operator+=/index.html index af25e60e2..1850d1394 100644 --- a/api/basic_json/operator+=/index.html +++ b/api/basic_json/operator+=/index.html @@ -96,4 +96,4 @@ null {"four":4,"one":1,"three":3,"two":2} [["five",5]] -

See also

Version history

  1. Since version 1.0.0.
  2. Since version 1.0.0.
  3. Since version 2.0.0.
\ No newline at end of file +

See also

Version history

  1. Since version 1.0.0.
  2. Since version 1.0.0.
  3. Since version 2.0.0.
\ No newline at end of file diff --git a/api/basic_json/operator=/index.html b/api/basic_json/operator=/index.html index bd3824ea4..889fd862e 100644 --- a/api/basic_json/operator=/index.html +++ b/api/basic_json/operator=/index.html @@ -24,4 +24,4 @@ }

Output:

23
 23
-

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/basic_json/operator[]/index.html b/api/basic_json/operator[]/index.html index 737c9475e..35b651dc4 100644 --- a/api/basic_json/operator[]/index.html +++ b/api/basic_json/operator[]/index.html @@ -283,4 +283,4 @@ "foo" [1,2] 2 -

See also

Version history

  1. Added in version 1.0.0.
  2. Added in version 1.0.0. Added overloads for T* key in version 1.1.0. Removed overloads for T* key (replaced by 3) in version 3.11.0.
  3. Added in version 3.11.0.
  4. Added in version 2.0.0.
\ No newline at end of file +

See also

Version history

  1. Added in version 1.0.0.
  2. Added in version 1.0.0. Added overloads for T* key in version 1.1.0. Removed overloads for T* key (replaced by 3) in version 3.11.0.
  3. Added in version 3.11.0.
  4. Added in version 2.0.0.
\ No newline at end of file diff --git a/api/basic_json/operator_ValueType/index.html b/api/basic_json/operator_ValueType/index.html index 50dcc3c0a..77dc3ee69 100644 --- a/api/basic_json/operator_ValueType/index.html +++ b/api/basic_json/operator_ValueType/index.html @@ -76,4 +76,4 @@ boolean: true array: [1,2,3,4,5] [json.exception.type_error.302] type must be boolean, but is string -

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/basic_json/operator_eq/index.html b/api/basic_json/operator_eq/index.html index 498ac379f..3c2a2add8 100644 --- a/api/basic_json/operator_eq/index.html +++ b/api/basic_json/operator_eq/index.html @@ -115,4 +115,4 @@ 17 == nullptr false "foo" == nullptr false null == nullptr true -

Version history

  1. Added in version 1.0.0. Added C++20 member functions in version 3.11.0.
  2. Added in version 1.0.0. Added C++20 member functions in version 3.11.0.
\ No newline at end of file +

Version history

  1. Added in version 1.0.0. Added C++20 member functions in version 3.11.0.
  2. Added in version 1.0.0. Added C++20 member functions in version 3.11.0.
\ No newline at end of file diff --git a/api/basic_json/operator_ge/index.html b/api/basic_json/operator_ge/index.html index a22a173e0..7ebce304f 100644 --- a/api/basic_json/operator_ge/index.html +++ b/api/basic_json/operator_ge/index.html @@ -34,4 +34,4 @@ {"A":"a","B":"b"} >= {"A":"a","B":"b"} true 17 >= 17.0000000000001 false "foo" >= "bar" true -

See also

Version history

  1. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
  2. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
\ No newline at end of file +

See also

Version history

  1. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
  2. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
\ No newline at end of file diff --git a/api/basic_json/operator_gt/index.html b/api/basic_json/operator_gt/index.html index e22ff13c2..7c942adde 100644 --- a/api/basic_json/operator_gt/index.html +++ b/api/basic_json/operator_gt/index.html @@ -34,4 +34,4 @@ {"A":"a","B":"b"} > {"A":"a","B":"b"} false 17 > 17.0000000000001 false "foo" > "bar" true -

See also

Version history

  1. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
  2. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
\ No newline at end of file +

See also

Version history

  1. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
  2. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
\ No newline at end of file diff --git a/api/basic_json/operator_le/index.html b/api/basic_json/operator_le/index.html index 498cf8773..f73c11b70 100644 --- a/api/basic_json/operator_le/index.html +++ b/api/basic_json/operator_le/index.html @@ -34,4 +34,4 @@ {"A":"a","B":"b"} <= {"A":"a","B":"b"} true 17 <= 17.0000000000001 true "foo" <= "bar" false -

See also

Version history

  1. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
  2. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
\ No newline at end of file +

See also

Version history

  1. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
  2. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
\ No newline at end of file diff --git a/api/basic_json/operator_lt/index.html b/api/basic_json/operator_lt/index.html index ec6eed0e5..6f1454501 100644 --- a/api/basic_json/operator_lt/index.html +++ b/api/basic_json/operator_lt/index.html @@ -34,4 +34,4 @@ {"A":"a","B":"b"} == {"A":"a","B":"b"} false 17 == 17.0000000000001 true "foo" == "bar" false -

See also

Version history

  1. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
  2. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
\ No newline at end of file +

See also

Version history

  1. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
  2. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
\ No newline at end of file diff --git a/api/basic_json/operator_ne/index.html b/api/basic_json/operator_ne/index.html index c7f557afa..cdaa1da87 100644 --- a/api/basic_json/operator_ne/index.html +++ b/api/basic_json/operator_ne/index.html @@ -69,4 +69,4 @@ 17 != nullptr true "foo" != nullptr true null != nullptr false -

Version history

  1. Added in version 1.0.0. Added C++20 member functions in version 3.11.0.
  2. Added in version 1.0.0. Added C++20 member functions in version 3.11.0.
\ No newline at end of file +

Version history

  1. Added in version 1.0.0. Added C++20 member functions in version 3.11.0.
  2. Added in version 1.0.0. Added C++20 member functions in version 3.11.0.
\ No newline at end of file diff --git a/api/basic_json/operator_spaceship/index.html b/api/basic_json/operator_spaceship/index.html index 43a91268a..9bb77e905 100644 --- a/api/basic_json/operator_spaceship/index.html +++ b/api/basic_json/operator_spaceship/index.html @@ -93,4 +93,4 @@ 17 <=> 17.000000 := equivalent 17 <=> nan := unordered "17" <=> 17 := greater -

See also

Version history

  1. Added in version 3.11.0.
  2. Added in version 3.11.0.
\ No newline at end of file +

See also

Version history

  1. Added in version 3.11.0.
  2. Added in version 3.11.0.
\ No newline at end of file diff --git a/api/basic_json/operator_value_t/index.html b/api/basic_json/operator_value_t/index.html index ac40c8f94..f565986cc 100644 --- a/api/basic_json/operator_value_t/index.html +++ b/api/basic_json/operator_value_t/index.html @@ -45,4 +45,4 @@ true true true -

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/basic_json/other_error/index.html b/api/basic_json/other_error/index.html index 9552d742f..ef9a9c10b 100644 --- a/api/basic_json/other_error/index.html +++ b/api/basic_json/other_error/index.html @@ -59,4 +59,4 @@ }

Output:

message: [json.exception.other_error.501] unsuccessful: {"op":"test","path":"/best_biscuit/name","value":"Choco Leibniz"}
 exception id: 501
-

See also

Version history

\ No newline at end of file +

See also

Version history

\ No newline at end of file diff --git a/api/basic_json/out_of_range/index.html b/api/basic_json/out_of_range/index.html index d4885300b..9dc999de5 100644 --- a/api/basic_json/out_of_range/index.html +++ b/api/basic_json/out_of_range/index.html @@ -49,4 +49,4 @@ }

Output:

message: [json.exception.out_of_range.401] array index 4 is out of range
 exception id: 401
-

See also

Version history

\ No newline at end of file +

See also

Version history

\ No newline at end of file diff --git a/api/basic_json/parse/index.html b/api/basic_json/parse/index.html index c204c2691..9c6781636 100644 --- a/api/basic_json/parse/index.html +++ b/api/basic_json/parse/index.html @@ -331,4 +331,4 @@ }

Output:

[json.exception.parse_error.101] parse error at line 4, column 0: syntax error while parsing value - invalid string: control character U+000A (LF) must be escaped to \u000A or \n; last read: '"value without closing quotes<U+000A>'
 the input is invalid JSON
-

See also

Version history

Deprecation

Overload (2) replaces calls to parse with a pair of iterators as their first parameter which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like parse({ptr, ptr+len}, ...); with parse(ptr, ptr+len, ...);.

You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

\ No newline at end of file +

See also

Version history

Deprecation

Overload (2) replaces calls to parse with a pair of iterators as their first parameter which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like parse({ptr, ptr+len}, ...); with parse(ptr, ptr+len, ...);.

You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

\ No newline at end of file diff --git a/api/basic_json/parse_error/index.html b/api/basic_json/parse_error/index.html index 9b9bc0b5f..c43ed4c6c 100644 --- a/api/basic_json/parse_error/index.html +++ b/api/basic_json/parse_error/index.html @@ -50,4 +50,4 @@

Output:

message: [json.exception.parse_error.101] parse error at line 1, column 8: syntax error while parsing value - unexpected ']'; expected '[', '{', or a literal
 exception id: 101
 byte position of error: 8
-

See also

Version history

\ No newline at end of file +

See also

Version history

\ No newline at end of file diff --git a/api/basic_json/parse_event_t/index.html b/api/basic_json/parse_event_t/index.html index fb6cfb950..aedab5bf0 100644 --- a/api/basic_json/parse_event_t/index.html +++ b/api/basic_json/parse_event_t/index.html @@ -6,4 +6,4 @@ key, value }; -

The parser callback distinguishes the following events:

Examples

Example when certain parse events are triggered

Version history

\ No newline at end of file +

The parser callback distinguishes the following events:

Examples

Example when certain parse events are triggered

Version history

\ No newline at end of file diff --git a/api/basic_json/parser_callback_t/index.html b/api/basic_json/parser_callback_t/index.html index 5e1ff57f7..7e56a544a 100644 --- a/api/basic_json/parser_callback_t/index.html +++ b/api/basic_json/parser_callback_t/index.html @@ -83,4 +83,4 @@ "Width": 800 } } -

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/basic_json/patch/index.html b/api/basic_json/patch/index.html index b1826cf56..dc47ae127 100644 --- a/api/basic_json/patch/index.html +++ b/api/basic_json/patch/index.html @@ -43,4 +43,4 @@ "world" ] } -

See also

Version history

\ No newline at end of file +

See also

Version history

\ No newline at end of file diff --git a/api/basic_json/patch_inplace/index.html b/api/basic_json/patch_inplace/index.html index 1a730560b..b8fdb2e87 100644 --- a/api/basic_json/patch_inplace/index.html +++ b/api/basic_json/patch_inplace/index.html @@ -47,4 +47,4 @@ "world" ] } -

See also

Version history

\ No newline at end of file +

See also

Version history

\ No newline at end of file diff --git a/api/basic_json/push_back/index.html b/api/basic_json/push_back/index.html index 335f59f1a..11cddab08 100644 --- a/api/basic_json/push_back/index.html +++ b/api/basic_json/push_back/index.html @@ -96,4 +96,4 @@ null {"four":4,"one":1,"three":3,"two":2} [["five",5]] -

See also

Version history

  1. Since version 1.0.0.
  2. Since version 1.0.0.
  3. Since version 2.0.0.
\ No newline at end of file +

See also

Version history

  1. Since version 1.0.0.
  2. Since version 1.0.0.
  3. Since version 2.0.0.
\ No newline at end of file diff --git a/api/basic_json/rbegin/index.html b/api/basic_json/rbegin/index.html index 9b57f0977..9ee0d0684 100644 --- a/api/basic_json/rbegin/index.html +++ b/api/basic_json/rbegin/index.html @@ -17,4 +17,4 @@ std::cout << *it << '\n'; }

Output:

5
-

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/basic_json/rend/index.html b/api/basic_json/rend/index.html index c360aba3d..8de008c1c 100644 --- a/api/basic_json/rend/index.html +++ b/api/basic_json/rend/index.html @@ -20,4 +20,4 @@ std::cout << *it << '\n'; }

Output:

1
-

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/basic_json/sax_parse/index.html b/api/basic_json/sax_parse/index.html index 41691ba15..b90ac50a9 100644 --- a/api/basic_json/sax_parse/index.html +++ b/api/basic_json/sax_parse/index.html @@ -181,4 +181,4 @@ ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input) result: false -

Version history

Deprecation

Overload (2) replaces calls to sax_parse with a pair of iterators as their first parameter which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like sax_parse({ptr, ptr+len}); with sax_parse(ptr, ptr+len);.

\ No newline at end of file +

Version history

Deprecation

Overload (2) replaces calls to sax_parse with a pair of iterators as their first parameter which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like sax_parse({ptr, ptr+len}); with sax_parse(ptr, ptr+len);.

\ No newline at end of file diff --git a/api/basic_json/size/index.html b/api/basic_json/size/index.html index 98eb57ce1..7f2c99fd8 100644 --- a/api/basic_json/size/index.html +++ b/api/basic_json/size/index.html @@ -37,4 +37,4 @@ 5 0 1 -

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/basic_json/start_pos/index.html b/api/basic_json/start_pos/index.html index 0514931d9..78323ec36 100644 --- a/api/basic_json/start_pos/index.html +++ b/api/basic_json/start_pos/index.html @@ -101,4 +101,4 @@ Original string: 1 Parsed string: 1 -

The output shows the start/end positions of all the objects and fields in the JSON string.

See also

Version history

\ No newline at end of file +

The output shows the start/end positions of all the objects and fields in the JSON string.

See also

Version history

\ No newline at end of file diff --git a/api/basic_json/std_hash/index.html b/api/basic_json/std_hash/index.html index 698472779..b6f26fc08 100644 --- a/api/basic_json/std_hash/index.html +++ b/api/basic_json/std_hash/index.html @@ -28,4 +28,4 @@ hash({}) = 2654435832 hash([]) = 2654435899 hash({"hello": "world"}) = 4469488738203676328 -

Note the output is platform-dependent.

Version history

\ No newline at end of file +

Note the output is platform-dependent.

Version history

\ No newline at end of file diff --git a/api/basic_json/std_swap/index.html b/api/basic_json/std_swap/index.html index 2643dd16d..4846eae4a 100644 --- a/api/basic_json/std_swap/index.html +++ b/api/basic_json/std_swap/index.html @@ -26,4 +26,4 @@ }

Output:

j1 = {"one":1,"two":2} | j2 = [1,2,4,8,16]
 j1 = [1,2,4,8,16] | j2 = {"one":1,"two":2}
-

See also

Version history

\ No newline at end of file +

See also

Version history

\ No newline at end of file diff --git a/api/basic_json/string_t/index.html b/api/basic_json/string_t/index.html index e157eb48a..ef7d3dd68 100644 --- a/api/basic_json/string_t/index.html +++ b/api/basic_json/string_t/index.html @@ -10,4 +10,4 @@ std::cout << std::boolalpha << std::is_same<std::string, json::string_t>::value << std::endl; }

Output:

true
-

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/basic_json/swap/index.html b/api/basic_json/swap/index.html index 517273977..a6a2e4b9b 100644 --- a/api/basic_json/swap/index.html +++ b/api/basic_json/swap/index.html @@ -126,4 +126,4 @@ }

Output:

value = {"bytes":[4,5,6],"subtype":null}
 binary = {"bytes":[1,2,3],"subtype":null}
-

See also

Version history

  1. Since version 1.0.0.
  2. Since version 1.0.0.
  3. Since version 1.0.0.
  4. Since version 1.0.0.
  5. Since version 1.0.0.
  6. Since version 3.8.0.
  7. Since version 3.8.0.
\ No newline at end of file +

See also

Version history

  1. Since version 1.0.0.
  2. Since version 1.0.0.
  3. Since version 1.0.0.
  4. Since version 1.0.0.
  5. Since version 1.0.0.
  6. Since version 3.8.0.
  7. Since version 3.8.0.
\ No newline at end of file diff --git a/api/basic_json/to_bjdata/index.html b/api/basic_json/to_bjdata/index.html index 231b28601..ab94462f9 100644 --- a/api/basic_json/to_bjdata/index.html +++ b/api/basic_json/to_bjdata/index.html @@ -79,4 +79,4 @@ [i1i2i3i4i5i6i7i8] [#i8i1i2i3i4i5i6i7i8 [$i#i812345678 -

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/basic_json/to_bson/index.html b/api/basic_json/to_bson/index.html index 8f5e8a02f..cb3f0e848 100644 --- a/api/basic_json/to_bson/index.html +++ b/api/basic_json/to_bson/index.html @@ -27,4 +27,4 @@ std::cout << std::endl; }

Output:

0x1b 0x00 0x00 0x00 0x08 0x63 0x6f 0x6d 0x70 0x61 0x63 0x74 0x00 0x01 0x10 0x73 0x63 0x68 0x65 0x6d 0x61 0x00 0x00 0x00 0x00 0x00 0x00 
-

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/basic_json/to_cbor/index.html b/api/basic_json/to_cbor/index.html index c187d1f70..eb74217e6 100644 --- a/api/basic_json/to_cbor/index.html +++ b/api/basic_json/to_cbor/index.html @@ -27,4 +27,4 @@ std::cout << std::endl; }

Output:

0xa2 0x67 0x63 0x6f 0x6d 0x70 0x61 0x63 0x74 0xf5 0x66 0x73 0x63 0x68 0x65 0x6d 0x61 0x00 
-

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/basic_json/to_msgpack/index.html b/api/basic_json/to_msgpack/index.html index cbfe01dc7..c70d8ae22 100644 --- a/api/basic_json/to_msgpack/index.html +++ b/api/basic_json/to_msgpack/index.html @@ -27,4 +27,4 @@ std::cout << std::endl; }

Output:

0x82 0xa7 0x63 0x6f 0x6d 0x70 0x61 0x63 0x74 0xc3 0xa6 0x73 0x63 0x68 0x65 0x6d 0x61 0x00 
-

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/basic_json/to_string/index.html b/api/basic_json/to_string/index.html index 8c1a25461..5c8ac6e67 100644 --- a/api/basic_json/to_string/index.html +++ b/api/basic_json/to_string/index.html @@ -28,4 +28,4 @@

Output:

{"one":1,"two":2}
 
 42
-

See also

Version history

Added in version 3.7.0.

\ No newline at end of file +

See also

Version history

Added in version 3.7.0.

\ No newline at end of file diff --git a/api/basic_json/to_ubjson/index.html b/api/basic_json/to_ubjson/index.html index ffa6e0a48..d7c0ea3a0 100644 --- a/api/basic_json/to_ubjson/index.html +++ b/api/basic_json/to_ubjson/index.html @@ -76,4 +76,4 @@ [i1i2i3i4i5i6i7i8] [#i8i1i2i3i4i5i6i7i8 [$i#i812345678 -

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/basic_json/type/index.html b/api/basic_json/type/index.html index b7239bfaf..9c8d2e7e2 100644 --- a/api/basic_json/type/index.html +++ b/api/basic_json/type/index.html @@ -35,4 +35,4 @@ true true true -

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/basic_json/type_error/index.html b/api/basic_json/type_error/index.html index d81a67f34..ad2b3381d 100644 --- a/api/basic_json/type_error/index.html +++ b/api/basic_json/type_error/index.html @@ -49,4 +49,4 @@ }

Output:

message: [json.exception.type_error.308] cannot use push_back() with string
 exception id: 308
-

See also

Version history

\ No newline at end of file +

See also

Version history

\ No newline at end of file diff --git a/api/basic_json/type_name/index.html b/api/basic_json/type_name/index.html index 415bef6b6..4cffc8397 100644 --- a/api/basic_json/type_name/index.html +++ b/api/basic_json/type_name/index.html @@ -34,4 +34,4 @@ {"one":1,"two":2} is an object [1,2,4,8,16] is an array "Hello, world" is a string -

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/basic_json/unflatten/index.html b/api/basic_json/unflatten/index.html index 7c2541a7e..bc68acebf 100644 --- a/api/basic_json/unflatten/index.html +++ b/api/basic_json/unflatten/index.html @@ -43,4 +43,4 @@ }, "pi": 3.141 } -

See also

Version history

\ No newline at end of file +

See also

Version history

\ No newline at end of file diff --git a/api/basic_json/update/index.html b/api/basic_json/update/index.html index 807f81d31..7e4b065b2 100644 --- a/api/basic_json/update/index.html +++ b/api/basic_json/update/index.html @@ -110,4 +110,4 @@ "active": true, "name": {"de": "Maus", "en": "mouse", "es": "ratón"} } -

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/basic_json/value/index.html b/api/basic_json/value/index.html index c6e80e8e7..f14327142 100644 --- a/api/basic_json/value/index.html +++ b/api/basic_json/value/index.html @@ -136,4 +136,4 @@ << " " << v_string << " " << v_boolean << "\n"; }

Output:

1 42.23 oops false
-

See also

Version history

  1. Added in version 1.0.0. Changed parameter default_value type from const ValueType& to ValueType&& in version 3.11.0.
  2. Added in version 3.11.0. Made ValueType the first template parameter in version 3.11.2.
  3. Added in version 2.0.2.
\ No newline at end of file +

See also

Version history

  1. Added in version 1.0.0. Changed parameter default_value type from const ValueType& to ValueType&& in version 3.11.0.
  2. Added in version 3.11.0. Made ValueType the first template parameter in version 3.11.2.
  3. Added in version 2.0.2.
\ No newline at end of file diff --git a/api/basic_json/value_t/index.html b/api/basic_json/value_t/index.html index 512e19a9b..36daf94d6 100644 --- a/api/basic_json/value_t/index.html +++ b/api/basic_json/value_t/index.html @@ -46,4 +46,4 @@ true true true -

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/basic_json/~basic_json/index.html b/api/basic_json/~basic_json/index.html index 82765d380..4b6c15c09 100644 --- a/api/basic_json/~basic_json/index.html +++ b/api/basic_json/~basic_json/index.html @@ -1,2 +1,2 @@ (Destructor) - JSON for Modern C++
Skip to content

nlohmann::basic_json::~basic_json

~basic_json() noexcept;
-

Destroys the JSON value and frees all allocated memory.

Exception safety

No-throw guarantee: this member function never throws exceptions.

Complexity

Linear.

Version history

  • Added in version 1.0.0.
\ No newline at end of file +

Destroys the JSON value and frees all allocated memory.

Exception safety

No-throw guarantee: this member function never throws exceptions.

Complexity

Linear.

Version history

\ No newline at end of file diff --git a/api/byte_container_with_subtype/byte_container_with_subtype/index.html b/api/byte_container_with_subtype/byte_container_with_subtype/index.html index ea4356d98..d13335e91 100644 --- a/api/byte_container_with_subtype/byte_container_with_subtype/index.html +++ b/api/byte_container_with_subtype/byte_container_with_subtype/index.html @@ -34,4 +34,4 @@

Output:

{"bytes":[],"subtype":null}
 {"bytes":[202,254,186,190],"subtype":null}
 {"bytes":[202,254,186,190],"subtype":42}
-

Version history

Since version 3.8.0.

\ No newline at end of file +

Version history

Since version 3.8.0.

\ No newline at end of file diff --git a/api/byte_container_with_subtype/clear_subtype/index.html b/api/byte_container_with_subtype/clear_subtype/index.html index d3f9684af..d6962cb82 100644 --- a/api/byte_container_with_subtype/clear_subtype/index.html +++ b/api/byte_container_with_subtype/clear_subtype/index.html @@ -22,4 +22,4 @@ }

Output:

before calling clear_subtype(): {"bytes":[202,254,186,190],"subtype":42}
 after calling clear_subtype(): {"bytes":[202,254,186,190],"subtype":null}
-

Version history

Since version 3.8.0.

\ No newline at end of file +

Version history

Since version 3.8.0.

\ No newline at end of file diff --git a/api/byte_container_with_subtype/has_subtype/index.html b/api/byte_container_with_subtype/has_subtype/index.html index d2ba3538b..60d34c1c4 100644 --- a/api/byte_container_with_subtype/has_subtype/index.html +++ b/api/byte_container_with_subtype/has_subtype/index.html @@ -20,4 +20,4 @@ }

Output:

c1.has_subtype() = false
 c2.has_subtype() = true
-

Version history

Since version 3.8.0.

\ No newline at end of file +

Version history

Since version 3.8.0.

\ No newline at end of file diff --git a/api/byte_container_with_subtype/index.html b/api/byte_container_with_subtype/index.html index 80f777431..dde73d146 100644 --- a/api/byte_container_with_subtype/index.html +++ b/api/byte_container_with_subtype/index.html @@ -1,3 +1,3 @@ Overview - JSON for Modern C++
Skip to content

nlohmann::byte_container_with_subtype

template<typename BinaryType>
 class byte_container_with_subtype : public BinaryType;
-

This type extends the template parameter BinaryType provided to basic_json with a subtype used by BSON and MessagePack. This type exists so that the user does not have to specify a type themselves with a specific naming scheme in order to override the binary type.

Template parameters

BinaryType
container to store bytes (std::vector<std::uint8_t> by default)

Member types

  • container_type - the type of the underlying container (BinaryType)
  • subtype_type - the type of the subtype (std::uint64_t)

Member functions

Version history

  • Added in version 3.8.0.
  • Changed type of subtypes to std::uint64_t in 3.10.0.
\ No newline at end of file +

This type extends the template parameter BinaryType provided to basic_json with a subtype used by BSON and MessagePack. This type exists so that the user does not have to specify a type themselves with a specific naming scheme in order to override the binary type.

Template parameters

BinaryType
container to store bytes (std::vector<std::uint8_t> by default)

Member types

Member functions

Version history

\ No newline at end of file diff --git a/api/byte_container_with_subtype/set_subtype/index.html b/api/byte_container_with_subtype/set_subtype/index.html index 191d7d0df..d909bb148 100644 --- a/api/byte_container_with_subtype/set_subtype/index.html +++ b/api/byte_container_with_subtype/set_subtype/index.html @@ -23,4 +23,4 @@ }

Output:

before calling set_subtype(42): {"bytes":[202,254,186,190],"subtype":null}
 after calling set_subtype(42): {"bytes":[202,254,186,190],"subtype":42}
-

Version history

Since version 3.8.0.

\ No newline at end of file +

Version history

Since version 3.8.0.

\ No newline at end of file diff --git a/api/byte_container_with_subtype/subtype/index.html b/api/byte_container_with_subtype/subtype/index.html index 59e80b0a7..d5ad4f91b 100644 --- a/api/byte_container_with_subtype/subtype/index.html +++ b/api/byte_container_with_subtype/subtype/index.html @@ -23,4 +23,4 @@ }

Output:

c1.subtype() = 18446744073709551615
 c2.subtype() = 42
-

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/json/index.html b/api/json/index.html index a166c12db..4fb60516e 100644 --- a/api/json/index.html +++ b/api/json/index.html @@ -65,4 +65,4 @@ "pi": 3.141, "size": 8 } -

Version history

Since version 1.0.0.

\ No newline at end of file +

Version history

Since version 1.0.0.

\ No newline at end of file diff --git a/api/json_pointer/back/index.html b/api/json_pointer/back/index.html index fd86358ed..b5a706b5c 100644 --- a/api/json_pointer/back/index.html +++ b/api/json_pointer/back/index.html @@ -16,4 +16,4 @@ }

Output:

last reference token of "/foo" is "foo"
 last reference token of "/foo/0" is "0"
-

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/json_pointer/empty/index.html b/api/json_pointer/empty/index.html index 3aeed9efb..850ca49ec 100644 --- a/api/json_pointer/empty/index.html +++ b/api/json_pointer/empty/index.html @@ -23,4 +23,4 @@ "": true "/foo": false "/foo/0": false -

Version history

Added in version 3.6.0.

\ No newline at end of file +

Version history

Added in version 3.6.0.

\ No newline at end of file diff --git a/api/json_pointer/index.html b/api/json_pointer/index.html index 7fbe0ec5f..5466fda22 100644 --- a/api/json_pointer/index.html +++ b/api/json_pointer/index.html @@ -1,3 +1,3 @@ Overview - JSON for Modern C++
Skip to content

nlohmann::json_pointer

template<typename RefStringType>
 class json_pointer;
-

A JSON pointer defines a string syntax for identifying a specific value within a JSON document. It can be used with functions at and operator[]. Furthermore, JSON pointers are the base for JSON patches.

Template parameters

RefStringType
the string type used for the reference tokens making up the JSON pointer

Deprecation

For backwards compatibility RefStringType may also be a specialization of basic_json in which case string_t will be deduced as basic_json::string_t. This feature is deprecated and may be removed in a future major version.

Member types

  • string_t - the string type used for the reference tokens

Member functions

Literals

See also

Version history

  • Added in version 2.0.0.
  • Changed template parameter from basic_json to string type in version 3.11.0.
\ No newline at end of file +

A JSON pointer defines a string syntax for identifying a specific value within a JSON document. It can be used with functions at and operator[]. Furthermore, JSON pointers are the base for JSON patches.

Template parameters

RefStringType
the string type used for the reference tokens making up the JSON pointer

Deprecation

For backwards compatibility RefStringType may also be a specialization of basic_json in which case string_t will be deduced as basic_json::string_t. This feature is deprecated and may be removed in a future major version.

Member types

Member functions

Literals

See also

Version history

\ No newline at end of file diff --git a/api/json_pointer/json_pointer/index.html b/api/json_pointer/json_pointer/index.html index a477f7af7..85897b3ce 100644 --- a/api/json_pointer/json_pointer/index.html +++ b/api/json_pointer/json_pointer/index.html @@ -49,4 +49,4 @@

Output:

[json.exception.parse_error.107] parse error at byte 1: JSON pointer must be empty or begin with '/' - was: 'foo'
 [json.exception.parse_error.108] parse error: escape character '~' must be followed with '0' or '1'
 [json.exception.parse_error.108] parse error: escape character '~' must be followed with '0' or '1'
-

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/json_pointer/operator_eq/index.html b/api/json_pointer/operator_eq/index.html index 000a20898..e64212b9e 100644 --- a/api/json_pointer/operator_eq/index.html +++ b/api/json_pointer/operator_eq/index.html @@ -82,4 +82,4 @@ "" == "": true "/foo" == "/foo": true "bar" == "/foo": [json.exception.parse_error.107] parse error at byte 1: JSON pointer must be empty or begin with '/' - was: 'bar' -

Version history

  1. Added in version 2.1.0. Added C++20 member functions in version 3.11.2.
  2. Added for backward compatibility and deprecated in version 3.11.2.
\ No newline at end of file +

Version history

  1. Added in version 2.1.0. Added C++20 member functions in version 3.11.2.
  2. Added for backward compatibility and deprecated in version 3.11.2.
\ No newline at end of file diff --git a/api/json_pointer/operator_ne/index.html b/api/json_pointer/operator_ne/index.html index c44f32b52..e1d36e715 100644 --- a/api/json_pointer/operator_ne/index.html +++ b/api/json_pointer/operator_ne/index.html @@ -72,4 +72,4 @@ "" != "": false "/foo" != "/foo": false "bar" != "/foo": [json.exception.parse_error.107] parse error at byte 1: JSON pointer must be empty or begin with '/' - was: 'bar' -

Version history

  1. Added in version 2.1.0.
  2. Added for backward compatibility and deprecated in version 3.11.2.
\ No newline at end of file +

Version history

  1. Added in version 2.1.0.
  2. Added for backward compatibility and deprecated in version 3.11.2.
\ No newline at end of file diff --git a/api/json_pointer/operator_slash/index.html b/api/json_pointer/operator_slash/index.html index a3bc066c3..d28044f90 100644 --- a/api/json_pointer/operator_slash/index.html +++ b/api/json_pointer/operator_slash/index.html @@ -28,4 +28,4 @@

Output:

"/foo/bar/baz"
 "/foo/fob"
 "/foo/42"
-

Version history

  1. Added in version 3.6.0.
  2. Added in version 3.6.0. Changed type of token to string_t in version 3.11.0.
  3. Added in version 3.6.0.
\ No newline at end of file +

Version history

  1. Added in version 3.6.0.
  2. Added in version 3.6.0. Changed type of token to string_t in version 3.11.0.
  3. Added in version 3.6.0.
\ No newline at end of file diff --git a/api/json_pointer/operator_slasheq/index.html b/api/json_pointer/operator_slasheq/index.html index bd5afabd2..6ae11aabb 100644 --- a/api/json_pointer/operator_slasheq/index.html +++ b/api/json_pointer/operator_slasheq/index.html @@ -33,4 +33,4 @@ "/foo/bar/baz" "/foo/bar/baz/fob" "/foo/bar/baz/fob/42" -

Version history

  1. Added in version 3.6.0.
  2. Added in version 3.6.0. Changed type of token to string_t in version 3.11.0.
  3. Added in version 3.6.0.
\ No newline at end of file +

Version history

  1. Added in version 3.6.0.
  2. Added in version 3.6.0. Changed type of token to string_t in version 3.11.0.
  3. Added in version 3.6.0.
\ No newline at end of file diff --git a/api/json_pointer/operator_string_t/index.html b/api/json_pointer/operator_string_t/index.html index b6819da51..f258a143b 100644 --- a/api/json_pointer/operator_string_t/index.html +++ b/api/json_pointer/operator_string_t/index.html @@ -24,4 +24,4 @@ }

Output:

/foo/0
 /a~1b
-

See also

Version history

\ No newline at end of file +

See also

Version history

\ No newline at end of file diff --git a/api/json_pointer/parent_pointer/index.html b/api/json_pointer/parent_pointer/index.html index a554612c7..4c8a63e33 100644 --- a/api/json_pointer/parent_pointer/index.html +++ b/api/json_pointer/parent_pointer/index.html @@ -20,4 +20,4 @@

Output:

parent of "" is ""
 parent of "/foo" is ""
 parent of "/foo/0" is "/foo"
-

Version history

Added in version 3.6.0.

\ No newline at end of file +

Version history

Added in version 3.6.0.

\ No newline at end of file diff --git a/api/json_pointer/pop_back/index.html b/api/json_pointer/pop_back/index.html index 476dd3cbc..09c10f5f7 100644 --- a/api/json_pointer/pop_back/index.html +++ b/api/json_pointer/pop_back/index.html @@ -24,4 +24,4 @@ "/foo/bar" "/foo" "" -

Version history

Added in version 3.6.0.

\ No newline at end of file +

Version history

Added in version 3.6.0.

\ No newline at end of file diff --git a/api/json_pointer/push_back/index.html b/api/json_pointer/push_back/index.html index 66204f133..79081b1d9 100644 --- a/api/json_pointer/push_back/index.html +++ b/api/json_pointer/push_back/index.html @@ -26,4 +26,4 @@ "/foo" "/foo/0" "/foo/0/bar" -

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/json_pointer/string_t/index.html b/api/json_pointer/string_t/index.html index 8d580cb7e..67ddc6d30 100644 --- a/api/json_pointer/string_t/index.html +++ b/api/json_pointer/string_t/index.html @@ -14,4 +14,4 @@ }

Output:

This is a string.
 true
-

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/json_pointer/to_string/index.html b/api/json_pointer/to_string/index.html index ee1caef37..d25619b19 100644 --- a/api/json_pointer/to_string/index.html +++ b/api/json_pointer/to_string/index.html @@ -46,4 +46,4 @@ "/k"l" "/ " "/m~0n" -

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/json_sax/binary/index.html b/api/json_sax/binary/index.html index 7c2fd0e42..396fc64d6 100644 --- a/api/json_sax/binary/index.html +++ b/api/json_sax/binary/index.html @@ -116,4 +116,4 @@

Output:

binary(val=[...])
 
 result: true
-

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/json_sax/boolean/index.html b/api/json_sax/boolean/index.html index d76da9940..ef239e9c0 100644 --- a/api/json_sax/boolean/index.html +++ b/api/json_sax/boolean/index.html @@ -167,4 +167,4 @@ ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input) result: false -

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/json_sax/end_array/index.html b/api/json_sax/end_array/index.html index 7e7f610da..89e7e9afd 100644 --- a/api/json_sax/end_array/index.html +++ b/api/json_sax/end_array/index.html @@ -167,4 +167,4 @@ ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input) result: false -

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/json_sax/end_object/index.html b/api/json_sax/end_object/index.html index 3f202f0b7..a044c3374 100644 --- a/api/json_sax/end_object/index.html +++ b/api/json_sax/end_object/index.html @@ -167,4 +167,4 @@ ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input) result: false -

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/json_sax/index.html b/api/json_sax/index.html index 5ba3a6949..039273dfc 100644 --- a/api/json_sax/index.html +++ b/api/json_sax/index.html @@ -1,3 +1,3 @@ Overview - JSON for Modern C++
Skip to content

nlohmann::json_sax

template<typename BasicJsonType>
 struct json_sax;
-

This class describes the SAX interface used by sax_parse. Each function is called in different situations while the input is parsed. The boolean return value informs the parser whether to continue processing the input.

Template parameters

BasicJsonType
a specialization of basic_json

Member types

Member functions

  • binary (virtual) - a binary value was read
  • boolean (virtual) - a boolean value was read
  • end_array (virtual) - the end of an array was read
  • end_object (virtual) - the end of an object was read
  • key (virtual) - an object key was read
  • null (virtual) - a null value was read
  • number_float (virtual) - a floating-point number was read
  • number_integer (virtual) - an integer number was read
  • number_unsigned (virtual) - an unsigned integer number was read
  • parse_error (virtual) - a parse error occurred
  • start_array (virtual) - the beginning of an array was read
  • start_object (virtual) - the beginning of an object was read
  • string (virtual) - a string value was read

Version history

  • Added in version 3.2.0.
  • Support for binary values (binary_t, binary) added in version 3.8.0.
\ No newline at end of file +

This class describes the SAX interface used by sax_parse. Each function is called in different situations while the input is parsed. The boolean return value informs the parser whether to continue processing the input.

Template parameters

BasicJsonType
a specialization of basic_json

Member types

Member functions

Version history

\ No newline at end of file diff --git a/api/json_sax/key/index.html b/api/json_sax/key/index.html index 717c3e47b..128ef86fd 100644 --- a/api/json_sax/key/index.html +++ b/api/json_sax/key/index.html @@ -167,4 +167,4 @@ ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input) result: false -

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/json_sax/null/index.html b/api/json_sax/null/index.html index 210e69afb..12da8c9a8 100644 --- a/api/json_sax/null/index.html +++ b/api/json_sax/null/index.html @@ -167,4 +167,4 @@ ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input) result: false -

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/json_sax/number_float/index.html b/api/json_sax/number_float/index.html index a928f81c8..c561ed0d8 100644 --- a/api/json_sax/number_float/index.html +++ b/api/json_sax/number_float/index.html @@ -167,4 +167,4 @@ ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input) result: false -

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/json_sax/number_integer/index.html b/api/json_sax/number_integer/index.html index 0f64201ec..9a1dfc568 100644 --- a/api/json_sax/number_integer/index.html +++ b/api/json_sax/number_integer/index.html @@ -167,4 +167,4 @@ ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input) result: false -

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/json_sax/number_unsigned/index.html b/api/json_sax/number_unsigned/index.html index 10a8e6ecd..ae20d2d3a 100644 --- a/api/json_sax/number_unsigned/index.html +++ b/api/json_sax/number_unsigned/index.html @@ -167,4 +167,4 @@ ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input) result: false -

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/json_sax/parse_error/index.html b/api/json_sax/parse_error/index.html index 6cf091834..76cd285b3 100644 --- a/api/json_sax/parse_error/index.html +++ b/api/json_sax/parse_error/index.html @@ -169,4 +169,4 @@ ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input) result: false -

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/json_sax/start_array/index.html b/api/json_sax/start_array/index.html index 332dd5931..bf6874063 100644 --- a/api/json_sax/start_array/index.html +++ b/api/json_sax/start_array/index.html @@ -167,4 +167,4 @@ ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input) result: false -

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/json_sax/start_object/index.html b/api/json_sax/start_object/index.html index f44d43091..3693d7622 100644 --- a/api/json_sax/start_object/index.html +++ b/api/json_sax/start_object/index.html @@ -167,4 +167,4 @@ ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input) result: false -

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/json_sax/string/index.html b/api/json_sax/string/index.html index 37d6ad8ab..9f11ef0f8 100644 --- a/api/json_sax/string/index.html +++ b/api/json_sax/string/index.html @@ -167,4 +167,4 @@ ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input) result: false -

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/macros/index.html b/api/macros/index.html index 3cbd14fbd..c9b0494cb 100644 --- a/api/macros/index.html +++ b/api/macros/index.html @@ -1 +1 @@ - Overview - JSON for Modern C++
Skip to content

Macros

Some aspects of the library can be configured by defining preprocessor macros before including the json.hpp header. See also the macro overview page.

Runtime assertions

Exceptions

Language support

Library version

Library namespace

Type conversions

Comparison behavior

Serialization/deserialization macros

Enums

Classes and structs

\ No newline at end of file + Overview - JSON for Modern C++
Skip to content

Macros

Some aspects of the library can be configured by defining preprocessor macros before including the json.hpp header. See also the macro overview page.

Runtime assertions

Exceptions

Language support

Library version

Library namespace

Type conversions

Comparison behavior

Serialization/deserialization macros

Enums

Classes and structs

\ No newline at end of file diff --git a/api/macros/json_assert/index.html b/api/macros/json_assert/index.html index cfdbf1850..30d581e8a 100644 --- a/api/macros/json_assert/index.html +++ b/api/macros/json_assert/index.html @@ -24,4 +24,4 @@ auto v = j["missing"]; }

Output:

assertion error in operator[]
-

See also

Version history

\ No newline at end of file +

See also

Version history

\ No newline at end of file diff --git a/api/macros/json_diagnostic_positions/index.html b/api/macros/json_diagnostic_positions/index.html index 3eabee54e..bae6e215f 100644 --- a/api/macros/json_diagnostic_positions/index.html +++ b/api/macros/json_diagnostic_positions/index.html @@ -165,4 +165,4 @@ Parsed string: }

Output:

[json.exception.type_error.302] (/address/housenumber) (bytes 92-95) type must be number, but is string
 
The output shows the exception with diagnostic path info and start/end positions.
-

See also

Version history

\ No newline at end of file +

See also

Version history

\ No newline at end of file diff --git a/api/macros/json_diagnostics/index.html b/api/macros/json_diagnostics/index.html index 161114621..de6937368 100644 --- a/api/macros/json_diagnostics/index.html +++ b/api/macros/json_diagnostics/index.html @@ -75,4 +75,4 @@ } }

Output:

[json.exception.type_error.302] (bytes 92-95) type must be number, but is string
-
The output shows the exception with start/end positions only.

See also

Version history

\ No newline at end of file + The output shows the exception with start/end positions only.

See also

Version history

\ No newline at end of file diff --git a/api/macros/json_disable_enum_serialization/index.html b/api/macros/json_disable_enum_serialization/index.html index 52ee4e71a..12b6901b0 100644 --- a/api/macros/json_disable_enum_serialization/index.html +++ b/api/macros/json_disable_enum_serialization/index.html @@ -89,4 +89,4 @@ // uses user-defined from_json function Choice ch = j.template get<Choice>(); } -

See also

Version history

\ No newline at end of file +

See also

Version history

\ No newline at end of file diff --git a/api/macros/json_has_cpp_11/index.html b/api/macros/json_has_cpp_11/index.html index 9b0330425..7f334619b 100644 --- a/api/macros/json_has_cpp_11/index.html +++ b/api/macros/json_has_cpp_11/index.html @@ -6,4 +6,4 @@ #include <nlohmann/json.hpp> ... -

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/macros/json_has_filesystem/index.html b/api/macros/json_has_filesystem/index.html index 5576dec06..36eb62944 100644 --- a/api/macros/json_has_filesystem/index.html +++ b/api/macros/json_has_filesystem/index.html @@ -4,4 +4,4 @@ #include <nlohmann/json.hpp> ... -

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/macros/json_has_ranges/index.html b/api/macros/json_has_ranges/index.html index 919df2724..21e590c4e 100644 --- a/api/macros/json_has_ranges/index.html +++ b/api/macros/json_has_ranges/index.html @@ -3,4 +3,4 @@ #include <nlohmann/json.hpp> ... -

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/macros/json_has_static_rtti/index.html b/api/macros/json_has_static_rtti/index.html index 5a0a8b0ae..24082653c 100644 --- a/api/macros/json_has_static_rtti/index.html +++ b/api/macros/json_has_static_rtti/index.html @@ -3,4 +3,4 @@ #include <nlohmann/json.hpp> ... -

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/macros/json_has_three_way_comparison/index.html b/api/macros/json_has_three_way_comparison/index.html index 81ddc4443..7253dfb8b 100644 --- a/api/macros/json_has_three_way_comparison/index.html +++ b/api/macros/json_has_three_way_comparison/index.html @@ -3,4 +3,4 @@ #include <nlohmann/json.hpp> ... -

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/macros/json_no_io/index.html b/api/macros/json_no_io/index.html index 2f897362d..aba0b1d51 100644 --- a/api/macros/json_no_io/index.html +++ b/api/macros/json_no_io/index.html @@ -4,4 +4,4 @@ #include <nlohmann/json.hpp> ... -

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/macros/json_noexception/index.html b/api/macros/json_noexception/index.html index b510d3938..946605e44 100644 --- a/api/macros/json_noexception/index.html +++ b/api/macros/json_noexception/index.html @@ -4,4 +4,4 @@ #include <nlohmann/json.hpp> ... -

See also

Version history

Added in version 2.1.0.

\ No newline at end of file +

See also

Version history

Added in version 2.1.0.

\ No newline at end of file diff --git a/api/macros/json_skip_library_version_check/index.html b/api/macros/json_skip_library_version_check/index.html index d0423d542..1907f03a6 100644 --- a/api/macros/json_skip_library_version_check/index.html +++ b/api/macros/json_skip_library_version_check/index.html @@ -1,4 +1,4 @@ JSON_SKIP_LIBRARY_VERSION_CHECK - JSON for Modern C++
Skip to content

JSON_SKIP_LIBRARY_VERSION_CHECK

#define JSON_SKIP_LIBRARY_VERSION_CHECK
 

When defined, the library will not create a compiler warning when a different version of the library was already included.

Default definition

By default, the macro is not defined.

#undef JSON_SKIP_LIBRARY_VERSION_CHECK
 

Notes

ABI compatibility

Mixing different library versions in the same code can be a problem as the different versions may not be ABI compatible.

Examples

Example

The following warning will be shown in case a different version of the library was already included:

Already included a different version of the library!
-

Version history

Added in version 3.11.0.

\ No newline at end of file +

Version history

Added in version 3.11.0.

\ No newline at end of file diff --git a/api/macros/json_skip_unsupported_compiler_check/index.html b/api/macros/json_skip_unsupported_compiler_check/index.html index 13ec90134..1ace6bf84 100644 --- a/api/macros/json_skip_unsupported_compiler_check/index.html +++ b/api/macros/json_skip_unsupported_compiler_check/index.html @@ -4,4 +4,4 @@ #include <nlohmann/json.hpp> ... -

Version history

Added in version 3.2.0.

\ No newline at end of file +

Version history

Added in version 3.2.0.

\ No newline at end of file diff --git a/api/macros/json_throw_user/index.html b/api/macros/json_throw_user/index.html index 3caf90859..748e03784 100644 --- a/api/macros/json_throw_user/index.html +++ b/api/macros/json_throw_user/index.html @@ -21,4 +21,4 @@ std::abort();} #include <nlohmann/json.hpp> -

See also

Version history

\ No newline at end of file +

See also

Version history

\ No newline at end of file diff --git a/api/macros/json_use_global_udls/index.html b/api/macros/json_use_global_udls/index.html index 5b0eb3219..894a6c062 100644 --- a/api/macros/json_use_global_udls/index.html +++ b/api/macros/json_use_global_udls/index.html @@ -29,4 +29,4 @@ std::cout << j << std::endl; }

Output:

42
-

See also

Version history

\ No newline at end of file +

See also

Version history

\ No newline at end of file diff --git a/api/macros/json_use_implicit_conversions/index.html b/api/macros/json_use_implicit_conversions/index.html index a901bf9f8..6900d8c7b 100644 --- a/api/macros/json_use_implicit_conversions/index.html +++ b/api/macros/json_use_implicit_conversions/index.html @@ -4,4 +4,4 @@ std::string s = j;

When JSON_USE_IMPLICIT_CONVERSIONS is defined to 0, the code above does no longer compile. Instead, it must be written like this:

json j = "Hello, world!";
 auto s = j.template get<std::string>();
-

See also

Version history

\ No newline at end of file +

See also

Version history

\ No newline at end of file diff --git a/api/macros/json_use_legacy_discarded_value_comparison/index.html b/api/macros/json_use_legacy_discarded_value_comparison/index.html index a08108558..3b1f91d8e 100644 --- a/api/macros/json_use_legacy_discarded_value_comparison/index.html +++ b/api/macros/json_use_legacy_discarded_value_comparison/index.html @@ -4,4 +4,4 @@ #include <nlohmann/json.hpp> ... -

See also

Version history

\ No newline at end of file +

See also

Version history

\ No newline at end of file diff --git a/api/macros/nlohmann_define_derived_type/index.html b/api/macros/nlohmann_define_derived_type/index.html index 2c605bd13..7f6b84c77 100644 --- a/api/macros/nlohmann_define_derived_type/index.html +++ b/api/macros/nlohmann_define_derived_type/index.html @@ -86,4 +86,4 @@ "Ba": 23, "Bb": 42 } -

Notes:

See also

Version history

  1. Added in version 3.11.x.
  2. Added in version 3.11.x.
  3. Added in version 3.11.x.
  4. Added in version 3.11.x.
  5. Added in version 3.11.x.
  6. Added in version 3.11.x.
\ No newline at end of file +

Notes:

See also

Version history

  1. Added in version 3.11.x.
  2. Added in version 3.11.x.
  3. Added in version 3.11.x.
  4. Added in version 3.11.x.
  5. Added in version 3.11.x.
  6. Added in version 3.11.x.
\ No newline at end of file diff --git a/api/macros/nlohmann_define_type_intrusive/index.html b/api/macros/nlohmann_define_type_intrusive/index.html index d61231a25..a0b9f3003 100644 --- a/api/macros/nlohmann_define_type_intrusive/index.html +++ b/api/macros/nlohmann_define_type_intrusive/index.html @@ -291,4 +291,4 @@ json j = p; std::cout << "serialization: " << j << std::endl; } -

See also

Version history

  1. Added in version 3.9.0.
  2. Added in version 3.11.0.
  3. Added in version 3.11.3.
\ No newline at end of file +

See also

Version history

  1. Added in version 3.9.0.
  2. Added in version 3.11.0.
  3. Added in version 3.11.3.
\ No newline at end of file diff --git a/api/macros/nlohmann_define_type_non_intrusive/index.html b/api/macros/nlohmann_define_type_non_intrusive/index.html index 29a66befa..31742dbdd 100644 --- a/api/macros/nlohmann_define_type_non_intrusive/index.html +++ b/api/macros/nlohmann_define_type_non_intrusive/index.html @@ -259,4 +259,4 @@ json j = p; std::cout << "serialization: " << j << std::endl; } -

See also

Version history

  1. Added in version 3.9.0.
  2. Added in version 3.11.0.
  3. Added in version 3.11.3.
\ No newline at end of file +

See also

Version history

  1. Added in version 3.9.0.
  2. Added in version 3.11.0.
  3. Added in version 3.11.3.
\ No newline at end of file diff --git a/api/macros/nlohmann_json_namespace/index.html b/api/macros/nlohmann_json_namespace/index.html index 152e5ebcc..9ec6335ae 100644 --- a/api/macros/nlohmann_json_namespace/index.html +++ b/api/macros/nlohmann_json_namespace/index.html @@ -14,4 +14,4 @@ std::cout << QUOTE(NLOHMANN_JSON_NAMESPACE) << std::endl; }

Output:

nlohmann::json_abi_v3_11_3
-

See also

Version history

\ No newline at end of file +

See also

Version history

\ No newline at end of file diff --git a/api/macros/nlohmann_json_namespace_begin/index.html b/api/macros/nlohmann_json_namespace_begin/index.html index a1890647c..2519ed118 100644 --- a/api/macros/nlohmann_json_namespace_begin/index.html +++ b/api/macros/nlohmann_json_namespace_begin/index.html @@ -40,4 +40,4 @@ std::cout << j << std::endl; }

Output:

[1,null]
-

See also

Version history

\ No newline at end of file +

See also

Version history

\ No newline at end of file diff --git a/api/macros/nlohmann_json_namespace_no_version/index.html b/api/macros/nlohmann_json_namespace_no_version/index.html index b160c58e6..b703b8302 100644 --- a/api/macros/nlohmann_json_namespace_no_version/index.html +++ b/api/macros/nlohmann_json_namespace_no_version/index.html @@ -14,4 +14,4 @@ std::cout << QUOTE(NLOHMANN_JSON_NAMESPACE) << std::endl; }

Output:

nlohmann::json_abi
-

See also

Version history

\ No newline at end of file +

See also

Version history

\ No newline at end of file diff --git a/api/macros/nlohmann_json_serialize_enum/index.html b/api/macros/nlohmann_json_serialize_enum/index.html index 6e43b0ce3..a4705420a 100644 --- a/api/macros/nlohmann_json_serialize_enum/index.html +++ b/api/macros/nlohmann_json_serialize_enum/index.html @@ -101,4 +101,4 @@

Output:

0 -> "red"
 "rot" -> 0
 "red" -> 0
-

See also

Version history

Added in version 3.4.0.

\ No newline at end of file +

See also

Version history

Added in version 3.4.0.

\ No newline at end of file diff --git a/api/macros/nlohmann_json_version_major/index.html b/api/macros/nlohmann_json_version_major/index.html index b661f6c3d..606ac7a76 100644 --- a/api/macros/nlohmann_json_version_major/index.html +++ b/api/macros/nlohmann_json_version_major/index.html @@ -14,4 +14,4 @@ << NLOHMANN_JSON_VERSION_PATCH << std::endl; }

Output:

JSON for Modern C++ version 3.11.3
-

See also

Version history

\ No newline at end of file +

See also

Version history

\ No newline at end of file diff --git a/api/operator_gtgt/index.html b/api/operator_gtgt/index.html index 1f8bc4149..2728b9654 100644 --- a/api/operator_gtgt/index.html +++ b/api/operator_gtgt/index.html @@ -38,4 +38,4 @@ "number": 23, "string": "Hello, world!" } -

See also

Version history

\ No newline at end of file +

See also

Version history

\ No newline at end of file diff --git a/api/operator_literal_json/index.html b/api/operator_literal_json/index.html index 40b20dcd0..cee0a9915 100644 --- a/api/operator_literal_json/index.html +++ b/api/operator_literal_json/index.html @@ -21,4 +21,4 @@ "answer": 42, "hello": "world" } -

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/operator_literal_json_pointer/index.html b/api/operator_literal_json_pointer/index.html index 62e886a45..95a0e9a05 100644 --- a/api/operator_literal_json_pointer/index.html +++ b/api/operator_literal_json_pointer/index.html @@ -19,4 +19,4 @@ std::cout << std::setw(2) << val << '\n'; }

Output:

"world"
-

See also

Version history

\ No newline at end of file +

See also

Version history

\ No newline at end of file diff --git a/api/operator_ltlt/index.html b/api/operator_ltlt/index.html index 14c67f6ad..dc5367fd6 100644 --- a/api/operator_ltlt/index.html +++ b/api/operator_ltlt/index.html @@ -57,4 +57,4 @@ std::cout << ptr << std::endl; }

Output:

/foo/bar/baz
-

Version history

  1. Added in version 1.0.0. Added support for indentation character and deprecated std::ostream& operator>>(const basic_json& j, std::ostream& o) in version 3.0.0.
  2. Added in version 3.11.0.
\ No newline at end of file +

Version history

  1. Added in version 1.0.0. Added support for indentation character and deprecated std::ostream& operator>>(const basic_json& j, std::ostream& o) in version 3.0.0.
  2. Added in version 3.11.0.
\ No newline at end of file diff --git a/api/ordered_json/index.html b/api/ordered_json/index.html index 7d0e432cf..b18ee24c4 100644 --- a/api/ordered_json/index.html +++ b/api/ordered_json/index.html @@ -18,4 +18,4 @@ "two": 2, "three": 3 } -

See also

Version history

Since version 3.9.0.

\ No newline at end of file +

See also

Version history

Since version 3.9.0.

\ No newline at end of file diff --git a/api/ordered_map/index.html b/api/ordered_map/index.html index 955870f33..1e958f769 100644 --- a/api/ordered_map/index.html +++ b/api/ordered_map/index.html @@ -51,4 +51,4 @@ m_std = { one:eins three:drei two:zwei } m_ordered = { two:zwei three:drei one:eins } m_std = { one:eins three:drei two:zwei } -

See also

Version history

\ No newline at end of file +

See also

Version history

\ No newline at end of file diff --git a/community/code_of_conduct/index.html b/community/code_of_conduct/index.html index 2cf30ce0d..fd9eacb79 100644 --- a/community/code_of_conduct/index.html +++ b/community/code_of_conduct/index.html @@ -1 +1 @@ - Code of Conduct - JSON for Modern C++
Skip to content

Contributor Covenant Code of Conduct

Our Pledge

We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation.

We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.

Our Standards

Examples of behavior that contributes to a positive environment for our community include:

  • Demonstrating empathy and kindness toward other people
  • Being respectful of differing opinions, viewpoints, and experiences
  • Giving and gracefully accepting constructive feedback
  • Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience
  • Focusing on what is best not just for us as individuals, but for the overall community

Examples of unacceptable behavior include:

  • The use of sexualized language or imagery, and sexual attention or advances of any kind
  • Trolling, insulting or derogatory comments, and personal or political attacks
  • Public or private harassment
  • Publishing others' private information, such as a physical or email address, without their explicit permission
  • Other conduct which could reasonably be considered inappropriate in a professional setting

Enforcement Responsibilities

Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful.

Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate.

Scope

This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official email address, posting via an official social media account, or acting as an appointed representative at an online or offline event.

Enforcement

Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at mail@nlohmann.me. All complaints will be reviewed and investigated promptly and fairly.

All community leaders are obligated to respect the privacy and security of the reporter of any incident.

Enforcement Guidelines

Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct:

1. Correction

Community Impact: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.

Consequence: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested.

2. Warning

Community Impact: A violation through a single incident or series of actions.

Consequence: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban.

3. Temporary Ban

Community Impact: A serious violation of community standards, including sustained inappropriate behavior.

Consequence: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban.

4. Permanent Ban

Community Impact: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.

Consequence: A permanent ban from any sort of public interaction within the community.

Attribution

This Code of Conduct is adapted from the Contributor Covenant, version 2.1, available at https://www.contributor-covenant.org/version/2/1/code_of_conduct.html.

Community Impact Guidelines were inspired by Mozilla's code of conduct enforcement ladder.

For answers to common questions about this code of conduct, see the FAQ at https://www.contributor-covenant.org/faq. Translations are available at https://www.contributor-covenant.org/translations.

\ No newline at end of file + Code of Conduct - JSON for Modern C++
Skip to content

Contributor Covenant Code of Conduct

Our Pledge

We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation.

We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.

Our Standards

Examples of behavior that contributes to a positive environment for our community include:

  • Demonstrating empathy and kindness toward other people
  • Being respectful of differing opinions, viewpoints, and experiences
  • Giving and gracefully accepting constructive feedback
  • Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience
  • Focusing on what is best not just for us as individuals, but for the overall community

Examples of unacceptable behavior include:

  • The use of sexualized language or imagery, and sexual attention or advances of any kind
  • Trolling, insulting or derogatory comments, and personal or political attacks
  • Public or private harassment
  • Publishing others' private information, such as a physical or email address, without their explicit permission
  • Other conduct which could reasonably be considered inappropriate in a professional setting

Enforcement Responsibilities

Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful.

Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate.

Scope

This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official email address, posting via an official social media account, or acting as an appointed representative at an online or offline event.

Enforcement

Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at mail@nlohmann.me. All complaints will be reviewed and investigated promptly and fairly.

All community leaders are obligated to respect the privacy and security of the reporter of any incident.

Enforcement Guidelines

Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct:

1. Correction

Community Impact: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.

Consequence: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested.

2. Warning

Community Impact: A violation through a single incident or series of actions.

Consequence: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban.

3. Temporary Ban

Community Impact: A serious violation of community standards, including sustained inappropriate behavior.

Consequence: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban.

4. Permanent Ban

Community Impact: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.

Consequence: A permanent ban from any sort of public interaction within the community.

Attribution

This Code of Conduct is adapted from the Contributor Covenant, version 2.1, available at https://www.contributor-covenant.org/version/2/1/code_of_conduct.html.

Community Impact Guidelines were inspired by Mozilla's code of conduct enforcement ladder.

For answers to common questions about this code of conduct, see the FAQ at https://www.contributor-covenant.org/faq. Translations are available at https://www.contributor-covenant.org/translations.

\ No newline at end of file diff --git a/community/contribution_guidelines/index.html b/community/contribution_guidelines/index.html index 342354493..099e4f154 100644 --- a/community/contribution_guidelines/index.html +++ b/community/contribution_guidelines/index.html @@ -5,4 +5,4 @@ $ ctest --test-dir

Add tests

The tests are located in tests/src/unit-*.cpp and contain doctest assertions like CHECK. The tests are structured along the features of the library or the nature of the tests. Usually, it should be clear from the context which existing file needs to be extended, and only very few cases require creating new test files.

When fixing a bug, edit unit-regression2.cpp and add a section referencing the fixed issue.

Exceptions

When you test exceptions, please use CHECK_THROWS_WITH_AS which also takes the what() argument of the thrown exception into account.

Coverage

If test coverage decreases, an automatic warning comment will be posted on the pull request. You can access a code coverage report as artifact to the “Ubuntu” workflow.

Update the documentation

The main documentation of the library is generated from the files docs/mkdocs/docs. This folder contains dedicated pages for certain features, a list of all exceptions, and an extensive API documentation with details on every public API function.

Build the documentation locally using:

make install_venv -C docs/mkdocs
 make serve -C docs/mkdocs
 

The documentation will then available at http://127.0.0.1:8000/. See the documentation of mkdocs and Material for MkDocs for more information.

Amalgamate the source code

The single-header files single_include/nlohmann/json.hpp and single_include/nlohmann/json_fwd.hpp are generated from the source files in the include/nlohmann directory. Do not edit the files directly; instead, modify the include/nlohmann sources and regenerate the files by executing:

make amalgamate
-

Please don't...

Certain contributions are not helpful.

Break the public API

We take pride in the library being used by numerous customers across various industries. They all rely on the guarantees provided by semantic versioning. Please do not change the library such that the public API of the 3.x.y version is broken. This includes:

Although these guidelines may seem restrictive, they are essential for maintaining the library’s utility.

Breaking changes may be introduced when they are guarded with a feature macro such as JSON_USE_IMPLICIT_CONVERSIONS which allows to selectively change the behavior of the library. In next steps, the current behavior can then be deprecated. Using feature macros then allows users to test their code against the library in the next major release.

Break C++11 language conformance

This library is designed to work with C++11 and later. This means that any supported C++11 compiler should compile the library without problems. Some compilers like GCC 4.7 (and earlier), Clang 3.3 (and earlier), or Microsoft Visual Studio 13.0 and earlier are known not to work due to missing or incomplete C++11 support.

Please do not add features that do not work with the mentioned supported compilers. Please guard features from C++14 and later against the respective JSON_HAS_CPP_14 macros.

Break JSON conformance

Please refrain from proposing changes that would break JSON conformance. If you propose a conformant extension of JSON to be supported by the library, please motivate this extension.

Wanted

The following areas really need contribution and are always welcomed:

We look forward to your contributions and collaboration to enhance the library!

\ No newline at end of file +

Please don't...

Certain contributions are not helpful.

Break the public API

We take pride in the library being used by numerous customers across various industries. They all rely on the guarantees provided by semantic versioning. Please do not change the library such that the public API of the 3.x.y version is broken. This includes:

Although these guidelines may seem restrictive, they are essential for maintaining the library’s utility.

Breaking changes may be introduced when they are guarded with a feature macro such as JSON_USE_IMPLICIT_CONVERSIONS which allows to selectively change the behavior of the library. In next steps, the current behavior can then be deprecated. Using feature macros then allows users to test their code against the library in the next major release.

Break C++11 language conformance

This library is designed to work with C++11 and later. This means that any supported C++11 compiler should compile the library without problems. Some compilers like GCC 4.7 (and earlier), Clang 3.3 (and earlier), or Microsoft Visual Studio 13.0 and earlier are known not to work due to missing or incomplete C++11 support.

Please do not add features that do not work with the mentioned supported compilers. Please guard features from C++14 and later against the respective JSON_HAS_CPP_14 macros.

Break JSON conformance

Please refrain from proposing changes that would break JSON conformance. If you propose a conformant extension of JSON to be supported by the library, please motivate this extension.

Wanted

The following areas really need contribution and are always welcomed:

We look forward to your contributions and collaboration to enhance the library!

\ No newline at end of file diff --git a/community/governance/index.html b/community/governance/index.html index feb9b902c..983d8792a 100644 --- a/community/governance/index.html +++ b/community/governance/index.html @@ -1 +1 @@ - Governance - JSON for Modern C++
Skip to content

Governance

The governance model for the JSON for Modern C++ project is a Benevolent Dictator for Life (BDFL) structure. As the sole maintainer, Niels Lohmann is responsible for all key aspects of the project. The project governance may evolve as the project grows, but any changes will be documented here and communicated to contributors.

Overview

This project is led by a benevolent dictator, Niels Lohmann, and managed by the community. That is, the community actively contributes to the day-to-day maintenance of the project, but the general strategic line is drawn by the benevolent dictator. In case of disagreement, they have the last word. It is the benevolent dictator’s job to resolve disputes within the community and to ensure that the project is able to progress in a coordinated way. In turn, it is the community’s job to guide the decisions of the benevolent dictator through active engagement and contribution.

Roles and responsibilities

Benevolent dictator (project lead)

Typically, the benevolent dictator, or project lead, is self-appointed. However, because the community always has the ability to fork, this person is fully answerable to the community. The project lead’s role is a difficult one: they set the strategic objectives of the project and communicate these clearly to the community. They also have to understand the community as a whole and strive to satisfy as many conflicting needs as possible, while ensuring that the project survives in the long term.

In many ways, the role of the benevolent dictator is less about dictatorship and more about diplomacy. The key is to ensure that, as the project expands, the right people are given influence over it and the community rallies behind the vision of the project lead. The lead’s job is then to ensure that the committers (see below) make the right decisions on behalf of the project. Generally speaking, as long as the committers are aligned with the project’s strategy, the project lead will allow them to proceed as they desire.

Committers

Committers are contributors who have made several valuable contributions to the project and are now relied upon to both write code directly to the repository and screen the contributions of others. In many cases they are programmers but it is also possible that they contribute in a different role. Typically, a committer will focus on a specific aspect of the project, and will bring a level of expertise and understanding that earns them the respect of the community and the project lead. The role of committer is not an official one, it is simply a position that influential members of the community will find themselves in as the project lead looks to them for guidance and support.

Committers have no authority over the overall direction of the project. However, they do have the ear of the project lead. It is a committer’s job to ensure that the lead is aware of the community’s needs and collective objectives, and to help develop or elicit appropriate contributions to the project. Often, committers are given informal control over their specific areas of responsibility, and are assigned rights to directly modify certain areas of the source code. That is, although committers do not have explicit decision-making authority, they will often find that their actions are synonymous with the decisions made by the lead.

Contributors

Contributors are community members who either have no desire to become committers, or have not yet been given the opportunity by the benevolent dictator. They make valuable contributions, such as those outlined in the list below, but generally do not have the authority to make direct changes to the project code. Contributors engage with the project through communication tools, such as email lists, and via reports and patches attached to issues in the issue tracker, as detailed in our community tools document.

Anyone can become a contributor. There is no expectation of commitment to the project, no specific skill requirements and no selection process. To become a contributor, a community member simply has to perform one or more actions that are beneficial to the project.

Some contributors will already be engaging with the project as users, but will also find themselves doing one or more of the following:

  • supporting new users (current users often provide the most effective new user support)
  • reporting bugs
  • identifying requirements
  • supplying graphics and web design
  • programming
  • assisting with project infrastructure
  • writing documentation
  • fixing bugs
  • adding features

As contributors gain experience and familiarity with the project, they may find that the project lead starts relying on them more and more. When this begins to happen, they gradually adopt the role of committer, as described above.

Users

Users are community members who have a need for the project. They are the most important members of the community: without them, the project would have no purpose. Anyone can be a user; there are no specific requirements.

Users should be encouraged to participate in the life of the project and the community as much as possible. User contributions enable the project team to ensure that they are satisfying the needs of those users. Common user activities include (but are not limited to):

  • evangelising about the project
  • informing developers of project strengths and weaknesses from a new user’s perspective
  • providing moral support (a ‘thank you’ goes a long way)
  • providing financial support

Users who continue to engage with the project and its community will often find themselves becoming more and more involved. Such users may then go on to become contributors, as described above.

Support

All participants in the community are encouraged to provide support for new users within the project management infrastructure. This support is provided as a way of growing the community. Those seeking support should recognise that all support activity within the project is voluntary and is therefore provided as and when time allows. A user requiring guaranteed response times or results should therefore seek to purchase a support contract from a vendor. (Of course, that vendor should be an active member of the community.) However, for those willing to engage with the project on its own terms, and willing to help support other users, the community support channels are ideal.

Contribution Process

Anyone can contribute to the project, regardless of their skills, as there are many ways to contribute. For instance, a contributor might be active on the project mailing list and issue tracker, or might supply patches. The various ways of contributing are described in more detail in our roles in open source document.

The developer mailing list is the most appropriate place for a contributor to ask for help when making their first contribution.

Decision-Making Process

The benevolent dictatorship model does not need a formal conflict resolution process, since the project lead’s word is final. If the community chooses to question the wisdom of the actions of a committer, the project lead can review their decisions by checking the email archives, and either uphold or reverse them.


\ No newline at end of file + Governance - JSON for Modern C++
Skip to content

Governance

The governance model for the JSON for Modern C++ project is a Benevolent Dictator for Life (BDFL) structure. As the sole maintainer, Niels Lohmann is responsible for all key aspects of the project. The project governance may evolve as the project grows, but any changes will be documented here and communicated to contributors.

Overview

This project is led by a benevolent dictator, Niels Lohmann, and managed by the community. That is, the community actively contributes to the day-to-day maintenance of the project, but the general strategic line is drawn by the benevolent dictator. In case of disagreement, they have the last word. It is the benevolent dictator’s job to resolve disputes within the community and to ensure that the project is able to progress in a coordinated way. In turn, it is the community’s job to guide the decisions of the benevolent dictator through active engagement and contribution.

Roles and responsibilities

Benevolent dictator (project lead)

Typically, the benevolent dictator, or project lead, is self-appointed. However, because the community always has the ability to fork, this person is fully answerable to the community. The project lead’s role is a difficult one: they set the strategic objectives of the project and communicate these clearly to the community. They also have to understand the community as a whole and strive to satisfy as many conflicting needs as possible, while ensuring that the project survives in the long term.

In many ways, the role of the benevolent dictator is less about dictatorship and more about diplomacy. The key is to ensure that, as the project expands, the right people are given influence over it and the community rallies behind the vision of the project lead. The lead’s job is then to ensure that the committers (see below) make the right decisions on behalf of the project. Generally speaking, as long as the committers are aligned with the project’s strategy, the project lead will allow them to proceed as they desire.

Committers

Committers are contributors who have made several valuable contributions to the project and are now relied upon to both write code directly to the repository and screen the contributions of others. In many cases they are programmers but it is also possible that they contribute in a different role. Typically, a committer will focus on a specific aspect of the project, and will bring a level of expertise and understanding that earns them the respect of the community and the project lead. The role of committer is not an official one, it is simply a position that influential members of the community will find themselves in as the project lead looks to them for guidance and support.

Committers have no authority over the overall direction of the project. However, they do have the ear of the project lead. It is a committer’s job to ensure that the lead is aware of the community’s needs and collective objectives, and to help develop or elicit appropriate contributions to the project. Often, committers are given informal control over their specific areas of responsibility, and are assigned rights to directly modify certain areas of the source code. That is, although committers do not have explicit decision-making authority, they will often find that their actions are synonymous with the decisions made by the lead.

Contributors

Contributors are community members who either have no desire to become committers, or have not yet been given the opportunity by the benevolent dictator. They make valuable contributions, such as those outlined in the list below, but generally do not have the authority to make direct changes to the project code. Contributors engage with the project through communication tools, such as email lists, and via reports and patches attached to issues in the issue tracker, as detailed in our community tools document.

Anyone can become a contributor. There is no expectation of commitment to the project, no specific skill requirements and no selection process. To become a contributor, a community member simply has to perform one or more actions that are beneficial to the project.

Some contributors will already be engaging with the project as users, but will also find themselves doing one or more of the following:

  • supporting new users (current users often provide the most effective new user support)
  • reporting bugs
  • identifying requirements
  • supplying graphics and web design
  • programming
  • assisting with project infrastructure
  • writing documentation
  • fixing bugs
  • adding features

As contributors gain experience and familiarity with the project, they may find that the project lead starts relying on them more and more. When this begins to happen, they gradually adopt the role of committer, as described above.

Users

Users are community members who have a need for the project. They are the most important members of the community: without them, the project would have no purpose. Anyone can be a user; there are no specific requirements.

Users should be encouraged to participate in the life of the project and the community as much as possible. User contributions enable the project team to ensure that they are satisfying the needs of those users. Common user activities include (but are not limited to):

  • evangelising about the project
  • informing developers of project strengths and weaknesses from a new user’s perspective
  • providing moral support (a ‘thank you’ goes a long way)
  • providing financial support

Users who continue to engage with the project and its community will often find themselves becoming more and more involved. Such users may then go on to become contributors, as described above.

Support

All participants in the community are encouraged to provide support for new users within the project management infrastructure. This support is provided as a way of growing the community. Those seeking support should recognise that all support activity within the project is voluntary and is therefore provided as and when time allows. A user requiring guaranteed response times or results should therefore seek to purchase a support contract from a vendor. (Of course, that vendor should be an active member of the community.) However, for those willing to engage with the project on its own terms, and willing to help support other users, the community support channels are ideal.

Contribution Process

Anyone can contribute to the project, regardless of their skills, as there are many ways to contribute. For instance, a contributor might be active on the project mailing list and issue tracker, or might supply patches. The various ways of contributing are described in more detail in our roles in open source document.

The developer mailing list is the most appropriate place for a contributor to ask for help when making their first contribution.

Decision-Making Process

The benevolent dictatorship model does not need a formal conflict resolution process, since the project lead’s word is final. If the community chooses to question the wisdom of the actions of a committer, the project lead can review their decisions by checking the email archives, and either uphold or reverse them.


\ No newline at end of file diff --git a/community/index.html b/community/index.html index 660a40716..8ba6180fe 100644 --- a/community/index.html +++ b/community/index.html @@ -1 +1 @@ - Community - JSON for Modern C++
Skip to content
\ No newline at end of file + Community - JSON for Modern C++
Skip to content
\ No newline at end of file diff --git a/community/quality_assurance/index.html b/community/quality_assurance/index.html index b3171e564..6d1f0b534 100644 --- a/community/quality_assurance/index.html +++ b/community/quality_assurance/index.html @@ -523,4 +523,4 @@ # for the linux (LF) line end style --lineend=linux -
  • The code style is checked with cpplint with 61 enabled rules.

  • Simple integration

    Requirement: Single header

    The library can be used by adding a single header to a C++ project.

    Requirement: CMake as primary development tool

    All library functions are exposed and usable by CMake.

    \ No newline at end of file +
  • The code style is checked with cpplint with 61 enabled rules.

  • Simple integration

    Requirement: Single header

    The library can be used by adding a single header to a C++ project.

    Requirement: CMake as primary development tool

    All library functions are exposed and usable by CMake.

    \ No newline at end of file diff --git a/community/security_policy/index.html b/community/security_policy/index.html index c322bbfde..cd8867599 100644 --- a/community/security_policy/index.html +++ b/community/security_policy/index.html @@ -1 +1 @@ - Security Policy - JSON for Modern C++
    Skip to content

    Security Policy

    Reporting a Vulnerability

    We value the security of our users and appreciate your efforts to responsibly disclose vulnerabilities. If you have identified a security vulnerability in this repository, please use the GitHub Security Advisory "Report a Vulnerability" tab.

    Until it is published, this draft security advisory will only be visible to the maintainers of this project. Other users and teams may be added once the advisory is created.

    We will send a response indicating the next steps in handling your report. After the initial reply to your report, we will keep you informed of the progress towards a fix and full announcement and may ask for additional information or guidance.

    For vulnerabilities in third-party dependencies or modules, please report them directly to the respective maintainers.

    Additional Resources

    We sincerely thank you for contributing to the security and integrity of this project!

    \ No newline at end of file + Security Policy - JSON for Modern C++
    Skip to content

    Security Policy

    Reporting a Vulnerability

    We value the security of our users and appreciate your efforts to responsibly disclose vulnerabilities. If you have identified a security vulnerability in this repository, please use the GitHub Security Advisory "Report a Vulnerability" tab.

    Until it is published, this draft security advisory will only be visible to the maintainers of this project. Other users and teams may be added once the advisory is created.

    We will send a response indicating the next steps in handling your report. After the initial reply to your report, we will keep you informed of the progress towards a fix and full announcement and may ask for additional information or guidance.

    For vulnerabilities in third-party dependencies or modules, please report them directly to the respective maintainers.

    Additional Resources

    We sincerely thank you for contributing to the security and integrity of this project!

    \ No newline at end of file diff --git a/features/arbitrary_types/index.html b/features/arbitrary_types/index.html index 81b973142..dd481602e 100644 --- a/features/arbitrary_types/index.html +++ b/features/arbitrary_types/index.html @@ -159,4 +159,4 @@ value = j.template template get<T>(); // oops! } }; -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/features/assertions/index.html b/features/assertions/index.html index 3a0aeb500..97ad20a15 100644 --- a/features/assertions/index.html +++ b/features/assertions/index.html @@ -43,4 +43,4 @@ } }

    Output:

    [json.exception.parse_error.101] parse error: attempting to parse an empty input; check that your input string or stream contains the expected JSON
    -

    See also

    \ No newline at end of file +

    See also

    \ No newline at end of file diff --git a/features/binary_formats/bjdata/index.html b/features/binary_formats/bjdata/index.html index d1298be76..8969d1a53 100644 --- a/features/binary_formats/bjdata/index.html +++ b/features/binary_formats/bjdata/index.html @@ -95,4 +95,4 @@ "compact": true, "schema": 0 } -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/features/binary_formats/bson/index.html b/features/binary_formats/bson/index.html index 209047b40..654d8ae02 100644 --- a/features/binary_formats/bson/index.html +++ b/features/binary_formats/bson/index.html @@ -46,4 +46,4 @@ "compact": true, "schema": 0 } -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/features/binary_formats/cbor/index.html b/features/binary_formats/cbor/index.html index 7eb20b1e4..4eec9800c 100644 --- a/features/binary_formats/cbor/index.html +++ b/features/binary_formats/cbor/index.html @@ -45,4 +45,4 @@ "compact": true, "schema": 0 } -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/features/binary_formats/index.html b/features/binary_formats/index.html index 13f556f3e..e315ee27b 100644 --- a/features/binary_formats/index.html +++ b/features/binary_formats/index.html @@ -1 +1 @@ - Binary Formats - JSON for Modern C++
    Skip to content

    Binary Formats

    Though JSON is a ubiquitous data format, it is not a very compact format suitable for data exchange, for instance over a network. Hence, the library supports

    to efficiently encode JSON values to byte vectors and to decode such vectors.

    Comparison

    Completeness

    Format Serialization Deserialization
    BJData complete complete
    BSON incomplete: top-level value must be an object incomplete, but all JSON types are supported
    CBOR complete incomplete, but all JSON types are supported
    MessagePack complete complete
    UBJSON complete complete

    Binary values

    Format Binary values Binary subtypes
    BJData not supported not supported
    BSON supported supported
    CBOR supported supported
    MessagePack supported supported
    UBJSON not supported not supported

    See binary values for more information.

    Sizes

    Format canada.json twitter.json citm_catalog.json jeopardy.json
    BJData 53.2 % 91.1 % 78.1 % 96.6 %
    BJData (size) 58.6 % 92.1 % 86.7 % 97.4 %
    BJData (size+tyoe) 58.6 % 92.1 % 86.5 % 97.4 %
    BSON 85.8 % 95.2 % 95.8 % 106.7 %
    CBOR 50.5 % 86.3 % 68.4 % 88.0 %
    MessagePack 50.5 % 86.0 % 68.5 % 87.9 %
    UBJSON 53.2 % 91.3 % 78.2 % 96.6 %
    UBJSON (size) 58.6 % 92.3 % 86.8 % 97.4 %
    UBJSON (size+type) 55.9 % 92.3 % 85.0 % 95.0 %

    Sizes compared to minified JSON value.

    \ No newline at end of file + Binary Formats - JSON for Modern C++
    Skip to content

    Binary Formats

    Though JSON is a ubiquitous data format, it is not a very compact format suitable for data exchange, for instance over a network. Hence, the library supports

    to efficiently encode JSON values to byte vectors and to decode such vectors.

    Comparison

    Completeness

    Format Serialization Deserialization
    BJData complete complete
    BSON incomplete: top-level value must be an object incomplete, but all JSON types are supported
    CBOR complete incomplete, but all JSON types are supported
    MessagePack complete complete
    UBJSON complete complete

    Binary values

    Format Binary values Binary subtypes
    BJData not supported not supported
    BSON supported supported
    CBOR supported supported
    MessagePack supported supported
    UBJSON not supported not supported

    See binary values for more information.

    Sizes

    Format canada.json twitter.json citm_catalog.json jeopardy.json
    BJData 53.2 % 91.1 % 78.1 % 96.6 %
    BJData (size) 58.6 % 92.1 % 86.7 % 97.4 %
    BJData (size+tyoe) 58.6 % 92.1 % 86.5 % 97.4 %
    BSON 85.8 % 95.2 % 95.8 % 106.7 %
    CBOR 50.5 % 86.3 % 68.4 % 88.0 %
    MessagePack 50.5 % 86.0 % 68.5 % 87.9 %
    UBJSON 53.2 % 91.3 % 78.2 % 96.6 %
    UBJSON (size) 58.6 % 92.3 % 86.8 % 97.4 %
    UBJSON (size+type) 55.9 % 92.3 % 85.0 % 95.0 %

    Sizes compared to minified JSON value.

    \ No newline at end of file diff --git a/features/binary_formats/messagepack/index.html b/features/binary_formats/messagepack/index.html index 7a1c1b3cd..b96e71fc2 100644 --- a/features/binary_formats/messagepack/index.html +++ b/features/binary_formats/messagepack/index.html @@ -45,4 +45,4 @@ "compact": true, "schema": 0 } -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/features/binary_formats/ubjson/index.html b/features/binary_formats/ubjson/index.html index 5e520afe8..61b2a7ee9 100644 --- a/features/binary_formats/ubjson/index.html +++ b/features/binary_formats/ubjson/index.html @@ -90,4 +90,4 @@ "compact": true, "schema": 0 } -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/features/binary_values/index.html b/features/binary_values/index.html index c7e6d4c13..8b241568f 100644 --- a/features/binary_values/index.html +++ b/features/binary_values/index.html @@ -154,4 +154,4 @@ vector <|-- binary_t

    By default, binary values are stored as

    Note that subtype (42) is not serialized and that UBJSON has no binary type, and deserializing v would yield the following value:

    {
       "binary": [202, 254, 186, 190]
     }
    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/features/comments/index.html b/features/comments/index.html index a2808e995..a4d087ca2 100644 --- a/features/comments/index.html +++ b/features/comments/index.html @@ -47,4 +47,4 @@ last read: '<U+000A> {<U+000A> /'; expected string "Neptune" ] } -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/features/element_access/checked_access/index.html b/features/element_access/checked_access/index.html index 320edc5fd..593261ba2 100644 --- a/features/element_access/checked_access/index.html +++ b/features/element_access/checked_access/index.html @@ -12,4 +12,4 @@

    When accessing an invalid index (i.e., an index greater than or equal to the array size) or the passed object key is non-existing, an exception is thrown.

    Accessing via invalid index or missing key
    j.at("hobbies").at(3) = "cooking";
     

    This code produces the following exception:

    [json.exception.out_of_range.401] array index 3 is out of range
     

    When you extended diagnostic messages are enabled by defining JSON_DIAGNOSTICS, the exception further gives information where the key or index is missing or out of range.

    [json.exception.out_of_range.401] (/hobbies) array index 3 is out of range
    -

    Notes

    Exceptions

    • at can only be used with objects (with a string argument) or with arrays (with a numeric argument). For other types, a basic_json::type_error is thrown.
    • basic_json::out_of_range exception exceptions are thrown if the provided key is not found in an object or the provided index is invalid.

    Summary

    scenario non-const value const value
    access to existing object key reference to existing value is returned const reference to existing value is returned
    access to valid array index reference to existing value is returned const reference to existing value is returned
    access to non-existing object key basic_json::out_of_range exception is thrown basic_json::out_of_range exception is thrown
    access to invalid array index basic_json::out_of_range exception is thrown basic_json::out_of_range exception is thrown
    \ No newline at end of file +

    Notes

    Exceptions

    • at can only be used with objects (with a string argument) or with arrays (with a numeric argument). For other types, a basic_json::type_error is thrown.
    • basic_json::out_of_range exception exceptions are thrown if the provided key is not found in an object or the provided index is invalid.

    Summary

    scenario non-const value const value
    access to existing object key reference to existing value is returned const reference to existing value is returned
    access to valid array index reference to existing value is returned const reference to existing value is returned
    access to non-existing object key basic_json::out_of_range exception is thrown basic_json::out_of_range exception is thrown
    access to invalid array index basic_json::out_of_range exception is thrown basic_json::out_of_range exception is thrown
    \ No newline at end of file diff --git a/features/element_access/default_value/index.html b/features/element_access/default_value/index.html index 99c7d12a0..f1b29eff1 100644 --- a/features/element_access/default_value/index.html +++ b/features/element_access/default_value/index.html @@ -20,4 +20,4 @@ default value (int): -1 default value (uint64_t): 18446744073709551615 explict return value type: 18446744073709551615 -

    See also

    \ No newline at end of file +

    See also

    \ No newline at end of file diff --git a/features/element_access/index.html b/features/element_access/index.html index 91de29bd6..e983fda7f 100644 --- a/features/element_access/index.html +++ b/features/element_access/index.html @@ -1 +1 @@ - Element Access - JSON for Modern C++
    Skip to content

    Element Access

    There are many ways elements in a JSON value can be accessed:

    • unchecked access via operator[]
    • checked access via at
    • access with default value via value
    • iterators
    • JSON pointers
    \ No newline at end of file + Element Access - JSON for Modern C++
    Skip to content

    Element Access

    There are many ways elements in a JSON value can be accessed:

    • unchecked access via operator[]
    • checked access via at
    • access with default value via value
    • iterators
    • JSON pointers
    \ No newline at end of file diff --git a/features/element_access/unchecked_access/index.html b/features/element_access/unchecked_access/index.html index 5a8e19df4..652478443 100644 --- a/features/element_access/unchecked_access/index.html +++ b/features/element_access/unchecked_access/index.html @@ -19,4 +19,4 @@ "age": 42, "hobbies": ["running", "reading", null, "cooking"] } -

    Notes

    Design rationale

    The library behaves differently to std::vector and std::map:

    • std::vector::operator[] never inserts a new element.
    • std::map::operator[] is not available for const values.

    The type json wraps all JSON value types. It would be impossible to remove operator[] for const objects. At the same time, inserting elements for non-const objects is really convenient as it avoids awkward insert calls. To this end, we decided to have an inserting non-const behavior for both arrays and objects.

    Info

    The access is unchecked. In case the passed object key does not exist or the passed array index is invalid, no exception is thrown.

    Danger

    • It is undefined behavior to access a const object with a non-existing key.
    • It is undefined behavior to access a const array with an invalid index.
    • In debug mode, an assertion will fire in both cases. You can disable assertions by defining the preprocessor symbol NDEBUG or redefine the macro JSON_ASSERT(x). See the documentation on runtime assertions for more information.

    Exceptions

    operator[] can only be used with objects (with a string argument) or with arrays (with a numeric argument). For other types, a basic_json::type_error is thrown.

    Summary

    scenario non-const value const value
    access to existing object key reference to existing value is returned const reference to existing value is returned
    access to valid array index reference to existing value is returned const reference to existing value is returned
    access to non-existing object key reference to newly inserted null value is returned undefined behavior; runtime assertion in debug mode
    access to invalid array index reference to newly inserted null value is returned; any index between previous maximal index and passed index are filled with null undefined behavior; runtime assertion in debug mode
    \ No newline at end of file +

    Notes

    Design rationale

    The library behaves differently to std::vector and std::map:

    • std::vector::operator[] never inserts a new element.
    • std::map::operator[] is not available for const values.

    The type json wraps all JSON value types. It would be impossible to remove operator[] for const objects. At the same time, inserting elements for non-const objects is really convenient as it avoids awkward insert calls. To this end, we decided to have an inserting non-const behavior for both arrays and objects.

    Info

    The access is unchecked. In case the passed object key does not exist or the passed array index is invalid, no exception is thrown.

    Danger

    • It is undefined behavior to access a const object with a non-existing key.
    • It is undefined behavior to access a const array with an invalid index.
    • In debug mode, an assertion will fire in both cases. You can disable assertions by defining the preprocessor symbol NDEBUG or redefine the macro JSON_ASSERT(x). See the documentation on runtime assertions for more information.

    Exceptions

    operator[] can only be used with objects (with a string argument) or with arrays (with a numeric argument). For other types, a basic_json::type_error is thrown.

    Summary

    scenario non-const value const value
    access to existing object key reference to existing value is returned const reference to existing value is returned
    access to valid array index reference to existing value is returned const reference to existing value is returned
    access to non-existing object key reference to newly inserted null value is returned undefined behavior; runtime assertion in debug mode
    access to invalid array index reference to newly inserted null value is returned; any index between previous maximal index and passed index are filled with null undefined behavior; runtime assertion in debug mode
    \ No newline at end of file diff --git a/features/enum_conversion/index.html b/features/enum_conversion/index.html index ac9082394..1a7eecde2 100644 --- a/features/enum_conversion/index.html +++ b/features/enum_conversion/index.html @@ -24,4 +24,4 @@ // undefined json value to enum (where the first map entry above is the default) json jPi = 3.14; assert(jPi.template get<TaskState>() == TS_INVALID ); -

    Notes

    Just as in Arbitrary Type Conversions above,

    Other Important points:

    \ No newline at end of file +

    Notes

    Just as in Arbitrary Type Conversions above,

    Other Important points:

    \ No newline at end of file diff --git a/features/iterators/index.html b/features/iterators/index.html index 24d248046..4b583025e 100644 --- a/features/iterators/index.html +++ b/features/iterators/index.html @@ -53,4 +53,4 @@ std::cout << *it << std::endl; }

    Output:

    "Hello, world"
    -

    Iterator invalidation

    Operations invalidated iterators
    clear all
    \ No newline at end of file +

    Iterator invalidation

    Operations invalidated iterators
    clear all
    \ No newline at end of file diff --git a/features/json_patch/index.html b/features/json_patch/index.html index 2e5f25ee7..f242fd05c 100644 --- a/features/json_patch/index.html +++ b/features/json_patch/index.html @@ -105,4 +105,4 @@ "world" ] } -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/features/json_pointer/index.html b/features/json_pointer/index.html index fdcf049c0..1c76e47b7 100644 --- a/features/json_pointer/index.html +++ b/features/json_pointer/index.html @@ -45,4 +45,4 @@ "/nested/three/1": false }

    The reverse function, unflatten recreates the original value.

    auto j_original = j_flat.unflatten();
    -

    See also

    \ No newline at end of file +

    See also

    \ No newline at end of file diff --git a/features/macros/index.html b/features/macros/index.html index 699c7b5ee..89a345992 100644 --- a/features/macros/index.html +++ b/features/macros/index.html @@ -1 +1 @@ - Supported Macros - JSON for Modern C++
    Skip to content

    Supported Macros

    Some aspects of the library can be configured by defining preprocessor macros before including the json.hpp header. See also the API documentation for macros for examples and more information.

    JSON_ASSERT(x)

    This macro controls which code is executed for runtime assertions of the library.

    See full documentation of JSON_ASSERT(x).

    JSON_CATCH_USER(exception)

    This macro overrides catch calls inside the library.

    See full documentation of JSON_CATCH_USER(exception).

    JSON_DIAGNOSTICS

    This macro enables extended diagnostics for exception messages. Possible values are 1 to enable or 0 to disable (default).

    When enabled, exception messages contain a JSON Pointer to the JSON value that triggered the exception, see Extended diagnostic messages for an example. Note that enabling this macro increases the size of every JSON value by one pointer and adds some runtime overhead.

    The diagnostics messages can also be controlled with the CMake option JSON_Diagnostics (OFF by default) which sets JSON_DIAGNOSTICS accordingly.

    See full documentation of JSON_DIAGNOSTICS.

    JSON_DIAGNOSTIC_POSITIONS

    When enabled, two new member functions start_pos() and end_pos() are added to basic_json values. If the value was created by calling theparse function, then these functions allow to query the byte positions of the value in the input it was parsed from. The byte positions are also used in exceptions to help locate errors.

    The diagnostics positions can also be controlled with the CMake option JSON_Diagnostic_Positions (OFF by default) which sets JSON_DIAGNOSTIC_POSITIONS accordingly.

    See full documentation of JSON_DIAGNOSTIC_POSITIONS

    JSON_HAS_CPP_11, JSON_HAS_CPP_14, JSON_HAS_CPP_17, JSON_HAS_CPP_20

    The library targets C++11, but also supports some features introduced in later C++ versions (e.g., std::string_view support for C++17). For these new features, the library implements some preprocessor checks to determine the C++ standard. By defining any of these symbols, the internal check is overridden and the provided C++ version is unconditionally assumed. This can be helpful for compilers that only implement parts of the standard and would be detected incorrectly.

    See full documentation of JSON_HAS_CPP_11, JSON_HAS_CPP_14, JSON_HAS_CPP_17, and JSON_HAS_CPP_20.

    JSON_HAS_FILESYSTEM, JSON_HAS_EXPERIMENTAL_FILESYSTEM

    When compiling with C++17, the library provides conversions from and to std::filesystem::path. As compiler support for filesystem is limited, the library tries to detect whether <filesystem>/std::filesystem (JSON_HAS_FILESYSTEM) or <experimental/filesystem>/std::experimental::filesystem (JSON_HAS_EXPERIMENTAL_FILESYSTEM) should be used. To override the built-in check, define JSON_HAS_FILESYSTEM or JSON_HAS_EXPERIMENTAL_FILESYSTEM to 1.

    See full documentation of JSON_HAS_FILESYSTEM and JSON_HAS_EXPERIMENTAL_FILESYSTEM.

    JSON_NOEXCEPTION

    Exceptions can be switched off by defining the symbol JSON_NOEXCEPTION.

    See full documentation of JSON_NOEXCEPTION.

    JSON_DISABLE_ENUM_SERIALIZATION

    When defined, default parse and serialize functions for enums are excluded and have to be provided by the user, for example, using NLOHMANN_JSON_SERIALIZE_ENUM.

    See full documentation of JSON_DISABLE_ENUM_SERIALIZATION.

    JSON_NO_IO

    When defined, headers <cstdio>, <ios>, <iosfwd>, <istream>, and <ostream> are not included and parse functions relying on these headers are excluded. This is relevant for environment where these I/O functions are disallowed for security reasons (e.g., Intel Software Guard Extensions (SGX)).

    See full documentation of JSON_NO_IO.

    JSON_SKIP_LIBRARY_VERSION_CHECK

    When defined, the library will not create a compiler warning when a different version of the library was already included.

    See full documentation of JSON_SKIP_LIBRARY_VERSION_CHECK.

    JSON_SKIP_UNSUPPORTED_COMPILER_CHECK

    When defined, the library will not create a compile error when a known unsupported compiler is detected. This allows to use the library with compilers that do not fully support C++11 and may only work if unsupported features are not used.

    See full documentation of JSON_SKIP_UNSUPPORTED_COMPILER_CHECK.

    JSON_THROW_USER(exception)

    This macro overrides throw calls inside the library. The argument is the exception to be thrown.

    See full documentation of JSON_THROW_USER(exception).

    JSON_TRY_USER

    This macro overrides try calls inside the library.

    See full documentation of JSON_TRY_USER.

    JSON_USE_IMPLICIT_CONVERSIONS

    When defined to 0, implicit conversions are switched off. By default, implicit conversions are switched on.

    See full documentation of JSON_USE_IMPLICIT_CONVERSIONS.

    NLOHMANN_DEFINE_TYPE_*(...), NLOHMANN_DEFINE_DERIVED_TYPE_*(...)

    The library defines 12 macros to simplify the serialization/deserialization of types. See the page on arbitrary type conversion for a detailed discussion.

    NLOHMANN_JSON_SERIALIZE_ENUM(type, ...)

    This macro simplifies the serialization/deserialization of enum types. See Specializing enum conversion for more information.

    See full documentation of NLOHMANN_JSON_SERIALIZE_ENUM.

    NLOHMANN_JSON_VERSION_MAJOR, NLOHMANN_JSON_VERSION_MINOR, NLOHMANN_JSON_VERSION_PATCH

    These macros are defined by the library and contain the version numbers according to Semantic Versioning 2.0.0.

    See full documentation of NLOHMANN_JSON_VERSION_MAJOR, NLOHMANN_JSON_VERSION_MINOR, and NLOHMANN_JSON_VERSION_PATCH.

    \ No newline at end of file + Supported Macros - JSON for Modern C++
    Skip to content

    Supported Macros

    Some aspects of the library can be configured by defining preprocessor macros before including the json.hpp header. See also the API documentation for macros for examples and more information.

    JSON_ASSERT(x)

    This macro controls which code is executed for runtime assertions of the library.

    See full documentation of JSON_ASSERT(x).

    JSON_CATCH_USER(exception)

    This macro overrides catch calls inside the library.

    See full documentation of JSON_CATCH_USER(exception).

    JSON_DIAGNOSTICS

    This macro enables extended diagnostics for exception messages. Possible values are 1 to enable or 0 to disable (default).

    When enabled, exception messages contain a JSON Pointer to the JSON value that triggered the exception, see Extended diagnostic messages for an example. Note that enabling this macro increases the size of every JSON value by one pointer and adds some runtime overhead.

    The diagnostics messages can also be controlled with the CMake option JSON_Diagnostics (OFF by default) which sets JSON_DIAGNOSTICS accordingly.

    See full documentation of JSON_DIAGNOSTICS.

    JSON_DIAGNOSTIC_POSITIONS

    When enabled, two new member functions start_pos() and end_pos() are added to basic_json values. If the value was created by calling theparse function, then these functions allow to query the byte positions of the value in the input it was parsed from. The byte positions are also used in exceptions to help locate errors.

    The diagnostics positions can also be controlled with the CMake option JSON_Diagnostic_Positions (OFF by default) which sets JSON_DIAGNOSTIC_POSITIONS accordingly.

    See full documentation of JSON_DIAGNOSTIC_POSITIONS

    JSON_HAS_CPP_11, JSON_HAS_CPP_14, JSON_HAS_CPP_17, JSON_HAS_CPP_20

    The library targets C++11, but also supports some features introduced in later C++ versions (e.g., std::string_view support for C++17). For these new features, the library implements some preprocessor checks to determine the C++ standard. By defining any of these symbols, the internal check is overridden and the provided C++ version is unconditionally assumed. This can be helpful for compilers that only implement parts of the standard and would be detected incorrectly.

    See full documentation of JSON_HAS_CPP_11, JSON_HAS_CPP_14, JSON_HAS_CPP_17, and JSON_HAS_CPP_20.

    JSON_HAS_FILESYSTEM, JSON_HAS_EXPERIMENTAL_FILESYSTEM

    When compiling with C++17, the library provides conversions from and to std::filesystem::path. As compiler support for filesystem is limited, the library tries to detect whether <filesystem>/std::filesystem (JSON_HAS_FILESYSTEM) or <experimental/filesystem>/std::experimental::filesystem (JSON_HAS_EXPERIMENTAL_FILESYSTEM) should be used. To override the built-in check, define JSON_HAS_FILESYSTEM or JSON_HAS_EXPERIMENTAL_FILESYSTEM to 1.

    See full documentation of JSON_HAS_FILESYSTEM and JSON_HAS_EXPERIMENTAL_FILESYSTEM.

    JSON_NOEXCEPTION

    Exceptions can be switched off by defining the symbol JSON_NOEXCEPTION.

    See full documentation of JSON_NOEXCEPTION.

    JSON_DISABLE_ENUM_SERIALIZATION

    When defined, default parse and serialize functions for enums are excluded and have to be provided by the user, for example, using NLOHMANN_JSON_SERIALIZE_ENUM.

    See full documentation of JSON_DISABLE_ENUM_SERIALIZATION.

    JSON_NO_IO

    When defined, headers <cstdio>, <ios>, <iosfwd>, <istream>, and <ostream> are not included and parse functions relying on these headers are excluded. This is relevant for environment where these I/O functions are disallowed for security reasons (e.g., Intel Software Guard Extensions (SGX)).

    See full documentation of JSON_NO_IO.

    JSON_SKIP_LIBRARY_VERSION_CHECK

    When defined, the library will not create a compiler warning when a different version of the library was already included.

    See full documentation of JSON_SKIP_LIBRARY_VERSION_CHECK.

    JSON_SKIP_UNSUPPORTED_COMPILER_CHECK

    When defined, the library will not create a compile error when a known unsupported compiler is detected. This allows to use the library with compilers that do not fully support C++11 and may only work if unsupported features are not used.

    See full documentation of JSON_SKIP_UNSUPPORTED_COMPILER_CHECK.

    JSON_THROW_USER(exception)

    This macro overrides throw calls inside the library. The argument is the exception to be thrown.

    See full documentation of JSON_THROW_USER(exception).

    JSON_TRY_USER

    This macro overrides try calls inside the library.

    See full documentation of JSON_TRY_USER.

    JSON_USE_IMPLICIT_CONVERSIONS

    When defined to 0, implicit conversions are switched off. By default, implicit conversions are switched on.

    See full documentation of JSON_USE_IMPLICIT_CONVERSIONS.

    NLOHMANN_DEFINE_TYPE_*(...), NLOHMANN_DEFINE_DERIVED_TYPE_*(...)

    The library defines 12 macros to simplify the serialization/deserialization of types. See the page on arbitrary type conversion for a detailed discussion.

    NLOHMANN_JSON_SERIALIZE_ENUM(type, ...)

    This macro simplifies the serialization/deserialization of enum types. See Specializing enum conversion for more information.

    See full documentation of NLOHMANN_JSON_SERIALIZE_ENUM.

    NLOHMANN_JSON_VERSION_MAJOR, NLOHMANN_JSON_VERSION_MINOR, NLOHMANN_JSON_VERSION_PATCH

    These macros are defined by the library and contain the version numbers according to Semantic Versioning 2.0.0.

    See full documentation of NLOHMANN_JSON_VERSION_MAJOR, NLOHMANN_JSON_VERSION_MINOR, and NLOHMANN_JSON_VERSION_PATCH.

    \ No newline at end of file diff --git a/features/merge_patch/index.html b/features/merge_patch/index.html index fe8740a69..e0be49d2e 100644 --- a/features/merge_patch/index.html +++ b/features/merge_patch/index.html @@ -50,4 +50,4 @@ ], "title": "Hello!" } -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/features/namespace/index.html b/features/namespace/index.html index be4f72fd9..9ebd316ee 100644 --- a/features/namespace/index.html +++ b/features/namespace/index.html @@ -9,4 +9,4 @@ app --> json_diag app --> library

    In releases prior to 3.11.0, mixing any version of the JSON library with different JSON_DIAGNOSTICS settings would result in a crashing application. If some_library never passes instances of JSON library types to the application, this scenario became safe in version 3.11.0 and above due to the inline namespace yielding distinct symbol names.

    Limitations

    Neither the compiler nor the linker will issue as much as a warning when translation units – intended to be linked together and that include different versions and/or configurations of the JSON library – exchange and use library types.

    There is an exception when forward declarations are used (i.e., when including json_fwd.hpp) in which case the linker may complain about undefined references.

    Disabling the version component

    Different versions are not necessarily ABI-incompatible, but the project does not actively track changes in the ABI and recommends that all parts of a codebase exchanging library types be built with the same version. Users can, at their own risk, disable the version component of the linline namespace, allowing different versions – but not configurations – to be used in cases where the linker would otherwise output undefined reference errors.

    To do so, define NLOHMANN_JSON_NAMESPACE_NO_VERSION to 1.

    This applies to version 3.11.2 and above only, versions 3.11.0 and 3.11.1 can apply the technique described in the next section to emulate the effect of the NLOHMANN_JSON_NAMESPACE_NO_VERSION macro.

    Use at your own risk

    Disabling the namespace version component and mixing ABI-incompatible versions will result in crashes or incorrect behavior. You have been warned!

    Disabling the inline namespace completely

    When interoperability with code using a pre-3.11.0 version of the library is required, users can, at their own risk restore the old namespace layout by redefining NLOHMANN_JSON_NAMESPACE_BEGIN, NLOHMANN_JSON_NAMESPACE_END as follows:

    #define NLOHMANN_JSON_NAMESPACE_BEGIN  namespace nlohmann {
     #define NLOHMANN_JSON_NAMESPACE_END    }
    -

    Use at your own risk

    Overriding the namespace and mixing ABI-incompatible versions will result in crashes or incorrect behavior. You have been warned!

    Version history

    \ No newline at end of file +

    Use at your own risk

    Overriding the namespace and mixing ABI-incompatible versions will result in crashes or incorrect behavior. You have been warned!

    Version history

    \ No newline at end of file diff --git a/features/object_order/index.html b/features/object_order/index.html index 0565b3ed7..26a9cc15a 100644 --- a/features/object_order/index.html +++ b/features/object_order/index.html @@ -57,4 +57,4 @@ "three": 3 "two": 2, } -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/features/parsing/index.html b/features/parsing/index.html index e743f0488..69e1e89c2 100644 --- a/features/parsing/index.html +++ b/features/parsing/index.html @@ -1 +1 @@ - Parsing - JSON for Modern C++
    Skip to content
    \ No newline at end of file + Parsing - JSON for Modern C++
    Skip to content
    \ No newline at end of file diff --git a/features/parsing/json_lines/index.html b/features/parsing/json_lines/index.html index 7807eaf50..c8fbf2d6d 100644 --- a/features/parsing/json_lines/index.html +++ b/features/parsing/json_lines/index.html @@ -33,4 +33,4 @@ { std::cout << j << std::endl; } -

    with a JSON Lines input does not work, because the parser will try to parse one value after the last one.

    \ No newline at end of file +

    with a JSON Lines input does not work, because the parser will try to parse one value after the last one.

    \ No newline at end of file diff --git a/features/parsing/parse_exceptions/index.html b/features/parsing/parse_exceptions/index.html index 6b9faa5d1..38a0fb4a7 100644 --- a/features/parsing/parse_exceptions/index.html +++ b/features/parsing/parse_exceptions/index.html @@ -63,4 +63,4 @@ last read: "3,]" parsing unsuccessful! parsed value: [1,2,3] -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/features/parsing/parser_callbacks/index.html b/features/parsing/parser_callbacks/index.html index 0324c9807..9ab959424 100644 --- a/features/parsing/parser_callbacks/index.html +++ b/features/parsing/parser_callbacks/index.html @@ -90,4 +90,4 @@ "Width": 800 } } -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/features/parsing/sax_interface/index.html b/features/parsing/sax_interface/index.html index 97d0fa67d..ce3633d8b 100644 --- a/features/parsing/sax_interface/index.html +++ b/features/parsing/sax_interface/index.html @@ -49,4 +49,4 @@ class sax_t ["json::sax_t"] { // called when a parse error occurs; byte position, the last token, and an exception is passed bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex); -

    The return value of each function determines whether parsing should proceed.

    To implement your own SAX handler, proceed as follows:

    1. Implement the SAX interface in a class. You can use class nlohmann::json_sax<json> as base class, but you can also use any class where the functions described above are implemented and public.
    2. Create an object of your SAX interface class, e.g. my_sax.
    3. Call bool json::sax_parse(input, &my_sax); where the first parameter can be any input like a string or an input stream and the second parameter is a pointer to your SAX interface.

    Note the sax_parse function only returns a bool indicating the result of the last executed SAX event. It does not return json value - it is up to you to decide what to do with the SAX events. Furthermore, no exceptions are thrown in case of a parse error - it is up to you what to do with the exception object passed to your parse_error implementation. Internally, the SAX interface is used for the DOM parser (class json_sax_dom_parser) as well as the acceptor (json_sax_acceptor), see file json_sax.hpp.

    See also

    \ No newline at end of file +

    The return value of each function determines whether parsing should proceed.

    To implement your own SAX handler, proceed as follows:

    1. Implement the SAX interface in a class. You can use class nlohmann::json_sax<json> as base class, but you can also use any class where the functions described above are implemented and public.
    2. Create an object of your SAX interface class, e.g. my_sax.
    3. Call bool json::sax_parse(input, &my_sax); where the first parameter can be any input like a string or an input stream and the second parameter is a pointer to your SAX interface.

    Note the sax_parse function only returns a bool indicating the result of the last executed SAX event. It does not return json value - it is up to you to decide what to do with the SAX events. Furthermore, no exceptions are thrown in case of a parse error - it is up to you what to do with the exception object passed to your parse_error implementation. Internally, the SAX interface is used for the DOM parser (class json_sax_dom_parser) as well as the acceptor (json_sax_acceptor), see file json_sax.hpp.

    See also

    \ No newline at end of file diff --git a/features/types/index.html b/features/types/index.html index 40cd7145e..6702676e0 100644 --- a/features/types/index.html +++ b/features/types/index.html @@ -77,4 +77,4 @@ basic_json .. value_t

    Template arguments< basic_json, // value_type std::allocator<basic_json> // allocator_type > -

    Limits

    RFC 8259 specifies:

    An implementation may set limits on the maximum depth of nesting.

    In this class, the array's limit of nesting is not explicitly constrained. However, a maximum depth of nesting may be introduced by the compiler or runtime environment. A theoretical limit can be queried by calling the max_size function of a JSON array.

    Storage

    Arrays are stored as pointers in a basic_json type. That is, for any access to array values, a pointer of type array_t* must be dereferenced.

    Strings

    RFC 8259 describes JSON strings as follows:

    A string is a sequence of zero or more Unicode characters.

    Unicode values are split by the JSON class into byte-sized characters during deserialization.

    Default type

    With the default values for StringType (std::string), the default value for string_t is std::string.

    Encoding

    Strings are stored in UTF-8 encoding. Therefore, functions like std::string::size() or std::string::length() return the number of bytes in the string rather than the number of characters or glyphs.

    String comparison

    RFC 8259 states:

    Software implementations are typically required to test names of object members for equality. Implementations that transform the textual representation into sequences of Unicode code units and then perform the comparison numerically, code unit by code unit, are interoperable in the sense that implementations will agree in all cases on equality or inequality of two strings. For example, implementations that compare strings with escaped characters unconverted may incorrectly find that "a\\b" and "a\u005Cb" are not equal.

    This implementation is interoperable as it does compare strings code unit by code unit.

    Storage

    String values are stored as pointers in a basic_json type. That is, for any access to string values, a pointer of type string_t* must be dereferenced.

    Booleans

    RFC 8259 implicitly describes a boolean as a type which differentiates the two literals true and false.

    Default type

    With the default values for BooleanType (bool), the default value for boolean_t is bool.

    Storage

    Boolean values are stored directly inside a basic_json type.

    Numbers

    See the number handling article for a detailed discussion on how numbers are handled by this library.

    RFC 8259 describes numbers as follows:

    The representation of numbers is similar to that used in most programming languages. A number is represented in base 10 using decimal digits. It contains an integer component that may be prefixed with an optional minus sign, which may be followed by a fraction part and/or an exponent part. Leading zeros are not allowed. (...) Numeric values that cannot be represented in the grammar below (such as Infinity and NaN) are not permitted.

    This description includes both integer and floating-point numbers. However, C++ allows more precise storage if it is known whether the number is a signed integer, an unsigned integer or a floating-point number. Therefore, three different types, number_integer_t, number_unsigned_t, and number_float_t are used.

    Default types

    With the default values for NumberIntegerType (std::int64_t), the default value for number_integer_t is std::int64_t. With the default values for NumberUnsignedType (std::uint64_t), the default value for number_unsigned_t is std::uint64_t. With the default values for NumberFloatType (double), the default value for number_float_t is double.

    Default behavior

    Limits

    RFC 8259 specifies:

    An implementation may set limits on the range and precision of numbers.

    When the default type is used, the maximal integer number that can be stored is 9223372036854775807 (INT64_MAX) and the minimal integer number that can be stored is -9223372036854775808 (INT64_MIN). Integer numbers that are out of range will yield over/underflow when used in a constructor. During deserialization, too large or small integer numbers will be automatically be stored as number_unsigned_t or number_float_t.

    When the default type is used, the maximal unsigned integer number that can be stored is 18446744073709551615 (UINT64_MAX) and the minimal integer number that can be stored is 0. Integer numbers that are out of range will yield over/underflow when used in a constructor. During deserialization, too large or small integer numbers will be automatically be stored as number_integer_t or number_float_t.

    RFC 8259 further states:

    Note that when such software is used, numbers that are integers and are in the range [-2^{53}+1, 2^{53}-1] are interoperable in the sense that implementations will agree exactly on their numeric values.

    As this range is a subrange of the exactly supported range [INT64_MIN, INT64_MAX], this class's integer type is interoperable.

    RFC 8259 states:

    This specification allows implementations to set limits on the range and precision of numbers accepted. Since software that implements IEEE 754-2008 binary64 (double precision) numbers is generally available and widely used, good interoperability can be achieved by implementations that expect no more precision or range than these provide, in the sense that implementations will approximate JSON numbers within the expected precision.

    This implementation does exactly follow this approach, as it uses double precision floating-point numbers. Note values smaller than -1.79769313486232e+308 and values greater than 1.79769313486232e+308 will be stored as NaN internally and be serialized to null.

    Storage

    Integer number values, unsigned integer number values, and floating-point number values are stored directly inside a basic_json type.

    \ No newline at end of file +

    Limits

    RFC 8259 specifies:

    An implementation may set limits on the maximum depth of nesting.

    In this class, the array's limit of nesting is not explicitly constrained. However, a maximum depth of nesting may be introduced by the compiler or runtime environment. A theoretical limit can be queried by calling the max_size function of a JSON array.

    Storage

    Arrays are stored as pointers in a basic_json type. That is, for any access to array values, a pointer of type array_t* must be dereferenced.

    Strings

    RFC 8259 describes JSON strings as follows:

    A string is a sequence of zero or more Unicode characters.

    Unicode values are split by the JSON class into byte-sized characters during deserialization.

    Default type

    With the default values for StringType (std::string), the default value for string_t is std::string.

    Encoding

    Strings are stored in UTF-8 encoding. Therefore, functions like std::string::size() or std::string::length() return the number of bytes in the string rather than the number of characters or glyphs.

    String comparison

    RFC 8259 states:

    Software implementations are typically required to test names of object members for equality. Implementations that transform the textual representation into sequences of Unicode code units and then perform the comparison numerically, code unit by code unit, are interoperable in the sense that implementations will agree in all cases on equality or inequality of two strings. For example, implementations that compare strings with escaped characters unconverted may incorrectly find that "a\\b" and "a\u005Cb" are not equal.

    This implementation is interoperable as it does compare strings code unit by code unit.

    Storage

    String values are stored as pointers in a basic_json type. That is, for any access to string values, a pointer of type string_t* must be dereferenced.

    Booleans

    RFC 8259 implicitly describes a boolean as a type which differentiates the two literals true and false.

    Default type

    With the default values for BooleanType (bool), the default value for boolean_t is bool.

    Storage

    Boolean values are stored directly inside a basic_json type.

    Numbers

    See the number handling article for a detailed discussion on how numbers are handled by this library.

    RFC 8259 describes numbers as follows:

    The representation of numbers is similar to that used in most programming languages. A number is represented in base 10 using decimal digits. It contains an integer component that may be prefixed with an optional minus sign, which may be followed by a fraction part and/or an exponent part. Leading zeros are not allowed. (...) Numeric values that cannot be represented in the grammar below (such as Infinity and NaN) are not permitted.

    This description includes both integer and floating-point numbers. However, C++ allows more precise storage if it is known whether the number is a signed integer, an unsigned integer or a floating-point number. Therefore, three different types, number_integer_t, number_unsigned_t, and number_float_t are used.

    Default types

    With the default values for NumberIntegerType (std::int64_t), the default value for number_integer_t is std::int64_t. With the default values for NumberUnsignedType (std::uint64_t), the default value for number_unsigned_t is std::uint64_t. With the default values for NumberFloatType (double), the default value for number_float_t is double.

    Default behavior

    Limits

    RFC 8259 specifies:

    An implementation may set limits on the range and precision of numbers.

    When the default type is used, the maximal integer number that can be stored is 9223372036854775807 (INT64_MAX) and the minimal integer number that can be stored is -9223372036854775808 (INT64_MIN). Integer numbers that are out of range will yield over/underflow when used in a constructor. During deserialization, too large or small integer numbers will be automatically be stored as number_unsigned_t or number_float_t.

    When the default type is used, the maximal unsigned integer number that can be stored is 18446744073709551615 (UINT64_MAX) and the minimal integer number that can be stored is 0. Integer numbers that are out of range will yield over/underflow when used in a constructor. During deserialization, too large or small integer numbers will be automatically be stored as number_integer_t or number_float_t.

    RFC 8259 further states:

    Note that when such software is used, numbers that are integers and are in the range [-2^{53}+1, 2^{53}-1] are interoperable in the sense that implementations will agree exactly on their numeric values.

    As this range is a subrange of the exactly supported range [INT64_MIN, INT64_MAX], this class's integer type is interoperable.

    RFC 8259 states:

    This specification allows implementations to set limits on the range and precision of numbers accepted. Since software that implements IEEE 754-2008 binary64 (double precision) numbers is generally available and widely used, good interoperability can be achieved by implementations that expect no more precision or range than these provide, in the sense that implementations will approximate JSON numbers within the expected precision.

    This implementation does exactly follow this approach, as it uses double precision floating-point numbers. Note values smaller than -1.79769313486232e+308 and values greater than 1.79769313486232e+308 will be stored as NaN internally and be serialized to null.

    Storage

    Integer number values, unsigned integer number values, and floating-point number values are stored directly inside a basic_json type.

    \ No newline at end of file diff --git a/features/types/number_handling/index.html b/features/types/number_handling/index.html index ed8b594e4..d88cf475c 100644 --- a/features/types/number_handling/index.html +++ b/features/types/number_handling/index.html @@ -54,4 +54,4 @@ val=nan }

    Note this approach also has the advantage that it can react on non-numerical JSON value types such as strings.

    (Example taken from #777.)

    Determine number types

    As the example in Number conversion shows, there are different functions to determine the type of the stored number:

    function unsigned integer signed integer floating-point string
    is_number() true true true false
    is_number_integer() true true false false
    is_number_unsigned() true false false false
    is_number_float() false false true false
    type_name() "number" "number" "number" "string"
    type() number_unsigned number_integer number_float string

    Template number types

    The number types can be changed with template parameters.

    position number type default type possible values
    5 signed integers std::int64_t std::int32_t, std::int16_t, etc.
    6 unsigned integers std::uint64_t std::uint32_t, std::uint16_t, etc.
    7 floating-point double float, long double

    Constraints on number types

    • The type for signed integers must be convertible from long long. The type for floating-point numbers is used in case of overflow.
    • The type for unsigned integers must be convertible from unsigned long long. The type for floating-point numbers is used in case of overflow.
    • The types for signed and unsigned integers must be distinct, see #2573.
    • Only double, float, and long double are supported for floating-point numbers.

    Example

    A basic_json type that uses long double as floating-point type.

    using json_ld = nlohmann::basic_json<std::map, std::vector, std::string, bool,
                                          std::int64_t, std::uint64_t, long double>;
    -

    Note values should then be parsed with json_ld::parse rather than json::parse as the latter would parse floating-point values to double before then converting them to long double.

    \ No newline at end of file +

    Note values should then be parsed with json_ld::parse rather than json::parse as the latter would parse floating-point values to double before then converting them to long double.

    \ No newline at end of file diff --git a/home/architecture/index.html b/home/architecture/index.html index 390611825..34d9c2daa 100644 --- a/home/architecture/index.html +++ b/home/architecture/index.html @@ -52,4 +52,4 @@ template<class T> void from_json(const basic_json& j, T& t); -

    Additional features

    Details namespace

    \ No newline at end of file +

    Additional features

    Details namespace

    \ No newline at end of file diff --git a/home/customers/index.html b/home/customers/index.html index 39aae3793..6117e1f3b 100644 --- a/home/customers/index.html +++ b/home/customers/index.html @@ -1 +1 @@ - Customers - JSON for Modern C++
    Skip to content

    Customers

    The library is used in multiple projects, applications, operating systems, etc. The list below is not exhaustive, but the result of an internet search. If you know further customers of the library, please let me know.

    Space Exploration

    • Peregrine Lunar Lander Flight 01 - The library was utilized for payload management in the Peregrine Moon Lander, developed by Astrobotic Technology and launched as part of NASA's Commercial Lunar Payload Services (CLPS) program. After six days in orbit, the spacecraft was intentionally redirected into Earth's atmosphere, where it burned up over the Pacific Ocean on January 18, 2024.

    Automotive

    Gaming and Entertainment

    • Assassin's Creed: Mirage: a stealth-action game set in the Middle East, focusing on the journey of a young assassin with classic parkour and stealth mechanics
    • Chasm: The Rift: a first-person shooter blending horror and adventure, where players navigate dark realms and battle monsters
    • College Football 25: a college football simulation game featuring gameplay that mimics real-life college teams and competitions
    • Concepts: a digital sketching app designed for creative professionals, offering flexible drawing tools for illustration, design, and brainstorming
    • Depthkit: a tool for creating and capturing volumetric video, enabling immersive 3D experiences and interactive content
    • immersivetech: a technology company focused on immersive experiences, providing tools and solutions for virtual and augmented reality applications
    • LOOT, a tool for optimizing the load order of game plugins, commonly used in The Elder Scrolls and Fallout series
    • Madden NFL 25: a sports simulation game capturing the excitement of American football with realistic gameplay and team management features
    • Marne, an unofficial private server platform for hosting custom Battlefield 1 game experiences
    • Minecraft, a popular sandbox video game
    • NHL 22: a hockey simulation game offering realistic gameplay, team management, and various modes to enhance the hockey experience
    • Pixelpart: a 2D animation and video compositing software that allows users to create animated graphics and visual effects with a focus on simplicity and ease of use
    • Red Dead Redemption II: an open-world action-adventure game following an outlaw's story in the late 1800s, emphasizing deep storytelling and immersive gameplay
    • Tactics Ogre: Reborn, a tactical role-playing game featuring strategic battles and deep storytelling elements
    • Throne and Liberty, an MMORPG that offers an expansive fantasy world with dynamic gameplay and immersive storytelling
    • Unity Vivox, a communication service that enables voice and text chat functionality in multiplayer games developed with Unity
    • Zool: Redimensioned: a modern reimagining of the classic platformer featuring fast-paced gameplay and vibrant environments

    Consumer Electronics

    • Audinate: a provider of networked audio solutions specializing in Dante technology, which facilitates high-quality digital audio transport over IP networks
    • Cisco Webex Desk Camera, a video camera designed for professional-quality video conferencing and remote collaboration
    • Philips Hue Personal Wireless Lighting: a smart lighting system for customizable and wireless home illumination
    • Ray-Ban Meta Smart glasses, a pair of smart glasses designed for capturing photos and videos with integrated connectivity and social features
    • Siemens SINEMA Remote Connect, a remote connectivity solution for monitoring and managing industrial networks and devices securely
    • Sony PlayStation 4, a gaming console developed by Sony that offers a wide range of games and multimedia entertainment features
    • Sony Virtual Webcam Driver for Remote Camera, a software driver that enables the use of Sony cameras as virtual webcams for video conferencing and streaming

    Operating Systems

    • Apple iOS and macOS, a family of operating systems developed by Apple, including iOS for mobile devices and macOS for desktop computers
    • Google Fuchsia, an open-source operating system developed by Google, designed to be secure, updatable, and adaptable across various devices
    • SerenityOS, an open-source operating system that aims to provide a simple and beautiful user experience with a focus on simplicity and elegance
    • Yocto: a Linux-based build system for creating custom operating systems and software distributions, tailored for embedded devices and IoT applications

    Development Tools and IDEs

    • Accentize SpectralBalance, an adaptive speech analysis tool designed to enhance audio quality by optimizing frequency balance in recordings
    • Arm Compiler for Linux, a software development toolchain for compiling and optimizing applications on Arm-based Linux systems
    • BBEdit, a professional text and code editor for macOS
    • CoderPad, a collaborative coding platform that enables real-time code interviews and assessments for developers; the library is included in every CoderPad instance and can be accessed with a simple #include "json.hpp"
    • Compiler Explorer, a web-based tool that allows users to write, compile, and visualize the assembly output of code in various programming languages; the library is readily available and accessible with the directive #include <nlohmann/json.hpp>.
    • GitHub CodeQL, a code analysis tool used for identifying security vulnerabilities and bugs in software through semantic queries
    • Hex-Rays: a reverse engineering toolset for analyzing and decompiling binaries, primarily used for security research and vulnerability analysis
    • ImHex, a hex editor designed for reverse engineering, providing advanced features for data analysis and manipulation
    • Intel GPA Framework, a suite of cross-platform tools for capturing, analyzing, and optimizing graphics applications across different APIs
    • Meta Yoga, a layout engine that facilitates flexible and efficient user interface design across multiple platforms
    • MKVToolNix, a set of tools for creating, editing, and inspecting MKV (Matroska) multimedia container files
    • NVIDIA Nsight Compute, a performance analysis tool for CUDA applications that provides detailed insights into GPU performance metrics
    • Notepad++, a free source code editor that supports various programming languages
    • OpenRGB, an open source RGB lighting control that doesn't depend on manufacturer software
    • OpenTelemetry C++: a library for collecting and exporting observability data in C++, enabling developers to implement distributed tracing and metrics in their application
    • Qt Creator, an IDE for developing applications using the Qt application framework
    • Scanbot SDK: a software development kit (SDK) that provides tools for integrating advanced document scanning and barcode scanning capabilities into applications

    Machine Learning and AI

    • Apple Core ML Tools, a set of tools for converting and configuring machine learning models for deployment in Apple's Core ML framework
    • Avular Mobile Robotics: a platform for developing and deploying mobile robotics solutions
    • Google gemma.cpp, a lightweight C++ inference engine designed for running AI models from the Gemma family
    • llama.cpp, a C++ library designed for efficient inference of large language models (LLMs), enabling streamlined integration into applications
    • MLX, an array framework for machine learning on Apple silicon
    • Mozilla llamafile, a tool designed for distributing and executing large language models (LLMs) efficiently using a single file format
    • NVIDIA ACE, a suite of real-time AI solutions designed for the development of interactive avatars and digital human applications, enabling scalable and sophisticated user interactions
    • Peer: a platform offering personalized AI assistants for interactive learning and creative collaboration
    • stable-diffusion.cpp: a C++ implementation of the Stable Diffusion image generation model
    • TanvasTouch: a software development kit (SDK) that enables developers to create tactile experiences on touchscreens, allowing users to feel textures and physical sensations in a digital environment
    • TensorFlow, a machine learning framework that facilitates the development and training of models, supporting data serialization and efficient data exchange between components

    Scientific Research and Analysis

    • BLACK, a bounded linear temporal logic (LTL) satisfiability checker
    • CERN Atlas Athena, a software framework used in the ATLAS experiment at the Large Hadron Collider (LHC) for performance monitoring
    • KAMERA: a platform for synchronized data collection and real-time deep learning to map marine species like polar bears and seals, aiding Arctic ecosystem research
    • KiCad: a free and open-source software suite for electronic design automation
    • MeVisLab: a software framework for medical image processing and visualization.
    • OpenPMD API: a versatile programming interface for accessing and managing scientific data, designed to facilitate the efficient storage, retrieval, and sharing of simulation data across various applications and platforms
    • ParaView: an open-source tool for large-scale data visualization and analysis across various scientific domains
    • QGIS: a free and open-source geographic information system (GIS) application that allows users to create, edit, visualize, and analyze geospatial data across a variety of formats
    • VTK: a software library for 3D computer graphics, image processing, and visualization
    • VolView: a lightweight application for interactive visualization and analysis of 3D medical imaging data.

    Business and Productivity Software

    • ArcGIS PRO, a desktop geographic information system (GIS) application developed by Esri for mapping and spatial analysis
    • Autodesk Desktop, a software platform developed by Autodesk for creating and managing desktop applications and services
    • Check Point: a cybersecurity company specializing in threat prevention and network security solutions, offering a range of products designed to protect enterprises from cyber threats and ensure data integrity
    • Microsoft Office for Mac, a suite of productivity applications developed by Microsoft for macOS, including tools for word processing, spreadsheets, and presentations
    • Nexthink Infinity: a digital employee experience management platform for monitoring and improving IT performance
    • Sophos Connect Client: a secure VPN client from Sophos that allows remote users to connect to their corporate network, ensuring secure access to resources and data
    • Stonebranch: a cloud-based cybersecurity solution that integrates backup, disaster recovery, and cybersecurity features to protect data and ensure business continuity for organizations
    • Tablecruncher: a data analysis tool that allows users to import, analyze, and visualize spreadsheet data, offering interactive features for better insights and decision-making
    • magicplan, a mobile application for creating floor plans and interior designs using augmented reality

    Databases and Big Data

    • ADIOS2: a data management framework designed for high-performance input and output operations
    • Cribl Stream: a real-time data processing platform that enables organizations to collect, route, and transform observability data, enhancing visibility and insights into their systems
    • DB Browser for SQLite, a visual open-source tool for creating, designing, and editing SQLite database files
    • MySQL Connector/C++, a C++ library for connecting and interacting with MySQL databases
    • MySQL NDB Cluster, a distributed database system that provides high availability and scalability for MySQL databases
    • PrestoDB, a distributed SQL query engine designed for large-scale data analytics, originally developed by Facebook
    • ROOT Data Analysis Framework, an open-source data analysis framework widely used in high-energy physics and other fields for data processing and visualization

    Simulation and Modeling

    • Arcturus HoloSuite, a software toolset for capturing, editing, and streaming volumetric video, featuring advanced compression technologies for high-quality 3D content creation
    • azul, a fast and efficient 3D city model viewer designed for visualizing urban environments and spatial data
    • Blender, a free and open-source 3D creation suite for modeling, animation, rendering, and more
    • cpplot, a library for creating interactive graphs and charts in C++, which can be viewed in web browsers
    • NVIDIA Omniverse, a platform for 3D content creation and collaboration that enables real-time simulations and interactive experiences across various industries
    • Pixar Renderman, a photorealistic 3D rendering software developed by Pixar, widely used in the film industry for creating high-quality visual effects and animations
    • ROS - Robot Operating System, a set of software libraries and tools that assist in developing robot applications
    • UBS, a multinational financial services and banking company
    • GAMS: a high-performance mathematical modeling system for optimization and decision support
    • M-Star: a computational fluid dynamics software for simulating and analyzing fluid flow
    • MapleSim CAD Toolbox: a software extension for MapleSim that integrates CAD models, allowing users to import, manipulate, and analyze 3D CAD data within the MapleSim environment for enhanced modeling and simulation
    • Kitware SMTK: a software toolkit for managing simulation models and workflows in scientific and engineering applications

    Enterprise and Cloud Applications

    • Acronis Cyber Protect Cloud: an all-in-one data protection solution that combines backup, disaster recovery, and cybersecurity to safeguard business data from threats like ransomware
    • Baereos: a backup solution that provides data protection and recovery options for various environments, including physical and virtual systems
    • Bitdefender Home Scanner, a tool from Bitdefender that scans devices for malware and security threats, providing a safeguard against potential online dangers
    • Citrix Provisioning: a solution that streamlines the delivery of virtual desktops and applications by allowing administrators to manage and provision resources efficiently across multiple environments
    • Citrix Virtual Apps and Desktops, a solution from Citrix that delivers virtual apps and desktops
    • Cyberarc: a security solution that specializes in privileged access management, enabling organizations to control and monitor access to critical systems and data, thereby enhancing overall cybersecurity posture
    • Elster: a digital platform developed by German tax authorities for secure and efficient electronic tax filing and management using secunet protect4use
    • Egnyte Desktop: a secure cloud storage solution designed for businesses, enabling file sharing, collaboration, and data management across teams while ensuring compliance and data protection
    • Ethereum Solidity, a high-level, object-oriented programming language designed for implementing smart contracts on the Ethereum platform
    • Inciga: a monitoring tool for IT infrastructure, designed to provide insights into system performance and availability through customizable dashboards and alerts
    • Intel Accelerator Management Daemon for VMware ESXi: a management tool designed for monitoring and controlling Intel hardware accelerators within VMware ESXi environments, optimizing performance and resource allocation
    • Juniper Identity Management Service
    • Microsoft Azure IoT SDK, a collection of tools and libraries to help developers connect, build, and deploy Internet of Things (IoT) solutions on the Azure cloud platform
    • Microsoft WinGet, a command-line utility included in the Windows Package Manager
    • Pointr: a platform for indoor positioning and navigation solutions, offering tools and SDKs for developers to create location-based applications
    • secunet protect4use: a secure, passwordless multi-factor authentication solution that transforms smartphones into digital keyrings, ensuring high security for online services and digital identities
    \ No newline at end of file + Customers - JSON for Modern C++
    Skip to content

    Customers

    The library is used in multiple projects, applications, operating systems, etc. The list below is not exhaustive, but the result of an internet search. If you know further customers of the library, please let me know.

    Space Exploration

    • Peregrine Lunar Lander Flight 01 - The library was utilized for payload management in the Peregrine Moon Lander, developed by Astrobotic Technology and launched as part of NASA's Commercial Lunar Payload Services (CLPS) program. After six days in orbit, the spacecraft was intentionally redirected into Earth's atmosphere, where it burned up over the Pacific Ocean on January 18, 2024.

    Automotive

    Gaming and Entertainment

    • Assassin's Creed: Mirage: a stealth-action game set in the Middle East, focusing on the journey of a young assassin with classic parkour and stealth mechanics
    • Chasm: The Rift: a first-person shooter blending horror and adventure, where players navigate dark realms and battle monsters
    • College Football 25: a college football simulation game featuring gameplay that mimics real-life college teams and competitions
    • Concepts: a digital sketching app designed for creative professionals, offering flexible drawing tools for illustration, design, and brainstorming
    • Depthkit: a tool for creating and capturing volumetric video, enabling immersive 3D experiences and interactive content
    • immersivetech: a technology company focused on immersive experiences, providing tools and solutions for virtual and augmented reality applications
    • LOOT, a tool for optimizing the load order of game plugins, commonly used in The Elder Scrolls and Fallout series
    • Madden NFL 25: a sports simulation game capturing the excitement of American football with realistic gameplay and team management features
    • Marne, an unofficial private server platform for hosting custom Battlefield 1 game experiences
    • Minecraft, a popular sandbox video game
    • NHL 22: a hockey simulation game offering realistic gameplay, team management, and various modes to enhance the hockey experience
    • Pixelpart: a 2D animation and video compositing software that allows users to create animated graphics and visual effects with a focus on simplicity and ease of use
    • Red Dead Redemption II: an open-world action-adventure game following an outlaw's story in the late 1800s, emphasizing deep storytelling and immersive gameplay
    • Tactics Ogre: Reborn, a tactical role-playing game featuring strategic battles and deep storytelling elements
    • Throne and Liberty, an MMORPG that offers an expansive fantasy world with dynamic gameplay and immersive storytelling
    • Unity Vivox, a communication service that enables voice and text chat functionality in multiplayer games developed with Unity
    • Zool: Redimensioned: a modern reimagining of the classic platformer featuring fast-paced gameplay and vibrant environments

    Consumer Electronics

    • Audinate: a provider of networked audio solutions specializing in Dante technology, which facilitates high-quality digital audio transport over IP networks
    • Cisco Webex Desk Camera, a video camera designed for professional-quality video conferencing and remote collaboration
    • Philips Hue Personal Wireless Lighting: a smart lighting system for customizable and wireless home illumination
    • Ray-Ban Meta Smart glasses, a pair of smart glasses designed for capturing photos and videos with integrated connectivity and social features
    • Siemens SINEMA Remote Connect, a remote connectivity solution for monitoring and managing industrial networks and devices securely
    • Sony PlayStation 4, a gaming console developed by Sony that offers a wide range of games and multimedia entertainment features
    • Sony Virtual Webcam Driver for Remote Camera, a software driver that enables the use of Sony cameras as virtual webcams for video conferencing and streaming

    Operating Systems

    • Apple iOS and macOS, a family of operating systems developed by Apple, including iOS for mobile devices and macOS for desktop computers
    • Google Fuchsia, an open-source operating system developed by Google, designed to be secure, updatable, and adaptable across various devices
    • SerenityOS, an open-source operating system that aims to provide a simple and beautiful user experience with a focus on simplicity and elegance
    • Yocto: a Linux-based build system for creating custom operating systems and software distributions, tailored for embedded devices and IoT applications

    Development Tools and IDEs

    • Accentize SpectralBalance, an adaptive speech analysis tool designed to enhance audio quality by optimizing frequency balance in recordings
    • Arm Compiler for Linux, a software development toolchain for compiling and optimizing applications on Arm-based Linux systems
    • BBEdit, a professional text and code editor for macOS
    • CoderPad, a collaborative coding platform that enables real-time code interviews and assessments for developers; the library is included in every CoderPad instance and can be accessed with a simple #include "json.hpp"
    • Compiler Explorer, a web-based tool that allows users to write, compile, and visualize the assembly output of code in various programming languages; the library is readily available and accessible with the directive #include <nlohmann/json.hpp>.
    • GitHub CodeQL, a code analysis tool used for identifying security vulnerabilities and bugs in software through semantic queries
    • Hex-Rays: a reverse engineering toolset for analyzing and decompiling binaries, primarily used for security research and vulnerability analysis
    • ImHex, a hex editor designed for reverse engineering, providing advanced features for data analysis and manipulation
    • Intel GPA Framework, a suite of cross-platform tools for capturing, analyzing, and optimizing graphics applications across different APIs
    • Meta Yoga, a layout engine that facilitates flexible and efficient user interface design across multiple platforms
    • MKVToolNix, a set of tools for creating, editing, and inspecting MKV (Matroska) multimedia container files
    • NVIDIA Nsight Compute, a performance analysis tool for CUDA applications that provides detailed insights into GPU performance metrics
    • Notepad++, a free source code editor that supports various programming languages
    • OpenRGB, an open source RGB lighting control that doesn't depend on manufacturer software
    • OpenTelemetry C++: a library for collecting and exporting observability data in C++, enabling developers to implement distributed tracing and metrics in their application
    • Qt Creator, an IDE for developing applications using the Qt application framework
    • Scanbot SDK: a software development kit (SDK) that provides tools for integrating advanced document scanning and barcode scanning capabilities into applications

    Machine Learning and AI

    • Apple Core ML Tools, a set of tools for converting and configuring machine learning models for deployment in Apple's Core ML framework
    • Avular Mobile Robotics: a platform for developing and deploying mobile robotics solutions
    • Google gemma.cpp, a lightweight C++ inference engine designed for running AI models from the Gemma family
    • llama.cpp, a C++ library designed for efficient inference of large language models (LLMs), enabling streamlined integration into applications
    • MLX, an array framework for machine learning on Apple silicon
    • Mozilla llamafile, a tool designed for distributing and executing large language models (LLMs) efficiently using a single file format
    • NVIDIA ACE, a suite of real-time AI solutions designed for the development of interactive avatars and digital human applications, enabling scalable and sophisticated user interactions
    • Peer: a platform offering personalized AI assistants for interactive learning and creative collaboration
    • stable-diffusion.cpp: a C++ implementation of the Stable Diffusion image generation model
    • TanvasTouch: a software development kit (SDK) that enables developers to create tactile experiences on touchscreens, allowing users to feel textures and physical sensations in a digital environment
    • TensorFlow, a machine learning framework that facilitates the development and training of models, supporting data serialization and efficient data exchange between components

    Scientific Research and Analysis

    • BLACK, a bounded linear temporal logic (LTL) satisfiability checker
    • CERN Atlas Athena, a software framework used in the ATLAS experiment at the Large Hadron Collider (LHC) for performance monitoring
    • KAMERA: a platform for synchronized data collection and real-time deep learning to map marine species like polar bears and seals, aiding Arctic ecosystem research
    • KiCad: a free and open-source software suite for electronic design automation
    • MeVisLab: a software framework for medical image processing and visualization.
    • OpenPMD API: a versatile programming interface for accessing and managing scientific data, designed to facilitate the efficient storage, retrieval, and sharing of simulation data across various applications and platforms
    • ParaView: an open-source tool for large-scale data visualization and analysis across various scientific domains
    • QGIS: a free and open-source geographic information system (GIS) application that allows users to create, edit, visualize, and analyze geospatial data across a variety of formats
    • VTK: a software library for 3D computer graphics, image processing, and visualization
    • VolView: a lightweight application for interactive visualization and analysis of 3D medical imaging data.

    Business and Productivity Software

    • ArcGIS PRO, a desktop geographic information system (GIS) application developed by Esri for mapping and spatial analysis
    • Autodesk Desktop, a software platform developed by Autodesk for creating and managing desktop applications and services
    • Check Point: a cybersecurity company specializing in threat prevention and network security solutions, offering a range of products designed to protect enterprises from cyber threats and ensure data integrity
    • Microsoft Office for Mac, a suite of productivity applications developed by Microsoft for macOS, including tools for word processing, spreadsheets, and presentations
    • Microsoft Teams, a team collaboration application offering workspace chat and video conferencing, file storage, and integration of proprietary and third-party applications and services
    • Nexthink Infinity: a digital employee experience management platform for monitoring and improving IT performance
    • Sophos Connect Client: a secure VPN client from Sophos that allows remote users to connect to their corporate network, ensuring secure access to resources and data
    • Stonebranch: a cloud-based cybersecurity solution that integrates backup, disaster recovery, and cybersecurity features to protect data and ensure business continuity for organizations
    • Tablecruncher: a data analysis tool that allows users to import, analyze, and visualize spreadsheet data, offering interactive features for better insights and decision-making
    • magicplan, a mobile application for creating floor plans and interior designs using augmented reality

    Databases and Big Data

    • ADIOS2: a data management framework designed for high-performance input and output operations
    • Cribl Stream: a real-time data processing platform that enables organizations to collect, route, and transform observability data, enhancing visibility and insights into their systems
    • DB Browser for SQLite, a visual open-source tool for creating, designing, and editing SQLite database files
    • MySQL Connector/C++, a C++ library for connecting and interacting with MySQL databases
    • MySQL NDB Cluster, a distributed database system that provides high availability and scalability for MySQL databases
    • PrestoDB, a distributed SQL query engine designed for large-scale data analytics, originally developed by Facebook
    • ROOT Data Analysis Framework, an open-source data analysis framework widely used in high-energy physics and other fields for data processing and visualization

    Simulation and Modeling

    • Arcturus HoloSuite, a software toolset for capturing, editing, and streaming volumetric video, featuring advanced compression technologies for high-quality 3D content creation
    • azul, a fast and efficient 3D city model viewer designed for visualizing urban environments and spatial data
    • Blender, a free and open-source 3D creation suite for modeling, animation, rendering, and more
    • cpplot, a library for creating interactive graphs and charts in C++, which can be viewed in web browsers
    • NVIDIA Omniverse, a platform for 3D content creation and collaboration that enables real-time simulations and interactive experiences across various industries
    • Pixar Renderman, a photorealistic 3D rendering software developed by Pixar, widely used in the film industry for creating high-quality visual effects and animations
    • ROS - Robot Operating System, a set of software libraries and tools that assist in developing robot applications
    • UBS, a multinational financial services and banking company
    • GAMS: a high-performance mathematical modeling system for optimization and decision support
    • M-Star: a computational fluid dynamics software for simulating and analyzing fluid flow
    • MapleSim CAD Toolbox: a software extension for MapleSim that integrates CAD models, allowing users to import, manipulate, and analyze 3D CAD data within the MapleSim environment for enhanced modeling and simulation
    • Kitware SMTK: a software toolkit for managing simulation models and workflows in scientific and engineering applications

    Enterprise and Cloud Applications

    • Acronis Cyber Protect Cloud: an all-in-one data protection solution that combines backup, disaster recovery, and cybersecurity to safeguard business data from threats like ransomware
    • Baereos: a backup solution that provides data protection and recovery options for various environments, including physical and virtual systems
    • Bitdefender Home Scanner, a tool from Bitdefender that scans devices for malware and security threats, providing a safeguard against potential online dangers
    • Citrix Provisioning: a solution that streamlines the delivery of virtual desktops and applications by allowing administrators to manage and provision resources efficiently across multiple environments
    • Citrix Virtual Apps and Desktops, a solution from Citrix that delivers virtual apps and desktops
    • Cyberarc: a security solution that specializes in privileged access management, enabling organizations to control and monitor access to critical systems and data, thereby enhancing overall cybersecurity posture
    • Elster: a digital platform developed by German tax authorities for secure and efficient electronic tax filing and management using secunet protect4use
    • Egnyte Desktop: a secure cloud storage solution designed for businesses, enabling file sharing, collaboration, and data management across teams while ensuring compliance and data protection
    • Ethereum Solidity, a high-level, object-oriented programming language designed for implementing smart contracts on the Ethereum platform
    • Inciga: a monitoring tool for IT infrastructure, designed to provide insights into system performance and availability through customizable dashboards and alerts
    • Intel Accelerator Management Daemon for VMware ESXi: a management tool designed for monitoring and controlling Intel hardware accelerators within VMware ESXi environments, optimizing performance and resource allocation
    • Juniper Identity Management Service
    • Microsoft Azure IoT SDK, a collection of tools and libraries to help developers connect, build, and deploy Internet of Things (IoT) solutions on the Azure cloud platform
    • Microsoft WinGet, a command-line utility included in the Windows Package Manager
    • Pointr: a platform for indoor positioning and navigation solutions, offering tools and SDKs for developers to create location-based applications
    • secunet protect4use: a secure, passwordless multi-factor authentication solution that transforms smartphones into digital keyrings, ensuring high security for online services and digital identities
    \ No newline at end of file diff --git a/home/design_goals/index.html b/home/design_goals/index.html index 2b5c1bca3..09fc39506 100644 --- a/home/design_goals/index.html +++ b/home/design_goals/index.html @@ -1 +1 @@ - Design goals - JSON for Modern C++
    Skip to content

    Design goals

    There are myriads of JSON libraries out there, and each may even have its reason to exist. Our class had these design goals:

    • Intuitive syntax. In languages such as Python, JSON feels like a first class data type. We used all the operator magic of modern C++ to achieve the same feeling in your code.

    • Trivial integration. Our whole code consists of a single header file json.hpp. That's it. No library, no subproject, no dependencies, no complex build system. The class is written in vanilla C++11. All in all, everything should require no adjustment of your compiler flags or project settings.

    • Serious testing. Our class is heavily unit-tested and covers 100% of the code, including all exceptional behavior. Furthermore, we checked with Valgrind and the Clang Sanitizers that there are no memory leaks. Google OSS-Fuzz additionally runs fuzz tests against all parsers 24/7, effectively executing billions of tests so far. To maintain high quality, the project is following the Core Infrastructure Initiative (CII) best practices.

    Other aspects were not so important to us:

    • Memory efficiency. Each JSON object has an overhead of one pointer (the maximal size of a union) and one enumeration element (1 byte). The default generalization uses the following C++ data types: std::string for strings, int64_t, uint64_t or double for numbers, std::map for objects, std::vector for arrays, and bool for Booleans. However, you can template the generalized class basic_json to your needs.

    • Speed. There are certainly faster JSON libraries out there. However, if your goal is to speed up your development by adding JSON support with a single header, then this library is the way to go. If you know how to use a std::vector or std::map, you are already set.

    See the contribution guidelines for more information.

    \ No newline at end of file + Design goals - JSON for Modern C++
    Skip to content

    Design goals

    There are myriads of JSON libraries out there, and each may even have its reason to exist. Our class had these design goals:

    • Intuitive syntax. In languages such as Python, JSON feels like a first class data type. We used all the operator magic of modern C++ to achieve the same feeling in your code.

    • Trivial integration. Our whole code consists of a single header file json.hpp. That's it. No library, no subproject, no dependencies, no complex build system. The class is written in vanilla C++11. All in all, everything should require no adjustment of your compiler flags or project settings.

    • Serious testing. Our class is heavily unit-tested and covers 100% of the code, including all exceptional behavior. Furthermore, we checked with Valgrind and the Clang Sanitizers that there are no memory leaks. Google OSS-Fuzz additionally runs fuzz tests against all parsers 24/7, effectively executing billions of tests so far. To maintain high quality, the project is following the Core Infrastructure Initiative (CII) best practices.

    Other aspects were not so important to us:

    • Memory efficiency. Each JSON object has an overhead of one pointer (the maximal size of a union) and one enumeration element (1 byte). The default generalization uses the following C++ data types: std::string for strings, int64_t, uint64_t or double for numbers, std::map for objects, std::vector for arrays, and bool for Booleans. However, you can template the generalized class basic_json to your needs.

    • Speed. There are certainly faster JSON libraries out there. However, if your goal is to speed up your development by adding JSON support with a single header, then this library is the way to go. If you know how to use a std::vector or std::map, you are already set.

    See the contribution guidelines for more information.

    \ No newline at end of file diff --git a/home/exceptions/index.html b/home/exceptions/index.html index 2c1b6ea00..adad13f98 100644 --- a/home/exceptions/index.html +++ b/home/exceptions/index.html @@ -280,4 +280,4 @@ exception id: 401

    Output:

    message: [json.exception.other_error.501] unsuccessful: {"op":"test","path":"/best_biscuit/name","value":"Choco Leibniz"}
     exception id: 501
     

    json.exception.other_error.501

    A JSON Patch operation 'test' failed. The unsuccessful operation is also printed.

    Example message

    Executing {"op":"test", "path":"/baz", "value":"bar"} on {"baz": "qux"}:

    [json.exception.other_error.501] unsuccessful: {"op":"test","path":"/baz","value":"bar"}
    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/home/faq/index.html b/home/faq/index.html index 7c6934b81..ef4206fab 100644 --- a/home/faq/index.html +++ b/home/faq/index.html @@ -26,4 +26,4 @@

    Exceptions

    Parsing without exceptions

    Question

    Is it possible to indicate a parse error without throwing an exception?

    Yes, see Parsing and exceptions.

    Key name in exceptions

    Question

    Can I get the key of the object item that caused an exception?

    Yes, you can. Please define the symbol JSON_DIAGNOSTICS to get extended diagnostics messages.

    Serialization issues

    Number precision

    Question

    The library uses std::numeric_limits<number_float_t>::digits10 (15 for IEEE doubles) digits for serialization. This value is sufficient to guarantee roundtripping. If one uses more than this number of digits of precision, then string -> value -> string is not guaranteed to round-trip.

    cppreference.com

    The value of std::numeric_limits<T>::digits10 is the number of base-10 digits that can be represented by the type T without change, that is, any number with this many significant decimal digits can be converted to a value of type T and back to decimal form, without change due to rounding or overflow.

    Tip

    The website https://float.exposed gives a good insight into the internal storage of floating-point numbers.

    See this section on the library's number handling for more information.

    Compilation issues

    Android SDK

    Question

    Why does the code not compile with Android SDK?

    Android defaults to using very old compilers and C++ libraries. To fix this, add the following to your Application.mk. This will switch to the LLVM C++ library, the Clang compiler, and enable C++11 and other features disabled by default.

    APP_STL := c++_shared
     NDK_TOOLCHAIN_VERSION := clang3.6
     APP_CPPFLAGS += -frtti -fexceptions
    -

    The code compiles successfully with Android NDK, Revision 9 - 11 (and possibly later) and CrystaX's Android NDK version 10.

    Missing STL function

    Questions

    This is not an issue with the code, but rather with the compiler itself. On Android, see above to build with a newer environment. For MinGW, please refer to this site and this discussion for information on how to fix this bug. For Android NDK using APP_STL := gnustl_static, please refer to this discussion.

    \ No newline at end of file +

    The code compiles successfully with Android NDK, Revision 9 - 11 (and possibly later) and CrystaX's Android NDK version 10.

    Missing STL function

    Questions

    This is not an issue with the code, but rather with the compiler itself. On Android, see above to build with a newer environment. For MinGW, please refer to this site and this discussion for information on how to fix this bug. For Android NDK using APP_STL := gnustl_static, please refer to this discussion.

    \ No newline at end of file diff --git a/home/license/index.html b/home/license/index.html index 4984080a0..3feaebf58 100644 --- a/home/license/index.html +++ b/home/license/index.html @@ -1 +1 @@ - License - JSON for Modern C++
    Skip to content

    License

    The class is licensed under the MIT License:

    Copyright © 2013-2025 Niels Lohmann

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.


    The class contains the UTF-8 Decoder from Bjoern Hoehrmann which is licensed under the MIT License (see above). Copyright © 2008-2009 Björn Hoehrmann bjoern@hoehrmann.de

    The class contains a slightly modified version of the Grisu2 algorithm from Florian Loitsch which is licensed under the MIT License (see above). Copyright © 2009 Florian Loitsch

    The class contains a copy of Hedley from Evan Nemerson which is licensed as CC0-1.0.

    \ No newline at end of file + License - JSON for Modern C++
    Skip to content

    License

    The class is licensed under the MIT License:

    Copyright © 2013-2025 Niels Lohmann

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.


    The class contains the UTF-8 Decoder from Bjoern Hoehrmann which is licensed under the MIT License (see above). Copyright © 2008-2009 Björn Hoehrmann bjoern@hoehrmann.de

    The class contains a slightly modified version of the Grisu2 algorithm from Florian Loitsch which is licensed under the MIT License (see above). Copyright © 2009 Florian Loitsch

    The class contains a copy of Hedley from Evan Nemerson which is licensed as CC0-1.0.

    \ No newline at end of file diff --git a/home/releases/index.html b/home/releases/index.html index b908d0012..443fcf4b4 100644 --- a/home/releases/index.html +++ b/home/releases/index.html @@ -7,4 +7,4 @@ j << ss;

    or

    json j;
     ss >> j;
    -

    v2.1.1

    Files

    Release date: 2017-02-25 SHA-256: faa2321beb1aa7416d035e7417fcfa59692ac3d8c202728f9bcc302e2d558f57

    Summary

    This release fixes a locale-related bug in the parser. To do so, the whole number handling (lexer, parser, and also the serialization) have been overworked. Furthermore, a lot of small changes added up that were added to this release. All changes are backward-compatible.

    Changes

    v2.1.0

    Files

    Summary

    This release introduces a means to convert from/to user-defined types. The release is backwards compatible.

    conversion

    Changes

    v2.0.10

    Files

    Summary

    This release fixes several security-relevant bugs in the MessagePack and CBOR parsers. The fixes are backwards compatible.

    Changes

    v2.0.9

    Files

    Summary

    This release implements with CBOR and MessagePack two binary serialization/deserialization formats. It further contains some small fixes and improvements. The fixes are backwards compatible.

    cbor

    Changes

    v2.0.8

    Files

    Summary

    This release combines a lot of small fixes and improvements. The fixes are backwards compatible.

    Changes

    v2.0.7

    Files

    Summary

    This release fixes a few bugs in the JSON parser found in the Parsing JSON is a Minefield 💣 article. The fixes are backwards compatible.

    Changes

    v2.0.6

    Files

    Summary

    This release fixes the semantics of operator[] for JSON Pointers (see below). This fix is backwards compatible.

    Changes

    v2.0.5

    Files

    Summary

    This release fixes a regression bug in the stream parser (function parse() and the <</>> operators). This fix is backwards compatible.

    Changes

    v2.0.4

    Files

    Summary

    This release fixes a bug in the stream parser (function parse() and the <</>> operators). This fix is backwards compatible.

    Changes

    v2.0.3

    Files

    Summary

    This release combines a lot of small fixes and improvements. The release is backwards compatible.

    Changes

    v2.0.2

    Files

    Summary

    This release combines a lot of small fixes and improvements. The release is backwards compatible.

    Changes

    v2.0.1

    Files

    Summary

    This release fixes a performance regression in the JSON serialization (function dump()). This fix is backwards compatible.

    Changes

    v2.0.0

    Files

    Summary

    This release adds several features such as JSON Pointers, JSON Patch, or support for 64 bit unsigned integers. Furthermore, several (subtle) bugs have been fixed.

    As noexcept and constexpr specifier have been added to several functions, the public API has effectively been changed in a (potential) non-backwards compatible manner. As we adhere to Semantic Versioning, this calls for a new major version, so say hello to 2️⃣.0️⃣.0️⃣.

    Changes

    Notes

    v1.1.0

    Files

    Summary

    This release fixes several small bugs and adds functionality in a backwards-compatible manner. Compared to the last version (1.0.0), the following changes have been made:

    Changes

    Notes

    There are still known open issues (#178, #187) which will be fixed in version 2.0.0. However, these fixes will require a small API change and will not be entirely backwards-compatible.

    v1.0.0

    Files

    Summary

    This is the first official release. Compared to the prerelease version 1.0.0-rc1, only a few minor improvements have been made:

    Changes

    \ No newline at end of file +

    v2.1.1

    Files

    Release date: 2017-02-25 SHA-256: faa2321beb1aa7416d035e7417fcfa59692ac3d8c202728f9bcc302e2d558f57

    Summary

    This release fixes a locale-related bug in the parser. To do so, the whole number handling (lexer, parser, and also the serialization) have been overworked. Furthermore, a lot of small changes added up that were added to this release. All changes are backward-compatible.

    Changes

    v2.1.0

    Files

    Summary

    This release introduces a means to convert from/to user-defined types. The release is backwards compatible.

    conversion

    Changes

    v2.0.10

    Files

    Summary

    This release fixes several security-relevant bugs in the MessagePack and CBOR parsers. The fixes are backwards compatible.

    Changes

    v2.0.9

    Files

    Summary

    This release implements with CBOR and MessagePack two binary serialization/deserialization formats. It further contains some small fixes and improvements. The fixes are backwards compatible.

    cbor

    Changes

    v2.0.8

    Files

    Summary

    This release combines a lot of small fixes and improvements. The fixes are backwards compatible.

    Changes

    v2.0.7

    Files

    Summary

    This release fixes a few bugs in the JSON parser found in the Parsing JSON is a Minefield 💣 article. The fixes are backwards compatible.

    Changes

    v2.0.6

    Files

    Summary

    This release fixes the semantics of operator[] for JSON Pointers (see below). This fix is backwards compatible.

    Changes

    v2.0.5

    Files

    Summary

    This release fixes a regression bug in the stream parser (function parse() and the <</>> operators). This fix is backwards compatible.

    Changes

    v2.0.4

    Files

    Summary

    This release fixes a bug in the stream parser (function parse() and the <</>> operators). This fix is backwards compatible.

    Changes

    v2.0.3

    Files

    Summary

    This release combines a lot of small fixes and improvements. The release is backwards compatible.

    Changes

    v2.0.2

    Files

    Summary

    This release combines a lot of small fixes and improvements. The release is backwards compatible.

    Changes

    v2.0.1

    Files

    Summary

    This release fixes a performance regression in the JSON serialization (function dump()). This fix is backwards compatible.

    Changes

    v2.0.0

    Files

    Summary

    This release adds several features such as JSON Pointers, JSON Patch, or support for 64 bit unsigned integers. Furthermore, several (subtle) bugs have been fixed.

    As noexcept and constexpr specifier have been added to several functions, the public API has effectively been changed in a (potential) non-backwards compatible manner. As we adhere to Semantic Versioning, this calls for a new major version, so say hello to 2️⃣.0️⃣.0️⃣.

    Changes

    Notes

    v1.1.0

    Files

    Summary

    This release fixes several small bugs and adds functionality in a backwards-compatible manner. Compared to the last version (1.0.0), the following changes have been made:

    Changes

    Notes

    There are still known open issues (#178, #187) which will be fixed in version 2.0.0. However, these fixes will require a small API change and will not be entirely backwards-compatible.

    v1.0.0

    Files

    Summary

    This is the first official release. Compared to the prerelease version 1.0.0-rc1, only a few minor improvements have been made:

    Changes

    \ No newline at end of file diff --git a/home/sponsors/index.html b/home/sponsors/index.html index 00d647531..6a15d1e40 100644 --- a/home/sponsors/index.html +++ b/home/sponsors/index.html @@ -1 +1 @@ - Sponsors - JSON for Modern C++
    Skip to content
    \ No newline at end of file + Sponsors - JSON for Modern C++
    Skip to content
    \ No newline at end of file diff --git a/images/customers.png b/images/customers.png index 3422d388b3e034c2268c660f06b71b48f794e165..acba03498268d00104be00a8e75d35eca2ac9764 100644 GIT binary patch literal 1020636 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 _mA75@hk;oGAeTNaJ}NGO{ccc} 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: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 z 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%0AJ}NY*H2%W_@km=>K}MX7z3#WVBP2*(92j2&Xyn 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

    l!Ea@8; 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

    USI z#c*Mm()X_&JYX@7b&PMqCU^E&BrHguJ>9hFsnBL#Cu0STtMHP$U%3g6Mq3I4r zl4I7GxgvAkbr(;XH;YoIG>M^6ED#uVBc+}%x#SW=df)x-ceA%*E5y_Q3zdQ}9UMM< z_?NnYG+esP7pxOxNXfk=%=f?l{o8K4O<&rL9!p}7uyrHei1oeieGiQpC_GH%K{E;7 zamO9s_{KNbbHP4l5=1#9GEWEw$%wc}3$OqJT-yKnpZ`I08oPuA^uY6*-~1-;I<8!~ zl1(dzz63_P=)i#kufP8KzJ2>-3dA*t8BvSgrA_U@FbZ%{O37YCQv9ynOrK=1X~t=LILyAzUAZdo<{y*0)_JT5jfJhT?a^nx zP*-(b*2;h7f`xwi1#?dbHz!O@L?>n+M)(GlV;EU1=FS7N%XuV2yuk|-`li)0>YH2d zdhX!TJl~EQ|0VaWe_xsFBbP2*KC=i`saO_t%OHi2G+4zvEn1g_O^tXOS3k7vESix% zVbBf2urBA^zD7bL{D79u#xh{Q^aoH3==5W%QtSr-+Pcm=W?Hm!2+t`rb39tQ_U{+7 zctu6Uq)C$*Gzmk$!on3ECVsh!VkLwlO956|cDs$}Fr6_-Z?S-2!9l(xNERIIlRjQV z;S)nFOh1H;gcmtdy2+C#vm9jMM=4}3yw}Xa?!zDcFk}-zCvCK88;SC&G{*=6GnF8|aozWMOO54N!>d=lZNdC% z(viLL3=$k>6j98<8v2*$Vqx*lVsh4!!tJ%EKJuA+KJwmWm#$qBb|#)*zp*SoXI1r_ z=C;=96_xwy8aBNC2A8k$GSHisIN8$vw=FNuEU!9RbEHtSTv9#v<;|~d*tqqbORuw7 zvLF2GvyVNrW!i#LQ-&)L4x3pXaFf>**}nN$YD3rBY294hdRlMFv(YE*>t1Oc6gD4Ww+FEQ+9DB)NIN;E3 zeJv*&9Zq{REHo*~5dDsa@LbI>l5!Ifm(xMdIjwu2p2JxCLOM(koJ@pmvEMg7wJUu5 z;*2?EzQWW&Nl26FMG_%}aI`*%=_O$_V?5l`cI3(M8^KsaFe9W?d1^Uz^^xIZ`03Wy zi_L{q*`>l$1Qf}Nfkq??h9Zv)O}uZ33^r_N5om0f(xp`mn~!T86PvAqEb5y#y7F9; zuUt^Mq8iO1Nz`ZQe4JkCm1Ruv5|aRi)<}vd&0%cT`MaZCUUo(d`-uATxXuSZ_(7i4 zfhrss@G-0kWV6REyRdY@j=_;_7r$({m=SoBMoRMb+f%wQFoGGDF2BBQ1Ri|&)R3um znLK5o>`(x{KtaF0ZrwUwGT5_c55>WY5)l|*n9j(0r_zEu`$Rb*8txJV9zuZs4%?bE zC8|au|Im#QURp?>4Jp@lxntDLYlJ>&o}?TIb3}wC;p9w3-{CHsUipU&TWOJdYw8Z3 zteY~ibp7swR=X?P6rMY!k|;=SAug@=dsBcXNjrItb1O?S9Oh=fRu@ieJ$zz~&VVL` zhV~#_$*RJ@<`>v9JmSIau2cr5Gh?Hq#W3xSitKhonFjIPKJoLV{zrpN~S}RTgIj z0WpGG&^Tw4LeNMzvx~m`^2^ZP_5AZMQ@A}lK_yZGXZxhBRDx;%2HT*e@hUh+se zH9?9GKB+FLc2HsgYPd*{jnBR;a?L6u$|(J0Arp}q^+QZIvSqA(AR>3e5Eue5z1B6s z$i3IH^cAJoz~jh~egeDM>2}?ClMr0R0Kyq_pNS4oq>!1BdD|@?)6)~%ewr2T@^h4b zh3YP`;g%v=&>$8Zeb7MFch-KA=O!#UPJ3~6;s5<@%l|#M?LR)SdeMx^mQX`YD3Fnr zXA4FePwfaM+TC_nQ~+kRI+L-0KUCXz;nZ0zp_U*1>i-s$EV^awC$?_h_TyjuF)Pxc+jLtSL(Hw z4L`eXDReA|Q)<q-WT_T*YA(kHd_+m_Ny0)yXT_u_h@qTk#I$)hk1{v+Ym=k zuug_eP4@7wnjX0%zHpvriqGNgHY0?>A@0(*gjy3^!$%TLkJia3NX>jy?K03F#`KHkvYikZveB@1?CpCcu9v2!hm-DhUk396iaO<)cdsdo zoFn5ot7vu^2m;@A*IoDDf4@AKOkH(%t0_L2&@poP4gVT_(CByKGc{IUG|M)_FM+%D zseYnJ8i<71p9#ihHZ`e{w)?}VO@_aVDoU{hCcBvv zi;J^d$D0Eon{VTRW97vKFYZ6gN~L;YNq%k)Y%Nw$$ZH|^uO+Q$W*~|zPH|4gg2_eC z?Kr}lF&lU7Uo&qeUT+;asllZ;B^FG~r-IoiibE;gi0n*4Pz-*oH?Pur`B$2@KVsVO z-^h?7Mrw*Y<)6C7Q&OF<@LUHs4dT|eQ!-+=Ux{Qq(8OIbEBk(TjvUKnaj2Yb;m5)! zAV3zBR~P2qeR;;iI~xDEBh+Sb#QZ$D8l)$+XqMM&W1DK*OriFo4Ev;lj2ZckDcQD? z47<;113?`{iKO^t+!lI)bd%b&3>Rqula7h5BYsB|a%>7Ek2FVi)dhDp1P?R>8WC%@ zyAn|ZX)TsO(2AO!Ja9kx=11iQ>QY!eiHACp49Bdqg}9@;k;8kv2fH? zK@P7Npv|<%a))F@kLqpPKfD|U6D01c521IXh$EPYESQ#g=w!>+KlZh6 z{{G90*RFhY%gc}LJ$Pwp)smUhW+$pP?%aK#xdEnfX594dnTuVS-p8JKvgu&cO)GD1 zX^Z{fr+?V7qh|KxJUGuN_vn##4~O1LHkj7iTf70>Q1!@YQ(0L_o2Tjr2%X{$J@jIZ z%8HAHy1z z#%(XW%BnPKwZ_7cn0#ZMMH#m^xp_wg$R$06!U+0Uz?zexC}*E2ku^Kxw!go^y_q&m ztb^pTR)iv~Sm(=sSg6w8fyHFabeNyt6KM{aFPh?dY!^ysqHL{1IPqKv&*t!GN@Df| zD@x`>DkE>mn6AycQrBO9J>pu_8j~s6LKGJ69b@lS`;3`f3__zN(N4C3sZk5~X zCL!2l9NV+73B2-JY_IxHm}6$x*6?jPX(r@=i+Lk8 z$-|XX50189Mw zqn|{E=B3XYFreiC$U21R+}}rzb@Akh$KTioT(2KGQJR_&sjVn@4IGB}~!q{K*xBqa*p#ECn8Grd@OLp1a_4be8mVghg3XTo`piv3MYo zXbvap1BsLV*wL2Ap{DSO_9#4Pv(-giCZdRvM@_LPY;72o=5YJPMag%}nZPYi5~HqV zYpHJ!A83p@&Gt3r*2=hDgYOW=I+dVkBrRmAHn6TpML47qpeJHpCqxx$7@?n#p-5wT}@>Buki^Ssrw&px|*_il=VPPEmlSF;EMb3O^stKq$@g9i_y zx3r?7A~kVor`G=Z*T1qbrN)U4P{0K}uva*%NDYrKUb1wwmi6n`bLs$N1*r|xxuEkT zHFp^i{dbQ&_83v15JLdja=0=F}gBIxnri00a2}7r9_0 zM0BJ6Tdx7{KnV}m-{Z0iex%Nr98y|5cJH*J9x=N4!Gkw`a`L7B`^#2G^tb+7f7=Suth*fqnnD|2LN|T3fhk(hJXQ`2BCzPn?}Q zYf3>d%z~?k=b4ts~KVkFByOx?+l0#B+ID z1k;HmzG#Y?=5q={M{O{X8wuW(TDWi_YAB`FDF{Hu84-8}QrQ`CF$`lMOy~OgdImto zRbp{3hZmNN0Ln6&2(WXa<;Yevn)wbVuc42)!^tf@aVxSi-mIy&+HI^9WpD49uAJlO zAn{_e2zZ(OR3$9I~7`kgVql5JM$b?ju4r z3(ZE+2ul=!;L?l+9 z9{MI`gnXE$<;cH8HylPH5Y0n*EZ1vmYnd9@b1^$`uFL^5M~{Sp3Cj^C^oSLeeurj2 z+T>FIU;gD^IPjKBbRq)plqpk)D{$^%q$8V=-~ayiti5Fl5M#XT*DaO|!0d)%YwY-9 z;8vr?khG<5w@hT&3HG56eF$}7ypizalTV^!N*0{J%#xIvZ30qC%zf;SaFmoAN$L5B z!}wXVX8q|;e*!m{_y|a$)r7fK?mj?I9`nl`gxoY4DU7rQf`J$n9CCHTK3SFm;8)C? zy6%m=iCARY;S&w5trjirO@tOstt0@u0e+oqsD+Z4sGsf|(%U-?P0k_VkRdCjRU_nS=Z@CKuyW_**G zlWiwojz=PK|EWmpNrzLMa|3T@IwYz^n~x>@HQd^0O=#YtsnSay2>6kI9l^)iKeR|e zUsB7<@O)&M=js`45ASGr`d~6>@zAQ1QI7wR#0@9nLQtK8*ZED2VQptKr&b)y1)W;V zYqR>CR-eO?;k0@kCbwOv^R}6-Ho*-QGi@xPMH0zyB#su1rckskoM;Vmau5lH;t@pa zsJo#&;RO#`+jPR;p0pR5 z8s4*5?DxewWaP&yG}OGZyT06l8soslh4FXI$n998TCA-R`>ThWE8O;{cQ?GNp|v8{ zr?0|0n~L5Ppc5*kF`8i5>@+(BM@8OcB$jBVCNnn|UfglA%4vaA=FuNYW?P$Z?Z(-F%3p=0$|t@FeVe81qZ*xO*KTMd+F2~(B0 zG9ppVnA+h-lpPpihM!bFDUb`rY-nge=?9mxjgV*v<+*1L=RqlT(Z(m>ApUmmz4sb{ zA@VC<`O1I%$A1_uhDD~&CmQ0A3qZ%H;l&E_YhU{sYd#~4;U&usVchKFavZNkS5#C` zSq2(13Vd^Jy)`yA8WFL;)RwE;R7c1rE{j6ezE3~>bgCD29vk`hfB$!*q_T`K*%43Z z7E*qqUH}HP4AyIavFQkC)E%_-1U$V2%LX&ZTnLuhz|u=eS894!o;)#6JR&qi!(8jM zn0B6Qu)Bg^|I0f|7R}tcb33R1S1x_q-lGR9J-(^4mOgcK|3h0hFFkVLrpvE6Qg{5< zfBsE@so;HAfBe|NnlFC+=ZGFuFPadF#Dv-nv4!ttVCkCY`yfwD`N?=yd5Q4vC4oMo z4bEAteN&bigNr0W$w4wTE-upGi#y%cNDcQ9t!s%&hR@EQk!h;sP%t`wn(1vzt$%tn zu=Yadq=^}+zWvzeS0py>4KA31Xg57b?A!)48~3)i_`~m8ne)`%WJ#8|sojqOnSOlJ z>&3vuGv`!tdKWAiSaKNkAyqI2z!U-j#D_npteBldh!U;U0wb?5r=eZ-( zb>}9k_nI1;_?*$uayE-Xr*PP9l{pzl!ig5~8X+YRJ=Ex>Mu%lY^LjlwS`-E%u?+XK zN&PVLmO{rAg!cdwJXeO;D1{fC2Eh%9qncUMf}zkW@wXPXOfJnVhEEL}R_f@uBy;ih z69;P@ElAwySD;e?>!3;E6OAO$Wq@7idM2-=SzdCM%$b46*T+gRUs5STK?*bs6lK`{ zGEdkr(r|2vL^z|R$<+GfvzBLHXpKo7oT&bT=bV5u5rt`krUh6OaNUzyh&$W-#?xzuI^aB#6$Ge;9i!GMmlnG%%JP>_(F zQ&#ZO!Q)A*XUFmSm=_jxm)(9Bx<8Ws=Ug zQ=H*hOBOZ1^?S|i@Ypo}p_hFHRXnh!N7u)qM9gHd1rD!wTP=ZvtvzE(Zm~F8kVd3U zztcO3a1ni^V{p*()HB7sgD65HE7Qp$mr0ELFPZD57sM51`aW`j@7h^`7Y{bSa5#Ll z-5S$u5su+HbQL0_9_HLioc)PWBHnIJ2Evwl1Se30EQU`81C*lBN^NnWI9mcN%Ew4e z*+gd+hIHWg!{82CB2gZmjawPv8NO`%Z?_??mvH)`mzG*Dosd_VFIL6G;D1?t#1}m1 zMBD9$vp36$D+>ruJ)KhJH{J9-9Wo~nOd(&+nzGB+MLV1^g(zYeFZ{Pdk zONUyYY)`(m`((xP3^9-j41h&6axqq;G!nn=sAMrfbdcxYCtz`+{kV2uYUEb@MIBH23t}y;F57+H2>#+{wI#yP`mWf zO9_K;G0Ns{x#bq515ldQEf%>Dk?`n~<(C@gHx&?Rr<$Myy`_*XualDwEE0MB-v}=k zf4q>!5e3S=q4U;TZ!Iq`=Zz7B9scl#KggA$%#n;_Q(3-z`7eI)3t%A_>}hy3@M|Va zm_T;OFBrkFj0+<{;BqAr<^T0x|3zVOF(5LEK-uxaNEa+d7`%X&PmD~BFft@AGNk^Q z{K6N${I*q>TzS={(pP%PC`LqSAwhZ^je$PMT~3*DYWpz=8>U6_d>2fg;4mY3B$id3 zMI1O`JKX0JwePxY(wdvEXtT!t^3u~En6=nuHT~fJdtctM<+~sK*Ya8A);-&9o;|m? zu<%b0J+N)-&g)j*VCS*HKRo`#<9nu7=NDy}{Jb{8BGSyoL-070B`=6M<1GtkRYEa9 z4NUh?La;R&O7O8BwrAxE&{?o2wbu4XUbgGqS6Lr=s$u(n-_;kpXxMNPWB|GFPAwi$ zP#9gD8=qOKd7L6)woyId#{(~^TDq|<_QablIiAF|OY;3;)UCj7h}%#=CpbAhDy|o& z)cn(Lm*X1}VO*VN-b5yg>mZD8470Scp83hH%FPlwCetM{Vsd|;_D0wXSNP`{y%wfrDS zV@BGMn>KwGxGPKXfEEoAj)~3Y5^LkM8#y~brB0tf6&JYzmwDkX%Af--0}qJ?5;RgU zB9hL4)yG=V2oC{7!5A*77LqdPm+pKrc@3BaVT_0bCVhk9Zn)#v{{mG~CCexi=?gvS zn@ag8*h5kHl>#56v&c@gr9>jf=b1mT_~~6oES4xPu$+VNstpPG)?8xPCAg3-k&kzvY z|BS~R44UG>q}Q1@2N!42?3SzwSM%O5O89sE!9Qu4CwG!SMvn~lIb63dy!}Dsd+iyy zzG-WD)CmnYCe%TT-UZiH{F*F+M45$%D`V^Q$WQr8C8vIlrX65)f(1kc8SZz?bze0z zy7gG|O9z@?KN$;HeH1CmBZV>j)ki23#EbJfgq6ixHtZ+#VTC<~7*yb_>NAuW9mF~l z75W5`O9i2cTfciJjur7I9u}+JheBj;v~f;WWj;ZW|ZcQ0{2-oF1^0CAFkV7+d9>ytt#_PD9oY4?Bdu!l-XgjE}TB$!R?#o zdt9&W*uQ#FmDLW5GC9GNbR*`i@3nO5J0=qlbeUoqwq$)E{%`j_6EO*mlT2YX@%YNb zsUQF6&D#&R?{A3~yTTVv@J`InuxJsBcy1i<;srL_vg!FR?5~~gaK5trz=iWFO&0CN zF5J2L#}x4g-)U?T4bw^l3P;49cB@MNdc)% zjC?)~FN|y(u;4M=8X+kh(^YQ8fKC^ZDxD!CKs%}HYm_@ys> z3GVZaH{J*tMn>?^VV%n>b;h!i@Z?xoSqV#&q!@x>J<~jHz4cb97X?QGjIZV)simaM z9MI3FQQlOzWVw1R8g*erF)T(%X_3FBWkuOJ;uM_&hTCtyeg6FU*ku$WqO{P_@OtEt zM^K8wfrk+cOL~o*0V^gHPOr?{vcH*?iP$a?Z$PRp8w;%?K3iR z>l4A8n04*+>RaCZ-o{8^(}wj|&0Ad8)_l*szgko=??YF9bj#~Iethqra|)c*3rm9G zXgtRHPpqf(dH75wW7az6q-}Cp&a^6V>Ge#K=&i7_x@qBm{No?FW=p@ImNB?vQtf=w z*L3F&uhamfO<);7+GR*13XbG5b?Q{QVQ++_*{!z)k6r_`Lmj)^EZZ$N7CrMy(=Y!V zT(Q72o8_$zs(vVQTGtkG6q=UlH5KG&b{lUKv2HsJeq8uZI!5E#D|`HhYZ{kK&74{$ zx&SX|vuO}p0wRgMMw&}{X30@IbU^f0aYq;m) z8F_Sm3J={=1n6lb`|5Hy-Ag_lT8v@`hI18I_|poq7ECGEgNQKX8w<6zJpEO(uh=o^GHXti)d}k}nFuxp_C6AL z?H+SH=0LtRV^Ur@I|by;9U0XhFu(j=1cB|*mgXnFU|IYLTgjq?&5ers`0>|THvZfa zY;ikmjjrjXGuP_Gh@B(LRx}|nD%;Uk(X=a^k&%oD_L=x&^=kEaax0?kry|YAY~BKm zG2NFRZaro7gF;SyEA&+xcD#Z|VugGl`3)Vi@^VlIi%?wbL@a9&*q_8U7<<0TYvk#_=aM?5vA4 z)iuX%TQ<$>u%S#J^7KlLQtPv-@{Yy*?nvZkub#MR^{iP{6Ya6k(T0XouH@UJE@X{T zS(dO)H#gNykG90L1m_htaeAup-WQ{<&u#VxV(VXhD;aHgvAON`OIC1?o@*^YCr$rKkb6;cp)j()>Af&}Y`3_6D-SnHwO0K>9B9zns zKPMq0gN{g*E8Vx;a?9_2_d9eV@u|bonVVi`T{V?bp*V^%bs7OPkBDyE2)`J`dh$~M ztZDGae)-E^a?u=vC?0B;}S6)Gz#8p>ag?uag z6qu@Po8hZsh)8r93mzOiXc!`JzEJgrJQuHK5tw8N&o65oOnQ6HkV<-10t4oeBS#o$ zkbnjpEIe1$Dw%0O39=?((PcgA$IPHJ| zP2-X06Gj%}!UFvi3W;(IUE`-e{V9_N>?clZI1KphZ+}b2x%19D=}O46qwtPu&C1Gr z-}~Or(E_^gP+fw`KhAj2tOuk_RBP9+WfFofPeg7ZaFDZY+g9GO`O=rZ>~y$29yim{ zU;gqJ@;Co3z=NzcF%h>%^UAW{I(nqKa%xF#;S;;I-n;453ri~|PMx&>;J%WKthuvi zJ@?!bbv4b`UwjjfN&oo!f7)`WZq}6iSe)x}NR*@)mQ-hC7`$wz_{Ga+xwzPvZr&e5 zD3y|`f#-~995~XI}uH^bUi613MSd0=-o^P{Y6E+FO$wvsTi5$ z-{AA_QB@sL4fhUlVGo#8C^xICQZ@)94-(;xLCgBA^PM#79MxF7?X zZb7cmm?o4mO8r8yWHH#6Ww-eYcRyY^0bn|st)}d?1MxYw!|nQrU6G| zF_hb;#M3H@awZq%?W$=$Qr`#%)L}_pxp1!C?nJN}4VZ!jisI?o?Y`D+mgY?-cl|^2 zmRdZ8wpb+IdfXOoG6}&iTZ6g0VCC&DtIjgjw2Y~18te9Yjy}-b8n(6^_doMhb^)-v%QBi!^U3Qy8h(GI#Iy#3fZWF3GwM6Xo|99%OpK(?rNM-S+#r#F9 zO0W7FPwh4Cd?I`16>U2n_LMKJ+w*+E%1`;S3eMt+R3}i30MH5TYT#wYl!Re4_Ot320}=@IhI(y&-%_?8#=I^DYe>)_=>n{^aqpJm3PM39uwKE8U! zZL21u%BUeLe|K3h=41@MtZ!B+==|HXo)6 z(kfg=_J9<;002M$Nkl&loyw zD)*UK=QyVNphKw{!jMV^3dxFsr_Z+3P+1Q>^bq5n94JYLF#H}o zco1dZJP(2n4L)fPMzs>au&3sWqa>A5NOx)B*C=CZ_%UvmIB?zZq>{>^WG{m3Ja-EhP8FTM2q$&-oP_sqzVma&6H0$YYmr~e&StbTxY01@mH#E9ZJli%Y1OWq@m!_zl z)GF(XG{$*k*k$0eSc83$cb>TGnh}!R+i&LyGf@q+#6HI{_M})W%qdHgUn;MzA z7O5spK8tUyWAV}wcD7Q8cw{o`A1qpPGU=|ESn!>%HvIJeT)TGibYqOE0=}^1d&r*I zSsQY>L3fZecdR}LY7);?^=|~zpDm1*M0WIK(X55<7T3iFe~#XN;>!2@KtPPd?ZJ@U z=`xwQuO`+r3>C6@mgZ*8EY06^!s^iCOD0c50G_=yElw^BP$gq^I1(m{KNN_-Y@-e9 zqK<^InyuBP`Fm=cY1I+4R^YN+xkQ`^(OgCHx~PY*Y;ntyZ?tY*XAf@5OxBnKN6iUG z*k*~5gDs~ae`VeUAM)gs=-g^ziQbU2;^XyObG0{q<&8J97DETGGtz)&^?=Q4H95m* zMoxxf`=5zTxy0(qBs_-bnkk&)_C(P0OJC8Q=%cX0eGaEkew|3zGD;n}Gi|;SE-nQ2 zKV^57$pL*VtY@HDk^#12gf(eCm%W<560vM<4@FP4g-*7HPPNAx{o&?7s4Zk_PUHrX zyfqjMMY$JFnG+6+8GR|4rjSdEdK~sFkE_6A$#**od>KVqFi5+Y&SD@U8jo7+*V4h3HB84XuO5fneOBLx+%1Mu{kl6t-6g9dj8SN4De$czycz+w*dBd0rmF zMjJ<@yV(09=EVjdrWtxKc?m}J8qrxhGz+13l%&|9BT@$U8E!S4F@D)05{6wldUmTGmgvkT%1!*?)tRmlr>>9CP??4_VEkGy+bXs6kiJUnCw0;b{5}3vG z2QgM_8r`X~vJw@;u$4D#*nr$6qRm_xz)^M~7?i|WV8H^$DV`&c`_Ng0To!m+?*>2>@McENVxNS>4=a z7|GI=0a9ZP)lN$wcR4QinvrZIy=El6&iU$=1!Pu0=$J+h&zJWbIb+zmbz6CP1zMpw z4*lOB-Oap`m6iSZ&)!x}L0P&R1zd zJX2XyQ?p{l3NjsP0~kzrC}$;_my`R6cVGOi|9eIZ9BdTD;Gv&|_mKq8)mK#I{Q1wX zzSo{HYsRdjClAymS|^uJnO!lZv8nEFe_Q8C=D%m{hmRaM@yWaHC5_n^6-6TK&5^Lx z*U^0>J7{M{Aw*KFHgn`d*Ds$~R!ST0wS^Bl!QKPPuEDRg^d4v!u99ZXiex7pMoPnu zipo5(@)m12#wsjKAQOun6N`(Q+G5-HhBm%YzhRTx61LkMccg~_pJXjqh-BLQwU z42e2o$-!huu~gvUBOt_eSi`VskA(L(Xt({PzEfn02G+}R1>d%?cI`Ct2bbl-Gn8BM zGb4jmO_N@?HLz}H*lA%-*LSYHr6t;WQfm$+;#_~$W6>*6aElp_ODfrm%d@>(Ya1Ca z#AZzxv9aW8v=#~!6m@MrrQg~99r4jd-&MmNu=v~BUr279*qUD#X9)EvZ5Mty zAcRrHu&w7T|1mWs6JAdNqC=$YDw$)pyWG>RLyk3pE_J66n;lcD8tSAIUO^az0Zgyc z#$Q!_hq??wb0QIqo1$Vih8f?nthI3i*kZDqlgLnTiXcHq{q20-P-M}OO{({pu~Tds zASyWi^1`0_x?^s$>84eSav9=et(V%kesRjqsn(ZnIT|lv%MeC3A$TJ+1k}v3H~;jfKaHf@S3u;TI!+D39=I?L5?0f39*7b?ddbtM7r|J@(X#ho?=+Vf`G4=wgZbcCz;r2kXjwFLtrC zPY#|hn347I_gzQSk!Xq|k!G)@r1A9A(Rz)NZbxx1F4c&>E%*Z%E!$^Zxq#h>x4AWO z;#9JsHFWT36dfukjB9MOA2?zA=Y|Heem%zL(mZbGC zB-}T*E|rqew^MRRWd9;IBB!q}dlDl8>&r)hmojGq0dUvX?^FcxYo>-!m!_#+$w|gz zHeX(Ips`oqAv%gmZ;d4V<_vC}va^NZAo@%n1{M3lho+)87L*amfU*ho5os(s%f{|= zIVNO!>f++&9HoL#3gUIx3#>w3VcZoeJwU@Bh-(p3@ZP#dEDjrw7AD)o@XmlDxWZ{Q zVwe)sVGP_eOxagD7B4TEM-F=XN^@RACY*s$U(FU?ae4NN3y!b*d-#C|Gh13(qY)N1 z9D2(JBMOjW#1~KrxHNHLUUHp92iK2^(ANsbJrO}j)MB3)-3lfuN_Z8S@UfywU zt}C?GKIx*CP4~L%-po$!J-F=w*VIed_1PTmyy>e`LiKL-6;YAIQC6AslBk{=pENo=Vf@^ zPCJb*E7NnNDe%J9qYeI0b|L}ShEg=Ohw4u@eB%8V{p63&XISGaXHSmClN+`l`RrBm zGBP|FF2NIMNAhXQ?mKV2{GnG4J^jpv_g=jU$0PND`r{{IK(mOiZw~zH-`|`!x%h&a z6Sp3yz5S7Gm(9%9bO!V*dyXzD$)CSq5}C1FW=!9A@Yru&JNVD4Ymyen%WoaId~p>i z%&IIlyEE_k$L2fUUR_?0t!dm97+{eG4MR1OxdBrJ-51Cm!^=Ya3%(5+Ij|!W#wMDr z7MpiAkFbMjE<~xQs34=}=4Q@^kj_L73>GsiFJlm3CBudt?X{8~sm2yNaWT?SwmcF? zVhpvM%tY+^|Ni&C<12H-LZ&iUWo0Fwgn_-r2469tC5GzvTtL9+5)_8!E?Yc~^gTF? zJiZBUi_69Q!gi#~(GLm9K@iGoIK6>w%6SoTpmaZc=^JzsdLy03=s)KIOhYUKI8c1a zCjv}~YR@#JJ7-*Y!GneY{oU_=7ya}|*BZl_5er#b&gIY-jG~Oyt2@>Qg(nC@v-C=NHbJS&i3{C5t&h#igpMQsU3l#UTOH2}h<} zt9j|Am*74#y&>9MtgDJUdGaLk%S>RLNsu7y=HilK>V-22P9_LU?ep3s%Ah$c<%kI3 zYqX7j@{^xLL>fV9(kCf$q+XD|m+Wso({3P1ie~)Roi}~tOZUC8uf<}HAQmkab$uJw z*$%s@dg;U`w$}gs;h%i$)|IO+S>bgRU$E%vjjwF}*>7LWDafjxULYhd#MWD^^wMES zDQRZ+shOq}n*RGsAEqU<-cR9grX!QlN+W%+42xn^#f8KL(yn`mGC9bj-o&m-=dosG zn6rdfK$oydO=J9#S0eAaq!(#NDn)J)dQ^>U3EUWfS0{s{t8EMmgw)6o)WOIYM7td$ zm6%HZ`D7P^l&B?ru!09|ii<3)lZlqd5HugK?}p2eto;IbRkf9=`Csy z&1y&_oVCCcGQEu_8=WpsDB!11HoGGc3g#DyIdm-b3t1=q&S$+q*imD>`1I=}qUp!C zi4aO8#PBJCk3f|(dZL5YVv1*&GB2|)US2A=&pOe4wZVSrPPeBRLYX<(^JipKe(?SI zYgQls!=IAt9`*1L$av(U{q8k|ug?sc=y5=yi6V)ArY!isVNi>=O{ zZJIbGd&d0I>P7C!v$6_GItV9))3|l%E{{s@+(kgNQ`rJxOQm#G8l+$+>t5Zqel$#) zEsa>TP`%fQh@$6-|DV|W*5liDaW5w;5xo8SYmr1IBq?-UQq$AY zolc9QyNGE{kEVwrcR@RLZ`nLo=@0#HJ#^@eKV>fbfXADGm*^CoS5!_*N>4#V(|e69 zqo6?aL19GVW8UbPL30x(a2KMU+kKM+^s1#M3^;e3|v~dF|T1{WZ-Qo_RCN z;+hi{@CUD1eCN+!nwg`$<2@HK@$j6W*_3c)c+9-vWlLCeVQ`A=v0L^YJf4X_^0WzX ze`vHB9uLnG_#BpOhY)+m*exa=*u(;mHdFG;mn`0Uq+#0h35Sm~-hS}{_}!xIXeM-_ z96ed**kzesQJmp&;#%O1ed>xi4?X+ls?|%f+^})Etr9QrxV18OX_jSbS-#t9OD4i2 zF-}u7M77}j!gXP@%-v!nn%PJH@BjWU8*rq%U}zv-wsYrBSX*qp@4D+Q_`fihDJC0s zqAy;&7|j~NKmeAP?AM4nBb|w)CcAsY%Wz!3e!cNLjEpPr(hZFb0*FHHaDlMn3`1b+ z)~zrB(5@-@Ja>Kh%iN?#<_|ehseQ4RVWA_*!TzHppa+YT3OCXS(2;1+@`MLFhIJgD z$Z68tVS6oIx)eSa^3JFTz>&bXqojr&OHZSV5}qy!8ye0RorEq#bb^u8NE1KS(gzC0 z4k;DO_`+vD6v}Z#hCz!Eyj>IqadCqu{usH8xL8OEz0w@D{qToBgaM6Gp;fC^;fRPj zT7wz9cqVoE^5v;Z7JR`U5nb5UoasRZeC@u7fo8(PS%$UBAPfC4PpNu&-XLSi1R0|d zxkVQQt>U)ZZmX=UM5-4TnBXWQMh8VI<=wKQAY|0daeRHsD&r0gXiygT$g)J=|Nh;w zwIiR73MaY%u*(`moLPFI`WdCq*imtVom!)_Q2ZbL=tnq`Akz%Z0O>HvxkkaXOq>S> z;rNp#!KfqppuzgT@4ow(@R%t{hbs%W+;R&RDiMik!ef^NV@a>kWs(wJxA$k?_~dYI1Yr&0qsL`)8caIcO0o zXXP5PkY#IP%Su+PZR9AOr*jjzJ@4|ie? z{Il(JLC9Yp)p5#VzM{u7RoXqxX_34|%Zd<%@H?Q(Y%4iHJ;dc`-Q;52X>(O^+(9#+ z6Ebgr!4`6XEx*<^n>KXi#2}Nd zV$eP&lbTg71cyQhhr)+QVIddKqpPj%sYFhfVp!jyUa%LoC}FR65kezg{;*i>1?@!L zMwW(J_%evD=2EkbM1;)Tn{_)o#xm@Dp%`=0|wjMkze zkh_|mk0ZKApr9^z@I)?NTe1e8P!uq-pwxoZzybRBc9t;ry2Sk;GO+?6GV%!Wgm0Lnc8EvfKopKqWX>bZin#eCn=R0DLeyczjUkGY6ah!*0ib=Zhv zZBr>-d3%f#0(XX zX6hidfVCkEEDu?R4{q+2j7LmfUQVJW@@TSBwER8`T7$|?G&4PMWuf^UC$2lGZaA=z zp8T#xV2=u~&sc!L+hntI(}EM;+~P=Y$FSyTnD5*1vs^->Hh$V<;EQIqFzlnb#*`U0(~u`heqmJC9Chi zdUmTqt_vcMPpkQiSHBzl*o0mbi@eIDz;znQxN)B;_Vs#vV%y$yy6Z1v7e!AUAV7ff zBu=twK9rtp|Mcu>yTQWqIDhgEcMp9|l_$>7%3!LipX{TDr3)AgM9^aYJykw*^S94v z;vs%j%TJNGGeMIY9sHaQ^^stjm4 ztev$s0?>xPoZ1WzFc1nr3A)3$z#z1E=n4SYR-c_ZA&W(Vwol)2E|@;3PoIE0B&>EO zih0K8PBaHdLp=n&k*c>awSM>$A0H#0d}^2SSHTqg=xF~H-1M3|Y||egy@UiJwEkM` zg}#ri7CXFfdrE$1VqFOW7xM$9L=K?XHF1%A&K?bM{wo*4^JC8uAgm}#DQE;d-f^HeAef3zmaDGca2jgFsr7}Yc z_I*04K_AHm#`*)1KEwl3@KLRz`fGDh$WdXU?!d-Gkh-FrqVCj0mb(HMRwfT8ypCHa zXwz*s{wFzWts8hQY0RPWHe@jkE=96Lf_ge>%y+{H5}B&1@R4Nw+~sETE${6o7JZ?w z1gn{-Q>MrLwu2_IHR|$reHV0^^lq$U;)ZV@0wRm-a;KS{>fUa|i?Dp#^&nk}b8rSUdjJ=9 zDLQm95fvq(FhGpW+6*IH`tLNIVGA8n@-fc`zdtdbh4$3VZOhoLuuXjv)oN0c=s&U@ zlkh`}%y`3u&*<`7dl=Pr*hiU~eJpSra_TEl*1Dh9OQQM(^;)NFv82{>pW>_7GgN$Q zs|QJ$^I>o$95Psgb_3XZ%;3njoMiSo%=z71m0X)7vdQm2%ewKsAWGSpE*9v+K0(W+G}RY4&lgZni%UqL>>jlbhhcCgzt@yASAMxQ0H+&org z!cF74-Ew#gX+-{DCMQ09(P)k~OV`g74$NVZ62bd$Qoco@Z0~RVi-=9lo)XUA2=c9; zJWxFSxb9CLZpKk!W%^+L-w1IPHa-T7{UX6?VFDR&fuLyAiXgFG29@HlO~#x9UVT6( zL%YdEsm%_l8EJEWv!|72>J_i*i@HQpRfyUW%lzaicyN?}9}`Vy^nu&?X+(YoT3riS zyJg_{5}+tvpaP8o8_`_MSZuDZ@yuUrc3kzIH+#pbd^ZgJG;=G>g~DhaZ}r?vln<%X z)!LkPmc>4-z#h~FznfPT3M5Pl>7>g74yM9G*@Ssri(6r~X6zYI0Rp*4^QNL4IA@@# z3gttNpyx4UHvty!zIM|J zGphMQG{y!3q%2!8&0RPvsYUS_V{M&Mr24;r%p;>WSV~Ea&n3*X1Qj00F_!$JDH>>|E^kRta>e#q_dfjjE#r@x8(EA&7&# z+o9bA27Sc8nKBGgU((kOgVHmm&d%(&>71CeU{V3i;|j<`8{?a6cat@QbgB_(S&QslDN%R zXK%9^ybN#8D}-X$&&;@hd;K|}P!K}_#|Y>Z{3cfQff?&wFMkOUp%Qe6+^~pYbbm9O zbZ-^B=tbBnC`!%I;2bbDIVU&{NNEgn0Wq6I=#Sds7a&K9S>zRJ)802|Tn#Us*(ygf zGt}2aJJS~J`0ikX0)=FNKK0)tfjt&t5#r&%L7(QM$_L}2f!C(T%iJ+r{@rE`*T+$q zCrtwb6nyj$uQcbOHq z<_|-_%t(Z^Ui!#(y6^jVi6Z6-`0SBL&59?NHSFs|lwK|DQH}c1n1dKx2%Ukxt>hP} z?LqtH0CCPfTsQ-W`IaNL^kYt4JIVZ&6aC(=M7tJaF*3;(>7|o25&rs|p=>p1$+S5L zUJ%d>3)&R*vr{`1hor>gqQ5e>^xjoFAk*G*4*Y+j1b3+k>`4yZQnjZ@{NUdV!>-3a7b0Y90L8UE38ZN zSK+tN*%qk;M<9Sso8XiBe=R>@_ZP!!>&_iIR|)@#P77eNpq34ag(ezSL4asx=`r*r z^La|cnG+GdJMRLgOIS)gR4PJJI;s>qHKi$EqOp2)pvWvp&ezaF?hRl z;B3YWA@A`N3^3mJ_g?WD5-_;;Es(zj^zco|US*z1v^Q<}2q4$$t`04-eF7f(0Jpt-Hbx znB4O}Jt_}g^b7DOQ3NiA66OCG{GWvXCy9CRry+ideRDAIPi6nND!pw{e(morv@6w= zng3l0{WJUzLTQ~ESp?y~Xb^=4OtctGP=)y4&ihw){P>O^?x$P{c z|H^b0obXcS|H+HJ?xOe<(4h3`$x+kp)nXzY|I#oNCTO zlOpPPofs3ArPCM2*NqGPYbWUS@blx`=7XcuKv5u|2ZN6@(-EvMT@WvL#ROiYK>QbD z*nJVihY##?5Atv4?7X^cE>MN@KwmUy6sC7j^CheQZ@=KrK#)hAwE$Bl`SbH9I(V-( zZqeiHt`KH8)x;=4Ub)d>EsvRENjxzkM1)bD`a2~uP*6tr_n=-4*mg`3ow7`|npaZc zPYvlg!NIQ^h7e&uV7EN}*bF>8rEhooeo7BT-;lbUv2YrfYX6IU^59tmKV9pQL%Xfq z9MZoofS(>cYUp6j97HxrUnG5SG|)bN$0`vWtGk~ax(Xsy1Kl3i;ww$LkdUEEpJ z`Q;vC^W+-$Tv_`M)nu<}+ zzz@u0s`^NXTQx1ss8e<#wT0w(dgfO} z-)X}B?tKFmsh6aO{pUWPtLz1sXLymB;<(69MbY5_h0dH7pk{FX4y#?tR0${%Vi?U8 zq_aeB7{i*r-QT==-Knf3Bq0Xl!pouTdI|B%9^n)(o3V33<_30txp(&!k8|N7oNBk^ z$Ay!mYmX|x>O@!h^vG2%fq5UfaTD5`GE+%UL$~ye02xHBs-DW+Hii`xN8k*uVn?6= zzc-F6;{7w)V-WS?lZSG!Pe;qhjJfw4vv4ta%SO`R3ISx`-ATPO7EPH7J!6QH)qVK* zG9&hF**2M&nN84t#7sFnL=j*fAeeMvv)lVcWN^AfDC8SuS&M9w6ZIm1ZaqipeeApS z{MD(~ZL!_@L1q+NVRd%MOA8Es%e1-UYtcYdom#_vl}_iGuw{9jsJF`W}6_Y?odvhyOpE3PX8d3&#Cg3MK z8WV^NE|!>*^HF@+@SN179xf-rWa>|&QFUUpWwqFrqNQtnpjES_4 z1&1~*VKx1DKqOE(z5Chu?0R=a@o5;F-@%m4Y5{j~o`h}>6Yw<{VIz%ruk-U;)jJi{ z3y1zl!&_-lzo@m$_dd@ItCI(>x;XxuhA)QjZ=YQ)ki*vH)miu$5grWQnu)+^n8VzS zz^giSWo(QKY)c;s!X9z?@wo-lP&Au|-(9K=#ocv#gJqh32I3RbNdlv@_Z&BuC-cBl zn~)%bf&2kNfts3{f`fzS9pvv+@*bf5X|$S05pTA;up%#4aL`Xr?w;a{#>zl1`fV#H zkfW_!E7Ygm&<(8ML1aD zW@iyA?e14t-sQ3^ZOm=0tl&WUNaAZXY+y5&E*uVx+ajPCp&Yw7(yKeI?V4w<9@wdI zDrtdHmAC*SHFly zD=9fSIYF5d;SSPUHK%3E{<2Qn%)+i&3EZp0#qhb*c2I>r-L_P3qxhNS2nqNB#!Ix9 zl~G{Bc5Gc|ZEni5V?%=n4S1d4uh0ZEbxm#QP)_j^xf>cX8fsJQP+-c}JyThnTOjk537NqG6l#mG!Q-9sr}Ed<*BFZdvV6s5)MT0 zk)l24R6c}(M8=e0IVH@%f+^i*DR%CVMgFs|S%1K5$}==EZh)=wM7fjE@FW%AU+`HdF8AS0F(L&+$}kO3J(BM5o3Y zEK&T=b`XzAf1I5p08v6cIfy8*Kk-SdW)@2N+9CnvT*jhoGjZ(Vu;sb5nAJe2WulAE zPh51YDB>tguToRSH=pMTpuUL%&DX}nbN40C1nO@)!Z1QqYldfG8N+CWg9S6h++patLLxp?DUS*iTcPq{eoD9?$2v4CbQ`*4ky#& zpM0kf=RYKTQ`*}46qNMO7bui;jmRcx3+Ske*k~qsj}hOV);K>Xo?DIsNdCh{bu)(k zOtaiquAXQN_co2!ZavWM5~hE%%TLZTaHLXdG@DGfLST|%qNi+QH*VmkIw`*6+lLujPG7$|FJxek44>59*k&(sU z&rYlq0>~t8g1nQ>fG~f$d=5XMb}Ymv;K95}gXw8WZQSk+NF<8aB)a&g063l=eZzvb z-|`2f?#8`#>?f-;@56{G+3W*oHe{xN^m{~*r6;MXwv=#Ic0oObhw3=F%wNh_esoyK zxX{0!Gt05sNBB;aypvd2p;nb?)YWxY4_%z!Y8ay9gr#6?p;~2z5tKJA!uMG>2FnMf zmzf}oq&n6TM4}cy3L>FGWfqtc8WzEmq%ojMxMVm&&5Nl%X0Uhe7!du1xyrR`T4%;c z+wv6>!`n(oEK$bfpdoj*(tmBJaZ)vjhzFqNFVz<;%SU+$pLq{vM1*MfI)5fZQM0bc zY9Iz)Ye2Rs*rsVb9Gz}QN(I=CuGXsqgeY?Ti=FVM$vCeTrWjjIkBo`w?pR$t_WP@9 zmn^>PB#H1uq6(LDX@yFm{VFGVbxpBj+^lTTCfTi+9o;TFW#YQY>iqg|q{SK|p5VB( zsY9jI!sB_fu|o#}Oi8-USA@T}Z7YS$VPWPx>w)c&QbE1uJ0l8pe@gM29Qz{GyP;o-f)WHvF zc#j*DHLj}X9JaDY_GVAHo|k&WS=e1D7#Oab0ue;>_h>upf~>lG@aac1M97(4mMRenXW~%DsUFMqO#;BEI49M;e|JWMn~_-cQ5hKPjFWg zx`+q62)9{?=WFbEAx6&HbccdSKbmZH(nA>&)m94_PWM<&I@0Vft&cD|K!uP)UnPc=d_LddJpK=$>zTUQqWPA!|EK3+Q%ap*pn zSXgt&W+o>2Zl;$6X*8%mQ-NEE4m3$(Fq-+@q{94sKo;ia7VE?WoKe<|>IsM!pp)4@ zT}l9%k0ryR!&uU)7L~N&`5*5x$;ZlC5<6dPAJ1p)A?GJK?NwbCo?=oPy#j&ek+f&& z{Fj?;i43tcp-ISQsWqWKUwV0d86Dyx=^A9DE0@F^buh|OmBK|Imsy#tp@!tTo@*ur zx$yX%h2)Eob?>U*?>5y5K%N>m(EH!OfvVW25?bWQy7kqr!<{gC)a9Fv#Y0$OgVLr^ znH;AA!3FWP$$d)P5QbXeC6XoK)Q9exQO!QV$Az#|XF6$9b}{r7Pn|OdFCFVVG&%Av zVzXPwkDf;EAYrwwY@&6mNx^(ff5jIqn4nKHeGd&#$Ye2?ZPo2;76A;YBc62xI^EVu zTVzv{Jl~SU+vqG1!xQzM84k7+y%THj8(uCUtX~*32tT*=%)4o+`~zY5{NX_7gkF?| zh!HPuewY`#W5=Fb9(fj|K3A9H2YwC9i;Ya55AG0 zj*#pd3L+I_4$3U=kEEmO+_wZqzRFqeZKRws`WGFjwrR_P9HEc`Gfq_ z42!FHDP3nj2Q`4Um@u#6CSX)hDPyQwF=xt@-z=NM>MU^I@uft{v86(XKqqLf7Kf*k zZ~?*?yqozxVkFlF)5}AoqU&*4CbPUT$q7aAYBzHULF`8G+U35Gv`B2jhR(VyYDUZK zRX^F4w&iy~K%VUVzi zCu%$HF9R42>+3qstEKH30T3`aiTpsH(zJq7v8~X1>}YJdy>+kA44E-$^w(r3IXt$P z=JOTqiWICe)4p*#a1?oPjQ%~DyF?*jBeSX}t6~vTM7?5JL{VHzQoA+gViw!SVi>eH4n(EyR1nbcbYU-Q zB3clZ5UbnUx@u}_^73)%>0^(LZEYH+bs8FBD|ULqxBx((9RlX_iF%n7UQk~;e_d6H$k^ysXk7A!4N@85Bcso_X4AWdwz7BUdMlh@FWV`=p5 z+l|mQUR4^ADIz7MyQ00xka2m9ws3pH&o(W}iJWsL_@=GIm%>NK=IS zr0eb)McZ9vaZq~C)N%|?gsdXe2yl3TT`xI4xO zESakvFb_|Y&Nm-KjRYHFi(&7}m;9jPp>F#P5bl^oh1tL;25SI`gUMPybMqC)>rNgw zH*-e#j3z>!_m&&wuV3V-b+Me$JhhSGy6lmu)zumsYBA)ay|_S{kj?uGQS+@kwAQYQx#4Ts{P{Z5a(qJ#}L-A=#p%6IhYIW>pXF zGz=WKsKtz0eVS_2l*Vdnv&#%#qMS_u+pEVzu1-DYZ{lH7&Hp5ehN&wbkqW~&FD)v) z@)x=IP(NGxNFL5{ zV=^A_=&fi6#dCH$r~nc)cc#|D=;3(0c^E8L!J4P)eA7!fJAk3^xHb(2=c;P@v3X%S zXA*_(>WVnh2%OGA%Z%Lo?X|1PA3&Hs;!wFh7_DP#y@uI$@U)6(Q>Oj=g@V5;NV27Fswuy_YY5FWwViy6p_ZI#iUJjP%))ugfS6!j z4U`nL!b*z^$RKh~K0cGP)Qy)z`TI1339xqQNT;i?cnM3gEa13atO7jwp* zys^8wxMVBxbj)Qv^l5BLK7cBs+ zOYioR@R__Z#~pDY=p5VOS(Me31!U-I(*~hV+%s5?{p)ms_D$pao{?8!vxRA&xR(16 zm{TC)dx0*)J08c8EP<%D#OG`O>cMiOLdPd286*wSxa83I4=OU}U+6QQb~{~*c7h2^ zAyW&6d*2M_?-8ol6PQV(rswpD3v{Xa`6cBLe~9_oZmHI8wSt7)%D}YE3cYM5z4XOX zl}hRe`6xr-Ht)Z#mt_pW!^5aJ&T?-1B&Nz^F!8%5HBrR=A#oql)5VD5L8i~b4qK@C zh!wvhKMN;uTo}jb;M<>52Ump0c@|DP|Gr)V(F3Mj?&;H$5N+Twn7&Lgi+Wu*qsGn% zQKe6%WcB|f_TQsexo!Rsl;3nVJD%QktyJ6mKArCIWp(Qtc-f?Pon&uZta5o`PcMk4 z50;Rcp&CE40e`0+E?v0*Y^7Br%8e4*N1_X_@m!9l4j&bM7Dm;D4gNNUJPn^H5Q+SH z9pMW&`6sVw0FLkDCsmz*m!U1_Y0g5%4pxlX)fb<$hJ~A8DL0ewdhannOs?3J);0`X zu`vI+cIfLUVVx-Csb1ZN5Vzem+b$EgmW0XD=AgOx&kifte_#RBe}$`ce;C`EXo=yY zHi*iwHma7T^tSfBA&I?Ua5d_ANEisPjdm`XjFSXm>2cXGXGhf%;_~@CL8o>yoCY{~Q4~YSl_s|N;UZZ#?4!qnQ7>*^rD6o{N_D+*7qLRj&X zGmXO7mYZtu)UE*RGi2rc9!}80{UnUo8GdyS=xtJmz816NkWh+h*o*Dy)K`jL3CqqA zH&S-bs)We*L!DazRx1M>SMO@LqMM;3j=W4xNNX1>OdL)s@LL|7o56UX#Pf7JJa(e@Lm4_@&S^AnfpgC`+IQ0$!)PCN|fqLI}!hxpLEz-=J_yU zq<8VFkb;9ekHy>hMC1n=CDDnn1bMM>5@7dt=#p+4iVEcEYu^b7@2_*v`g4>F*Z8?Q zbAzo0xlpvJ1MC1a8%m{^(mq6{-(b<&fhhKwEFOz!*(j+SnX0dbHJV_S4ODDa+M6 z^QcLQu%`^h7n1WMb@CdZ;j9t-!h?kVoz@QqM38^5bshH=OuQpa&XWPepCp9QUT^rO z)mt+nvto{RRg}fmLa(jH< zMsn@i-=EiDu@c1D#JO>xj_vWCS6mKgdF&)xcr?`v{>C&T(RqLlF&2sT)+4VB3cO*! zxX$}hIGET0&Q&T@E0 z?rv%NTgsvtN$ll}!k=DCg^6_H$JgxOojtL|Xeo_n`ce>>0&j-o;V)^uBlw)wRW_HI zVJSOP>oc()r-P1n%EqoF=Xh+rd3Uyc?&4x&186PmFl$m$7pZh5rgHdUF6dzz@em)2 zs^U_+&-!a%PuuG8-e|7kz=}*XlsZ-=e+CDr52K3Qd)d&nZyInuO^O0u^{;v%E z9Y}6<<)_KGzS=FTS7(LOGdLa?TrCS#$!erKJIJtL+PPIB4V)&$S6JPtV6egHVTX3->0PrzX(oK89A2 z9-JHn>(bX)=W&toL1<$ggx2s?{ zea+b^t;`nPZfi*C!hBhsrVC?vv^omM@La5)zf6#@CqrY|GdJQ`xU<#-vd}g zm&ln;XFm*e=4QK1)6srnzasPThZaHQ~KIWq3DzgiD_*M<=S5B`Jz?ygbOL?6A&1!*;cIJ_#91Do7l^)=+365N_vXfoV9`VZE_b)1R0Q1(C#(_~pxKhFNF+MR`H! z?%M)6@20^n2nrT{Vt|vE!kohoM z-jq)JQNd1kR6a8%9Be478~Qhc_ZAjj4e#H<_!V6*=bZxVSyFNq0id!^&pm$TYTmXm znWVM)=ZK;r_5`lK+kM5wt5F7Uvf{JGdEPN0LKYOY{M?&g6^W@ft8M1VGls|2nq{QJ z^a6zk$DwAOpQpi-A)biqrzLIo@iu-Pxj9JT?i}w^MVKE^X-J{{-`>xo3vyYdPb=Vw zkI0_Xn}qD>^z(cA>|YWtSl*y={ybc2jKBA0a0#su@4zfjj-4B^W)!kvUac@V zljDTnS#q$gHLy9eb<8wM`55Q1WpHqzM1P~J)Xl*=SaFTeK3!4YXMQH<5K&?&`vTlo zYOmeK_B2hs_S#0gk>JWObjelDsfU{+!;*7egJgjjN8{){z3SQ2^Z;>z%D;vZ6|f|E zgfAxJ^Qh`5k*|XS!n@4nZ|TkizSw5-wcLheD!wNpKs4l?EowY}5z`=RwRPXk#L~SU zPL!v`!*DbX&gR1YX;wkjIT)f+kI?QnM;6>zY7yP}F8B(h!@TzP+FK)g={YaB>+&=q zcAjm2%zM3caR2;3=?a?_!3TpO)uJbNS@*m(0=B5%Qv(!Lq=~_)XMYJ|bcG6?2=)aA zl!6bG)dm?daQV6dsqz_N;mmf>yGvz6{}lk}>@wd+5VL|8x4eqt2MMTTEJH)^_QNd4 zCxNEF1gntzEKD#Uq`7R_yvJJ2)HH|23Tg-|Jx##_C_gzRUFI*Z_L}X?`t=k{(!x{E z&q|bE?q0DxcLc?~U0p1aoxPA(!Nux`ROX&_%AN7$2`ciw0&@DQP5 z!_2T*dI)VZ-knTXaf_LucrlH`0yaiHu|Z#k%hb%wG_ie_pp_W`~gdsDObKxhST&2wmgJylD$#P>ahjmi{lo1I|rJM0c- zED!cA!5H=O;}FZ$O-+T~a(`F6fo<|G2(V)9nDKYxaL;=a-IwF?A#~`~@=HpUWi*J8 zHJgUD&#v%l{KgquS9hJu+_8o)x3{2z?Xz2#LeLp}plINVep(OD`)g*-S#sT-#`8Tk zlUcV#{j?0RjL1_`PQmvT>92i0WTZsG?YE^|`7}YpKqjR^gM*vxXYb}k?ydK6@D>0jZB4;)nPLV&#MyU*rf+td(@wa!D`N`WyopqTWd6JY`5~50l z1kHIS6InwKau;mWTwGGkyfP)lS4|bFbY1p?iK z0?1_G1Gt>W=l!6U?4mi|cTFNvDW6|0J=b~))ym(3^WGt!Pe|9A)ZX6cp^iQy6nVp} zMjd1yeV5Thq#Qk)_X;u_)7n}+jpFaSeFG5@k!L6Bkm@v(5E(5hcH5dd8cXVJjrLy* zLb6x6Jc|bQmqZPW457--0p8L(5^C{WlI53fsk1;V=j`L-vtL0uDzBn4luZV%bSvRyC{0Mx#$1j`T3%PB)q*G_o+LQFxTw5IXt&V} z!|pYIfB_&;xX}Nmj)wd^4iy}*`?Gbc(sRlq1d~WzI-L((%tUCrRv*03fC(EeF_unR zp2+VvAmdIa&?TF4er{Q9u&5$`bS=mTh%Fz^F9}5N0)2xl;AC$`bQF+}oAV~=qCm{D z%=S1l=~7Z${b{_Uk-I&5YKN_=n3bu)W#&Y!YC->q>oV_$@?b^xDREZZ(>iwnL9503 zl7dA$B`fE>ThjCK(1#&v-9W7Uz>+ z!geo)dLbxBE{#)0{b;riYAa2QZ0Ptq5-ko*P~s&1DPkYM)bB9H#O&npVnuG{ZuWsM z5h$Z26dL2cABv9q^KoIJM2748<3S+VeQCKL_@lSuAQn;@kFC*h{xd8f3Hp!Ht2S%a zF2EjE|CrceM@5T@NC0c%OA-aJ3?qz)4L>~VvPHKEA+fZB-lzSVPOPuyN`IR`<4pX= z;%M0jEbqzTU1;=WE`Ru7Jbej9$_k&R$IgS(9B*X3m;=|yiGn!}2jR_q?$7FAX)DrF zos#-fkPP`&6MU8g-i6hr>SBGIvxm(*DxD$P#F_-k2#z-H>+5Shwp;uAFI5cJ%_4;H zpupaSt-ajF5h->~o_=f_kr94G5&9H(U)sVH?r z*t(t7U;Za2o41h%WBt2xB>cZ@c$`m+n7DZ-9}Dv7rwB^e;^mFq%MLOoP&~Lif&)B6 zWFvl(0HmRLCD*nqV`bhK*b%()_vSNJ(6ca)y z%Mh!o#On=?`Q8B}-lDRGudgibGIGED%$RxCUPr4&aNQ31>#d50h5#=~)v03thp#Al%Z$YD?1S>0=xeXs ziwFIS-4qBzAxIIJBx;`SzX*Py>DLn%w^YH;I{kTSLdqy$J)N#i z)|kz4nT&_1sc9%Rld3{0+RU-wX1wG2Kt<*nYe#1t+fa_me3u)ZW$+|cJbc>MfAm>> zoMu5y;Lh()_SL*S`|j$&y=%H4h&?0p57!s}z`UzbDS@$2UDzZktiMed$7BhGHzU{+ z6|9rEcr#KIL2l-7SltUEcux;lPT~~+(>@qq7a{ZhBk}jslG^Do3?|j$pz99 z_UJ6J__HbAfOSs+y|-jsVLWMb3z4j0p_h9l7cT_ZqCmGs_>^z~#Qt`*gdles!Qu`q zXdKajX7P zD!1KHGL%i+@T8C$_?GZtRuJJJf1e8c&Her+-}w=n&IwD|)Kq_6P5G`j7GvJ?V;=j; zYc?1Z+&y=(C)Xu*O01DXEwSPNnR%q@I$Tw;>G*EeDH%^!sO?EmzztszfIjx+ox33( zD=}4AwJ=AgC+y5Bph0k44Nv-;1XgN<6knj$BatjHQae~vm>ii1RSlGvx7e0xsI4fn zILzK9PQ=XAU2>9cDjgyCQJteQySuViQ4~UvnXq@S7u%5|Zq7CqEH}{%C9t-y96F1E z0Z~Z+JS!_JcAl5@iRVq}%?M_cC4Pm}8dZ1tbeK7qPzhSz&tA^=>!fH%ydBhx5(Oay z*eF$bN)$tdbF~wC+e?6TB^iZFGa4VlUERlYkp0&v@VHl$* zpE`&5Aecst&SEB9umaEQulY8mmCdM zO~)H1CaZI;>2HtkM7eJ3<&Wr@&f6goKAN7ll$~mguA_z-Grh+H3lfdye(aMuKKA2# zD&PAxGpKLYmUikT?;EPr#+Fc@&&ZzeavJPPD{D(Dx055ZBsFBMyb9>=Y#Q=)gx_LC zRaG_*Au^R>5s;8jkdOkQ9{!r=gA&l?{Wt{)@>Ir;_>P-w!!YcbtTwzwej!?41A*7D ze2M~vl9~N28B5{*B4+@_7RwV^j++}%3&s{+O9ReeC29;p0?iNOkziNW*Q1lofBtY9 zSSi@#slkY1kJBB}KF_zo-YZ$y$wW_8@9@2DXEw0bIt^!)xoJYnp_%2dmsARWoGaq6 zfSiuoCnlJDjjvzayouXl3;)fV9#@c4R)j75KCY1UgZ-`3-qRWgO$jF~r(!cv1?T&^ zw<$?OH-w6K7hsSieZ+trv)B^k>+BUzcD@@N zBBM04XP@PM+WiGxrsIl|UWTC|8SSivqtI!7kFUewYW+`o%%udm2*^Q04c)u5Kr*|g z@Ly`L!ST5`OQ_GccRVho1s5k`qH+T%K;o^Q+odxW1#-a|*;gc%h?Y-TfmSgOK^XJ? z1PR7Fj5nI?PNU=Gi*f~iDPuKm6dW#s_zVTr&vRTJ1?c0g4bE0PViX569@2 zR3)XwZ8&A4Vt<>t0u`2}C++ePnKa9g;xJ-KE20SE^yfUU3u=#+9%?KU%?`=}dbJ;n z62Uiu43#B~1a?U!*?l-`@WtiUR63iSuWqyLA9N6927{J4+LTLsi7Z?Fd}M@Hzdggm zjPdh}nrrrpj|8e3+ALSY;nF!ST%X?OuMYPLnA$KAsvRaD!F}~fn|cjRo+`J^?YpD? zdA-l^?F#uc-LYQVhH_eqjGoTt`b<87Gc#5Xf;iPt5)VFs_wWUX5HV0~ZifIAf_pMP^$&61Tpfh~NyDH23!gw>zv?EC@>PEM zBV)9Jq$3k79w(57))P#r1q*=$0|*X12aQ`CB4tXKk&v8&pItjj^5>*?m5q)de3$^y z*``eg%*1u-L0*h>ffmx&(}8cShj=+Qs^ z;8>i}D42;cQB{Q|5Q6R=q|+Vj05VK1tG0TUFK_V#+~ChTMtXOaN;D7I~ej~Gp>@5Svq=xEHn`AcR0|GvsYAI>=lUEk^M{A)571V@(E?I)YZBd zhqjCw+qbwlI~WSck`ChTPGP`$+`fzqXKSl3C&!so%E6|}frL*Z(tkUAfj_*rtTAXd z1zoCHQ2|@*HZ1B}(rl?6p@`3nQwwV>;ICu8B%)R(4z!Kx_`5TLY8Yu7c$l>(W??J? zxShb}V1-T$S<(Wn(?-fI3nG`;{U9Zvm`!I;AkfB8MgR++sfn<>TEx zm}o4f;+R{p-lS*xf&DySRA#*fI1%e1GF{m@Ah^-%wxg_4!ImOSf*_3RY!h zWy!da08p%FS+Qcg6$}J%#YsnA-mvY>RbPxMC?1rV7vMyQ^lp<2R}xh#?TzinOg^>N z7)lSuGHnh71d=X*Ucg|mYZ0KPm~4Wzd;MuJs4SFayij6ZMyo_E6ejcz5gdesaW^Ot zh=D(~R$6Bvl0^!EPrOU-P$hE027LrFne`{J^*Y<#7LzN@32z#z>PwBo%8-UVOE_&x`0b+r)(!w)Lgxb|63 zmf!-vZ{sU3ZFu@`nWOVNwk&mG#)59ri~|S6X~1F33bd};dDIy{IOnGZpLg4vuWtFn zy}c$(EIsjbM$IVa^S#$n>KA4J9eyYhP7+g;!c{xC_@qP8Ukjye8mQt>Yz+#;K9*HN=ga|C;B=?{PSLsa2tjTyrL0w~ghBFG=#;#yPvI#813(Uv3<+7zde4}kNcMwYK_T0me_5w{lK`}{Ch+y5n#CH zXGhOoux0LwIwO8BMe%`b!2P1}#(O_}|EY`9(^Hv|h^|8gS_C4jtE{{8@lRw$jjR!4 zCb3v##Q5cp#~wCnuxd4BUb9DuDneNAzy{rzG_+VW8Vs3fj)^1lSvYjNUZ63l45rn~ zH#RhNNCT>&OifA5#>VFMz2XLV(J34@EW04fi6cbWcaW^fK{yU=!ICu%ZC<`(cL#HT znv}G&sg-Lj`Nw%Z^Ci?Fdwj|``N^8UKzi;Azm zvEaDlAqS+;5+FGvk$MB>jz{O=P6n%geX_O-q3Q8aBbLztF5+Wq!D)(c)Cwy25s8~Z z0Y5QRTGtmuLL2XY8cayL)iVR&k zOy`$fe^r8brFoYu@++Q?eH!jv+*;jw>2GJOu4H}0?RhMnNJAn`WQCEiP3*8i(Z~Mu zlZw)OB(ThGWF8o23Bc`bXJZ#S2mTGdpuup>JZE-Qo6B!O)5B0D6%ZzmMY)eN#b@Jri6DE%Jba?3^I3}W}E0RDKUiANxiOj+STuQ)R2)AS@&V>D$>axXxB?XI1 zp^(Ac+~{AtpmOAxlG4&bXNoMleBL1E3;Cu92M%J%(AMV3$V~P5g3i4y&B*j08g$=( zcJBK65JQ?9zwT(5@&8n4be}w;VsyWu>CO~SFubv@<)hWL>)p6=;s$rw&4NnOaTBCX zt{;)m5GE4sGSo5`L_4OIW%Vt{CCkd~b>@I$SZQx^#1|22C8fwNq({i7T0$q3=AJxq z7%up>Hg-HduX2am!qFrq5**lKM-n-f9u1s5IDhJ}aZamg<&Ku;=51+-!4mk}W6X)o z+}w2LB-&a4eisA6ydh$G?)~8JKL{RQU=Ff;64PFxH~o>*yTXP@Xnud=kZ407LOP~_ z6LT|e__*Ec-ErmF#hJ`0)zt1Am-7_>^qQAMNF>~gKlbEPZ@lw9TR`4GkX7XT*>mr@ z=TDrb@yAb}J{_B(bI<#6W@bjIGwq6@lgo?B-`c)t(~g?9NZ4fz&THPf zVB6}SjhdX5mi73mk4HQ5P8u*)q^imI<=WQFY-iZho|>7rb4OrEg(YmYeYv3inDGTE z=}zp`IK3pzBab-Cu`~zA2*gpL`2C=tBzVgVdtm4X}(@j3O>?=>3Hab!|p}7F(Rm5>lJ$dizZIhFHMu zX}8-l&0%YCR^RlL><}*KLxEOr^C!#RA5b)E@X%p7_1P=8&2REloi*x`L3v}eOXzMZ z&kpT~f^oB|-uFgbYZ?}!fL2qDZqtgCL||-cUbCrnEmM)wyrG%SY?6ZT*BkX%snea5 zoRSh{8f-8ODNU^?PTSEQp0m99l*5Yp_qOSBB}JE@`hQ(Z@blHJQDaI;o_$2AIz?hK zjvJgesz0W?;(xMBrtk4j_D#{=y4`M8PFe$trcj6~Yi?7ZxwY2iDSGf;O%VjSOuQk7 ztjWdtG2GEH;gr)Hd4=xjZ`8hgZ|TX0t$y_0!Xd+*B^BbFQMHaFXV8wxorFzIO*?k% zz@-LeVr^}$Sy{piIss3HiiHaoPMkQgw6v71UG%>UhnP--;g&61%FD|e8XDN|9X4zj zYG|G~t3|Pkoigq_N=i!5@KO*8YwW2i~q?1UDRW%Mq7U`NbDsq%K&0 zT<){g`zqan+aPd?P-3_QQq+BVDtdcv>~!DTDH{M`-inV+$7O;CMBUKsCT z00y_T%PyXD^UdSNjtK{Sb+c!GcES(nJb(Zd(VR(I`AK^6GA6MQ310T|v;O+1=<{SI zekklW1z=S2Xdd40%wIPH%&D{LiPQ@(yg+v#=Dz#x`~36I>3Xt;>6GC7t@THru8W!3 z@v&HI>b$?~YqW6O6B(hjHfW#yf!H(e*S7k&@G|HMW?E-gpLs|YQLclntCL?$42bW*Ztt+tDbkeIHzG| zEy!A!DsQZ5`|FFde|Oa>Pyih>#Zgx@I6QyEV1C9 ze|6HRp|Z`nm#}GT{m*ZHWy7{MWos_t6?%t*oY9G&154!f$=PGA^N^yci`C%&-{1c5 zM?ajLNVAuhpa1Tq4?f={%2!p3y`=m$KG7dzvEma?P8l$;`tCc^mM(OK*!C3X;7YTQ zjDiwYB!_39y3v9asBKH-_W!!vbHSy(e|c5Wsi$X*8(;On1CGyThQfiMSvanzE+8&* z>4s5@+hQ~~)VP0l!;W*#AAQ61s>#qO?UqkVuvP0C7OiZ+HJn__sPIyWc;$a=93vL9 z@5d(%Jmt9I`FSaJo5k-7Z`j)SuaDQxS-_Qea;i!AMj*$5%Sg&4ZdOBmOXQ_@7GHbW z@xoUET8*(N1m*nz2daioi4f#5IYh9@?2Y1ftFJ-=BB0~My8sTjMdj0lCJD5pN}@@i zFK}d}_1cRMx7(fKq3d8^pD6XKUexvsLR=(2+ULb9cU*Y=^u`wUZ9)iom0QRw_eP@V zkn8)5He>AcV{#t+;~Cr~m@In}71xc^g;HOI$btO6c1^P{h=;i#vu+dS@(fszUhH+E zj#Pi2zUkcZHD=t1vhsc|mxtD~nJp;qz+Z5Vvvi!L_(Mhr!3jg4Fm~hcL@l_)s!71& z^#OPKCOoatx)xVQaOt8d;0zd)9ind<%xHpqULP#2z{_|^K;P;11e{JWF*%SmKlrfd zdaQajH?)1cp>~Blzs16U%M@ zUwf!DvjVxrj-FO*_5ShHiRFEZHK-qst?+uq?V%b`fUt{b{9rF2#bi2rNY2H_#RYqD zZdP`>^SU>du*b$A%LJZ3X{PWMhxI@G@DUnjab9+g)Asx6YuE@D&nr<=l`GuP(pHee zWxQg(rjvaKo^g7_+%eNL?*$(GI6SSF&Cl^%v>xy*)Da1#{_;kg+Klaup{`^I(!EILCv(Nscckfpswr4G_U*!)5tJ-R2u3eB~wybR2S{w6tqrQd+!!lDi zgD+-WUKQ$RcGPciJJT~3ZVLT0En;xmYIbOzrB@78dfEY8hY$LAbTM_<4#)+7mk1vT<*pEDil74R}pat@h%GL#&+VM}hv(X=orCP(~8>;Mw^`iH( z$mQgSz1TKjK*@lJflh%>t~|HTyQ86IbJMD=t*eh6dg@UrC(hmY;olcLc;4Z^8io#9 zRL5P%B;Co&vj_Li=(n+bSyjizde@G^^x}lDNG2(f46gXi*xFWUHbv9T`2(^?5+kCs z6EbPYA~QY}h*w2+Eq51K{W9be2ZLABful4rtoet`|vUI*_B$-1j zt!!^<4_geuvE@0LX*LnpYSm^o;}1(P>cp-yXXjr&DRkr5Qb@PMwn`>->;{S5KnWbu z^pp@(bV++j(+ThE{B3V{2ZBM5*X8vE9Co~c*@Z;X9N;7x6LV4TqkeyDLb!BRTbG4= zW1&u*#jttx+9w{c7mc(yQw?ioEqUdoBY*Wj28#?ZiJQVg z>WwF7pz^)r;qzUd_M)`#2}h4ryZ@&3RSo}mWrLwt+w6bNGZghI8=AYNrRAop9xxbi zxs$@^n3a|u+E6+3=a&b4jm~4IuzPH>*l@?H7WG0FoQyCVZhiXskKLYA9(~l7lOOT< zFvQL{aaz#lleV*xSn-Z@rC2n;J--fPO_d=hSMb*!ITYT99{WxKC<$rzJ^cYssdfMjh{-`-h@fJhd4tQ65nj4UfWd~hFfp)l=|x64oJ9$#TH>=}$6Z{WRIt6%$Y^_(T! z>BMMT5wqgdQ92Hw3sQw|$cUUcQHuWYPsukP?)bi+Shdf=i# z6}@%6x)isMKf6|VAG7T>8Ki)2gUfqefANvGJ@SR}W-BcZpHQWT{xNUT*s`e;hiJ5+ zDZ=8R=jY5@UWa-Ldm>;X1w&jAX7S(gKj%AB()OW(2fQAjp;}uUQecw|b84C2eL-|g zrUP*J=plWF_A6YvZl}7sO+ldIab;HbR1?yO(+q^V3=`Z2))Oy5)d6LN*ZlOz|GslN zR##%)2&L3W1!cQHXUvufNxTwl&szrcv7B+zc#>&u?~*?8lN|6o$8ZrhG({r*-~0kH z(P&nAh4axT>z;Wg@Z575VZR^80isO(=)y42^z=PDO1%)kDI+%aQ^-gEEH z*I%oC?2+`2HgU&6^T`w@2?)hOTs6LOeWNpGX>+7{h79UEL3W!6eA6$9r_PKCEy_$e z^DfhnX{d3Xp?^_g(amY!|?5jW-==hNPv4FVa zuz&PL^|hDD4w(`~N!TWXI{@!7&SaGI$$R$xQ<%}Id9G%pE>(tJBB64#Qa=8&=D`=1 z8I8igdj{#^Odwc$M=ef6+r2kUI{$2uY4I(%Ju`eOF~ZzTPDHGuBe1;p>Bg)6_^H>2 zHeDRhE6x|yt!4o>#3B)F^FlZLeBf`cI35I(wa;Df?Lww5Uk~0-)kO?jwl)Uv^h@s* z6&%Bg=sUP)x~L>Danit?>{P7!J#J%ry9Z48AoB_&g$l$d#+FftTA-hj-9aNBs2JgS zwT6`^39?`}tDH`WQEmxIbkPSZ$7hiMS$Q|vA zmel*B*rms1X;0l2dW#bdt1fX5$?89#yiecW(Xm456$cN;C2syzM((&2`)^ z>hU%EOo3?F!d06_LusyI#nO!vO45zape@`O@}y*CrUk>E2A8R!!8@Wj{UeGI}#>S>!Uw?B)hnr5PH2?>% z#BL#j1}%bcxaYoy5mU!ZJqk1qo)$i#BkC5JLy_Ne3b2TV)s}AVXmCZaOlb2P+uf@pt2~t|jw$VkCHn*&)^ENEqvGC+UXT- zz@R-ScVwT`ek4hN)sj>O#$9m&LZ&(-Qyu{1ch7;W3W#xJX?Xg#FK`|g+|G9%Fd2%QD_B)CNKpO$@z#C+EY z6BSH+(l5HWp32%iO_!_(=BGvgD|qIcO^vNiCz@M)H>t|8D3eWoW}9mFo>zj@Q_aic zb!Ys=s5K;7C~y1rci#4G_|h<7s%y*EoIz76Z@Q&y!ld3uABSdvnJT#z2q7{?)`XUp z)<~2K%0ukCYK=2#fW&ef`{hR-dE}aFt|==ktEi}W`st@pB42#*#h5>T`Q?|RM~hE1 zOqJ30k^t>(c6Qu`ns`QHY>IiAH*X%#ciwsD$}6wLqWP((p3)70tucCGO2k~60f`cI z>Aa9$KY76w31FcH{<9u>=pm%`U;gqJo*GCZv3{Wn&<@=kw%BOQaoLQ94(&N`2~{}M-@3Ko(o_1Md){xJ`}+*;B-vEC`G=<*o9cAXk=EC{Z@=R? zLwe-=qlcdR=ye}`vh>9dmX+r^|Mbb9o0@z-Kks1x5q8X;*|BD6&T&U`)d^QSw=A5? z^qG?Q$}@ZHXoJ z{$=l(G%>C^@5nC~ZJDvKhJ_jve~^TKqEYAX?w|3&)BUnCQc$*X`g`H3>ieIYgSK5p z8zp4WmLg)Wy?Dyl5rcYaog}mr?UH^UfLE58iW`xcP*!m!4Wfi?Pox&yMYqcht}-i7 zKXq;7=iY)eHk_c@9!BbsmlV+ALT;ZAhyl5H2vyA|j2SO4QH~lED4&fC@sR*)aXMSo zNljhilchxRq!$H=^m3?Gn4>G?q@;=0eMyr@{B>WHQM}!1?RVvs=@Tba-TN2&#DDwPba@(_y13(qR09+4x5~Tz!W^<$bf67qKAUv$=K4CIj4u_a4}i%@*ZZ z;>4o|?E?_Q!j(H-nZ6D^4~h3+LjiywgS&A{l3{i|di!ywo-{5PirB>Ka1RLVOQ~Ng zjb;&@m98xv!)!(S{Mg@@|KXtp$SAysQFldtQt2H>Y=_aTM{?|;2XC2n+Q|dtgYp{m zwNN;?nOyCm_Ex50j2E(V0D;*EVLK$RmvQRUp=oI;ULWpHj9za*x;7lfb#8~VZRE%zm)qr$ zS+Ns!vy`9$FHT2lAQ)hwAp-2%=7O)^1YiyYR@Ame!XbzP>Ua}4eQbGdPF|OB3TX~y z7`1;kp?vY{3%L4E?#6_|JqMw_$&&8~jw$a;D)REwM5DhasFw_Y8HmknA5!Q*%P%T# zHA3l`RIjWwQ=3~eJi{p}X~vaA8UUh$E6z-<^13xZOyu#sC+~a1F}d*ngm)YonEiMn zUKzgm-N3Ph>3+4>D>YDiCvE=rHSV@lsA@^eN9k(gzEiOV)m4mhdC&DAnNHK09@82# zheVrPE$x0k0zKE6nvo{gpU_R{7=cja*rL2UK5Xuj=la3KbQqgHD9w6sLJ~_z4`g*I z1Dz@kv|$FkMB;=2Mm_V)(+3Y3T2oVNwOH!w>jn%IAy&0*TS?y%GU|Pxi!Q#P!{y4! zPA{)0ojP?YON{dJ(rG7%%PH$5m)c{#a*ipAsteQ=-DZ2mXomr~s7mYVj~ zR`JM*>*rYPH_cYkJ7;T+uU}rar_DR5e_FcP=ZzR$CP#B!EW3}M zRtb&TT3gD>OZt}edF`#YR<2x=lbeG@92YgWwstIEvAm70~$a010q1iFPk z+;(>(exK3HDKoW$Q`+94vVD!l8JGR0Ki%~}-@bkNSCkz*3Vg*3Y44aG`ud%w06mlb zzrEhGdMl@^P*26$qLzhAclPN!YjIHJ1VjTX^#=D&m%o*J1(_Jy zEzaze+{_gAWcO8$Q+H4rUYb_c%h|lyy=rqueM_ic5qAfvGLj#PQd{eMYqq#K_%xtz z+TcF2$*d4Dwz&c>Uw}i>`B^F4TD)7n_}akG)aI#c!Pmdqm$O-NGabeGX<8H}W>j=? zK;b_WztY*6TxA@uY%)M9-r)(fJY0 zo&__vJba72|Ja>Hy@#E4&Xz~+E}1lH(O>V&A2Qfd(3{y0Wl0;U|9Q#F&);5E)zKd1 z0u8_4lTbiIH&$7*XV1>b$+_{y8}GjRZf@JdzW9<$EKQ#aiBYVRn2Qimd|z?J6~quoj9t0bdQ%a6Y-uxd z#dX5}coe}L8^;=G-pTdklTV_&MvZ>qg%{%bLo3`F&j7^}PT++#t$>z6zk1}DF++!! z5ADBt*_)q_zWT%?rwrR%)BcaQ-ueBcNk!!)Eq=q|6@oZOqJO8P8(H=51@3F(X#j z&P)$33^X^%I?e4R8~1g3Ihr+ez=$h<^TXd07*naRNipI4YOv=!s7m=mtJBgh8Wa&`vv41Ce}UT`s=S}Zn|K> zg7eQm|EQymN^md0)n=ioe~SH_X!EL;NQOIhe4!ad13aqMxNw84=`+&oKRvPEYcs0b z1Mae1c{O5ITKCWdNJs|7xKm7>pGyMp`+ckC4?>ir# zQQH>8sDlgN)S!{{4M#Moa?AqBrc`zDPtZg}TwL!gnngaec6b-B-2V2bt7ptz-;V8+ z_|2g=a7~}Mer4$?8nC1wM2p6La>_VHSiQKV2sE}ug*i{%{^K+L>$$r2;NrFI55G9; ze=eQ2Ct^vEx_Q+lDczP5Ug}mU(m@Ti)6`8CqNowHQmxErEz+l_0JViCM&qA;b>foC z|6g+l%_|z{a5QW)g}3bt-|^T7_uhCm&=4wjJ@GkiNHK>DMMAPh7jsF|k;5{sxnLUb z^*X$#f=I6Z@A>;zed&39D6J-ymer*i3Ds}SNb0ql2P3@b83bfXY?q?)6dpD_Sg28|DMXpTKo${gVG13=Mg&b>MToSN|;Lp&4z#{ z@YG*7&HJL@y6dxtjm&)LuRGs;yXpP+T0Zo^JD8N8~2bX`%f2ZszTLi_CZM_nDU5O)r0xda;}f~J@d2)uUh2(uUbDYvKLyNNq=cldeh#4{Q z=^?~<(kPZCC0WL_)D#_)5YfEo_U!_Ib~1;feVz6$@%+q4am0*r3ni%0Bn4Sw2apt` zgQVNRQSLhC2V#vWWm1Cg#4B^l*ou1N-7mQZ=Q!9N(RAaM4{Gn&`l15palmHQsO`1#^{9EL`2%(BIj9{0PUu ze$HNb#x>jRPtFeIq}W*#>nRZ`;Qm=ze|n?7SFvS$iMnuGsC$5eW(JT)#jF;v^jo8> zE}?)DaiGq0-R}>esLe=C8!>EHyT{9No8@O|YI$p0JGTp#SM*0g>3V9>o)v` zWn`um6&DN|G%!8I$yAW_1=mi@nKSpJk7lf2zs2S9+U&Nnijw1wnR5KJV{d4H1pZeJi{c=jcr`I6Eq(K!z2wc*HG6oopZ_H`h zxV+)q@ukFRA|Y3M73DIH_wG~V_J+qz7&qg+kFzs!*RQKwxo&me-o0I}4iwN3)a7z7 zUbF;L?(yTtIh}IZVP!|7HVDTjP*d2`RMT9Lo4dZFzRZv|rF6JA7?hnx#1*2)g76WW zvu^v8V0a(`ObDKjKKAsoHwvt; zkM*IP-zf^HiG`uAEwH)PB}-gxHi=kgE^Pf-$te;ZL)K%@#3nP9p2GH%7%vw;m?+SaN@Whj2d{voOLrlTL0$RV}6!m%IuaH z`6-11a)vcl*ESfpZExLNkv|x5lPt~k(c?CM%c_QjxT7g?^e@j6*97!Xosyogxn=$8 zy2V@D);4>02149njuX+0qKtm!c|%7PO~_9v+OxONz4g$Uz>1$xAjNJOTb{OZbMwxY z@S;s^C54VIYX(iFU^qH=RZF`!l$K(hG}y_FH8SET%xAA?`DkffX1ep*Gs=5q?>ZZ< zGuAfwzF5_?Y^$rX&f|7rZeU7FHTTZ54=c|+c2xd=VjM>ZC}bisXa4$*_ZHOk%Cem| zwfDdhblh=K3(jgmVhjYs@6E5Dv$Bx`ZWm4~oj5E*PjnKM(m$6~y8b?6yTuy2MXqIck*IEjOPt94jMFQ!-fqc(+)A1X6fuTH8rS-@qIxIqmiC|DUK4u zXH2c9O`FE(PTs4ox(aU?TKS7fH45lt-5%ajS zK}-4Ez)G4Dk3IHSJp>Y|G1ujS1_=d)7_axNW`L#r&=!b ze&qkXlbO})^F5 zYFn3AZiD=@*Vf%~+w-9a^J7^+kiE_8-CW(A=UcJ8srk6KUYT(EnNk#;6=#U<*5yqt z+n;#CIr=cRDcEyH{T5LkNKICgZ~5}v3(p&M`BeZ>9Ln`=zChIIYOC{kJ(ltTRFK2z z2at7DLEq=mmN&MDt-X!+$&VSJG9CSn)-pOVl_J1GghX5=Rgwr{zvgVOlEd zQqgD{4W4jpr!SOiH)Y%8PQsA`vj_G|ae0DySt;1Ckj&)^FRbjqhGb-UdVWrduJwVc zmzK2imTmv%drPB+P`V@hzt^3R;&67cT1qZX=HDjMXY)6{`N4GCD=0-bxn7H1sR&Avc83X{?#eJ{L}mB zZ5W)z%LrKv(HH-r zAS6q3HC}XwMNe^3aoS1c>=u8isnAFo2p3fBgVdA(ssi% zbW-A*T)}_Msd;Y>Cj$beSTH@!QJ9xnQk>bRS4vsmjDE%GCB<3gB{^xSalI0r;y|Ml zkpwYyo#Ol@GtTZRo=Dy0rL$J54SUE7BPS$Ja(0zm@Ok#t6*t~97ujfH^Jw?O?OG}z z)VL}<7&GUldjEOfsT0S>4>WZ8qyY;-MED1wooGlbJf2)+5AU!X$;d8QcLjdz_M0yX zTAV}mzKpbmA+&f^{o>Uv+|I{ZNu2shpllIRO8IWHn!?kLNPF;)r)6jE=JZ*m{EvD_ z6&X^+&8cE_sfX`fBlHl7Jfh@Pf$}j$@V> MfoXE6dn0H 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�LVUt^fj%ErB?bf%y@I3CRD}5~wNR$Cl6c5`Z(CPz(dGYn4jq75 zqo_W+3tvgP4#@1gd1bWXgdTZG?ve%WcZ)$tj@k}~=i&>`I{mccdwOhW2z>m}>fhY^ zQeIvfS2<8olSx%mU3cf5m)>~OC0guih*84dV{=qiR)6@xr;q>X`OM5hbubx)jh=4% zjn|*C;-lMt_vkOO^5T1)!EIYAbb5o}U;*|8gL(!JoyXgEyLE^Nj0g(rDXbIn{eC-S zSrg3Kgh+L-4aAOt%vbMKmo;}!jlaP1~3l{D~SjaIL z&+k98g_rz0bhGFbCUSOm2j5)h7#VF~&qZuz3*sXyl}E@;Ksq|KB5=hNN14PyQ!x@E zhzTbC?ytF2uY0xf}TA&uRoX_ z6ZQJ~wuRFj13$+X$Hle>IwgV-< z44pPSBtKImQL6s1G$m688m_9Le(Hjw7M^!HhKxRccln1ez84oC$<6`$!2}nrsYFuZ z!H9i42Ej>9VbDSOs)Z$Jj;Q|Y-){jx5BmH~J$?Y7zbOU(N8?LLNSCvkxKNM&CHWcg zDCQkHO~i`ND~^vao-%*j($99T*i?&@o;D%<*B0X&E6V6BT2 zf~tLf@9vfopT-@fiW(8aPP^zEOjPNdyIZ$8z4k;?>h$z^%vA6pyj*oF1GXwPGHXoI zl;zbm9gdd$?UjXTBKns;WE^WXOenB!tFhIz__vjJ&l;BqeUymeclFNB+7_2K;GI1- z)oKdI&HB?8a-lzlQjN-n-rY650hMn~aZE}K=9a{erBp>E$P6{oq{D#7x^10}E&k?C zPku(IaMDSQK>)wcfgJ@-A7xbPTP zuid$Q%STtO(fGs}J8=bvc!a!jb+tuKol~}E-QuTTGDIeL-1eD2y^Z<0LN;xLO1K^<>=~*N4%Afn6{E63?uip8@(NZzwd_kb^Ny6Gl#W3e|P^`>bl8MvQG$il8NThgY^Xidv>Y~0jTQJFuscprBT z7LSg~&9sgmU7=FNO`BSD?)e_G(Pp+p6^@A-onIeRr4@}9V-`)V@UU2;s8nW;r+3}z z_4nW3wc<1D_^DBI=7CN5T+W8iH#kmOSoHcYrp=#kj!RT<-tNJ?QP?b+Yl)7m1m%))3AqQJN9kV~(!va2GxAHZg89>BMf;YkpD`Rc2$mf_hf0lFm}N&;$(nl`_(v;+ueO9~^~T}G6@ z(x5s1Bul1POD9M936nM8&Tv|Fbu~OsH`%;-^ZW0=PiG;#tYCOjhvOD3Cqx$&7q)Kb zeVinKEFkiiUV15YgpzX0CzRT$@%p$n$1YtU&k>lLZV`6C`-c#8LvT+Ym)vcy`D{CS z;`%AM{zbF%@H`^ubEpgg{Sj*bwHt$U0bw})$U8qolSbma$?y0IT|UBz%$8J zn+Fhl_>vC(Li&oF_8S#hE(Fw|M;2JxA)$DJ=?8`Ra*tnLd+gdRl{Jl!g4G$RNM^<% zOmq0u+WF(7EKYV5TooC(jk{FgnUl_Ux#aG%^qusf$NmyPw z>@2?ffI<=~l@Of7A5t2$IS@=;yx1~vLfvD(H+{B(lL#C{5Q{Wn;G*vt$XkjwQ7<~X z?QLxj-tAcbS?Xk)l__YRc zYFOYDf~ew%h$7(VzBC6S0XP7)If;^o@w_kHro3+Hm4Kq*>SsDqsY zD|qnN{x?as{x|XOu<;c1SzMQW`On_}Xl;vH7_wLRBs{h-%7fytPmLuVRbc*P^WT4W zW>i${_Z5An=#&=;59kM!N>jrj2PgnjXf?hbm-eEcEPLv1&lx9<6&SRbCmjeAUiLkUh}Sc31A`5A61fyLO!NJ~m`N+gP++Q{GB`>fyZ!DcL0`nkGBrRqdy zIV~;0#pyLgR>#D|=H;f(Ip(NYv!|SM*4Zh^Gi*Je(-Fm^&wlgW=M84nqfgwIou5!! z)7I5#)9VZv48+noH-xdQW0^3RUA`w2JN#lmH3X?C!aO?By5H#xdVNM{V>G|Dt$K2P z1~jHuDt%fcDfkJa;oSDNtD)V`im%V+`ysLmYqUdz8sd}ajQ`&}R2Cv**X)b!zS1_; z*m$i+*>O=wE~&uq7KqU5dhKj-GgCb<%}_oIGK&r{#B-3Rkjb(m9TfPW7et25#tK)t zf-t<-;YO@zwY3hz$}OD*Cz{3kxA1VtAe1T>CeqKvI*q%{jRpfotB^rH zM`vub#?}?Nx2)Z2Hac7gFKWtd_MWB=eOhEhL#wUF6SNv*BCU~(@~^zI6qs9&Mh{JnT}f1?pLk&!j_+`kBianYjkA9>qaJ;^orG$5I#U*zWJjt zr?CFK%NZdY-{_B;#g)v z3QdHH^~&w--OgZEjQZHg$@G6ADhBnyusM^cU`v;$uGOiJ(4;2`p$}D+D1Agwz-U!Q zk~uos*xco9>0yZM!%%Y5EHg&O?rCV*UTLqWw@(@=&>sd-r`x}>q}AcmF^oPAcs$`$ta->TfWZQYFNGta*S5eRvO6ofYeL66%n8b{$+VuiN_vuCOGObO3C z^Gx(cv7CUKD(Ev{G-|Eyyz@?Y6qyQ|!Wc=wA4m>E2O~$01XXa0hORjW#RrA9y7W27ZE(H3@=*N*p{? z5{XuWMWVP05)Ir*biPs}`H2Mk9;MYtip8F~qsNe()%C@uKzy_pe~++Cg54-|4m~U@ zbgBtwoT`e5|(v3KxxjMyFNSfTz`6U^xRqO4|qI|&JCY;9yOux zUoT8Kc0p8xAMh!C6+s$+QQZ`&-UAmM6iB5v#LU=70FZA7;#$!OV}O2qUl7BxRzIokXA6 zv%$Q~oH=t~dl&}X8KrM--K0~XK>hN|FB4Hl5rsJHN0F1FRk_JRs};8xK`8VisDey` za#Htg+qQ970e1cIkADod&P04(vUy%uF0J0+%Jx8;*IQs#&5gnEyk_Cd?Aeo;E(fg^ zVdGw5ov;Ysz$xW=L2f*jF@S*fH`%*wj%cg7uPz6tEJvTezOpV5V20{p6@BpcVc*C_ z80ydngKyfPK^@R@>eHb0n~W&->S;ii8C0U;pBGcr2lZK{owyq z`-kl8HivV~wkkyri}{7Z*27fN458O9ZolEe9R<^{Tv^gQbE7g4O%Bi zF7UpC9|VUt2-Hy5;(PJU4YyvtkU$C#92~6wO^`=O&_g|(3qm!Vey9MiGGr)CG3wzZ z2MCEE_t@Q6-1WhV&28#n--T2IQWvFWnV?5NXckP3_}jy0n=$3d{WH?K>VVLP@hZ!3 zh=7n<2{VXX!^V*`=?gEIJgCn|GzSBo#ttk*iOFbqR0VeTV{GAyU$5+O`Yt_VqHNr+ zC1%4D{ubSGt}-A43M`sZsW%ScMh$|XY}g>#9TCdGh&Z>K6Z&HIFB{)xw*e0cut{lJ zLV7$woxy+VsmK5QZ?F9L@~bk^Cfd4v`>Xh$N%sH%KmbWZK~!ypg|lCK?U55snRoWt zCuL1_TuMtV#5Y)Y0=#dBEo7i({AgHiDD_rj7!mg9u)GMcwkr0<<;!3wI@Yj$YO}} z5g>_{$d5L)EI!(o9HkQ|?I9W9YZOMNC%KB12v(A%*oHM(X`on!0Ys9eFQO@;=rxP5 zfXg;}&y>kyue|!QsK^L>GPBOAudn;pD@!snGguO`vgqltPn|S&+VrV>MKdfa(lmG8 zoZsC0{0WPag-Bqs2%yws$67Q2#DIb9;7TDh{}P4aW-j@9^_5pjcW!^}AAdZ0)(m`F z+uF`J{YM*0c0B$2d(JxNEVIS*-UlDQ{nm%?f4F|;^wHftJuL85O#TCbM2r6PIav)& z9n(f7J6!tDHq^#zvcw@ht;%ZDn>1aZrE!+{kul~S+v;}jZToD+hqvAEr?~XknJ1l> zHEwoOZ)AJ7uifsqdwr350f+9bbgZj&*Veb4G$YpK^elP5>L(W$13(KZ9nlt%39kEm zV|i5#Ni&sI<|7ng*axA(3bd!Imx~#VMuR!hq}QW}No>`&@~T_zx$Wo$^V#9p^6~2S z*4Cp=m^Xg2-0+LTieMjkI#GlxCJ-&X5@^%_Y|Q z?|$&nsF64DdT7x!WFo_P{s2G^N16W*{FUw$7p00c`MYhRcgdM3?1(hf>p0i!fAyms zXDujNc2lg^u5P=Hi)Y2tH=U7g0n>0}v<~CW(S~@Ns;#nX=TzS@MxDG&PqnYDwB6OnQn?^@ zdW6Bu`dM~+tjP6x>*?t=?N}t88>oh4DG&)C3N9h*S^CSn(3RVu~UD6@wEie+chWh7(a6MI!AeE%lywcEUyR+)={(oJ}_X2){oV&{=6KhycTX7?F@7Ax zC5&3lZ5gWA##YseHJiRzGy1ygEa+YNS<`arU8fL^5lih;Kv%-ou2|;i>WrT-*6(q< z>dM;8G0D$8bKG(B6SA`55&Mp9o~j0&QQNK4#7~=M)@b(s`xTenp`r^%TJz6Ztg*x> z+M^(7FpEKDjaGRoAf&PiA)l}w9#(;G)frB-M;>_uxH*&^Oa;VGW1WBg`FLWW1ATKy z9p32p)1V-&Y=N9}&N}fT6JrgH;(mQDAa}MP(Fx_{uL2u(AvzU->0F*b+T!HY#`p zw#HP5M6r3Lf?QvT;xl%x$r?p(&~V%`Rw$7#bx4`Oh1lM<@7In-dM6^>9S>%oEa6p4o;)(d;O~CntV2s-s{#js#U$sy{D&Hn4O!H z-XSY~1X+Z9Dap7|X(MvucbB(UH}-DWUVZ$mB8oI%Js_da&%P*sx+Vy(zXm&?0hYxN_~uW9Ubi2*_^ z{QDkKBPOseTY2msWySe!yzKb?k3;_}McwmXLcmN%6A_tYVp{_7MCt|Q)8t2W&V6A4({=B`HpeZscsFpe83xxS6mp!BqO4sMb&q98G;~>Y$;ex#8z`cCTKWcJr;q__)JYg{E*! zE@axFNkVLNzA)@zx8rdb`f2orw(jD+2Cvb1)?ZvV;k?^EY3?*? z#f~HFrA(O=EZp~@&^ZD z6y^b;5?vjCCJ#*AxoJYd>16wAJsvI%5$69DIUs9;K`Jr#J@KRkCmw(HhaZ2Ql9=Ff z_&PWkubT7XKi*n6e@=3849ux?1hF6zX(^cxpaumPa=JSp*!S&K(sf#1^0~Hy=#=oxH>kOEnIF`7;=OnWpqEcW+!%3$hV<{{x z`oK^R3j3tTpCI;70s8V9GP-1vA!Gd)Jq2xr6{$eU{=lYMTej6KZlyc$^i`9<rhh zYU=IjwkZI#Y?A}wzPXEj#+udTR@Jrjn6%O2bi}}3CpHredc(R_O+`~ra#S2UJB(Z3 zJnP|7FbJjCJ}VqT4uEWWysVlDj~yKWK=;!M>!ux@J=xhAk&zKzWfzKl!x1C$nwz__ zv$GV25ln+vK>dd3N*7jP1TrQ8y^X$95Cpxw9&El703p)l3wC*eCL>qRs*D|lasa8WxKpZF-%y=tG%^5+GzGWJ*jEd%8sr%6XQ@ImSSAd z<`&na5$s4k%RgHsbhAR_9zI=0scx?`Ge2`|TB^(8baZyt?5(ca-I87qSKZKh)z7Y& zvv2_#{$G5!^bhwv?d)uAsjpvr>3JikjlJTws~^7W!B~@Se|5Vl-BMIs5Sx@>Hk$l4 z_nz%LBaJ2&;3C^YvKtb3<+=@5U2$ntWaJU-??;l9!;|iZFW*lJz;^27IAeaAd25-I zD@&CrhL9P;q70K0ZidiW{=Iz9DYJ6t9z7OQ5^Fcty|cDvS7qx_V@8~K{B*afx2Afl z%htl&Ol43dB#aqRkh^x%%eJ2OC}U29mMi1LgFqo==@!3=h(ZavAg*|8`>Kkr(t2BE zUThI;?F)EInm0Owok^CA(JA7ZFGQP+==B57iDj%o7ZH}0{3w23eS3T+}W$$;Jg)Keic0fY<^NsFJn6w8<_>$Y;|j*9MieJKM+~$>~&}o#C|c^P`mLbEiPVoGA(50p5UO*rhHh$7s#gqJAw;qrxLc_v_^wFtvIPB!h)-Ah# zp!5A~Kk=Hc)Yc999m{md(k@krk0&<*(@8f(OM3UwVjkWTt0-m3Mz# zOkzs2G9_cTz@m!jc=jKbVviU9l4d|I%y-r8ziMhdq= zy6fvSXIy;Fb=O-)DC=kT6@sd!_3PJOeO+vnrlu!wT3NX{DSqFRk9KU{i)d&8Cms1& z%8WUTtOn6#gDT9BwfCqD7(x+B0>UCDWKv2TUWISl9g;cF^Q4nbB0E|~aukK(E3h&u z!x-j9vtB}|p+d^IaKe%$OTcYqQDFcAkQz(^xQr**F^bhV@TVz>1&_fS7^VP##{a$d z-kUpjE)KXw-kHfJ3Or0n2+zZ(P_npX!QeVRkyMD~;4!}9BcmwOM8N@=!jRKVas+)Q z02P#l#|__JfBp4$-gze>UwGjKDk4AedYBIt2KHEA(z(7&>vn0Ymeu8DTGEq%#gSg3 z=gJcP=}&)>yE~MBo*Isj-|NR}s*hS&vDss8fH2DOGMG_qV!RX#$B zbH-dO_(T{{Wztn+IbGd`lg;GAMarB)T%wF%q#9o>#P4G)ZK(N zCC%bv#-=96A5H>qFW`|+HW8}?Py^@wZaxeDwTHO zQ7Px2Iun{OZhlEB%4ek^XbUk5`QLqzJ5-rkNbKyeDn9((cJ9>Lx(x_9WD}@^f-rY-^jM`a z6c(jkc6q|F3u2%BXVqW-Vtejs6DmVQ#;%Sy-Zez2;bocv)nyNg$!sFN_jcLlO({RU zEAg0PL~taSoY4&tRd~q-?ORJr-(6W{Hpm-2p`G|oj1^FlJ$9jrt&TQne|h7qDdVz2 zDX|*IWaLMmRXz6iQoCD#f)HK&ANH^Y=f2R|W?x6AEe->7EUiWFQ)~AY0 zbTzg0Vww{Oc);y>vXGo{-dWWhWD8pKVv!kHQAFmnv_AV3KpEuBb`(>xs@jh8Z~36S z&VgBHq6<<8z7>NeP8^DdOhbF=$yty5QVg&7hv`0xkl~N)AYJ%XlzHhK%C0!Pl>p^aw>$8P4mFBJG*V(dv2M_*e=PaB>#Q+kt9N^neq$8 z7^PjPtTLkzW0n}M`WlP2gTNw~;?2kmXuy=%sn?5TjY3W}$L0v%PkDv@!lZ;a5Ed0} zoHc9uhabNjVM=y7d<0BLFt1o%!ewGvnO36#r4STQm|%*nE_hyWvMkR5Y7Klp@a22# zf*SA;L;s~m=l%4JEk5?1)qXuoIKTU?eQh6?w~S8XW_qK;?I~~WYIWi8_g^~xDS*a^Li4Tn-Xrgqm!ythOC(b}ni-RMmp4Pg^@`Z$2Y2Gn4D4sHI@^Bl|#B7W|2ks!LB#y7ez@ zDm~NS!N{9vB(o;6WUp=J$he_38opVvnAo$x6g(i#VsfF9LH1tJ+gX6H+v#InF5UzH zE%pw@15F6bo#AYuutbnuQK#2=U<8F;_@HXgW3zc!;rBm`IHricIueT6Y7c67ZV`Z` zWNDN8@1Hpnqm1SVO|(TDXVqjy<;Ak>6S^6q0Ic!H6cw>Aisl+7k1Upm2Os(k!a*kg z>~l|b_i%H&VCi04&*m>S?JeDW!MT^czjS&2sEkF&&sY1L^_A5|OO(#rp1_6Mj+Vmo zh&3NA|Ib?=f*t(jmv^0T$|+54Zj&KkjWO-s)exCih!USDr&?WS%9k zZ)q;yRx-ZZHfPa7Ru&sSS$^Mb_fMTOUaQOg_|=bCU$DU?D;JBk>IG21g>* zAJX_=pnw=`fI?zTBh!F8y%@zq0Ejs%AEcCGz|yJ>YU8rC<+b}8=N&yhJvnak*3ykN z-Ur_=nZ0>eMuvIhh@=rk=bB9_uiszOQ1#}A?>Gbd&>%_Hq>jial#D7f3Xw!49}HL{ zqDRD!-O{{je^+&FS2X}Mxpg|*_jQ))wfYouWFg3>{k z7IKu1N-S=Al9F;jprKxgLRe6M8AZ`AE^BP}1UFVV7S9%EPcWT{LNpd1l4HCRM#LZ* zhwFP1-w7p;-kM*q)^}qjb zA0Jha*0`_ogvGO`&Yt?nQ~%oE*fAw5^RkQP2RvQ5IT;46-s5sJfi*`&m@Q_LNhk=* z<{n%fNoR0g+6DBP(l#|UamQdNybK^;rF~w;W{DbO8v#XB(nL8F-BmzmU^|HmW80T| z-iRe5%0x&X%N_t{K!jNBAR@8kK!xoEUc)hEZgm65#>O-SlVY8GQ9C6V`mhr0#?2$u zLeb6!%0!o0>{s`*G`aH?7!*$#c)%|g%>i`2{`%`sd+^P5N?@_a3m}GCicLQ5y00%P6#(xwwE`pU#Cy@ z2kl$8wXa#tjxK$Wa`u$$Oqe{*VznmN-H;LMo5q|%tJ-Xgib=8c?s(uK_u`#uBPOf7 z958M#+2P;6*ASZ+0MJv40vivg+IRCBYF`Q9QgZ3TuUKDdG_)W9G=+gx(BTbdCp>8v zm<Yz%7z7Bpb-|!GdLAEMO3f2kzoQB_Fn7nm z74UNhyx*Yqg8U2)8Dd}(M*zxRgHzB%E_w0Bl)lJXSbWfVIqd)KJ`!2J_~fateXygt z(YES~#^+vJcg49g8PwR1lz9u$s!=arzxUHGDkz#V)`U;s`k5AEcZeu4TA@D-?(CT{ zF>&_9{MnQ8#~0<&L1b!lE3r0`0R`KOo;7`ZZgD}%#$64JWPq+JCrsu{ zioNLc+4$4VWI6+WNmNeR?|pn}M;E7Uw8zfKnl)|wA)*XO;ow(tp=hYNa3s@}nhfN` z?&;83Q(poCDtUpxg|HAL_)3oeB7&;8=*Y~}xQhB-RIi1W4*zSkqw_`2f@X&aKo7|G ztCnOy^#9T;Rafu$2 zqD%Mp@d1^V$yL|(yuGSh<+W?Lf9*iaLRL`$5hch>Po18uyYa{KguzYdtLBhOL}5V& ze_l`Ek-zQ6WV`}d$tI=^M5~A%humQJQIyVDU@D7SB?YA@q^=nG0arFX|3=AUzsLZ6 zR;t2h@lixjdiOuy+_7U{55_bEysDH+)?ATS$TW@FBqkxC&%4W7&%gQInl`^qjpYql zMZO3}SnWg=z}K!kbM!+$oy!Cp7?h1ALJ(}ohfi63ii%?jnpb9TH^}n6uCG=U4W$clAF0>k}DR<#?f_`MvlNln{&n zjX-k0A_@~~8XUqceU#5y#Z)Q)?MRcn*xmltuQJoLj$k~ z`%4-|0ZhuWW@+p92aO`VUXNS3$y}$_`PIt!E>y+kJPS(p=h#OswYYwGfZz9ml7}t? zLo?&l*zBaMX5~M^=>) z)gY$lefxsSUBF5c965(ky7~NjM20~g0W>vc|AuUct@Q45ggV7opp)75LP$A8R zX0}=c0L^IH<_t7C^-h(>-HBeIpFKjOqw&$R)8mrBF@)@;>UMQ-YjdEvTODUrM;QVT z#H0;G=~R&#HJ1d6FhbM^va>QAE{DaWN8VKLuQIT8%$(Eh(Ho53fTq_K40hNvvvW7C z_^7OO+l432xb}uyjy`(2C}E&O<Hx)2>k&xl5o``IedSuOimHaXCe&Bxe*$+K{$aPXp|O3@xeGH!=DM7{_Kr?e>M}Aj za|-i|r;c;<_FB!BT^lytd-E@*&ztFSdHn9c=&||#e)64&Sj#CFoIU-xInx%-jfsw7 zDb;K5ZEI{&nGErX$+M1||HQIQ*4P*o=KBwoKTWJbb#U9ZQUGYt>PM)b`~W}?-{$|< zzraGwolQpFv{5miY-;PU(Z9qxFT{sJzJNzC%g~s2)p{G=-ZFVy&g5wm#*ON+_uAL( z>waZRyJ}lIwoxPWU?1Juh%LtGO06jNnzq`N}>6~67COl@2YAm%1zi>*|V*xCm8S^RT!HXtJvR=MIV$7nM&~_ z#jV*$QG+JE?%G9Z6Z4}H2y!-0JhCDU`G{C5)u>FxnuL-9^k;fEHqRQhp}D#}xU;%@ zTwYA8&AWbYCkGx2Ga?Ez1lG(mYfStHo7(s653DL}ojX1n)#1-d+5>7+L561fXrZ1q z95A88{`x-{^0!1vFqHMiY{>!>+pfPj5f|v(wX((|&*d@8`@L&s{pFj?Z3v z_9=JV^RG=?wsqL8_SX6*?z!%FPrUolvXxV2F8FxMzIFfl+0MNUPd@*zhwr@piQ6x@ z@pn(%edXzsrc8e6wU4qBtoQx&s&`)fPwCc;XPj}0%VBeST~3FKytol1+8QObl?Mz7 zfNK(86Rn_9f!m@}$tcS}#r=U26BLwTDWROBk)Yd-9Xs$O3N^wpV#J7f^X6fB01m{| z??o3~w0`}1mU4W;W-k6@AtTDXa7*9}>j7Ye}$-K&7p}?|i1O{#< zB2mD&fvOiRT0|DIMg*1$svwVC2e)$NNi+!a5d2B{+EF>C_@tn{*X?$& zzl{NxKvIfhYpKp;VNIdh-?Zhb>*xaH$WWxqNHpYR0`LYkdRt1YE-8@%!jf(S>i(U* z%7zZlP7*mUPt1XMptf{`{}M(rOsMcOR%KFMlV z0G9)NH#Rm>1{pUzwZU#7ddWgaYVq-?F>#$;ooKMm8kdorXq71_U6YR@1b2y`>n*o! z(A+=mwA1jUYN7IswQ5)OI6I?F4wov?q?+b*MJwvhiV#)uAi@!SC^>jRN@CP)m(IEI z;ScB~zj<;+VL{TY$p!M9IJp6RQkN(GwSm*JVvQ+Q-82MC9#JImgZL*QT1S{}caKar zoicCSqGKnFE=UhmO<=PM;gz95sf+RheF(#^u(m0{TRMkGRVX1U33CuKXsP?jHD{rW zMj|1_5G7dO4=9Yx=+VD__U@;u(sdlefvMVH?GgT<7aVm=0^VG#p=I2;eGx& zJy4>Y77tykel`sFoob!1%kiIA%06G4`IDc;9z9EBpmgS;qLQzA>bMMzdkbq@W|-k& zlu55rJaBz?@R8?sM#sjTcXF{%WbS{EQ4Jklwtz%W5h6l_=U3oO4DFbV_N!t|0iaua z(~~V+WUmGMQcg+tg%k^T^3}ZbR<&Nc@|GV@O-l;h#vxK`>u|pGX6f&q*&w#P#3O$d zr`S;wOLntaXN?pS<8_;BFS+CWb{i@yV9Ez|SQ#Poi)aF<++5N+|H6N}3CW=fU|=e7 zQ2L^2kTQO+DlN|a{9~u5CP$0%ipn1JKwyC)*;JSQ3#Ks+AiB0&pmLGk@L>Vo@IX~|K)#WK|LPMU3m>g8nSP&IH*`6 zknrcs0R9uN5eA%Zbf(EThWnLYpOjRIY(BbGcMaIR( zMqwY8hwTTkKcwYeO|ke?Mo!W?zz!TUa5+^y-L9Beaj0M9^uO~6B62O;)Dd2l|C!G# zfbIfrOrNXu7${-qNJt2vGj{NR>JP4}Yzt*1W^Y>%_{$!_ z&*I_)s2ecQ^M;Bdx|IOEMN#OC!%-O1AhfzN;}nwS%X0p2eplE>RJEZeu(QE$Vcj9x z;h@S3CR1w-&bm|QBv}kp-lt~u^X)u{Eo2YZ3m!K!`rR$eL}7EwmERpTBL=f7xnvPLgN79o)wcDv)% zS6=(c?YD0FVoQ8%Y=kg;YV2jj@Av2A=TK~bf~x(s@o}*?UUzwZLFUNfNkr`Gu-$s| zowwh9Q%Q+!`Ld;pPCEXWxyKL%Y2H}ZzGYX*%sEqg?au1jT31G5R#FDpiC%H!cwTm% zojZ54u}0EgdV@1rH+JkMyy}@*>k^tdfenONm*$*#UpaZjkLtZy15u4)-vau z6KXe=#iu7Scy`+Cxf3%|vND+PqwXGXdiJc@SXEZBZ(n)&?tSBCO}XH@t8xoRWRA|l zpodNyz6B12hI)d*Z6&2cefau*-&TM7`X%}y=66T|*$t+QjGi(odg+!fj!Y@Dh`ti= zRf{UGTFF|~{^)|J4m<*NKDIHnyW3yw< zNJ*QOoH*L;(5j6?k5UYyb{{icY*ZB6TgI(LdGcS4FVMK48> z{59$$EZkP-Qg^vJ(3}OO?JH&fKctD6=yJ9DgZ>DuDbgskJ_bFCI2`0FOKCM5=8sGI zw4|cC#lE?$7XW%oxxJ>@Z_ul!6(#}~GK37L@`WhxleJ3X)(FlZI@~I4cCuwm-eH|q zmeNg@q$t}uI^DWqpL26r%dz8QN~=8$T`nNg*`pIM1A^?O8hNRfqD<@F>aK13Y%SeP zf>j&KI+o5$tHY6U!l3F@TbP2SCM9`T6q!uuHK+bR_Ra&quA*wd zukP#bZSOt1>4o%!8cGt1ger&>0jYwZ(iG9(iijX~eyS8j0V#q4(n}zLG}1}g-6Xr& zZ11nP|2ubf-@a|hh6GT5CY$@_&Yg1R%$YMYXU?3-ak@PYyCFPnQeIKIF~eqAzP{MONkkf8ERl&SC^k@2fno=6o*j^l#6KmF-X3Hdl7q8Fq=NDif?rGx;9l4;Tk z06@JUNF@Rwri!ed)ClqAv}x0@?}0=QnWhR?X^!kHYg`3AU*u>p1i|JMgQauZjx9IcFmcIOZ8kcfwqQX1?r~V;8a7?LsN7LD zL3$z(<5-bL5SQuoDY9_mt}5o=6V5yH)w}PBd+df(51R>Tix!d#ori@odeG5mkn>lY z-*|iCAMVU7D%iATTb`y$tn&MJcq%j|j4UhRsp=XD@OT{*qEe~IM1y`HD%98$(P$&| z4p5O+A&P8B1rcHj%J!12`b48kPt_<)5db#YPF_&i`&BDi0U#loE;&0i z*f2rIpU#EazB&p(-D_%Uuu_7_5u4F)Nv?T$b5DCDR1q`HEYNIQ3qMetQssS+pNh$U z`J@?duGsXqH#hKxS}=DUC1L&&EikMqzq@89q9ds(`a|@Eglq(}_c63h z(0p$>ZcfoTCoMX1-bAOpSIG`3HW-4Z4J$a-Y9dwZ_66EHd*mQbUqxZF+Em}f?Sa5c{It-om#jWIm1pI)e9>70{A2smu1 zkRV(3oVvxvmux!7H4MEhV(-l-+3AgAOKgAr&6RNN{ti2&82KcT^_SiB@N@6&V(y_< zq(dTpssW1sSaWl2C!Emr$U{uT{IXJJxYv|e;eWm0^!?JjnsRTaL2ui=d)K$F?mF+n z!mF+wd-XS3X3X4i*DqWm;0R7 zf7HHVTbqC+%8R5;2p5p+8==pO8LbOqP;mborv2s=8KhYDC6DZ>A5Z_=!#osUWFfUwrC> zJoQQXx)jX+fn^XP*RD!u;~We_KxKLE6Tez=HhRzvdJ~t<3~WA7O@P@LdFh?Tv%mh2 zhi*S5H8mx{mXrGw#YlmlxP%${)LBmc5;T|->Q;Q&jVt+6CrK!5R=HR6Xq3(nZ`im0zV z`x|2rR+x;K16>wvliU=D$;HM)TuL_MLi)k+$JVP&{D zLsNZLAsRZcW}>TW4b^qW#=Fg-80xqEh{DIEYz=|fqEc&RDYHtoEBQ&mO9w-Jheuhq ze$iCR154wj9(}LIaBrDFB-8j^e%qdwu2KZh2OAclLk_TN69$CQEOHe(2nI7?OxgOQ z2Xe!Tk|t{)$cmfw0v0-?dus$~v5M&!UQ};|hC3OPG$k!Xu-Nyo+r^$F5oG&Y+QX;D zI5el5y^<7`ftmzc+?+u|U}8-XHX`vgK8wL_Um#qXs&k@@6;JWT%`H9ALWc;uB{QvC z@ypO~#%ZUzoX-6GysV7$^0G2gBP(|}o!Go>GO&}q|IsohO`RC7{TwGKV?DoF@#yd{Cb@$Ht?HjlK`ImRx@!ZqtnK=<( zc--X47u|5}3lIKv<%>)0SivdD(b0v9sFS^XMFGpTd~LY*6gy&u_}LTTYo(FnN559qrGw z?s@vQyv)*cx5;9_pg`X4mPqZ!j&tU-rUY1qM$DUZrmBFn{Sk=@-p(LQvf zWM{eMpsq?Q?3KB$^mHO>|N1}m0>(GE|Af-i;xya#&d`Q>UsZk2)?Li0Q^pqP$K($y z&hAaikG7)Fpw+_CJ+}Nb%bt$V_Im$elYmno=>xVmmGB(-Kj0H_2+Gf}jVrJ(-_reI zb-1=Qx_WziC~PcBwaglu)tgxRnO^C7ZB1KiS8&DFP8OHDJA*kM^R!aI`QXBmlO2E` z1hO*E%FGbcv;luxd%M%cwl2p)_20YYycO@hwQ_C!Ys1bnd6G0C*uFuTO98?JewS-_WfiVwHLOjjgg9vti``h0# zh$fOSQYzsu(GV8n_=JrPp2+nWeNk)u>tFwhnFXvXs5<}?imp{vRWoMHz)S~1UM2M- z6NPPFu@HUqf(0ipS+aQXVn9O9NKB=yts)asc@Q6?VT#r#R)&#!qtlAMHbOTAIf8?P zbQ?c_Va+))FGN~Lh>(uvs4~rgSJjc?R<2xGT3U+e{FYm8K@}Q5Up2~-#h=cYY3%9l zTDBaN*}A$cMTKc69MkZ?eMY5W$6;kz&I)x#xI2@%t}!KIaim6rhIf~RR;+f+n`eq+ znFr#P|LtDyj?GoB%~cvK{ZOe_o@B)0co&j8Ehua5q4WRs(mOxA-T%hxd`gT!5HN&9 z<9SQcO78s0;`6@}#8`Gi!}!Wx31%Y0e+Q4EHy}}ywo!tlBGbhG(%i7A6fLQ?#t#{s zcG_tuvm=JCuC69Yo#vi?`e{fDGc4#tLrD8IH-cIeQBey;oI@c=d?IHht=8tLLnHQv z(3H}A(Rgi>H#-gEZqnU^-D(^|<8wj@)Tp^V$OJJj%T7;V$%8c#wrUdjLb_L6amChc zTj}FJyY**hpM7>}is|@*0pkb-eWDH^0Srd>n{S`h(e>2pt9Nwu_`mY4zg&08;n!Sr z9MWe>fAEQwvJMn8mvk2fOoSYw)33=?Og4k}iwn!nJMD~_Q+la4A$L}y;k_UeX&5G+ zH*VdteMbv^@TXOlz9yG4knrfqnb%!#CV|>weE=p{!}CrNUEaVgzkK1z7dFxPOoqs} zFPd}y7mub=BTKypeQEou@_3X0-pm#gxsYue`>TJ`gvxob8D#F{gm zm5B!!>u=~pB7r{|^%IAS!XA5M%ZinSH{6tY=n<}|)3^NQF2gfVnIl|-%3drNGxigJ z5EG;+I@Oda<#LiXpo^h*(fZVr?H2pAE3Zx}qTfqw|iZZm=|?9Ej!_0^B|L;#2}G}B8?XQ$|30l)l9MC^?}%n$VvoC}#Lfik)G0;Xc~LTf}~QKt<_fj&FSI(d@k z-4(4|ND-ELC{#&Y>Q4XE8|0S3HCuYtZViGH>FLb)#bOw>lUYxa;{~jtIZZy+2}Snl zlZyJjQtSXQ`oaa+#3wdZ;pZZQ{`D8IIra4vAc2nJ1?7@8CQzLEe*uqM?8;Q%U8 zWtC*Lf>HeH35NZGY>6Z1ZnX9%YD6xrHt9BRs`=-OZ*x}xcU|Td+P7_IvR&|{FP&ns zn3@_}WZlFls@-P`TGZTFkVih669_n}9}KKsT{nB~*u1>KcYv#C|ISZU7Y6bvMY*>Z z<*wUNzjjyi?zZkOe~?|G45y_cFZ0mK8EI}eSo_vVbAuW-h|l5UG>cYC3^A zlq`>ImaA7Se~Ep;{L0f0DV7At+Ej`kfr; zG?;w;wnN5QT`oIZAC;U>t|l6H6V!3<{i(_VW>~$~ zE7ueeBBPBCJtD5!Vzl8O-ViTd+-kJg$CTtYH|!`W%#H-Rb8=I$LJiYrEB?qMkLc)Z z=X7R${qD@{EM)7X0@Y2;4K9~8)#+aP=6g$yU-7{3$nYLhl#l&$ZoV2iIOQXl_0?F2nXiZgB>G-i_ z<15-~ePhaciEtz^q}QW4*wWV0+O7$pLDxue_ai*9{NIl>pGW;~!T=os9&+p<=_|Kq zKmE=gShSi!s5%NO5RSl`40X&k;4R~wEQ9q=EUo|5E7e8m_PM3$hm@yzz1HroI9Hmy zytO6}?0oc+O7z#D+L6dq@xk)+3B{>ntGd^3YFbm%_K`Q-Y1Ek~fSLClxoq{1`) zgW6X*g6*q!zb67{xRgvow|V~LwC!)zZ)@oK%bWFE>bU1TvS3PXmPZDsz4bWKtIyg`X^y=--?67N z^47Zcqo!nyDR3~hh_;;e6%fb`%q!+U5D+RZu_l#R)1C3=uJ{}4T2^lFq7kMP8Vj>z zrw-gGXlGWW=4Ur-s0zHYs*#y4l0wRzH9>^4djnO=;^RHkaG0N$SGT*KF{HVzIV02U zc6z$J;pOjdJpGGbG}sJ}zj;S{M;rE}esSfZ)0P~C-fNb_>0`PTurs~|gE2oBN=D;z z3RC`Y$5(I5g1gExnrXQiQ*j0(H1^(m@0S&q9Cq3 zxmf6fejs?3w6PR6jJH+CYa2}+O>dsLq?2z~e=TA*)-`sDpxR`baOvd*Upf!_VhW`i zuNVL-DHywgXiMeEo{-LHFI}`aZ^|K!JFC4x9|u5X9V3%4sRwg!2jn%jg3agm-du_j z5x|27g?~x@@8JOHV*sMW)*y<8gGh$WgqlKi2?4jNKK8*EE?kJIaU3FAb+;t;VeY>B zZrU1YHVX3OHi$?@f{;8DF^7dgCG2fbG<3AxokWtM*(#P5ipCy%amU8(J}z**^7P7d z5A-HtT=F5UJaoEs+dKaF&$>`3ddlIMi{=;b6##I=0U;Qi!InCf)+wU9s~bOu113zE zfUri**oF|+P*@I52*n}HwOUgi`pKDB|L~a?mTvP$1GnAx&hmA&H-GK;s$H$`ZP>vq zI3WdL(hQ}d++j5Yj+~Zp-KA&Enbs?M))c$Yk{dAM>;;*s0#CoZQO8k3eGoxVuLGoL zJkK5d$#o~g>dBT8)hDnA2FX)}yuG6Oe}4Dk#;Ojc_;y3+J71lD((FpLAA4N!k~2JVSKVz4lJC+MY66(n+nj-$BB*2rvgapISNm5ao z^VA88&_1f%h%D-&HZL5 zm1r=?laxZ+TK`gjkv%<`6XHGH@ekKj=jBb8?EeEDm;t#wrfO8C+-- z@i7pIcX?%*shA}!7`x|bcDC?jVAkX!G>zUD;nr~upUddSjYBkGFdTPVxlsl?#xicy z_;r7Mx$Dr1_`I>$fMpPlE9o;Rb*AU$mKo5SvAW#Y*6I#K@`}qkdU`T*3V@Z9?Bgbk zy)5@qPDrz~->`1O^y!CaQ0ou~l$7Sz?{1hrb87vb+OCck?0%|G2l1&oU|U;9b6Xc` zc^c0fp7u0)k>kq#uAc0oJa%}S8}{tl(lmK?1)ug*H6C%n7i@0Vjuq=4yX(of-+bq) z?_W1**0d!TeCeoDP8>IOTEXs*ooP*a~;Jyy}RDo{Ys82e{KPG zqL~SaV`S#z8=+2>JTT^2VtVMM~-ogLc=!?u_POI+%Qm;J-QIog z3)SZzS2(#Wtsfm4Ui`txmR(>FbiS!GfVLH!3b}MrHb#yvDZe(SIy&X!S+yR@0G( zq^n!7)VM@}`5Bgp#kNgVooi?{gcY&aq@tAUbhdM4CGtr))ezWkW7p9a^mq4kc64<) z?WppYtF~?{TJp}Z#aV|H_{wv0o@-fJl!e*~cbCbqG-GPfX;=Sa>-Nqk-dVrw;j64V z@A9o%vs{+5&sg}wJO42Mv0tPZ!dv!iHb+mTZMe1ls986kfBCV?SFgYK_ZPD<+tJac z?cbVG94UD@xk`Aam@-glu@i!1aP8W)2&obNk^|5t z?r>A_5p%2I8~_kTS65eK2^WQBN=b%CWr#$ZR6|>n9EeY?<&#Ff#8PyX-ANV4HNmIsf80yJaS6_79k0yQPtD9GS5Ovr*hfLj}(`9x0b*)|PAAZO# zheNH|$kx~M-a`-6tzVjR<2Q1reSiA+$?>AGPrtQx$Fe(T++G_=VHSeIVO>+(>J_U#T)Fa= z?|oOR+%VPeE#NcyQFAp4S6dxme(!)NJg6N4T8(XnU;gr!n0z5zeIf@uDjy;c6Ph7U z?YmGNG;_Y@pf0SIqZ7>@36zfk@o#?fn}7fN-&H<)2Sa^@JeYeysOUih1A(gaqlfeEZXnKEEE( z!RssP-oEU9Bp2AE(V9!z9d$-D5m6k;clo|^`Eg%9^%w#*(T@O~5EBnV+OV%mth{Y! z^HVQ>7>jY(wy(+zPuS+uhkkVJNn^^3v5n42c~uI%32BH3RFLm)X}J5b_n&%Y4LeOp zqS73J+izTQ%A&a%dG;?mhb?;KK#~t`(AH8B=jgD=b~h{l2O6ls z%~)=AIx23wxoPH{op;{mX=?O|4n0d$xXqv@?0W@g(YP1fhJ)ez|FHRkr6t$jl5@&NB2de3CI_6UdR~<}6RzNvBRZ?aXw|u>L5k@Pq4)O-+0E7x%3S zMeT94dkqm2>_ro?s^Nfq@MsKDyvf;WwIqOF6Jw{?qK~s%*nQzC#kb!01r-w(gy;Ip z4qdsv@!gFKusxV*7R`-;WJ85Cqcp_rFG7;`y(uptFq>Eu>9g+Z=Z~K?jp+m-h+o-% z)3ym!d8+JDJt=vZ)vrt>*u0Er(h+Ssd-e%aUwn1fi_1Dw^qri9V^gxP5qgUOOM^m& zmao-_?Lex)_Mz#E$GOh?;w+*msQIex6p9I>-g;|4NU9l+%fiV@0UT86gt9M7wxa#>o-nMYY)B-@KPf?a0y9T-_b}D2)q0bSH zMUP~It$kk(&M&3=yg`diuBjQ2qX5*~-WndI=5&@m%rH3-Aej%Oq_FJj6*g&mur9w> z*V&GkNe<{RHU$I0mX?lX@2>srT~BP>x-~C1YfnRyGtK**@BZ}s3(hMqD{gG??cUwY z5HI%`i0xe*-Kckj0%MH#f*^r_|7@W_BZiMY+H?33<6SNrrSyK482>R2Oai%(s8%yo z1?UP70SeFB=l&WEs^*}tqhZa1lSmq^`2IpP91rL@L!%6hGn&Ga%J_7>3dhiBPZtI` zg)9?{jLM7sdTqDLW{PKIpflUQ`u;@0RHGg}k5kGapIlL$#7-azs61{p>Ds(;j6OMG zBnOqwlN%LTE!rN>J^e;rWe%(+Gu6Fj`CI3mD~A4Xb`}U$7R@Qzqyd>Y%F!HKOsGP@ zlSQQoWA1@K3|(nXb=1`?3x#FdQsJ2ya${rL+i$(Xok}!9TBb!8t5+5Xy&;{~&jA|Q zeM9kD_)8?5<)koC(GwZHY?+(9VO>v9=MdSm@EFD|wnbew(Yfe~=ytYHTKKhhw`a!9 z`L4XSh8^?f%&Og0XEK}e@^VpyNzKh4vXdi3(bd^$waA6)o-|Q4D=jbOPoSn~1O=9q zlb4*-)9p=7XT9YvEiD;4P6jxIIyjWXJYYvjbivlP_O7lD*+LdKxJxD%Lh0=-0mKv( z-_zL@4u}L<@SLL0D=gqRa^sG=jC6OV-TuEnz4O{1+*mlFGAlc$b9duY4?O(Ast+g4 zI=Xt(7Vhgx&B-jAROIjQ!Te2jOIJ%U~Mj6cJL?MoRAK*7jPs8?@jXlxug%6@l~wT>CfAEbV-B%le%d_mQzut?V@n^v;r))ZK0}q z-=e9G%TF$LIv68`D``2=9J~6%uMqyqy z!^st2S;Tg|6fLks=g+8k|B0JAJG*{z;}^!19aeRxYF#MUG0sH4T!nfmE{U<6l4=MLJ*AN@Sp$uXC=!^ zgaap|1yVdzo(aT{B0ld{PwUpL z+p=W~QgT&<%AEL#QdIK9E1z(bsPZRVB}8D2-YD`-;AhZ6ibvH@Q0npdrc9e~^x~5r zfBENUFPgJ{=Wj2&@XYcvFS0wZ@~%61-TF447t(y^p}#}!U5`Iiv|zryv{dJCPPpOv ziQoUJH7hfqGt|{}{Pn(PZvXDN5B%xx<0g*z*T4R`?!)z{SZLUh2RLLMp^&A>Sp$y+ z1*eA*lL`2I<$SNm6vfZD2kN!;FuyF|xNo7MVP|#q&+oXM8c{)>s*e8-PjC(x%Gfs^ z?t2_PREfwC-nen&Mw3t#M|=H2cFrteT_hg}6s`J@92jlkSKaX}5jzg7T6AD$Qo9CU@3)z^EaW zzM;9_KJLmy4{s7Mz-i4!1ce_lRHG5YfH(*J zMK0cxaVDO9>~W4MQ)_~~H0014yHEryT#oVhu+;;I- z(k{QEQol{HIzp5#e&KPLOPhHG9%hPdH`Dm%o%&R3cxQ4Db}D)tjf5 zWblKJT2G399aetdV;{W!{?7V##KSU66he}&MuW)edq`G7ZyMQYrEq>+uXh^S zXHCwy@`4i=9yL)x0e?^)yWR5WU8mf5>%X3T9XrYxk`8g^jIUY_T1LZyDqU8JraI(A zyFxj-xY=UxUV3)vjn|w+Macx2yw4wv8|<9l$E=0W!T~#34wIY7+}_bB^#lN;@$OrX zzxID#_{Uq_F&%nr=!{dA`q+y}c^|H5!s+r-87P~Ui<>O^)(cLb@Z;-FBzkWaAUzgu z>+tK1R0L^@V5B!U6vs@CE+itPPePQEK^NwyJ@vaY&bjv4bvxKn#}xQL>gQY++d#T# zU90Z+OP>Gj_YOPzWYMr;jA-rl=}k_ptfU!^%#_R>T@4AShO5xW4`Z?|cRN!fvA?W_ zR;eY`Lc*?kr5Z8_qyAE1#T5Al8-Z*z#3(c{XEYgeUU_9jID9LXSivpF2Y2k){l?o> zI$c$YsXRYFv%bD@+KkGd-FE#k3#M7jx-M_1y`vQye%N$m0xRT;Q)7!(K5x=(wOJoX zz~+i*4H?WmooEGhBY^(+mH(_$s;Vj|RQqc4gnqCD6C=C5e;qd6Xp%^gdo5SKk0Q>n z0DLBa3W*3QxW1CRI7HvL-wDqaP7u>s4Pk9C< zp9KbsG2ZSsiA@LwfrAQCf}c=TG@!4z{F1Lh z+q&q8SY+B$wIUR{JyCT&O~nFHZno8Cu-j}-mviQf3JiA$#2O)C0Q%cEUUB{Pm%5xT zcsK`S%_dgv1z7Ru4(h!@16F**ZW6toTN60t;`E^T2ybB+qeZ|>4_Yc>u>=MoO#^Bi z=D6Kv4C-`i8+5;Xu;sVc<=^$q@nz}Ow${dfy!a|yx3i-oD<`|Us-}L=p2a6Db~_z4 zRXf(NTVGZ&W_MlP#EBC(Zrl)!MBN?_l4Y0~CPA!LdrwdI*s+xwQ-e&2FCaEacuUYga)JGR;m$f83Q5eK{9d2UDaN}ocw*0X$yxAF zxUIf1Zsm?9v%kLkA20m#f-zS(%(gWvS3dK{r{^6rzpJgYbx%u=x5wtPyD~hTjqNFR zi!sF*^7&B-!+Mn2Y6*IKOkB(*ytQ9#?e6;dvam z(B^5xAJHYo#mbCHrS7t>a6=>%O))s9kMtPZ-rVsVb_EJu z1!Gbx5kMz%c&T1omz`>!SK;|!Q$Vcqm<=;4oEaV)6Ebbq)eld?hb%s3igU+tg1^&E ziJzJ3xcsEDNTlYSje)w>@UG^j6upmoKUm8K5SgR*pmAz!RB<3(=a33h!M3(qXIr@LfC8sw&yd9u>X&D|JWGvuckCzgr;Iw_w)(GS{dPEK}1QkfwcTNLq&ci?Ht6VZ49#+Wr^)BBCLJ@ixVdAs-C zdvCk#Huiyure!Iuqx{Mv$+Zxk3{J#hT*nv!`mNYZ_`wf;fawe%MCz?lsrW?35gDl> z5=qQJ|Kuk>K?C~EJMUBiMD$YmL@b>ZySmae_w=3mXfet#L}P+YLMv+6_c?JC(C2mQ&F+xgTatuG9P*Pk-z@kZ)iIj z5mbzXfln^H7a)-&B+p!>K!t4-byew=qcc&hQn4oi^+Js#hiK6(RxO^Wh$@#S*@qijD@!JfDNg4r#Ly>-5kF~4EpMio0b0EYtEDqvg>0G^^KjczPt5rFR%Mx<1U>Z1w3vp ziWH}tuDbBpbI&+}QUF7p_#U>zeFqBbW{rRdjH&<>rDM2KnsPJ_(%{}CAzggf_~Z7| z(I)N99t{~|R8$X5lngqNSM;yhMgxMNi!qx0aZMOY^N>odY6c}2ViaX|p-SoXaA?ws zqK*s?w1er085Jzp21#!LNX8KEev495)MtA|Cxdby=2fr*G^Emc0)@$NIXI$B47BMN z(8xT5_C(|yJGUwDYI$nEON~Inm ztut7{v4A-xdh~+HmtC1vp=~IlMNFeAW;Y4|g?MBJ8J{>V@2(%7($vzvd{zCjHM=%% zYpmPT+1~B<2FcM8({cE{52XrHvAoGO-`y@7*DKk}i#@ZZ6(2RPaK@A}id9@U0R^z{MxXb?%}bWKH+J#JU%=((kroOAS?>7v~R zW;8@e>8URB4Hr-G`@=*XfC+;>5R6t7r%D0IANp)@Unh4pZ# zwY@p6cgp!|jU)JjelG7~6jNjg5~N|YPxzoy`Z=UPTF}NjUr6imq*T}Js;>D5&<=EE zTqndH5Jn(cTe|=E509+=VDgD49X)Y!>6kG^R!jT#t@X4o23XN7LBo=(9lLwlOvVXT zD+3=_#7Sn1qL_6Jn|oT@+E^$xH?@?MWUGn{EbBk-?I5=7e_rK3VTculu<_#$p(i?M zM@SnM>2b31V4xq$c0O6)q&zjED;}d*lvXBSbNs~@V8yQl&<7I|;o;hHhH7*3-hv~K z+`MILOH)&EaZ!0`i7F|^)dG4G1~BjW-}^GMv#@ySuyH)zisiv6fT-Ki6&yqYO|bhqU`M@9JQvRh>yF15q~&lw_`Alh(`{ysn`gS?+Zv;qKvb~B6qI(d88CO5^6KX1n;z{l`v9LnV81M1 zzvKO%d>QTMqSkQSX}2*_va`Iss+t*GUG1Joh@u=DHh%QV-(Q=3cxPK@=b8C?Kpy6fs2sMOyHSVA|)#I@jR-* zVZY26DM8R6M3_Veefi4R%Qv28t{)M`4S57);v^%Ug9G~(3*57_xz&+o0bVS1&zL*M zYO%$`@v`xiQx2UH@CCW@1alw09F~J1Y;Fi8$nGPY92s9kyEm(^%mKfG{XVDQ z3;6wg0SDpta{=^0K;nN#7TTO6KD{#irnASEzES_wvPNH+o)6i}JOid8l0*2WF!Q(} zhExbz1b2PG7i17fbQPvWi`06UrygDmXGbHD59w*q@Im zIl&k+zrXXf-JwlUozEI`$m(N=BOy|rIhD?tg*&*%$(?GOIcDVjb`8KRM|4a^Al+rL z!HC5PD}il+gt0}Q8_%vdY(vWjn`=MX6{~Me4MjsS)ElDF($tQM9D8L+`rL^HE+?xC z;dEMZc_`nsF{y`@)vXG5WVy}9PA^erI+D;L1*JO73np4a{ub6f3npYSfz~pSPl?

    z@Qcj%#qKJ?H- zY+5ElR5%baT9lTSs@IDzz8Gm8A%x=+aq!5i&N{4>N1R$`742(Z`x+87^;N|mg!aPTN}Bedj$d-EhUD+<=%pzTl*z%I?1W(5Zj8 zWc>IFRtT$BeQ?kJ-qX@p|JN5D!9)o%Zoy$Mti8Vjenvr(3Vy`0T*gRR>hhULpD7wh zc+!sSAK*dYs}PQdR;#J0L7|>-ni~pKF?l8$1^*zYGDHA9e*E~=t5>78kBM-MbhB%c zXd{vnZBUg7ROEyQgs3=Vt~@F&5zsJ5E|IV5Ri#z%tIX9W6#UtrAP$#pVrrRufP@H% z{2zb(ag_tRDR`8~TZO2nYEKa)X-?9j!kp4aU%s}^$2HD8}Qch39ozmH`9gcDBCB7VjXjTS^ml%1J+=gnuG^Mx7rKDP9wx2nT2 z1VetbHw>{zbEEI-A3wY3u!`y9i;4>}M5Z8hQpgdkYPD0fBvkvR@|Akaf7%x5bA4mS zx9@y0hQv9>t`%S4jaULP96HtW;GLJNApkk`j=Hw@*6et7+1521_B3}yNu^{<;OsBOYTp8IjwV`=X-|-e4HO7fnU7TzHj1pc&sDF-#%oAOO=wJOlo4t`CAHQdBJ?b0 z!Wk8W9Wa{b>aRFoI(t8((@JN15o7+LNVg94ooL9UcZU4^{ZxxG!XvH=1!-SfG=i-a zrdo04PRTdiQe?dm@SKq%d zC({jZ3DKmAPXj?etcbAG2%YPVmOxc|kShaFB1%D)G!POfJkG8X z<2-vdOaVgSD3>6?Rfwi_jzQ56@~cvX2H>JoPfwjZWyjBcZ2xejkM$pFz+$;FfkE*I z%A|a$8v-_FW<=$n)} zXoEz8G(Jobly%&ZmHchnwrAzWmUSQ1@2cQ@CO5|OmSKfTDwve#szDNDK#}E zC(~J6kU4p5CK}dLCzg|;7Dd<#&6l0&x#{X-wQ@ee2TYYJK)Pq2a>yAcO z?KN#XcDFS)clCJX6d=02*r^oYWF!TCBdP2*OIB)1L8i03C~MM$^g||Pmlfv&sD_Z< z5em!@lIF2rfBBL7TL%SLevbRQS1%ZST7>D}x^%zG8h!plW2ynCrzgB|T}vz$=G6A7 zryW9jD~2Y#jvcN@bi?{OEVvCf|GSPtQ2( z#Dc;!PVPfzpspzSEaFT=WP$J)q(zFCJTjLEACpBL=#|;6E)wR)pvN$7KZ2Y)N{st8ZM2Mbcz(h7~G3Vxr zY8QTgL}xPzye&apngszmIFE*OMt?}(*&fQsPU-T-cD4sg@+{d%a*g^f#LsfTh-!+o zfI5<*sY_qi&NZ@nL;!k22wel4G43*ptV!uUFfMU=oYit(Ny-nF=zsRa&Kpk6tt`p} z@S=j;^S^v{MrvA9OS9ExUA=0p$Ky)%hz{bRhtIDlFH29)@CSn2J6XTGE;}=$wY3Gq zM+HR%99zmO%tn7i-77Ae?qnx3J{b!*g`w?}%dS7KgVtq)9H4{aX+)^98HPv)R_HG*0ULQpcO0?r%b)dHk%(@lz)=1V)09oT9=xht2)xUtcRI$q37F z6A@ofN1170gR7eMb9y8g=} z3rp7NigQ!1I@K|2eEL)GHms@Y@&#l=9?FA2g>tn&Z4t*@P-Z8S@+~LK%v>-fr#Me0 z!Q`MOI{QQx#i=-ROOKtDJ)0Sb-NJndaszMT)1XX%0U7j+!b8WVPwVt|c%vPGXgBv3 zIt-~?UYhDiWxh!qjj#15rLVeep5rQ)OwXI&9d1H=Zquh{xwQ>FsZPIBQsD8W&L3Yg zmIbrbl9G`s5~yV9a3Z!!dD7gXL&s+@N6Sj>KY>CVDhDbGvYclva2#`pr?u1A9kBRA zJ&5cbCZo&N<8fHhJlN9gV{{W;6hE}rVPUU6D^4_jDf6W1UnzABGG5zljuD_J}% z9j=n@all{rIuiB< zEsHMAp<$yjc=#eSP-d^VSS%2dn+951TUwf13JMB*0WnNbn461=vBDME;QubX zh*nfoG~Abcgdr~6M~o3ZQv;waEiE14`+#7uMO_LD3kQTA*b7z0#sY3oHb4E*Prvo8 zZ{2YHx6VBMtiujJtfF$vSCxsFQ; zAAa&Xvt~}p&&k3l7|TVvj@yx&4=UxrUx6P74i7x5kCy|b zlaTuU=}&+9{`bG15bvs4$o1D>-`UBDF&&1&k&_a+kGMxHjR;T$`LNlJ0GfC=-E`9n zFT60cjmT~1&YjQ$i+`2#2OoTZh#ztqGzWU|#TV6meRP4cvNG~i7^4&<;|i4K=4L#s z4Am=71?m}RoN?=|w_-o~rI%hpPoEkoS+rsiII0E;_TZMSZ*{wLv&S<* zmDwH?rHD$!R{(2?KC=ffz^}C0#b!;d;BWb=kDhyd`>XGKw5Pd;^@2YXd-}Dir(fHY z?y-y?lRK$AcU)=On8MVu!knBeH%oYMq760jJJ9uhVb^ZO`d!!k?75vyUGPv1i`p>D zyfGd==I{wiS5|M_-c()Jxvi#Yb5&iZ56;OA<7k$~ZSkJjlk&cB^sJMP9+#ahoCGN? zGU)@6J}b1_tj2ML7WCM9MqP4 zJdh=)8R{=CwC!vR*&SAn%Wx{h>-A-%Ychy|1NYE`eIfC(e4CdeGS<|A=WzSJ5B$|s zqI!d51V{hQV$N_or;p1!@AR3uIT=a>reY`*emjdIPMLFWsE%L-EyKqjJ%CDrP1<(&QH$zQn$jZvy2Q=a`7 zJttR6%U*F9Sqbur?IT=roW1xp*3`>*N9y&e2qss|&MGVO_&Y}@wji+P+12es&)Y9c zQJI3N&ds4|1d(=|+3mJtwk1)zVuM;Kf-%*;^zR|WnMiR!9!Ok4PA+{_Kq6_LH@%EM zm9^jR?dm}{OR7KxMRXtnXhTYhiFu3DVRbn;Lf1c?AW9;)LBNez5p7YCfMifA!uy(F zXeUjIJ1`T#AQhk{qfWgh*E%Wv0eQ8ubnG;2+tRqFq2=_mr4cy9z4Onc{qJ%Af3}B|H*^=qjTWE5v#idi=Oc)fp`hmBp*V#h`z%qHtU9U8{c|s zQ+k>+#&H>1+^FyA3KfqrTzc8bz;8B(C}nS4Zx9flzyANk0HlMXyJ>w((P|PVAT1GU zbVm@6_Opeg2nXBSJ8sJl*ZZ~jblF&;*AA8^N)o;=+uqFFs$G7!-B_H78iX9LLdE#q^=)N2uA&_4<}Ixi z1-9%|8>@A8qP8>!UwOCr&>2o&DD>7lk&_QI&loSaf1$hh+S-oQTYBbALm$QP?uO>W z$JtJpk&n2btw%Nysb`;*o#6&K5+`3Z&Y~fT2OL`S@=;FWz$)F=2+GkOi+R!POk=of z-XSGwOp2Lw83noQBjh>?nHnCu@NhQHG=>~yk1Zp;f5KT-B6H(P9qW2QECu7Zm8dJE ztM1VSf;w+d-xa|8V0(!pFms#;h;VHDtJCW0^>KhR> zyVBF#S#~BIG-WIpiXx0=EX4G!F5ceQe)JcPO3TRDv3Xnl&f24nUpRi+l;Mlx48DHR-Hz99oxjQS3 z9dfy*PZ<9G^GrJi0<0p3-KW#$ZuC2@z6jPV@wEAdLuvU?yCJx$2DV5tL@-CP z!r@^QMC2C^g@T&mTys-Xb4yEUSs51~u!qS`U$$mXBY`VCDlO0CJn^eIQoQEKJQ0C_ zgr9`Tuf5?630jjRvQ^R4EAfXb0;KA6!?|=XMyYIgHz6b7k>@SZ^m^f*|#0iB(g}He-e3Dz=cPf zNA-a?009GDh}*m5?+aE_4uM{CeOY{#zd!!*kDq()xzkQN4Vx8M&%n~fBab|S&1GN$ zx8MHuxA7=E;{j^bnmq9jf?It;DW3Zwktw6(i}jVSe)X&9M3Xa@RU$0LG{@4VOR>(( z4VKD!44Hi68{gQlVFNnLlP6EcUNhEa&^PCn%Lg8K01pw)J@;Hh6>4UwfWe44I@-YS zqaXbUiyz3N>7g|>HJ4w0IihWP8JgY5oliaWRFdCt!wt)pEhB$2!7B7Cue^d@27k1Uurg+W1x={4=X-YATO31FvuxRW{{Tckyq@3PR5}bK6$Mg4% z3lD#DS=IAzty-~RXLolvVz9S%g_p0XdwJ z-W<_I+Qt@UE|@!h$uZ++PAyaV(HeLdf$m$vd|W)ylq8)zuK1bzuZDGK^bA)K6ByX~ zn}YTeyF$*RKcDuX`qb}Q)(Yna=bsfVF?GcwO7R^Fmog}kw%#V z;^Vt+J_CY>mJ|$oFE{zCf&np>12g$rZ534~;wTiIf9mWr7f;f@^I-p*1)fE9_C(BK zJ;eFRO-mT@5}2fC*{sq>RPEHWtSIZL-(4ar)8XA-Fi8>-!#N#&lMSs`CTFAQ`LS}nBCDo$2L>SMpY6c(YCF60Cbwgu48N5=qB*j{i6M*<^guUQ?PGiFv?^R0pj z69rCLqVqwvWDeYctHfFtas^x3m^chreZ&mQ6*2^$iG+IxLy4zBz7U6`1OFy0LZtOu zts6drz9d4N+99?9(KPAqFmMitbdX-yTBG`^1{4WAHXGOK?qd#2g%$a!BqPD{u`80) zcB93E>fjnAgOUt-9SPWv6Yg-DJ*n1UQ0$!g{757Mnz9HO6?Hn8t<8>6P|kL99z)M9 z?_BwhDxkHsLON8NnZ)6<7iTP1A1=&4i%nJ#55EF zhz0bfzpV&8{7%SfG`9NU-cYc?9pZA=H%yRgd<@V5B`R(pwDl#q@?9#_jLO@gMr-AB8%Qwzj^zz zRV(KldsJpoetM2O=nrP+=Q)nd#^v!=VC zWP@5ys<|C3T+K}O7dJ9r>Ek!aEOLZ=h@uTBl*(@}r|KO)MoP|9Tk$llB;jaeK2l^p z^+lEv_7Y8t+51q-QC^ar3e=d0sv=&6-`<_CVN)e?P~1nojs%8=0ENDhq9pP=XdX(U zTvlF1d3kkv8W5Isc6A~9*tu(0PHwK%YJo)}fF=S9BxI1CkKLN?kBwKuDg(OE?xT0+O?}6e)zri zo*uW=T~<-H__zh9oN~&wSDuXmW?RRe@7(nDhT8hSJo4zvFTJp1XEirGa53<>@#BtP zy!f!g4?p7Y!x5X(90}a^7u1J9fi2lT@TDK}zBrIcf8f7?55-}sjHnkk6rB6+yKmmS zc}h5|1g1Q>frpsbcOE*NgC8PbaplP;pF{z9<;s;Do zAkMyN{p4$NuKi_@};lPp89S zi3dA-BF3h69|CCly-Kd}L0yk8v~70}Cj2crPgS)~H%&4TmN7zyRRDapPbI;DWdTNZ zR_a+xX7X3NyW#z{+uvNZd;R*|jg4(R5o=Uui^RjbTf%j%EvvRRF_~p@trHE?xRH}@ zCOtPLV7~}GGuU5C8+^|ai-tH1$T>u*y$o(fF?=B^7$#Ip8M5^HU|iRg;k1v-%bYW- z{D?W_GbR_=?V?7CLwAwUM1iM54*UrZLAUo~=fiAOyX59$XTV;#jlYkdp5=-rE9EdfDsESVS1fn zO}$HGjiu2Sky*2g(q(hFFaO${3obSzaTX(E*en?yr3YRS$U|e5gP3Z9&#MV-Z>0S# zE}4=wUfnw}8=8*>giN}UlMIdaDTe@0vcO#pH>x6oAW6UvGLw@GiuV8K)owT29I_jy zU0{mTm>mpiujcd8(3o|OnYC?oZIUko7vDup#-v^5Xc}3{3|^s~O&F~okW@2;C$Z%l zPk%7tbeX^Y^^2A-TlxB%YqK+RxU_K3ox8UVQw*%$)4Hs+}BPX>17?%qD+Szoj zK408owCN*_CF#1OX1aY|IfcNCA`mok$)nd7%dj}2Uel%x4W}GAPLOSs7? zcO_PvPQR=w^2$fis+MRl5Hn*v)1*gH!5EEXxVw%UYdCqjBiE|m+z|QWdtDd`>h|e6 zy|LDSt}BAL9YSqPS0`X^-`MmAMm|bs+>oZbfDS@V|PfDF!kqe@FNglw4 zEP@p1AMYtVRHt(?`LkL$F1F81P&Rj^xvMsA#VS`;e(u%*e{{w)$F|n=2=e z&&baW2SS!yXIfS!+`Dl{-TUi5>hyLy(mjPG`D<5hn7Ux5&FN^Y-MwdbgVSb3(=W5g zQ#7U=^BdbYY{?yyJ`$ryh7IyXs(;{f(d0Zo7eFUt<8yy622{t>#v>huDfx3dbVXU* zlqa(a2GwLtX+fgr*l~8^ZtYU z|2+j`J0lG;P;5uw(28wnXsE5LtFEeg|AY7M`sHs{ez5Ahw|w`Ci_f5eYPM|t;Sc_2 z)vA?;AAaPLQ%=Ix1Xm`a51X)ga&SlGf2+3X?f!Z_COAI)@I#(RgrP>lv$C?dpz_8W zZ{)H^u#_z2$36^!_4W0bu|_&ijZ{8~sww<)Ti{!7y>-t$_dN5=GZ=$zYH9+Lz@Xy{+hm@(tmzy3Aq(qv8rG2elNnhIWh_0=e7lP#I!5>-$h zc)s0cI`$Cf3m>#tqa6#UjgxGXA}MJFcAQpk+SVD+9a5?<%^M)cRFR$bl!Y@gUweO# zBi?rMBss&IoJmrC|90MFMMB0t?9lOd=83xQuCA?Bd)9o^yk%!w_3oxUP2Q%qmL5Oz zZ5KCv#h7e!1~U@(W0x5942~+sx$7Ip+|I{6ec>3!E?Aea@WwWs9MMGgBQ;f@m+dOd z&A>3i#B%ra@rC6j`5e4cNJ*&mv7-1S&;$((%62F{42qC=9h#O;qfbs`l|upqEv>*a z`b>s}ApzkiJ$n)BYx&b=1F$qo@J5;Tz^kwq_!CGTgo;sCp)dKqF)*|iqc36*YzO)Z zL(^2DQ|yk48@{t=&Y`=1eygLoG01h&jF1?6K|a9bM1&NwA~wfR+A_6{sVx1@&4p7B zkt&Nq^e58Y_ENP$=o<98mxO!&r1BZUY~W z)!W+8HkMm*g_X*Nr*u!O{fkG0(Q*V{rs&$tUG7JbYV{cmPFgq;^;%>@VPx@u_L;u$@Z;-nFVcfWwpO+^sk(AF!Nzh?$Y-%hiE*TVG@IS)#*dQ=e!l7mDB?kq}NC^jl zs-o>BvJ%;k1nr>QM)RsVJToLr3;2ce}jYg$}BU9+OY1VnPp?Q?VLCv%gfymI@@GyvFYN$ zu)foW!D0?EkcSW`dsHXpbj%!|(dqSd_`_{pLwir8*6(NvaV-W)%pi`_d>pRuWjfJm zGlcZ<+OYml?}gsq8nv1Yt`wceh&FRPg867mR39<>!}0r8gjUwHTz_KPq+HYVjOb6^ zZlCNy#%lH$qTJP2W^(-SCBNC?T`<@9pBgSLDd*igN1!V`t7>dg-4x_?zwUsRoS=)BoS z&VTW5Z)fIaTC<$Hw$)5KVqV_Z(wy9kfXnFgxPzf!drNDq#TV%6@nq$sWv4gSZz!I2 z6@0&=u4(()`niWs*ip6n$a5E^=jXRJv~F0wCL_zk7GFOt4ge)7Seh)xZH)uIAK1$$ z&dm=Dyw6jAmKad|MB`aPkrw8=002M$NklmdCr~5nzl2N`U24LdNt$W~shvv+gjoF7p5sBmnalV+y z{NKbw9f5=?7Bcrmixy#Qq_(!UrKJTCGa-m*`3mVKFra7&6Bfvn6>in1p)^J~2@y|! zQ*-Rru&vFKgIxjI0vWWrlrn(_WX%}IzyS=>XZ8$OZy+XS8vsaDG*x0E2}KaHc=6(e z3l~;ZRiTcJDmTWaF(gewJ}KCEvXnwpjm2kRz`6)#Kxk-0+kl}e2>e5$&yveTX4I(K4whc7S3gEFR-hc^&{oSXw|nMv{zM{=YisY?)7)C$7^rWG>}=ZI+~RF*_jYz+ah3UDAc*mG zxdTlcIv=Q!I^`OKl#I00439H6C#5jQUYM0ukduZXX}f)Z0x5H1Qn5ri=&KYBoc_nK z1knF^uf79Gt1?zOB$G`a_3gFbq>l#D5CnyC*HYxtm1rtOP1d?p7TdVu-& zCEo`I`l1~;yay)-B+E=en9JrJb(C|`#F{&PVR-$ua5TWCqFhG7EV&E&1pF4 z)XCrYW-7MzH5n7(2M37HbNL(tpE?G{j!l2(t<6e(U&bx|Cpj$y{eH36BeQm~^{SU2 zEe^d{8*wxNT7N3(`;t#zPQ7``Ndt+A=`eKuFwG|&DyGMrqfVExVZ(Z+9Gn7*aO#Im zSGBIxfPvv_JYRSQ$LRUOy1-!GS;$KJ?vh-^e6fg(SyG_A8m`hD{sadi$O0zVQuknqa}Ih?T2WtzEx~DW&9t zSP;d9oa~A*WrYPYbyS(F=dRki*WY-{X0x1l{9+b#1QG#Ymaka3X5ISA^3vmuK03K* z{Hlnp+qb{-?sBjCg1YY>#I?CBIr%#$VQAMt<+41%}?_vy7V(RtWfRvw~H>R{C zH#dh@1<9aN4&)V*%FEzhRW?glg!Usx<%yyAbgSXjU9qq331n1qWQ{v`Q#3`X11WRF zv``ip+S8_6x+#`vH)>ZYCr1WAB+f`uL%Eq^zzPQf53XZ1k!V@^bADbFp)2*Z(^+$>k-a0f9xG zF<$1*ojG&no4NPR{pQ>=Xe=tl`aRy2I=XESw~y$d2DdM9b{OqdRMxN>x{!g&(|X5k z{rZQ2gRuq8kjdwc-L$Jp-w4!mtzgh9UPOA?Gf_UZxy+Q0;jR%O% zpiMh@RNjDosz7A>`c3I+762cLH;kSaq%6N*25bO3*MNE~3g-vf^k(O@ zJu^0s;nTeH_K2%L76ka+(nec$2O+IzMqwM_;`B#^0DmyqZFYRaTU}F&A1;t2J+e9@It(KTb+p@_Lgg6_VI*pvs zi^x6{YIhtSE>Jxp^eTY}xXlE@>9Se)YCL^db`>KsAI$rEu^NjWsa zh7BxpX^RiUW5p_&k!~{T@yAoz{92$07n0to5JlRF9AQi}wGS=A?S%jF6NxUwmLd3K zw%xc`#G3$P3SYqM@nFv{%!ixrEIb|!dJUd?wBJ|D?`v$6A(L2c_J)M(o!hj=78G%T zfIy&K1UQdOI};`*4f@+Zc7OOm_2ZA5T~2H{h|@IhF9z)$l8_WOu~zP{cGf>NW^Lo$9lNp_nl0;>SVpx7`0n=hD6 zw12=c3TPWmxnv0p>FoDESha2=++gDYKuc6G2E~Iwj=neN!~EP{mtT7El*y;!lA;NR z1u5IM?|A*q|9%E1-s7d2@C&FI01T=C|Ev@xgyMEKlZ_Y*o z!EU#xNu5a<@wKH^1wIS}H0lLDTefb0<&D|kE13fwWP`t#klkh(J9799*Ibp7lFWOd zMb6Rui-CuYGE`~F>Uh0|jES4~oKs}7;U-7Dl7017|4DtY0K#c;WQYY)$$xYah>S=c zSz5Uzw5LwhHvv1G6PU`7M}!#aXv849v(ji%O*prP`sg&E(vZnJg2g4T$5&lZU0z;6 zqg0Yc4$i_Y>8xo8I%}}6ohqz@SIjUT0cuU7KI<^gj zAv0z$AT$xcFN4CXYiJ+?3i^r#n?d2nhGw@xOp973Vc@88a&tiQVUD7~A}T%~X>eLi z21i^oDb{Av)1fNj!r>sm=g=HmOfKOI7)G*i_yE_yIE7&>=uRZ!r52KkhVS8kr0tC5D*A-2LU{b8T%#WoIA@gWLVilf6=d9Lj-|d zRXd<>;h!H)%FBbjAK4Jbuuk2PEb<5hPBaAg57g+<`DNw!`dh1#$)js?AR+=36;@;=434`mw3?5DkFcE@xRw9gAeuoZHC-ghl@~Z`MisFoICT59#71_pboOq&B z51hj5bXvR>5L413hW*=e!qfs^h1Uq99?EoK5!}*@!~U1^L3msF=c7+9_-r8zMZsU@ z=VT2YRFsyIjEXBND>q~J?QL84mF@rQLl47M;LI5_@D>An@bk_gee1nB&ph`c5!KO1 zT1v{`qJg$I*XJ!OuK>ZlWa;v) zTQ)uQ_#?2$W__*FYIOn1Y2^h;4_2GWU<~_1CVhuHkLk4<812HbY(eilaL{EbWfuHX2~WB-8Tk@jFw1av=w z(MN+UEy2(yS*mW3^jcUKHy1}bai3UOh(rsl_Wyph|CB-Iq8tk;PgAU(52zY9)Lxe~ z=WAE489V#IL>LIe(HcfRTghPd3ZbCCx80YNkij${O_Yx4DV?|nKQ0ZoyGF0V;t+5^ z%E~qCpMUD5^UgnK&Bis@lIis6Gpu$S++~zk)I9mjb9dZ!qqDNX;fO0K*b#qnUWo_j)}`mM+Q8%2~PchqRQ;sgoz{*|j&fpnsDu z;0dbYs4u8S4SZWggLbx02(3W@4910eTx6<@B_Xb72nJH>D9qU4M|#EffED8kGi3a1 z8s*EZ4mo&U!|@e zkKIyEWa=0JfQ;_IY<1+wk&6~BLT62wFaf7X?6}a+ySP2OynVYPq)oj)ic{XX?8qUaBc5sOsm9*VTQ`H{Y<}Xg{j$0MwsmQ7 zCJ+z^94P|y>P!2b*>iKPFTAq<<(Dd6cttg3($Kr_wqvhdm_C6`>GDB#q?Lpk3^}j9>Wbkf4Z}-Htjvv@Hog7sdtZP1ZFMz1oR4j+^z`#D zzxm#WNJ~vfxat=dpE_YYJP^i~g`Mf#dGr7K?)$a%&R_rjPY>RE&!matfm)j?P-O4^ z{n!Tbt8c#BwR<<%TR=$m%ZCJlOOob(G9N2r4Gm3ob@ebGQF8IC&K}jRxqm!xe~Uit z2|A24AVv*IFiU;X@AGy# zzJn^dnT)%MRY%=gT~)Pb?;d<|XEd7{T<&+@|Ii*E2iFbp@eXWGIq_wU``_&BhM{%J502D3VzGME|k=2 z_Ex&n^7L?Oa{ZZU)$f(B+9x~AIv*C&$jF1e+sd$%57+tq=cPNx4Wo|~tExkOU)8uG zv&(Nhu&)6Gw4z?mMW|y3753MvWnY*rL$to{4y_1A&}O@N<#+4)%wIV5qFE!SOuW+< zc;OFEm+h+=H06iUGbW6lc`81qly#c8#CT(z5l{F)I57IODH$2*6cKnb;k# z)`)rp0zVN1=*DC_6Jq+2^~>v2qedn6DKO~uJ-GYOPXsB^jGqJoFw|vCT=Opu{$XFh z6Wt8jk^by0pSR&?R3~t5IoPxBZgsyi5CLgddv)v3eo!k9oYYLO5S3z4;cG&lIEzq;vPJ5 z3hgww5eemJ5^wfR@1zZAe4sRU@XwZ{x zpZB9r=HGGa&42)Pw`ng*0XlqdI`6YZu;^)YdEoyL1T=3;OlI<)8%8_0HM>fclAQ93 zOD=-h&l69-@a^}j;jX$jKJQ?G)d3Y+@ln(hoCaiF6C+uPqSt{#6dPKY$U{EHMk{Th zJA^VhxB}q>8U_r?BRwfG2`)_#dFsX2zgxMkbmy+#dAX3r-wl;IjwC`h&az#W3bUfG z{ou=x@WB~UC}2#%)EUkmpm-n>PB56}!>hyGs+%rIaj4;YA&C9&u=yNplv}lg7jAt- zKILX;eTAQ~8p&K&Ubn8cblcuv_1B>@=o%xSIXHBNyGX5end-(3vKh7X0bIMQ4qWKb z9Qn&Ne;J4O%kkqTI2?AY2kqT)z-qK^-MuX}Bc;Bv2BR)1DFrS#qG~B4Gj+?>P2otW zpkLo_R(vyf(4g$>9G};#H<*SE8;mWQR9bZ~9I+U+&iX378i>Nfg>K^H87nugJh>>} zVUG_)y{DgXDpruH1Mu|$P8-gyQ73(Dkzk0J4CGWDqnrkZEMcjtrjcAZ6LvKAX-kGU zL&T`pIUD@o6QV|X>JWj9Cyy~@$xiJjo5D?va+5Ed0PY*iG)6rhSZZ~xN?YwFCwHhQ zRVUwecJgB%)NZNJU_nb2(!mZ6k2qALiiXs|%F8D9N-=ARybggqx7!jE|N73xY1gwg z6{y07@zEe3Tb2(jtPEvmWfqt2#giuXYDe)%AXJc@`T7fQ8Lie+PMeGV`)VG!2AdUr>(b_stK~HNOAyf7X4o@mK%&?dYkKQXGjT z->rY+krz@j6L6z3lsl@hIUTnr?pcj&9$dt~$>{R7=t7`!SrE_)6e1!J5C|MC0(ew$ z5q5j?`aeGS^7(yEr;|8MvNgbZCV$!@Crv#ukuqXOUY%BPJ%-7OBIjro66FsE0l*IM z?RN4(_A~4S-eio=ii!##fbIV9!P?>AC-Mpe1Ofs9fxwRy0lXXImk)oL1IZW)zX;sn zz>l>(LT`aU2MEAfDkvYCg}2TCRsx=RXh*#$1C42sB5HiX$Tr5{7K*$u zIhMt&3A7T?l`OD(h*)f`R^x7x7Jj}|lKOf)^!a0aqP%DCfze}UjT}8Z7{dIDR3J)8 z2_&UO5Mp5CluJDwVQQ#xU*a~^(Yp%S~g#VeHZ>L(mnsBwto*}_6CJ2f#!93EAy5Q?E>a^IlRjhW{(WMKanRP|4b%ebo8ZR)YwG4K}!BSc`6wC4VT8VYj^VZGFIZ z;PP|Q^5Q@}gM`GG$40cBsll+NcU5HKL$pn9KC0lewUvVA!x>7*`m{ zcuFAKj2Sa9Y|Lg$uU?r+NeQ^A;YS&UWpKA_wdnM6NREKetx0tRJ??!`Yu_C%%c`wz zy?Vs59V(3~YO@aeZg)U3dP{bzgKm|Vtjx6xdtZVvV$g9*WNI${KtMNm{F)ZzX>5f9 z4x_ABYrGym8~AKY6G(DZKsRSiPzST>h?-bjO~mC5`9hK}95Ty+^$m4RP2}lLmV;7I zn{QEHbb8YLuX@4}T|`43Sg1m5avF+cSd1CjsT{kGamo@v-n8jl$le9OgbgGcXq!| z7rpVs3zyw>b9`!INQ$KP%N=glYYe(DHhXotKYnX=#AYon`+D`$|9nQL z*8opEH*~#obnM--1sZg0+fH_D+dH;x?_kH~j%_D9wr$(CZR_Q`_nhiznM%X9kyT-M1a$iJ#x!G?wUlX+usZN$Aq5g z4iStZ!juD#&(50P8dAU1ffD0m0Dk(9-5~^E-zl>u{yyDpnL(jp{;wA~*SH?UiP7Dz zX5OcGk9T*)dD3rF{|EI52?Nrtz9tzqrQ+`+=;;GU8-LXhcX#pwK9KuDYFY>mj|jzw zA!sh{IZ>;XIDM0Jm?sEX6E<(As`H+Fl**7Szu;~3Mee1Q}FjzJ9*!9 z&f~J;QtXFpnzo4%&6gf!$D$MI9L2ML}VF+y)A# z+MiEbC$y4%It+K89dK#9`^EDQ4i1h{?G>vxUe51=zBNn1%8s^yIe|mRE8y%PDn@tf6;tU2xq1 zpO!nttC5^dWi>LBBzyzHxQ*4t)buLcH3CigN`xcj0T_;u%44zAauwyb9wgv$(=6Sl z@S?pp@Mmx7nK(3K^y&EgrPC>YO|%YbPB~9TR8;N-iQjU~@#`+&b;yw3d360pdYjzl zDGlMp)J>aN$*ayPF!WW zt-7aNix4L+YsxpY$=(fcY1qxGNh4LHxeMA@;HF_R9h>{+z0_+Gk9~$JU%{U)fL~`F zgTD6&tr#rMr2#u;%5XwKR_Dbrt{X43-YaCwp!{JMxq(2yL9bgiT*QGB%crBAt4uCL z#3zWumZSf;Op_NDkYY0zQj95x0kcO%C>bT+JAsYmQOjN+_&bfsOF5iC zT(n>V4pd@4Z!lVdV(N3v=#JZq(BifxB~I5m(;J)nvQowS_-i4{3uTI%gsg3;Tu-;A ztpM;Qskv9KptBsCYCZK6Du3Tvzdek!EvNE%ZW>;E(FV1Lh8r&a z9$WV5Nc&QE0k&yxUH3f-^_w~~8u+~qOaxd^Xg3f+-MS9 zrIO$%!)G`fIIQ@G!B%$n7{}ZfdGt?$+Qh^mo zgz(@47}DJGaIQ)5Ni)tWZJe}lGrq|+7w%0d_-)9tCI)M!le5-okc^8*YOP4&u9_`(nUt@MPbxq0k%2FSHc`x`(<@C zt#Hw3S8*W-uqe`0$9~mB7U#g%NM}D%Y&D|lG&tZZJ+oAZ{Q?$_51eq`DsP=Cg+5VZ zmIdoF%ZT;+KX>JypGqOCx3vWk08T;rJ_A^!So?w*9;UFRr?P^~$Qhe9fiV}JA2UC- z1EJ{O>!vq;LGFnMIyq8vQA{9x%iI_Vh4|qZH;JBU-Af3VD+T{XEDf?04fq4=e&+{@ z#_fV?bl)=u*Xh~Kub+K`2AGnZEM=uW-$sQO^#!pY7v;rgXCoICp$}VcSa^)4p%Mqa&zi7R5YJ<*f{%J1O%yr5bv=b`1I|*F&h5w%OmaCc7a_#ME)Is15Y5R&CJ+gmae)4V*<{LKtrO4cTKu$I z8etCikhnJ5x66ux_FE2dPB;6VK9^rAhKde(j|<`o)w3PQGtOxUVL!D%NDB4e;im65 zU`B|@;SE`zHdRlKBH$ORLo{4u&$5lMf)|{z4l4=&?Dfk=rep1(tlZr7YNLfAD3A)* z(-Bko8BuS8hS_7r>@3Umyx|5#oSb}Bz{<5F_s{6-M0%swbzmG=kaUU>z5mK)Ejx;tb0=b?Dh~KUuZ~+VxUhgIzt@%5c z@!lZq_QZtPMam2bVGTDbH3J|%d@m|)_TwOtA%VxaH}KND4+cAO@WyDU^JemGt?{C` zq9Q09RAO&{rp(gQPv2DP-2_9Y+TtwgPiZTC5*`0j`CLosZ~!Ex7KdUA_mvVy8;8v* zs+Q;O;YFc}wVueZ+Am^eNE*ZJ5jEfkmb5{wr zk}`uc94E`-2zcb(NNOpK>E9bXcDJgTg)EropMDG!Q(Q9~=`EF;4IWeY%dB-C1licz zZIH7e<56Mf3B)_!1;06SCp41ez>2oE!XXJi*~E?w;uu+yfPhq zgL0IZvQs}{T0!K#PErN)p`k+%@EPidV-t*PG;Umbd||;sZJX9qwDej{-VRmHI<;!p zSb4o&73>P?vTTy(RJ`h~idAPPGT3U=Ou0~1?T_>HpXgvfT0JFcTQ$ zny>J-m`P>G9;}97JHuVSjDd#wK#vVTXkh;2KAoIKXCpG#L~( ze-$S!%m0?aykoOy$k>|JzK!1l%vv`-{)&K$KL;$L6ruT(V%hXp8l9>&LVxOXWO`Ha z!mq0P`}=y9VV?4)I9`t@3l`1rm340Vqw0IA^XLnRzJ~`{YkWwMv^s?t`6gvn$GU@K z?BV+N2l+l8_QTtP8LfuPLR8NSMc4*M3K|;U39F;o)Qd=&;y2?BA1fJdXQatNq}qMSm{kAY-xDONSj`i|%!ID( zSn)|cks?W0ywJKBll_Ha+21}eaE-4NCq;+Z9r40wWe?cbF%<~wcft_PdTRrz81MDa zF=b4IId|Pl5(#0!1UTrUd1*xJgSuNBZ*@qp8jKEMU?COO8l0i0q`~zV8k$LNF@49k zfKXeA|1U~XtNOJ0delf+BNnU*bS+8Ao4cv5n7A}lsF729FR?vrC4C9`Kb8xcn)m)6 zEN8U&)NyzrA)v#Oig4S2LIC0*Yqb90N5vP|7{;H+c;|PL;Y&fg4Xg5~s@KgV44T4`GDI*oJjKEMp3RY$ zW_5hc#gnEEx*VHPiO_j#WGW1}frgmz@8qXFvOCdfk|;yy?@dpQcx|DVb{e6lva~yd zm)bHr*PENvt7h^QEU!5CSJ zY?~#m2r{`u&B*0+cN;s@{xx$ru$GdsVeKCr7_ew)?K?=(zV<7d=@m(Mt38g2Yd2s( z9~86xlt;9UR%lba>imEZa4953`Eq^4Vm_pQH=JACt?GR7-fd>&L8vmE6u)cGya=oz zVP;|)r7oQ|P*GWcgOf#^{zEC@TSF}*d2(rG*A6zR0D`Y4>a0Qt2v*2UPxT(6Wxp*w z8UDm1oERpl;r6puEx{1R$M|Vz!0=}PP#rRg4Wf;~5})-W)*UzJ|ke#xXDt|il`)t;|KN#p0`t))95fr_sF{;5NXR_w%Y^SiS6b=Zh8r- zVJT?e<-(}kq!!RcGS#d3~Jc?u-4cj}pp+Q5pJPhR%=YsbA+JTww; zGW?e`fgvCRhVBpc2h6r1Dd{JDZW*cEHl)@VF4-bx>QslXJi%J7JjFg3$9|1Y8re#w z(f}?Mb(&bH3RDHKcfZ!x*4DJv_xJVM+dncmjig0nf1i3HBf!TV9wN^cD{ain?_NM4 z9v9AOt0ZL_i%5%tN!0bH*YCJUb?M=?5rO%A4 zNyBdi#OaG%;@SVo=l(m4{BN}6-(E~fyjwqkTxLY4#xr}WY`}ZRp8WJloUUv47KXk> zz9=ZMR8x2jx>S&^Y{8xp`Zmzj$S|WD!;e2q1k|1|yaH0tVQ0;T_FzbqL3Nvc-PYCz zLN-7_w_j|Q;8(oxEah?y(6dzh2ySFth=%XP{&4ZdGO*k@QGyBq5f(_k0*hau6a96D zCyaP~4E6|!97HUHU9!lFbQn;*Fep|`1|q<$Wvh9O~aGwwQ!(P6#Ws;U+DZITESFo>!! zA0~Om0!@w*Xyo7L^7P%<8eZ3@0bDIF1(cd`Zk=(f=~~q%1Hq;r7!B&wGLZ8e zd>{1k$l5s0&e-<_)pAvZMr`ad*GBw^xG2cp8VzcAdv; zGDN))3IKY}rgY*I%NaEy zPNcut5ESF>#OT~~KWqJ;I4-#A*I@m&38xEIwdx37KKzkU9l-zPpCAF=tB?#rk>;$# zB*Wx!Y(>yVhXd(9SEKos+kL8Bwz5|5>kGysboHqOb$tB@qk@Ow5Xtl@h=KW~!J>ns zmwW6jjF;sD7L0pCfp6Y!9(Y9M1M8$nLqz1MKZJ=&XL=*JASCcX0pFXw)$hGP}j8YvkWeRG~0o~UZnYbIqz%4~B8 z;`Vuc7c-8DTqTwfV2&k7nVAD9vOEsQ(YC5yycg0M&e&n`cp&#thZ_)%=%$bBNrK_9 z_^dH&$?||59@FHTYfJwmD@HLG4CvXa4lX3?z+R&Ag8wFH;pCK*w2v3sdK1Q;If4+j ze%H68U<^j%+F+=zo;GH3jzdWn@aTD7{ca5RUcLXlnT`V&H1*vuJi)FrCGFtFm27XU zma5Xo!y|rIR-mnbSjpr1b8tjLym|)&CwKj-j1g)9MGC(JeJlQ~u=8bHGPMk%dpiGCQ(>NbD zDJ)%#2b&PZ!5Qc$U7b6dBsE^_#y!C$L34w?aGVsLhBP<*00f(tm+usAN?T;gyVTO2 zgRj@iG~tMf>h8wJMQ0AX$-V$kLR|h=$@Ur{7 z-9iaP2GjlPSydQP6d2m%aM{SRR^es*871B4XH(bP#quXqDwe}jS2G`R2n7cDD8pi+ zMFSK({V|b{6$G^w>GD>C;pAANU(DLxZA!i3<+MW-U;g@OGhwlEBDB~-_D3FRE>ZJd*a~Bw8Io9ngv%}B)NR@I!16>9d|xG z^Vv}0i+f{Hot;8gp0W{2?{EX&jtYF|2Tw66b!U$;5vQAhXNK48T5K+f z27Q+~F%11V1-LC$L*< zn$l2O1F92?1P_jZqyz)uvTSl(8e|-uUC4)z2s=}guf9LKLQqy#UYai;jYrtMRGXtA z0o|m)PSWbOXv)paZEq(=g)by^^ylDmnI8uJc(tb4 z45Nh*6v!WLyx>;#d;@)7&T?dPGYM)mt>a`R!@@@xrP)qtQxOo>U(4LK|C!Cl`UrAN z+B!Y@$ocqcFfb#|fEU@@!}47Q*hM;wrI2L_`&(&k{RVH@N1H&iVn`ZrdG0OLBDB42?B>4o*^G29m)**YWzw> zj zW9Q}xXK>zNr18_RjNpLaVrpcN1^kw8vD9yUrEfOesjEBpc3oKbY=XBacV7H{P;Y*G zCeynI6!HuZ`C6M(em(wcdU~5Ul~t&Zi=1r1&AymTiV+oO#f8t(Oe=IQp72R*ruu4g z>yEjXSD()|yBkfphsp&18C94c$q#X>Ksa|2-8RYCZwDHK2$Fa)78E~7j6XY@i0&6_ zdHL*I^$^95k?K_cJZodXhwYm_#`Yq$X*#dW2eQ=BqehVSll7;Py<WOOJP`&; z-MJn%<1OChvc6wr`z?UGzjQd-wcMPFXS;_nZk+Edc|Z0^7w));_-#bo79;i1r8wiK ztqV{6X)J{VX{9CJ)&2(Z{#OL{?WS+8`f#v{=sj)WS>*osM!t zLlaK{?4-=&72(StFL({^*F7||)VWabd&CY28~i&92LV$g_)Sl2vWcdB6M4PJnc2w`#~)-;s!PxVA=##w9%X;CB@vxosFW_H5v~b?uUpM+~i+Y zEA|XFFX-i@%g{q>$)vsE3a3=-y6o2p76?tIx9>!<$UC8F-vCe%T4y*k%$_2y-X`r8gdOW#@-RaoE!|V zwGmyxZ1)^yV!Vig{L$*m{#P1XoyDhp{$qSitBRL*6Q@!8y$ZByBZI@M+Cfj|KA_67 zinpVwAOHi9!XeHY_qt|BbLlg7G0d=#yl6?MD2K@qTH0IOCnGewoH;A@hR-Fs#Dem1 zja06HhK{~mzPQo$RBI51fB~->ut55bmgzJ*XyT!rs3P;w5c}i&FoZnbgq`@h9|gKM zON$8;)*c+LeLHIC=%E+MlN5ROq@iVn6Jo#_GeE-uvhvWey!Fi%^R{1$d(pNGlb?eo zPvNS>#g>}x_fnbo0Tyx`vy;QhSyQq#-R8GA*UQGDVWcL(>U*+oNz}Qw(XQg1kS2t- zklj}6Ww6Gc9mk&LF@%zSFqww@nQ-owO#O7JI!oz{2rl{c7!(zJ0Qe8~jM%_^kw~YT z=R-SqL)HOgEPRpmo12%aOW{(l+Ab~AAfxZRI{T>yXIcw!h>0IjZi1=DxcBgYE{X0At^ z{@FET1s7tdl;LLqUP-84a04@Z0WBr7JqzjqF7^-D5fZA@etc_Kqr4uMUwo;lihXyW zp{3QE`n~ApF6j$VJA4U5}`WWD7EA#|hYw1C6voHV*CkiBiuP+;*G4+8=aHOdh@)tpCVKs5cvH zaNzQI9I_mbj7R2%!uDd%Qd5^U+Y+uySUcuSDx?LB)1L4?)0c)<)WD3$15@@~KTfXM zwqG8mVRTI!i;0&s*n90nFMoY_f9NFR z)S_T=V73}_!GM}!hckE%nw!y3UI>c6!H*s|&-TGseY&@N`a`)bD=}Habbe`^H1~iy zgL96E@lB^znGp*!GEJr@rNlu#p{?3?d*14oB0quLijcWp3vj@awgJ7yj9HIYzeQJw znJfRYm2K^_-Kfbg7&(|RuL1XEGR7l-er9%LVsiwIV!8C5y*0K{mhTHct9xB2cU>--IEtwX*WE0V7*9 z#70wdox@o^&=WXlW}{xfS2lr|GpseEA5|HB&8HX--$H*qLL7}LcFEoJ6jr9V>$<*| zHvsY@+6>#kf4HW_OX5eDfFSj1mJM(F;FYPhn{3BLgwmeR<;mhnS$Uo8=!Dq&ri zY6|rC?NV0Nc!Re^Q0E0W>`05H$OiUO-wLM>Ky;_2+&NaHIx>-je$qTF)qU1ceye)y24uDOgdlp!%C4Y zUyT{DnnJKw6&?r9sHhd|wUwlrG{9qW(ziI7yaioY)<8ApZ zSXB~dd(-w>No6{jm*V?GZ!os}Zc-GQ$+)0M&*vgB zn&)%85s&O!nTmkGd;7DQ)F~`tOqeZrm>#aO>eU0f1Y!oPaW*MgD?_c!A9KxJL zcaMk}<9gh^Yt08LJG=#<%uP?puzGD9vxA(V!+3AEhlR35n~nO8`&f#sQ@xnz4WyN8 z`AQllcklW22EC8guZTY1||V(j+syzwpl-- z%jPc^_x6enq~RrN(oDfwHmOLyGhm)rZ3|`x(OJ3coE!(;Ws^KAI zq{_jf2dQy7Sa%we`q0HRdw~)LHsW)B^O#Lb_5m_Khp5vFu8uzadW-t&^zmlRMd)+6 z;ff7lAnIN!Ra=JDRJoT!ZtUckUNLvr;fcOb)h2=7$qY`DzTgF|#>(Hzd%GwXoGq!% zU_VXcCoGv$C&U8qW%;*ZJLIxGH^r)_U=2loX-T;Cae{;j1OM0|WKS^m5|y^NrVapV zc4g~txi)eNmVg4tzc$94ekvHG~SJ%-Zn_!EZOaKaQ0L zr>gjMe;-De(s>J-Qz+uGelDHGu55Qhvy3yUp+z>Jecsm8!m`wxH)MM_+_ z!vhLzSc<8S?KO$z9QG4o`^+&OYkQ&KcvJ>N*kJ$XXFMT9j%df~0SUu)O-hhYO*6Jr zbb8G$*O|fc^9cFjXc}zV2;mkAMB)cytoK;s#!-ss@t<3kO}8Y{n8epC%p-H*Hrw)y5;UWmWAUGQv25!1>Q^M;Q%fQ=14!lUiLS zLk;X(FJooij27?e0lEZb%*8v=hZ8;*6TdBn8tsp>_&|4`=y;(-xm zP#}|`hLMtyXRtlYH}R#wXzyeit?o+>BbI3~xiBS=H78Y;myS+O@}=<#OJ7pjPg{(T@~D<2mCd7*;o}J2v0`7?*>$}Hf4#}b*nI5C@x5*9 zU74&t^2`n06s+ck!zRga6;>U-XrbVHl)1}@HYfLiWW%?>`!q1O*C`%A^$cP>c2fUl zah3YRj4Bze!c8tqLl%cBAw8qZp`6Cs<#MmQcOKM}Gxrg05ylpY3n@t#S-4!%Xil1r zE7edEU}-U#eCcsG>h*)#hZ0u8YiGDPp%kJ@x^6WBmI8M*gy!#Neq>%c5FZ0@+aHC| z9!Y7rFvtEEPyFx!=;#rKHS#r^4%Xk>!!mlG;jh6Ykn+U*x%a)&5;&)tw%78w4xwuVrG*UcTHJ-u!p zI)%go0>gK!;`y4-?CLUGOPURZw#m&pU7=nJ1?>kymrsvq_2Icrp2?4bc#A-X0%f6NV)zkidOtghDg-IwSnTMt66=ffvvRTAEjy^8?A?e?7MjqdLKX|c#o0%^D=k6_h zjmGyfIGm>S$FsKAr!#hYfv@p#*lQiMM3wIm=&fcq6j%}isu7!v+{U~`yszKVLPGD3 zRh)>g3>0O_Ge9A$le=-Va5(G>>}>vKby^d@w;s}K^2Plub~7+A zW|!xcRg}Vm%?b*Mz^EG_i!>)WjRr&R4j}?&=8EJ*MWr+w%=G*oo(w31Sq zDAgy?CGozb*O^k<77K8u;FIUp{z!jbE&c8}MdR`Va%#~z%HsPNPc3RNhFn_UylQ>p zvsd3HA919GVR(moeXpD3wHhsn?|#ayDS&cOC9NVvjq$zj^t!F;I;}O!_Ba`%R~vt^ zzjQmws;G}LJB!`xnG}*934(nDO^_X3fK?K(>6XdT_+=aUUKGos4KiAOQmfCc5Z3Cv8!|JMHvdHUdCw;jypXdBK4-JFD#YU;Ay zpzUuZA3o&mm0)nFz3^Pjdg4|rzUC2%CgW+O*a>snR`yVW=$Gh4F?9iN#js+_*$cwl z^*kx@lXB&ft(fHiY!?1KN#eRY@@%ph zU91v>&8HCHkGETenScdnQYpk~JR*`=u>TjM{9j?rHHsjR6P%|1)gp<4T7224A#1b~t~#)#0BvKvVC(RHJdqp#&CI-C9Jtu;+7eFDVe2(p+6y}Q6K7(S@i9(FB5 zpgch+hX@H@Hou?GDuST>ZJ}`@@#JL04=4g9jD?sODiDKP5D-x`LX3vK@>dSeuYOMe zR1hM@fjs{v_wDM_b0@E9GgU{swXUE5AZ~joT~J6G#$NN90Kq55ZToAVW6Vn2G$5Cg3sV-4#McZ6Ejep?RnZyL)St2E!C4`1l9w9rT(5V z9vw4qOUuXz^asGeP)3cntgOTjMrgMiuW*`8?w{0%p9h)OrM>eZI7P`ky?Jp}oIkV} zp(Hjdf+_lYcj?l4=*XPOL=2ac8Mx;$LbU9mEBowmr0mGUORhU3kXr9KB}seny;5LUFWI z;GEW5g2?hwAFQc#b#YxCf+v?RB%qh^I-?O$c@Gk9TtdwHh2S=xu#~u)K60PU_ft{$ zc^(22=bJiaO_Uq)cc~jEWk4m{I2{?e~HogL| zk&t~%ACadm{vwWXn+&tN^=D4rkI&4{n_NEuS3${nuwQPy&kk0Ll{!r>7g=6!>DqMF zeCTDY6x<%iF+IW%2yAITYbJyMj7>yc-kEA4}{rQuyi;L^Z+5C7~ z=8}{IuW#aj<|coiz-aUnJbyPKUx(Dq@M_adP0t1DQ6S(;PnSY2o6AB-%<>Q4U?$`& zDDYQ|peWB;j$e@4*Di4<83~#J8oO5ScPfL(VX-W~zaOaogrVS!_y=O^W;qaLw!N0HUz z_h*3_E`&x7onG^Y<=2>VL?vr;SS@eoQDl36hOnkjBS{#9114y=#Q)-G{@Dp)1^0|2 z78g!E3F~@2SYS5$8Ni~vO7`2wII&Udk1Eh=2O;wRb>9*qK8F!?W07@DAs4!(@TRL8Rq0*p6vCY-FzC|I=M zPhm;q6lySy-*^$`)wJH(L8yQLS!X4*we^LxDB;oju(|7MqJR3aw7i^2; zt8Ef9tkm&`J}|4~>qhkEDm^d0HWu0r``9Sx3{|wd*QViS!s(fH-Mtd3dA|ao zfQU9rDf=DKm+#0{ags$Le)xRgK9+pGw|R6 z<7_0fFM>s`$TfXu|I!(pZk64_X@lfR58nr~Khd?bM3higaK^72OM@Q zrP%VanblKL4u#Oe3g+CEk~9vC6g3Sr0}eW|i1AIFf21Kf6i#_r5abko5$73;(Y80o ziMJH&UrB7w6cLoC^+mL%5NxuUXc=BSGy5?Yg;)Do(F1O0&c69d%B_dM<@ZsOJ_+md11VCp&f;LZO0BrNocN)&RD+vAHUC@PdqbsBxCo0O2F zh`u{MU~AeZ`V}Q9)P_wEpB5e*N9{R6}w;KUNOt6PVRE#eFu3P>1vz^)Q>b+ZJZc^IB&_@&z;2zFy?TUS zpuj$G6WD72CokbnvA>!Vardu;*Bn=b#zM2gOvvjjLN10+_|_P1qe^5?1hqwgj*JWy z)gp&A6DASC!8yqhWHm7QgAqK2`>!9R@xeHAn**0sId-o~ zRPo)Pb{n5|TkT)|NbJBQXxubTo|O)>sT;QfqNf=ke0y|x{(G(PVpg*Lz0Jb(tdjgTdS<2 z(&W&WRgrFmeF|Eg!KS6GrppcI^owENkC&1!fgStd8{_bf5oEpFg(i|NO4+nmQW(q< zX#VxE+@v^9hx`!U(3UYS!A~$?FHd{)hX2GHIiP^$r1j=t zEbxv5Di>zj6FgLuk^gmDxMKpd;aFrt_K_)rcVZsS;v+mpIW8=*`=N}C$_5~qyUzI9 z!ODJy2@Wg&<=`!^L!?0DkOG)n*CCDJRrgEvEk{c2KpqE_yoOGq#SiK>TqWSG=Vsmc8RYe3{*VV~a@ z707xe)*Xt7GOb60AMQ>)r1X)PhyUJ1xTA67H7CR{3{1p~o6_YKO*MxlV-;4}h|J9cr8>=OPH9%mu=o*6?r83&|) zzkSHp_x8^)$wle79#vw~sLNewKOGWKFOO54lE4NOM~FvQ>K4*X5Aj5yQHX=}yM0jj zJBS|&H1IE~KDVQQKHj7UZY~oK+1Z&BBB`$w#BGFSVf;FZSAAr_eY8akl+M4xj+`RI zZmUzGt`%OgHY3jUin<>mI5a#shk&IHqeKuH0~LnSg|prX)0t&)A+(2=hSHd++AmPK z6`_aj@Q9D8xCtoIWa;B(a0k(EqkhgN@g0Kc^z6S0W$l@R`b#r(j|CR(r(+2T_6&c% zVF&rOU$^ld6Fhxc7=@f`Kp`~|GQ52c;x`G zux250W`WF>IN(2jysQA=`$__F`6GWKf!JOC&Hlw1eO?Umla6SIGDrX=FzOpCpE-kq z${ag+w-leaBF$_nj)&ci6WA6H=~mc030c#f24#Ar18%^*e_8V0)_Nh3u4lxBWS4RU z27iD(3WLr^O3X(>`zW%#7FABeo=ZB?SvxEX(XlvZSNdC}?I6BOl)ulfts~<7?OnDp ziGiY^0#SPz%kwEj2uR>OV)*tPqbIW$co6t4S%ywJg4LE3D7L8&<9*d;+P`1*^-f=( zA8(HrWmQ#A?j5=E!}<*RML7ux3FG7A=jZ3`?L6TFy(YgZ>)s^t^6<}Pj-wf2Q#X`z zAj&QwXQO7(id*1&^zE-UJ3JoGIqkOvzK6MWbnrs3Js4Ae{@vf-*X?kBxZJ>z*Q!vZ zL!lLAPRz1wBA)l>fxOT?2pgU&L^M90M7&T`rmzf^{*Os>#3FIXqBNjjf#j~qfdl_M z*SAH51#o4P;IHcLA2BcW(Yh8>76`xryrJkZQ&w+FNK3ohm0IR)S1u_AM+Iq%g-XCG zLOWKyQZx7WK@@`0g9HeDHTZ7#2B50sF3|U1>pf2FQA%to%pPaZVW`obJ!71iKEqI3mO?I@K~3h|*qx`-icw9HFjW#tOB^_fH>5E=jCQeKz6-G* zD{=$}-{x?b`!?~|aFy$5|8s{#VSsGIeGk%1bxa+-J#~G-H6o2;P@uF`fq3`dz@#T8 zI`2iY`{(nBO{thatUFGjVPKp&wYsqO3xn6eypL`<4B>t6=co46;NajtDqY*3tD&O# zzLJ81J^u)E(TU!`PD2;+eLnAD=y}eV);UNiySWSV+J`r7dA|ihq1Z#E1nhh5$BIXt z1mN{Dezjcp!VE=V^(}DM(`sWK2f%(mcJcmlr&g|BW3@yF8!XIBLzN=shl9tU-@QK) zFUNgRzrL=mz54-zm|z_u#&J&AknMRZ=^O3NDH3vM%?{Q(qeN)7x3@R5L})fQH;00Z zObGG9t>&v1sj;IZ$E%{E5=3=rpt4cPC-vR05U0Oy*LJ~n+;^r}c^eAitfVxTCmPQ8 z^?t`{wdm_rSy^ct&-^%V&H}QTD;)A&zxZa>pW6S)f`OJU6LuG++v;?Z!RZK;Fe`@d zm*w5{Ra#c*FOa1~g^9D1EI(!x%?thuHyTV7zE%)Y7MKuQQCFC+F23gr>0BKeC)W|!c*c6tpz8!brrN;VQ7UjL6BF|u09JLY z|8FJOZ3&Lk2hqreviEQ`aL2#L;dFBp=!hV_j4Zi?{sP-R(Ll$Vwwuk?E4BX|wQu@j zE~(7!R$a#l*5`pE>um)or9X~z<=?Q{Ijx?wDqRCk&wL?DrwUcCPk9eh*WDy{Lqmg< zyLBMS^hQQJAv6H?qwN+M*io!7MB+zAF&VH4Aux zxSlNIHH?1yJRIa@hfo;TGveGwo@=P*pH#y)WAt6`@*tXi*l<2OK^WB{ zemCWzV1${~kMfwzj)7m_+O&l0HRGVg4pq5V$4AdG7W}9F`v+sm{2%voQfM~BeIehZ zCKHa0ErCj8c+p^p(;=qvir0@fD`wd{30nnHt^aT2v0dc%&nd(HpwtwEOh`=h^9qI< zx!h<&fI({CB%~CjYdy}BrfV^Nf4+ea0S!yxz~>@RVWPo`fq?#@UJZoeaNS#jWe+99 zz$xbXu%PDftr7k(<@3q>gPvhVjkF(~lcn;fn4nG9$Kx6T|NC{WTa14b-a!xqy(#;; zeP4lO{58{@35{VPmGi}V3(BB40^hT~j11gV&eEBnlS{Kj{(GSICk|29*KN11ST8T7NN!da*2qzMfLNJ64vTgp5?Dabyt7F^h*tVT?Y}>ZYjykr{vF%KqJ9FpG{DS({s=fD%N5UH{`~Aeh zJgK6OP~AIy1nW#QwXkeIRsHH`9tveJ-lhW={$A20QgM5X)~_fqj-@t^)cP8{zW-&x z(5qx`_(!;h)d?YUTPL*pLfT(JTR)S(chzy6dz|M_z=IbfOyy@{WcfSg=+_*^7wR`K zQz^g~asbM&sYrVk+@Zq0=TW`O$2v>-V+=>a0jO%&Nca2oH{i^nLau^Ap+guDYuoO` zfb>R-l5Z;kUzd1HMcQq^gv_IgD1na6^rIV?-_&3h$0robTJX{#944PHE>EBcYgS*^ zeK%oU*8_Qlj#?ib4UZOrXTsI2pBq%=)`buLfE>qT0j;En!a#>)*#222_zAP1+6>{t z*0(MW;ul3)Ir_(b;Q+s4ecB}g;uaqha||S!ek28CQ4!^7F1=!(MqUX#&Ete(@#Z(E zGL{SkQJVQw`oQF!+sJYR*F~wL*otV?s*GaXjzmMG?YI{u4h)HKol|E;PomPAC*Cwbz6QR+ybK8aDDxD*lTVs3Ul`4QRXqzrBHt=9JozXzq1RrWM z>mHM+O8)vRU8_cXJR!NjkYZkQLH>oUs;`=Z8_O%Bb3>a_@uQxY)FK4YV8=^Q3&^ZM z7IHtpk7Hys6slyms_CTkuX*WN9>;f2MgT1IZ7c;t9?FCn@T8kU^+`Qxr0E3 z`9)mpDOJ3|KKGlQZ*sRhkxw8-`U%Ia@85Qtn1)MB?=yUh_$1k_YpNX_IySK14J;A` zxRd$i-;yFS6Il(c-I6{DTBj`(&bjYL`rZ_#my@DnT(Rls$TUx zZxB=S~N$;tmqhTEHO7x+Ml8!IKsnG8>~okzFiN3m?vJ8^V~ zNG}+G1!=jdKz`Vxan)i(Q+EmbN;fFj1)`X}4ts+@7a@!VncM=@j}CRNJIOS5w`35t zdu^tjV0=!BwjcZtNYVci2zi>T0QRJ@5?Zd+(%przvqMY%pXUaPvFyss26Tokz#0jwujgr(igY0o$*1(0Jf0FabOIocQz=AzSuZC1e24) z+bHh$%(f>$UCqSzqeT@3MVSbR2qs6BM-r8qL$SV~{9Jpb<;q-ZV;$4G&UzrWQT+k| zTq(ZrVOEAHStuYr3NPzWJZ0bn<6J>I~RX zOCeX!ls4bT=L+=sPoW;B|lW*S@+HF6yw;0Z!%A%gohY@@SQI`?@Ro)ct12}|FjxJM=4k_G) z_j38$Hhr9bs;Oyuyexm%YUtlSH_h-h_2L$DR|z`lcas{WTRQ)IjjF3U>RI0JR}WuM ztF^OZ>~He&CHceCYeQ#ojvd{y7Qe`SY3(?pMunIUV%mLRx|=fH2+J z{&RxaDu5P*O6A9n5P}%2T%phkPLf1Q-&gi57KndWbF^)!E!&qOzwLRQ;j^lfEM1SfLU5%x7_a=o`VV`~t>_f3Yl48_Z6>Y^KM^Z;x z#!kO2swg0@#p9c;eu&jU5a|R>7%7TG0)&PfiZGB&sBTqC(HgjJj7JauCCiM`7?QUH zK#Pu3^SV!tg(<@gbCCxkFThfb*qEY&i!uZ%9{iE5x12v1i~GJA`Z3VOJ~bJjd9rWS zOaG_Ca3JVcEXa5x5>A}0vyY7_n5XTX_jC94)@y7{^YFg3 zNnI;a_~bsMc$G-F^zU4xEY4wqZFZM;Z_}>Y-_n+47^Z<6dj7sgDLiqM-wB?ot||xB zd*{C@BkYr!?VoF<%=3PBB1YP_X2yvWHK*fVu(i8t{mV|n+wg;F^PJENBKG$1-B%0D zJts1~1n2a_PInzr>B>7p0+(!2oU0s1sT2MATRj?$`=EQ&)>WN*i2uA>a7(+(L zdBLq7JH*m0TqXS+0NSkSoWr8!=%)b!(@)OH!$nyepApuXPxk(#gpKeq9!B3t-so$x zI6Z=VMFJSSBZE1m3F3InY-FtWVq&#ja0CE70v}zE0HTyd(vp!3UT%KJ3tn%jxH1z8 z7UY9~K~uwJc()%{^=m>^OkqKqa zX(~(x`*Z4#xUP# zwH+t|X?&EGLVCc4$63u((WPImGl*-DL2s8ga9vX4@h3J5l%a1|jl<_n#j}V$VI}5* z#tm|hM#A;4fXFj#cbsMDcPR|Yb{xeH35V3>;1FXB)l$%-%L_xqm!^Ie7v zV~?>(M&#co8^GB$qHTBUcfEGk?0)Rd;ZFOTb9ui;Q9q9X_uGM4Z4V*Y#11aOttS;J zt)#FKMYSKyu&ln%j92vl;WxJG7SeJdTTWwOiHjG%(cyw7#b_fFpN-?mKPF|Ig-+E` z@VDDJXjvD~y!|(FEq&!?Yp>F-QXUEp48Z!HqLKjr0}G(e?Zk(Sc;tuEic`f_8AhJ+ zw2$<8wYs^H{$pI-Vs$RE<+FM_UqrDH29!8q2*~JfC4)@+2V(ktF-ju%aB0*T zQIPeeB_WjBa^L$ZGlm*@eDq8|VNDklOn3;;X7qvCnX5tmItAaIkuLlyWR>!izj>hw zvDtU*Vrr(Q*B4i)^8CUoq5)@9)o*M<60*M63v!;XMg>OsnFHQ(<{~>CdRM7)^bCCd zBC?YfcLu)q!R+Up5@KPjM-vm13Iwb^500WGX^+Zgg<5R+2V$&1N`N)-n&=>*o>gjR zW*W=^2>0t7tb`ty^Vv|IRkAL&mwdCQz=&pdT3@Vdq0o3-QbH~S{$8zkg|>oXNs z&y%-4t)c?<-zEHJV=(|m=$qqxB)O8CJs=@m4trKUg=tzjW0-T%eIseg^?Z2`TK0z5 zt(}0yk%%Va;MuRY{sGp^+&=$i*Vjp3_h>lAUFoR;ilo*VSUH}DX#_e zZD3xbYM?u-A369N(OL71_&uFEQ+}S`o2AA4{QQkXD#^!wj+_a65K9xtWWI24e^&*X z1#YH>zNhJ0qbbo}FES*nG=Asu(9af_>OhfUA1fc@kpm{>c|kSVygj~4TT;MAPowl+*B^!M#n)kJ>@!qWh_WV(o5V}b9iH#uX* z&Ydz(+WR^!vcgO^Jp0!KAvdu?>PsdMwuN*6z;5-!e&RY?2%#|&wBOG@6cL@&)zt-_%SteGus9R_KJ#VR)bQj{Dv!+IoI_ZeLGoKh30kA|m-2Xs z@rP?3Cg(S&UwH#-9XwaA9w4a{v%v85*8lQTxuWCAE0svacM=?XOM-*osb#;=q{w#V+2NAOHerFlQm*97lGt| z!uXtghnKO9_5F-VfkKC%CIMa#G4w(OW0ibmy27_v^IS!~gXl&hxk&Yx42RuCgP}!| z8R>@SPWNjDZsEg+4sZqkRspszkuz|~P#di5=7)c22Fv%j=}0B)@tTxL%9^KMj>AHh z!1)@iwK-1UQF&A;CXu=CH8hz6eW8X`6!#-{J{R(+6vQ6;o;m*@EZZbANYT|Ug%4MAu7)@qp{tO*bT zri?!t-l34=wS=*!dFQeGHQU67`q{Av!7F8@r3Vi*>u|x)va(dB>{9hFt|=*~O$Yob ze;6Z$2>_@^b}2oM5eg@+XTEd&ONVBM(6puW-v)5~5K z>qCi%+UE$hX3YVP*>%)Gmgg#PEe8tpwrMhe^N?%JZV%@7ab1_WpWv_r>CLn8bk%1tGo5Tpm;4f}ktVW6sC&`Tc?8znC* z8xd!n5+6_1vXVg9(x?60A^p5=6-B$bthnncw5ENbUXdsI+wkvd(q7qPq^`wD9nBvZ zcw%!VOKS94QE$S*6%g1&I>x%jj_1xQM9sp89%qkb_`X>ri4@fCO(8wX#v@n#v^rny z{!Tq+^q@{!4zJ2i3Yxq4)2kcTEVN8WtRZA0`b~DjnKNH_XKZ)4fRs$sv+(azhO#CK zf!-8>!6DMY9Co2q^(Zf^&Ao!NQjWNzd4S%K4Woh%2QC>IC}WBd0n)ftt#nq-k6?t{ z#!o|`qY%WQqq)(&fpe#~0Vu**t8E2m8XrXE4-RF%EO3&vV-cYOk3!q+?u-+YN4=2} z04FGc_#?6*n=zszIzJP^%bOfv_$}&$6iBE;zmKb%Wg2~9h&d*j5wK}Or&XWIV1?36 zp`^1(n9W1yUJPC3+;TzH@nX~cE`+sF!oxQtfp{b!3pA4bed3aPyI70*!j?CnfT)Jb z7|VDF#Mn$mRVr{y3zdKM`fF3gydF9j0t^%O^^Cg3xSZtYDg}#WkPnAHgYuoZtbcJ& zic=ge$O=FWXMl|%?~fb0LM=A2CE;c>;_e2I4uiA6I;^sli1GR4r7`G9kG=k;$p|^} zxE;YXT5XO(q>YsNzZ1oOb$ndlZErO&<`ciHcK-k?9~7#M;s?>$L73xIB|tFL|NDJs zHAeueS*R_2iwn9*u;p(Eqo(kJreuA3g6xIrvfye{h@)aV;&ac%w8KIz&7MV4;hciw?hQ7$blquL86iG0TwYE<-ZS-K9LU#dCrNS03og z(QDRzoPo1F0prDot)Q+)1I*5`YMr1J|EhBwjK^J8Yq{qZ-O`}T)gl?G-? za$3?VFQyXn|*D4cbBS4dCt&)xzCS({FcX^I*!tdRN~|IJdLF=S35zf$z^g9>@7&m9dxubV(~| z*bL>mk1MLx$IYghd6V#=-ae0Sh~sZlp*}yrq!Wz zJRXOSrfR$PS(9g)4OOwmoInd|Czqmn>U_nd-m{~@gIDPT|aPNoY{X#^Z=ANJC~knhXP)9{4I{Ms_Pr4S z52m@!OG9SXB^QL7`k~Za%_g(ynzrpIegLDq=kTOT?`gIFNFqGCnOSB(u6w2F=u<_u zd!bEtv^l347;3dV5d;iHz%lhKLD{agfa!NzSu-360I$RnBs75%EqRzNi`_ak77nhV z851@3WOZ$AZPjdWArE~zO{29CoDI@p%J2pXdk+Rx9QqdTs{J4q29+Y>@^I)Li0DAB zjSc$f^NRI+9l(A$9B9FS(snJe7h{SAfPg^)x`W)`*aaiS|C;XuK_s!%lShFPC_ zCE>_T$vxnVgm73OLty$jW6_e)Ki`}AUn-o|cp$ZVz}b+hFxUU8pHY(rapZz5*tf2W z5)NCP7p7VtB)_3jIHXKIN1EcOefH+J>!f*&SU&(^IKSAchbM~41Ui1;V0>z7xEY_- z44#UqyjGG*k_~s^2QG)Kjj=j|*b`DRcB?X6DziRov11yfZ>ioPp0Z31JzQ?A4gxRf zsRxfdLq$b}SPn%Z=}QY!v75={^z?`o<>*5yy$+edcZm{8?5~Mr>g2-tuxihT{pkcn zIGHTdJojt!+?*!*)K+zkhL`}{7o;LNzWkm9ySB2$mLig~?s)m*;g(4!F|iF1$Bcm= z=xA#B5(t#{5KcJ6_)(xsv~=6guVs09?&tI+yeS*r#>!pAsY=V~CoR@1(^>aD_1=fK zV+`H9b)9JpJwwJ{pK$^{y9t!AZMK1>dSi=7;XNkbUvYxjU$^1cNvy_;>F2fYeMt&@ z14a=BQe$)mtrxZapE9dvhYx1|t{*%+C7e!wVkWLJv)dZ%ZRZ`&_#Z53NJL}%-Xn0% z3lr7Mmnlp84J54CZi>C6K~a3`Og6MBT&{N5l7KLn`F{}@z7gaG$ zkDRh5l4{=Q(@ws7dsH?eRst15F8sZEhwl$xTMi2w7TZ0v%^0mr3~XZg1|BB)^r+h( z|1y5YCJ2oZD-aThCUQ7^#S|mMgTK}ff;SlL1~f5&3*^?JcacIvx^*Y@F#7bf2Ozj35~^rp zin0m{W4|!%?I1mc!WJc~m{maXU0=bJrAucOX$*UWVIjMV*TB>-z#YSG3XsCRPt^{b@IAcH>l08y}d z5fnmco}j5--}ikN5<)ph?05mw|8J7_UI}PT{O;i#Ox{@(`ov+v$uIu57@l3iGs!|H zuj{*Z1OdP)Qk>E%80HTdP9&F+G^|M+MTd4rnbqXih7iE%ALiPvN9|0$Yoo5vV}WUj zb_Pe{xMFG-6ped_>BFkF`3d?FgFZ<=cL7d6k z3QXwN>6vXp7+`}MunxdMX#}IN2v`bD$jYA?Mgh5o%s)oS4i#T1&Sk=|8D+~X?>*FfB=awPaZhP)x+4sh~#29Cv*_P+XHEilOegDwyqag~zb6ONUT!#q0^>>sG z->kws$i;ha@&xYe3|O`(304jO{hk1Yfy&l(g&wr5sK-)FIHMD5AZ`}XK{#V`J2+&N z=K*UW@aTF=-e4sfBJvIT1z&PO(Li-q8lFxC2&GS@-IR$5AEkQ)*dB94WRdre0)yY(2}@>i*JWg6 zimV(w&tO@|&Zbd_h)+ zumacy4KeEUdopFnTvT*k;0XnEqYQU(xMlP{VEJEOfV>QZa=8ac-PTa_zWNf&&dW)! z#8pyN>2nuEGKX29?-hNN0_QgKJYHqekfbNjH}aoR#RHnp<$51E8`<~~jYCpb=n$DLML0E|wxZ8t_JAHg0mEv)XABSIFdwVRilnW>tZ z=g*PU7~EZ(7>m=IT9QMW(2$$6eE3 zkYj_^l}J16tx~!D5=^~eDjY#OJcv_@&S>Ppl{!iSe;;M1cLMAT`84mb+8ooL6SjS( z=dC4KuptU@x!7b^od<{{l#@{w2S?MQkO(%&xGU7GSx>e49iTzNqTy?{Po9GGt7q%w zTE6Z7?FEpYow(fTDq-DU}!urG(i>{VZ%i=!P{CDMR$Mt8IyQ`#} zUYA$OB6(jb0CrDlBo{ z;kA97BN_|SRJ?rukq91T?T>R<7SeEZQ}67T!a6p@Xy`vdriU%!`H9HGS+D|AYb#TQ zp-{894ewaDf3H1Re^tlBUdpXP>%fkOXF1k#;;TP?#;8lXV|TiybZT-eOe>6eQJoyw zkq==9z-_9kKSAJcHgdD@h0Rlj`?W1~J17JZzN=V=#pf~I)VyK_wnM`6KzE<0yBw*C zJn8~=V}RXLDRLRGQ9!Tsf}De$jlN{rf}cD{B_#@;uN)XY6{o=OJRIF#U-NoL_C9{WVXX2B1zJAF&A@$BR)BFq)Tn!fIYco@|pw%gX4?I zvO7+;W^pzH`ptxXWjRgUMA)Rp~A`aUhr~or5fB;-N zRUk`wbdKx`dbn|gPBu%#e)s}2+z-M)7v6N5dY4k<(_8HLp^J>43TZz*|ZUBZR8zO{F9kJ!1_% z2Y!rapUEc$zLDRHl~g1nDE>k8x&K@y%@Ul?c&`Hlp09S?cLYjGKBlv-{Z9%4!JsOx zt@yXMLV-yrdc4k~@PHHN8Ga38Ay&Rwf)i)AI(@5|{)x)LpsgQ*Z<^NvzTlrTlat;+ zs+svr_FRhuPwt{tkJpaJmf-%r@r13tiV8D;U@Vxq-uttIc+oHwWVS zKDQ%VovsIRFxSMI_4Hbu4_EI5oey`DP(KK&nP9ql3OnC2%yWs?s9Q*bY}cA^Uoj2v zSWGN*efUTk2=^ET89VPX{oD0ykcvgB7O1o*kVy2rsrp=7!S04fhQpBANy#1tBnZeq zNG6+rEM}kAe`)sJPc-rqT}&N4bkflEGz8D6H#sWv{Z}$j8hnoDY_Moyu9>Ltl{A*ZFY(lxEL3w!g z2lQ-#Ke_<7$aT`GKTSQ?+@2|?eMece$$UyTsku7wrgV{bXhPioOGN3jMo0%d0R0SP z_p(&LjEjv)_b1^EicDw7Z}pKE@=~$@UB-@4Nd3bB0X}MDb3zUIX>v0KWv~sEu8LV9 z7cHRT`K-x|P2!X6TV#Uo;7lVa%+zndL~cFo|@K0bU>^V@G` zt@Lnpd2C{)CHkEb&ayFPU=^ftw{lNh)xEaV>u}SQIh;r_YTG7kBd^%{k0R<->u##O z);b+C*(Z#D*L&a#s$FE6T`%+SeR;rL709Jz`W1}7^0o@T4gaFHtoZr!eMn@8qgwAC zXd02jVyEk2acQ25eabHmPw2N!ePG}9nwpG=4-EiS9HY#B-f}0@K?NOcfF|*|ujX#j z!Vl%P>cMejrid6$Qs94lK#fB+!Y*%9Nwd?~_BpR77VUJoy5MQohD5pz3l9YzXL%_( z->)_E_lHYTx))vdn|R`)SV3m;4*CZem|NOZdcBWH1JoCRVzzK-39+(Gv zFPsPSD>Emf;JnDb4o{#<;CzbpwB^qYQ)@9?1L^BsS)LCIDQ#8(;@ii5GIg4+6AXLf zO^M7pdCTc`3tawPaTDd}=&*^2d7q5tnG7SY?`A}>o``7kH)_Rh8|BiNieUM2$MT1}|A4 zY%;|;%RoBBvrCtVPBSe3k(K##LkjIS{Kg}DOJ@!u`=W5F4a#swt!mO&WmL=6vh<_} z$oe8wETamxeYa@_>vftZFs6E|6%MfeuhwxDUnya)MrZ8DNf!UxYT&J7!vm3SNMEH$ z*GQ@F%UWZKH5LV|Ll?_sd9LihSHRk$>M!+FUw^nVI^{ z44dnGRB_7RHJ#CRlEi3sxvEueoUOrI*J-maHAbkh@=x4$#cxHV4eI%B*?JKbEdhj7 zvpKhp(!~-u{oa1Y3EHnF_w^kLsmY=LqSHO4taP>tF90f;SjywJu8@qCSmL77^!@GK z_i~XWuww4kbuqvHU7+nF-X2zZQ%QP_x(oV!9}M0^C^|f4>ti3wVp(5MNMT~8^>Ufw zFlve771*4wlg#^#LmUrNf}ber-5F30M2|fTHUK39`Nun_X2D;bBA0AYD>3c*PAR$U z^MB|A4p`&hFA!`X2M_KZ%90bJl@(Dw0^L_hn`0PuEy-SD%1SaoLgAgLiF!;J^t;m~ z(50CQUv))d4v{QgWG@HSspyF#g_63JAp)LGLDOXr?JnAd>jPUAG$0dN_tNT7))uhR z;6j*Tg|wr^b;)rC<(gqlra*iblB+eyMqXLsG`2MV3N((Jgf2ibDlznZILQ)$?(cC0 z_47de3Tjmp(}t=FFhM}m{NqtHQylmWVsnm*auQg+;L)CS($v5>)%+iR-hYAP6>LCo z+`saQ0~c2o%vj8rH)@O-CMQ!Si2Zj$)HDsCHUZL@#W9~^J5-;^P$b#|{sh>r6fMz$ zMhMFaV{kAH)2~Ad$q1w}C{-3DlYm$!$l@6a=f$)HcsWaDiaKJTTr9}N&dp>>3+Kgg zAEg5YB&jmtH4vFao?P@LSv@`v7Y&|UZhZOdb+UYVL-g#t`~?R#j+PiQ8Kz^flQRo+ z#9K92VB0u98gNDMJ<%ZuL)&m{8s=~*eW4BM-moeBNVEIEu} zTS()8ZcrXo>}4%_PAK14=(`~AE+vrA8@1qh=O5B2zY(Y&g=Hs z5cKKnaWv6U4{(t{uz{^8lvTxYkgAt;3|%PvdNt6V zQ%ukVxrN<-qaJxI$8j_Rl=Xy`8x{rIXTR84@Z;q`mY$0%))45FGDl=4hi_w2W+JZ4 z=(q&+bS_iU63-*#S*2;r4usLZfS-Gso12S7_&ju>rPFpe@=PM$YQR%$0ab8BM^9wRiY;zC^c)!~U`JlA+9N4Fd(o%SUQ$*_M}5@WW@|ibS7_IzIr}=vG}- zCu)+W4HNB?%YQ9qMSqo&GKsl##y*i@6WIHvl`&{`&szs&pizs-mW% z(`t0ulF0kpeHa8Y1oeEMCYElqo%lU?e$6<(g;dEMuH5qE1_ojkHA&lgz0UhSHqz77 zrR#XRhR<8RdrcC&T@JLxs@3jVx-@BRT*r@{`&mNh!*a0HCg{c*>~OqZZ4|4xEps}} z`H<$)*0A7ONh%kS%?k%>;P<%|+E?9NA5+z-mOi{_xWC|*J>q_~{d^Ea&fit4>vvmx zrN_G@uXbjt>@je)pJIKlM`SlOVwC!2y$m8$3moCq{r-gsRtPVe%nm6LMe8g3vGtTOsLFvB5N>$^soUg81rQ*;7z9I`5GF zX$dl?dV<#|M8G%b#O#53ok+^uKlow`(Rly!%%$VJ+*|bf zfPZIRMqDWF$qiBxTo+Jie(ss4M z<%^dx4KzP;MkFA3B#?mA;haAT4;hhvZ6%|#bQd_543Kb+?&PDX?M?)KLnnWMVpS1s zA>rha#BkR%Tvs81^lk{#~wJBRIcW#JuQJ^c6f} zNa+Ulbob<|n%g3ju!<2+B{zNyJf5M4w=QT^HNT9|$-zEf0v*L>fyyJHJS9I{i4{k6 ztRgqXCEWQ|QleHH6-e4la5=EFUs zdA1+V)VUYT@o>Fsm2;%=fW-Wun6B5-#F!N>x0A`W-)9A~y+IV}K~@?DJQHLM&Q$9x zQn>HG%FTB|AB#V`zakKWW#WAfelREY$CnQj5_LPT?VDe1cIXZ|Hx*kj(sE*yB$WUo^r?gN8WhT?sZ1)-^{#{(krvt z06de#O5DLtOSa6fRm)jBSKb@7xKp&{=jvhs%5^+0UsiC777QWbYb9(LgxcRmMIP+~ z2Ao>jEl@m*4x$KQW`ErA_ANK+oIcZ9W3I)#-BY=iSb7J#Pp6U{N; z{q5-{Xlw^EocgXKsUf`KW&|Ehe!Yi|50cXodN@hDs)Y^(PjEX&>GrcZkz0?t0%LU@vFO# zO~;~Mv7K<%ddU~=$uGZchk`#jfQGr9+e2<^M}~KijA#oRPSb3*Ko0#3EDm!nZip6l z*}fqWNS=mMn#1S}cuo^&ahM>_jMFf4bK_u}w=(42HU?$G^+qs$9B$Awn@SfBVVHu< zvwJlEl9*1A=(~VWHo)}^HP|WHeJym(S0*vt1HWXApXKKMFz$vpUTChGFB3ms{3BtK z^yA29G%P`Oeh`*1oLZ&y#Q-63NS|&q?5iz6)>sHgpC|&yju96)BucS}7Fxm^t@8OJ z`OpMJ*9&!aErr|=lQ)~p6^QH$l4+t#5VKMVGWa}MTI0Wq1No5p4}k&DKeC4Vclz|g zYX-^wqq_NTT?7^axbF9d5zt6;cu|OyjYvi@TN*kseYNvZV2Cq}%YTo^=k2uYARbhr zS_j0ffjtI2;&gm)Dt+yydDxv|GzbmEm;#No9tSBa0fvj6sf~bU-J^oo5;kZ7*+?`3 z22u_*7pP57!kaQ3SZi`lJ}#vrK1}?s)8)V58SXPAbz0r2>t0067L$ZDw5V79aEa94 z-6M2Fq_LTpYfM?nI$;2Jhig&~(;4bnmc&!CuH+xzvw~wcL`26%hlazFDWId#t_9U| z44R9_Bt>&mWV6hH9qsYq?s)Jv5+0c5+}fmI9{6{Q5_v;Zky^PFtZl6spz`XI)e=)V zVQl1Fwt7OP8{q3wqAraAw-c4i>bRfN_D#!746=`a%Q4R=W-AUDfy2P@TC20)iI`P9 zT+UF;UT%r99ue@46TD+W6iA)D*-u0P5pcVv{y3|u>vXv;$h2#K7j)zD2P9FIG}L@5 zt*~_~TY*VX(0OFJU1HxGb}b0LK1{FZv(FRChKH27o@%S<<;+q<@}sO7D|L~vtng5y z5|a&^K?KzP%wva55TvJXxegEpN&{@O7E>=oE=T9GFxq93izmujTt)UjzjJ*?Ez8^` zrA(!yaCb7^Fur$_QWkzg(8w#(83(E=EAy!6Ff>ij=L343e_a2wWv+XD06`pa&&K$y0)ZDkh_NdxiJGa36@`%CurXN%luvM z1sN8!D+OC4BPwdr&B6B~K2 zy`KiUz8QP zp?u6gVB3(6hQ}M&C?s4)>Xr*uWH$@x*F0`L;k#*%$aNO z4@kiB2x{Pp?W#z%6J}3LT>Dm5PC_l}#{`U53=VcRmn%@Dl7sS2pqEhRuK4RGicG-1 z?8TeBBf>THD9sB_78qyi_S=c6$sG$yp1MWxI8Or(4929Ec@B9Rl0E~n04PAa_H1|% zHgB1+_ho+&j`2{nY{l~H2F68%&?robih~e+Zq9|j57_s}sf0QJ=*g9t0L_A^RucCh zJprGQS*gLKKjVY2embSJLJ_Wt1oR8HV>2>m2RJg(;U!4icwmAN$^oaq(#pRMg)j{?8MDQ~b zLOA7A48vis8qFz>&}<;H%I7V7&XTTn0bGFy_YdRWEM0~G(f1@1JQ5la7=OIB( z#d>a*1@Qp$Ff@54Q?YtvX};69uF|lAl4C4|tBK9YQElicDT~r2s-4|xJoERi+R-tA zxxd%#2IbHRzh3pCRlO-DYY8R6FvhN^_d+AWCCA;AXwQSSVD_~WLeMkOwMz}?bVIW8nniN3K;&+wg)Li9 z1S|1ME$!#QDOFU`l7fUz$Tzeh{&Q;76^=+x!+;2fAWXBq%|qPljkzEAl6F6s7Xb>7 za}C4&3CSfS9x7E&_+-+%Yr6X#t_EP$6b!VpKrMG+H2b*4PTwTh;pK z1>>`}xh%FdjM_sRRGhP>HY{1BE16BmL$i|mQ6Pmky5~_5f>E;f-Dr-s&R;Cr5?!XhHvaBe@YPCj2TwlPhQop;*J}?yR5$pM zmib~&|C-r%ek_Jyfw;mpW;&(M_Bf68XxbogG6J&ja2jbU*VB)tcQt{YG%$K(AqRt5 zTCJ;D(C}n4xI3~T90`MhgO1PSdHWMyBc?c3^$O2Sad5@L13}ov3MTgA2hLAZ*_Ro4 z&$4dV9oxc+F2{oAHQS7yPB|_k4{0dSD*`5pmG5r$hyl{jqS_18kK4c zLedUB<+0?$7#(*SLYFr0vA;dM?&zg1vb8DlT@dPZTh%;2bhY?@N+GA4ZgrSfXo|=b9|@#`##6HfC)nQ99#-CRBm^aTZn>^7qdTC#2D37&o0tA?mgdd5 zwUC*-bLkr}OTDae4m|%`b?fukwmLoWkv?@1cE)O}*O%9b(7^xGmB_I04|WRq0CN}u zu6U{J^b182B!*FJDxUC8MA`oWH9^Y0OpFV0ls0l`Y#N^M$;`}Tzid_l*vCc=pwfIH zYs_hET4bh_zoCzoB$Tkf{T;BD&p-bh*nRr+=@TYQfNk?Xv;Zn_par|Ysfg{>@GWGA zKTbiQ+)*Lrt2_m3Ep7UGleDKN!a8@qS>Il5l=bBQNhM_{lHhuMyDkin?sQ4@^N)15( z>(DPLBEO?nZwh;|tL@G-utvnvX@N#aYqHek)rxFDDKy_Jxhy@XJV_m@pv$Q(8Uweo zj^Uwy;jn4_x&h2eod2H)r1cyzpB3s^-8mDU+rV4zS~phsVC4CYdPM~ zj6da+&Ye5G`|f)$yf$UC!C|mhpT5w5wz%D{n{K#1FK^S`ci!1Lk?j8mXS} z1ciXtjl?Ebc=&?St8c&edFg=zIK?XXl_)qZBk#TKYPPA=%XjXSl9}1{&Ig_$d^4`l z4y%XIz_Wf_aH_TiU+u`RrB>f6fYUmxmf?eYUHkV7W$xu-XN#qO-|WQJ32#pO5*`cy z?#TT`C7bfL0zfO!(_&fh^9nWA)V%{V5jKA8h%-)CVQo3cWQV;8Cy#VkZ7;m^U)-3{ zr^QvXaYNq5&0E1(6*^$IfByCC!h$_C1yqB(&Ea)j`qwj0AAgcC;kRAe)`JH0dUM(* z(?0w{drt|OXXmaxUwr%HS!bT0c&e#F#yY?1zEdN^;)#r~opbuh{rmQ6)hgERuvb^t zu;Ze-stzTxCbpVpNSBpY7wphx?b+P8Oh_imm4^V+);C;E_&amc(Pm9ZaB9!`jrm*icci8$h*>1b-%+r4ZxQpl z3KMU$b?@1wRSaKy=z7y7I*JJan3&(#$?fKwZ|3<$WeghfIhs&08ipHi7{%EJjVRK? zhYyEO!=XAxAoRS|=F^jR-g!q}18cf%f;b0@zyZPV?#Z!(0Cs&oY{ZR)xEv!#jsy-9eEdZ(JrrLAjORO6A2;g+N!pdBhaBr@C z-p!>wu4vio9Q;ic46SZj6(n8jBg2q53i8n7V2*eM|2Xewpb%j zV+X!5{qxfDQYQ+dpxw5kUhi#;eE(2!lSpEYUh{V{Gg2s z4dAy~2KCDl^jUv2XnbrF#vQ+P+pe!?F96h`vBcf~?)!zOk2{_ZGT@t&-E;aE-=Pl& za@j%vppPFlObJIsB&%)hhE03-6)Qg4_)`Pc#tweg<+*DCpvf1>C`D`zo`Q6f%i&GW z(7qVZI2MwL2CD*Y{F>}Y#nY4>?ZJRmLgP*T8I$x*=L_!bkRlf zT7|yQ=1H`!CYi=6AA0Uq3No;<n~!;>*^q~sw`H1gI%`;+MMXu!(4WudKGvRVo7aDhF9FT9h z(H(p5F20pOI3BN9`)LQ z-XoKdaN237Pygb}9$h+f`srt%jUF?mWs68+2WT`>PK^*^N$=US``d57jfjZ@e)3jT z^yuCVG?rF2NsXXCwFhxOjvF)jhxtEu@03E;%o#Jsj2=VnK3z;#>O~;KLz4}8zWn-Y z*%1*)rGKB^Xx&ItSHmHH>-+|52|*~hJnOsfPCfP1@X!#@EY^q$Hq(qGZUK@4tWV-S-fp8t2^P zjw!Fa@(N(e(cd-8h|V7(aI>9wLU2Cy(1$jAwbK@Dt#Xze^0|hpsQJ+W)j@~$iJE5^ zpNoE3?)JDqZ?*Zr+bN~>v4hpNb#$NVpxQ%q=D@z$Z@>Flc_lG_R3P__d0Y4F-ItgU z&n-|#rv8E?a93qzc2$#}+OMhh7URZ(VRTfBV;=Q|h+YW+vcwpvn zhuW;;PdP!=f-i90olfj&K_$*PW9*_OxhfvA!n?h@@(R|h+1R^RI@1fKDJ2IYz`SNhO3tS$#UxZ67_e$3s_UlxkksQSznvW!e*5wI~!y`2@LeN7)l<6-PtQZ^ebmki% z-VLXxt9aH%#rl^r<_INBh)a9dU3c*Uo2xQtjbu$uBOztQ#aq%kE2d96j+gFWZDgVW zgpsSFjiEz_28_ZX-TmQ*AF@*%4+v4I&h}4|;Qek84`mkc#*M5Ss}s?Ga1IQT#UdUCS5f!iqGz}q>vN9&M2YWzfDpP21cVGm*_S$PtKm9ZwBt~ioILJYb za>!NEMl%1j;4l1MdF7Q07A(N~gdz z=9RMVf-6Kt9jseG9hNvatKY>{G=qMyA~@<7SPVR+x_~;7*{`Oi`qWd;P3{=~z~srq zfPyjluAirQ#neC(HE?j5)Iy8N}1Cg0BHAB0qZxg8Aa8BFrfwhn(^(p`~nl z!rGD$8360#%eql#)r16X=b$25wRY{=v(G*oCfl}c)pF8R3QMp|lAobGNtdcN`MD=d~+ z+yggL7i8EAe1y*F{?Y?ero8gQ>{%U?+o4q|8aiZf2+S37)SyFk$3e40p*&PdN#30d z8#dHkRs#6jEhB?n3cvd5OD@nuAWPIPk~@$bnYC_3!q}MDQ6ooss;g*K+vN85+w>;oE|s- zP+H6A=&baN>urdw~x+qeP0LWkW3xWn5f#qf7~s8Oc9nKC+$n4U2XioOv%#6Vq8G~|qCB(<$XH7+G)@`y9{232wb=W(0 zZkyJ*qY^{An{-L!v|E?dPH7!!r$$Y%3fsC3o1if?2MOsPrJcCg7%ow{Vyp=w(&&?< z2&R;*{?T@BexTcfHyv`=c2rp3gN zw&+DTg(YD|vU+y0g`i2WWTg&#mZ3q~#Q3bK|HP<#Q)x_cCV#iMMdSx)$2T7 zUa`5u!$Z#;Kc+=^1i`pnZs(eHc?G))X(O$MZ1dI~YVSdYklmZoIw7TP8#o;7XG^$PpIRz1nd1w_M}SkPz6 z!ld3}jk!P-G!Xmen{U3MoX-@^B{I)B=N#TolK{}9YB>blWM2o22QF#jlfSixuwAoe z4ew3K(%A}`k+^A!t*hrZ{TE9wV3cPWW0-9c$*pM`pciO7k1bsV{#uodC3J%3O<-pR zVJIJ01tBnALIaGD1|Bl~cc z`hkV=_HY#J+%aOralKND6GHbgqiRKz0vpmtCXK0qMrq)vygzT01SYYmfupSfW=|$o zTsHitQD$NMG{K$yFJWO5Qh)%67hilaTZr)FgP7?XX_>+KWx0r3G-0D5)7J^umn=M3 z81TLS^Uptj#T8dz6SGR;gF!B_Z8``wzE>24Lt0u|US1yI7k~NX7x|P`I2#pm+G(fV zcH3{mi@Z|*mB}C(2{_+>X)ph950S9d`bPRXMXc3{A0k2_&_b#6kUVH7e zFTV5=PNuZfzZPSSLDG6zu)Nu`XJ2r^1rXzhQdCp~)(Iwl;t3}_`Q(#qUCRfECF1gH*}>ZBBcGk+;tHr90*AWS7?sbvqk}=6}@`*9(DYf z1q&AtN4RH3=Hz?tak`v;``hL1JG93jq7Z?h(K+jUwpPFF(o17vT9SSI@yEC8mWVN)fXg?JV9x@mi8ji@o zOpt3OImPO_ILr}p!tp2Ed*|JR0Vysm?bx~Vsbj~!J?+0IoOohvYz%L;p#@22olG=O zOuI8qJB{^Pn8Pjt5Hp%lw|?!K>#o24o_p>lAPmt+D56SL*Wmg7-h1yp{>UTLId}eo zA%h00=o!Yt>n*RSNbTJ9ymKaQ+x{4DWjc1~z-`5jj>}gpf9~1mzWD6Zu003|;@z}i z{Z-dqo0^)&f>J3)4vm{zTd-~0z72rTt~q=`&uzG?uyAE=?#dM_d4IDtKY#l4k2)qN zYfg+nTVQiG?)R`zEygZrrN_gYeC|P`biczi>J{Yx{*h9z5L8BkUsN<>lckr~X>-@^ zeYFdGJYv1}y+tK+7c8x+s?i9PaH>*mK(h3&A#AXA0Lxmfu|-9iM0FirCm!QcyT|L! z-m}LaH)Qtr3whhY-3MM?QCai!OaFa$`nTB`-Lf;fc1i_zO>7Yv zDSU`yQhV3by}!xN-^r8$yo;1ztf{FT0W0)rzqWR5h)QO+&Z(QW6yPQ!5bpN)#E zt6bZ*?`of%%+(E>wtz|Ds0 zAwmly!rL{iEhsRY{Uw3;C>>NM04p;yUD3O$82El3Y=}lywRC+l{r&6FmAz95SS9*g@D{-Y+ya&B@mDxcqY9D2YLjEA4=&& zV-d+o*6urF{*kApYWVo;( zIywTQ;uP&5$R3{|VpJ1t1}6`^F8BhH1CxUf2e}0p#v;FP7OUQvBl$Ag*|d{jdNB7V z2q+k2$m~PRDRRQ_yz|cEZW=#+JSz^}e>@-`Gt<<7sR5$~cx-X2lJo71S^u3j6=yP5 z?b&@&($bRSVxyBgM%UC-?A!PK+8O&_n^L)LPe|)XM@B~H{{2TBGdP{tUp(M^CKK*T z4rN9viz~nZy-$$P0^P!3LDufF;!@rb%5xd!yl%1Vj0V4W3hFWOqV zVG+(o!C zy-GEcUlyQRK3sW3>$zhh)r)>Bz zBQxpa*YMtZ?*Tg+_bmif#NK6Xz+>{V%Px~jAs~}WatbS!E*Q$-$UxHUcTYHio;?*9 zr$3fRP${3s@=zH)dNh>S<$5b9g|7#Ku^Bywumy(ZIV5R*0o{0VvsFu4S{m-RtdQ9m zsmWoQMK%^iMB9K5kv*saZkY9mO6$Pc(HJW(z;r-WoVzi&jV;mzYj8r0gD^{6cdPWC zLZ1O%G}{5^LRW~@?Ep>oc&okEc$=+*x1`!$uo7?vuy6_=Ezb?tiIq;oE~=we-`)r@&x&s>NDvVK45BGM6fs4KXfJJI3vx;s=Hh}Y!NNe)V< zPlI|EIr^y9GxY>FJVQP!v&Z@8jC=FFFR6!jg;YqDy9;=3-Y@HYjYJALq zJ_GvXL`Ftv3=dWXL_rx{se}j7`3Fq2NsK}Cx_QG}T2=FPK>Sya))yD4lszJ9f~D1W=%G)PB`f5Ex?)j?A3W{Q3lIofyYnh4htjnzmX> zN-GdXaFfieo;B}($($Ra5M;-uy!>MZ_J!NxCAoGxALc99=8W{TxVTnX8C~-TZLd^n z`*}(3n32OE%ip#Oe;wr*PPRL$S9b5bzcC|hmKO; zb8$=olm_I%nzv=+l~-J|e9PRsuK(NRmtUNk5)~V#3=o2@asRU00{_^Uyu32JsHk#h z!Cu0zEnYVDt#^yIZL;U&wCT~KZ|96IJ-W0{>zJIF5Xb%KKe70zyHS&su`C6ptX>7D zGC?sp=#(-`K%y=6PLEZRKt^N(WMc3_|6uARGf>(seLi%3kn4eQoF_Qd0>mwfp8{b#ms9m!-F z*Sc@7j4sTR0zfxhB$LwAKm#>k0?-Xqlu7ox*8tNrN5E!a3u3tvNtOhU3XDkcHD-^U zapT7Etdd#YSe9o7nOK|vyS;n&##@9a8Dg?S1`}*t{5}A(p#&_3fc)6lSWsGwdt8{w zkxK$z<15WqgqZd6=#si1;B?feQN+39a~KS3+-#8zuQY(VvNG_W3K+r`o|xByJ_Bu2 zHMlUfAS6scx&iOlClEN2Z*zSkKm#LMvq^K2+1#&J?%vgY@o!pbu4-( zPMnAUD6rwR1fmSJ#ASrw%vue290qW#JU?+%bO9ps54S!(Rac&hR!^n!j}C32K4B*l zi^N?)XbHX}SN_hb2p-VjQg(LKQ_)a~>VbD(LQ z4?WT|a#yYT@%z~a3)(|KV^=I+&N~U9SipD6oil0Dym|B9o%RlwDk>{MuIJ64|Ls>_ z>ZLk$=^7Fm0_xe7e%s}&NNG2L3Wh`Qybn*pG6 zmoCf5$-y1FTYCDNuf57Yol#PU4*drX`g!4kpXSXw^YqiOm7*fTuekC`0O+;rH?VzN z_w)=f`aA!1n_h%O=Wg9YLL4{{(!aUOmXbp_0{{R(07*naRIbX+&CJMfgs3~HmdxwL zV>&N?2Qe9X_w8R?y#MJZ9_NxhJOb^pH6m%kWh`5=_}1HRA9TzywZ*ho2Y};%J9B2u zN=j-2UW4jRJ^l1!`uCst&DY<|n0fr@QGNUMwM0a9?$EA9i>Qk7@;m-@8@TqdBaY=; z@~X-z+@k;U+_P=kwT+Ew#R#OLNs}h=!iJTr@>l=89ts6~;Ne5AJ~@G1WMoo}Igj3JQyVSg^E1QsTr3Cymx1QE7{tC@zFz zP+~J3FlM~r;mU(P$bk>9nrLbp;He>!PyLW?5I*`Pr3vNIZEF=1-MMqBo*z6RGjMPk zdP-9?BSv*bwCsUcf0>BzFt!}kh#|Mq%}jc{4WdL^rw;MS3B@}L)uPH{U9)BjnfSsl z%iX}6L1t&v*Sl9HnSJ}DPyb?u#i~MitlyYlT6&;m%jmo&tsA6~;n6+2b%9dm zD-yr)Lre%%!IK)dWpR*XnnnJGJm%0BBLwJ>B_AL71N`zprz~vcQu8(+o=C+WxsZlSdYv07^EDlZl4+jtL z+L6Uyv66$a#CJjdc0j)n^mgi;@70clX3$jmR499Z=@YH)Pz+SOPDdlkEy0L_d> zyyca{yR22y+(~p5yrX%M8itwi$)wc2(1nQWJVe@{p)Bz4G$hj z+9=^!=yS-lrB7ZOl_HUmEX2mNu{fpt85#-9bYnHZZN&um!w<8^jT?XOooB!H*O!tK z`Etu;sVQ~3*zVZkaT5*9=5n(Mwl^d+GCrjQ~tihwJOP4UU43i=<_qVSUV7=F+pl~1z6+C*qWK_i z&ANiJ1I1yHp?qV-Tk^=r=$&3yq{9)@B04ELDy3WG;2!S1mAms-d@%1jmm{*{#)68i zn>Mtn*?8i}9ydfYO?orUra8U_SqR6k?wK zF*N`r0ltj==RcD&iL;2p6H^Znd+f2t5?lg51x$R@!BYe))?Y7VQkJ*`Ebw@p2>Pr8 z#6rwMi$g46YKIS&E{H7&otty*OOeYjzZ~EuH6^8B=dNlu1}+eR z8#9`N#~Ystib&wj*t>cyBtYdr@u(ClT(7#mgkGr+fvAq4AH?2z{PD-d0~*EZ7&L1V z{Gd5NpC5VT5i|pbfU5K1e3(;Qp2M=-9WS!1nBoZU>UCFvJ6nkXO}>f*P5TI!%1iJN zg?)i9Yw?MJL0n|gci#VYxTsFPb4HJ zKBvVyCKz;DN{THlRkKvpFd#xIyX0-#l1KW(k3Shd{#1nzVfUyI1FZ0sLCeSToRSD~ zs2$Z5Wkj3SiTYv>$uVvE{6Bl=0Vh?FH1L_7usO03*hE;CoPz;LB7$N-K@4E#%z9?e zEao%koYSe`sfWskqM)FHWXWNP3makcgq@l1-&62-%*+n61P{;Y-!k;;S6x+I9bR{J zb#=Gy7%V^X&qvXoo8uGO=jC?kfz=^IcF(S8#x^`Y8w{_%@fy~Ai3#x-6m{uX_}ijI z=bkrV+2X}5vvX3Cle_io$$@nyHPWOhY<)w0(Yob5diP-mzJI@d_&orLv=buCu-2?x z{@jZ%|1j%^Pe1ywL&r|td-kHtWP~EquXP(XI_hd3f9k0T6DG#RM8m3RhhYqB=&@tR zJ^9#UXp`g6Rm8-QxMBTz(0=~;=L3%$*uG7h8PmQPK6EH4sI$9t>;CUAr=jTQQ9`G# z-N3eT?HX4@!zWXx4jD2841ZqjGjfA@_E~H#k8Lbl74NCAH#pr!vuZ>8Ya6>Ia#;SO z8`3t#CAjJ+W}`L2U~%HFogq^>I>(iSYMBUM(Wim%r+gcG%#p@Mm-5db3S8a`3|RKl z))k@vL6KKfj3ZAN)T3*MZ@!)N+v1hDg}~>;ZsN+nGm3i;+SEfK;UN{a8=MP0;KSdgEUm9~95hT-lVr90Pe+|sjKCw}q8uOw_VwQG}* zm6hbBbEN+uXJjRMC64=Z21wL@jAl*AP+ue^eXoy25@*kzjoV5b*AnNWPdY&ld}!lh z{;V+{5V`c7rhWrv(Gr;tVCTy+-rM_BGI8x2q=69;0QTmwJoP#6r3dqmb4*9e?*Eql z>z{bIQ>5RqOUmR*b`iAV3#$m6StZ*HoCc%Uggz0XG0-ZQ6N+iPhE|IRX^zcdc_5gz zR|j8eq0Z%;%qrm-{609L#Z(is3DSiV9{~NMFa{FPB9LbB>5rW3B(l>?`;qph!4P4J zi|qyGAbJLf3sH>|QUE3}qhkY!f}C^CIX+o>17K4hjBo9R?fWOjJCL4UN?{I|qgB z_DGY-9AU~zh)Ibu=BB0`+b7xK$hX^EEGSCLYD>yJRkgN~vYG2kTu!IM?y$KWjTSRk zR#@$gk(;(xcJ0yUp~?4A*UhRyfu~EHSZ2?f7Zn}jbUQH%w^|~i zVYDm(x+QV^dU&B`qzrLuUMdZmsG)5u3K}+EuzMdO&7kY#Z`!-d4YL zSHtEC=d>BWdW=z@eDZRiKK+}^*uHEYp-=i=42#rq=pX3dMFKMc82R-FhL!~XSBE3T z%gzzRkG_my1+-oo;rRci1khihBqcOeJnVKcNnl0PwryL~rs$EG*#j&i2!lma8D)~n zU4op{<1z$RVnF8Q<)L?GqKN?oV>iLaeg}li;6?RZR8&M>tddb{VzvxLA96gB2%$-n zCUN3&;zEw) zBC2G0MaF?RVdO>4g^p0v|o_xEG&) z0ZVh<;$fDm$x2Uu;DHBEI_ab-pMLuKtFQRy%5PtA%WeO_R=P*mF5VKTHXtp5CItLK zueTE-K1-Uts4$23UKxZHGl^^C_BuPJNVGs&^$X9xaN4P-zW&CWGrYG^?ajLz%kvRC=6VdaMo#T3Rp}ocq_UV> ziyLL{wRqH=ZRp^m+vOG5ob^-}?7|kEch5D38j~n&;oH@%yE<9#-L}wP9eBh`j^+nu zHFiq~qUzWr~e|+VniHeN~#=S_& zr4+U5@PUzaPH=AO>Kl|Cb~jyaC{?ZoRZ9+@ZU1jUqi`TxiR?c|(-5NHkBg0=U+sbN zR97o+AwlNcyQ*ruUpJMTd`O0K3}lfy?a{T<%pVtctJkr!zH&?P4*Z<3=@5g)$`H}1 zuss`ZY%|5j#r5gYd0N?QrPeo?7cX7O&4*Nk+Qd>Gpp9L-v{Mpmj(ToS5&qEs`6lvt zWnsxU#;p$=r+_?<1wSm|#S2FSOt;7$qy-Akz%#Fqs}6-d zJu{NRcUhnK$Hd_r>fHZ<5%gDIeZ?ci(UTT|a}fxVVaI}RHx0l?AbNO-Yck>H54=WD zd>^!077phT_m_zVZ~zf$Gi2nn9KZhDk^)7H2ivr16A&OEQF0OFl@1IPGLviV+O@orD$}Et37D1=oO!1G0I)&M^mzUH_5O87 zRg#EiA00IJvT(yW-Je#W;SWa+xdikbM5}$o&gKvXN%TqrYbfHR5TOROEPV6$rW1%z zanuwM0_r^B6G#nMwTe*;wgNn(FH8w6jH6bxG z$!cq`n>w|OUmFytUl6e0AyEpBELhFFXM03ePNozxio;`@DkdF29EJ z6B{=c{r&IP+jgxvX=s;`J>wIiV_36R)z<8^tzAB6*_*Gw)qn8NTdue;F3#7_XK)6j ztv!6--eVN6dw1v z2?-Xfyk)MV5tUJoUzQfwDHBk3v!G>tB4d3(iX<|W@XJaDi;QVs{`<~ruiCV66I4(K zW5EG_r~o5$r9>p+k%Pq^iKqy#yY4znW{3+af#jFz7r&U>=oR!xj6{uX4VZ`wYN(s> zXNRK+G@EFju_a-Zh}IQlWqy9X!21x=BWYgTJ9wHh2e{i_=v?w_q_x1%Xjj^2Hod7$ zrG1W2+GiH>>KlM=+Kqj51WF{dT=?j4qMJrESYzTdT3Jjh^GhuCjHdcsb?)OwCARO3 zZhF5%wA2DqPwcxpcIq^4?3pW9t=hbGYgtJt?wey{VsmqIa`W<7j<#>xMjP){F1IH! zF6P7&hV$yI@n5@8zQN3 zw%=)}FwnPeU#fL)_dpBG0=spq%P;%e;K749#JyzklH%>#Z4C`kQPHhhwPb3Au@6^V zM&i5K>*+;VHELmZW8@+Xdv2>NZmB+F%$OyM7qfjrSx^~pynqIomzPT(|E8i64TjTC zJ8j;Ah4bdk!=#9LB*KSV8d!FA4sZF~cP{L3*Ijp?Fk%Geg!G7t%8G{i2E3UZee^N8 zdAaa*%rVC(XOITscGO3ww~ajE{`yTnJC?o`Y1m}+;Qr#j z6R^#X!aTnU|8l6JP$ft8?9p+^z@tLvh7vIq3>`iQEY zi?`xgbAFxi{amkgFN3O!`$50{cFu{z2e-}70VXBcYmKY4&*+jYxD0KIoY307LjY8} zqWCRRk`+8f^6#QeA=)QBP?hfka6k{f*}-V`nY!_z(A5xg1+7?NQD z&S#NCQaZM89~EV-ueD+Dju9^^{w@k6*ZY`st@p z;`0e$`T=ibl)M5jFdD;;J@yzv^OqP|fJD=c*Do^aG5FIx94S(>+`)(f+8;l>sUGBZ zpMU=O05EMJg@!~y{JG^70ZEE(3%?L=z4exVk;y0m=aY?=Qy%?E2T2jBLd!>7Ui!Ol z=H&8fjPwIimt2~OhEzcia@s3d-}=+l0D?zk*daS$IKJZ-L4i|JBrh=Nk#TS_X3Q8g zi2%SJAs}WlA_}t50#QB!qerD>(a)o_#HJ!LAfTG())schnG*ZU5S{^J8jlVd4=t31 z6loGop$(@uR{~U})TX`xP|M7CabU=Tg&8<=U|I_iiL(}KiV8y+6K@79mRhv@yu3V8 zu&}|n2jd&9g{Ypj=hNR*t80oxINe_YQiG2__T(93x}7q*kEfw3!Wd~u$Yg!9qqN@c zv>Q$M!Dl*RH$}L)_tDa-Hh*lo3n5gtCC4qTy^1v7r;`p>X8OON8VUe#0TrS z7q58ty_xvl{Li#+&K^JZ!5fDS?l-!w*14m!vZlVVrmg|&r1YeiK83Bu433#H>z6?% ze>?TVN7-O~Oo#xIGI`Q$vRiJ@35p7`H{L%`F`W$w<``$V;3V7o!S$|BUlY zT@WuH8gWm`?2*xfkp!KI5CWc0007NuY(bb5gnVTLq3{DID4oy<@r!XJyJ)fohZFeW zGenBugc&lzPY@D^>Qz_)eW)ZE#&d*90JSpeR8~h=H}984`l`S%80;5V0O+d(#vruY z_;?!f{chE^k}tpb z>R%ter&k>N`T_Md4J}&2{2qgZmK%EC5Jk7zHPqJEmL!2$+VM zM*@N(a0ZzX97oU0&oJx2qh)@6zBZTwrsX=Ah+y$pT9~_^;avBBp4vL2As)*=kK z`(;u}M8Oji5{3*OGHB3X3?~}wHWW?>O<7Ce0onTn(w7}WKd-b5T>OR0h#`XpGcn?u zg&qi_LaS97Q&2Hf?moE?vcb@=cOU+wQBn*dK+Di{AP z{ILwi+(Wb~%rIyh+P4$znjFXlS2UQeojUPXJ7$dC;Q)^*!eouK#zsd2Dx6EB5~91a zD{~MP1v4CCfO&NPegpdVYp~g1jqFxsEa~MFGCHCfb+GYK?%RvAsy+B*;-A;Vl_MOJ zi;lrD33++Tu1jK4!l)4^3>h*QKhetPnM)0$yuXPC~BZA>eXQgN~lHy`sd8dG`uUQs-!Xv=6MU2p@61o zY2%EZxa8s$^`s_T^bM+#mVYQ%udi=l#w=|KX5fvsy}L~sjacJix69wr{d!M+^pys? zli9dA0@M45CBLr{1$4W-obP`4)vGzhx1ejyx=l8l+HL`fzKO~s=TBCz-G~bvB*7*V z19ZDKc@&m1dIOcg9}iM7yHn*|pkIL$u>ArDLJ%~qb;}I4Dd7@xd4{`KU#rpp zIv2KYnUT)rU+zZthKi88%e0(!ZSsK(W$Xp)j}MGpe9n*tUsAkI4fQ(w z;gN5p44C_6iO~`{uqVwOL0kp^JbA%M*l*s01Q7YlsjPsgR3&&nTdKSxT|*A%FeVa4YyZ$g4+($| zHoy=gmehiTEIt6udOU#aBH=U7Jd>FZ7Oy;tG&H(WSf)n!b9?sLXD_(m0%~90>Kg#0 zrO5m;S-tVb8__=dW0Q=Mj`WZ=NJ4CfamSXpBfgkz^2x&3YxWYF3s%BQRnYw&_qPgHQvl zTeptOX)vVt?YH0Ll^hSnULL~>R$)@hK6Q<_s4udkuohR1k{5FgPQGGZVNj=D8>SWmL9gZd*iS zPRrE1Rv9@tnaL?Fk`s-m3{Pbh=4f<9nd7WR6t8Zx#bm=_w5`GAG&$^zwnpyfbK$+t zqg@ z!D4YcY%`|McyiV1nIB&r9c8ia*cNHF)Krvq>e%kStB-r~?HT7^UiA7i|HP9P;7tjE zCVo&~T#@o0`%7^c8PEt{bkRk)OA_LKX{+t3#Ba{y-J6l*m&73*& z#~*)WGQi$LQ=cAGQhZi0*W)ZT`;xnIQ(TrfN!(@fP;(;+pHqYTOB+{a-!CKkiX;av#_rRg2oO;@W z4^A#E*|BZQ)@{Yb7}bJ`p@+RSNMIHO743AYKNX0=a$a8EJMX@WS*uqIu=`^JFs#BJ z00Cv9B@P}unAtYR9w{}-cVv5*hAqsR%{l!eM*g$zv)f~8sv|6-gXR)Kw@0a)v1>*R zq?FFeeFIu%_2*Sg!xP1DsT&BDd+0`PBQzMJ6Sgc|Y`F8m)B*iey(#lprP6GwZRpcQ zZmOhSH^+S1<*iceD5F2GQca)1I}>Gf3?UZT9EHN8vG$%6_!E_kmZ(L%Z+Ab*_g<5{ z1|yRIRSIuV=-^Ga8rNq5jKBwv$+w0<5_!}^%3DbhHsWGp_|tNcs95p_EiqsO4uMsQ z3WFimD=v{$Q>7LpAeLPCa!Ay3tB~y};2xMLs}-wn$*BFJ90Q5hjkZo4+Ux&j#4EY| zv^QD>Rf!P1j3P3xyo77+T~XJsppWl1-YWOY9nK=E{y~5NIP&rXHAV?Kd$*457cX6> zEX-B&cK$qX>835kx!EmIF{7muZsiwvd`jRBbmy+BI5%QF-)M{s5aQQSGS}3cANFfQm^?Oe7h>jD}{FF!nS6U(Z=e8 za=P7{i%S$oSqU9y!yOc;&^EOya5rrMp9_OBVAl)l8LB0Q9nksm_ z-6@34u%_@q((8#@_uk7;yEZvdk=ELJr{d4!D&JYXaLKa41CRDCnu{-p>33YGuivDq znlY6%oZH#8vr_sH;7^IvjGv7hicy!sqR!C69HzLCUcP)eC;cJ8Bc%1Tq;`A~^#B3ml1u*z43rDA z8Z>T~U3Qr^#bQ2yxi^n`V2P7R7Suo(1#|Z@=f%QQzSq!5-TeWHx?a(I|kNA#Yn#wVw zY15{OdX7YY>Lfy)U-aodj5YNrNWi~j$r8cIZ&Sbl)4@QGL+Q+PRPwT7r&qEkEeItS zU8S= z#AKN2#yVblqEEvB05FaS-~a@fQ=EfrzyUc4m?$!oSNeEB;6F>ER3Ac?>PDF8gJ|sp zYMD!V&4YgrWJduo8*!3g3gcf)V-9-cUx< zRM-q-C}V03Azldvf%%^iwG`)Y{~|ghwrtso?NuwYTc5Ul%PNbd)%>3}9e=`gH{Ep8 zw?9o|0ZqkKmhZ%E3e}C*i&tKL?fqBJON@!Dw>3IkX(i>RZQCj;E6eGxT!X}Dqh}ys6M`IHE;Q5xoHbE{d?_$SIF z5edlXq(>D>9LxmxVd#7Bz4w?%XlL;ydq94m$VnXnA0q}dzOx*chaWzj!de>}8B64VR@xH?f#%*$%lmZ%; z&^QeD9N}KL zJs*2g^tkldwYWsQEbj)^UioC#@M{3lmb_pA^z0h^z7a(V)zm&ZaWy&7bGmPiJx_aJ z6r_;$X4{kO1>5_eRHITX^@4P9Pwa&{@_r~&a0%=!N&x1S-qX8?LNKVI13(<&B>Ijo zMv?r{{knZTby}TGbuJXAcvXDiwf7&m^Y5&|WPID5&AX5z{^o~Y{P5$?lW)5^FE^V> zFY|m~ya)Phjf||fyLQ%9A{vX?F#G5ED4>~;d5z+CQ(?u)(lbJ-N*OX#1@O;mRmvc^ zZQm}hTj#=s%hsStN3a}h`0$he^zGG^0IBtlUk!^U>#A(29=?SiyyU+cw#qJ17P8-oA!!_x3p`rq$;T#@V1y zQ+b-CyK|>@K!S=v6_Jw8g^;u6E>tB`t=2nOD;_=Fx+t7FiShJb2wu)%Zf~IJA_Sh< zNX9e5U^^fZDUS3h)FpX&d7(E*Aj$so&p%@;fFxl?eo2%FZ9rg1fdq*J zp{W0rjOc%lI!ZZNlCtXo{NvKP@O6O2sQ=sjra+NigCPaX=jZ1G4`VREF?r0^U_fJA zP(hAFD|`i&bd&Q>F8mioNHN&}Nv_`zlZb&TfX*{8fxQjA;44rY1WFSi13s zPd1roa^MssWYN%uBm0$rRM46=tA`!aGcMX{Xtb16#7(;Letb7^VUm`;RjVB0&pr2s zvh@7F>-zTSw0Wz0_MEjp{`~Xj)8=>U)``B)UM4C+dVO4^Cnq~SH>YJrMoMmG3ilMg z_0HF=+Y~PNZC+Ax3k|2LsDwcvF)3=s zw~Nav>e;ayHMSpvHoKKHLU#M`6m-@7FJ61$@UCt1Y#!4O3)g)A({DI}K>G|Qv{lgZ zt8t}8ggVGcY2U7Gy)m=G=INH5@_SLkyalU2`uIO+pV5Z%7MA#({o_whJ^2LWZoTEy z@nbqh7&_M1bA5$7Hp;}s(G?ZdnMqkD6W(b`tY%YWbkxqBrKzdT>#iMj)1%)$_QYE^ z-*_>cFgj@r5E1#*)z!wvDl;bk7Ov-980MEiI=>1Py+O?z_vsW`E?|6KsVoN_gaL*H zu4R_-b~iI#Ss^rxpxL&RIZO}+$VC7H6BXR8ptmIgcVv+wAP^qq*Pm;^B=Cyyil$3o z#K27@ewj$5Ir#|OABj&2v>*-IDO0B4zl&Wr0C;Q`KNN~D<30D>^Wuvy!VDUDvL665 zKD-5a3@f062q*k1EP-ZAfIcsIyknFaYPA#%7pVYgql1Quw2=4OQ^yyW5 zK1iTK@JZA^@)lP0DH8YQ3ziWu!HnY(90|#(%;2>Asf3<_?t*f7I8aqEDE92m7Kl7S8yGbHTqluKx(cV^&6E+(T3%`)hj|9SRkpK-fkZuFQp*4k~8uI+N(L`!^( z@`|NgWCW6pSW_;xw+Y`^jvM-w*BpoKL26vV${F4 zPk!njH~g)0$AUm(k3Lf~;{E$}|JP?H+c=w~J6UL9h>{_tEFtOiPuKs1g z5}2h;dF{4MZSt}KkU8AQz`)v_=cU0UQ1=+H_ z1VJ_^jsDkjy5iE%qC zYZ*S}lcYvkb7L2;0vd7}WRGrzaWPTVwU}Nic~J@Mo|;XLc5QRL$PQP*6$8x-)EykM zL_}wS=LdWyfPg7D>CIgdcuQ);P;SG94Iq&n1vGIVc*!WuiB~Yd zxp;zxP$Im7F@*1vE|1`+nm9C#W>ZiF1UuY`FbRj~ky*1b1%f4bh94igB3pPSg4&(n z10atA&{UC8DA0;fZ{cMEc&W93cmgIuI!Ge~8)YG5Q`ChbMZFGK}-_%{>@(1mgKWi?qNObN4oT+^vT7qrh(9SD;OWk`JDiKiZT@$WxQzbC(S z`r?)K?|<~mcRwuQJj&gZpU%(cieokRv)gUhc$Sw};B1GZ80=4cFl7!6hIBb`--;c1|AfLQZ2q9=S5}=U;!z$!?XOm&XMIpM3RNrz?(6O^@WH^;cidIOm-4 zqI#~ctGVIEn_qeJmG_<=_tfNvUFKH5EiC%shaZcJch=Q8indfJ0Y*BH>D7Mdv4uSf z^IXnyTo=Z~CNK_Vw5YxCjLuhFbKiOAjA+@iwO$nDVsJytIcxE{31^NTKjwtEIHkUa zH;vDEzb&ZPRnx6g`_`>mOHGl52mtb{Al1TU_s*O*(eu;1g{jF2h3(t(=u>bF^T9-f z!*||!M-ksw?;(8|_3P@@tCoWX9-JS{}NziAq0dAoEi|+FOhMJF`HyTa!71Eo8r@txNm}F#PAtQG2X%30i*Io z?f0yZgPubhN(VhSVfVc@jCR+RY+WDQGWv$=I}RIVLi@}$Sb;W~{fLJXnkfM@zB*!XJ4Uu3yCcm+8U}Ad z0!@rFO+X*oWHk<*J8txXr7Mefl%tSf#>13<$%>8F-28CAUR~O?$&QVUuCA$DyJ6F! zCCj<}kJ*;lWUi`heCdsko_XXB)dA_-D(wDG9-8}$nRCa&c7u=WJNuVKXb^d1xcK0c zuh*>GJmk0mnHj0f$?EDGmap3I?`hxF*&2+D2x`9~A}c+;NB1s}L&eBM@Yth!ANR|G zIlnGNi%nTrHU74A%~dx&a7_PRdD*QPF*a@4Jm@x3{!+-26R7qKwq-^ z4}ji*Yd>XECEqh8ZEnGvfZs=$%qh_kckSHa)RTt%XT~qw7te|uCE2R=+pfCp{(=2^ zx6Nw}%$98>bLTHAudD_-!tFG2i;2bBr*py3fyd~JMvvw(JuQ{WT~M`JDYH>kD~o(n zUQR}PuUc8SqHzG3nUUVHecpm)Ynco)CNq%Zf3XMF$R^Ax%~>M>B!H0*%`2g;tY=DJi56EM!T z5F8gpUnUqd7!eUARp6u5{Q+eu8o0BdeZg&9bY5xQtx;pgxnKO`K6jzm?eSNn`{D~HY5kYH%S7#SxUT&ayDsa%vYz(|p$Mo1?@p!V6K z0|0GHC`8c;p*loODRl%|>9hP2=$qi=EoRX?qLxB~!zmCv5i!zYiI2LHbO-?!3b`;0 z5?~QgUA2pQCMqjyrq7sr?zyTzB1Rc<`K-+OY4(jbUjN(o4`-(*EL>9mmDQ3z4l|u}(n+M3mhOndpth2@!cFTVM<4?{w zeaz{jPxSAMKtlA5H{N*cxfcc;b<~7&&mMC0(OZj)Kl#_cIOp`>-J?%GvETRK{A8$e zbji({pXDf8GdC^O`Q<0izgFov_w4f?e&h9=q~wWbjUREsa8%4V5&vxJr$dJgr(NN| z3XkwGwr2H;VaJb-%gDIps!6i{tuJNe&p2~*p`)S1jTsla!nMVN`gJ~MeDB8|LnHbGJP=@jKE*ip_17~e zzdHHb4{n<|`#%?7KL3teF6rE<1JgeM2$#shOr}hbm_#A>x8&?k+9&r?Y4g`o&QBnhdymP4!HjENirKhw4FtYApKq9UViuf zP`~&{+57AlqwT>n$;=PAkD3V5fPaQ@KiH5GV1w*{Qmw>4_}~N1`fzX!mp-JExL+*N z9T)@g^Y+tEKM8w+(?74slV2&mzYxGi00{x#acrcqrN^f*L}vUc22Tkqpo7aN{5C9s zBTE8IUiMD>kBpfNqZok!>#(vT$US)UW$?t`XyJhPzdc^FWL(9(88N@Voy12os*5oq z(xrSXo6sdFg$NgJVRzuPxvML8m2E3eZD&7qLe{BcQ#*Dx;@OHDw``_>_gDdsDQ3GugFbJ3j- zK3839H?hyd5d@>F-sYGyf61JAi*YT-Vw|ilZh_(EC-Qh4F;Rw#Cyr%}j^4%FJk*a& zi}pL|RM(e-)Z_IK!3Kx73yb%aizkd*w`P5Dd4<}mLW%13ELgI3;gZ!#@2N&997{x^ z5i}djtV&_i9AUWdypy?~P-b0X$$Rys6Us`TTV2HIUGB-Gz@EzL`sv^QN(QEjc(HDD zIgB2QGCMap3=y&I^9rxHYjMhm`xU0GmY!X@SS*nuOvyqVNc?UuT)GBG8WIWsY|^`S zD&Uq#d8;t~_kyY*ueO3!1nL8PZpa#yM^+d5QXdSDs`33HK_kRs27*#Ff67>2k;saR zGWx&uPhkZDBwhv3^7y|Mq9~y8y^E?v;{ly4CPi4BHKl_F6~G$2KW6_F*pT%es#q?% zI7~|;f4V_Z5Hc+p&xstx#qOK9#-x8P3ft8B&>xr-S|He{DXb|mN+|N*wE)i8c2`kgj!_CkRfm)+9*A@5^qY*dTjo=w2DJzjE|aw zXdnQ{d_7g z)II<}Qtv#9%&8{i&!#Mf#wodZ!;U@f^pj7_%FLp=0hu`Q{NsA2O`I^SXmjxwAH6*5 zr|%z~e4o{-j(RAfUc&U>?c2Aa^L_96Ne;K^%nPo16uYyo^kD>g@gEIt&*c|g2m{hu&==!v4@Eg&_Lm+TS6p0u z&DGZqA2#gYpM84r=+n0C{LfKChYmWb$3LHZdf~izpH2Pz(c6ZfIHaS^7Ww{^Wfxq5 zhWr71H&G6KNJ>hrx=XwK!N>N+8P^3P+Fd&F=nb1o zX3d{-?aeNzV-H|l~Zmx<=9_-c=@AuYcn$2S)!BAAAdH+;NaY_Vf{1DJTv8) ziyQ2Yk7s-`XAV#dvMQAi*BuZVHfs8P&eB(CA)kw!wN#uXTeK5qq#RwvB~ z1BKULe;pWtOhq(2S_DV}I0;%J@WjERPn5UP%n${G%;3R;*^*@MYQNuE@IVExWur%r zMsrR3B#S?C`huRW1^_=~=ao3B_C?s+L0@VNBVLT!tyCDKIRnaxYk=(OoH#i#&4x_ z_gw$T({B`QDKQ!vJ#Hs!KF%cotp;S3(VGu@QnNWdJ@Lk?FD@)7kol!T3k@`)3b|Kp zDp`CeX^%`60b}e*wC=-eUi zrfV)uOHCzXz!AP%mqM<3^=8Ah5hR^`dMjIUeUOa3dUUcxMmTKvvVbd2rZjf%+EKs) zV%B3gtZ`|*%)c?VVqr-@4ManND2suECynR`2ahLo43J~J!9{kMu8>R0qGdWOn-yj0h#Uw9L!CxQ87Xp)9zF0}iB@aB zi_(K3=aZLmA#)NTik#6bVAT0XGT_6HJWA8Tu#~Hx@S2KzL`wPw88Bn;L<$RLN(b0W zFTKRVo4Py5)`j#y!Y}6l&|`l0-FN;vXxJ7Q^whYBMVBgVMjBOcp8tYx5f_r7(%IR< zZWOahc74QEH&&(e6p;xqeC&`miKtPeZJ=>R-Hg(i2!Ye(z-UTmS`pPPHBJ>kfMT_Qx zpDLr?^@K#=)UVyvaN&g)o;j*hVTY7OtLF?q{=Kiid8f3z@~+!&%}m)j_Vg2%FIpIt z7&mNS;mhxT{oHdI*I$3V&=PD#MH|jO`<(ml7@418Ei0+}$GKfDy>wFVJ~)jiOihWM z_rolQJ;H(;vWUhyyJ7vJ9TgQdC8ae}znafB#)(HKj~LW*&4%KuE-1Y7p2>IJeMiRv zbq7ZKf1Jd!C#6 z@jIuFRh9$@2RsNwa3V~aYhhuR@4o%!_~9c_s7@H$&EBwqT^nxWF6_{J7i~N{`<2j+_?Lnx5svElfLrTWtOO@W4g5J);4qf=54igyNXt=xO3*0-_4%! z&g~;MuU%VHQ*~Ugyj|6s`}H5!t)S$Qo5wXe>WB7D9X_b{%%98dy!(+eMh=IKAAXp7 z)m4)oy6X6y<)x)ND^5AC?RUQ|zxe7KUU~eXxWvRm*i%G+_+7!sfC&zAprN2ZZn!gwGav1=|E4hQS8p%9SfGy67Tyz6BLv z8uEjW9D*74!7~xY5SG9pk%06c_NDdM=x;n~1C9PwIQ}P+z@87L=%Ha;scAv|_TK;i zKmbWZK~!++Y)r~b7?2s)v#+y!yt|^xRk71qQ(@pm{lcHrN4{kq_!RjDyKvH-O?lf%f$aX&DGV2ir3<5L~mr(G+1(_VRegu$Wl?X|E(g(~=1OBaCQGnMtD`V5I>^-XLsbW@bEi@2y`< zn=y0t+)Z0byyqckmT=&0gi6QijE#%z*|qTOQ%ALFlLwQEyFEeXVc0}Z{>QcdnLhLD zZ)a`TSj^SwO210;X62|Xu8G;(!6OtoK8XWO3c>YXe^Xr-hK8#XL2FE3!tHienIz~h#LTedWRwffRY z0nt&SZk9L;Cup&vn=xa?jW^!Ng=`>)0YRnZZHl6n4!i`g!2_xsR)AW#CGH;Nv8moc7D1~;f>R0QEvS&2KSF6*=bn2mIzBW?s33uXG2~1L z1+yLoX%i?c0gp7Vz4jVcQGtg}K3x4p9;HSQ3ztk{^~?c?AAkI@UAuM|#-bY5>KyYt zR)ITax+LbbsGc=X8a_h@*(Fd}QXSwSFQ{l^T3vvI0Z@#iVFPaiXt(iwPvueza+4~R z3lgw_hZFq}LJf@y5|6PA%V=|k4jqcECGf!bx3RxSZ3ZtU0!KKpaS3>LoIY#akP}WE z*uNXnW5WrllJ~8*-ZHyZ_wRYuvPDab(b@ABExr2ct1~lO(}e>LP*SIh7BAUZUDdvz zo!PacTif)t?N?10KRVLfaCGlBy?XZlebuVXTS{?ImYJ5_qp&@jsVJc5{`%`@pMF|j zAGvMY?~7)Bd(HJHo_69f#p||gSh>1O+q}uQoOSoOwcFl-<){tBX%* z;k2|k`;z+^Miwt#QeU^_vh#Y49XWXWwz3tgmUiphD|vg>YcD?9y~n_Q{rk6qbbR&6P%Dm|)8$JZV?^OB1%`2PEu7EAQ1Ri$-xTc%9;xUBq# zXYaWbpD&f=+b+4_n2*2sEwA5zhHaal`sZ~&&tDs#kVVt#*~N6ikdC{`Y+I{L*Zkv& zsUN?8>KWr{lQcFT;UH%cX|dTkZD!8=rhor|S!tF*12SrBcG_xcQ+YZy_{`Su&p53_OtLx7j zotc_Acj2-co6F`{JA6RbcfXi-*8@*I@#x)Balu_hegbg@3fyRP@7|pOhasIrw7qD(=gpgk z=P1r$2)sWYAi={3L*v1vhU{RG;zNr^f#hHf#i0^u`93hh4~aNk;p|%f{{5Ntp%4QY zx)dLNn5E!@1*iGQS%cT`&@f0u6)v~wiV(E72Om+Nz=OvU#t@dkkstvMFEGQ9{_n#N zOQ6An2h)G(dp@tikADgY$ahG_EA@rgGj5?hQLk9m?o$jFAtY#N9%ba`HBsdA;_}*a zMkrfGLbyHbBe;WnP?fRoH-*Yl^>t(fukLU!E3o=U^QOGzMl^1i>-g+iTce8;dP+I! z4YbPmXrrzBC9y|cT>swwR1sS ztnURcl5yp#b)}^hCX3o7!s;kDyJcQpj)qfTzEx}1m6Vn%=gXc56q;>vTj%5|cfC@T zTBM=DwsQ5l)oY82i%V+j>KOc^qN7t%lH2CC?9{QKWtMVFN8)bb>j~&I#Y{|>E?>Q7 z?Z$1}OKaN_1P2}mr`lM>?~5m544uEP`&X82`3fR|)c2Hf|J(hzbqZ>9&*iVmK- z5ZbzRE6Tg_@^Ubf(k!&}G8Ps0-+%w@x8E*{jnK1m{}po{r0p{uf(=qW{`g~*GR?&) z@SOie@dt189X&tDjg+{!IIa`q{w3lv*V3q93XK*OQyt00TLLl>vBICAzXtG6DMeXxTdXORutE?w+Ma{;82v*RB{_9f(WQ1p0FOIx1-V_5*DTN-V$c+^> z>+KC2FrD*l7<%C5#t{fbOHED1iwj1kJ~bi&!5kG4p#c=3kp&*$iU2wJ^{1<3?G5CT zj0lZY`sB%zsd|4=OA3BJFaSg;>9g7=F908Y_~H2RO3~vlB}v35167IHtbfOZL)h_h z?O}g~b`Dpd_2>LxQos+DgTe6M$}9DV7*Y7*9feH-j$)uo5^b+=g}4wbwS%!as^?z4 zdSP*l>X|L8yu3V)O=!$heSF#ZC4fO9AQ$-~d1)I8A$18-Zve9do-|bSbecVyXjD00 zeE#{W)vMX1gE7G`Yy&K4@Wg`QAx-GA%Pz~$&zJiBlh%kPfx{G$_P=@a#vVO-eemY> zEwej}yY#VlUVfoppWYZU_aAW74HxyuZkbeBW2>x*S@g&4YCbcSf|I5YODh%`I&wK6O6S$YKqO>%lbt_j~ z-uNqCTD$bOlTJQmK;N8`2DT|$y>|7wP3Aae7>%v7JCs&MzV_z#C1u;rKeJDMcCsbL z)w5&!?9BMh>$ewe+EVR|h;rBV?b+j-Iolq3d3r&o*e)GfCPi90x5@6;w=g*=a?7S2 zB_(CaX^E-nt+uS+nANu9($#g3Kl|D9&p&nY$*0f#;)?VXW38uP@)MuO#nHkd`G)0(ds%m2s(zqq$_UoR! z<@U3(vtm8YYFmTdR^RA!*C!|D{d?AyCd2Dn+x7(4Eo>J>cnf&fA^S}AL zbJy-o)#-sXJi*2ZhKC=1nAr$hMCgd|NXGsU-?)IZWc20}!v{iSsP$`&2Rb-lJf3mJ z8GJ6;refntd#jJ|nMS3{hAzg%q$2@{>H&x|!Z0ZD@kKQZSJHa*Fp|O`!%jRKU>bD| zMp77LI3vRKhCFJod?KL2CkgIZ@J{28N7!RV$Gnc&oj)f&*qZgYcNlF}wlHv50!Nwz z=ooZ1CIQSmI9tIZ95PtYjhVkP7vYh{?9e+(h?qwr7 zs#lLL{OKXJILL|fMUaS=E)hWjt9(lO^z6!?4}d&+%YsRDfM$h;y3_8nmAkVxRUBSJ zu4|VL{v=5EPYjaM#fRh`HL*Sm+`(*27@pkM6f}4fCNf9^zTq-F3o9o++1Kb zCF(XA5FpW1vk_qe7KB7|UuiX>7mkKRM2)Q(Ci!#b%)yQF|NY;BB3Sh3qrP=&w5@uVz0qFdSl792>W80A$w@O;)w}8(WmV->ZnM>s7-z8KOTm8n zsi)j}?|sGV3c7Sok4%W&MkgSC$+-uw#qXEo*lc7q8pa zp?w>3O6p6mf6CVEtFONG!~N$-jLkt&Sz&0@0W9IpSCUHv7(9K ztFY4@`@@2j4?RESf-(ID59qO>xPI}{MVFp2 zCN18T9FC2#{h4{B05*fYutl;Sa7->j)9%N*otuhFp>&Iqa-jbpRBThj; z#R$OlwijG*0iHl`%+2^9A2K~KiA;MKOc=)=eDFcxK@T7)c*X!mN~C`)2-yLk&?b@{%5MX)W&xsykbK_wJbaN#ZhCf0jKu4m3 zG3Ov0p)7{kI#3Bne(+?327-a$$gg5}>lQbS+Nb z)Z*IPKRzOCXup3v147Z`!rTA{+0qF2imNGp@T#obFdIEq<*&EdnyjYK?l&Dlu|V6? zs}wjXgr+jeTPk{YT`N$4y$xc|D$9R{CusNP+Kt`sRKp&sK9DR7eOS`iAP2zSxBIX` zF*L2QPu@L5R7shNX|(nrQ8wvPAW{OBMKEX?<jZhQtpl?#nK6$mr5Q!?(d-@|; zR8jY!P>(pl(>+=4^ylkG4(2!~9gF*8JU1qE3Egi_vS zu_J`gZnFkJ>k*`>1VIaLxcvnn#Oy+pGwG}rSXXFOBP4i>$qWX1xG6&d0vv?8&nvA& zQ>RYF7pg2-^+<@rFbf_ZhJ|_7V+a`?G(paOvUb7{Y0a87tON0TD0)3$P=jJU#Fb*K z5>Y*)1Lc?X7-&HPwu7%M4%?yx1gDRPcmz45eTv{Cir|l601pzz5R!x8ge6Os;4zlp z#fukXA%Ttz{TJn>IEazeFXg3DXpm^uuzSL+NmT7p?Z$ptexp0ZVZAemfE$=}_XiQ1D?H zjmi=&5>1OD07e!hgAXE#iQ*4wW0*oyOXVi>U&J z5rEO55EwTY<)mI1@n`_3nfRq^FhBvuE1#gR3pd;Rd=mA0E#A)}Qz5&<$scE-P`Kgb ziu($sIiZrKMd71{BM4}7Xn}lRuyds8V!2PfLzjx6kq}_-_uqfVnvyFDQHIj?piY3L zKXqjta^__)Irr?d($f+r-}m6MWvhn{Ra-=;$%YQ>URGYQY2&uE%yyfK%KP^pMmjYc zWT>P!0l>`x%a$$~IqIZ&3)a=v)L(h!-*DW|rs=KMUUK7=W3cnZHXf^l_{hkrT~&-H z+<~%U&DPr5VyC?^Ej6vmZoTW_PoBK<%;dz_^77Km*hD;0&;}x-3^sec+twHr6B`{9 zzh!5Y+2rJ+>?^Lix_i%FV@^A*XU{wowbhl?(FyU!=(v>|>wo(CiSs5*++19;ZL6!H zdS_y4f+Z&7lE1%o=T)Ny_sZJ1ZEIyMEzuJZotlvpTfSjSWyLO=-LSfN*UKOM`t2{v zF1zHUfddC8#d@rk_+OUNByDZm=5jT{-M2mDGTEY%^NN02$&OljhH70w#3Hpu+oP3Y z?N0+T_p1hUZ=Kz;#ZLSwnG$Mk#%;x=^b}$5(EiF-1DtFT5r|NB zng_w35Zsc;K{QUYF@{S=*1(V(*hpkn!)7zzLE0EuK-HAY0U+?jzvrHNa8}7#G)`;) z3=bMwB0>lyH6NYcy?c{I&z_7G%*25788-j}6<G5lExP=zqM0U>D za>gp$pBaF8ivrq*mWJfOB4GvefyphL>xh$pzH=UN%>5-9I)p=2h^Uyp1)Ra{n=Z4w zfPjC=dOFmF)>l?j@k33s8Tf=HJ!8$td!y#Z%kHYKQrg@zO+3qV|FR%M!*e{o!i+$oDLJAK$PC{a1 zA4=Z2oeqO~sZ{FwD~kg21|Mue9-9jv5LL5~04#j!QAwgcC3rk^ib~@jg4}|WJ0x%E zZp_G0KM|4mAwe4u35q-)hxh@(f+xaci1h*(z!+K*g5YE^6MDt@<3S_rpQuj>$S|uK z(uFieKm@!Tk_)X6-dfSgqIcshD<#%usBY20X{9D3>nJb~^n?yLeqcoiogAFQs+5<@yv+P*IRw_*-VKh?0MKAq*b`7bisq3-_@rGSZ30Vf4UZ=6fFuBu zV&;2;mdihaD4N0mFp`8xwv=R7$v=BIMK1wlC1S?`3yPR2Q>LJhqFNa!B%P{9_g7L{ zT2@+m=Gd`kjT^@{L}peNA2#v=MlVBEEdvWx19CDl`0J?<=aqWr{qZg#)Go6MlH!fZ z57`LgpSel{;aBYb{Vep^|1~V+#HfU3Z-*+IS0c9kprl+PPcnns1T^(b8O?AE594SK+ z+Y)(g+VG7_h_#p_B0VlkL!C1%EroUnGhB9(5Em62)gnGI*5rPs_<^$z_@5$b@wpwy|*wxAcYJW4H)S8mCf0e*O5MKKYTB=$NR)NGpEl3{IE1 z#%ZglZZJ5i8|vs!9&2PYExbp*#~Ky6a@+P6$r+^;H7zXGzWtBw)oX^M{#VRvP?_2s zjZRmc-QhZU)QRVvckbC|pF<5|BkVRdc=v9c5vB;22gPdy%FSi#7AGZH5WY1o@8?Au zGBR7UmjiVXqcC|$ei4Y^Vc3^Wr*&$d4k)5yy9htaWRcH=o(FiNot$#YDcBj1m$?7% zqK79=76Nnu=A(%_`(eX|F-(!DF$Nd_paO=?a#YEBB)kHcEZis{kovb$1pNH4k4^&% zqI#BGzyl+kb2x(rKru;#iU3H2O*J-jnWgY3B=kfNEbcoH9~hQ!uCN5c5(rBmEP=2D z4&le?e^Z!hf#I>H<)xnULhbwyT}%I!=&q`BurM-v7d_t7pHlMO>OpKEoaX4Loe}w# zf>9~mPK}I=1_K%XH{}y9RagRlhycT361%68uqVU}W6yy3Rj)kQ5DbKp2>WV!&6;O7tl& zkCYcnNkTw8NEOC-rDY5V79{Z?8=I86xzr_BaFGV#Ih0rXRiGePg2n@J7S&C)E1}q2 zX;VxsOF*6>DxwJZRuc701_1*PkU;?c=U*XeB!B@s3K~>|=sqwW7ge%U1ocZmH+1~4 zp%+|m;m~2j#7v$pz?MUe(mYqAAXb7>Tc1jz-icFS$H&x*w2vX8A2^IjnnLNt zNEU4WA!@CxjE{>=L=PPokM?K6dFKrsGGyA<#{vtG7r z8Mct9qQofPi`9?nUpPT31#!u?&9~pqEy(pmm<$azjM=FSi$zU|Lk;pB!4CSi+iq*u zzJtrT8HX*~m(RNKriryRRa{>m8)@Z;gwtqde}OGMyxw8HUQ<`=aeJ%@2`+=DLx;}B zs1^$rZyR)M-w!^UZH>;n;f5Q>ob;K&YPMB7xlY63s;sX!8zZbzmE7RX@D&+lii$Qi z)H}J%8&vhq-6xQ+osN%j{+?|gmBt+)R?cg_`8J%eX?l!ljFa?!;XUpnH19N38P#Mxb@ zjYT_-J5HU+2r8Yu4;{2R+HdfuWj{17F!D_S^9d4JyZK$rTFYMH1=FFMM1aHgEs^1Jo zY<}I?*3d~2JI5N<&igenKEWKB_~X0{>o--*nDKw~2xtjoA(kRI7@ZdeLPsc_{h4Q; zq34P^SdX7-WwgP|JQrhtmU!s16yO=Y7zZ#pN4t$3G$kcb8(ttJUvtcy*>PbTLlcFR zf?X2=VEQb=23y*+YF_R4yQvii&cP2A_OKap;Z3Lm08V~6F-A)ZE1)%rg(G1Jge4G` zKv)7tkOX|bpz`TDg7`ZkSmAW1+Y%j@eB7mu&L`B)ebcpWW}L}pcVjUp{s-Zb3kUh^ zJ0mUTN>8decSLfpi81kB+vl+M`G}~*FcW`P3CN%n`Xb~Y%NhC_;2;TU*(u;*C3^6p z(_@h3lYS9JK_~)2z7*}%l3w?_}r8D01Z#N;5 zMU(73(*%5dLp^4I=x$~uKG%PTRvMvs<|n1KCktJbYAy70pO z{rce>flJSD$AO{;trG>IjHuVKedcKYWtU(6_+yWa961uJd`idLfaLzNiBjp*4tgVS2m6q)=85&XM zp$x^cJvup7U2U%{rW0wKf>CveIrQ{Qa86%PZoNQm0P+sJy&FvEss* zx3RXNp6iA{U^F^e(gQbMcfnuaA`@0>@bfcUn!gt=?vLxE*yiPf}7E>2#%Nv&Ds14!0rFY%xd0nkce& zJ56ek7H+|ty2WC5*y79_LqQMi!3)aZemO~L?cV$J+d7B&+Zq4YvQ=wps<}fn3k2( zXZUd9dB3O^6PE=SfbRLHAlM>Rbo3|k)4|HaTuMMQ_uZc?)erm80ujq@WP$O=@SnNy z35eV!VQe-VVZ&6>@C1IKZg86X1b#Dp>i@mgKqPyPBeAef=(8i#>lN7AD`_1n3$Dx7 z+1s9uQw*t97=F}xF5^qBM5#1YC%QJBpl?2Z9Q?sc?qUBsq@Aw6e%$T04~@x3U3JGcFT>=uQQ0dM9vn4wRErB!zC zJ>FVCLRy3M`k%dAa}b>kdp-VWXi`pgpV>+hU>)Ri;s;DAQJnmpe)OK5Epz9^#zode z2-O1CCOXbBH6h@)oIv;vZ59ZsOo|9z_813`&imJgs_2qo?ZurYPHkinA^BUnxpSOMcxUGr5mm29 zwdTACk*$>znnV1slZz0KP!5puE3w#CB2Eo+H1~BmTgR0jujM7Jj~zY&D;4qPDpa*tq8otpsg(CY8IHl7vy7U1E@9+;Mqj1CK8Dtn{0iS-D6T&{| zZkYeN&HXd~J2R5}-h;E`TL46xThs{A=-ow&&*qv84V_;w;1l;1?lO<6)kP=+pZv(PQ zKO*U_<{Dvfy6&`<&zCBPIj5KOBBLXPQ-V~64dr531ZR_T^?o;p!ISu8%5UV>ljQpL zqOIxH&nG$kP9!_v?;}~7!7_7<*N$9RI2Z_ecyO{2EoA?v!;Ru99EiMl#>|BiUwbs_=ewGpW`B{ifW^NHlYJ)3Gn7&0DW>@IXb31@) z%lEuf@GKM6G}QV2h4|z#9cSqIi`_2MzsT0mTDx+yhI-6OaM+X$TiXWFTU zB8LoyhDLgv`K#wB)5L`0yPF66vL)PEozdA>uc-~-O;oKGRQ-NiEC)o=71^$)Ki>In zzi(&MW3%GGr)F~Np3}rHU?e8=HbvK`mBRokrlbyjdub59% z@xL|7EV*X<|Nik0G#sE!AgSG!reE7$s5Hg8-9Gv&S0g6wQh~J!0|8jwqlml@Gk!ka zon1Zt7aNV1%a_~Tx=ex#lEXd;;7UiL;gEhKWOX~4z+n_9nVjU*azq11#67~RsjPR1 z8Nh^<`F(vK0eu=Ns7)jyQ9bwlfY$4F(`oz}Q#+~D#P~h2L3ldRQSX~x$erwfb;igq zJd_*j9z}u~^JtAqfof(T<)OhLtL?7(jt;n@SzwJBXm8LLtJOMm#7)=d%U?40?%M5$ z2Zv}&_6UXB*N64NM)ei);Gn&0Z5mT0iBcKLL>t0-61Gg~i71IuFAhhrp%NCBZJ9r1 zs8q=~vLM4B!IczPa#=Y5mCd~2k1WEP6By--2K8wc!LAO;V`g(dNJG(9I^RxcIkVJ( zBApN;a_Im9UTypE?*iHGB`kwWMr<5MIGOlW9&DI}7cIy}|B79TqR-Df>bs}w9r34hnPai~hWxi!!b? zElK+US(!T;y4SO3PT3wgvaom7_`_-n^*)Ls*xN;wt7O5RS|#PcS8aC#2(1_$$gW@^0kRPP5xFI3 zq$lxUWu}Bq-+Zz3emim&6;pxK{F~p-PznUvy5Em1Q3l-xGh{enwGSr6S>@jZiQ{{J z+8A;ef>B1TK}U_p$U*JMVVPLmdnM2|jkef+Qvo^sNGdjx|M!Sp76RLI%ltHpl3^=; zGMv-{(0nLCF$QBI z^c5ONMCpQ*tOI(?@VU{GQc?nUf&>6@49R-E1nR7JFnYnd`hO{-2sHa4YDZ%ZnaD#g zav=#Qiig0^P|IJK>#eXqAZghC_w zDNu=Hf;8?V&Fz-V?3XPUETz4CZ@@oH>WjMYLG=mBW_n1Mknw(?8nXbgEL%PhW!yr2 zn6uzKKxjKzH4K^*$z>s6V$1~)96eAo?b(?;Wva*Wygen#PL7W4QcH?PlFgenm4PJV z!eKqIdoQkHn;(tSeXH~%N4FGPWzFPh#Hcp2^u5cnJNoQ zRvakM=uaHMBfGcjz@=tG1a}tO=smF44oZ^l!Vd3#zA&i*}VOaE52ng_`Fy;!}VfCh7K45)ekEZ zTow{Yn-2p8qyU(1AY4G$n2hV3GXF6S{!ht8{4gc36n{P-3>p!SS4m5O23x3{!&0Uw znVWgx_!vDYDM>*TX#!xJc=&wY7S-d%_bY|jMF!e{%vlEHe?B*F`%n`P0(yChd_=^9 zsQ7Qn|9;|+dIvQ8l2gza;c=2nY1Z|Y6pY9Sr4bJFsnrw69K^=Nb3U>2Ct-_E1ixLD z!c+)-$n$GhDL&;OjMYUKeJxwu>1G#W%((Cfj1D}nIkw&)9yoc(OHW^G!=Y%JR>?>c z`f0on>p*0uMth5({XFp!B@>Pix(YoO{fv|>VY`%Gu&`v7wW+^s_J|YhG)I2Bhq;5u ztIg>O2<@`{2kTHskMKn{~JyV8^%MZw~a1KvGw+iDp00my1Y-* zS<7oe`j^h#!@Ml!0YM+o>hzSK3Ee;e+SuDoKjOJWlk4^DXc3b&SL*ez75a`FL09jr z(V!w)m0f3xIJc}qqA(uboW$?1IDEbh=dCrIlv%SsMmHYuks6S!c~lrTSB0!KA8)FX2q8XjZ-!sFYg%A740+QADByTKfr$?-{H#DFgB)peB3 z7VwOH;)$FxD^g(MUf|FXfUS+JOTdEE_`F|`^n*UJ$lq-b15@aw1+y$kjCAU%-St`~ z>V(QcofI1SRqnY56j98^sE>i=HeVKHC*d>}+b^RfM*P(f+9!93AVWP*_1_0!1jL#s zC=E|=r{juCv9}wQ*1xCre{KG5Zg?mfuvGKaI^z{yM>Son4$goS|F6rf&i96SnfGZ) zdVpOJ_~(I~&eolBdA)-JNuH@Zt-?Bls{bjFJLrs_=A?+*3$CK9AA8(x0+uLzSy>s- zu$DGJiy$E}^w!$Y&{5igg+rsQPX>(vlbn=te2mGD81f6y(hR8NF}Uln-R3>}83EdX z3bmc(x)nZ263+)i#aTSjZ2^)OK_nDnL_pV@j*S;^@k81qwwg9Ub;XU5WFe>>R+LML zh52i`$Q0>j?ZE%GY+!t34MrVu>UySE&2)ZZY5rllq`~e8J(W*^RQ%h=Kcri`DPZ>3 zX8^QCq<4RI->+jYj{B@%*q9c{N|<&=IidU5=jZ)4VR?{I$C`+t(0jfG#Z6nsy**lI zXLkJ|AptZPqeSh~=f?vAI%Y@HIeh!0B~N%Oh_YE2uB&?25Zx39_T~0olTgIhQ(0V| zF5=T-kynd6oB2<^%^r<vY4sU*xF>;s#Qo-P5z)8y{Q+_(F)aXlr zm&$C6ZL|z_jsmF5Fyuadp%=h6>$n-XHkSxxOq9So>9$W4s>jj*42AY2?fkc?r5smX zPK_jRu59YxHTh_6F> zUu*_D!Wzk`U7>R}tBR^BU@3E;EGRv)ofO=ZPqi$CpMK;`)2S4&7pJMXKM~A(iC1B5 zo7aI)!CW%q;==0n8YTLVyx}rQUV$c*mlx5|&=TTrZg%^>zn;4TIsFY3+e#70J8M9~ z0agfz6_!4z8p?#}Yi61?OlQ0iy1&nRbn2nel?0Bu$s(9HQ3OkufRlQq-4rpG0!JuK zFbCc#I2NFLbt4q%+xdz+yIvuCJUMj*5;HxdPF zS`VE?#!&Zh!J%QGkp% z>U0Z47O!o}bT%P^Zi;uN1d(Wj9IJMKl1W+AQMb3ae7y1fVHx?yd%nmr1(Lw)2B6Q; zs5Kaj!p^zcNLD;|P*qkX%C0HUZLmw!z%y(dG7mU=yMr<9Z5p4xWcIOI8=+hVWE+U1 z{JMAr{S1TsDvcE5w$fCr8neRRle`eTFZd;w!&$77j0H z8a-(%mn8moAv;+@u`T8;m~4j~zzftTw*fPiBm;^(G|$s5h$YY?0@Gm!L?${n-WpbD z&yj;#O&*0~GHaUcZgM!5j9Vvx(l5%wqhIzM+AS2;L2;q_e>0&PpddPnAh{X^HTpkZ6fT-fk%`5yI*XJ(p^CfFL`vnb>2Xz%ixAR%cTcbT&;$kshybr1@r&u%%j_J4g_E*(iw|$luRduBofp{uSfKEI*xGfp(RLm16 zpWxeF=rmr8y)vaUh0OYb)`4PhK~m|csJ=`__fk*H5IH`mn%6_QtP50FU9UD?f=;Hg z=I;>*rlzN3!z1^h#G9!OdZQ&~=F3GLT2*;mdr_ilUo-a~f80An=0Er=4n+$?{62gh z(0zFoP#R0-ij5P16KU9tAr8lm{pz8ES&68kyT@#nN^n5o)Sm*b8PZ3NpP*u@#pSm$ z%Oy>gC7hsmdD8FGr{md=Vt#oLma?&-V?nZm#%{5e(@oQFhh%3|Z2dnRvj1z>^HoCl zIrNAEiEgd)&zdk;OiUvGIE4##v}_jW&CZg1}+UaYqJ4##AX`X}G4 z0~H_#pjBF|BRDXne8f$ZYFXzvX*5+4z^$QsXzRXr~p zDE$fPGK0khN($^IEGinv+YiQ*3xA>T{&YE>7i?h2i*3x?-4A3T;7Oi{y+7ZPKR4i$ zCS#g4O|WoAiu#tn7k~ggiV^wjTiwb2)!-O{h#h4!o3O!>FL~qM|Kq_79zxD6N5v4@ zT^8?8t>bo6_qK~aXDO$aGU^Q0S?ASH$(;mo?_U?2K7=IWg_bA~lq*stTj$G1Yv6JTc4ksPwcw1}*(Asu8 zNlG=;<`*(i4HeFpdyukUb$>tn+D@zY{oehn5i3%?XbEp&`*R6D)BZc{+Pmd0JM;?V zF)CKpZuwQktKHzU?fc<;yY;}%#r$?Rmr71vv(@1+v#+9K04tDgCpPjNAIe#+_H4iX zstq;;S+Ywb-R|BXRTi-lfM01I+K+!{Mt~YaYn&&mEN~n#5j%;TU9d9Ra zN~N*gtnXyYusT~oyEv)yf)$93E5^Puphl&Af#k_8VJ7>ac-^NU^JY_0l3l`LT~ErNE53}*hgccI@d_>wDx5a2Jfgx~ zjR<~Ht*9ntoX@|ZX?bl{8DExNAJcin}h?=p}pcewjoakTKz@Y_|pa?mI| zc5zskqQz_J^Br?t%2>PYfq6}6cFoLMt^{J6*}Xc|=L%JpW@MZz&bicOVx?3sTC*e> zE~S!faWMrkM_~_uBb_g!f4`@#CQ`VDJGVsEExTz|{cI;fTcB_bJI~y@y;`NWa|j#*>h#q^L~rwdqhN|#oL-Q$A2tUMSJx#?B%@0kLsov^im zr9jqpIU9t?<0!Y|3O^u!jE_RKy18`0FPT&BZv zX0njOXP!B0<$1kX{Vm&8mB#LKP($QhfQR#ukvdUax98AKVxgAva7*F=zVIiFfR?iC zanpG@>){}$wm;HPI0IMON~H(b={Rd@_%>VWH!fGWH_KEQA$ep^!4Esj>UDCHp(lgN zoBsgC{_`6B-y@z2%z&JWgj8OV?E&K`XcJtU4Yq2*lG*Y&!T0TcR#vi?|EKdmWuT$+gj+GzN+ zYMP$rK#prY1A%j@uvMCp6tJI6}k)h1*qF~5#WRJnK>k-_S@ngW}$X+MmI$onx=wdvfHx{$ku z26cLFVJXP&wB)4LGFB)H^>R7Isq8bAHP%RHnIXqpIz^=y|WY=q`1bJQXpfQ8KQ3{!r@Vk@Bm-{=VuW(75Vv z+@M~+r;wIag@EzcWclmPy|Qfg%ixIozDl(Y_?y(Q(6m;AgN6pq&`S&K5kVK%NmCU} z@{s99E7y7ZBUhzM%=v=lf)^7orHX#Z_jbxR^Y{6s?UXawnft%80MwO~cI!pREEgfV z$JCTB;oYKPySIAcgAuvyd`(P5uDgWpV5#;DP#Zl^b5h_$n0;iZEJ3y_dF)1`zgN1t z-L^Jl8JtTh2jzHrKc%H$cjw77vc*^4^y+ta+dk=^_G=J%5eNbQHq7_s-^(gK!%u%~z3pcJ zyxH}p)I#~6`0oE_^7&?fS|CoKxi(CvGDpKL*wc}2VEmxiyaCXO&+B1|Y>pS_kEwfD z7~nESNDMP5EifApnt(*(K0kp2Vty2Ej<{&IjVv0s@_keH zQ`7bwUzeu<`lH8FE-0Zj<`UkU(~V(>hsy&;Ww*fMO0F}T&eO7osx)DDV_9zd)3Cfw z3o0IW@ZQW!kZw*i0?X4m#z9QGSYLT6BvP`2Gr&79rs@Wj3wE19*f7IknkbUEu?_~ zesZkrtep$Ucm)XH+Ebh{)=}Zn+lkr@R+AyXJZ)!i7~PoFt3IMiQiA-k$X6rs-)n$O zCP1#gFCf}Ko7LP(M51o^I7(V-y^-1T@@=zRwGvDvgoD?Vp~?H;svIyuI8Yn_UK*03 zYCY+5;Qsoy^)TJCD$hwCFU+?}(!pSJVvxK4gk1hAZW8J1#H_bz)Jl3x$Z*z(9qb?4 zqw8)KKV;nqGdc_*BNM{-t1v-(Ljm(lSV~0&qkabPQXiwAQVUD*49=|82GMZoYJepP z4*xeR_aCgrzoz~sa*n^9gxtCcFBhUp5|Ey1k{LI)CFvh1kW=0M)n@s1ot}y{s@-!m zscDB29i6R(qzn{UR$gu>%ZbFM?*M)B8zlGBCu0%@2>xZRrEX_RSXemo1+r-z9F^|I zj0xnLtvChNnu+j4SRkl12*}vDXi+)&qBu4>oQULB+60lp{Hzl{S|Yj!3TQ)1O|8Y} z)5EJipMXgLuYD5%3=twLI~##}0i^jz;+1w#(VNAvR_%83u4Mh{e6zsucp?Uv0OQyK z&U}%x0D@2>IuzAeIl8)SO;Pi>vb3VyMZW{LQ*U+2`aSXw?We_NG2V}*N?DmxvuKIc z24>HT7id*2cl6@y>W(`Pjp2rtm(+y4zTB;|hnBAO8Ue#5pO>!=`aczy>(rH&C8QaX za`GN0eP#XMPJ;*IvV7)7-2-%|Sos)BOK9|3b<*XGPk0Our@qsi=ZKgeuhYIFN^PPh zBFE$O-3R{NpVU}#>-n6z_OGAQoi`tpB~k~PBa|hX2DNL`T;IhD3r3w?Li)95f4H)F zE~7@P0nrE*>h*N3c4}Tydu#B6iu5hb#aj)}{IAs2zDF+ZoTN@!-FlP7m94NC6U(P? zHv+T|JmSnM=L6xWHm%2b3kL^D3ux_=ewIgPR4Ma^kMFn1$P4@@%eTG#cr)BjV-*zH z9v=W5p16ceamlPKm>nf29QXd-9&akwbgrtYiHR9&`b$s{XO8Xd7%KqZ_tfv*eK=6c zp(vdLBKToFTWjlE`|x0IcvAEUa96NeEMz@@IKPMon#bF!R_V4mYyx7{9*7Rl*%jkJm2@neVU}BgG1`cZ(%dJgcdMV4%I~9Iy(U=I<&!(YQXOYl)*x) zpv@Xpv5DfpTCE&?NQnH4!v6pHvgDfWV3q>+1dA~gJ)$JYlgGe~$MdlP4f!X+H+k*{ zp%w69e*|#sAhaN2sYq*YhDc{PI3i-##6`8_0<#tq`!&5l0?7>(qf074_sUy(0qZ&# z5cBf1kR_JdiVZS4pcMA8IaVax+QIY*=IzKq?YOl2UH3#Xl1BY3X%u+b>C`9<1}gFc z7C&*cs-WSA?Eqs)LLvzLHn4Nyt^<)UF)<6zP6F%J`k_egr_ga#rh)YfhKH-eXg=!=xGG$;g6zzu)<4WCr=zV=zw;ow`S+ znFW~v4VP`N#hRa0f5rD9oF~O%*sv|BUNis=8J6dpz^;|U@d+QB#h^#22&v{I5Lxiv zeSCK)6+J@q?FS#s-`S zz>aOhQ6N_+A~8p&--}`A0)WlE=27;A?TW8PhA@I+dEcOz&;;T3q*EDy0{~wH6Oh#w zd&A`_?R9yj*%$x@!(y`?%T5Z`=K;5@UrFX7zgt>*Jz+x)fHBNqH>k2Ki2C zf^7H~Hqt<8a9*w5t{^XDlcBM2I1JEc;Zd^K|6%rT&X<64L4gM7^ALaF!GGF)7&4D#7tbx@kh^s=5FRj#{SZ7jOUaCQ?dlcpNXjIw(Vg%yT)41MM?_8j#Z>z)CFi` zVbFq`o@LGg-l69@-&vV0!0&k7`&lnhtvtwCfsxp2a9GNdwZ8A#`bpIxQx1|zbn4XJ z2qC1D)GCxo#hai z7&}C<)=*T8&(U2d5S6u;)Xd>v;z_V z0fmMC_5~~Q6OMzNK$0-?lP4y-^&s1xiFa^-t$}Tcs%%J#l|)wvC8fcyVJFH1yKOXRnHAofUfLXpkg&?H$FU6^CdwPrO)<$S|#KKP?o@-{^(|C zw`vy#C-4h0?JR&+RqJxeKTx|N8VZVv#v5m%#^0@B;8ef7UPb@{Chm_L64zA zvn8H+tHv}d2;B72jz?hMPAas8RL+V|3(Alprne}GQ|1;nd`_p*I0EoFy8#MvvWyD( zS7SPDjr=i!Qfk;&o<`$FclBUnW97%g#Yc7H$5{)C0YU8+$J6D4`PSp8Ocr~+(kgQ1 ztp>}_^<(W1v*oF*+Z<{+;Rru9s##>uC3RDKNrC(vIXX-q&ajAxh(m%hxr7L0Zyz1y z=`QFpZLTV{T9kLK)Hvj~s!b0^i=tkO)|-xdI`(TXgWt3R^zOo~^L>~|qzD13l{%fK z)2?{=7pJGtPiB_J(c{Xh>y?_Sbx^A~47(VNSXxLo;bC1_$e5YjR~4l}1Ex9NTgr%9@IY@PqeH37dwDCJa&X+Jp z*X$bsSQvnu5;O`T)#NzT3^M{1FL$&}PH_zrP{1s9I3e|xe1b9w{aUbx4tqjSL>Jr= zjicA}-3vx3ox&GpMxslW@xQ%avlRIM>5Uwb3P`xG0KmLo0PPBLVGF=dmay~EpT*@0 z;fP!cnG3<-S`sBQ&HeaLnkZXU=2)fH3S)){R4T3(Bt};kh(nTEV+nza4A&a~JQ4*F zm@A-^i%}8Im`*OlOr>E%X$0F`Y&o@q2aD$0t3rmm(Q-xVyD`))+{>kf0wf@7SXL7A`;3b1?p z0qfMS0Rt`h>EzEGBP*{&NlbW?#p2t>UR#=D_ePhyp-9NV%5Og>BWPD*X#OO_-)8_l z@#z!3@{A1|W>O1N0^VkuvyisGpY`5BE%a?|IG%yWwv$ z06^-)pm+1fcH%T|i_iU(`!*U)_Pa~cCd6QNMJC_&M~M#4oRG!k(PX=7g&N%s+Kbo) zziLc=eu6_^j$PO>6*VPqrY=9`*!1+UsNMBeC%G)|ekmzDFm|3=Y{^$~hRs&1{bADR z{9XZGI+7{RnII0K`Etx9*IXjk+J!t(BVX>_)k>@5t!p`eAQfn04bzV#Rr=#VNv!3A z$~QtoH8V&=J8!0XCk0$dg zAcDsp^1E6thqALSLF!7G1TsJ)z@0LbON^`2#KVCq zt8;Xakd%xPNhCDWqEqKLVmR-wN@IQl%FT;9kV4U`9}(j&*NWJ&h{{G10GRboV1CIaj?r?5ysRG5@g4c?hzV+sDebHa%BHP(Fd2M!XK45 z`Ywm^ODEzUJDn?{KI;nv?vk)O0GWum{mRa2EeuGX^mwm~ijuPUtvUXfpVo4q84vTh zP^L&B&FQ?}bm@h5nx2-H9WO7h!*<#*|NbPq-li`PD8RLMmNxOo!A9iX33C}3N@uV* z;(Xq4O_(eL4&oPD43?!+YsA79`IJD`AA( zLWjGENkD9HOO+xH8+Eav39{R5+!OHM;Y z^}1@=`~jnW%O)0^)d)A@8KSew&+_S=01lTMO%^XLEg@kxuXN#=I5^Vs1GVZ=evw7y zOWm->Z-_$H5r}28Vza2R5`I!eSYcSHcTk2#Iql4BAZ?@)A4m4vupOH|$hyw*WxpijnyaawW*GUvD zleMwDaShkGNaS72#VOyEo+bDXRl@IS!B2y>mRQgy`9H;KfM=6xIq(e>usDzo3k3O^ z7Hvzs>IVwYrXJsW67y8g+q4l223m@dsVVBJVEDnH7A8OTFrM64#m-OwhSK2ims)~xH)JZq)R3_uGj#kI<{!o@N zET=%hA7Kk`bw&~m6rsLFzz^geuwz7ii&Ux^=foQRu>^o5;>5I%*DKHBY@WNA47!Ea zESu_fUOl(h?i?8&%d-TsNNI9rlb6(@ZMXesSzed%hsdEdCk@-q`-FRuX^-cl;cTCY z<2zu3wfs32s*Xvwo{!T{qIQAG`4`EtcLe-6?~|Lh&Grzd>k54Wzj-`k#`Ox7So#Gb za+fz{)lJ`RZ%5u2hcynvx0Cz{dHWSYRq}OLypiwqg6R^Yf$NRN*~3b_8C$*Kg@tI% z<<7S!uG(2f@&fVdLHg*2U`Rwj^ZacVr!m6GyzgyFq>k@CtCz7F-t6Z)BDeKkVJ|48 z+%{gjtFG_m!@-MMql&0DmI_Y${?+=GR=q=V@AVJnvxU$1i1KpF3KhqhYR6Y0Ufr3~ zyPaqC^7}#diTkdXy#vO5c1&dFTXnH?CLbuTaf^>eu$k}^Nxd%iiXAou2Sx}+T=Ke6 zTaEaEO1S<+1v@E#5LOgJK4?U;1M910-i)ky$cSM#VL#3EH*!=;Vjt$w;)Q?Ddk0}8 z8vj%`??~!q zni}1QBu4UZYz4B*wih40hH5C7<|CFFJ)iK*jP&vRfp2nFKWOpyrN}B_SBs5aoPh@0 zyvl)nVKm zfcbUZACZ7Ur3Gj)!H^)TV>JF@07kuGqokaMii*OXeJcy-D4Aqk9ub+jiKsrV66CUvLYdT@Z16&aQIxH=hEBnYQyN8o>^$Q_xIG#Ru;PSn4((~q+&U;>W>_qA1b~UY)sc2G8ombM*RxT{H z^L^=!w;pH5=6%o8`(o{fIe3E9F3rsNY>Gr?zNL7)t0;vP2z`ilXsg!xrhPqey;OObhVmUMUZS+z273o%)A@R24v;A? zS2j<6o)kCo`x%E2Xm3;UD#4@*c0)Mdpj&l3R*_;Rmjfi&98uKP0zKxY|7taTjOLgN z$E*rXgVMK4Yr3HEErD?QxTcJRD#m0*ip4T`TsFAXWZ;KI z!GnXGn}|{A8PtM3#L~rWwF=;ZoDuab;zEU`$T}YW-mT8;xE0lESihbjf@C4+mbA5A zK7r6dylgt`Y^vDPtYH%rJ=~4SCOAZ5=b<1Ga7SjtQf(uf>&2!jcQF9eI~r}(ka)L0 zmJ@NgaFxtH7Drhtf2y<_Jig5)Kt6Zqx|If~=HX-WP>S{0WVZNAZMf%uF~?@Lfe869 zO5ZtB+T4~&lrpcVi#~%Tw78gHFFQOikofKj*#d9Tpxz435eiEqg6A^Eo={c#)Ro4! zooQ5e$|620?#$@LI-7!)!s*@Xqs??F-=r3KSncb36-fp=mFX}vqffEv)8DE{5xr>f zAY3#RAS7HX|7RlU!L6M_E$4H9Sr%JKBXJ3kouDhPYuu#ynWrajAHHZI87(R4crs@3 z*Y#w{x7A6xBxW*&|FOl)2y2d@z>I_16bEvnM}4;WUmp1 z>QldJNb2ALBf%(rTY?`X%RR?{;O9G45iNcNF+)+$8YxmjOp^KFVnZ8$!>Z2kDZd?( zWT;Awg4n;bNjoX!z_&4>UVNJsGRO=munEq$^T|Ik^T2$BapF?E;oBlkD1P4s0D(wG zL)}Prh*{Ld5SIZ{$4BaJ@k)%37fZhjd3klLpN~&Y2G;A??r=Aew>FX|pa_6=;v;5f zQ8xQqIl$d^+{uAw64vLUP++tDQA~m=8kj#HMeU32Yvf{YecIOE-@lO5S1y}}%?MLhU(d`{T-uqwhSP)K zs2qKCKm8}u>u$7p`+nfKKAXW(*(UjvV7gmfvszkQyw~J4nc}MN06V8UIQVGy)Aivh zOa1b$V*Ssr_dxoZ0fJu*%dLq+>Cu0nOJX{%-p&EK|82L|EyW?Y?b_y>UWzY8j}~H9 zR_EoetZ(-Zeb?l1i-9#{<1ZiW_dlvh!-K_{oSaw5%{o6A&3Y=-9q~O6%5L{%r#X@ut&f`k^;VB1 zIX-`FzkzWAeLkC{Gn%Xb?sM4TET6MR(>W)@v+M-KQ)0 zik~KL;XpzV@Hj!)9QE<*Be#Opxy3Ki5Pld*!;1EAhz0n%6PYkST`AItK8SiKJ5D0x zh@tiA%m%7)<7^KvD&cxmSoQ#nKR6I=aoGq}f2gC@V5BLvJAR^6tsif3gik#f|FlM> z$yc9pGv7@Ufg#UZL&UYJ*L3p5L(DgmMI&T+dG<-`>zO>X1qLe0at(5!QXJj9Vk<&_53vyPOk;U);(giGxGq^VK-imwXvwPReF0_E zr)OY}6wRNpckG=AW}XJ3x2_$V@{zsc$4rq&y+5^_ELJ$LP(d@NdUgPi=;tC9T`(qK z=zSwOZk11Vn1@%5DJVu`Xpf(H)z5AkQx1h*=6_+k^L7ozN*HqiO7UoW0a{DRyqqI& zbjrz6$pi{4g%4X?N$>6!Cy)4+^rR>mvMO>#U#o-J{B$2i0516+HB3OQxqecHY|uJE*c|CEr zi67vDk~}wIP2%_Ou!|o+iP0JfLHGfrNlfyHUV`kPwt;P$**oM_2OA`Iw4s*fppXcB zCUf}{p#d+^;#OjXvrJb-U@^QGJ5^;9S1p)Y3+sV--UcHvrr({mxT-s?9oa1` zsV?njsp|g%ypk&AoBQ|5%8NLaOY;39pXaNlww;eEyl$y*Z)Ktlo)AX&p^%_8}zGQC~h{gf})0ww#Z!r*lGhK(JT?Ii`qdE1l5W;hq z4@h9j)^V29=a&}hpL(!*R-Zt?@3#&Y3YJ$^RQ;u_G>fxvT0t?`?|QyKzEzp`yA$0c zCY9ZeNHB<}E;1|`p)iK6C?)H=*sj-{QOh?pC@3g%c2w8%)Vt1xD9hq>1y&Iafw+yf z>5UcgNnXo;^z_OGRquk6wElLoY+TMbUJh*#?eS#r!xf`V6Li9kA4pbpL`2X1wE zA7221AMe>sX?;lD6sfR`HLXK8X1pY*r@==;bK*A6!U`T|6$~A&SO`a^tV1KxaYKlX z;{B>oTGjPA5AzWDNz^f5+4dxA(vnl8W8h=m`pw_J2qFzD?hvhcG-Fb?ghtD3JIv4Z zXWc`kve1fbm9cSF$LlAQ%H?2XGTv!wBbQ9T$Qja6r9R-&17M8D)J?O3gQVm>9K;uG zOyqz6osj|+|4rxP&LlEC(DJzz5a6XF0tcZYI!DIr#F=%mOd5Wi&cF#FiEagM9H>i^ zR#WZJuGM>DmKLrD1&QxPL+HNHhtxEoJt{8Vfdri$|M33+Q9-W0k!&dr0#c#pmy5dd z8%fhR3;_jUD=iRYw8t&Su23#0FcyX2dW|P}Vx%g&TxO%GSFc`gz4ew@7_?C3#zi-X z5n>aG+2%d>+=H1>yPy8jpv2$It!U+K+qR`7*;Rp{4{zZ*?Y_Oa7;M?>QGDv4W4PU} zPe1+irAKdby8XU@&!f?=-MR~C5|;(Zsc9}x2-g;6m6h4qhd%yf?qiQVHvQ5ISFKr7 zT3XBZk50)kMx({;@>kb+Hf`UT{N=n|dpF#3<25!%jMMAge;{kzDgDQe9+j0_a;U6o z@t5Ch*|G`r8TJ10kAJ-F#+wHA8s_zd?DpvBjv0Eb!Q=I*wVIl`TC+t{TUWDa(V|Xi z=^&DPlySQ2FvE_Gi(^k_aan0%T<6M4Pv=fOvvUt{g5tz6ljwCh+1V$L8|Cx)YXedj zEy&Nm?6S+~r3@CjCD(uf{b$df{lW_`y!qyv)6SiC+G(dD3Gu&~=9ViWhTD1Pod*Cd zN6G=J%&2_y(MN$+=phgvb2gCkMg{~>gIyrQoOs4*WU45I(FzVuytri&n>lkP{+e+C zM0QcSNCoYA`Q?`{z4TIKgDjF&E5mdZt_H-S2qtQ}dV{3nxm5t@45UKCG$_2huMe8 zf?qzgzVy;d>({Sm3lCG9cuw%kqb0I@)X0;PU$E)i++05Eu}lGjzTt)&h71`Z&w7zr zl<;p%1GGLLCo(#AI_=a`={YR0!xfaQn@h{eHg4X;+1z3bMpm4@!7{pUuil*|XMnVk z1RrU!tI=>o!>&EM`M&=>1|6BRO<^GI0Y4Jf&#Ah7r=ul~Qp#6+I)mM=nto zfddB)P!?NWcyYpEX zdZ|t@W!scM|2)B6P85fE@gputL>1mMXfMt6gvxrGU-Mx&8Om5{J84KaKRizx2 zLP9_Xej~ETRNn`njLiOh!qE^S@zx3%ms}l|3ak(W$5tXEb(qRmD*v@ifk-;QJq8_p@*a5hySW252qSU_+znTDFdx^Ndim1(iUmBb?n%Y zRW!IBJc&P6`A15S^a69qTIEQKpfL;UHHm6h zl$YgWcBd6v-K97lOa6erqPzm5U2cORus@eu?D}CvCH|W$Roj!EZuu&^kew~t%N@c0$ z)z@8RHk)uho}H7;8xtF*$wf!yA|Re$x7>2e%{Sjn7a~TC2m-&cOSJoxDN}ggJb3UR zw@lS?9mR7NZxvWBb5f{i5jnM$0T_zO2geu8CukV9k$HuN@qfakCp0fonM_zeh^C38 zCyaL&0B9PeL3}H3fv~xnBxcIxLtT?eZHrU@=(g$Yx08!b%E5rDAkW2+Ugr-lsaRDV zSqVvt12v02uNU`IYI@7jc$Qo$K$DYW|;+*|Sv3|8PWWWyyXLCu{5#CMcmPIGA!a>K;7ltEb;ngos2^-tHIYcQHl@a!y#VkiH@cWF0#MgM{GN6iO%a-Aah%C&EOspW$7hinw_19ky3>P{5{girD zc>g>au$atw*||4fcf(zG-FajSB;7d}G@6WS)~p?W$|>=^dpcdN2Ey@7I-H$*`QIOA z1;&dLsSHGh2FsmK=6-V7C6^}l?Zemj2D#dNYqMGNa3_SoaM-F`>C*JCmnzxn2yGbc|@?9&&Zxxv$#;p1{S z6FYR6@yI{YQj>X&VFohlbvt(L{_wpy#-t>d+udYA5s@K_Hn_LceQhWA?Ndi}>flfX zyg|LC!lmC+R-X}PF{pz3%4<|rl_N83_&qsLtua}nIkYf>gA)7|Yd|bj#gd(`fFFPS z@weZ83jobz+hnbnqQRgiO`3$k1shO!m@wb6qvWuRD@v&uqeW`6R4;; zo!@cCZHpIw1%d-Xr2H@u9Ly%u^*7w`!Tay$<>vzsi1%Gn+!K5BZiKB!=G-PH*aoMR<@{S zW3nc>HK+nj2|zh=#E8%5&j)mX38FTc@n?(_D?RYjFTVH!tI4)aP~;--z`=t@j2wXr zx4itqx;i&DcJwBx!W^LC^Ou&EqMziHGzq3rtLokL_&2Dnsi9M0l}W3$pd6NMxPfly zP%f-BxG_8tK(vwgZITs9VOfqe0k;$lpv)^0xUhI0HP;YQA9L0rf5(pLe7ztqF%$}j zV=`L`iwdi&Ys)LDO%|IY%GTiH2V`!S8~qp@4qQUBcwhso0HGQeCxmPqFJdT^z71G8 zb?Q_&Ais!jIahPsexLCrCB=L8>=`lO4sWe0;L`bno_z;%(>wP5dgbaZYgT>m!3U!T zW!!lE6(yy0I%Cwq!kP!4c#f-Mr;OFBS9eda+l;nKcXe`7%GDS3FzWDhq2025M?e$A zj+L{-b9Qd^`-}#gp|GU1q`Ye7rd_?d^>S8wJt5uR+yWH7aN$?O1`jsdqxS7TH0&hF z5>{N8)f)|Zj0Zhfv3LRukDguo>9w{1-$1?f=bv$*#TXkJ%7@I5Q(LxT&B~SQ*L6K?+LpJ9q8^|A!uWh_$HEVEXSXFLNu8 z4xUZ)94@*jeVceW>4;drl|R&rfx|NwN6%!D~v*TWsuc3rx8bR6e zFZ4`|n>TO9T9LA3wt_Rae7X>yMI$9?nPF3)ozzcZBPZU z-D7!;busUM0hM2EaD)aW#T;1{NGb`jCe>=Z>k3M}rR4q|n3i(s)T(NaHO0^`)!`4S z^+xmjitf2PlE-v%C0Xmd8hdtC;>uiOVVw^1z+lK13VTXzPSL!ClEiDcASf$m9qV$} zvl&Efx0^e}Md74XDwOvJrb67U9;IxKVLQf)Wnss(xOE%%9?Glog#ws8N*}T%yKGH* zT=1H!rvgB?V~NLP#T+4~2G)fSKKLM032##@VleUe+u#1i`$=YICJT|~W+iZQD0$Gb znTW?H6D|fFWMp!D{PD-d9uT>RV+x}X{K_;C9%L9?*u&eqB89ixY}_{a)X{{yyqN`c zqis7@i)5lgFN$P!oMBNMD|ig6RpAmRoi@qTA(7W_PCReY8ICAX2+tDSVm2CC0IJn7 z;cvN3R*J`PSy9o{DQ6~hkgSj}v=(>+_Nv21j>53i;fTW2thu_NNVQH===GcvTXom8 z(diDGuik~<<_fK2@s{1Hsyb_8)Xu$mcaCf%@{OAeVOCD{jDusJ6hd1;#RI- zxd!BwAM@~2Pd&AK`Et2J42Q;Dj!6};7`TV)>8GD&cQfY>$p>&Ba|DUvcvqh>V+JS{ zV?h+xTv=>?0ngGk}haY|7nNJrk!lLz<6$?`Y)j{8khab9n`t%c1 zFR^0b!^~^1y_TAq9A&pjrj-$(9*1KC58>03Pw#i%efO+cvq+6x=ZG+GWwU3$XE17$ zk`sgpEKkHE8kWA4=)lERuUUhaGrnkc>(Dbt*C+e;&|w#GAe?!0A7msVBR zj2V40pF;Uyt45^o+iaMWGgCq(B}Fg1_|pGfb1l0TD230ZWo5;gnH>Q)QGTR&^fuOg z7!U|2l4)tl>1h~dhDB>&)O%E3(xfM8q!t8uc#{y&*!p$rE6d9c9Lyd&b~G=*lo&}1 z8`(%DobTvQm_L*(fvGir5p?~A^=sFz1MN*oPVUpYHz@#WWyK}w>FLxWJTM|vbd**2 zuiWjS11UzZ6)RU47UmZfmra~FJ|;Rw(y(m)5-v5Oia%f_--K1CWnHp)^Oo7O=kSK# zv18iM@IF5c7UFP|oAqcO%yM__+S8+FFWN;iS(o0Bc=}VGwCM}Ms%vV#Sh(o1M`vJl zd-BK;867+Ftp%IiqYN5r`bdf-j7F24oz*eDBgTes1ByMEo%Qw7rCYad88KocW8@by zEz5NwAT?b0By;RHBjei;p8fuNtT~b-oob1*4IT%ugEgHSX2D3Se4 zx7~JI1j&yM@>Lse2`xkRKbq<9AOr11bL8e8O3O%$u{fO7o}k8BS>ejc&aSF*k)CPLTD%%(d1Wav7JD={(N?>C|AB*nka6Tm<2;_A z)uR7m!I$OEa@Kou-uc90cH|WthIrk^m47&^htXu_sdWB@7h7!h;*vc0ckV0+cG5{F z;rf{o)TK)o`YcKyQe1?&kfG%vaFqO4{8v|N8Ca4DO|UkW&IqnDzcFja{;YDNN#oEv_PWd)cew2O#E?o~=ha1P+4ZCiggjVF zhnHsGPi>LvuzwIKQl{vW`WbPOXiKG9@QDdUs2oG-1eyVLdVW zATNuA6NW)cYLLE<*~X0Q`_6k`;~y*}o#KX{5r%HiZg;SHiLA~~9hT<>W)NOQ*yYVM z!RBkQ40dF&^IA+Ih(RNYcBIWv{gH6k$pB^rTzG#b%d4-x$~znDCqBQkL*$M-?zrHB z3uGogb#)Z}KZ^$FMf3;JNoZ?s#bZno=ExBLfm{;ga@27Z#G-q^L3)5mFKHw^PCZmDK z5hF(6j!=+ExzuW_&3gK2lh&_Zm6(uF=a+0Ao4fQHRZU*O_16taj|P2ahE!|y_D$95 zHx}>c*DYoH{<6m=IIcNuh|Qo01^oG@wC!bknHmEs-b30~UCjxo#Q#(pV9Cfzj$OmN zF=F9DF^mPq1s#ctzSm^I5QvLc)=xh9ginCX+mAf*h%}CxH)IeD8KJ!ATz&P`IXO8n zr*si7%7U$2BJqTYfh_?nXm}_2{PWLQt+JoAg@R-bKXpLJz&n0uavzd>m zh}mL|sK-w&MbrF+KG8OBW&eHst(X4$TAj-k2=OsqYFsH#7y=7VPhu2H_tJud-Q)hS zJv+l&YUZZ-ABmMxVXDt7EP3%iul)O8Pak34Vx|+8h%oZ!fp^}W^~5vJSJq(V$B7rx z=^ia!QoT9pn)ZC`iKoYo9@DieM^Crg%S>}c3+=63`5gmu`W2V;>d~FUai#u`G~rf~ z7O!gU=kph2Wo7fl==tZL=R_tkiUm)Eq|x{8*#qWv+buVqJZdB!oWc(_kzb-RnJnA3 zZ{N6SGtV0K$6RyORh>F@JmeddFS)v=UAlK@gE)M`Ycn4*T z8#8vw~t1q=K3?cc3?H)mZP9y6r(9fXotNsw_(P3@k&`wt(^MKBy3opr_( ztZ$|Fr(<34z>(O3g$qXvA08VUhtCM0$-VmztX{qL>#x2BfIb$3pC?`JI~-arB%poe z$mV1UH=~pYC5oa`vFom1pT6|{swx~#)G*4VWb_)gJ%k2R10s1Ske5l6MD!CEpTJqr zUN8S7HyScqDR0DuNDLhEHZR!sy%-v)i16x{a(RXl!?PF;#DjoSu8<0OAb@SS*L}|+ zqU7&`A|o7x43PnlbhhQywYvV^jz$gsIT{Ms2pFTdBX(?6cWM*LI{qM zxAYfjF+u{a5?Ms9R_1Mq@9!f`s2X>IJu*8Pbf((sYQHz=Fqz(c;aMJpCZj13RM%A3 z7v+^`w5p0K-wk)%eb=40^GA(? zQs3ds^uB;+$L`JDGJEQb7EjRc@#7R)weagNqM~E__8F>H>$>$AU@6^Cqj!i;(rJz5 z<&{|MmX#lNd8^`MGpcK=hMY9cX18qKp2yxedZy@R7~F_PX1q3T?cYNeqK=GoEPpX` z1^{6wp_xckkjjLRot-^#;>0)Jc!OV38O~&cxUq_8J~$9hF2a}z;ze38LejwipF~ZkyhIQ@H}6Kx~w8=l1;Tt{9q<(1c&D#ov`J-cdESr_F=+eYHxj zQG4A1aFx-cx_;SM9SsiZ%)@Bg0SY!>S zQ-#2K8g}S#7nct4+q*yat(l9LEZbUMYHHVeG$y7PcJw^(zyo4g#x@N; zuQ4aeTLLK)nZ+fA!!mFy;`xOSwO}%0#e-+k2@@vZf&$Aj zfpB*ScMegv@B4{Z={B|8ZP10tBK3Q*K0eaF+Fwz;5W-ZH#d8&R901VRv+%&@6}mxr zbZK#{4I9c#CWEw9B3vELP7G5vq^Cw=z16!Vq}zD~5C!l#zr-HtAJWqpLFNm#o~cs`r&TJ(qS5UNU}&Ri|e~S!++4yQk#!x!?Ba zmRjpO;*O{>XC>xWp#iayAoYX$002M$NklxNBu*ZeG&GqdDMYsE{P=cuDtoJ_r=f7VpDk?)#_3PZB+~K$2|G6$k|Z(w!%QTEO0B`Uj)ruyb;-=g&C6p~c%#Km z(`Djymg;8ZYuMtydes_(Ui;zuAKZKIUtLZo z_;RnVC+pR`lm_TdQt47QschyLo+HdQ(T*srsvR~v6AGtD(Or493?sY}spKFooJ0B% zPigs94g^DfpQhgJLPG46rHb=N1#t=ZB;#PIo>GZnK0MaKw@0{r&s#7PnrHowpuogL zV(sbodB~;H0613R9>Hid1Vf_RNNZ+UipBvZfd6OjJOHaKk_Y}?dheYCl8}T@6$C+= zf_P$AJg?ahJrzB>=iUF#vz*@9dqqJ#_4I6K7aIzKD55m!kOWeI^j=?*_y5gK-p9*J zAt)%PeB#S~`_0bo&hF06&d$y{yqhqU71GJ_p&blu45#K6o45m{DDr@Unn}6b>MC@V zS1E~tfxz3#J31-~u;|F}6)RU&Ra6GX`=T`lMw`Kf&!l$R4;eNLXI~R1O&T~bU9Ns| zm{yaFg_q*jW!SKxIk~x{TDxY=lu46)<#HW|Rg8}EY4&cv0KisaW8?C+ZI6hIfIjH7 z6XIis4IT2@fB$>kpZ)|(H^uLbIBxiUpr9d<5SbMLZ9%ROVUKwO&w!E^G{!FYl$bqx z_CT0`%~?`hiZ)p*t9TT~&)1IzAjYC3$%6ue*zc*St|Uosnc}jextS88JJtgC1k6_+ z%Eny7FI}LjqGI)`H7i!GL_dfh>WGNQff*TN$BfCy%%qUy3+I=%>v>92gqpQgc=rN8 z3|7T-OhXW8xSLTZ7$w2?CF*Gu(75Mfj^@x3x-dwsl$1i7c|im2$lb#f6$P}r5aRyz zV7PY*Xxpt=v0~VuYzA~QtPwX#buA4>i_zXv&AOlckyhsGHm`*Eep@9j0x8vBSu_u>7}#?+X?@A?%5p$o5PMft_7}z24)(TmLe9DsY};}A^Z`u`O*M5@@4f%w zX(#@=&BiGTj?=Lt*@#sEi}%0$IXfyWAtP(ZveloXk^J>(v)BXXhD&aELeZR`zcnQ# zt+vr0{@&2sTv}Q(YOFZ6=AqlTwnp$*gQ`&EN&WP*`W1#?v#}?Qn9W&6ScJz=Vmv|_ zyk6iykLx|r7rQ%cSM~@7I+8w0MtrlNQCYlrF_C;#Fb1**ZEwH*b}Rxl3+t1Dopa7P zue|a~*CfP%^Ojp~!3*oX_uh;5R880|i>7t}Qz>{FiX+ZnT7|K)1BSFXDB}!0kxCHj z>-Px=We+|-a|$@x+9SgJU;U(X<{VupRf2cOfWt*zchv4-^W8n-VE6!`06ddU#nF>#)25*hVv)dzwxm_;k`0@-is+0`;^@>UX7ma}WQ?ML65W-vJw7)2;d^g?{+T%;A+oyj}Ub}G}-!l73rC@M=@ z1||cCLNFMIW@VzaWO#DQP4u}Sm!_6!2pwy#(LXjiS~zXSq{Fs^X@9za(U=;YHJ&K8 zY}yiJTp`ED#ruhxlCCXsET}l!PmYX1EFal#2@4C&$<4v}MpLt>B%-6ED5_Eo%n(w; zBtd7v*bgw%AI9!W$XH z#6&|zY+J!rTU{lBfs3l9NLo>8TrRA`;_NrS`wi{#!oOdrs;ZXiKq=F<7&B7M)YSgq zNr;bIjyk&vjxC!;QXA<6C^w-cMPai;>}Q1>(ub&xR5~Fsp>XF8N2~P47Do#%!bXf3 z#yo=G7ywAl?}7Q4%Jr#uLb29X4hAv55Y{vqSy|YSHZ(PJ&miQWj#g!L+{wV`T76V# z=)zd|32{jz{e^zi=^wPU8wD;~6umu?9s?aT#c(!8{jOa*R($>Sz4zR6%^zmZd-92o zKm1_ff(389_0eNbJb1-bSHAxGf2%6X{r!B{5v8!bAvWKnoUTe)Rnt^bTl0x->N1AV zFCFnhC8rp1^NwW8NeCnX?L1JDFqG^{e^R+Wq~&!tURTJYFs|r>e?2Ln)Z=i;(6p@f z7Vn0pHZJ`8cI)^+aCr(8B z?9LzD5h4SClVj+3e z$Bsq&%qx##uyAU27hZUw-UJ4K_33*C4q8BePXhi#lFQmQ+NZuzrfL!Aq=(T9k-fZI z9k!CPy7W+AXDcp_Tg6{TN#zA6gdI2SZ~-<4Ohtfn`p6DmyVt+|z5a=Ja;F?0--uIu zkqqQvq9(D(2WHA9R^B?kbkYD>UH`sE{`=sZcaT01xkVc;b`K&lF*`Iw_v?v-e+HRObWVgp z1>)eRABh5VEyOzxU1Fbtqz*$yC8T9h)}&G_-i?qNIi`&>H99Iz_E9t-iQ=yxU@(A( zcpg|cYY&c|V8-&^d++gyNUJvzh9!dY(n~L8Ymn@Kx3VLivwNIY!E7omEe*LDcvjaK zo#CsFJ9Bg?OI{?=jL<$KH*r=NQPxx-A~;^B&7m?|SK z$Skj=a;L+7EvM3l;-OxA^oh9-&zV=>&}bBBHZ5C6?k*M~rIiAU1O;QkrR;fUpLyjU zF5xag+$nGrtQ~ttBdhc}$~)CbTbwF)iv3|<*f9~^o{#r8D_8#YrhlwljjIP)6k(&V z_XUAiI8AU(8~eFhO1CeTE=BX3F>oM5k|XU52Q~vBEGtA}FenQ!%VkJj zdF7SQJo5~@JNMpqANnbHIN?){n~r*y9?Nh8GXbqW{kN*R>WgJxMudk{Ro5jaC8A)( z-dEdB`vdU4##ck(u3bq9@eR9*#WcxMB14mQF8h{!O|KTOii%3$8?j?+ao|LrYk~QS zjttE%Waj}40IGwk*T>Hv#V93F8Hw6SzS1W<5f{E9s#%;^a}d!fs#~&h!3Z#-HB&Z< z?-o-pU_yiZ!6|1LJ(^jx-$>>@PzK{T`ZTX(D*3uStPapEq6g+H(Wq8Yuu^mi0R1U5 zMRkGW6GJYAGwKcM<*76TFBD)eEh8;8FF&7DG!}bzCO;uXSZEkZItoCel$MrhLHLU8 zs&9ZF72p7SMOhgZwUUG-MQd9`WF$dtMD+X4%nTuz!RRVg$6w}pI8<6%`j8<*Q_|8_ zu3j^J`Y+%BP?`T&z(9nwv@}6%GA=7GOG_Kz>+dVoHkHrI%|jYDcf^QJRq(nR$I;@5 ziH&J)b+C28HX$7n%g2$UM!oRj%L^BNI&|nzrJf`?U>>a|zZ%$Mxd4OCbYQ52S3tt( zRWk=>h+{x$%G#=G(dmQ79ic~z^$CKo=Yi6es{~2WeePysgH04nO+!ONWT(SLa0?zh zbU8*7voHpXIa}q~RlM`7WnVQ_)+eXpm)mzpMuv~wZ`H=!f*rN!iEp{-rpmH1X5>(= z1C?V8J>+ikaR1u15wYAd4rJ_XtLVseFBoA-Vz+bp0k*(c!$%g~!_-}DgHlsdnX(xa z9+*8|6(=PjUdv+vXrz_t!9Z6EDA8ypRCsYwag9xFO^$Y7yH{aJ2^V!d{Lq8t6_rdD zIA^%^y6Y38;~J}5Cybsv^zji-%$s-P4LAJq#8VC*HHO>KeVq0oX<08l@nl_XEjU4l z_($g~+_e76tF8?Vi7aa@J|uJSV|U)gPU1-ur>3Q*mey3}Zp(Y*iN|01&&z+m<>vJ< ztA}JC(l4st?BD&qwxTj=V9blpy$m;JM*eisr=KnQ_}Z)fIP%a5rNwoA0p3G~3=R(e zVy=#)U_XanSOjbtW`#&FW5x{F z7Xy}|=U#Ur8BoL{{G-Xe`|i8(rj4qkU%!5=Kp`4>UYHCV25zGX0Vb6@5)G>`&oL|< zPZQIX;ABKXN`hhk3s2t^ zjEsQqS{|)CHi&d`U_3aL7Wg~=?q0@!XA}n${;yMjsYxd1_6|`@#Q>=kla`2mt=u=w z$s}18+I)~tz1w$Pap74J;W$5P#rvT^is_53#qRa`yZP7NzT~Jwqv6yVFTeUQ{kej@ z`~?q-&qtno>%qD2k~xw#b{Pg9#WQO+ggr%sKp~j|%t{Y2(CKWLI6m!9*PaJ(pK|J@ z5PSWJv$i4!K`+<33KU)BoxMierv$JP7#1hRI6#55GHK9&z;RgKAms5$c_nff0r->$ zQejkPMqw@C0RS)$d=^(8k3RY+#?&w@bR}F%`0TUKs!{_05GsZ~@+J`W1ld!(Rc2En z&nj47wHVf`70`GssukHau*clHCfQ>QnR0lRizX&bnglR)*DA214gr~>C>sx1(^$v~ z>^~!160^tB?lJ2F1wf?eeO4A7RK_f;1E&&d#PAX4oHy&)r=J=)C|hkt^fNu4m8vZ; zl*6;cbWqh4$gEyy5g|1Mw~C1I8ez<(gE+ZK66=ErAUIB&I^~JSA0s38*;)s_a7nvu zN3-Ks8NspP0oZ)e=1woMfb(iYN8npu&@g3EzeqoOa|_FM@7fmUj+#bWgdbdvEjrK4 zI%j?G?Lel0b}h^V5HXSPEbTKxn^8{(LvrQJ9fDxjS^$g_XAaGA#uhw0+98Pt)%^MM zZ!!;f5C=86hOu!#d{h}x<25@@=OF>Rp9JJ9w|?Q^4`&@X8My4S%T%eYeHalI0Ni~L zk83%VZWZDF`!!@Swrn=r^Dn-1&;1YYEG=b%XVQmYp82}Xte&6t!#ngx>x#-1+#h_r z;LdyQU$=3K+!to|M(h!JsmlYSK&K}@H$+HjpD=FpU;cE>sFC95kp~vQuLmOW z?YeX@nCb%$J%a6XD~1MUn*{m@L)~3`x8Ux`t|1{EpwLLZ^)XRbG<}QFIsL`|yc8cD zm6x||>((t8(xS%+3k{V5IBnDmyS4m+g6xce=wpjZN^wSuo|eTqhm^PF<^B8l=Y74s zLj3(38XAj>cm4PE*J0*pGbc})l$@L_1BdC`+q}yOI%%jLv%zK{aH$DHCX_uJGjPBe8XCr3si-q7ocOO`NlbgOTpyU8W>8okrK}7|WYnmr$Srx>_)t?_ z4aHdUQ#go#2KklO{%g*bwB>Hydimv-B_$-1(TbHT-hS_WoMu$l*3{S3&c67<@Q836 zvSZSM)8|2hvNmrLE8~K~Lb^Jo_jsrjllZ!CH}p?Umv(7tr0yRsSdfyI%AJa+K&93= zdo3%+DNS@#L}g_K7#1&C5*rsAF1OF|h`*8dKK$@EXPglp9)YoV=UkkqQ7ft{*=UT8 zibm={EO9vM>uTkO3H-)feDQ1=i@KY9JWBV!^a^?DnMk~JX1Yz$j-u(u96Mz2VCq0q zvWM#Jz5Bimt76nzr$UV(3^mxgU@+1dq^nEk>_NnY(Ctq0qMxvP=H8=7#lzf+Gk0cQ zc4U_>{!Fs)_Kl5=j*X46M@NJQ*=8JnVnm>KTy)S8qle6S=7Vh|l|zONefZ&rsmrYM z&-d~7mwvvt4;dRh4pm_5i&}6j12NS^d*Y%7coE^@@<7~eqs&sXO4bhj`}aqcPf4_U zc&6;~ZuK84&;{gRgeL`P6v)N0mt}NFNJMolKE<7Z?Y83L5(K$^$tnE9LJKwDoAcki z;OyT!ZGKI4?Md+|zdY^qFP1MmcG@wORnB%k^}bJSsXmCvQ_tO`Tz(T+Zn`_rAH;Tz&1;S6_YM1()|9 z(9g%W{jkxacI@27&6l`)PD)BZ`8fT=lm7khm;d|H(0!-XPZm<<(9SZEXH`Yj%Mr_Ve{cI| z-)wpJ$!Wuer@}@}ua(JPwt~I9zWAoiN7#7xqp~D_0=1u?|*>f@(k@4O4zr5$6 zH|=t_A;TDXk7XTV2Lp^;9MO?}DakRg*NXCnf}%>C?K5|C#w9ewas409k%4WHcvfLQ zziVweuaSGF={_qERR$M(Zd@FLT!Okywa;)dgd3ef(KT?LAijiPQVOrx^OZ(Kra>{m zMi~<=>I}B``D%d)N!!}cL345h`4}09ORMJ1o5zNj!e|!E!RSxnp75-$j1`1r#A*!; ztU9`7WZ=QbsIagQBw9TE1sE@==0-R_>;&1YV!^Y#;=)}e_FsA@G<7qSRU~z$AQhs0e>&grxN-o`p>@ zTN!l?C__VO#pz2J2)tKe82*$KhW7a5kDq`3`5H-=vk;OaVHg@$a`A9`H8)}dMx<6v z`zIHb;8Ka*DT{N08L$^$d{J@gugZ(8RsQv_e-Wb@fr^J$t9IzExNHp*9{dSv5)dhfr?6F#WnV47?e6=&`05*4(i@Ki;uCXso9?IFdq>M|5c3%Sw&dj8dCz_C z%>PKnu^qcnIg6!j(-i|}>zx=iwL6m%Q&D^`yW?aZ+`=V{hR8WLqkG!n^ri8sg6u?@DdPv*}vVeZr)SR z_J+mvEjTz3ucP881p0f4HCb>_5V96H1%zLx^OH|L{czzT-cn+tZ@=RX1b&tnE(F56 zfPzGbQW}Xt8F(-%SGGpvx2skamUJk)Aw^QWh`W4Uw)|@g55~4?_{;|kax*hBHW>wU zetrSO#KVaNX$7F?!bOXh+C!e-;2JY-7oFhZot8uLH&D_zB{?@@AIsR%8;Y}qo@sZ@!DMrTul;mJkN)&j>PRmZDg)ntdl+BY=R z9Y#kncsSho@++^f-@_Hwir;W-2cs+{Ca%7+ZsWIGrX6)yN?i0YM~%93?gu_T%|nI` zMIAF?(!`OYM$>RQ5xXPr8U`oT*WNDjB!?Rs8#ye6){kurETFqqT#=B39Sgjr+d@Ox zM8SZO#TU~zMwD_~!zh@#rX^L^NUK!6e6nB;29yFyE0&xIF>$^=K@~OCXlXZZ&HMP% zg@3yKZ@|Db=!9q_@z0REWBY)9S(W7t)!QrM6VpyV{a3Rtn@tbLe3&gsR*_5`Jaia( z7dtK_rvJzjf46N6}Z&abuc5793xDB`=T8!w6#b;W*v> z_uWN*VAwqK>{Ij*fSD0AiyQuSV`f%H{{bl@M-QI&%!6n%nM5cL0Dw^jq{{K*$G`dJ z+f|jN!D0Qvqob!Ccft*S`x|Z_ux9I@G4RYYes#{dv*_gHIBr4|dmfazFCAW~_Y?bN z2-7r(@dVC0?>xeAX?{Hh6t6_mn)*Nl0{jxM4_~{b420#Ojc9uK5=R(;B(H9Pi3Avg zv{XSs0cYQV{^5O$?)w+$ zAcg~q0*o6JmUz5l*FMm{{nItu=H7bP^kZ0{ilD$!kx?La177ykInDof!>6N?_<%&% zF$U<|3?FY_8GgoPo*9SY=(N2Rb&EJi;O`ar$lELbHYmtc>>S_=(G zc6PQh3qybJoSYnt@06AFlmKm;N=w}rZy0wBTA zg4pj6NtF>$K%!HN(!?F-&pgb)(}9Y`nL8;o^6)WZrvBpCPZuss?cX26766FXZh!Q& zX}r=MEeyP(O0jwQO9y62;Ck2qLpJ0ssb7-BnQrO&2nt!#V0uOjdt-cb^>HwR-Y^-I z;|=xw<0!EY+H$0k=DJbQ(dSI=U$kX=P<&RQx3kgiiag_~gCqf1hdh1T!l?n`LDDte1597R zqa&*)cmQa0zV-yr6|LeVzH4<9SSt%ckIGs_A|V_J4nqvsG#+3rDp!SIrJ|GpNmntB zBzz?v3^32X{`IePmOS?g#Ue#Ydip0sj!trUgW|rF(84z0m&;#JTd}63xR2(FWZ(W$PO`u>^4|L&eD?YO$OxoYpqpuxp0IE8+AC}n zi~=BsV4jB04gTS=f##%m9sWQJN9br^K`p9jJStBh&9Z{0Y`Z0AtN~3YJYX+_xGN~5zYeN^TeWt~MzSuu3gn9?TrV5LSNX{UE z8tgp9#>ep*8x;`|9m75j7S?R%ScM})D2f|rj06Eg$&1AUe9Yh1kLHBhnEdrmP2H`4 zuC0xXjiugEl~ur7Pen!f!1Mua+$O`7!hQh=dwiluxj9=9!2I#6U^svUPsQHkvz)J&`ypC`1N=k7!cqAvGo!N= zyO#+7^N%))j*gi)aomz6U#6t=!!0-PSmhsb$jCcvqo7`1z5yZSB^7ZI{v!rY#Avn6?u<{24e{|} zBv2-D#GoWKEiE)utOBiCcL3u+9KTxO7BgKkBy29XEgQF#K6<( z0H6w3s~`hFKrob=bg$v$#^Q~dShp|t_f3&_9 z1I%;@!lb1u3L6nlAlB}(3~X)1n?G_OF%*DQfU#QS{2WhJWmRKS1J|%enmbe#;bV_J zN<#VrnCTw0K1p6cr&w2aZ*Uz4LvA1vVkyDRbxnk*p zMPHnF>Wt@Kc=rA~??M%zS?DjRK<*y%vkF5}2uoXYnsC;vS?o+e4I&{dlyN78(6@7p z`&W;!BB4uwhikXcCUfG!YC#WR>y=cR1)e&X@gI8VAwJQ{B=pFdS0Xi`)qLc|V_|a- zP$R%755487r=G&Ji{xN-huJ6LeUEXU6zd?8ACdxw{fP{vOwc21V!7x%IKXf7&a!KN z9rfEYrW$Q9#vA}L0GLzl`Q>f@ykkLCeNB91NOOzmWq3r)_x7%AtlgN`ic(rO{yB6m z(S+LuMEEDh_#hB?IXgO`j+sZEe7mNq$s7A;#)gb&w7X(ElAaPa_mMxQrS%uo=Hc>+ z@a)hb+3C>{5t}#V|7ynZV6a#`Ai@(w;E)osciASUIU;7z+iCa zye4dLkPAyx{-IcxBL7g2))&bJ7xKyqIg7!$Q6w9RpkE22@P(D2KUD)6EuAngu9FT9 z#xxk~=_ymDa0U?VGhZKg;DHApd=L%@2BnDr8)nKyRb0h`48+Aa+zE@(v=W@Jtc$qu zfRiI2LC0W3 zs!fCy(`^8WlNs8b2%3w|(-asvm8>}-NT!N`ND4`Ow+MTRRJv)^P&C8Dv42EjX8FMy z5l17eENn#PZrOawjMF=AAhbT1 zfMP%a9TXK;UBg8~a-PlwB5NBv{7e{2b4;io9HX^aSc9*(Uz1-*wNG?<#^B9ccf7W? zq^PpGs->ONyj&L*;1@W&UtmpRvzS=I?J$V~Pq)0-mD3OKSNpJgM()&O;OMA9eVLb+ z$My-3Na3lesq7LFwg41^zCv4G>GP;{u;1YoU^bITs7V+y?zw1M>z5)i7|B<&X2`SO z#;>vh_JM_WQWj7NID32-#HxcBI5CeF>Ls7%7Z#tKDkzyz%Uh} zepMcb8W-OUAAS5WeGi3kYg-FeqN7HQq#q)qQu2m6aTQ%zQ;P*2>OjIhJ?ID>HuS}Q zWI>leE`m$LC{Tzub0wbxH8uKdVRY5#Hfrij2QkPxp_R@;a**(?qP+5h4;KvRml7Wz zi%Ic-{{0~}7Omg{09_<7Xkf}K%BeU~lgRD{rT&12KtzO`Aw$WYmtTm!CKNS|Lx{&{ zJLmLTVGpKt9_=XvYPVHSmY}*iL3#D^x?)-Ua<6TDl2E< zVer^-lucmW`gNG$2l(Spd^dV3PP_Q~2d1W`p@7D)oxVi%u>#?A3tuUZ2OHU)_`nN6 z6NUo<7+nQH*S&z+d`vw=QZIh7DWL;Ym6g}lxoqLx6Bsb9J8K+$pbT9R%{5tokVjE< zPUrR}gUMD`S05dXrcZB$6%8F*1uwnuBHHKS!$vgJH=rA2^Rs_yOl5Ubd3mkfUv4b& z_IHGb`$tEG);XNJsvT=KLuu=1lM*@Ls^JoY#Tk|s?)lA88j2EI~e#tjc?Aq!n7 zB0L<4g-)(%dmD;&F|#EXdMOJ8ssn}fq55uB?Vu`P5REkpm^}d8fe(iJLILfr92c80 z{Zza^*EONaXbldR&8Mn{T1-@AQ`U%WvuDp9J#XHWiNy&CDK$0q&Q{;xz_8HBh;7@q zjU6{urwPqbJFQ~YUlT7KmA2ziFp>bN{hwdL#1M#xP_uqYC>d~i0#Uz||(rM_i=fC^rxKSL(Ig~84z@!2vd0EN-*8|jr zs!@x*suVx{31q;7kwRUSsSq+RKIw~wXYryz%LkABU z;N#1|VR)HH`DX3V3B&$-(X!#l38gU73^K>BfBkFJweT`!UJAhdffrqL5n)PV(T7(< zN!jK?4TKRf9!LQ|Ns8{{_~Va9*X*8zgm5&p%veCx7NQ#HUHSpYX&pqh4HLV4v?9VDB@nnR=rt!Rz3rRG zVWM8gI|q7s?5r`Yz^@bQNkkKLN$zNWl3^&!T9?YQy5`Xqp{vp@IiJXSqf?Wa)f#l@ zsYSSuAuV$dTL_{8aP8S*{*OHvo6F)H!|ee{NMNAcceI;l$PI*mFzIq}4gG94uW?Jr zm14&oJ>|7mUP{Z%Y-w?=Ch-&mBjeXZgwP?yH+^$+NdMy2;AJ_*Z*5%p&9>rQ^}b&| zH{T7J2?od5qJz@?yaU?Wnq?QOi`3wmVE?{DI*5ZIEnOESEUyd=7RIcKxr3Ae!dH~7 z>{M~_X+c4Owh=IN>8VqvA_mc)wGuR_Vq+1-@dEC+gI}Sx)(X(>?8Ho)HVq!7rWT~q zKHyP9WfbI#$`$^@J{GD{Mic$Sf}{YjGB_CQi~IM~x=j;WFzx~J($P%`sVN#{4hUmd z=e}}g2s3i&5AZ`e66;=)P(rJaAfZ&C#s7voaw0*?8Odv}y%reoSV`Q$+{2U~wqgjYHs3u)fxG?X$Ou|&ZDNW?7F1AMvs?J@AF0jp z^@^2eop%vS8`0jnS!Z-q?E7c4ml#mF8hx>S%a)wm?!N!M4?kw;tHG~(2eYs$!=Q;< zImOUsOHEF??yAdvIb#L@P!CGN%`9N|0PSL?VfVNLC`{q$augo-zPH|f_Zx4$tIB9Z zBkh@8%SvVY*x9$SgRG6m6jBjCB(;}fJW2JWQJd6 zqkrtkOA2EbU%-X=g$eO7yNb)$*#dxgs|;Ey*IXo;Gx{EPK!t^cqT@|T?gzKz)<*@< zRA46nYh`ntZu&{`!lZh2I zYkFGhqD70?7!C;vV)_pa3k?hmAX!*MBpwq`)P;&TC-qZYG7)=WZs>#1NDOxg@(ZJ; zcuGU+i1!lydHaiN;O+VOk3IIdraj~I8B?Yl)rJvjQxgTE@GP`3Z(&0rCPwV3)fR=; z=_>z25WeG`8L+zgI+%j1L~`z-9Ybrw#e;8X zWARH}=nPPSK8XNK4>Zl~Sw#Rj?aHhq8xm%!1(H;BIY71bHI24`XL?cB+QqCC^LBrZ zyBR6X>HK`@(#IZqWXO=AG9v6PIa~5+vx_e~^NTOn=Hx7mO9->IIzpoTeZ#^^>TSzb zZ2fxG<_#OS`3DDLuRzZ1JaGBulEq6#jvN&f9AbKudxLhALVCXxQyy}MUFh6O6|`BE zI4+u)zNXM_zw{|f0gWhPeNh@(uNuHs7tdOF>R@@r(#)Mc9*_rL_ecRKjC8~)gbnLA z488h>`r5jn0AB`pWMKHYzdif9>;E=+?ASkEa}BLYvocz*xZ;Wr-kbmHGtR*-x~at$ z6dHNTNxwuhh}-aMAfrX< zZ)ceRM^$*mDci(HhZjsVOz`NV2b9_ZQxMRlb9Geh3QmIOt^Z zMBqZPnpa!&-|NmvNsOe2;=8n6JWhz{*UH6%Z{^+e7+aGa-El_=-k$#z2VU(QzB9)>k+u2H$L@2?QA3Xyi$(+a zOvF8lCg`hl>>-a5aR0<+^Rks2Hf}Ch{q45(8;kO`mDs&};ij@)MCENqZNW7xKF9|# z5do*2IR5h4r-p{0TWxRA{%o2CE3vL$C~F4xzj`QVl`iO@z@3?Xe_JJozL#9c=y9ty_nvgg%JvFJ9qC zAn72ip*(jlU}TMc1fGl0uI31SV3buMjUj3A3p=w~gu(y=HW(sI4Obql@o=Wm?Zj+2 zVTWFiuohlXDIR{U0Pz+J?!B6d%0dXRBC!go$=!3;7zOJcx%Cxb5V8-6fiu$yN;lN> zPzJhjvK|Q%^(fjd>={XN?z!jEIdMP;**RqR@P@`F zyg#3K%BdqqjimEg7_3~NEsI`Et}On;Cr--o%Q}|z5Yhq3EO-Kngj5qJO+W#SN&;gr z3xKtfXeeYcZuhryLu*iZP{Nl5jsN;$<$}d4@E6D6Ja0@`*7(eXsL0UZAYVLlI9iHp zY72^MHxyL9y}8~N5;rg*pcy7>R!TpXg&{KmY5mJA83MMx`WNA}=owY)Eo9-E15TE4e#P9n@5lbut6fy{06wa58eyu=B7v z1i!lZ=9?MLT3IcUmX-=)MWXTilAKHlaNQrjN(2IXe85SLsL?OK{Bq1IwD6=-Y-}{b z>QTV}L!`$j&>CSq%_mK$CG0j+Dh@n#(du-CQ3`a8|DG|5_O?6kW4=Tu#U_(GLPpLH zJc}w}kt^uTk32s2@wv}5G;uy(HpbNpfqU^x*<^StVd>m~zCOR7bK}h!kwQiTuju?UAs>e@QVH#tJTQxa5T=w zSYPhDdt}a&haED!vZ4}6)!Wynz<86Wua}cjXlbQW?IxJy0(lV&bjOHuGsK{I)#4)etYhMzC2 z8yF_go@(JjX3Pj2j;Pqkp+kp6g-5nJS~4>R;*Jc5KYl*GIN_c;?PziVzR+CKh%^gM z8E!&2kz?!X>$y7%OJN*b5Uu)0EL*79h~}dd%1Z@aAW1b-90%Az+nR0|2uRj(+^m5hGTuS>y4QS8T#P zB3*jM-93OV=VNxHwr|f*N=l?gl-Vtn46*pw*zh1fJTv(F`M&VNe-H&>@*W)CEy)2F zl=gBu(WEe;aN>t;U^)-_P#FuIA6k>Dac7$P(7+yu4$Po%ADBWSVU^PKkcw7@718Lj zdUMSYM)l7&fLJY%3q9TBu)q(okR5KV@WTRr}KA%inlsIfvQ2eOg=En}hs=DGYcrva-Hd^7)Jz zrwtk`mxXvf@Oo)wN^WP{gjr4c8;)g+Du+)ze59*r;f`RCVeT0eB~=(@^!FJJ$GY1z;J>&gGV z_WG}X^DA)nA{$s`qbaR$*MNTQ3ez>lJ#8;vsU`(ua|8#|%a+YV=4baYIC$v&ci*GC zM*z5^`U!+#wyK{sf=x$-AOa!g9ex>`d#ok{S(6-X9yU`sN{BfQQ=|^n-Z5y_^c>ds z+zO6$3+E9@LVRC3i3f7pmxr{esi~+DSUa!;!x!uN_3Pd1=#k2LrM_AhRuV3B49<>J9* zWixMFG$Avrxw*qM!%Bz;=lGbww-@ZV;H>gN>Cx@nVkoSY|1qHU#>IvNWxa`@DTBYh zp>gpS>zQV)0*OM$=H=7gGULRF05CaY)(Qe!fT8X zym2b+5GWjqNOoXGC?GdSX}N9QbDyvNHusTxFO7|fWMPcVqc{mboSSc+`|_)c*eK_g z4E$Dz*AVd~f)Ie<>!w^+1l| z_?&ajK@|d{1X69T6}f^bYbLC(`b%jQ28Kv^fWhwvD-is3@CsT5b1&o`!z8iL?h&{b zfITAFBY-<{Emdl2DwId#Hg@b-#6j3PFgM+e7rE0+T$K;z4h>hw@A#?Pkp>kb<`ZsLUTS(#bP!E{1^aDd3-_S-ez za@QZP+z*2ent%>V0^Ls1n!~ZjP6vQxr#T{RV_P^pI2eEAvX1HeaA2A2ic3m@T&LbB z5?v7}nonTqv|Uo^_!?%eDAel;1yUb!zz7J_9-GrAI4s{QX3mnrNB*;rGZ<47yiOZG z^zf{>L2v4b~$Ye z_yfFxK}us`SwX7P%afh{ZbxdE^~U6Y^%Mzez# zc#ocx2=IcTuT!payk~;x%R&f$fq&|c(`i9+s6K`w4D^C3-(yXF8TuG3Gc)07a#~w?k)7_brGDzjCqR$=C##ls{K%y3k97y!`b&zw0Eyb&4;?auuaKJI(0fC>=0Jn)K>DEzQF4l(lbd(* zt#^F<(Wj_C(W~N<(1=N{vQlY8DI=i4!7v7(L6u2rhqNf>O3?jZ(D1M0*&TAl?4!Th zjbD51Rq&g?zpTfgM9md#GRh0r$ zW}&1Atl}XJE$_|O|AnSOb)FC(FN;YjfLkq4Z*jFoQ{#>uMbS}_D4;QCM(}gAG|PNv zH{I9_XVCh3dtWf?JZ$#aH~VpF~W5Iz)C+@15MyYZ$I$XOwd(fa; zZ@$4CX?NlZ1A_C3F-1jKsDHC!#oZ4+nh+aR-`D^ur6C5z9sa7c0A}_fEpKp9bciUd zSqR|5yQH)nDT^imp%xedz=6=bWDU+*vu*=P@X_32EXO@+L@P0{FT7wDB+^a=0Qf2P zr=Ko7Zo0@DN(MGLzFE2Q$$3wOhlSxa#jTx0vj9+TUhbGNhk2}GXdm{v!a_r)PCMrH zx88m9(Z`RSK3(~V!Ti7R15F?fB;t4z>k;-^n7q0zx`JW3Laze=KPqPHi*6=^ONsBp zwghL%+SqP@%q`V5wID=<;F?g5#R0?P>*E~~77`T|9T6T85*8L16oC6(=1Dxm$PjXy z#pu?G+_=TT*nwpx%dd3W8My7e%kTy|2`oSF8 z6rtn@HpM%4Rg{)h*HkgNXxZp{6keW~=ej&)Nu&PwaUxu0#@`7EVzu>F`AQ zVu#7n)z;LA@+g|IPh!cN^H^+Vb1D&tBn`#X`xi8SDat3&cF6A zPdxqjA9bLD5J)oo$L%lv`_<(l+1i|~NH$UgB=|Ndj96qd=G&T@T8zpX)z$72b|PgD z#r{6gGy%DzZeXc^M1sWx>;r_9oKMtZ-P*Mr#_S~vw4a#evgyaREnuj4uu?qv?ym?@e=!Q7B)Gc#V zJbnBHvu5N`3@cOVvBvtKCxq_h^nmH*lLw^xD+U+1Y(t1CEG#4*OK0XPjabUuHfRAbaf;3BlH;;YKCE9-WH8bkyr~)WgxOnb<5nuzF6S`p_Lv}_sUf}- z`VE|XXxd$i3-bzg`Ui@aLl2t#kgr-Vnu$kCLeHc>v%yX==)(+T;tgel2!weE&^jc+ zL>jS%MJ7A^EFFPYJiv5K0vUgfW|U#>#H;3O0Ta09nrqN^g9=D+64MnepGc@UHOy$GIxtUnobCqHiicnP5z(Wp zx)9Ts2ej0Y%@`ETl%H3tMg(vJO+4iURcdM~CnvDE@IcGaIZhmNudH%B$`3+dK&1&S zcwRL|f35ia6rhjLM5|VR+tAbmF|}TO$V>Q#H5mH`Ah?RP)$;m4nl zM$XjJf5cswiYYFhVg6DGk~mviIDb7LCFM`oUVhpsCj&?=AZ+iG%bpALBSC22*1|tA z@9Dele;6&Qm!A(?%?_i5hw{6NCL#~|5E!m8jgg1uH#cuPVC5Cn;|?DkEcyrrM2A3Z z26Tt8? zQ%y#op-!xIovT)^$QYQ0tfKUR71lSmz^gR_{0so8ELXX%#CzHCI)b<5LD_@8Ub)KG z&%edN6&;$Q`(Fx)H;=Yv2a|+UO*pj8I{knfWnNJn(*y*_5rGz+KVyE!&K>2YWo&|? zCFIktvI>#9WgeB<;X9aDkV|#ULpUTz)S6Vbw!V>n8czo3j~W^qaUr4=Aps&I8c8&v zD4?n7)|{>AAc6t{S%c8rnvh>YaL}0ONOF<9l(;5LB&ODA5&@%UaWmN9L0N>QTR>np zqTv36cq~FrIPMqW<_L>bX2uPm{(%AM>8ZdB7$Cnt?xQvBr3~&>a|dJI!H@z9V?u!e zDO;rOUkM8V?F^YlF49o8BiC#aEnh@$i@$8<+nSo{^72yr=M)xgFDlwmR$5+LRgE?p zM{2CX@RH3YM1VgETQ(5AqN1Y`5);$XGX|ul#>Xdy;Uxw+3&SI$hBg`cG&MQkY@rEp zCB?fw{`ljR)D*OVlB17zO>NzC&%atxR*egt0R!S3D1UA3-hRH{tlwPU*fM>}$SIQ! z&(0o{)Gu-EhP>ZjcXwh~+i!pSJ50O_3kz5@aZG^=C+RU-J8%XB`6Htg>?p{~$=kGX zBfh_Lw`{GbEU&7qYZH%c^nRM0vv#tx6%iK96{X1o`ehCpl%AfEnwrWf$?(t+`V-#a zr~~5#oQ!?&GceIE<>uzHZrVK_C1-hn!G{>YAmN@KI`$shQ4=2g?TG^PVZ>2RvZ5}W zcJ$Qj?AxF`+=+H);pVQch2g*_F&#xh{$$a+zdU^=n^`s0ZKqLYsLIn0W)QYc^REY%Rs3#^2aLD{>WDe&MKQFNl*Bpz+SZo?G7rPn%S;E=I6oG zjH#p-Jgf_>0%+QOB0##gBOR5M0uKu@daRY5M}YcL1+4|2c%>VFXP=bEBd@Nn2Nlp= zY4Y=n+06iVhdQX>bcTimo_5M)?r&h`M2$;4BNXj(VR`$lcQ0(U)%*E|;`K~yDm)(q z0Fm-KqWP{MCc+gfA2rMlF`Lu|2snwu-4e_oGb1TFI%==@f~txpjvG28D|y|PA{0mX z3_(6bu*5>K-HR)OC<_{g77a>nBI}>+pj2*krcs+ z)QF^lXh=d1pyAxPa}n8bEHH20yc1765ec5&NNLsJsB3lhZ6SX&Y{sl9 zZ|jy3BZkLBMd{$8n@RUIt9=?0i>>U;%$skzF}YvzMHgN$c<8XY2C?)9qNmQLbLR=i zpMV0I>j&?B;K8JXc(kODvFqSO9K^zlK5P*|CS6C%=+TEoQzThvn+2!c&P7HE32}^( zjsn_j$%#qRk3aGK_ufg($kZai7VMnIW_|6nH^!vg_s;5dg(X?Rw!3~edQx^jFI$U) zLlWrG*c)SyP4sEFHiDgUBT~D=-X`}CIymlO8$NJA(#D3b)^8htEt}{k4xk4)29sg> zC-i3sYsoB{Fwm3~06=Vzd|}X!(hR?-2tk?E{)n(V}YC zD(EX<1b8SC@fc8GDS&$oVt9otthdP;R9Z(3OrAVhU-$NxqEZ-SM+)ze78M3D6oahc zFqmDSfTnm_1@h$+O@kNy7hZUQ4Mi4C?51eN6%`2;16g<=-|w$x5LQ)J)AtzyZL$>q zp&w{#8qu2#t%o0dV$R%Wnq7vCs3ah5w*`V$qEKpg1o(ShH0y%PE}0z?8UnR>+-ciw z+5pIzgVuvN0<|x`DVBe;5-rlM zoxAYli(<*q+-dPiCqX0G&``f|%a))Z--ZT9dTJ_OQ^5PfllpJXa|55VVAsQ3x@sVL7+y4%BcL3rQOo~lk`9){f zX54EK=9A>a)!$<8!t%a7Dk_r2M^b!3eIxfQ)`5ZVOfJeQ3GtG@HQUcgA;aJRJc!|Ka58nARAj8Rn5-YhNfL*xUAo{aKR@r(TQWm zkH-C4YHC_!M6`@0)@njZnJ%lVs*{r#q&q+VY|)^>gSj_I=06s*-hNRL{EHGLxJX4%)YL3C*)46&Ev;oc3pTIM`C$GB0A~*y zeC)JoLx&8@${K_|3v3){V7T${6?q2o;+>BL9j_h_1zyv!te^;=pC(*H>4*6ywA(iOV$S!(7h1n;3s&hEU=B% zS=2Gi$%fy0)il~3p7YhqD|SpA5W-D^GOD|kdWqgM6`8x`DJ`p^^CQFUMul~t7q(#W zdOe#Xv?n&7`5!Gq0d2{~^PYRZ9T(ITiJfRuOsS|i0&F{c%mA(~%+D`bu{y_T^Ou{$ z`cl_ki{1B++6=(w=H_yX7b+f9oG=a;D|P2V`*Zr~r=ykTOc0lGp?zi_3}rOSMOX~$ z2`>I(axEw*z}+wkW!$P_2aPIu!GZ<2fyNpaxeCWduf6sfmULvKIf9u0R*f7X!N(Bd zS58h2R?@`xz3@N+Pf6g>=uOlY2ijQW-Ft;c3r59RW1!4szuFRcts)UaMksDD)<*j4 zY3|wEeD?^Cj0mAn5&?-U&M)MJTm&#r$j;72m&exn)TvV`5-mtPx_-#QFKKlhMdVNN zp;6RD21~x=MDdEKjG|+Zxw;dh7?J**v(H9in>Y7~tieOD3V|S2<9ZNBr{3(W%*(I3 z`oa6|J?0m`@Bnas1qog?+t{gg#p;S^_^{y!n`krl3aO(Em(8#m=*%J$mcqq=9G+kdG7@nj&nN(odlCjR0|aOEK!S&a#K60_$OSrp z6L=!E46|mqCrS($vTuBqWN4RiIXWozJ`=*J0byS)E_=yW(tK&86&aU}u(j3(gqaW5`3 zf=)7k&Ex(_!?X=k1{xn;0pXW>`V3Rqt(8znNLN`=QL?inF)^;8p@b=(VTfKyzjpi@ zEp20c{muWprJ+Hlxf!RN{HtHi5L@6L2B<_koiJX(V8#`agPBRYNuc$mQXX^h4GjJ<>Ki&Nnz8T9$;pL2*d}WQB_kdRB(7NV@vtzENrm6w;l zw|`(lOjKH8VE=y6DancPvC&Zxp`mQxuxBRM5VbeAx7IW@R#wztCBJb?{^tDJ9hHrr zFIxQm+ixE>ZtSEfQ-=>b1ckMOy%Ra~irIAoBZVV|P>vpDT2ll7Ud?Z(^73N(Ksg+e z#ElL0sDXX`d=lg0@^iLUlviMM#j=9trnkrzjNML{p0;q|!vDPT^6KTwgZ%wc5))W& zW~RkwXCx=Zghxk&;H80qK<;2`#+19EnLfFzq&z3TGJi+ajD&|%Wd|m zoCksTmI7Vb``%*c7T(1))P5K-sT)7g%bUe%^n`?b@y!-O`AF%Y)l?sE?@Vze>|6) zSAt2GN(ojj`!AriLv&;DgD?kwLBFHf@rhRsqv6`(>8GD25*YS!F=tkvYgVZcc~Kkb z@(C?7wsPohP)q}Wn9fv+=s$b*Z1fj6Dgqd;t@#3g00cl@ULMKGt}pxxFjhy%bD#nb z4`GBhl;D^>BFtftO_EUNea4JXTAcD|f3OP1S7LZY zTSR9F2=M#e?|zE{8u8s|do9hdm4f+R7R5ZkWABD?Fu$N6D=QPRT~S#8RvH$cKE6I2 zx!07W)^2RM!LlINty_<2$9F;MGuFDG=a7t{hU|AM;&z( zN!Tj0lE83KK;xmC!;D}C#`?q_7z$`2!9#NVKC`ZaQINZ8F$my=`44~igO!8;stQt3 zD)K_Vti@0a>`O7wI2p&Qb_N&@!xL)U z0SqK0B>4jmJTPa@9Do_HsK2dLS{)XO%9Axm>ucWwFkzJS%Cex3k_ab{FcUbrRuIkd z)mLAwrreZGVGOKTV-WzJGcG*ji`t96jV78@_-jf{O;vi55NzMMoPDp+j|hpf3_UV4 z7^fL-zx%!qK3&9~GO7$n)RXp^9!Ux`1vup#n40qEYp*)#gyX4#l1oYVBi86UXYC?| z_tG!Eyz!RX*KXK^@B=Auc?1tMOwo%n)rXS*+Hl@G}$@%ZipFC*-{x@hsgg1`|7~DrteByDsN;|s)U<~9FAPy+_-0I-y zf2XeZ*t5U-0vE z#C8;}6AUS7h_KKw#6L>a*noMf_}4bmy)5RTOn7hzs}H;XdVzop6BF{se#uF3;bEcp<)Gs90U50bMlJy(#u;Kuh-uGGn=*dH&XU^ooAST>YTf2sXJKyM z>%}kTjm?=n@u>K?1RcB(eAg~~dK7|+F3YPfZ4Kw51!UOLu6!YeZ>CRq?o;xtc1zLbqMBu2uUY-|7fY9YIrZpi zW5;sp)xr$$|k(l0y$2!4*mfjhA2kx9mYU+=b3irg0aY0HraY*CcBjU{um=U0 z?A>|@8WsdVyRE*lec__jX-OPNWmbiQ%8dQ}A3P}=B*^7PdmZy#M( z3?Gtq=dBlYn-;C~2cN8Nm%~;fSR;?HiYhIuEGw@}?w3f+7t7b9o$#ZIG6{*u+3wA~ zEw*#doQC#U1sDeQ__4!}o_uKT_5~ck?>3|T5s3st*2v#zDp7GFV4>S}&xqpU9(vZS zS?Fa{0gVO+NK%R5<#ZzGW4DM03~b_xii*%yg9@8mMWSW`D*j@AhzTJcA;`sIWNO$8 zFvt@#9+yY04iPu%4X2b##Q`Ut3 zsR;>UT|%UkLDs;n7{Cr4Dz>h&C@~|5_|yUYiJ!ZwwQ=(CMO;W659Ye;0HOR< zE}@Ysj^hcPg&7>f&`M~}SAN-W!hHn$E{ep8hZ_(kBL(BWQ(j>d{OZH*0@`O~5!&1u z59>h3it~CfYg*y~ph(zms{)$A$O%@;!zaZ+?f?Mx(n~L)ebzz}sW^dwwW65j%m>!c zS|i~3idGly$KXW)t;N$!H7yKNt=JULUi~TtPKAR6R^Xl%9?qj%i3)c2-FIVu&0ULt z(Vr=>7Q?C?RRfZxGW!8M@FEn}GzS*|VC#L#DW^a*(gLpx-#xpZK$v<#0dz+&xc+4*+7!>8GDc8>3(LVfS2kw-k@^Gg7K*>MEtjN~a8`f{O}@y3 z&k=#5O5VP{rDYY3j^fbJ4(~>!M# z_D?Y}oMga;MsgHj)c3||M*pOwUB-PA&I{a8DMI-bxx%-wXh%?3Xb}E+O_53pi#}Mm zC@rObNo6(N$FIg zPl}216P-Stnf5a4Eqaf1X3uU$6Nd)-ho<|d^^ZRMkhC@HazFlR)5fCOr60XtQnYj0 zFQ#W^$WbIV4|eU^nVXXn7#>M?W%!werugL{$T?rxNx`#0E;O`uP3V0da$#K@t^JBuswwwEtovw7vWTUV@HwPe-W zk=fa^FF5bC(@sGVuMWrEdrnt6lSS9agE8NM0(8;6O+^xV#hGWG$x;rpjGWw!!-pMS zU4wav?33jc^};KsO-(^ zHZ0uh(#s}4GxNU#!hA9MGuAKrfQRaw$;|3Dc``NYNvQ8qE5r%Rb2Mdhb5mtCD|d`i zSt+!Hh6dKuG~unUsile4dB=q9bT&3}B&tRg&?{DNks7<^a=Xn3S^xjpI}gC9i|q05 zZnB%+8!4oaKZ=Vc@rMeF#7Nz;AFLcq>DVub@9loNaJS3 z$`_HCf9nT=VHArQTxTfpNa32PPH8MHI61B{tRhfPV1cNqG?HnO6YD5^3kwUMd+s@o z6<1bPa-^L{F`zlU@4ov`mA?G)%iI8l(#N+@x(`o`pMJy_#tK6!4_rcR!~pO>55EaD zTzs(L0l&tpK_AOSO!>4dM){+w9<(xa*X3v?s zVD9YT*o1K-hu?h5E&B}~qfQ>hk5<~g!J5{oSe_v`c4UUtRb5)u+6g;^2uM=a?+`{dw*4+2sa zE&54rl}tTk_{jM`F2v0=Cz)ksgjaY+z?zEMGX_Q-IV2suCSIQLIPZ0Y6xtIX{(9AG zAAOb4J*{s}2B$i!>Z`XDa;1_xu3KDGXvjm8@?Kk55^A@nWMtH0j@RH_vksMOwJkib zdqT8atG-VL7KCZATFbbhC%}M15(4xKya_3CXz-;|@pE>S9)#tu;#9P3^H}uY zI|yPJ07V&LG}Hv>eWOQ@M*HmBB=oCB;&VfdzLhGHvv0><5qfO~TOfUlz$^Mnjp3Kq zU+_>I9o2m?Gm1hF*eDm2C{H-Zg1Iz)t7hG@w zV=o85fuvl&fYi>JgyO>nEzzV8KD_^-M+-L(}O6BGmVJ7q4a%WEFF)_ThyJZG_uO$C zm*8R3ZC>qky>;u>-}B&u`t|-h`5H^_P|Ow*%)gnZXU>`(8yj6(TGp#)Hd73WMX^@! z;SD{GKD*wW{Vyrmk)55vXvPo(=lR5AA%vsbOGJICPeizAxX@q8Z74q6ZX$y}B38M# z8P#@Gb#3mzT=Y{ukc>P^2U2w4nl)?x^TbolxZC^7*vlPmK(JSV&nrJwsWlO4M)%!! z|1rlLi?pL1%?~f+GZJ!={j2F;Qd04iY$zhFl#EA2Y%hkxjQQ98^F~d6{4qyO`17A- zMs4{32}x}15sgdb)p-RV)K>*m&gck9jAo$$!z~zM@q`dYBiJ1WXJ%z>Fh0-<3f9%s z)dstQ;JNRF3mwc0n7Tjo&+9cK>-RgG?Uh$ww_Y^>1FNg$WRGt=BTqzlFkVd%3zHN5 zFIIst+5@*5_U+wk@&{9{zu`s(e_>BcB)$m$pkXQn%2|m`o%Y$Quf6i&DiF43eJ$X?7^i^weXU$(dcg5!IMQhB7$yq0!c!GLk zR~{9Px!kRbG<-*lI?k*9M@hFJlm#O*AMtc`MT^!hV z9B8qA+jrS^<@AT*00X5pYchX&Y>k8Z$G>*{@UyR)F>+W;RlOK2`>Kt9S>c>cmcB9< zH%-%X0`^qX&&tysH$3=(&^|C)X@S zEaZ)i9@YiCl5j&|vDjiaQNv;lCyAInCTC}*1E4a6vc;&SSVhPQRtoUDJk69eS@WS; z;C4G~ic#)B&y!C+xjU-3P7s4Z1RCUcj%NFU!A3PdMEb#hD2i;rcD00N(4U=0H3?cF zJh6@+KOQwST5rT_HLKw(N+p(L3l=N@KY~7zXX{*=b8GK!JE?w_$oBB=;Wx-YFOSZv zpr8ORv0Oihz=1@9Dd=gZorcEe-h1ywX~iim4#F>6wv2eT%BeE!&{6usXO<|aw@@mz zQ=&a2s?&k9bj--kdE~(dl(HT@d-fkVh}xerc~Wd#+!Iec&UG`g1T{Sn)lWz;Cn03X z8XAJ0wrSCB(#q)c!w>Utmd90r0Psq>=77B7BVomgmBWW0s*#El<%_B;mC1ntG8^{k z+ZPjN1_gseemQ4A{OZ-KF&m69H;*Yi*CKIXcGiq<0|Qc7Dgh(zg92T)ZIu&F$&CuJ zH`LnD(Kb2)ie25FnUVk6N8k19)u*hXrrO=GzSi@X#F{a~d)u5Lb2jgMZb5OMoP-*N z9(?XQoF#P)!($uo7?I#~=FHvUd~(j3^zabwH#CL)oqu#A3Jxd}{HVcK4+?0F1c2_0 z`S7SwqlocS79*om7wQzkPXSFT3oS658?auj05C>7)&de>BFPbBMoR&$bTXunR#hbI zfmwL?O2?!bpoFymtgjkS%DGsET{>*xeZQVtUX8dkkhQ+sRuxdSoKrbv8YDL6Q- z7yyXjmvIAw8mzzJzok;t@&d09sR$^0Nur!#oMA-5`ul|!UO;zGSu~ZE#UC+1F;VxR ztKyLNlBLV;d+?!eX3XJyf)rV-Fn2YZR;9xjQ@BLZC;#)n@y8ww06IRn<=22)CG5Nr zTH|nITS>{k?s?#yNmE3$!t<|b{B6<=qtG(5g^xfp;nWju_{TNIxrFeo(;7Z&L8v?0 zHk0qipL~Ls>Qz6jLN~gha6|XhTt^ilNt`Cz&561oaZ$pdN7c() z$dH|-k0?*L>Vgl*Z*7hn+V9D%D`$IIS#fcR zXy+kJRP(#WI>i7z>a|%n=g?y|i|Ebd$-+SxMTbS^WNe2{HZ>8+hzCdt%5p^!qw;gQ z(u{AYn5f7FiVL5SS|$3?(wytn{UxN(EnktC#ILI36S={Nl2AGx_X z)fH>c{PPKi?$<9OgquZba3!f?YU}pdx;)xi_@xNCEQ*hfJmi2reS2pPS(5kJ)CF~k z&UfE=_4^-Y;!2uz0X%Gtq${TLaDZ;hu!G?RS5;qk-QPEE+*nmr$%bNFd^{&Ypp&ov zV_m!RFu#kEKMDuB6wrT^n);pSG?Ty1i^x_@!XToZ-FCvC`rNRp=*7t!v(qDM8X5vb zP7ukig~-^HphLumhs%5~;%N(+!(LJ%9`1C8?g%2LaKMoDzn{JI!AIX+wqk?F9q2*P zEN5!PT?jkUjl3CW({jnS50O}!nEbg{s=9OscWoPREtnlWwLLL08bz&$NB&}k50;Kl zxi?^tuvy6{CS6oO7?B)o$H^&o?;wgHtT4}Ek%71j41yGL6=1{==4w8?aDW7XhJ;qR z2$1%$!w$Rk)?1%?>M53U974bDy6ZrtFqW+`cv`W-zif&PzM&ODOM<=$@|coY8;~!_ zc~~Csionf!j8}gY9e9Ue5|USISVgGorPg2fZjAB=TV@QOS^8r2%-xUJch8$QkHhbu ze)=hgUXe@CxuY$@!z{npp>rr6J9Ji70B~<)ettfyN-Bs-*}LTZGHh+|^p_#>Nkyel z``jxS5gxu^-Vga})>t254(%btSpltyQ5NV$hzhB{daax`sr@a=}3Pro;VfF672Ae0$8Bkbf?;acar(xNlA@Pn40Z)FkI4UlpqTbzrnGF2+ zEh@vez-@(L4&8@ZV0VP?%B$9ZSkYRMz`!N;!1ThL-6hcxYt3Uf3||aoOO`BwNbqPuz)3gcL;|m1w&=G4nwHUt;|r*331~uEFIz{183XwR zkClXgj*x94^aX1t48s`=0r164(fmqB7RnY>2yNlm-Ufopou{g1uI`S_ibDqHo3C?Xjnyd+w!Ig%6?=(Ok@_F+YhJ?6wR8)@b-8(ESgwDpSf;fnVy}G(;+4AL-u)M4?XLL?jc$mKxFk_&Z zgEnkf4;VuMzZ}zHsFJ4QI~0f}EueIJ+4_xJa3EV&UbU^bn7wvJMd;jFU5&Pv9*r85 zv;2%*TZ~4V84!}@&tHH8I*gYYtq|LCva`|FAymwoJ)7NDZ0KmHs5=YR6+}jaTYZpGI%i9XdZM5{BHvQPN{AOQoT6XMIpYUyaF09 znK!w&_#q*)e{4)7E=pV>PK>)!9KCNhf!JTwMVgh;1n)N*j=oS?Gue`v24hn23+T^Wk9FUuJ_@Vs<_3x1w z7a0W8Q0Pj}l2sX%-A28(%LLknY#)k{=!uC49Y1=%u*i@%CVi9BBjcU7-%5;&=W|V6 z9d~j_qvjt?0GY~J_qWS09XEU^v9y+yC=mrCKIu&tsHSN zqJYj@m0!A}%obq(`rEIcf8p88w3JAD{ltl94epm2Di?s5B@EP; z>jy}ge*LCkU&vkIg!l-f@ZA-I7=q$>(`K>ZWy#bUed`!Te34P@wijOhjKw3(-bM*p+Y} zhg7Ub-Gi;4&S!cI95RrJu`5K6DROqRZi0BgSmi)EvJ{h_VqhhJG89PFssLsf*rbR- zv&Q}{=Fb2FKq@#ZGPlFgyoTZ0_jthCFTP4tBvhl7i4!NXzQWoUl0a+epjF$V!0jV! z^Q+>Aer1R+3W}0Sy@@=tnqn*%L3R!LY|Hj`I|yY57^reEX5XJO@4v5uI9{h&l@;k0PI5B z`^B_rv*ygzc4+0vQbD=F2}G9Stw#fz7QTs(KKdxMB);8K>tf235Bm2PCi_+&s|{o1 zB9S2Hk|F@ox_7rS)lQCX&cxL1*in|8EH+R)kVmQk{rVB6GnqIW$0uz?+YdfCD<(M5 z?8ybVozATu*M~nW3kyxCLkZ^b)->*1R!A?csjUd})VS-hjpL3f&yL0U9%r~CIwErA z#%kNn9rX#J+{9EHP+eCK?<=;^9#^<`uGbQs-Ad*j2; zHgW}^wUDVLwbK(ZLE>Q`;$b|o0yH5WsM03n*O1n)Uyn7MMY9$}HxkIA9b&*U%sf_F zE5IO3LZuKe9zH=5V-6je*N(GGacUAUSfjd?7wx=t6)0!m31qNq$b)hRSJ(6B&*u;* z{;vxP3al+dP{Bs1RXPdqP)%%4az2CO8n^}`rX5yT#O%WWv+yo21iRxWC4vc*1;XB$ zH2MCAAKO&4m3BZ`u=LdO8k)_V&rz;+pS$jVm`lw5e$7>i)@pn0Cfds%cURJmWCJUp znemY8SZ}-Q-cP4aqb2f+lW;z@!hlS}fB4qmW=`ZK??n^Ox%R5RpZ9Q*RiFZq(0(VY&6BO6N5w{IVrRgG4Nz}kX!8;iE!Y;EJFqV)9c5Raz`zM8(^ z+*Vq$;-}TA-4Zu#Dem4q6;)${*MDCeZqa2nY+y9E6>r-lQAc8T zNn}`P7z*fv4m=PEt+Jw`$pF?krYNthVglNl=4s$n~=b+Gv84P8>zJke`J&h z;aWPj^G$9oe(10ipRAvI?uBCGk(n6?MPYKcZaVa#-GdvbqZt;c9TfK#!jh8hJ#(^K zpfkL3dmF<1;itkr^5OAhT5=T z*XTp~BSAg+{)`Am-G?8%m)pB59~p>b|+1uF)S*o zZ||I8Lwe8qapnDYT-di)2878Sf_P=IdlM34(o(ZFZYp3KY5x4VS6+TaM)%ZEN6nv4 zI%e45-Zrlo^3(Qc(n6z|XZ)AHZ4>Vw3nyVkV`DuVBw5|#Q&Qry(i1+OzUa$2D|`1y zqotV6r=83{Emc5r8k_%zuJ?V*0ct_Ju+^%Gp?U0ED!Ov(;y@?mK$il#lU7V;Ad5*9 zA-ksD{n(S=T=Tah6JkTq*UA<%6RV@1VE1l8H(xt)#F-xq?;l$y!n-OOT1<+*FN&~L z(Et&sZb{K{;a>yR4o!M%yBGT}@0z@A2*m7}Gl(;Mw@Th30%;XB>4zWByz8NN-Kd)# zYV;(NwULj#0a66>&x54G(-I*h8fmf~VVr}yM$z0vpGfQ&4mX`8Y?13ee^FLo4#RCW z=rpmnRjmr~EKyhtU;fEh05dzN%dc07*`|i7ig@u?Tb0;1w#mh5t zJgc%3PBNmjyhRO!Rz{ekdoJ?7kbev9wBo#|L z!m8TnNOE$4CoBsww?z9)5*9otgD`f+E&Isc$c&<~E?u)~J_~j#GgxN>o zntNE}_mxV2_uaQ~)Z3>|uIyWxMF_b7iR;EkAN|kEFTdiKgmSSG(ny!nxpwtWXPkWw zC(Sh@;&o-XcI{e)!Pu>DUpb`7qXeX-ru5A1TU=5S5){n(#H=~%dZi_ae|Wh-$?Xjc z%`4gY*^ItXRAc}EKmbWZK~&W_*@>)I%j+B?<2^?loLXO3(K{|AD3E1D<&cQldymR? zMnx~)yt6QW^9f_qyzbDHP%h1KI^6aBLv}tizPl?jZsB&v8%s8(gazZb@^{idOTjzR zCVgwCBk+Q^-NzbUINL#&;TlgaDrC?@F+sOt^k_4eHY2fsre{H+epOO?^yoqUZNgi0 z0oi7kWN^S&J3ZG=6~fJgjLCXx+d{HO0Zxioqq>!l0a-^0E5-^y31N7}FC!0k4Dwuh z>7@*bu!}osIfuc;v-tc`7~nMkJj-TQttj+45W{5QTZ0zN-0+cR&$LNY~r%WqC@&!`v_QxQ7ggJi?Txx{NP zNKH*cN$N)-Fc>UXlvRB7^|#TH5oHyXy>d9PVq7O%^M^?z3QD)Pc&m8HK&i@ac4k(3 z_cYV>bQBW)K_@5uk=Z7H^l4})c+lV3lnjh=|}&3_F2jW(*Dq*|c#Z zG(aJHB;ZuZ1UV->Jc4aq=C!KIO7!EV2m(gUGV}q7uAJZ9J=|%{C&WCE69`b7cf$S? zE-3Bj(1AH^!UW(cj>*d(F?gtv`Z~PiisqFC9_U=^jj0)8mj3Cs$!i z`*K>h#BQNsp>*D@TehaArf`@H;{s%IoGg(I@)5rk6_x&?fT=hz2Zw}?Jbd)K@4cIz zmRem|{n_VJvwQSFU`Fc=4V4v@43fz69B9-Lwbr;O*;-uOdKbZDC)N^Z$q5HK0$CgB zF1X>7kbqj1O#lA(zn^o?Ih;XJFC5B7zVg5yIKbWmHq;kRJexW-l*@vOv4+9`fXs&m zx3<1v>eOlZ`T0ytU}%%EinCMw3jH3Bda24bC#71G$7X$fUG0{_qH8WZ=CFhMCB{T> z!6oNWWnIZOiQ#7JR2_?fox4=Y(i-&I zYdtmLp%E^J6V)?vZh$N^xs=wsW#!7NFFx*w5r+hF%aKPmpLp=(+Gbg2_d=nMK z*qEA@804%!=hSh-24~wEE5)|jCU?zsjNqSvGI@&P+jL~xumM>qNeP+h$S!QMi zHyE|)mW@%VKGS0%*=;!)?Dt8#~Jh?2d2LIuS3qhan|r5Np-biXiS>j6WZn{5#>md zot4Vuy0&1uXjl}5@qn><&Gr>5*9{to-m{e$+?1Udh6 zTVQNt(2zmh6B9yR!9lB6Z=Lf)o=41}c1bOO3AB-JEu1Ez=|{2o#{4c}rZmXo7d@tW zc~)Usqu2>@QXAXbS6+GL#TQ>hkIelrnA~zp zA?i^Squk!hf&m5bLk~TKppQlmQ4-&vxXzd|Wy+z49twUm8aR}I03dfKXtv1~WhpBP zsN&WymVf9wP<-&9A6MerOxS)TWS}wUim;=P7MGoEKI91fD6QK3y1Pgv7}XLUNYEWa zF)WPFKmUBZX=DBa-|z%YEr1p^6P1XrieCUw z48aN(b*fR?U5IOHVmRGWdZz!n7dtiC zi_#Ipmjm>4UcdTkItpmNPRfP~pIR>pz};llXSbt(24=sZL!&rtO~Y0NrQOc@_Qe-p z*Nhe|T0DOII1OuCjgLBj8X1XV8--O~N?N`eX&j#rI)^ z(VlAoSONMVVSp7te^Clp0PO_m<9=T?IZ9zVKBI)9)kxGmbbmTEuf+Q$Z2wg;=rWQ_ z;Q;W8gsasVEs1GOjN;Tm0}NIw)KY`YgJy&=ilO_z|NSo`5Brn=YsVoiOyifMGgwUH zlcb$2G^5V*OA+7(eVMJ+M;?Fb`Ilam^G&7`wsbVH2eqKJMmKx-iDywX-0+WUm8H95 zd#Bzy0+Rrc05Xe$MdO zx7326ZS=lSzipUCOWAR7k(ZZu)R9Mu*CxBYXv>!Tf&xBaK`e?sdthZn753mkuE2`Q zim=dN2KH^m+n69b*6pn_Ky+-dS@QBq+YC1Y`$w7I!Ts(lF1pqtNR8VbQ zEr_*Q?kL@X^9o4im17b>V$#bmyWMp)HNhc4TefWF(D&d$gQ#>vi=E-1f4@GdsmaWA zWG#aOnaaIwI0JVC1iCmw!hpk#uNw+C&YnF7XT%_6Lr1C=0(tR$sA;dgf4_e0y#-;D z0fhM5`n!a9u`<@pLIfm=CPvc~frQE~yFJWkmdTW9m-|Q} z!om&xk`WDBFbXkV+-HMIi_Ff7WZvo_YdjUG-2j8Y_HwR>?3tR9OqJ~@Ed_0TLp}0m zRb>@q?5wQ~2@2xG5oihv3-Q@P`v*gdavScarKSQS3n1gr&&n2fa3X@DfToPN`DU2a z3bJ6JA8ybdh}pPlGYu6Z1!1hIM`0LQ0^@M>>D_1Yo!U;*cjfHF?!f>$VhE#z#lG9V|Sh)w&yN{`&WG z#*8{NDlCkK!srNL{LfBiTx>*cuk>$cF8*oN>Oh;FqY~$xd+Y&&dpc}pX+T+;I>N6m zN;3i)jOia<6!*#Tp{E=*EGa(f!)Xi3Dt9ta(6*Zy+?0SRoy#6LFwR0o{ozqtlUMrd_V_jY*2W<(}mS9JFrS!I|s^V;CVaBM<&79Jb?6 z7;@E;jqiN5Ju4-=zM;S!jJTW9jCSN`yKLPYg8p9Raq6Q;r*U*~O=J$3D?Kvt}=u_rraN z(P*12A&DS+^$VGP8caQ;E zW^T8`U>Pj~r^fU1^G`hS#FI}x8M$!7h7FkJopsh(+y{t&h{Fe@G+;)L9?d!m4K;E< zUN!J$Fmd8U#CL2_(Vyb#6r*WQcB{iybSvl$$%wQNpn;AT%*chZP`vu;tC5y&x#bq* zBpzLCbR3Tbsnw^}Oz4QgY<(gCS{6L4GJI><7oeRmNoWsn?C!ho)|2nDa%<~>e)!B8 zc62vz38g>$$2=2;V}!_Bf-q|v7RGnobr+=ulI3DnRu(=1&?upXW-|c9>P5BO>>HdHmYBcmiFWW{w>}jtT=XO6m)Ye+*uK7AL8!VGv+_h(tkPTyz}9pmhHE=aYrftT;)665;Ew zzh)34iEqB0GYpY504?d;?@fN--;WkKjD`E1DD8pKJ3$&Osqb(GEFqzuRuQeqjIp zfYA)B_S0snUmq!~-P@1i{9y7V5X;s$9O3@hpH|;>*B!lbdeS8sEu604O`A5`UKZ&k zz!q4&v-YVc#m?RL>5-j{x22+@Eo|Jdb4)_tuO=+6oePbZaCk*be0-DRU_@35M$Ymu zl=IZ?1eM}Jh}6=i3d_ev{d#x)uDt*Nm?^5;VoKJx((Ek~ z;o^)|npYKjw6aiuW@V&f%ZV)U!3R?Y^zUyNB7`8%9x-~9;B98RL^_?ABx7$2Prjcu zJ31!jq!Um4_PZGFR$FK?E)@z z)mt?6Y(y!x36ae}$fGgf2Q%j#VZwJaW`>0XFPJy?j5AJ;az)Zud`spPQxzKrr1-^x z8_J=CFb`qyAU0$3!7KGUWXNDuK%4JPKV*b$dqst8pw6H7!|}%*3waHq-!vXl6pAU| z?MX`$H8(~N=bn2mHA_MzxCv3G{KFhtP*A`sgM|YwusDLr$V{a64min@YSp&dqx*;d z<>bRN(^I(Sv7Sqp<%Eix3Z_0 zG;{aNIZK92|E@>c@$5)35@Jb^+C3^G;|Ldbcr?_~e+62)fm~l3>Yc}q=ri)*ej$MY4UMcq^#t%^G1RUrLs*O&-hAtA?GT3&}dBfuZIPrwuMeYsTqsJHim?MYU-B|yrC}QM0 z+%&rz-<>?GVBKa!0oGBLBuXxXnUay;xZHzB&%~`*U5M!hb}mM&k@Xm+En`OZz35Bocz9TlDxsQ+gAnKq+`Of{uAYO9EsKcp3Kol^m)~~} zVk?=UXhzqGoQKw6#flZ0J%-OH__)Ia>t>XvKytejrp*^zZ~^AG$j2x{fkX`obC6V! zm5(^$h+~gE7I@+jVo0J3n@1jby%Bdba*uw&ui_~e z8}jHfgHrfb?j9i|p~~oBZvB9YufG^M2wBl#&&Y$Wzs(2bGW4qzq*BgiKvq^3QXtD7 zRwj4|A^B&YeTIG+oj%%Uboa0nK2Q-P$0q3g_upr2N$rpp+ae`|su=a*l7?fcntq?3vl|4M`3*pRME#Gvnz7x1x$c=~o{9FEeHz*cjfCPcVxV^bKs!EXHRvzw z*)SrZJVj@;I~Gt=eDWI#*rnJVeEadx10}$qsA>(#BAiHIT7POM2HF^w856$w<{QBL zNTqa|mUxP9J&?hp%<)4moeNzXibkXEAqkM2XJ;&8$Au)s`zFCn2d{pSz5tyeO!4XR z6peB%TC()iGtRy8?>821D#C#mqX`ZN{E6hsK{?m}Jgm_28YP53T#I*d;h_p2d*;PE z@4a8YwaMfb$$pO)RU%Wgc?;$rd(x>7Jp4G$e3{+F*tK~WWkAF^5&g&bAPclPxYt4E z+{p0YJ8rse(pzt!eTJ*Vz}4TT5HOSc1MK)hYo=;%WduSREfeU+pL}}o!3V{~$08Fj znXXy8Iw~S+CzpC)=~{>L-`eFyQo@l1eF2U|M@M!~Pa8OBARc}P4H-Ic(BR;p;K)dE zy2ZvY%3sWr{fHzZ#ve4)#BVR%o|>E#8xuW#wfk&PYq;R+#(x zAcn6DgVNVgyhcYSbrV@va2x!z0?3o$q5)4H@_=*s@)b`%^X%8tzyAD_Pby2dA2f6* z7OAL2Nup27K|oA3O!I*}aHA=OF$SmLHIF&RmY0{edDAAyYe2+kS1f4<4MUW_+BEWWP1rirO;_uN=)-3@?MO& zqniQ~S-h>7Qo|_VX%&cDgh9?H^3BT1A`l)CURm$0s>YwSp{yB~Fww{-SZNFx(6^$p znqye{kzy(m^{WPQ;)e}8Kx(!nNyLyTt~p|2qKday6k~LcDYeN+))wX;)yKGoQ94ob>?463KKZ)gNV!RCiCX~(CDe6a;Z5F4lV3hb=%jhU3zo!Kxt=m>_1~hTQt##y&g#Kp_Xl$rWiVvM|+=#l8t&IV8q%pb$ zy&8XvG>Bd~J>H%4*}8Qbm^wfMAwdo&3px%i(BcJu(?8lMEw(N@Gqrzi*3OE`sKA=z z#*PdLb=AA;xmUqIYsp0ZVOGs}>&3j9<>s$@XhQgh@zhuK%}%)Vj4^|A5?2?M%P|Fp z4>}Qd>NuSYfE)qgL@dVsG}qlR=GPI@mAZ=qT^#7*z^~;%i-pIpMb?%6e~kkw6JSe> zPszX?W%kFO__C}-FmD8f15wgOPfTJWUuuzpT9ayh|T^>%Fg#a>#|_ zkVe=wh?{ct4nItkN0@u?tD+9NC!`6F9R6y0L|ibsFy6WCIyE^Kg*sXA%2JgBTQ+aq z>eWRB>%^5F>of#<=pY;%j0C`g2x9(9cwaoo7VK~176bQ%@L}4tX}S(UTYB!f=a!e1 z;ot&o0@67!oDIbLCl(6Ot?LRFOGxA(!Eok<7hXVzl9`#QbfW+ThEGV$&pr1X+8>nE zoPy^oVf3VAhlYCm`0=Qr0aGsRQJKLHB`C`8xZ@5kB!qIUO+O@iin%p>>lnW*e)g3D z@*rWi^ROs_ndAi|2>FGXtg8OX8PBM z9(>Sw=bU}mAqQ8Km+R8ZC!GexVf4_r06E2Kn;RVWfBw_IC(rqQ zc_A&1;jO6J@!*sNcTHJ5Y5vOCh#-&%ul9ufQ1u6Ws27|*bFc&Y8E~j#8lH|DSOpUQ z+H0?|@utfyd>mtO%%c6PufAeWjwCwD`ITMIh=7OM=ac?+&@&G$fmY=E5Th8lUleS7 z((H&Qz)fiR`T3Bculng{e-)UsDeO^!Twe)*oFgfmRsjRAJn+PN;1v&fwcj^26_5-y zsO;JNQ*26=riGI_l>IEJzZZb=nL&W<)!Xj4^VpOAJY&{e=4eI|qu6L-kWW{ZQle@! zqqt1l(mSbt{;B!p?n?qs=y34uiDzH>*FE*6?dFMU%op8$O zKQ3O5|7+wYU zQnA}(fJL*mtyI*?s#j%NSG#7qDiRc4p>>$zmo3twV$o=;!qo6bvW_yUaElD;h=h^R zq8|rRFI=tOS)C9Yjo#e2@(|@XUn1t`PDFFQJ_R)D5`Z-x_yW7p=GjD%+#wHT9H?? zva-PDbT(ZRtt?_7<+c^@vrEcXE+auOrac%kh-iAWi82cDo>#D5bg;6-Xz>sFgPhLZ zy>bx_7cW`_q^4@d(HZ|zOv(;(m`VS7>0j@@`_71PDo6^7QkRjYe0$M_e;IkkX=B-` zX%G{mrs{&lrVU7Q+T((e2%99gw;FpIKSnp>($QTN$OCe-jv04I!H!by8|1sBrtUdF z6Bw|iq`F|e7z9YGkWCg*JWGx1B2=*nrBqI1YEoSPe(CE9Hy=CxupVg%9@bFODt9d; zn=_Zc&_ykC%tDUiO18iD5eiv!H`ZjO1YL6W_;bhhE8Sk=48Yq+Wh)mR;$)IMBs`E)M(#9BA6b{S7d8q5K1JKtx0HSb^q<=D&4yo~)$sr{3H? zXvl(zr|*vi%PxsQ=4tQvBYQl2U9a1pT{Ad4wx&+xJR?{%r*HZTe&T&|(HIdv*xE%i zbA#Od05t0^|K?8gK zuyCD4EC=dQyjSlGc=O#Ex8Hb%s=$zAOH0dFtlGeSJ~EhvWgi4YvM~ZKj*sz=f%{AR zHRHemyIK^@cmaFnnP<5E4o6@J=!nIZ=^PGEF=rk!WC)sN#1wQ5Xs)?O6k&%Yi0HZE{ghp!Y%X&0$7Pb1Rss?p=lUeYL_?z=DIxDz>77Muqq6 zv(F;JLandB-8z*f*LY~#9e|aKFFax3N#*y|_q9!g?I$65^U|UTGw?`?9Kgo`G2S*% zMd6DBb1M9DpuR_~kLL~SG|{6`HK?13!Qhbq_drr3EMSyWU&4O(FeT#A4x%jlIkrf@ zZhj)>ju*fJ+P^>K|!WF{eIjDbHcs0%o)n%lt zV}xn{+Ye0(o-szD%b=PV7AP-uK|5jJiw!e2b=u?rU8&7@jpW1z)s6a9U$p_FGvd{+ z-u;khkM@h?RXaXAeAqT({{<2tc^KTVMS_0(%mCAVEAmCFWIXoRV?>fl7myl2`<#=L zqu5YSeDu*rWTZLr3yUB_uIlQ*sHl_RfB^%Pw-(uC3IoAFpd)yEDc?6?V`nM?z<=L< z_kjl=!LKe0Z>+#rc<+t?xF;P3{esQ&m(xy-jg5Kispnu4OL@7}?B^ck1}u8wxt9sw za>G9f?@^upTn@kdI~(CDihTX;cenrRp0#=F-D2BnTzi{B`=W*kMt>-Sr`KJd6c>Bb zKdzc^>M6W}2Vq8Ag>RC*9)@+IVD);tcTWSk42yg9;m&06Wu&LO-3^?JqeSD!jm0jN zibF{h92`=-ZQHw(CI`EmZaLZ~40%S-?C~g`0=H_A>%iVNX4LA2+ zS_@V0=6(jev8~Q8=$4eYWovO#QX*(DnWS`^iZ=J_-)|?Wq(RyP1DwTMi^+v+t@(|K zi54qdGny^@@yB8N@9$~QV|!k+>?WD)B%ZiZ3bSPFf69rFLXg zF)?=TXA2ApMX!p|ked&YQpgKd0A-My4Dfyv5WvlTSQwM6uC7+J)h1u;OMpP(PRCjJ zQ+a;b}IRP&pPiphxCA4oL0 zAYni=q&1*oHyioMCFb@;{9*%1i7c9_cd2`_b~s|9BOwpk_$}GKot+yRfD9YEcqU(i zLV~-ebq5Kb6qsMGNI`-nA@Mu}vJq}_auAhyl^j|=Y6r7&)vCisjzmh~t~^a8P*k3Q zPfkhZ4e5Q{`0*`Mcj`B~NoH0iBmtLGJ?_R`4bjSgO*lDn;qWxN!-7K&JFxGPg7wAajZQWro4pcAjoG=^TEr^C zrip2*w6I8kT0|esk~AXNHK2D^$)UZ64(RD}*lX+E>}|FH^?A{;g+*d$ZAfB5q%?*$ zsPswD;h@)Bmz)@O%F&001_!_T_O~h7-D}-gTYEUOoRN_M8m)p3JHe^qsCR9K^UtYhLw3$si75;TIjS^kh*`6m;<#0H>T@E$R0{|P6rdTY{5 z)Y^FOGV?ysNXy;@i`SiY-n|FzmoacaW>8RQadFwg#d&MX%N~66eIeb8=&*}Iz$J}&#*P{G z{L52ijl!n5h^a>6^tfOB@0S&orALoF2ytcE^7S8lG`Dc`c2Ia^J)zR-{h5h_P9~-)KgE*G?x={*&TvDrXRQ7dMm;=(m531g=5By8R$y>^Pm5y zqLZWIq{R*w9SX)Z=t;3F#M+KXt|FX0dp1YZ`Nc$zg9cy!a&-04&TFSVsb+f;ox`c*RCp#*7(*K9mX~2BkB~9rg2w z%@kp5waAg;b7q!$WD%u@=5W&iKu7Z3M=++|LPJ7WFKLccEkU{x9br2c5Ow=qh}298SP#@_U88v+vQMAhAZ3|LjVKK5fyaW^fb~_YI3hf3 z@SuS>`C$1R9$;HqX4_iT&@;w`0@`bH;Td{pQs{pDGd6DD8Hv+CGzVT=C1az@zHpoE zzYDk8ok7bsmnC!yuc~cqkm1o;Rnr*m2wqiM_xhqu!9k(Rw$}$HMpdAD7M>Zxno8|Q z*ZI542>c?BZy!P!Y24?6Ggt2JZ<}dv5uKOOIHFq9$jLwPqd3V}pih#a@ugE8Z z2K2e^+N(y5908K($f&#Sdk9q&BMB_{*|I2?!1mPhudq{o`z<$WYvlK5)BZ*P+Q8sO z>5d(D-}mtAZ@zreU*8 z`$PIISigS3f<>5TTEiVC?IcV{N{mYoLrcPx(OB|&5)+e9rgOhy!TNRhuEp7RLQ)b= zoSCC>tG2zg6y-aYC7@xZg-Ywyxfc{XjIIFzJ2CWz4-pac1!*vbS~=fuwB8CB8Xgv( zkf3_-vdXG&X3ku-a+OF>9``ZF9G#h-4n6cBYY0XdKwTUW8HMLDe3(Q>MYA(hX-c8Z z(ZNljNR6WhMbA!8#-&QnbL#r2IlsY+M{(G%zA#~d`U$73&j)~|0b7O1lK5a7TYi_Ke)U_kZZf5vQ? zG$;4{DKSraiEI>T^!g~9OzO&?<-Ds>U@j< z*~WrJh?Zz(T`})<)VsaIddJ>$-;9jM5^~cc<=zE3#U!Etvua$VbzPMQtmtT(zc|!sVuvf<^e#j7k53ei!nVpZ3n1k%znpHxnjIz*YiB9QfHlkBMP2 zUNxGC@OZM!W4$6AtK~8=Di8xqd9e*dHG}lb0&LW%Q6j~7xDF)^b+$z=ZbM&q;RU3B ze66a(XkZ|N$HImRo5xCG1(2k5Wo5-^fJGYdC}C0GKo80nUjWvGyrNGbBLc{Xz;N9QkYksjk-?V8H zG-EbSUg+5&9-S8zfli+!#H%Khy#WB8e)?$u5QwP=#n5pwegR}h+9+q4!Mt$(yw>;! zwB`L)$<{iW|3j-(#($#I)ja!{9tUPbXT{GFx+$aPzosieDeqqV+_mJhz*2GivX zZWV?R=Blf%q9gm}$latUpp`t-!JOeB3+N<Jr*GdyOBN?3CK{EIX**=gc8P^=uC|Li+v@Z$cN`l`tdHEq>XrmfP zvS9v?8JRu$^zH*5c0bTQfA#g(E+-eyHda(r&Yd^EM`l)CZS9XgE@E(-zi=V0s6k6b zEHwTWf`a8Zl;na)OU7>Zf&~ka88A;LZ(2K>)=QVK$oX+mR8-{h6)U$EmxPCfpn%TH z&!07SPI6K==tN1qc=6J&(`TfmrQ&N&h?c2SAJbWI46?m6zhM3Rg^Q$sluJZu+qRMt z?6QGV(P-|xALv1h19)>@jj_kN4PSr#jbf?Vx%04t4~dJ9hH`~@&sP)W^+oJ7JoKg=hh+}y_YU(=*evGBN=o(t6+$ zR_BXNagZE*1!EmfEl2`5WnwzeW=U26&>kRC?GNa4z#{n-=b znZrq5&)~i>kKH`-=Rd0k6`Kv#G$iMQX^5bb{5e@@XM_fdMS{~E6NPyJyuqc z5uuMi{MWN5{(D1FId|l^x#7W3=<&)KD^XI(Y>!3^A;;KoagDMaDH(TH0rx!o{-oD$ z9((wZPp2=j2Oz|YYKbfm>PWNvry{#;EBVWAIr2QHL>l6Y|AS>1!vEhcJ#p^5dulj9 z549L`Hv=0*nQS$4=E>ZCf;5T#tAzrZm94Jo{Za4Lca@@#Ip!Gb?{JsF+5`VzAAIlu z+GI2fyz-Eta)5yKs#IulzFP6Bbg*IoL-wU0NY8jY#G^6mMpU$%f)^W>W`v4Ok&GKR z?)m4RCv0V^U!g~>dNosx)L$|s7kq;}@x&8&6d^6I`UzliXYGOJh#1sQEG@9X0l7W^ z5a5$qb1VItR(~~yulL@2uP%B)ZqWd8>=S`RtHp|9%$PB%(DB94!7v5nzCkqUz$1=tr@6F%`sjQuB(P`|Y>h2D>zc z=E}0LfB$|{rhI^x%qorpnC7Fb+th_#*n+0y1hD6#*u zzo;s-?zDv3sPqJbhJ8y;jnD=dI&cs~)1n_~lkkPnQH8N<(xgcmFBNSdIqHD|n)U#U zj$>9r$e=TFxP;EjFldb)NiVu^BJO5yyYpUpZpU@dBm_A+Xa!f}^gG?D!FBHt7h`{K9@<2HqRe)`F$d9)~6c8^T#zH!JvAE7Eq zXnHGcOqv;t!dVtF2EBF3vK2GGpVcC<&kIJ}(NU3Q1~L zeE{VqLuP!kV>Em0@hA0D&tBQ+re|?Rr}>GD3{6Z*DBijaNYg}{dhSzCKhq4-^cU6b z?f<&dyx0@s6SkFXV^qw~FL>aghZO>CR8l;CW}fm(==YkLk@>)b5BWtRioh1Ev*FA; z@4nB!CY(Wm2OoF{QeP?C|893-;l}&E_fOk|%3+HL3%m2~do0XwnhPM|?dmmor8~-5 z0=z$EiuKhufH87KWd+vIKQ3MR^>^RtrvU@{-SfZ$zF>p{TuzM5BO@cenfdLMk3P1( z_UxJc-Ush*DH8j1eP9kQLC~{*_T|(!-+8w=+W)Us5Q9y8T*4DiKJEY6ywhd)3&MjA zI*0&M16#)93pi4P9-mho!T6<7p)@B@Q&X3f#SPV~r+zWbO6VJa7@8$h(!hZO zi6;x+ubnRpTcD8f2QwY~5o0@KTfKVCl^6W!=uv}0g6wtT72ViATN2nWDT7(6GEdpu zuHcYuJL=~zS$6!9!?-etvktNvZ1-WDtgo-j$w<5UvU3Ix8L;N30(R@7BSQ{3l&QOa za3IS$1g-XwNG6Q@K~8&kkh7t_)@Z%kNg`W;*eqe^keS_m=A5~yDTxs{I_L0~S&+85 zQ`l}Hd_IZ+l{79cQjCubJ89hTK%4WaH^0m6*&Tm0GM05cT^#7*Ko!W!ih9z)4i*dps%3?G&3L^pj;|+V9CNtzFI{0IjQl9Q< z-ClU=imU$q^orHR%=fGjMExTRQ90UfRM<^fGLf?!leH#SklVf0m8FFni*CH`FLM_x zFDXL}A^Kq!jiez*6hC6BjBZINZsgTr$6>T6!n6S7MHaj=v6E=OA-!+BZo+N%zQam3 z&=H7wOG^PtP#A=Ev_$~32844)2;&WO9(My;R6+GyKa>v1o?B2j@rOPFeaHRx-;Y0N z)MTu|4AZ1IzGUp~)rz+QBnLm*3Y0H5-gqPNIGRAQc*!M~fY7YQcS*)7CF7SvU32*6 zXoW#&A-5t4kQQq3iG2R~=ljO{g)s)<@r$%x+eEI}u{7neAX^78QB(uN)}Qt?#*Yk& zMhr-xMAgu&NU^xYzz50KLJkZMWT3_Zk~+0M{f+@`H=N`hWDdRhQBqX2*)K+4p`WsJ zOHATlYk&nAV(5g|a;!M@E5IZ<_uO-FM@|FALZ1a#>x8rty02J3xB5mqB@QGk+cGoK zKl^;Dt+75crzcB9kn;&OuIAE|)O2*T;k@RpS##QH6IghgxLrL3d%FL3-nmWi&3~3I zU528(8I=IDVQ}~nW54}=W@cJiW{B;x)!U9;Q+DcpiT1{wqTWE?+)#H+&xqc)96dX4 z^G}<$?W{ys)EFIR@1Bx2D0N6~oHHUW(v7dgMwV_~{O^L4fo7*D%=Kwq+~zO;(|aS=4c<`Rbv>YIHG~q3&0fEk3Bj-u~&EV%{QZ~RkRE{#ABq4 zpCX1$!q%`!a$eCsqd&Ugh8uY0lMZ_Pa?D@*FEE-N$??mKxuO*VJS~|^&(MoK{`ljJ zoPH$n3K_r?c>C?Que|a~Kkc(>BJlpKmoX|N*->`<#gm zYijH1YitPNQkiJrgF?bkq|yx$R{4)Ph_CE7)0cr{2butpDcw@T!@}54wQyoj9T>Pn zUo|@*aaoST4XDz1e%U%oO-*KJ6f(-n%WNgmn4!E!R#s$G6ipq`0+nl!Gl)rz%Ga_B zLJgUD4m=GFjROaA2Fpkqa0C=~8(u_Uh|3iKg;`mdG0`y~B%bo>4qQm6?8R@LTl0{+RMz~~3YU`Gigo_VI zB43z*K3C{xMnc1U9 z53Xb36-f91KPd>Dp^QjAG(0{vl}pzhbaMt1w;O-l7|S!}b6E>u%I#))JMCY35EC>y zXb%QE1=~s{P8fO2;luDvQrl3+&?}AO*FMtDXaX2A)q9y#b8$eHJzdZLaSkAIBVwi|*JtO%!HNKfQ(XySy3F(#8e|(h zFlNi9YSze1y+~8C2=s=1Gwa8CHoK8tF_Q*``Nv!s?66&S(P7t~mt3@++kqN$(%cDh z!L)-DuL?teT#()SqZxwJN6gjd-kCazmxb`on92gObxho<9Rw0msB*zMY zjb}tPQDl2;POl@3E%)Ta;L9!?H|fngd*)=Nq{Kh-pR3YSq7eMBxirf+(u(^GCgz4l zj_}(@9^9ixW(wuO))_DZi5fm&-TEy;4BBdr)O)>WpK;XnSD)at<9&n$0P1d&v*-)> z>Oiy)4rw^*$i7BeWrv?!SZg_K4rkG(s-mJ&Fzp4o%a=Q?!icuW=qv{Q`Okmi%mEDo zc5V1~ModSPM|f?OqC*jsowTeO5So$WZ@TFwoMW(#Lg#YJEw^CmOQvMq8W#z7_W-QY zdFxcf=n{)eTPL?l(dJhRz8&NiOzS`gk+)9RI!4KBO$ISmq-HmI^k_H<22G-zfuF>{ za9GhMi}pbzEx66cx3E+Zju!#Lthh~JA}OzL5)EtFX;c8n8j{C!4`mL{XYnDhbm>x@ zv8ejYVwymL)3C+q!lA2wzhVS4Ad)dFz0Ayv>|VKKq-5}kv%rj8lCB9({=jN|W6Q*a zCXUV`J6(8vw^Km9gMP?<`}G?zkbegpB(4d5`e`-4N|^p8a2w|#2YYIE${M?|F|9}Z z%^xmWTvQtvgtaUS71?Ct7)N%r?aU!5Hy<_l-jjyjbL#%rAGiP62WJe)3J(qm@YGhM z#01+?gSlyGcl=j6|Bw7CV_B<3-w5nmtJ~_Lkx^d zglTWBc||tBla@^}z)AoBe5F;78a0Y7E*wdN3Y7<_NWv)1$&wdee35-MJSq8UpGm0Nlc%0~ zit=jFK&!|hAU8LcNTr8(!hFI8979E}F~pWrfdSyrRA`aV(Q`lQ^y$-yB#F{Vn7{=W zT)-f&h0^#=@=G1jH7NtMwOP5)NfD@aMyI&gm^*H{{^QASp?!wWJdCMSlT{YNJj7pk z{<(MEb`xJj2i>Hlw4mA!kUI$x1YUUM%^PpJ3m_OvOxw_VDORhVQmkIR_VjZu`1?(F zl$4iKV1_Kp+h!&d5WNp{!L-XSp7`06x6wX;vEF+C06+jqL_t)8hXg3``ARDNZ8P~^ zi8M6e4OY&m9e4EDX`f8~Ews-{sy1d?FYd_395H77h7Icq*5NsaSpcUNI8Wdo<1-u} z1~n)y%g{@b3WiusgUY3&@mp9}xOVNDEk#?_uFb2gtg5T4$G|_=bqgb%PFG4w zGQi?`c-=Y_i=5f0s;cIs0x@JM|C##_i6JjCV%rr+b=XA=SOCz6X$x&5^lM#P{Kwfe zsrYINfh}o+IfYgZ62e@WsOP$1HFp@+)QDH&9Xn(YgGwR76r4Zu4}uI$CYn2MQH~39 z6b6J0M?_lfney_DO9=5O4XG$_p$Y)~H6-mqXwdK~*ciHDHK}>g!fJ8AOzCKX63&7T08kvL0w=%hLa`T!dkVh7cCZ1-fFSg9S){>6JYR`KjSi%e z3Oz8Sv5|Wb1=9BcEjZz@D5;~Or~(L}z*2T$mlTHwgzPNh6C*3D$Ab?(2wE~~v-=PU z0T8BV1T7fg!OZ>y4Ueycd77%VRyY91Xs!k8))f@2zdZgElQ zburKum2E$N?BJ7*IyA`X;O=A@SKA(<_N+i)F%!Ed&>6LAZSj|1eluu5U%Bsx3g2}$ zuYH_iHcXTExN9TAosp6Bb&(7`jnKDic4!9$f`zR7m@P25ZU@eM0;zNr+)=t6u0Ze5 zA-zBTc;?1Ur7mZ%8MOBXQ)q{Xn1Sxv#+uMD*MyS~KVsC7P33MU$Lv}@5UmkbgKYV| z>#d6eT^#7*z&_PwQ`NP$sOEw*4hf6QC@f-MmnltVW0|iwXz#SA zW%f8|=nBrzvHoEiL-b3Iau$_13O2bz0};}gF`G+gPWe9X@(Ba$ zy-|fojLjf|TBgj9+Y4=?X*)yo_X5gH{9~#&Z@G|Ff4_II#k+q4LiS^@xz~vI*g@-HDO>#x?QUyR(sX`!-WS_jC*YFfbiCE=B?evz$_ z{B|+YtJ=iw+kV)dQMaB}$8Rf%mc{yF6-pcAXPfAkj^TysY&EtZ7ZZb44t!coi>S6l&ps|gVR0IF86UVZ1CcLHxELD8UJ zLC%Ak0}D8@1oU_qrBQ#N1OXNB`~s|GlSIQWzx*<~4CsVf{RBh!gdzhc)F`!~-^vS| zBxH97@)-ZIuwy#VJ_V!l^Yh^qnS#f{Pnd-`g<==;>Z`BjRVmTDI?peCO?HP`KKiZ% zn~}tG`l%;hch%*|-Q?_ra=vAXrZ;U=ueXE`2^96?4Nr2`3E0)s+!wwmkM(+SqPDM}h)m z=->f&+qab{WOqi2F8a5lCNDu4x#1AapVOvkxO~;LO9{_6tb1 zY)bUVNDd5%_;$|Hk?y~$BjR5V@Y*> z!Mcd>aJI=TQ0+tl-(nE6zIO$>IMBs`E)MKd4s+IyUNHDq$L~`8GhxZC!cfr$W?1LZP-wZNlJKl za7KD^pWN=8&IJCp8_#TPINg-jq^Gdlb12FtneuhQ7Lmtm8#*}msek9L&0oJNZ)5TH zD!jCIONi{1otl%K0VG2IJFnhGpVMt|JLcuv&ju`#OBaf&Z zG?F^k5^|gngiQ;upQFZckoao{BZIPyIs+guAouSo3bE1WaAg+%QYOTi83fzK{W}{8=)J8%$+1BEAEi?(6I`UOAC>D{*<3qt+mHq!i0t5;W4 zRY!z}8T}4;gbzJ?<^Ur+^aj>6cvC_G=T^j@^~UmtP8@XL|7Y(!0P85OHGKQM>Rqy| zE?Jh`ZMkAoj0wdMAe1yhNC>2n{?bF*dx1xI>B&oYDUgs*Vjy6^5Q-Z%Zs6WK7~8n2 zx7+XgW{u4VTb2#XU{Y8V8fUZ~5)xPGGHqEMKN2MniUCb zv?x_X16xrD-$57|QgmC=99t2lB1VECG1FN^KwR^pI~7xRAa>PB9H@l-#NeVYWNOBZ zzVn-3Ie*4IB)>Z`ke1{0VkBcAAaGt#f{~acRnk zi`B^m9yJj5hz++d_lz}Ub2#nHyr6%L39QoEW1W}-YLchs#_9~7tjW&fM18anfha90 zary;g?)l{-6Gm5#uFMP(Ii&L*iE2a{Lo%))ieo{DlI+M@l`n|#@s2fuhkr@7?bhoi z|KQhe6VjSr3Z~FXopFzwnRq3-L?fUP&wpH&QF9%qoN9Y6Zy zjh|afMn?8|Q~1}V4m#1yT(C=NcRQvH$PX(o;a{|rYFaHZ;mF8Hk1jX!2$=aZnvtnF zPZ0!wW){wBempPXMggb5li0P_UW?0~7{KYkDx+VW6Qn51%yJx`sY~PyCc&sh=NG^D zMREF*>QR++_T7Mhy4mnyf!{SU+`-bu?i-yj6`H@$p+f zG5>{^$B$MoNIH_;zW?CC+dqB#uYdI`N{E0U6K!zZ6_u5b{qxbE-uu(k zA=gFU^ee{q}h#nHHkVJzV zl5#4d5GOcHLRc;pvkBy-7K1RH7v98B7*wPjB^;s(!t9dFT9k8CcFk63h!Gq183szM zimoEUQbObqY7u@KG3kh@5CLgDrY&iXqu5U^SQv1_g`8KFg0m@qW-=%GewzB>udv@5 z4h+f4{OXtQ_{7a0l^)SGhKs%^7YqU9)($`D{&CQpH-?kHKl&JLos@$H|_}TypAaCp_7;S6}(vl(40cLC>%O!hz8)I z3Wg!c*&%}xk^x1>K#e4-I3s)+!%6^BF}mIOyi_NC6rsJ=u3byN=q6o;3dd|TP(m%l z$g|~y3j2)f{UeV&f{Y1Zyz+CfglmhD$shD4yZyI+@T$V0S$r#Na*qf;j= zF_qN)VRs&`4?g|;>T6~aY7sD1L?%HyM!1Jvc`7u1ZGm11^<^NAQN|38cq1`|C)uSj zo_2?q52=|r?)mx4iiTd5>~X0HEv^V%l5t_E`-Rsk9kYTi$9vu3_ny^!cCT2xtV(Jp?oXeeRu;!L^9zV!M@h!ak29fgF(~lsjTf;;AR1BB-AD ztu|O>DCrnMbC)Hx_{EI`BZO;ZjX;%*$p{rxm{m)V8M56%EUo~$yPa#Astj6LCg^Hw zs4@;>gXkm(wK1PFt4M~U9H$C>G;7gA3Zry(unf_4l|I0w%Q}$>bY14Z`WN}NmAlNDh!V3T`ll3w8Nxog+1 zmtTGv*J+Gr(HOo%XNxBhAxEi56Eb`5Nr^6hha$j7vsk`+&+f%bmz?yvNcl~7R z#?5PQxuv$Qj^$DV4a8=MeiWx4AqpgMiWfE`fCEX-tZ)BE!*1 z#|pCws$#0pG>ziqE5nyOYEo!6N?uNloc9S6CJNL+p*c*s%H zas)(1%FQO&l~!mG*YCUTx{F91l$aGo-rP!CY=8XYACDhDo^@zD;;Kh+Pc&q92TAIh zP@ow|DY^OPn~7@5F9o|GW9mO+8HJA+bIMH^tiFPpIm^u-x$)~?{Sx-0trxg@YD+Ak zA{;cF`ryNJDC&iSMv`%beyf_srb9*4A8;{`sDSm6 z$hI9jFT3jc-Fx?_SL}8pq6M$ojVcC+9rEO{!478;a-^kXLi^r&%S}k}9SKvTp01y$ zmIojUj0PX1U>jXM^1I*s$|bWdQa1F#6@37j@2Ubc0G!0Co=~XV<8Qq22ENJAk)VO8 z9HItWE_j*b2<6IE6dk&kdk0m7^1x4a?%cTuLnE3^!76ggm=vmL!&jOq7L7_12%F78 z6Eiw7q2fmn>Jvg4ZE|}eLlVu1L58A-5(sE`>Q8;@Q@r$o=7v{=sFf-hCS9OM#2Ya_ z6HyMo1TThiHDye-rrF(QWM*wZ0`sLblhBMYY|Xw%c~4u~k}?3*`crt%I$ zE%Fhsr>7ER(b@4l*ppDNqkk7_(|L=~LK8alf_bV4X9 zXVB2y%ZqVQvS%kN6Md$zx7>0|MMVVq@PJJUV%(OphY12Sh@-?8z$UL>D<0c>VR)al1nghnToCHHW$W(wDwOP*fz*z@f9#H{I$PMu4Zg;)=2d{`?pI z^}VUm@-iL_?)~q3_}BMZd`i&J*qA?L2rD{$>?0qg;>fY1;ho83{eD+|MKTQ z<6r!tvSGto+m$02_q+^FEp4q7e)iM1#|!7==NFfkvY-v)AHr&I3kLiVdu4fYBpmqH zsyF_%2(nu=sim9@l_5*Aqcl6qIjqvh2bn=${+(cyx*updYZ`yg)JC3FOlrVvh9`C& z9nIbNj4;1kNE{ML9LIWp@{v}A#EGvW1KMr3-8OpkXuignKYxC=20-gDOu@kNoKJJu zi2>0%rG!F`%2+MW`NVr&v0??^i@u%TC_-f_u^|s;{*S7#T8fZ%8*eSNk(Qki})&L32jjwdk7mkYt}4=?!W*2@9WpE zr=lriW}+LSkQHk$yX>+%?zm&dj2Y~nv@KK5DQDz8@svq5yz}uJUk<4_n5UG~nTkXv z*Np$(x4%AZ%4Bq$4$%pWTxp!LPkj6)KHK`{x4%z(cBj+T7YpOh)Vl zW=FyT%TX!{U#Y;i*>Gw`61DJ^9Af$;O+*=`zSW?Ls6`BIlpq`}LtYF(TWM)2y9@{f zf+uhXlF*tWEbx*iBR4N20h*5-IUI@PIvh;xxHe)nOWmHf7!nLZVYk5`GnT@=(kZ~{ zNnXmaiX=8;33;~clF+~@Km#Qp%xEtI8s!{Cl0K559Lq`c4l#Z;fQ54OBO|S_%WDA1 zql8|It1=l=hNJ9aGmWARCG5(Xm5Q=Oo|!G|Ge<>?6133-yU0k>WcU$53?qpIg-5gC z9IdLSyl7ypSD8+8)zPB-B$-u^p%6C_wjcZ0$5=cTGcZZ6B2(;~%`p0eY(ZS5=efBeENvL7>Ape#*Fn+z#($Gpd`L+W+zN!eJ%FGSrEl7;Vv-bzUQ&5zq(> z8UnpN+YFi!x}mdzfc$b_bLF(d%vg`NG4bM;Nq)q-{M-$+ab^?z0DK9T)cFu#4;KcNo#PkUd)*3WWpN8EGkn1qc`yKV?k$Z7g)(+}aEq zo}8G(1is@Lz)*oZcDqllN~E4fJC&*~2fV{aj(~46MoXhP6(%U$)Z82l2MhxQITiJu zXM;BNMZC3iNQ%Rrrdm~uo2mtuL@lT&BIf%7ULlqY?%Fu2B%<2wGyv5`~fja)YNd4e6;0s2hDU4S{eRY1xtSAl}(#A;Y%oPhOh>x9Wi1A%SmA*>=jC6BqY;& z66LgrpEU{JWY#l;?B2F*8{;i+`)C4V@RWqw#yJj#ov0uT+GZ;p6|$!Hh7gmsP=&uI zXN}RG5ZSzR+_Ps7KtadIXXXgN#Bm1sFr2n<(579K0~*`DwAH&MCp`)pv^8P;xG&xD z=|BAG0g&X*J!!3Y0dAAR{JbxI{B0AB4d8oSSBOfM%AGD9pFZyU* zM1`bhqpVjeLz&eG?iVMHRk{8!~0Fl$-;*GZZx3O6rFx`-#H(r0uH^2Vn;v#iX z!8FOoVg1uJpwe zS=>`n&Xz-_D(X^;UHq(}6!-7nFJdBKHbEgJm{eU|y<^7?#6*B{WTc90xd_R~Xn-&= ze^}9u(8iRL5H{r{Lm_uJKcED2*uVd+XjT2qOTTy-1`$kOg!VO?>sFiD3yzYf78zw? zXRHiHA$l#an8F+tF^s2C7+w~JrBF_jG!!jNo?(jNi`BLnKY67mM@5gwvlS>{y@3l$ z2=i?oGIde~v9huYATz3sls&#Rbq-YB=n%ByrcVI@vn%ZfneeZ2aj!{OY2a9@(g zK`0r1=tYSbuPy|e+Z(oR+_ASHmnAk5@ookgj;i4@9Cq5BN1LrLEZw+q)7GzkVrFi3 z2BTcRA4k-H&W##WG;j0-t8WM@id^-JFJxFen#N`DrG!#5-?J{xZ_rmbH2dPoM7_Oo=gaFK%q>9na9Y} z6dCX*@l_+V4wGgACSHE|<kMl%s*iKfB$LmYRkSu+Lbeh@&vnBvXbA7Lv%o z^Wn@VoyUJUdROv7kG8h8#!mAI0PXDXHH)d`!)@E&VVil#Fs_5MFbmBL z$^!-_=0gi~g*wUtYU8;3V9DF1E6T5MKn+)UU|1AqFic0l#}={1xa`lyz2M{A8Q$MA>8>C-PF+E zR-~fY5$*!WWfJA6g6XC$Ug}UTZ9%0)w?)41Ju)kvaz;+Uo!|M!^r@5AZrDhS2=(Gw z{rIR2YU9sQ*R~V~R8m|tYvx6ChePynpzNn<&IlL7M?Uny@#DrWS-PyQz8-Et4C`t} zH+$5@Z`$s#Lyhr)QM81dosWF*1_B~4TC$8cB3!ERYWvD}N2$hUT#ScT4!h*ynQ3V% z>;s9CD3LRp#ekNU#^IIa|Mi3KTyXw$8tbIL)tz|OlYx(lx5JzG7hZVb$tRzbp9xUH zHrXOWp7V|v0e{F#iD^8ik3%raM2%;GI5bd^!gw)mG{z9-SG;QC^;L8$qD?L^ws7K$ z7cYh$?UvI-Gvg0$@8lH`b??0MPF%BTI=WHvG{Kg{s0B02c(ronN}8rSrv3fOpbDK> zSYBR^&p2jK60Jcx6W%}|SSTtIN0=6aB;P9)8S&?YZj(NA{`QRHwr+I+09(B;aE)7eb{J`8?eds0eD6h+>RST{v7IveAL zvE+4h)6w~Es!EZX7l%VBiHW1DOO|A3ytrV==&Ir=V@g6yCY5rf1kVDO(>kVQ#A5&sTjX^c(G4($X?sU-w2za$oY1dzM!O#CR zFD==5?D!FWm@?8&EP&agq56PEKqH_LIP(ao-`6wWif-ZDMSu%{OThSnGk@d;=aP`- zI$DqZi9L70dZ$??4InIJvP0XxWv+lk3r@#H_y~*z6+it(;vRM;Z4AvTP#LVR& zUDekiZhO1e{_p2kOdMY}tUTY($0gBcg@MuGtZ$3V`PYJRqjD~sIEG*)k&d;4)SDrj zEAhY)-yi<^^s-(1J~*xHwhv#Ll;q*lv1kIii^6E-UGi#9V|OIx3@LE9SOZY~4s|)+ z%Z{4QTKFI(5bz#9b~woAalHulbO?gk;XKq3yzhahw{G4uX=3GPZn-KanWYr@uuZ)+ z#2UPr!*0*N7p-lmZMgpZGZJ0Ai&AgCO_gMAcGrf@hu%84`|?Yt5{M%l=%{YWkYOsu z_cOk*=ke!O{q@Z2j&0kv)v;~c zwt3gL55_+CjPn=Ps<)o1Srbyfv%lEKy(orE!Ks_ZJW%fr)fP>uB^gX`{9kVg5gg>1={j3!kytzte;^Yv4)ec3l7CkKi z54eu$`RwQ6#|NYbc@v3F&j8;M0xlnJ6T_N;OI=%uiy;ZP3;ObuI+JPsy;f-3tmN{K z61p9b0QeLc<};uEias5Lbb1gjWU@G0x-VQb$zbBY`?k;*-XTh|Za ziX1BVv)VO~=t|kL`9&xy=yw|o${8V(hY27%yuVphcYP0nHL51P+Ml^%M#w@%%n`0* z@w}m0tHZE=swMtn>9(LkK_TA0>BzL9oBtO&gU;0HR)yIp>j;0hD3$L1=}l&URmbHT$RMUlPHsu4T9jzmGOxbc$cvbXVm zx~lEQ^AGVwQ2V%Zb&dU!u%`4eN(Yrn^$wf)tzU)}m1rv7kNbf96g5q-xqHO2 ze~AHtB|96rcL_!fr@4#;aking=R`qU0o_1V+ua!duxW)O=*RIDk7q*mEPfeNd8Q=9 zr)fK6n_N*+uX#mx%aFRh{{3Jxs;e--7H-(jH%%3k27xX8(Cc;C)YP; zXgl<0N#1tCEWQYc&he>qP?7ao=ly2ub%8}hPM5<8%Z9ml@2=c8{c~XEdr1`;Sk4V| z>=yjA`xMcx=YnasOxEu11evIwJ;5LERn>)T@Qqy`570Sp1E^)cXlrs-us~UdY{8P~ zXUsKSa6gY5YL1QzNjtogPy|Ij zw1D_dIS?XrVFZ-eD;j!hS|VfFaUDe)!J(-J0IU2cb_UjGA}QY)CpS8gWzW=ukHJlT zcCru&C%(JrRz-sLaIv58i1{MljvMX9*5yta%*ezPt)#7GmLK3dOmrfGEM~u&}+kEPq zv;GONJtGxb2LWo*B7}6-*V4y8DkYM!m>tXzODiOFs;lXi@-K25g{azEz4ZMK6*0p=Xk{d!ha zO`6JhUW-rCtZC~EW?;pE3{z!4I|*P}(b37~F@6iW|N6VPq*?9MaWTNjfW{Qbizq>l z^8imr)p?R1H%$XiquoAm=zwe>zlD{ad>SdTgCoFyRmSUpSn{-i#b@{j{?sr6Bs@M+ zelt?Z;^C~=jUW5EJaP#Gt0Quc9CU%+!N7LMA>9v;ow|uEs)q~wPXohRm*b2(o%&eJ zt#~H?mZaH9mj&Rh_}9Mk&j90=LTG2<6$L3slCR=L8f`ycw?Db{wmL7O!|jcv%NyuF z(*fH2|nzEL5Azh()8>YNOrkH9e2xbV=`Xpe~6PVh4dR1~>fRQY<*7ZY@a9B~U0? zZ{*m)nc8vlm!UjwH)}?P1 zG2hP%5#y}73=Kopq`3xSuVkq`YLIwQzn4H`9?PkU@yctq|6Z4l|GW%9oqg~wd3~!9 z*|8$-Ng8F`1c%2nii3C4cL_rryBsxGgW=s6q~;R1kb{zxkboeiwB%J3G?MRpUp<7j zwWt%O>@!dWhr`j6*IMc&ip1um11LPu-f^Aa(mRwyf@${ydTK&< zY{I8^+AuekI63nnPng_9nk@cx;P{97^3PE4-+wgVQ=|bM=(tJLgr`DptKHnI*R&IC zp5nHZ(sya+%iYK!jOVb3Ckx+d45@TkK2zqp@;n*s=<@K^zltS@WSr`~86H@)W8cUg zI9MRmbise!=R?=xaC}%W-&ataCoH|qEcReGdTdpAy5wT^?HyZatUOvue$HZRCZJn1 zfTVa&^0jv&`f$Q1UNm>buc)%UXGKHprAQO5B+}B<)XdA^zJf_5V?aqRX(|HZrQ$Iy z9p7gdD{wC7zHp57!+jk7=u+vR?~tIX9(!tTR%xcrG>l&khR(aZ*)71tOat71s8!8k z2XBV7D+lF5NR={kIIIO1-!5(WMY|gv?hnEYLk{ROb=xTvFZN%b5xrn_^CJ!}>e z?sdv2I?Bw4}2Ck zC*PKGhS~x+3<#%8PDC)YUtw!562n=#8Ze^3qrcF=8svm^fQWGP<<&Dhz|reE?s2aU zT0KfM0pQ2{Z@K0Fc=P|QaQ?H7dN@LVR1Tb~6;X;psOxjM)ZU(1l0}x$LI**7R-zp! z3X3J$wCZ&*nV(O6etUUsC8n3x6;OpCUOyw-_Fvk&XVR8%%_hXguFcu_+V9@AJX^ir zO|}#j74_t3K+IYN#O3)2dMDWSQq|CD)af6L$T!i13`dqaa9zyQpi!Y%D;btc2F~_0 zt)0SaxLk3_DZ~$tg;2Aa1s2LlL7^l~qgzbTO1RfIu9gY>tmPQ#?GDKkG z;E}{F>y*<$bPy#UB7fOB>zjHhRZFiJV z{W)>CX&h~wqt?&}u>Az81+D78!`Q9FL(Yk&xw}uRHbuMcg3=!z7WmmuWF#de#GYG` zs${Tt!$Fn;gQ#>p?WP(U=(3nUJHuRBz*}?!j++n-`p?8Pnk@FeKYXrA%g;bM;B`C( z4*>3~E0w)=1CVtUBXP)()fjt2`p&KJcov*W>+CjOEWH#r`9qY4nXsBxy;0N3+Z(JX zl*wb%qGm>ka22E|X4c$jwL$gB3JUsax!r{R>gAP1ZEbaRv?veQMvb$w1@in5pjD#h zLgJ7r1_q%0c3o#bvLjnvOA1XZHyZ&sgrkiN~GnmiANxZF;NT?3wO_x&ouc!i0H2CaWp1y(F+t z4SLFzO3k!p>VEs#9>e$Z^YI;Y18>@6mr)E==rcPQCb>vtvxpiZLt-3OD#zcmBx5S| zqnX;E0H;IYZYdCF5n{V$1V5)OfK}PDi?T9m9D_~QtI3JHPDNu=6JmNmq#Ngcm6on9 zJZ2O(3KQm797!#hJIQjjwx*VrmWm44cxHC?*VDSKkWh_Q+g-NjRUA9sh0Rtc<`-60 zg-TU^x6-w_7>*t@2I@;A(Z|I ziGU#Kcyoi)r?M+ci_0>I_H!Zzao*gBU0AnUX>zMrvR~&eQ#j#3lKkaUt*SWugIXS> zSx~vm|L$J@f!Da%68&&T9CyUvmpf_HjKL}WyL-kE^s{ZiOxa&s9g-a`V{`Swky@+k zsHjMCo2|)UZ>3y#53>VF`xoAcWn#lr?s!(?c~rlz`;9I|wh|Kuj`&LbzMZ9J2OmP9 zxdXd4YsdRw3VNHiwM$7+uP&dD6sqJg3l7%_JTrgsP<9G^)S90ClI>a&ALzD$C;Lvn zVn!>0h^kuMDp1Mh%nAk+d{9sDnEZexc~gPdnVcWRG)78dX8A)%f7PUP)T6Wh?;{s= z^H>Rl0d@m6)+J5oc>NAFEBRJT;4wjgl9D!sd4=YS6($l_Bqy1Lvrt?WDl7=_>w$yv zkB@ZwMQB}h23FIHKicode;XI@n?3&0*zw}A+3ZafE(mvUxsNrbv-oN~-w4UZP}5ON zOh2}?uxCCAi<$^Jh*)YGcCAvJx3jUO_9PMCW@5X9i!Wn3f?DU1v7Qy3@6 zLozrU-Y*6*DqYGE8Eapt>{r@1HYkbz`qWko0UlG{7kPLMmHpers6Zk};$6XmV{*B= zlKQ6on7NismMaU(rY-regXzC@uK${{u1!Eg&2}GOq3^7ZrEv~j)PVoc3(Go%pf;4_ z#L!4CU%KD51$lLO-;y2!h_|OMB&Df?vDEB%>$q?g@0Y}|vJ>9+>(!r&i^Mv*9hb`N zvsocAxV#p1I~E}_p@xzI`T|okAMMG-VFmZYQRPN|x)vU!ywWl<(hX8kDp(GhJDzZC zbQ)|Pk8Qi>%p2ZsUyVum2Iu$(`H`sL-frqNAZ%iWflw_2+vFrOF`q)h9$~;Y4 zA{{OXko#XX!i3B-=zoNE?oAvmJ%#HRMI=|f4j0J&9_0){JBTT#6!ld;tTm=$<#`5- zP@8tf9v0;+f_|EGCM3m$g6FJ#>}ebBKZok2t| zV4K_Z#?X10gjuV1P?T(J=nOYTl0>Y`jCM;0ko5uta1XW6;IJ858XBCAM-x?=ExZ7S zb!aqdz1hCm0@3crB~9VzY-V$$Ko(4P%Tfzqsq2+G!?DC)N}{hjJ=OV;t6`maI`+4- z;4N*Ds)BU)l+cDKvz1rI#_{Ip@k0?T%0f}Rf+7`J$l_+F(cUPS_HHsbR}=D6KZdAU zq6>AJvv$hd5lxw=*-*cxus~i_k!L`{ikFK1_pJV}8vEl)3mjaa9r9||YWr8)by#{{ z0{UKX!178846zSx;rGC<)JE<8PG$)@d0RsDU#FGVV_9*rn-^gHj(+n7&ULT6&yeV= zHAlTcOKcs@zj^si6o^r(RqMviYIE@$r^|bJsS67*;86)R`Q3S9I|Uzv!{tfq;o*)AOiVB7TDKHq)P~Z$Fov6a9rtF|1=Hs( z{x@CJq)J^ajwN0A4oX#miEj&a1(Zkwz`+ z%IeB_`Mwxk;fN6XdPa{&S+tU%HB-CBhtpG<8mi0O=5s6IcYB?gB=EdjKTw+i>8aE0 zdTVbio-S9uo>L9bOmj$7<4|5-eo%j^xCu%1byE)^DkMX6cn$mJ>1swN#X~~aTFYb* zKc5p3PK>Tmg2u#EjyY(19f-(8J5WO_Zgr^rP=Z~_6qpc&=c77%4Vu#2~{N8_<15Ir0=uw!Re1aLQm=m3`PCN-YH9pYLZH1{89;p^404+AOTK zhdK4jZm*=n9vhS#@-t;a2+A~!Hmj@kN@dDb&E-VYd2zjwz7{)js0&TyT{$OLEE+M^ zPmcf)?>#&*dH(-j4F7As@4x{1t%Jc$+Zd?vn;rp2IgTB0l2phC-y5=tAVav=6&ty7 z!nc6n`IrPrz_GrKF?x7Fo$=QhFR}eW0cW){Yd6%YcD1`Sr$n ztKHXG%r@idp_2eU)!mSuk{tN6B>4rLs<&dtGB&eBqGlse8CQI7Zz+hKU~g=U+ybRD z9?$JE*!BeY9jmH$MnO~6;%-kB7X)8_{-69P31LMyvt6kF@&b^yCyy$nb-!I~T3l5A z?QZU)i#(f|wA?h99v`2bnf$v`{R3b73J@r|<#iqf5*7w$;N8O>k{8P5MUOfQI-Z=6 z4eAWZItEd3`8ABb^?kEZF27Hg&U)5&id;@5sesHgut7mJ*?ll)e((E{p(1(OIcRA+ zJ}U9RE+iZmY!GjRAto*&ICp?ZI!(^uDGvf zNoP%9ii3cEE-j%z6?fjZ4h3c~KMMLIGkGE^Y;F%rXMhsNDRR+p9SQpjh=;PF6V zM$wBx*4tmK)WKr2)=G+oo-){Mu%ls<^k3B*kDvUKXCD#LF9;0If9Hj8htLZUH9=6M z3u)~zUl^&7yR)vczN(Gz%&CjBFPO(8NlN529{R?8o$BBGW|6T=Y1pW9ptP->nWWIa zZEjNQv$-o(=5EA##+-}f=N%&5`g=4_74`MW&LiF4{I9Fp|AH?5snBa9(1B4ne2$RK zcF*VR@0SUyjhs*38lp%}b;Pf}xV4Muq2`f|l;yv5$5H%3>lYECvRRyi=uX|QLwT?n zu5_ABHk(ITI==KQq;>7(SWU6KU>(+q7Zz+%1%j}B%nZE^2AjovUyrj~ypMTzds@Cd z=XRV8^$nrAvnwk`(7hfV8lB0cRLdpCnqv|7gt9Vf#SplMx)4nP?w4C)l9m}P@%pVe zoQbIdO#_+uyL|>wT&{#xD3?(cWYCa;vChe&-$m?7Je3e^H%S$22Rc4olUGpubV8!V z#zn;@!j*6zklJCG>#leo`#Jcl9ln+>F5)8u+d(9ZWkig#IMhcfDX?`KA&o5yU+1SO zI$95Jsq+1_>6|7HrQz{&o%gh<>=wdxEi{b=_q+Lo*wyJQtLCod7)#`8GK>5CBdW^k z%-#}{0kSk@w9_%o?;E4@_7hh?TU!%_M39iHE>sr41}0Kqv|6opfNgQWF|>FJ5*(;Z!Yw3%w%zRQ;dCI5{(aGvjI)aiP;~C|GK_OsCspbc z2IQA?>9Ul_n|o!4guZ!UgjX3E8R{IdDVjT@Xe6%JTT!yi3rxund4%xBJzgygs?hf}E~U>Aq3tT2CHqn$a#)LMx`h;2o1& zTD~M0V{G~IIklsDEs#b=a)*rrV&%N$dV$JXuczeF{5ibA8Ug=T8E)}FP(15on$FWK z9tPQv^9B%x1SpqrZr-A74vVfqR45=D6!$7GIjD zad2Q_hK&k~5B*l7`7q9PbRZ(eX-qsu<>s-Kj~~80mGv?^nW^N@9W-tNY=}V@(Mts( z#AwS?Y;cp_A3^Xwb{;AsXj=in`eb=R$dqq?CXYf_HUJJ%Dw2PQRNBdNWF5v(p8LXs zlEu8e1J<)5Z4FFCWt19`6j)FwMkI6SJzg5_RU@%kD)ULuuc&#LLQvs^&^qBR;aumY z{)%3`-xpA+R#H+>-BUfSGQR|tr{Y-e2Ex4`*|jsxX@i=08{f{kPxJcrMuw^CxZeh* z&n|D?{Nej}%HeQ7h5tM+n%nD3mp>%bjc_nj8e8PMfDKxQ#OAROE<3DCfh7lcYgVN; zgWIRr7*N=Ive|5?$;tgt6(fQG3A=$lxU~&pW)4Rtz!Vo&LI4R$=ax2{bhI#$3d+~T zFv77?tyKG?czJg?-eSFO(kXX}K(axf-TZQYwcY}6k;Fe#*!}fbBg}@!WHRv{2}&v* zQwR*}yq=76*{q0?uJT9)vI>Pgj<$spkA6QgLaW^aI0$al)Lw0e@IDY`MzlHEBVVZ^ ze;|mZi}4uL-I3<0iO|iX|Eno_^dhDLp z>>|ZEGbi3H7@-UX5!Wsmfc3f3QI)==BDNtR9r}69($4^nq46eUsFzM5NDW9OYm{evM2`+L4m+MU~*RR@t zP*Y;P9ckM7K2PQ7-gRLvDk~eK{v5X4orS{7yziT-+180qnbq>mydlnNMAUr{6(qEE z*FS0;RR)h)8fUcm%gVk2eu_&VwBvK8nB&h7X@h5iP@N_WwuK3t(x4|dW0Q~?oQ)Qo zUJWS=>na|05ig(+YW2`#IF=kq!km#(nikglhX7tOh1R&L6YyF5EMMRb>`fq-9U68A zio0*GbBSUaq%vf4!Y65#oSGl1I-Kc3gLP0v_DjB7hj`H4qXx)Mmq4v)G|j zKU6-{kTG5_eAO5_3`T;4FfmVMG$SY;F*(gaObt{_iKNc*4CULP;df?4_hXf9-Fk<9 z@kg1lO0^b;?G`sqCcf{7J@bs{6z>B4vA;mDHg#e5iU^)0iTxYakhQGSf~AbX@ASTC)}S4D`9>7&ybRNU;pcFcd(ZD1yqU z{+~lC7X(ni(MiHz>PXaPuo79UwD=u^R{`RB`odp{4Ka8;m*PO zDp5!@y_x$Bn0q%=UOCp}lDDR}a7GWtewL>N$yRX&pAu7{{blj7OJ%!+_q8|uHYquj z4d;Qp@Ca|Ud4HB%H=UWXyOe;<>NZH3+jL$Z84TQb#k`4&C@idcziEfv1X8!O%k z5UvoLXIJ(h^J2Uk6hy}QYOrcNE}yFI6i%;sH!GbZgBQT}zB=u*kG;(gX>s~>Y8Fv5 z?o8$O)h{M@|B#Lj@`F~}(!wGi?b4qw{y|3OPi#r5FyW>s*ual87%aCM0$W9PsAaF5 zxDj2~P3NSfq&?(G6*V^*QfB7kIGC=jg&^-Es|?(UMh=J6G&2FA5e(2pG14FLyHt_6bn(gfFFoK? zNC{e)Q zp#I0v?cczno9N%U&`J6iplg~H<8$Sd<1oA}0Ui+jhATK}Z5%$9XULA(nze4?=JI(O zYg0!sp#1;=1wFfu?Tj9e%#^+WDp0C;+(5wbeMmTT1nZUCy(ZsV&9(QZr6PHh-)2R{ zBdxnLOW*#mijlDqSf9XP?U0HJGdwdE&VHR?)7Foi6>OzSA`clGwMxc_#q-B*?-w@# zm3Dnc>e~`8w0@Z-)rnDwa!l>V2gmo6YBgPXPG%04cQ;47+xSDims=ip4x##nhEE`^ z{9Exz%e;mkpMQT4DJX^b!2JCD0cRO3O4ZcUZShju&GRO>JF}6&YZupVL%i~1YHcV3 z&t% z$nA35U*uY-(?0V~*e-%poea|&XI7V@5!)=dY+`IIke;At5>^;_PY1|XqTwA;5`~|6 z%s+O5)87RcW8V0I@$maOCC?8e3&qa9ko7k-96I$27}8Gy5tqPQ5>^IziH14lAoZZ{ zWy9@#OrfRRw>cg|VU_x;n`{cc1+h|C;q;4lZtWn*6&4oWDC{`qyl-6lJaYjT&fuWR z`*3bvh;F9FMIf)Nb6h}V)QDhnEX$iX&MDZzkwiQQRDk49u9qeKiVq0(%`bcL4!7JAsU>iO|#;gsjrkU)--j#Eki*^rUkcaot9}N&N3SG37kUESR3P$nTz|9XrH&XSH~Q6Ztt~)kGyKpY`4>{@Avf^{lm&VRHc=NA-Z{lGAiqZ z0%Io(Q?r8L_&gN?98BKMgKFK4Y0Cg;a@hSs7M7NtPD=k6AJIyVQ*mU`q)*RP8Dr5L z?6X<_KfHcf2tj5vR8+*WV%w_?rWtrOIQ~t6el}KCfw@M5tZJKYZ*MKzKG@~yG?n=? z5mx$?o^^1CU^bM|^af-*MiZS%qCb3)P3}9kKWX6_>}C|;u7AbX_6UNGS6lt2VQeHy zqz$~579pY-=6T*=0-)4o##p~l2PvUOM+kuetBeW}^yAnn`nURu_TZ#|*-kX1g4D?l zF(B)cQrK`<${c$FV}rm$9!hWq=*6ko7U7hFuk`5Guf4B5>0jJ}kR?1f+nwErglHWF z8Sp&WOGd<6VN}Qt4(1R~45#QG7^Ildu2$;y*SEi(TJ85C`21z~$@*7Ke~Bs05*rlm zG)5oJ%$xb$UjIcuDdB|M0Z0YG3=Ax;o4}6Dy1@!UgVt9tjw1Os)pGfx@xX7f*`N|B z)Vm<+)FD&x3EIWk_e_Q9X}_C@mE3ZG%5kRe4N{cB9cd1Yew|8n2}VlT_LKhEl`HR0a;w=O;^^ZO!aiA4)d zO*l82hl&k*SqDW{QRLx_^N~nk!(zLehR?AxH0PO+lrLhx?xw@*RA8L6h5El*;9Ir# z6T5RQdI>g)>LBo^HRBu5KDrQm?^Qr zhHUtS)GL={l;H9T)xxfx3I_Sd44PDx5;x!1eT}|uqU-uYRrVGzHOjUXpvKlz(-p5%;a9CZP@MZ|G7}HA0r|- z0L`7<>U%U%?qV1H5mU;pqwb_KT`r{Q5I+_i%gsZC?M>+I)WW-$1DJCII zgj^lDRe*zW881#C1H%bw5$Q$k&-l&ctaqZO$Eu>iRdyPx=vqE;;ASx5sQ}p8gI?i~ zL4A3jg+y#bO>0mEXUqS^_y4q8rs6_sod^sea4n-w%f~FOFHWEVJ(DNJ?FJ4 z$){ZQEA(`w$vk2jq6!AS6ffX zVk^gu>ri*|7DH&0zCY3KYFqwp9y&o`qSstnCGkTW%oU~Rya6(U1zGwsT`VC(dxzq4 zOT^i$`y>J~jCRU^kY&(@n9`|(tpjUFdPnzECHv5k-+9*rlnTQ};6;^QhqhuE4fj(0kV0FKwhYEEN;J*ldpn4}?XqqS15Ca6l6CDB5(Lx+ z%^r@=OvO(G#Hmn3U<{5i*Ih1`x+lvtFZy77Bo2#33r+(f5M8-DZP<;vA4p zr{xpgnek@_>MIG*(7*x1d4sDEF1`|lcYEV>f$pZNluo7^#{_11MIhF#V}>B*S~@PSoNfd>y4g%45{JocYMY(DSD zA+Fb6$mP@U?-RC4DDJc9$gkQ3gzO!FT>H194BKEB|9~OwIQ&){cVwr&V2YgIU+UJF zt7)~Bzr=gJ!DA}7ee51??gl_p2Dh{0<4^BMSXma|VDVzb7Q-K#erw5eEYB&aZck+I z3a_AJOQ%8TE8hMfiM_jhGm*fRLC5YA8&1(^Q(V_>4# z#I|jRXkqz3p2xJriiNBg*6qxyuglEMLh7-u7{R@~YkV(>S z-~c}mrLC|UD+0(4g?SM2A56KSi!IOVzpZ0anH5Hv!PJtv}u}gq(o7wF7qx7{bs1Kp4fP!K%{ zg9SgPKg~J5U+yvpR3ZlCjI~cQW3kHz9J+4N8EW<&kPxv`0LBpjT5CNkuV_Ul_$-UC zHaIwaes*HP=wA{~a@sBP#EQFhRgr913(%45k!Z}0eOu`37p2f%5E8q`42l|IuRRJ`6&1ekG!OsK}Jlj-F#Sz7D zZthHNXy^0)?BF-FLOnZLiO?k6%d`8^LgB$EsBnL5gC3+OCqn#e%xo)y4-43v6bwY-VVN}{2EoNsjxj5f5&5aw)=7S`*GUh z7QDZyNm^_*^C~yc(}gnud7gXp7i&kj$Yx4`6^~Tp76;)1FH^peyg+sglfCj0a zs2HNx!e!80e6%FQPcs#JCsg2e@Oc@9NYl5OjmXE0=I@>C?JbXa=M<@&)Ff>^SN8Ms znBK4ywBxmeIY8Nf9)h1PMd*{8A4%bXDI@s#d+i3H=Mwk=QhWPb=5i6SuvX5?hS6g46)@hx+?-Ja`=9E3EJ_0@qXO& zSCT@=PHG}s@q_$e6nc;Oeu+s>#}bq34Eq(x7laYC9r74_egGxP0oTbKPI{u=?(_>Y za$rHz_V1%8-y0(BbYdqQt%1oK`gYJs{L8353~w%Ic0TyfQ+3BxUy_@gzrJ?B`w`5|_zoIQ8YN<$)AW+Hm_fuFHdFB&TD#G&LM_qP9h}49AfO$HiECSgQ zH}7tfJs=gOfgcK<9%AN&gOP*Rklt+YKMRMRXsI1EAGm!&E7{wVw_!N zozrzI|NH$jbHX2{WgVGbWuA-WJ&<&F{^k9;8~-hAyHyn5TS*Y@;dkEcF1uF5;^hqq zJGJk}eI{vy&g+V(O)9gEu=}W7G7bzfVt-of4rF69>wb&qjoAWTh3(U;KVAy;-eQVN zB8+ZU#dqZrYtHw{t%yW!x;Cw>|M;o6gcCcmbu?)E4*Uz74OgwhS!y?RMZ&;BcVr;OafIxxf~}PJs7?+xlkri>8p_`eI5>PI3~s z_qny@)TkJia(0WoBCfogp6ad|!%m^d6Kd0+ga8qvsQ~wvvn{v%sDErWz8`CR^&Op{ z4O}{J$vkF(9WLvB(^NMh^cI>~(`OI(6F`CTP5}U@ZbBh-3V5IwgU*;d(J%-BP*e8X z(FF4Sz;VJpSA-UzdxA>B+&qC_M$r17yYRlLYC~FtjbcuQUI2|*h5G4LnrSwnONiXM z?)TgB?oyc`;nzrI;V^EmjZ{AREN)!ETo#7-J%Xqq=uFSz|-Qesn=A!mZTMFJS5ZEx^4I7gRdyz;!oJ-fF;ZQ_c)u3g4orr+qdyr5t$;a z=*R_3Rv{k58-*c^QWDwUMRFw48mkEVuvt}246lR7TP_S_tCiB$qNX}LP6scEcB#`` ziNwq-LMk}fmuRB?T#Q4>9P#L&Gi$rdF@uBSjc|wgmkZ5+`vJ>_6U{$*=SGBBhKEL_ z%s*qd-E5!rOkEzGQJ)GJx_`S#Z^^R!fo>(M zK$i$FQn2xHnCnW`*SrGfie@V#D=#*@42m^2vqJ|rm+;&ir@sy>mM6VkzMgPxmErKS z!MV^N)^DwqXSwJbWxI;}_-lHAiX(NshzuGm>#fRLKBXuMJq!fnr?*kUL47~Q!QpUu zKkDEo@zOKS8`tk0*P!o^*lg;p);eEjW(x*`f(9B?D(Bl$T4g|?dj3p&Ub%KhfZPEr zx*=*JJ1P)PaM1@wBf*i86s*!L)7%;7Ktp>q>WT1g6OSj-gnl6G5%&x4`$=)w6WTd` z_2Yl}g)nyYFKao%mW18^WRTuL=>&BP^Pj(ZT-KeI2Bn&8jDo~A7$6H?K2jiWWZ-52 zqt7xNH-g945)_F&P68PljXkMX6VquQQi)HcbQgL$z%Er=(cGvD%Zq%cmlq(=FC#;q zN?7K*M{*!yCzk8i8?nT&>xWEd18p#w+@pXb!_vT<d*ZF-5lrI*<%b@u4j-a{sN$s!BBuOc@_~^OKZ?%|H6Zqk$bbfZ9Wd~EJ$+=rh}{$ zC^qu{>-ylq?>B6l4V8*{PjWv-Rb$sO=9m(RcVHi`KQs|A`47hIB<2o3=2Z8Oom4Eu zjTXe^#6G%&x~$YJ$mVBug{j0LZQ0jpA)*^NA%UV3%n`ZCC{+X_BX@rY>LDu1D(){$ z7reK5-S5}FaVjCSZx*%n$CUKSf>e z=U46UDGp2fnVR=b$n%Hu#!CLF;*e}MyNjB-y+}Ga3kx9+ale5$x6bn1%0hNR9L)7n z&AQ^|q>87tH!`9aJtHY`e^$JAV^>#owfl1Qq@}8@#@E{#&H6TVC3Ptt$HcLzbOSwM z{v!X6?ShMob2S2jp14Qwa6IEQriI02Wb;4#?T)!h#}jSWUnS`onl|q*EQ3M~;g?Tm zV{_=Lm+JLSzr0+<_46$L)+9fzoM3Y1%J?Cc0uk#w@EMS-5uE|2P(2}Q|DmzRfN1L> zkw7}X-ZhR1q2{K$r^>_fY@0I+DzHim>;2V_g6xL%t?ssa?fd=CJS=Mda=Zrw8$-?W zQ?p@wA?Vx)9pCg9sMly>Qc|3L7SAea>o9<;GO`aO-D%hkh7U0Pk#_XXhq4?E^^(=3 zB$DkxGgEg{hENgHWY=nT`$AImZzZz2r4B|531@lq19KKP8C{)(xL5(O1EB(7Mjj%t zfmEF^9H$`MRnRk;&F=uz0(Y9?N@av!UP#=Oj0_V_;`X;wSsivMLx0jsadSQn$lZB* zwEc$J1TG;@{?MbarhxX0#m6(A7k@~RpX!-XU6l0-TtbOg_F3G>CY3H5()S8uD#ZLa zn}@x_9p)4}n?lzJ%q=0AfXWw?6*AP^O++P?4zfv@WlTWHz(oYF;n)zTO(r%{5aKFF zg;CVMhgA&qoc6DP3*liw^jS|`Dn)Bo-l!3j=6{B!rK$W!eTN485h#~4OM?LckO@zo zlTQDTOpENa*h$!(HWP&nkl=^yGfFL7vt|uJv}`QjzM$_O{?NMJ z4_9;2BQ8>deU|vOwwj>(c5y+C!?`d!6=+aQjbnU+Ivzz_9YMhqajM8Xf`4=l`{ z3=jqu(Uc9!GYRQLz00E-D2Z!F8%iajupFqCWSl9<^I^-+Lre6?QOiq29{psUHDB|K zlvEn(4tZ1Q=(e0SIae&(*xEjuq7}yc zqS6zuap~U1vM(KkUo-?mcA8)KYBKwQ{V6rmeOAm2Fa7do&ydStAT;^N1ZVxYt1<|(OMwR5?;&M2hDQ(7Q z%ItxQBYhxqrjqCZr$`wfQ`j2Eo;)Ih1z;TRrGF%@6y{U7 zj57~7KcVD(id*J-r&QW;(H4-sOZ?n~L^ZH7KDVMn7o8Mgn~OuS@KRF)TkDbHH}GO2 z^bwZw{|41CBSfNIE{y52B>ujT*~%|7rpHyOmYS_th^tj}S3~|*rxAkSr>%CRl?ni( zUq@S2+|JfS-!6L=TK?xbnQ{lk*nPP)jfy)QPq}x7*_L7eiA7Y0^~pjZPs?ua)7%Ue zLG_hJaxO|%|J``YG<`Po(OAmiq`fKbs~t=3gx*{G(#wRJ4@Dd{G^puROqXR{-fiM| zQ1shp^u@j7Y0YvnWo!2CAZ?63Mql~xujex(a{eI3pRNne3%I5H%Lo#HTbonh;h?*! z74RVNm@MDtLpG1+3u*M#?-owP9n?1fPB%6Nvk8^iCYa9Z%Q0CY;Pb51=I3*i&c>XB zlJoKeK3M%?;w;VvVV7kGw#YJnn=U@;B$X9ue&r`!&~E;r6dve(gcwT4mS*G_k`7Ne zdv<^sOm)fD{R)dL&AV>oRd7>Sp!J_V1aCnvZ1y1I%VTe|tW>?JidEN+CBjlG|q z2xZV+a||+P$(YdZCMS0bh6R5IxukHGQ=S1H$r6GdSxCnP5b!5MyWZG`_`6-MZSJ>o zKHg6I`RMxkzNYhKZTCZfit4B5)<#JtJJ{Y{a@hQ@iB?dB!*+1k06Kgxam|wg$UhT- z2hsxTOYxQa`s2aQT)H|p<&%3jeANbO`g@wTOMU$1>PE*-{E3-P<3_-$J#TLSIpNwJ z;h?Xt(^mRpNZ7Bej12kgBzo!{4C@FK^7fRFEZHV^$E=y?Pb-2ce?>475oAY56A11? zetw}I#MNAY`M2V|ipPcx`$_oN*o4#X{@u&%}dP~AtNx~VNE`KAiQ%!UBu!msj`<1&my*Y z4?`Tq0bH5At=a2V9OoK>S?*}Li)A?d89vYqs>TbxjuyMfoYsyepic`vU0EZb5$Fp7 zGQRWu%b)-J=a*i3Y39uHC)LzkdfA2i5b_Jku*&NE-bMOC!-dILrNf9wu?|nfE0bVM#={^c$)c2;o9d{;xe&%+mHTNjxKx}o-IIMCAAdYB zr>4*NvZjbRhMJDaG9LJZRXbuX;D~ud;U<;S@x#QNkfjPea1QNU#h>kd!KBenFduPefjS{q@X0zy9^FNh1>+KPIyfW+^aBfiV;iw$B>X z&NpJ8{(Mg|WyE}F&}+QqkH+5q=Ig#QSI!{}N;%KmegELiw+#+@G*wlZ&wnQW^wV6~ zPh-H&zRptM?M49>7y2_+7Yz-K;8tF>sHZ>ro9l0V{-xI!)m6n}Xe-1L%MZy6dR;7) zJPMXYWS;RSlNK6iwLYUxCS&KSGn?|=E`xD}!`YpPHwOF%_39R9b&E>fC(DC-}9tSr~l`VURGOE_411^Hy><9 z)-W2x!H##(Bd1^an?+kz6FVg27gW92JYl&^?Xn37kVTS(0IFdbM&^R2;;S481Q6f& z{n^iccJ|q4!=52M;rba#3V{xlG<;W9zf7_tKBR}cqyI>69;E;N_rH%q9B&?Yh(>tK zYKJRn0n4`F_Di^JUnmcN@eZ93(YQ&6z-3B<;bB{%)sGfcf`2*`_o zkL43SRip%pXpd(VjH9s!hwnY@v{Sl!y35N;*dS1>+rvy*e!q{S&!`O+%$r+PT?H|b zi;-ldnjX^8xHUC3(1cHP1_+2||LsEu(Vp_3f)ghvP+6p7k+aUKE2*(%;$k~N%yd%q zEYc{G3v5S*S*>XAmcXu;I#rs;l4TWVoL8qxq9K_~$4mNj*fXbo$E$%@TkQB+z~QdH>k53x2FjfS%FLa(o&e$U>4KCj+n&MPd^>bd(kg^HPje(Tq*z3Z;~ z{&M>r>rYu97gJ)Uptzv0FwbPt_4fC3BelV5sIIJggKv`7925RaG@BQ#2GRFDc_%2{;w>+GCoGJ>=@@YVMkVV_;Et z6xmYgxVPV<_}Q{+&{F&6)5w6&#`D&WaPEPF~Lj-k)Y zzQRxCDh<7nh>yc@aaiS~_@vd~;Ll1U>kW1jZ9diF1-3_2DUPYpnAe%D8qkzA{s>Uv zCKUGK2+6XarwKEgJ{y=0eX@yR=IBx&=WYFp? zdV|$yuo(;%OeYlfTw-#fTYu{MO6@bOHpVrGNifH7%rZ-^CRz$YU@e6Z5M@0dIFYKF>$;{9Gt2>$G{+(blqenE1X9ga4On>^Reec;^ z!~`R!tl!?yd(*86glG=J?r*gG>%R^B^!w5GomVpJi{q$hKAZThr2uRyD^YQAiN~Ax z>s?R0^xR7eYZgQ!G5By0%jzmvi3Fo1H(nHs)i{3jS`? zpr9$5V5G7lO*kA`Fn{jdkMGb~i(nzh*wEO3RxaO_FI~U>J#n7#vSdv;1&bLh5AdWM2mpO-uO9!;fG%FpLC%1HLZ{=&Y4+9Fx2om8a106Bm&oGF_IElk&cr|(Nd*2JU z2G5oYWQwo^izPLnNcKJwh0&I&w~#=gwgKB7k}vB z!RE&weSGtI=dfR_N~V27-j?QrX^pC+qD*hlp_vW&hYDQz_uY3t*FM_>B&aQ5=ULQzAq634h33AgL zvJ?~)hr$t`ufMpU0Lafh|NPoDt1)fHrw5dI?%C(dDr(uM@9$R^mlRs8wq!Dmy>?eu zr`zq~KpBh|s%kJH3rr6+^$d8heV$WR#D=iR>2MYnkPF5u5DI0IqAo)|KgQ>8?s}6G zPdr(&oS*>J2R$SiC|2Lyv!mnCuHK&ZA+9SImxf?$&LeD9G8v;*Yc?1hCS!@kI>+g% zbmi6N=gliD%nqdc!aDp-hLmp_O)8_Zrqh?NU0ar)2QpF`2*+Z#zPhC^64h~vlQOdc z8x>XQD8q;< z)PBBk|C0wB^*W4L=HHL|C|I zk0s+v3yc1F?Xa(#ku)Po72GiMxb4+fTLS@u0+#!lv3s5zNTcBEeJ|O zvFMxaUEAB+8@!$Y&Im+f?BJ`lg2eP7ty*W)X)QWkfz?)QG1lh0%iZ~P#YN>-+k{}p zpm!o(rS_RCbS}E+B5q3`uYKm&EN3%oYHB!4%4Qg&SZbvu!Rh(fAGpXEA982EFhFPP<8AzSP2hs;F7ET8A-(F=VW3#HMc&m${KxxPLHg&>CFn z#OZmir8c)Z6G^KRDfq>-CIu^pokS+O&S*Pmx7`~Il;Hbf`1JZ=m?t_UD>9z`GA6g0 z$yBDY$oANy_vhu6;E3bZ9XrCIQ8vOS8r2gGpDN1-)(CG5Jlw8F&S&>%a0!iP=JVrKLbS+g>t2Dcruusa7(~GUG_x+x;&% zkFO?dY?N zqOzsxbaMCJz2RWEAV06d>4-*S&CMNZt)Y6s0=DtukyvB>{(#qqp);$bjUj>wgy$INF>Zv4$S`x7tVL*yPkObiPfuCE3Pw!XLQuW&p-eC zH^2GyKw#+2H{XD#_jtW1B9k^N&Mw5xxmtMmkA*^|B_;kr51Mf-pjndHzlHC?HkrkB z$VXM{Hk(LxEFv8Qx_q}~%tHTcudceSN$?z%bUH=ewHI%FST^l`>W zfdp%s4}S222u1MO()O9AWCq|XzWi>vnnal7(|0?GgRoi~+E;++e_P_l4Z zTBl71qpo}J@A=XfT+A@D&nyMr<`iJ*Vg1Dy9(WQ)zhie6!Hf;FR+C^a84`FoT;Z`K z!8yZE5;;lo8Hkqr7V2R*F1Uz9EOv$}v$4>n=jy*qO5qY1oFPGGA|h{lPFq~h7SOXVzO(K(kZ&&NOhaab%)o*|>r zX`u#B78zkCq|*@(aoC2zLK$b1sR-AG?@x&AOOO(7^ zHv9O1OhDqRufCeE$d!No^PkCxS8m`C!ztS@e({TlY$#iKMKt4~DGAGp@QWOW+8S>g zM9K%8sTyHY%ETjI-Wh+vnQG!`6a6xSkqYv#CBUG=0VX~wzy9^Fo_Xdbtf4>jp^GC2 z4^n_q>?$;lTL1t+07*naRFp*~1ToSmvzJJq6~d;tp-?1O%v0DR6CZ>utNf!&DLE($ zNmcnIe{;pj;TYxXO#aL&pl6brv#@3-Bec_jPvmnXGoR-H8IrKj0}UD6A>3ME4j^;1$}0n~289f&7BJ zL?*2@>eG5n)%-d*%z0*`f6&Jbd#qu;!66p)#Y+~WPUUI>Y=tC%KDCBTQ5X`YVwNI)se)XSSQpV9pL5RH4ySeJ&i$vIb}EL-4yVg# zwiu#Ozt`(FISTU%Y%co{s%@L=l8;{U@coal)Ya6~Wa-e<)MU3=7A>5IB{i!fdR>Rh zj>?Js?&6|i)(=>Au4nFOYwK(|n4g!A&1POIF6bz$%=7JTW@z&{a;sFtsELk!}FQ2W~j07Z|F%bUk zmMzb=9873bNtA_A&MmT-(jM{}1hIZ%I4mA`g_L0XrE97b4P`Q+ZXS<}#i;A?cv-ID zEBPuGTcN|wB;zWZS=`$`K8p}z0zuAj2?jv?mraA3SU{1B_V|o41|~rZlCXoRv}6mi zg|Nn3jD|j%43NUw1|~qjqmrOb94RA%-fe+E-zr~`^T>Ph68|Ug(in^DQc0u;>Icez z5H+rTi%KX*#-#* z+h;s)pnXPML`0E@Kof)tZn?qM26h}O$;9j=af1+-v2cV?>YzzaN*L%F*FjS#&ruOZ zHsu5jI&COYl*%SQqF^u{$s=aT0?!7<1EC5>ti{oynk{aMz_DR61;Fg5G1wA6eL{`F zYC6QpmisOU$T85_CH4+wbWV7#|BB5;b*# z7!GQ2FiWFuYQ|tALT%!y)V`*c{QSbgq5^}?qS2-~xh1qb3j3ExrGnvDPgiSj$g^l( zZ6=us_`@o1ROQA%M6Cy~au1Afz988+NgTCal}^srC*S9^-_Y+j3zy0qzT!cXDCwrW zF#jrh%;IGx9yu+eR=fQ2%b^w5?I72TpZ3QTMNI`ajeVtJL(tjLl~|R86%j4|?s~H8 zo#-6OL;WCBwepOwD_3!}wYAaT5GoNoF>^)%O){J{bH4W5-~RT20|);2$3G%oaryj1 z4?TpSG?@;X(r5_EdghsDVCs-7frBm^Ux;7+@|W@QjIx_ZY<&>-5Mz18hKUR9DRewy z#0*zJVVx^3Hb&Y4qb&vSS6_1Y|Gf=!WVsJo*J zt3aW?$*AmB2Pzv(p{W`iSXW1TXJ?nuYG#Yik8Zk9_?_7O<}Qw)^mg^;6&BD3@bz3+ zR5+d#IInp2*=Mi3^0J|THxfrvZOL~R!j*RS^#cCMCPchs`1s1Cc`=|Ji2_IY|GHyMk^DGRMPrY7k`A{I}wwt_$I+bkAyetrS# z5EkNWDVq#t98cq43`ZQ)`nA_yTfKIb$zpQnxf4~DxL3AD<5q*oGvKuqxOHYj0;dOh zJxcbDmO}=OcH#U57?nd72Fr;UDH5zN9Qy84Pc{T1*r343vkxnLZ754B=bbSGMSNfl zRMslFQsZYpq+oYggMX~U+r6V2Q0Set>J-j6Mix)B*a#{(ycXvrmDP1r2IU1F2BK2B zg4;;VfgrY@l{|_hF+QV6D%NTNn5l*AqtmESh_a(CI0;%2_Cc6-lSo)MhzG|m8g)>k zdH%qGkE~v!fRZ03_?2{P=o@&wt2d1Wjw}-p5|}Jm7zS~(3XDlsU>gN0g?B;(wYXp} zL~XP93L1;b0#9K+6e1{DhvRa>8DU;9mLdWj4IGc8Jel}6{J;PatBs_0^$$GX*m%bL z`IFTY#WTE9DlQzbfPqFQcK#KKa|D+1S8AVMX>Gag>1Vi9NF9%%B#Pr+9iKLwea)c! z5$mj4^b#I`0!a8*$!LaEy+9Y{1%LNP$|}hD*gm68X1d6V)&k#5hQprRdjno@=L|y_ z@s^erMsZzT9lnfk4a9IpqyY|zAuIehI%onj;tv{_f^M)WNB@X6M%{LlLXoUOR!W>s zvB!gC7XD;FWPCQ+_`p%2IzIdOm}ACdJgD(8OqI$6$*jUWLX2XgrmEkcNC{s*a-A5?#bkqU7>{BT%`Kz)BX+8HF2!ase|J!T z!H)k86hKsm?uuTFnOrOc^lPyih{aMY@rqi4JzbVsF(?=l>`3c$=$$d`M2{x2%+Mo8 z4XY&ZSpIlbN*DOSykOyM3&k#UIBOjyh36R7p^Weyj6mT=m7zP7$@tS5H)}@pWkf!J1&sz zU6A+br=Lb%=A14M72y-l+_?+N%8C<-xK6Kq|NAe*;(Pn{9lgDM;Yf%xM#)6NWWwWS zeqVntWC(_W+!U1O&f`QcM;7!t19XF7=HMU_G_E#KK)=c9<2T+wOTZ`E0`DAb8=!-x zthb7i3_FH?TDS;QY@U=>WHLoa)En)K)@;xj4Jx+(A_F=@P@JORn_lbdG49yz*BLaK zgkG&3+;FPh>eLHyNtH4=T=RuZx8LUO5@$XHC&JMV#~VBRIM-x1FcuFkSfQ?)XHRpy znCVDsoU?dEFqzV+^<}ly4m%f9F?o@1n1@m3Hf44f8t|EaW);xKLQ~mgkAL{Tg}*hyAT!-f+j}3ZGWw%q$C{=YYZq9HGO?OHna6Z zAGzq^haZM}0H)+T00r|J3It(j4EPPPJ0sEfl4UE@8vVZdhJe?%;PYX4)yd7ju(1}i zkvj-&HfzA=ho`~fdw%7D;*w&Pd8)$#eEtRJ9&A3KH|bsZZcl$7O8laXIvh=Ct#IOI z2*oXb3=CH2yu1R~P`KD!vdmz3c<5y^KY!ub#$beVg8-NEykwanX-b_`o3t6Nfe&Jl zRvw{;jAt|n<&bkSrQz=LiRWTgPacs65kv|}s2=gmDWZniauJ;H5wio21dTZ=f#I1;;gqu!L8bDy^`vCjRgGNbNJnAh3N#u4a@m zJVkYs;YI+v7_Kb^C$!86EeIy?(|`TzUon=!0veVYX$Mmp+;ryZpc%Hf7v%T1zx^$s zm`{#v{DJ`e6FC-s9caLr4s}S0>H$3YB|SiRrjGzAnVC5ZOMr|(;5=sTPTm+CNCT1_ zH{o~(M37&Jsi~=%exc+d3)V60HD)2uI!Go{I|pQ;Aq%ZWb~1tt2W#*%D1jWqudELH zj=7jXdCUnpIx4>&16Y{_u+pS4i!F@>p#VD_m{6D%93qpRDnl9QGo6g@#5B~Ap2a|v zv=V(^AyP$!0YyP}nk1G4SRuJ=TDMaepvB@Gj8zhdS!nnXQfPO-zx4S$oGv`(!F==A%C0^&%OPK;KM zKO9e`wd&;3x-za1f8>QXA9&=!1&bGRT#`#=Y(~A!p7&Z~+xyoq`0xc6>-6Y>Qt?z~ z&=*vx5_*lMGo@+@N9Mz(W5ujY3R&X7uB22t3=T?EnRD`-&9U%-R2n^6N(I8AXeh(N z`q7Vml)0U~WF}{7bo{iE5ZIzd(a8!(TVxk*s5M1HfDZAjhFTVQKugWok_8ILbPCUNzo$v68#^QV`j)}=jnV46@L=n$J3raZh^r7!6shCR}H5_>a!XJ}!%{qOcVP zCwe`nc=1?iuvwW5I82PWTHI!H!2BW{qh;>v>u+dmq7>79^76k{A4!_;xbwLk_Y4-VFhBI>u1Ei}scwk_pO1(? zYQ3p?VO<0&qS%ggIb6Fj-C=&pA~PI-pOHs6#(p^7_gMw>QBzPdky~Eg_2gr(8cjx_ z&^XEmWfi0310Onl`HF?JEa_1aPb6njX3B19Y5&t79@c4bmV~@2;-^|;#rNSysDad+ z)QFwDzV7@BPbcq03(!dF*}pSE0h)}Z0c%a2PLo%Z@4^ULSOajcv>I1V13lfbAlm20 zAA979v(7rJyttGyt17DaU9eyg0y!SCc)tFPZ`Rh;;&P&(u+SF^YmD0Bn##_;ZrUB6 zSzT=%E~hIJkGfo9@fJ&$va}oY7PzZuB&yMC><(u<64mPU7N>(lXF9#UyrjHcIGe>h z`tY>N5=9JbH*Ck1SAMLpFn@pJew&la0`2iZKaxB~(3)gXXwY-W=fhV(NnOp5%fEZ~ z?()*Ilh>a7lOO*Kr4kBgxyk|!)icVbA-|t($By1!?qRE}sZ(q5R)=OxUBAEnhu{AJ z*iQW{U%YVRDH}*rTw1z%)fyJ>&W?`ini}eBH1_KCA(Po;cRS5iOMhF}wpX^eYbrH* z9j4IBRxEqvl~*u`K6&lxit>tv0|)T_%)(Cn5s&fIfrnyN^@_^M?vCz!huv(murXk< zS;bnNvoubP-qC(#$kK2R?b-c$pEnVUa&Qu*p|A>8hOv+y^cizfzt~+?USM}{*>Oh2 zzJxy#=??^Y0s&tjmNFUBX+7r5QYjz-jzWWh4K!tP$i^$+vu~3IMnhw@PU1A&fV**_ zVIBkWFc75*8jfVLOHVA+lYQWDipfKQ(#aH8FYat>Usqc*8iB*vq|L7<6nwe0HJ!*+ zhzzF@8t!RUQpusTFnJC??7^FK2CSZPqG%AACR=;KlxXyZOaxwMx)1abT#+i1NG6&h zfyejldH;%)M@6M#$+hfQ_h1u5WL6TJ8V8vS8ISr>S?It~O2iVj0MTX0 zwjKjPqQtGLNb=18G7Y(q?k>FW!lNpe)5_oc<~Nz%fk{RXK+8Xw0$LV?6iO+mWu@)_ z%CkMNY15`@mOG{{yvpie^ZxUn{~SfOd_^fh6R@2yAqB<*86N{2+NHU<837OC5GD=n zf}Hk~pZw&LpZuikjpH-Q7+D=$RnjNfj|3XR8@&#cj=83jmGyRrX9|Hh%zS=-Y`_!C za~s@lv75rPayg@ENKrd06NYlCLZ?YBUt)GT#pS>br;?M)eR3XBX|(=RPZQ^{W}kNf z1?V9o>z&yCq((V0f}wjCJZO;NW?{UUB4E5ZQiFDk@jgY>n4tK|06+oCLs-U4k!6~n zn6d!NOpC&Z8SL)6?v@H@SsaXhRXllGaiQIyEOx^D7}kHd85Cv`%&_s(ccn8s!x5aX zabnD(G4~F5_ z7;5wm2AobKTikJ-xiJzx!(lNB{(fY;e-{c7<;J1Z6fUqT} zMojFik}PmfKKUeJG-!wOA9skA3m9_AkgYITTS#QEcE9%8YvC?%E5UW^EDgtv!n*+g ziyd@>q2jVT9#|SE!v;Adf?}BKeph+WEOQeew+J#`&OP^B7zunslS?vVaAN4Mzwm`G zu+soh=)>G$$UQ)KG)8~@r7wL+-m-&TzdURz2}ikd;g;+5yMdac>p%tRdkkl06-Wvf z2TdRaf+`6w`rwE6?AhCP=#UgaEEcQQrib`!kof(+2zR;bwD8P6ua|SetgnQ_p#Y9M zU{TCwt{B&L_w*lXZN++n#=;1?y1IrL45dG8^I!h*7kF=WeI|2nG8)qp_=YoQ*uF6Z zu)Ls);9zrW^TD)UuTdv8NzbAsQG7x(v1kzywE6|r)x~ohNv?obxfBx}ab}l2wn#A0 zdZ0z69?En2)hZ{TG>ACrw8g0}I|UEfrc)YgP&F%uN+Ca6cu6e$hLUN6+Ng?lS5<^m zYV>IU8=lYjBd7JrCXg}6AMNX`0{UnvCRP zWlPFWNC69%RG@%no|$07K_;60orD4ktE1}d=(+2!PogTp8!)rkNLm??lqYU@1RZV# zMwBpva+_UG+ zI99sio}xYL*RDr@fuSP%*ivmoJRCVHoM0#%ip8T`Ca%{9BKsFFTV7dN-4<_-hJzpe z;04qguElIJ!?LJ#sE!S#C8hAH{hq;w#>NL8cyQOg{q;=;VJ^9Np{$||UjjHO!vaI6 zGg_@IyOo%Z@7cX4=pFL*;78k3;K~d7hX#84>S}85zvq5*5LaFKv7vw;6Y~P@2`(-1 z*&Qth4@M(6@JMi7!$AK42XNSVuBxlfBvV!{DYRK>f(eOpoRN%Aq>2dkEc@z(8@;U8 zOrk9S6S>GI;T6qeV3n4mBzmohm)vP_9n$NZ=o8~XXCHEv0oeFW8<+b+q{W#|1Hh0pFP+DvQs2F6Lv&+h_UcWBSIqGl&2{DxL z1cObz{jYU(yxi9Ah$%MfQlFU(6063%vG4i5t zl&=boNA6oN_gr?0%93NMKmPHLkr{vkdecDwnGG?6hY~3c`#XLo%P4ytH>5Mua!59d zBsVdl8m2@EWU}nUlYnIG4&HRrO@yhbEbf8}E zhG@4efux(tYdG$3LXWWHTT#YW3(CW0Fi!a9J zNIXlIDA(OWS)t<+BZ&KMQ)%P8`Q4j0t>P8<=rjn-+Cf8vcj&`}G%_WLzjBa{#Jof6 zl!LZ1-?HV&T!hw)EmG!2J~KNp3FM?38>G_{C4UJ(ma!?0^__W-te9it@gS8eJ zXu^;(kkmGJ4fXf=6R~tL? zX`6+7A_8*eM={67HUb6PsBAw-625zS^)V4nG8nQa(+TO@>=RTg51Z?FNMjv@XW$cO z)VM5%nC;uQW7Lcmm7N=wY>K7RqLN0(O8Da+|2RH~X>>Av_`@GYXFUcl*$pU{vKVn= zzP_7Yv(p9rAH6f@*x(zly6P&afJUHOaniDV^=}GGXED}=rP`f;y|b<3&`Bq)KnIPY z8MhncH5i1h79I>A$3~;sYPBI91MT)d{t-~{Jcuw{G0G8PObXaVp!Fa=O+Y8do*KjI zw~(qdvglnxVie53#DoC6MJgWlbavsanVBS$@MX9hNu^H{7MBX9W2iBb8ga8aw+%5n zih(M;4Qe8BZ>vY82`1--H5o+#4ds{tvHgpsIKhGW9Y$Wl$p;b=eu7f5KzC0d9yRD} z(V-s9z*K5H@re0VL1ttE0HqxJycwj}R7~d#7V~ZbH8OHo{OBk`l+Ib~#0#&Ai%(4H z=^*qDx{i{Hb{7Y56giXd$cge?;$(Xvk+PuNuhS1pIPw=b#{+8mg^o#ioOL;3c5Fu# z?K6r$PCgEsCE|lmX%JW?+Cflz1S?);m?jg~l(V5E2H`{xMa$CPD$@_> zwr$(lWi2Z&&dawaQXzv;Z)DcZqymFpy~*V1?K9yEmcuK<16QC78KEA!k4GMT^nwpu zfZ6ll&|qP45!dM^yW8_!xRFao z@xCYS_C5WSQ@--0Fa7?OTONM&u>}hj%&V=kyWAKl;~3iO3*@`B$#|@&sD^LW+5YS+N-Iu%DN6pKe%S{t2CnU40H4c5NzmNr_3L%fwUF z3+8g->EPad3+63B37*@jWL;+Fm*rNiJ~-%U8}f_QP^`XUG8KcCvz+W4q|{$M`|P>p zCBg_nX%&8CuZBBwTCqpBEuAyxqsvcf8}zs>$A0pCTGh#@4O+{YHFMW5STL>hN+Q{j z1oG2+glVukgZ0g>&i1ZBZ&}_1hM&Ns`WWCp(bSMY+8UYErdPsrQi@0_NmuzfOPOuDzG9TO(;TeK-ONYp6=Ky|Y7O&}C8yRN>;#yaGZn z@CN-_SKhy$`yL{Oom49Qh+I5uQx&`2{5y5w{Hub2LFLRT@k;I!_#-uaoZm$J;LIkH zhSXXTkP^-he((bh8iN6T+p#l+u?DNGbSeXEYhf^gdiUodU5`*(Q37p@ftr*#X!!Ix;*r|b#m`5T>fP1LWu!9)BDX87lc_nTN0AV1;1DxE2 zU_A09mh}AG=RSw%BJm^{rb+1T*~_F*BFAUU#>fPS+*tWh7Ozy3002oNtDH@o4G>S! zyh_{WEPZ5THrY`HWLem5BhUhtx&uujLl~{JG=e@Vn7N68M!i@TA*_rCZK#K88yj;> zfhc7PTJedDvVzlW%G}c5DPge)sZ_taap30La2X4SuMI~s|NAHP{^tH){J6+$GJf^T zC7=9k$ABLPsq9~C^rrNcA9Ji(U5sjuj&{bzf|C{=+FkEVsr*_Eix@3vG@H7uh7$=#p%_Vw*|r#7$Bq0f}OLNT043}L-9hpIioZ0ZRxxF;b*zq z>;A{KUHXBIPKz!O(?9my-d(#}hJw9|=2vW7y%@7IpD)zL9uq22%9UX@-{Wu=4O}RDA4Nt!n zWOJH=eK_JqaXd( zfBhGx%`hRCTyhCY)dwGZki^iF&3Je=!XzdmJ~w2TUy8^rg_w8!BL_97a@iEekb>@q zO~#59D?b1E&;S0WTU~A&w;8?XoXuYEAQwI{wel=pviRj!Ugl~UJWH0AiF*jy`oUc# z^n_eCyKooj^?ACxJJ~aP`QDi4s!_;S&{gt#fRz8c2)sB9V(4Zqp*#&b*1Y!E;3upVmXuFhySn^aRU+y zok83;h09N+dyRk)-3-(&EM~i8`X@kvo~_l_T>n1AaU}rQZsG$5t1ST@XXat6AV6DG(NBk%AO5 zJ}=*O>KRKp^-Hv*9;J%GE4FwPUtnU>27W`>>?letSxu3Oksk_$m#>&7z>Yk_m@B0m zE?Q|C*o$n;Nb zy_$uD^EDVSvg_HhYfop>0Ry|9E=Oy72bzN=Yfh>vtH?823i4e|jSb#GPduKu{PIiA zde7!VZOzU+7u%k(SUj(=RA)4$lBx3IlA?mbL1i5}Y}cZc+T7fXvirIpe2*25LwRPC zWuU*$XwK{I>Ur|9C#njH^NaEWLxVMSWoetOzkg6|N-SQs|t;wm$%& zysTUj7gcykNog#WGID2FCR156r>d&bW-^8RL(yO$l|Xt?WBZ390GHF&qC5^J9cpeF z=<4>Pt@jP#C-?jdF8J)HKOGK*U){FNY|ya-Y_eD?D{C1L+_}K@w>q`fV71gPn1@d( zlUCc>)?zX{3FCJg)x#O5pZ>qifAsl%71iZx?s!Zj>}G2+nh@$tqrSGLy1b~E8-z_T z@aZ&~>+ZJpwQEl?C!~y z@nd=GveQI1os8MZp}s-CCW!(Xfs44AeLx$(8sZq{)E3aPRLDLZf{dV;Lz7e{9*sP_ zZ}++L>xw3EvoMlt(!ZVlA-FJ9%m|-Z5m3zUT0LhP$rev0ai}dy&1p43GSQ7hWFEdA zZO7|l7f45ZV3Zk&*xRCgM$98DS!ZT8xuhbZ{L8=m3vh6AiA{~vuJW7h*fJpF>+9<= zPrL8F`(WQW)QJWbRWG_rhBnYh$!vN3_16O&u)H4g03l;`#g_1B;j8E{hd z)1Uq{hfj%_J_54D+;S%?QSv#QtX#Qr82f1|M|mqI54BC}8S^<5ATS4-`i4n%MLgC`MZ_^@~i?Ug#?f8|y4?{Dq= z!sl=R=D797%HQ4M+4W}1?T&rq!-k75oKM~9-DEcywLkn((YL?Tv-1tilVB*~H8qKE zey!xBWnzWu=!!Kr15Hy?lc}f>hqMHIg`s^HQ12h13bKbh|9a-fcZ$6SyEgIb&&6vh z9QV8s`TgTb?h~=*X>Rzet^~FVHNjMK&)b(;%$dwNOnuxy06WT|2i6pc?$p!iiK~(< zm-z>$aFilMJG6K(%&Nq~Son;hA~#&MI6^l8#o6c)HiJ4%k6QIYC{V1ygiuI}aMb>x zp+FE-R6!t?-qUcfv%hCyWz_@EZChNIfBGqFTG|I6{@ZrgVT+?^>(+*qi|5Nt=y9Fd*XX>nEr4#aSN2%RA4QPNx0;xk;ynFA*Yl4T4e^@t>fcI2cQ=Xc>o z@MOZFv|Dbug_4P6?f%9$z9H`fB1UGHd9$Eq4##&ABs`(R4j^FyoFtSTzXFD)rX8xRNx9W-*V*{s2V zJG$(3>()CQ?#r*ZV%5r(@KRV;<2DneKOS$m&4T?Ec6|tc>|-B;SX1ykCz_PQ{YNQg z)a)T-S<$I<+`qzJH++fw%$z4QiYl!UC-}lyv>M4qjWSwr8-NknV1cQU5Shuu##jPN zAJ~7?aeUCJxW|HokW0*>WF(d&;7VB|+TdJN1PI=9qm+Cz^fOZA41xPc03%t(v(H_} zzvHhjy#bY?qWK+OK5?=RSf%d`8}Bf>=udR5sf(jGvj}FD$lgI8u3gDwv7n-3(j$p%KH1R3fnYONf6V1|uGW9(bl?7~1;CLQTE;!T3ZePxz!fM}y2j(eFt z&f~HkV+1JCle@dRxI8ePO2s0PilV~pTVG8iBN(IWjrwRTZZL7{>o85m(3GkXqx@=| zE-pbT$}C&L!JFQ}!OHmyYUj=$^m$7wN^M+85(xau=RS+Ny0EaQtgIAUW2SAj&Sz)Yd%z-1F;BUMJg&vT&WTYT1(huFj$0 zkXaQsC8B#?-(fVHtE#JqhWtj8!K7yeMbT|8om=f4^x}`BvT_b%*X9hy!r`BM?^~bw z;P0P6B&@dBIob`9BIFq zLoWxCD2Hi_U+|HEoUg|el$9QhHE~4X5#`wfjTbLF37b0^Gp2w?8utq&J(@;HCm<-W zMuQrY-aeg(@9ZYwp_h=D(bA=7cq!4A97omk!6G z9B6SkjS+d9p6U$k2i)a&M#*s=-j_5>R=<-0rnFc-&nWF$T9uASP{+MRtVvl`3vM`H+ z40lqYfCf(>@H!FrV~+z3Dhnx)@jmsbPXUNhzy$FRryLyZ6F8BKDtCe^hjZB7O-Am#J9Y5~f)(Yq>T3JXuCs^3Lnf1z zJ#nfmiN-WZ*CWBrH&*Z2jU86d;WD3eQh~*6ht9vgVc^bt{GlPNB~li9^u6bpzVgKi zn*~>6vpVQ^Sg(o2jQDyOz>*=unF%q|hU2=J$`J~wd0-X;ZgIJII8a~Tj8CVg*3Op3#zhONnF97V^#-Cb zTz_=;_NlqIMWbb79)GOdpwgC1wZv0ytSC4S&ulQv-Hc$NoRCgxREAV)mCbraB>ZA9 zPSF^q@hD4`R0EBqpZ4Elrr~5I&?2-oU^j2xEN$KiPnLK#UQ!^JL@eCUkTzxa8gCEy zU}U{!3+Lbe{omO+COxYFX|h?efqzV5%0(0Qj58LTKSM)>WQxH!^76?ipUgOd&&x+;I88^DM>uQFd<@xlu#rbMN$|MsKrc)XO6Tg5y#Pe)Mz#MRAHg3&louU&sL*= zuOyZQW$7S_mOxJM9B>3JRTiPyz!(ZB%`-vcFax1CeEP|qzxnl_SFEbO_N!OfY}_X^ zR$wDLv%SK7ir(MTJ@C?tZ|>N>x2vl+&Q;nOmEB>jtu0@B^5QioFUF58X{KgX0jP{U zH4q+q_~jR#+uq*Zlf>JsMs0W4=FXdQ?)y$TYx5dB*-6EvOz-yxe*3GxhC+!%GQ4{2 zf`7i`0x5%ysjPgJ8CzO9Zn^P6eA|V>gBN_@j5E&MAhV3jQe zDh9mWQdM2PYW3oi*DrCq1zR&=U9ypH>}-7Qxo!1(4+R5Z@I*IPQCYNnMJ=SLsi~xz z*_4bC5{$)GQQhv|)%^3H{>5z7eB)b}S5=jxn?=`{O*}ID3!+JAEDinr-oHJ){iPRo zw70P@Hw0{#%U)Acv0>v$XKh|vRFpR!bD8(KzwP+H|9#qIg#$@n`?V`8E6XH##~>yn z{r;gJe*Xr)Kg_&v-UX*#bTKD|M+qTWN*-$MdgiIEuWjAk*4iBmV3nYA=Q-=? zzqrD{n3_~}+&3rU(RixB?uv&Z-25@v)30&aO?s`-V&H-T)j%o`^t$qkOlG6Wgyvc0 z^#^h2VX<2G)bDrN9e5uWhuo#ipcE^KfH4}!sm?q9e6QEPf8POk*M|N3&)T%9yS=Mn z&+fuJckjT!+EX{Uowl&gla5B)Tibg2f`!FS;fyLCDagxTxBlc8Uwjc4t~E6^R0r?X zHkaFKcgFJLcBj*j${cLiAJ?f%3kw|ALRJPAEuyB!3K%)d_A0FS%e(wQQBH7d3V=!r*4sK|Su??DvB{;Yd4~3hW z8cy1%%ngn=|B*)hMuFbEN9SduynMhHtNQi)Hb`jX*Yhg#PySitOx z7FZ^N0*DCvdwaLHwd3>{A4Et&LLL*aKyg~NJ6xU;67(MX$e}hqer&pFzAJQB43xy^ z8p$Nu97Cc^G!}iLvGLr63+EOKcPrWNBk3moD^X;M<5&fHY+(Vd&~vzn#UZm)Pc-_C zhab9n-N~oc)Uh1}AOT!X04BG>VJlK9}ilDmMQ2CqEO2fJnz z&{-VD6hR$n1?Vh2obpxX!fu+|?d8`oSx(R^sDcTi7gpQ3MPLfFb?a89aoHRgL1Rn4 za3R-LPi3c^3t_S_Gy$fBLqDP7^c*1L!jdirG81Mb3n?Ws6DD{^N7ChGzkYKseh>w5 zl&OdfSZYkgGlOAWW3x~|GjJKT7RxYCuGE@YSWLsjlMg;^#Yx5d%oC10nbInCmIkK*yGyJ!YI*V40JOt54P#))qQ20ThEzj5HRe z!z-8MBv8ySU3TgXy9T{ns3N!}k}1i}`lQWngXfCJ(msEGWoIetp8%mxyz9v!W81Y9*bTK3U#i>SRatRW>d&lDxxkM%wzQ5O}92hGMLq zat%H2yz@9pC21%d3$E;)Ucni}Us8ri24iQelCfQ2$BP@bnR!q~V+3t9;d|4Joic~C zZomEi&Oh&h<;%GaT%n0v52gI?0W zRt19rTtcJNhMS^LzQV_1uYmShw$uz(>X<+sp0aYXAC6QcVkQ>$%@FzcO>p-_<*B;7 z;$(_xMU$`6VF9gIlo-OXtT^Ezq)0K*5h>ivY9p?qOmSFkair(2#0e=M#oR6)90bTo zk?`R%l}{5y49CylpV=XCjKq}VXG~_HNz~# zJ=sx-l9+9b-~HyEKmXrTXc(njK&OyP>B}$dzx{uoE-7 zbN~0&hpzwaouMEnXhfvK3~>N~qkoaI``^pKENz6rY?eX8Z`_5_r87eQ%`Q^8c^ZrMi~;o z*|xRm-n*YS7*(6k-tfgQUs73FEYnlLF%2Qa1wla7?{Bj@ud=zIE!UH|jn_g(X;_g(V|Fdx+l zqBNDdrMY{{EBjUI7>6A`{n-yugg|0UQ6f?>aPfHZsV8?vBWipd*Vf?&>TG4C52vPA zV3->UMSkQTtLcX#X7R}Q7saW3Kb(!XEob`PUBRmS7{mcU_KIJAD`c)uA6_;9IaH5&K6zEf|ux(bT8fFKbJyWKV% z^BIho9i-4}TdZ8`rym;fvG8bh#$Y7sN~SPvZfa;?axPd?kWf6p%0gv#;`#zk2627| zGdiEoZ@1gZE2;_#itoDnZa55$PQUk!*EgSedO8~R4i0d@|6o&#E5FpJH={vjDNUE8 zPdn|@-`{xij-5MdYHEONFq&+3dq+=?QO`AlCWBUEEh+8t`>6U5S74)3H|R`ev$$G; z{PC#A=Pj%()0hl)m(yjl@7?)^JKsHj>0)j$OoXF)o55wbal2q|SG&n%b~$YO_U>N2 zdJUTB-elC~&R1*oYE2S5@%lISl+G!~4`o?#$rYDfitFv3zCP6b-1pek)!o?Cu=(6` z{hi$!lQBQf?zUS7{XWlN|9S7faPGqS3EUbgLuu;fIG(Qs*q+lHg;X%A%L)cxj6?N3 zO^wgBG`(lRqW3ObSY)464LvO!#F(TcG0?==6n`gqlmRm4n^@Wfo?@7c!ZjzImNU4IB z?89@Xna=R1?K{46{`r$Zo3J(#nS8UAOP{em#NFa>X`&UB)i06iOoxB;!gEXZ?zwRB zl2dBy*f*tA&WW%9O$alK{|p8sn~Oy=npw8Bm_V4pfS;`_X2oCr@|TIhY6j06ums2| z)Q%V_&%iz7Ly%W=qo|SrB~{GIOsK}xSxFTNtr+@87T_i=7PXW`8fw9Va||*f))Jm9qbzIcuVe7Z zW&t1UWj_A#kK?oy2;e|L7>1+MU%Ys+B*K`yL_!c;MdOK^PrUL=F1%^WSH6zPGQ}$y zd8SA(#V47OhT}M@Yhi+PE8~GDQA_1_`q+s1f>sbq;gPea)WWH- zDuFi#{5gn6WEE1s6j%g|$%^J11s!L7Cj&l%@sLCG7J;p-qJS-9WGT5}88e+(el&Dup(|f6jL-!KrKnUCrb2*`JwXJJ;&l4PE}2ta#7QsA2(c<8aiPnxa^9Sl{duuy#BS2ASuwY(KSh44!^)z} z-a_@9()n|WZ~|`B<5`utL2Xbc8q=x%WXgsC?D!j@MG^qhLDD!1tI`?YRN(O^p!binRyz2=F zL3rq3Oajn{ZVW>!U2vdZ#%UW$XV|&Uj;S|>02Oqj0 zO*9te`08X=9zGdQ8asBpe&9e0U3cC3buM>4bcV6vYh7L4nl)?TIhnIgJN=ALeOjoS zQ9yIY2FhrFV`l)J-yWS@Ob$7#0w}|aLLnki{m_>X7{wK5m@*?3Cz8>c1*YHq=>vlE z;Dah=G(}>GlyK4^?0JMBG%`7hIgRTZ4W`tWzPd535~e!zOOq**jB{K=;cQ62KV_;P z>3Cv&;*qc7g^;piCu2r{k0d|7zf(FMh7|LiAse)dy8!4CtvFD1<=P|9Ey z1^maiuE*v#;2(AwshswpYf+F`qp{1VukXI{vg;mwIL!neUl1xUsy84vGV1lkLwahj-rPCJ6l$u;6xy8!0&RD#POQq#;`u*51B;gWl+JxFVr&NpbP~1q+;Rm(FO2Bx2c8 z0Lr@f?6c3l{{t7|g$lK`(X0=JgLA4X1HqwZo_T8NlEt3E!S1f!*S2igzk9D)Z(6Z@ z#c8LWlAq^h9c4?lyR)aIwY9XOY~!gL9((jL^vSGq^l-P^Rp55eZLL-l_Xn~v=+o&K zrWMg}A{ieF4E6T(NEg*si*@1RMQhiuTd;5;=KrD4P<8bjkm1^2bmc`Q#U`_jPKh7j zWFi#~g}h#nwCrzc)T%Z0O^w~2f%cw0yh9n_xK){ef5`9k_4Ib<7v@{6wn#LJpDaAN zpnYIo=U7_lfFewm?AbzYtsV|LNUhaXl& zDMhgTMEj;6JpkV(gE^?J$^0Lg*jRgR1rVC1qu`1^F6-o{S>xFpBU5!Vlxlj!wEPpJYw> zNZ1n&{jH@r$&o5$`UV4yUQ^<*t*flaa3XYMDww3?=|wX);UrPnF&$G`dh(b$9|0nu z*l88yQgPQ4 zA^{2|K_atz(D&09Uii0r?|piILktI(%8V(xP)_<26qMR$cw+RzXrCb6U;vps18)73Y3zacM9@PUh%96hXCVYSoOf=?v%{C>H0B0eIpMJTN zGJV`+q4+jIKB3|gLuf8-ipLj9jLd@hvkc2u)UQ}AQLcQQ41p|e;~`I$WwLl6Kq%~e zP&X6i0XV;ykfUOtKaf$07A?q~lZa=zgq;lRWbpu(RYL~DKX`3zE#x9b!o-J3dwV{Bx2*^XE27E!UIj?pA^_;qGZ-NcKE69@U$cNy_9f|I6Ui$kxH0d!8FtV;XVoP zOi$;Z$CKE(GyL+Fa6?lRJ{$LPN+Ys$1YN~gXgZK+>x^-YL^{E8EL=llEz6vjP#GV4 z+CzeDcbbX%Oawz|bs?`F&6t`9(2T{2c2=f&2ntapB?*8a9bI1dGM&O`1rn2syux3d zM)_6X2qGV8e$ST0sz$@*W+(4t%L6Sh78}|*i{c1j6{cdilZehd@(`4j8ed;og^`5s z)W5lvovaRW0%04H>)ND^tsEeer5_)!kX_s??+AuAJ56&P7CI5#n%$w%i@(UKXnuuy z#b-1$g<_r<_i%{=2n;x+hmMZk)yo&ZR&cL*AqE|pM53(FwRTxeTPG|%(==SY+N{yE#A3~nFx(*}%0hE7R~T9ngJ8y- zPHwQ8-fOq?rsB$FiHGNt+$>Xsm7%PGL)f@+Bfbk*VUI||BTg@4638N^z+v{&5h(x- zSyD+x>&U~XkgwzKt^lKfw``(E&_0{^lIjZj*hP0o<2y(5}lXl zo-=38?mch5^2$pK7A(Bujz7Vua6}Ai46LN#NnhLg>f?_;_R`C*)Yms44x{XX8HV)S zYFJ%egYP(4EaZAT3!$5aOJomBS*DMA0RCN?39MKG|%{au}2rLP!Xcz*BaKljs{Zux%(gK^Br zp}WvGuKVsy_ucanrLp3|!>?Rjwdw3Nm6av&cmj>w!wzA|E}qDI<;%aeJ1nQ2 zwwmii!ROS|Pg=0Js@+jZY^0^WiKvv zQ}hVeHy&9L1Ks%tZKMumd?MKjK5yU?SN*hMe>;^X2FAE@PTs0D3-a=CC#34{^Y7Sp zptr}HQOB{VeewDFD=+`{ZGZSKyKuQ{znmqAq0uL3@6lzGSPFOugTr5xJe1C!#K8ky zpSbD=eSKX0A>70Rvu<9|(&cmV@?1zs-Cdp?+Z(+e6sEXLP(OIzcC3BB^3}`blp!|F zM78OA69|x_v4A1Qe1n8y+e5*B%=ejpHJVs2OlZ}yCU7{o!4^wmZ2CY=a}Fkkjt>;W30Ft6b3_ndvpO}Dmpv;&+5 za=Tnbh4~4Wb)cuG(CNZ=2rMl&G%0Qm)ChN17&I_-u!liEA`2shiv|WggBhACnZV8( z5ee^XyBixetY24JR^Hpw?{MWA4SK7?o}WtX-LrSo=2CR~+&f^PYbE0UpS|;dv#Y2c z|Lb-4ZSR|H+1(_YLV80&8Z8M$sx%=%R0Jssii$t6{zXIqrHJ&RQj~x|LPLwztKYWAy?7S^zaegQs|>YL6^Hjt$nTR;EMeR<`xy4Kei+08f}+ccv{arM;Vap>RS%Q`!J*d|BafY&brZ9_N9ijP0$5(w>ZSZ}(pWZXxU<@@Z8pxe_& zz254=2T||5ykq<1+&sLr_bX_qSDATc-sl&1?CBIop%v{#Z|dG&K@XyzX}m1|!)12I z!y7+YzI*4Qk_mGQ3oP7auk5xmK@3&INyfun8O7*`(Imn;q-sx!2SA3m<8GMyY6x@W zf*Vm_YcdTzpJXK9(v_E9dPy1`!yW;M42`2_l&x?ffDhK&T*GYb&Q0Tyd90wp=LoX{! ziFhWt_10VS^75#AbT8!<(s92H7SI&UD_KY{y+6xVJ4uv=nO$PSo&gIgP$CzlvtGj6 z24NcXuYdik+$jV-m_Hix`|rR11c*tN$U|i@JHnOmx8vzi@2BO90 zlX#f8!rt0Lo%nGy7)(s@y$nl!9rmv%K-tIYRfk4H5xh@WJOx^tLVk{(Xu=5G%Dfp3 zo?byRp?v+k9(XazVu@*6cc`&b-Q#Adtg%_bnaQDeE6Wst3YVipi_TqhrwtO z@2h8>br!6Q!-X7Af%y!-%AzIN&-S@zYC}_!m2kZU`2^*n8ii$;)cFQooB(CcVzo+T2`} zo21kEljCAgK-_dx!vPp^oejIA+Zkf2w|5TA%9v(b*9a- z)8negK8q{CWDgr8#~@K)4h@<2xyohk+_`A(n8G-=!g@-K;xC^sDezxU0Xiz(n6Zzv z#?ifr6DP7ZM?0LCmxtJc8k$4E7%6vjv?nJgmX(+BwXkR;yqe*L;us4pPVruN;YFA; zlbGRvf{VO0HHS8A*m&T;{?VgL@VGs5#*CEIREN{`{`((bxQVnwiO5kf9K5tiF;9wK z|J?*r*oMMt)IMyTb!u^fRIT!{$a5?F4syc!#2%b5_te6F#Q7XGM=_XX$-;)XU`gSS z;1Jxm1iOL$=$W)a_s6`0S1_hX6i0*etI zub!=`WtS$5OQ_T|%a8B5{_L~Qj9w-&a-Ms3`J;b+L#UsOp)H#$9)I+;TW`M_tx(i0 zf5KzK>JK)*{I?J3Si-nU6S)1Zi*Nkqm61}HoWEe%H!i*V2M=!exYS@!8?@#|yU)P4r=ks|-2y}Gx{N>SCUwm#Q*9vO&;T=1xAAI12 zyYKl11wkju!nO1V?{7gRiVN(-WZe@_{$$jskr4=2UwwXEUE}@t{cX$UUH3n5b9}r_ z8ZSo@3=A;fz>_)*H8aZ!{^UoGmX+2T3@RK!#KviEx%Kj|UVIKN7a{;VJMC{SU-QVH z{?_9Nv&mg{pyl45KJnn6IO=<{BD-K75<9^n1i{^I-<`KVBDBx28ecdyE#`Z7U48aB zXP6XSiA1TjrTwKBS3Ld1N+?h~CjRPcg~gVrr+AKNG8r}4uSnM2Q}sHV6$e4F&`5klMu$gcBjjhn2P+`DJGcq zxWxFZytstKB+TtcjL5?VxuvZWkIYPF2D9#}tFBB5`#fhGstaLYh_Ae ziqv^YwJ*TAe(=)EE34y0$K)zsAN+_4k=5zehp{iLQPH`Le6oH=dB)@>tmv#n-*b4yEI zO+`XdT3dTtatcl+Y^cSVk693+If{>q3wXS7v9W4Y%n1qgjm_p%(^sZW`*`D~h4U8R zvjdBAFL#0WI9uD=UU~6le4Z8;kFKt*(}hF$8!;v)G@(?eZ3z1OMU%#|zG-W3X9Gax z3AZ=3tlzv9;nnGK$JlH>w*y0LHVAxvSC`$%&716jp%@35V>ZW$C!qVQ)mNT2X=C+4 zFDHeBhrU4uD?>w3E<#{?r&{xN)xmemO6QI&y!5mQc?rTTI|(F5J#kEqm6JwSd)&`& z+w$U$tqO_^xB+8E!y$-pk}CMCbC-}3Z7AC{M+qvBN=^lD!?Xz+LzjT-%7ZME3T7GlLoJwiaiE22vE z%T;TrA^((;4l`0wZFnD7z=uM)M%^DTxdeAEBFzxRB15svQgiaaY`uKqQ{y@3iv5uB489Qh<7zmz5CuK@({5hk>;i@Iz@`}p{2RtCa#sIZq8^?|Bb${T| z&71zYXXlb}V;7GegP(MOfYB-MLbMSoMfeG>Ay%$j$txzz5$q@q_2PZ^-ABxxJ$ncv zB};uVG0du@$I1ym66|=v3J|r42Owd5T;Om6w;QZQNl8zG4U%B<=FQh%fBh@3yaK~P zZH*2Ze|f;+iImH2?7V*WyWi#aB&$rh(U4^kU;?9q!GdQ*n8Drzlt^%rB}Qs7Fd)mK z`cFOe6dwF}<&l=fsNMVFDbbMj(If*Jb>ZSEl>3Bb%)lZ}c??+5pxB0^WtJH73MOnt z;KY#G3Oi+7g4}-l?Gi)Mu(fdGjW?n@CfRY}8BKZMNJRz)_4o%zM-P13i|)s|4vYLp zAAOYcB#X{<%Bz0_K)NXWt-I5)>0`ydRMa@qYlVy`AJ`zXY;w9TH`@@GEaF(3p0M(i zoz4AwLtb%D3Cuy8J<^<>GVd$uE!$8ROC}}CWh@3&y3{0HaZx<4V2UifbGP%(AJ?_D za*YJs15=K$C#3uIQ_~NA(D}`!j&I$RDR5IN;N{jcB^S;B6n-k04PWqF&k&JPN3R}K zuBW&Qo{e@{zKn?G;< z@peMWk=kcmk*wGjdUu;=f1Rq+iOq^wJ9E4<$rd^-&vU^{(^tl!hGthusBQ;hN6%n& zLjCI6Rd0OkTC+D)*P(U$1W{r2R;?;8#XGaaaKTJtenzhzIeIli3)0)z?y(7e!Odn-jGF>-*q>z95burO?y=^-XwZk#W2oha@DuCOHEur_e zxy$OcT`nC5b5IlLw85mf(BuN$g){XtM&ru3e?f;~eepxE7iDd!{=jgYELLI!EK+Hk)5bDat=(aN@>o)9zjnu#9CFY%US03*wDGq>S8#nIZ8NV zW?_12B3&pL^qDQzkwqgqTlF0dZ)cA)D=m(5?lyz5#~onG&dy9Qo7Axu6I-~nP*z&f zl<^sDT|SN^(wzf9&>8l79j#7#f-O$vSA+>U!UteQahiZDS8F-n7W1brrxES-fHX&m zV7TFh025L6S#eWv&N=5m!|Lj4+!w&lKR;f56coSw^d$v`K>>8c?ES+B5OTyq6~i=> zi7;{_Drq+35f{_b5rKT=73Hw>^z@8`#CR6F7?g7{dvS4*!;!%?gUQJ$yLa!x%z5EL z^K;KVgO&4!4WDe;vh}5x{&xQPOOR(cF_xK`g^y{>t0{uxgNzg$*@5F1V!X(WG?rUF zhsWKn^?O-*iG^U_PB!ch^Hq+2!kc_%t;gpKYeRah6aDU>r_+lE0B&c6>52JD2pwb; zGm?_UuhsdT-41w~IG1`{oM;$LJj^6tDxil+s1r`szhR~3^n>>|y|ZEqRuzb1sTr}) zJoB@WBXj8me3cU_{R}neE#JK+D>LIKcmFly*JBaz((@mD_2PLWax$glM|!Cje(JC9 zgj9O=gH<};cWyafYM+(8W%?ee!bwR9k3RmB>#n(X=Z=HS_jQLlmcRbNHP>DsYjxJy z(;t20RorV}bNSk*|^JB{0)S=aD zbs-&bPG?U_a&nK$$&QO920g{mu#xS;2_25o1Qk$_XK?2=7u^U zO`0tR+^Ja1?BXV+rfk})KUo0n*XdiSUgHd8f;h znU#Z+5N>X?>J0dZ?&;_NVk0c3OTv9U z8FoShTecyNRH(x5)zqx3sk(Cfgv%yQ!aoggn3g{?Oa)-Ti(O=8#Dg3EMaokUqdCOE zr@@t=12EGFQ)#u&?@zbcPS4FB6~IS~cws--%(Z&`o2si9jvfQU)N8fd>gzdR z7WDU;(b4@4Ci6I}H8(ZcQ&}#&9*L2!{0t~@_z`l5ar#2gTRulBwuSN?{Pg;x*hfbd zC$`w})QI>vuc&0q?!CJ)b`N+NauQwH&|po}OP}tVURY!?7;rEW1!2gb6e6#hG-YpN zD;NIZ5ilD7N~g#TH@&=!=%Rsj@)ZXiR)fKXI{;v^cEU3S@@|NLjxQ6!*J z>{6g%XWxRv$AwZPJppJHfxm3oGFE+m`O9A@4tyvA9XBh(+its!R|-9@QcgHA?ZByJ zU)`ZYKfFcHl8Hg9;Vy0@H&BIv2yQF5t`JzT@KJ};V`HZ;NW13SF$IM*;c*-A3ihfF zy4|%uyfxTR%i$|)*sHtko}6pH@zq7~uf1MbUX!Rc*kKiFwZR+E<0tBxtGw~?Yz3ja zS2r~JZ@;Uyz0;`Eb|P_MdIVLudPA*p`TU_LpJso(>6+`1D^Nb-ogXiFda**pqE|GU z5J%BjliGyaE0eWr-@eA@|H5sm3e%DdoEmeGP|wm**amY?kOq|{nI%CK9uJpryUdfP zkGSf3DpK?C{r=8&&XJH`F^y0h1Yqpp^*gI-!cI4R+P7m%?H_(6tTyp)B|PL&JAnAi zlc%OFzEH6AV=+M4c^VFh?n*5pooYDk4tOen#&Ann;P?OZA80g()s|4eCw5IGTMmZn zI}D9>{kywWrx*9!b*Vl-o#WVuSVw@5SVlkduK(!|{5^h42zMqSmnvkyu?fAz71Zu) zj4N%^ytdB%wYj=)F1A2gsj~)<3_zt7o4kKs5va4%ra1X?3rAq098BNU6>YJVUHaEP z>N6NcDNl#vv_%sVY#3nq#o96)9GPuv)HrndaBE9_c4{mWFyOj7n=_LPN%-lAwQ>M4 z;v=V z-!CcfpQiv4>HPWgQ9WaijENM|EJ|k-O5B9Z%mSCdCZnqAU{TS?rl#iZZaWNwsmWwA zWBLoXXDpzhX4TJca&i*;^z37$r{Dd=6Mt!LZZYDZ-E4aO^?$LRwOV5ktz9lRqXS7e zBO{IN_JV=}MhZaw^Mp7S1}wB#B^${7mGGUnu4`)XaosM$4ujMIZ%Emn^(%|`D5X8%D;b3qV_4r z`@bAuWG0ZZegs>k-;0ibo>!4okb1)R-g_h3XK_mjmhps41T*0Bp845p_ioqO(#mtS7Xao+de+jP^-7iVRqM;2xh8GhgX_j;|$ z5b*gD5_RXEH;Wj#M*91Ut5jj^$S^+(-uugMqkTrF3}mrY(`P0Os*HmhzkLyYMLt^l zse!TKRlo82>hJ&HItd^31d3K=aA1uhTo{vCc?bwj0R&hE+UE!jWyYia3W;N&H~<9b zj1KYXr{02YU~9GN{_wESK1VQD#;Sl#Vl=#C#uPmGr|*CL>YoaW)3E9J=iXbqWG+|R zLA|3QFszU4KtV~|n7s0jcR66@3x(6O%#S>NH|$d4)2~+mbpFB_^A=2pK7HC}QIO~r z)K~N`MfeqQLko6-G7NvEHz+AT>mM8!;JVi5c026egp{;`qI|W<6c?9RTUk-MXID{v zp)F2W$wgCsAWHOV9>~QZKAh+3xTY_bYY2^n1+za|`?1gOvl!7|8IaXD+l~_F!w*0F z=p#CIaP8W)vu4eZhyLPXt?Z*hI(-)YIdJ19Iv8V*WSBn}jVdx2%$qi^!bY_TqhpIO zoo4%#%L4=4c4f7oCTMPLO;5!)f(zqAty$aI-r>YWyGEU!n!>?4hr?Z0U1!!nAY6fBpOexIapnd zb~zzAB{NUx#j+I?<>&#xiFD@CQr6|ysws(20ggRM3E~v!GKbgc~sE= z^Ih%nxKyg=_U+wLSNFrY^U`c_pS2EJxSHfqh88LZo~VU}vgi;C0FH;q`F;TUQ4vi3 zT67AqenriCPRZysH3x-)y%)Slsz??h;hNGi6wtDZzE@r*ZX0Cpqj!*pje+1R5U%n1-`M}@m8VUH7{hr)ZNp)c!En#Qvw!x^JLO@0(1nZ!U3>XpG!V+; z;fNZAX#)&gPiY`{&x(~-pElv@=`&>2lopQ8bmC!}4BW1`;))9|ybvgaqk*%}#0*P3 z3}^rT{V+5}H?O3D3t<3@PEg*{EhpJ%JcwcPLTX3Pi#=@QlLUx;B2G3ik}W7Gc>C?Q z(NIfFWHMPzOpY+;K-lo{?x^{tUrMz$>3P3xZJ|MG|w|1)op`%B3B_ z^XaFb1^}-hOck!W>MFJ?=mUhokd|V9f=eAGok>P@(3O)WQlsN7A0T7_pv;KA9tAfO zC3UAltfXR$wqEmSJSK#F~His}Xnnr2b%y4J|la z$zZ6z?n>MB*NhR;so+(rU*F%-(G|nBDS}#RjvLWuP?y7lu{~0|L;gSf$u(x2dCHVH z5+^4bkRZ9bLqHeRRESSU3u{ND3;yY=t+&4Wjyvq*guVEPMphlvVRaog2{oFM9&2E3 zFN8-5w~h)BHqzp>YP;K~y6Sq2xV>*JH#_ZUVfBipjongqsM#cB;jUu^D|lX5(_F9q z+h4d)QO8w?LIKScxWOb%sM+2zOa(O9@aPb*6dzNOE+pfR{tMP5Qxz*a}bu^_-Gn2R9t>K!J7Tv3vj6b>DTtnI+a}oh%ea%5r(aKY1>+evjVE zFwvpU#VRHa?K4|@V!f>~1*m$!YY!NnS!??AV9$Lwnr#-yAZABt3jOrOdmm4KyCW>4zhRO|7|R(g(_SSUQDsFBMw?!rGLmTO1h`s z^FI708|%7|+8qeuV2#V`koQ4Qt=AgqIbpw(?S+r_#q7S{^}vmxi6imA*4xbnE#Qk7 zNk8EZRg4fZd1jB02foLwht`RBzRHJ2*2oVBrW0s4-Fp z!%B)ej9hMfpP!O+$Wvd-@{t=rsKyW(B4A+4oDh{X#8oa50xmev--*MZcKdOS#0bnU z1A|fkQb#%@O&?8L;^pi~M&jkS%O(LQcxrpF%f9drO2s20&vhY5olk~ zKx%3#4l(Grh&M<?v$;DS>ULJ1QjmXS!YB6hzM}^)Q z0SO&6S=hwFr^mVHE_&gG7r7RT6*`o`!i;|a=U_3mlDFM<>ra3Be?aC_guMUd1e9z6 zpPC!ibu(dW#r~P#V?6vo1%>@d-XWG|*!1af_odQRRrvSsQOp{mYe;gz7{x=h@cX4{ zHN|lD7%^CZ7@fE;JUEB#`+AapkG+6A$pXI29!&w78HUCM2wS%94}~~*t(!ihaQ^&R zqU#`7^(_fx7E&VM629u|XTAC68b16al+=(;oT`X0z<5UwGj{;jC_e z=?cIpV#ds|lcyAK-&O@vJ6PR*sJ1CLFH6EX|AIMx|N94M_Ii4P@2=dm>;?=XdP|VF zwY7Gx{$Lwt!0}Q$|Ex*r87b0zM^#1LF4W&>jWnTi&Y3lB+GL^E8=#m_>LLtkuDx#2 zM{9TEn2w42lTUV`@|H|IKEa9#TTI>|^~Y=W?B7>8revhVfa<_8fB+^uGJT}_ClFu~ zK{VO8VPENidO>!Te%UuJDk%}#=Yg2hC@9mZ?Dz>q*DpK&uaB){xbELu1KDSvK3M^E z0w^4jMd1djwI6Qdnsu&9r**!2>y=XbJP;q*^ke}srF7A2btZZ6u~32!+26^wbw#bb;65_PX48GeAM$u{RBelkv&2}N znw#Pi66lM#pmsam!mqU30b=-mt~*#`!i`8moYA0dv$xk))zwzjFJ8PPJuUssH{RqN zJvP^~X3fO>aN4w~Nr{R1IRzmkD{ha}B2W9wW)pKWGqls;nm%>f@;8@r*58W4+<-?D zYkXWnV@q?xo;^9mMY(w+8f)vv6cuX~)8@S5!u0F_yFf(0Ox$;{63FH(WO_OaON%v; ztN#$eAPY;S=q5PjVOp6Mq$e(&JuAy*durnr2i~+@;$BVWN*Zp^5{XrWd{x-x*&hhs z^VZwHIPbiSgapzL>^6f!II&3Z6bK*2DtZVh<4oYqtR5X7UDV-tSuvEbe4dbzIVL%2 zZ+nNDn^&c7o2m;r11lfTj+VyqhK8cd%!>B5O|`W_udusUdaKv~%rzNj6$(D7P)zD` z#pjcGB>rI58&IkoL0v{NSK&fl@}i@c1wlwm8kuoYcJ}{q^m8hj9UO6W;S&XeM@<5$1>6=_Zk4dBQk z_?1-#AnIm{03}&2PN?x(&Nc>{ud+2ytgPe9C2AyO7oku_CCMUFaS6?hI$$ho%eeNa zH14psjTi_j1ql_p1WW}z|e=}OSSirldV12=1fZO9)iDvbNv zla{sX+Upw}u{O<=Nrj_}#b87lM{a!L$@X<0A?}hKeK9w62vlKj5<#%gYB7Vh-1GC+ z=bzH1q{I{zYO+&;jcwdLfxcI?ELd=qn2ot3O0t}KJCmGqEK;h}d zz8da{)|GSqV5{8NDu$S-ZOEY322Ii}bvSG_boXGxVszx>1Y^zdfgoG!SVg%t0S->7 zF$N`z0IatL{4oX&<{CML<534|oE<48V?hJLiEc5BM~U4?5YHFz|+|ick2_~Pu${|SQsO-)3ylf zgn#f%;FB`FCgh@m7PVt+R>!X0z7o36<4%yuZu2wk0wqZb~QUq-+8?2*;~!UBh0eChspOv4k;a8jh{NS&s?L51tRz5 zu3EL~|Nig)U@XYzQv5zj6*1UnDeMmi$NM}BGLlm8)xzyAoF*8e4FE+~$F7*`Wg0@E zDqkR-MKLQ!x{q4xaNB23%gf44LAaHikUqiKGI5)V(HLhj3Bf^l)$ymKQ|(532;yu zMlj^4rH2el2+`pPN-~mpHX2&wH98|H2TcHK^`j*5w~o^{p&fM7RG zqaeCKKoYQ6Co!%$>gyYdiV7p7{z6a>(Ff*Zj6v(b9F2xYnX2Va-;jrQh+|?*j^Z*o z!3VSkRg8&AUu5ph(U(}V8Ua>JrkLW81^)>Ga4+a1S&_(pWQ>yX)cky@fIc;J93~XT z1C6EZn-alCDx#TG!s*k(87uxfm&{ zD(m>gWw1^knm(h1F#8%22r|HEL@$i=JaJO-j_uVjHAj!9rKM9*K#R^bdCHinQ%7yv zRt17@zqS7B*I^uu5G)ir!W=-Wes9Ib&h{Rm$5weRz3d#aD0NYl9yo~lOxZ#4&s!k< zKJ!I%S{|~?0KbxxPMT7blaqw=YX()_q1ML6w(M--Wn$9gG3n`vO-)@W1G~EI%dY>` zvKy8xIBQmJZbpPM%FsFtFar6+0-HDOM*zi2evAP zji2m80exac_sb=zv|;@oR_@rb=Z{Q1chMQ7LGj%$W#kpQLgXVAKu`wx8tI2<&g+Z3 zQRI(g?KSeEGjOw-veF~n;jf=v2)ku0Yp2YZi6XkWvDVe)p@wdhZfaeE&6bVTeOgAh zy_>0s8AYNYI}(dz)HJwJMr**4Js2^{Uo84LT*Cy$Jt0Al*Ws|oSYxJ7n{A1;vf?5; zx%fqT00^QR`URKEfm65qynJGqtC*kgTl4SF0vC#9q%C#O91+zaO~ zUOZ#klnk5*hgHnYUY{2a)JB6Lub{w$YYw9U@LIEVWZ_7+*Ug=WXr)a?Q+<6?R#w)E z74Kel`6Vey$(5BAX1y^bIi(Hlvb{6AFgI;Prq3Vn1%uYYLgr(lv7tC`$zqH>GPAQV z-$t)NrNmtB6802|{zLc*`0VWNso(^-YZd%HFXSE9W~t3+ZJSQ-v@8%?V!D^NhME-x1xTYqEd-8g6N;LNKJNc3OO1PzPPbo;sI zPAe<>*RCDq4i|cQynet7@r@#AsgPW>Kwo7*hz~S{*X3JX+mNyGldsJb$9hiHBgI^9 z1>`}7M%^5NOc?JOcvm2X8<~Fn>tAEd#1umonG4AqD^v`eX=ND`$x8qp1@U2tc-vrf zFl%eR#=T_b*}nm%lGa+^w>lBNlB*bzaIPh2fcxy1y4DgcB3Y0L$IW{X7Tw`fFCzy zqV~Q&ayharOKBUydNn@pp+Ejw+f;^*%+0b7#h0UGMqr%f2nuCY{FZ4aEQa zg|_E@V6s`U;TBw+c6;=#&`0IC>T`J2reuBFU6+Oy&CU}v>3gP^n66$Jzv2_;eg6u! z`C_a=@Am4L-@V*(&o!~2v1XU+`E|yy-@^{OLEE)#p8eXhQ+wx71;W%~(^t=k+g{r9 zo4>VJbf@XUu7>XTU%X_0>=q_pK_aj?JbwBLRsMnV zvd_Oyn4>iwF<`7J^;K;&Dtd8|!VsckOPq8RsH6 zP*Xhg3|=7-3$JD+0?)@v2KW8A_G0}aZwrWK=|cnf^2;$OASYsa={xVdBaCvgvllL0 z$Z1-cjjwn+k*B_xG}+STh%M74k_KVY$X1}MkOs$AoKa(~hophOFN7`T~JVf#7GtyDe?K@{&FY~r!kUlR2*Rg zK7ipf^g%7g%}LONr6_As(m+OpSc}D4U*DLVEZ7CoFJcKzK$t8*K){A{NP55#&N+j@ z=4O`LV%Yk*V@(qR8k=6LSASSkR4B&sk%H@gA0;JUf{DlrkXTd-UmRjvt(Q3oCM9ao zhk7JK@3g^+h=0nqncz`<$s&Jcb_E*A#GBw{$^)BH_+{TKe-D4`jXYIA<>Y42ZRN;xI)$E&2dB(POqX7^VEZ<7)8T#lYBsFjHRsGJi0epf ze4>NC_14Eo&q!BOr;nUCiPMO^+Rua4=zln$6fj#fMa4NlqiT$B1@I9+L;?`cwxdRk zsIB2TF~6h7-P+QH0-8-N94UPF_DlZn$4}ywOJ~q^b-EvX;I+pdd84Q}Z}OCa=`+TS zA77Z9BDg%VzOqCbq=+NR>m5&m;Qbz{x2>seKf>2AkF(<}7_{l0o4OLS(@?Xv}a~ zS>rdB{ssmV5wM~l2;m4(hQnLD=Dk!y*r%v8t?`>8G`+ zg=4vy)|mW)0-w(#)uxg@{9?AxVIM>Rt_?wLO`)7v^?Q7n2xD1%u=*f|!?a^#LnG_$ zIcLnWcea)8-JO`4l5EW^C@xA!Ojy4B4KC=zXEm19v=q1z^m#e&8D6#OgY(W>n3|G; znjjnq_O!RhsI{4esm75bkvU3B_h+PMV6Z^=#TTAK)BVI>pQLsOj{bn(6k`HCu=V(Y z`}ZGEsraYDw)?aRWBtKEb4znOC)_m}9BVKQXJ%w(XJ>VFc5U3aW%e0oB&H;`ceHbE zkWtLma93wHvMIAKXOZx)*WBFLZMQqi$}&b|;!L`szTV@-KYO9p?a^BdYqx)hsdb{o zf?nI<>d{+FB~vH3dz{WLyQ9ah#u~@zjJ3paEvL_WSZj9bIzoR)a?~+hW+x>4@T>(F zHZ`r>vuAxxRgaNHLKq2x(FgaEBa5BhUMpb*3_Mij_g1^LuWj3L&8!)+!}KrUq~B>K zJPMsPB4=Dy7N%;0!jnvx6Sk@G!jp_#tR9h4FcDc-;Wt!a9KF0^Rzd!Ad$zX(gz+wP zAeZ3LLIJG`dV(A3>y~tNZLX<>CkREO0);hIVkk7Lpg@Tb^ih^K^6kWbk=amj8P%$< zjT)6=ixtOiB=74FQtY(Ha(}3@S0roIKS|%akdn|rD0RnuNM2I%qEW^Fs;E@EaA%~{ zR-{B$0;J024Zc%RIe&Bs#`rL2MVH?PXz0I8IRcVeeR^^6jQoOi6%`-s-}h;It6#4R zdf72zj*>+o!bvEyxx|tWDb3?_KEG${a&T|} z06+jqL_t(Vd+DW@5+99!KV*h_9fe?m5h&<-R5-J@H}z zd{UBt?D$+}dy-e`5)JLM3xgG9;r*F2)C72ik~BB78!i!9O36sbC|AGIuLw6#fiRy~ z-(r4_8PSPRDY{-jknK2W(j&Area>wo4%+=}*3(=t7Sb#+i`b6xM5J&(FT& zu0a!5{@^y>2g_Y*tv9IdDlPY6@XOH|RKINVDBYS)-`l+v%@KnhABl)-f)$0ZUlt9m z(Hn9vzd9N|)g%{*7&LO+h`%BB0|bCqUbX-7z7AL!XI8lw;>t@k-}zQN+oJDTbn z@Qopcu7HmhDIrn2ckPMiqQZyn&${Z$G@GsEpKmnR*SY*&mD!}7^%c{%Z=4VlYax#% zEzOc9Ogj2K-P^bLT3Yo1;o~C^W6r+#N?Tqpx9^vdsv?gg)?s}auCMEO>WQAReV+GM z;APpq9-koMs3j{|!3e-lr|)=kxw*B5TDIA{0{iy_Q!~>pzX}%GAMB}khm3;gD%HdP z=Ddl?q;aaX{-txeZoW8=Nai!~QI@Ps@P%2XzuvC;{u8d%`z@xRtEM~o*>^i`y*LpD zgE(AvDDc9nV3>=c!>R;*%Y!$WCXT`u2anp~5(v@gN?&D|ESeo#knR80pSWhpq*6PV zZ`REo?Vdl?T#%tniFeht#aLAxKfX9{(L8YmG=hfc0KibICXb4J;(NxM9&sILG8;pl zt(7tV{={>^Y~}d2+-eYLQ=lMf-^1iglwc|J#E0JuXmuuSFl5yDzj>}>*`iDlKcK#2 z@-0u^Zn*s~_Dy9rW6)RHn)uQx`?5tgrb0|a{%0Nti(taVys7auE%?J_`Q z3o`H-xVBFkoVo3yyQNCMN-t6o4u8{rBHzS;5)|8p5uLJQB|#ivKct zXbM0^_y(8bEnT{l1s9?eza;0zg=Nc@5n!dpHg;826-s12aa|tP=m-_q@)s5sV%jeo zf(aUxF*FdP$Ts6Jkr~SR6xTSSQo$d-g^{= z{vEr1BxIyD!Z_&QvcXxiX1BD6>zC;B80VpqPD_)=`+6m01~|k&bf~VYt2-qn3I7{- zc4e?IJ|x99Z{BqM^W1FBK|+hqkNShk4#93Jj$2e5|0Aqgg=9{#>#(2WLz~t^N;;PuRE#=No;qx`q79HI@&<#X@GOp*iFp^a z#DcvSEg^BMRP*Lf&q)6#_v|66zxl>`6wm-gK4yWrWz+th+bfX5vGBj-^0P>+uv(F; zv7t?w$k8lYx$2M@r5yea@+c*$(=w7-M&Sk(F`b(aNhj3@7hkf_?eg4z-wOdBC#V=| z8jstvdspe6-Q~|d{a#XX?1F_8m)>weUS1Yh9i^10f~lbVcQ{Vcjo+@W9wn?v&k#GD zGX8M70U@wOQ#>L!ZTr@0pxS%HmS(?4X^~?N*Zv8}fb2Q4jz5k;^Z+ z6tyd|sMH|H)6+~$Jx*6#Ts)34s7-``-CfY21y;bZ(u#u?M6m+sjY@O8(=C)6Ek zXl`n@#l^qz#v5GXm!Fr@(pZ;2GPk3<2mNeXS~@4)-hF2!JK@L>+;b==0K8`)uWtBc z6mu%;!mrGlzGCIO3l_|~_^TJroja$k zt+mIF_YwL&d_ZjB78Dd>h>f!j?r9V}Aug`0rpjnGXQZdMHMekoJt8eGKAiUM+?@P< z`%9-!o6zIvp%jzBNO5S}>+b*mh70yQmu~43uo0}FF$Nhx5qs$))xa0W|YFvvdym(AWQi9m< zJLyMwyB5j;rA|`KarwCMYbwh-QU4(~^-V);o{5U%EK{$2Y1d9KJ86pOHB1C#qmu{E z)bq!To>yG7r?KI~1A9L{bjXggemn^XBO?mzrEMQr$`Foj!)D9M{rgcs_r;&=UtqFa zWH)H_>eWk@EMaE|y|A>};1i>s6$=CQf(tHSt-|=l&#%;h(&*HMhr0wp0v$BziR4#m zpRs*Lv5WZ((l#-qM93yD3<}F%Zjd9_op;{Ja)ku+7+(1$4J#-xA)XiskiZE%O1Bgc z04osy2U(Cr_4eCur#ccc@kE|LDJPZ%Ovs4!F4bh`l2=McmkN8AuBeG;^(ZMr6*xG8 zpKh{zZb(89N@w+j5}9&&D60NDhU4usNTD!@3`wtHO;l7be7N;&=l-${6 zM})A(aB+nYl^H-374mrMe)K(Om2chNke(aRMHEH0#S zS`fH*(nCdy`S88h8mjK^u4%CZeSsC*L)R?yCECQ&=3kq_evMHpYU;W3GA-I?=uCQU zdQ?EjA9#_<9|(`m(cg1r@cYj)%V<1d*o-1Z|T{LebdR|C! z7>&N_12!?v@T==IUwgpi_0mY1mp}F{nvShJz7CkDgl#M|?JHE4PA9U_xH4Q>cigP+Z$9@%nevA|5HZLl29-f_#Vcg z@ROr+q&~tb0#nF0&g-6$k`T{*omuDkI}pcB)8eLk5@vprMo&hEK^M!5#Tw zsJb7S>VNG`PNO(!L|KgT7n=ZSp8wE85218so+TbqlZ;bkh&QN`Sx&N{0wEA5xU-k^ zOP4N1#A0&iLCYEG;iTk%5fG5v2$Kb$kU#$MkGVq<{W3~trgF5^D4@wg0y&}MD2$nx zN&kD_`(8yw1tJY;{x=lR5C;=xH1deVR3D;Yzr`vZ@}kzq)C?nZjG&n@napzr*3Q+bdc2LNTw`kB%N=EUPsZ?Q=#(Ccu&Uv|8aaT5JdggOs&t(?*u_ zSYQlOYWh#~au|;?3$s*Vq7kD}RDef_75%spyhy|j{zST8^yk3^IfV-fXJxhu4VRFQshz^QhNzL~ zDGI%X^evua*Zaf}61k`vR6;p|gVqZ#T#}xghW!xwpj|sY%`YBfjj<&qrN-G3n45R* z*^L`NF22J}vn@3-Z$wUWePbCmVg~)_u_eW0Ml)&E)d|CMZpgKzC%T=&H8WE(E|{He zwo9Gq8QH8&(B_bawveS`E$H{Bn9UZpPfrFR(M^2Ek#rcKKD^{$;%n&nSpUdmi z*kcpox~ZeZVzG%!08vy0%zTGE%i>Bdx?x zDl9DK?DN6uS~^c>S9fz=U0QlNiW9fp;q7tZ3IQ+F9P&y{OiWHn#;r4MH!y|nvUhWn zdK@a(K!^#LDV%e8Z@&3vTWd!`Jl3%xJYiu&S_pj{4lWo>NlNm%Jny}`3R~$pXUN>5bAr79~i@$$s! z7mlB}>0tHyrDfY18*%rg3g9hU>Agqb#E1+#RG~e!HS@-f6I|((KgtB`5r@Gsw(2#U z9I6niAUjEP0ud>Oq`*#$K1QAxeBxCOKD=V9dq^|cP z1R=~%z~lY6>LBY(W+m};P>vamL{u1jWdA{*G9h~e|1Rt9T3u1Lwyd<#>tV7IE=+oR zkR-gw42c7-@FxxR*SlN@!r*ZDTNLo)4YCeFtB67FtFOMwDN9xzOdrHB%o+9kE?c(j zl~-PwKY#vBH{ApWzz_!9WCx%uvj6E%eCIUJY&I<6f}BDVU_Giatz92OpfP%U?Tlp zoiR04-P|uC{3IRbhP(vCfDWrRZzy~5$;^B2Pd@!j(j&mR%l4VtTU~)bqF(Q7m6P3J zdMdhTmBSJE*)JO3U58f5uUA{SG@fl2wrw3QkzU*xEv#=bgydRzn2!_JKEm59ew#xk zns)uhr0?8T`oM3C5)({`eOr1$b{5$HAQ-;8rb^#b;|g#mohAlpT$u&|Y=90NQzM1f zW2h_zI!qG2+@lKUgJGX731ct;0$_@>Y%IZp*(3Z*zojnSr(M4W9lm`;j(*OW%ETdb zwD40sa{oskYU>Vyaj@jHnv!wW>|DvlK}x|$f;>gP3edHCy#{Hf}GYmcM@cIL2mLaNsLPqD}*`iM}Y6s#B z{e+D}NOjg^)8gH(w|81}L04&e%v&2hm(Nqp8g001Nz1IUDWXhBIv5&QTQm6-W$7-R z>Hf!htIFrDXz-UF@{G;r)O=U*zrDD8xEoUH{VGqawt3lNaTg`)g~);{Itv9+ zp|p7Iwez$O{oADSyKCBPyDP%8CV<*;O?}Z&|4YM?$w-bT!$(I{P*WYYcfikiOws|xpajSca!C2Yp;GRc8MVN^gQ!JfbV+wMO?Cywjb%$p_G3yS}k9uLs z$wIt{?Ijj|>KKcD%&6=)R%}cYM%ki2ux@jy!~31yake-M>uIsP9pvfjI>KWPSc-1&kpc z@(O}b1ZDRckbeuaq+Rz7Fdo2G}@E|{_sZPD2U5=YFpF9-R+S#8-nFy5yW1yZ2<{zs1b+UrXMwQf{4@H{7^0>_L{kc7GsbZG zAw-ZcyOC|AjTT1+%__ymhK5!JZLQ4~L!$(7+bUKaqB01w$p7sfLi?%2^lu;8%H7?Z z+>&;VGMOk1L)OH^xb{|-6PmU*1ws_75h;%SfCJTmu?Aypmb|<)u`{n25cFjQAJT{^ zlQnGpq4usWkHX>v@}KpCGUC4b?(1l4D=8}a*K4n(;mss1E5>NuwrMMF5l7_ZCTFBE z-C|+l2?e;^ysO7vQ(qVI2rsTUhA{S+v$C_35)wCW+61Z?^Ntu*Fsg85%b_}#!@>H~ zY%$@ox%yzW%jIL0P8y)eO7-;EneR(V3NS8aszWqH4NYsJai;BbIy3gjRaI4VjLDNG z?cBKoyKJ}LpPZV~*51DUlTVTp;-^oa!6Y}3L~L0zFS;B(0X+Gm6!iMdI)j7j5gjg+ zznPgC3<|$iGiLNC+M&ncL`g)S+0MqSTAh(QqGaL(7k>Y6>fv^8+qz}n-u)awV%AKw z#U`5#c(ShCU&?LV030)ZJogs1wsEzBs-n6yCojFFsj0f=pxfaz=?%$ADL^n=tjxP8 zgUTz)i;D~Cff*U;Xz{2l$b(eC>*KW7)~#E>8HXNVSyoz}JGR)b4jDt?n(_*^lqXD^ zjFQ`IF&ot4Vuz+yVN3owKQx5ssmc)INXMK}qxe_a)b#r9-Ro*<*?$w}a7>te!;9%z z>{DrUhm;d@pB=Vxp-KzN<@%{ANOGjYl$6OiIolc<*-RK@K*AXnCPSgrn|n8AB_i|T>Ldtre8L0;>Ls3FKyd)Fys~or2B~32M!ZMZI{E_%(b6flO3sl-{%wl%LEGZ zfl+Y85|t>24P^|qBft>D>=Zre8E2gF{qKLDl-N5{7F7U4(m<=Ho_dM^mN;+*w7qy$ z#`+0S8#$X~MDmsO4}vxKx{w#M8tiun5HG7qK`_Jl^XKD@nv8WK zVhpZPl>$}*r<%)_E#ovLWF{1o;8L7yATR_08IHz*NT~P13ol%M{q<}vO3N$~gE@)m7{p@}bV?`; zSP6%%3v9LI%8*isXOs2JGtcBJVV;3_M&o>H!n6)Xi%oU*%JQ(=MWK>bLQGbNovYsK zc;gkOTpb-;Z;YEZQx@tm7#b~BzsM`LBt;g%!MLDA9p~o2kk+Hq8rzy0zkieNxqrrw z8bc4zn9MGG_UrYIU=U*v0jH1UFnVD02g+P`|D>g|Mjs4040^}RDZZkS@f-^Ddb_7h z6_<;ObAe%BLZY`IkDKMRW#tF};$9!C#a~>6oTct)4{qC?_>G$yANXxrejXQHGN{EG zPe}Zd3o(kh^MC_Qeyuw_B|Q5KW;8)$|Q|1)cBo6+K>0zyL<+J(D3&)u0=CCV=M`m%ok_3K}a;j5RbAw ztUhO=_HS#u(O>%1i3b|pWAl|p>+2*(X5}LGuwKy)l^>!tf*?qG7q zzZOowC?$fQfGjMr z`9v}_{^;>HZ{9p(#thjye2s3Y{}e$6mMgh{!tDf#;Cr+;PqhpV~ZCH&sX z&DSqG-)f0jx#HvQZf;9M>!G^nq6K78V2`6aHYQFkv4+Y{K^^Vgr3Vfni;yuRQ%o4tMXS;z zCZV0gORSbp^@o}j2%;AK9;LGChPpP7Ti8HhmxBpBX<&}1P&2a9%FEmE2Dx?fKHL^_ zY5LJ?$5%)V8T%+egTP4OBihMR3LpE+kMVybJ`Z^CqXKvS(GUOp=JHK}u$U?P@u>kh zPC*0{21dbudHjj7qenG2H8nIgXXoS_bmrWgoU-c5nnSgGMU8@kr1@;#sTrdmKXT>+?x#vXXsG>Oe^XQAhEF#C@|VA)pX}JZd+~W^XJw{wnW3w#v$CvgWO1=I#)_4Q z*!UFtJv!lptL7m6Q*_rOtA7gm#8E*&UivP0%5q1gr{A5Pp1NVfYy0;ru8 zk`iJdPT%k!PC3I(6NSTYvkX5SHDINO%a<$1j=OLDdai96od5JydH9f{Q_B8B3?zbf z>|~rdYScvJ{)sEiH4=dnOz@@Ub%Qs>Yy1@a#$f) zvnIg~8kv~$m>`SIDMf+5z+8DSeMOy$78{ocd-v{ztB{LT3Zs%a3uewTX71d%9+a-K$^D42$FkDUwyo&CjR^$9cY)PJkMt&$9hKdI_g4^)H9&bv)4}#)Ei+bg9=X)zKMHTc>XaWo7jzF%OMQO}U%bX}`8#7`0`4`I~ zl4hTwedH;oRAmH5ip4fq9p16E<(bFTJzai7Y>dxy=!u8pA9#!b#62vcI2r}`Q4B|F zHh1lDe(U>(db&-TfHxz>{-YnIoHaKu0#^o5K%*i5+GTM!e=F1F@h`oxe(wQziLt1_ z_tazQMx*7QZ`$wqwY|L3xb&MXzq;4EA}N5w)KamcZFbn!2K7yWf$*jcvU zvGo$IA5DAjFa&iWO$+l({tD>$bYtrGgnfy%W%dh_0Px;)xYj7G01$mV`*6vszXK!X=gdV(q~A>8fOLz$)y5!2EYz{iCa zCk&yU!VIOFB6`RN-7>4@5vj)O=6E0dfLm1phq`QUZFGEXzA!q*^tf-F4FN&HBQwPq z7ZVi5h&o+k2ePMNtm0QPz(|`6t?2GWgZi>AJk+8O zgjHqr?JAY!C|M#!eh~x50$IGYl>5XdFY0StWL>0;wa zoE-~y=?$NDJL~~9@^L^64RMD@b93jVi{~Z9bDW>EqJS65Y4NC49bI;dNzW<_J}lZp zHnG?yVXc7p?2C(y5ra$QQZfVs8Od?erWU>O)|#Bm6dGF~rq$z3pxo}rOt#^3UC0!J z;i*6n736e7KzIiVjnswbq{NpubK?tOSQsArIVKH{4dTlbM^Zp68>8+Y;vlA3VTpqdjUqmeQA^&r0!o}Bw_RikxKEiflkbAH}td^LQaSw)5129 zQ2hpro`YE8A@!h8l#eIy^Q8j%1c-JrSw!oN8IvdGM7-OmgKO7ppF5Y^w+D2VK?)(w z(USG{nL#oRD@v+mFS}yi>eX9ON0*n?ZTe)-`~|b#erv5tEspxmoj+k@VJ^u~6Z0xj z8CjGi6tcLDQ0umCE3>Pg@6Cs3at(&M6Ijd-+IwkkLDN%YipG3t5$7kZ|l(s z-LY@#)S^fYv$9hJzHE$#gWEQgUv)KXW6&8w&}{p*GL71-#z|l(l$)1Lj6!+U(*?azhF8u4eQKEDbWG4(A*JPNq(WciXwD+K50!RMO==~ri7(%1usSs zB$htpIHf$LUxDBTahP2$xZwQTZ@=T?O&b@VwJ_|%XH#RfMxC9LbNcD0x8XD+6t;JE zwY9XOTVehd8sv_yo^HF_<4(`aL@~{z#eBobnz2)-B&H+@t*Si9C^`_^KG%VE3f=IICwnXveF7n zZ2YkywCapVW-Huxu3x{NTOB@L{}D4vTWdRK{o~@}EM^NXO)zHt)U*0F(eH!CcR15-QMQ*xx0+rTrYR10gbkM-`;&}L8GSW*Q}@NRq21d9WX-P z2yi;4jFg^^FC0I9MOk@=@UtimR>@@IwjPctapsx9^BF$9yk_#c0G5BPVcu8`SkyR6SwNoz4lkiXz%JI}jAO`+23jifpOnN~B zWu-)n1Qd$e9fyghs@<DXWibMb>Q4Q1%npBM?BIS0XW!S+;DMj2S-UlSxUr5QnB@ zF$o-r6#*i_WY(-%1p2`TTc}4X!;16s^YH|YdlP6&ULH0TIQff*XxWka>z= zav@=aI1!4S0KgN@(yOuyc>F3nAS<@X3M{`?0rRvxZ!TgvikP+{mz};>$|JfO0s3@y_nV9 zDQC`{nLFh_XU?n+uUr*j@ZE2`wZ0Aoe}Ti~l0reJ92TZ*0(;7u&dxkcX0Qp+D7&L$ zXPfK0KWP8Sj{?UZJ2(T8l;O9qz(tsSNA=+}TNHX^$*nv79AkWY0{NoSMv& zoTo+AUR0Sd>zwCCd7bKy1X1$ zyB8-8JJ4TRgbZ?l!jPfa^UE%WQ&3H=va&>i(&=GuTZpDwOL~S~uOD)pENe ziIyNeqVY|u02(z$Qesx}iFW#AV?fEl81YNuMjq6=(-O6Z{j-V+>Iw?D`~xp0KZw73 zA=qLVHn*S}AKPSit_;LoTmWf_p`)VVD2X8@i7_>UxXGNQgH=9RyV&$_*><&rUVCH3 ztb@im@@-s_EcCT`1+#Rl0QrLPWpBJUZ}tIRPad-dsbKV>BeCMVyiud7LVlO5RHZ+* z+Y+8Ohi!Q%G1+1*7Gv#faG~f-X|nJvKzYLIl-%NunDrpHV{Kvne|>=hOhcng(e204 zed*1Ry^{divLK-##SE!xdIs)%!37sEHv{5?HlAqFqP~N{GzM`dSJb-dCDg!;$!4HZ z4!WIv_SpcVYVyV}aR8Blo|(CkO0mf_kC;4Q*{t%g{=w;08Pv6hILz)K%ZWE0R+<<` zzVgZ|Q8gfZ?+W^9rdHwtO-5@0ydL4OvZk1z#w_re>Tpt!i@T8?ul4oytUa0DV7w0D zQwudUH7~sI0_O#(2&{S{Z6w3u6qzucL-!fOE0~I;sx=cKqwYe zz_@{@nT@jqCQd^`gQB2#`!uDqJ8wn}KsW|^>G5Pw4TtmzN;SyPJIH34@{}Hu7%JXw zN@*@80EV;@BrRA*!bIF%;99%f7HJAIdr*-8!Pz5YTH|r~tH(yXl6_|SH1d6aF#+hl z%WN-FD8z8T3EVm6-MPchVEN?ZuYB{HCk`A`*>#bY>WF&T-Oy$-+E(8fMg5Zmvu5o- zetgXb@2v-;d+NzoOUueve6U6AURffGj-NvWt^1RV)aN>OTs;OKT3Z7&)rbH6?Ac#G zl70at$_zussw_$Vm;*B>H;l@ZP$MfefqMBxP+ZbLEO7aO}((`!D|Q@)%R? zP%PxrRMq%=`d(^P3o~X;27lbPtpyr4-SEJ{Gxo2ntN^o1VGt^F`Bk2cJDUG+)4zb8 zDcq2uWiw|@B1jE9^&XBj`$r%IGGe>=rUzypGFia~Dhnd02SFhYJaMd9vw(>AF`s#JI(@0+s3+Gv|z`8+FGWcd`$^V|yb5@cjAniOh@# zf^Z8n;PS7(_G(@InCj}mk3IJIB^O_G^wCFwtC&Z$PL0q=pnqEh1QiyEg9qU#hcseiUMYWBG_pmN>Mm4dmU)^{jzoDLI%JZt z-ygNwRFsiGzY76|DSMvFJ*Q^GT`NC~#KLlOU$&C)NjqHj`6EVp&}L=JYd37tpM{p~ zca7dYDXLbplo#etn|Q!mPd-InBGObX_r4^mB6KF9qxvrXNRYAnOA(jOHsv;CL;_pB z)md5~O=u6s6a%U3PCjS4DU>@uvPLgkiCVQ5{CP!02ps*IjA44;u>@uELI^Yf6nPX6N=jHS zQ5PZR$X(SbitsE`btPyteQv+~b~Y^tRV^e3giINzc|Tu}A)u_}Vv^FUptCQlIM+F=@4JixRBj2V2MX zynL2eVy>A(^x7klwb_x-mJUegJ=vXH|NExKCg7=nC7yrWv5^B0tR=>C&$a#d%4ThF zc7N|XtpLz6HBNOq#!SVN&rr0lrE5c%-DU|#BhFu4-8y>@Br8{q@5gDZ$^9r^z+ju&W30aA zlELId3AB&c=4$EGbhp#Wl!|5e%Mb$=T;g?nZLa^Chx1~Vz?MMCtxpDibc!ZkqeKj; zlvAs$$>?qn+78BBC=WD&a^ zc2{*Ji+vH7Y9U=%`+|FDpMN3{4V@5fKX_nW9%^{eq$Q>9N-nLR<%Cr(=d{?}Tf)(e zehhFsMNh%X1l+N6XX~8l4czq|j({F>0Xw@rfGfZ&g>St3@un?}ZqGpxzABkgkqJN8 zQ^BU9#p5aZU`1=ypsfcTI3^Ye$izsRA+;7CI%L442?HCOTDdxf>#<=W-)?&+7-;u} z2IM#jrhR!w+Ffm5ko1^EGgiDW=kAv-S+#!MP7SHFHH@vBIdclB z6k4hr1XT~NoIQ8HNB^^oqlk^$eb-%c&(E*A0JxCkhQ^vK3$t)7U)AW1EbwJWF+-T? z(e9IBNG2-cl1Q=toMMiIPCR9<*Nf>QfM7}*_j>aWnLF{GzddKO z$2-H3Ykzz9&42uHdWDJvVEzv`-oIm8yUWS-=81!6V#K(XUQa_A61DY%k344DzyGy_ z*OeC?0;@7>rHfE< z<2P9d5#sKLIT2kk8^WW$pO6dNNaZ@v8%O348~^gB>eMh}|WWKY%Zus819SyEOx zaA4J%bsw);|1k%9TbkP%8+QUgb7`U4fQ1J&@T*eja%7&tE-T=DQ}eF3-(3!5PEc!G z>(0hTnrk=|Zf*+GtceztXlOE5Hp_`;zD%Hd+?-C@QEncKt@CW z(^RGA*-n$D4HMel5t=(^F1yVD(`(nRf9T;y0Lm#y2S(PzAtxGJhd(6*N5hgU40SUr4nWhL-&l9R3-pG>3d9F=(FgAZuZ zZB=n)6z$=9!2`W*b(u|e4lk3!sa?m}E z4kD;(`sq)9ik%RwG1A@`FN|^anLE`3u&d0xr>r74c(~Tv1NwL zAGqb$YyBM~zI_Q3W%%a0lEy#(-nVf*)eH^NutF2vTZS}IeHMh;p!tv@Du0t%E7b3! z)t%4$w-XCsaf`=kjU6~yKnE^Ix%KwuK-g)sV=_9yL`BkR-6X;n_wGktQ_UkqIgZ(f zSR_$+$DLb#dkq)psV-kjBO{89drsoZ-&%L(aVWv2g{H_xLEXWiIUf@S?_yml@pvF4 zown7U9}9SGQQy072G^`CKkOL6FGbIifh1KvRsC=)tNO{Ly1XPF=fA zmBF6=LJxVm9M&Oawhy*pa?tnQ#!#EjUtEyuqF0ije6o(SV67B@p>O4_I~*j{W~e%2=J3YC#p$#TD2}h&;o;EDhZ~sIS>3MuT+)@1-tzJGXj5C9 zQ?Y=iV+Komlj3!gkulRRm|GKu4GS~-``c$#4=Qn5(X_B(McA`3yOGt)v#etzPNns`2DIY2Q&AiTBIr3tfR{Y&73jm_ka4=$Pq(q>+G3C@=lX=Isd=7u~~P&I0!_5PE$~@#TuHhCGa1 zz542_n4jX98p|m5ciFvWiFB2AGY11M^DeMs^k;!SL4=uIFgUWXQsSjm5C?N)MAJuk zd{8d{l17J#RLt%e?y(Ps$}?ss(ST-<1yRLT7!qe107A+n0XGvx@+Cg}paz8DW2Kbv z1*l5VnsPc>KC5XDO3JKfsR9mxQE(9C<;#~-aMtf2`{+oqVx{;9oGBB40Cq3euV2rS zpE)qw1I%xEm|U^sr!F`OOf-}aAO*_I)QEaiQ!lch3aCC{1bndmL2`87VTS5Ju+-qb z7H=2&*}iiDo#Txgw-uHZvj;{Oru|2Oq$^1#fL9q7#Y6t~?jdToJpo(&07>+G3BOLv z&W=C(cOf}`gr}CgKYJ1rfYwFbzYdwNJh+OFFxAvh^hi!R^=MjyBo`St4W2oiFs9Jq%$B4e$c2YZ zyY-fbn_F5N8=H1E?&8c`Jmxy~_<4M>T~(XO<{Rgq_|)UChr%I;-TBY^Uj}{tpC6u~ z_OEm%P&mbuGkUMg_%tOHW^%i8XR*M&d_TSX&u_iCYSHmCPdROVRh66#Og$3w@yB0z z_N6xkl}Xt02YCk$(<1Dqk&2u4m*DI&Q6)X=oI{^}<|S0TT~7C#Z>&G-^q>8|E6$!W zb-cxvHr;u3*?U)Cb?54j8kt!}!-aM}S6_T_dDG5L@_+J) z*LUvx`44}5=J@?a=tOWZI6d*$(%)ToZ)0O8JN}P7`pP%HdDQ69^^9|5p*4eUOReZA zhRHEQG~kubJhco9(HJzFw_s{vA(Q6*?2gHoZAOkSVVZN}h7FizR-711m)p%Uc;duK zEv>B-mb9Qb3O_Z{p->D$3{hNrNOr^l*#Y$~DJ>a9o6~w0=^6|@&bCLig0gX+9#~jZ zH=v@ftgNoItg@gWAAM{GC!qzVO%LBWB!bZzw1p zGh_%Xk)%7u_F_(-2t~tpzWerLYgW?-O7(V|36*0F#$t=cj5%V=SZcN#W-|Q|1(AoA zl})c6^5Ui~Kp$%DqLOPfBT8nqx$Fmzs4L}spSC*co_P2Cb(2PU!xkxn3Cq>_7E39_FJhQwyq0=W!dUgG#4wM=tn?65WFY?%` zHIJ;^Q0jCKD=(?7D6J_i8D3P(EhOA3Mhk){*9LTi!z&th{(JfRAGI`dg*>d%7+_yJ z#x6|=mH&fkWrCYiuzhAPBLQ6jJrb%Jci(+Cm(Lh6X!;ZG2tDbflhBZ5B90z3Unb{0 zp#WD#*)lO;cm;Xn+a&acN~Nc=002M$Nkl}3UpjJ$OQ-J^Ft3k#5A28 z@xj0MkMUzCcM{SY;4u1UP$PHZaAcMB0|!p&*5H9|maRT+vE#4^5k&0Wf1VIjp~S>N za+P&PM!kGhLSylUv{~TE&aoyOh|?9*0kR-eh3X~2uF({GDkDhcE*cTY`r(HkW_J)~ zc!eMWVL()rd#ocxA8j3WDNq-J8cEP3Vjn`;ImtnRv`VV{8d=TCGoHkuTz~r0pBUp< zr%{`VVLXk=yUL_Ld{BC|=F^QHb!`2mS9S&ibbE>{;(~$5&c@AGUEx`>G-7wPg#z*a zyQO{3VMSxc?fB>4cmDc+S;T{MqNnOgrlMn|YOrC5HCPCMNM)TxlY`d%Xg}|-h(^O` zUSf$Fb?cbNEvj(s?eQIK$i{=9;}FwuZN(QKUGn>aRZu6bovWa`Wj!(*5~vFx?XRPY@>(C?eR%bX33MPR0{Ey14h_iUu$zjLu(ryFTNK%^niS34c(QO)&kK- zUyV6!1>s1bz|uCkK2P#VD|eRszDQnF3@ub_$%&PixFZ~xU06KCTS#kVbk<6Wl)8OL zg%oWVk9RoMC!!yA`b*gD5gUV?EU>pVhvpqJW#YtfC1s_-KoF3cHp!>T*1`)*UU_fL zs;>`P=q)MZn-{5z*mc<_Ja%vOkgD77{pXCSQ%^g7AhQD?q)%7Np?G`!j2 z3(&yi;#AaTov!79wsD081DwtX=VhUni}7TMoEVphh7a`QuPrWoyu;72M@rP2gxyLc zJwR(?>0ahrx&*XN+j`3_w{XOk3CwfPJ;zwXcJC#ZT!Nk~aTx?T7=#UIKx!6`48cmO zC;_OEm-xyDV`!`yiBBp3P;hM)q3GMPGF7BF7KR}RE<8jTi$y4QCs-5{nb{hu2`syC z!v^a(%zAJz4#i$(Q1j-^gFd+s`ni5sS;IeH1`gJt2#0A&ZEY>{A||(}Q*fw@(0AT> zhqWg`OmfhSrr-#W#XHhKXn@p616h%TSG1mil>wBA$+17cYm~=1YD_gjib)G~q$WS8 zOM`$jE9R9sp*jYqDvp@@TCil4mWzDk(tGLo3b(QLih+*r{c>``7NN3b#zKc>h@(d) znc`T|>k;;#6ha8j<_OmPg9*tNX&iE6Lz47L2E00=q2-Z0Y3kw4N(8`q`|9A15D?eO+ z{E0Ju@vHA??GIaIOxZ*mG3`kXQ+@by7!tMEyBobCNYjV6fdea!ICA>E_b%pSEzol; z8pdAy;YUm(4sFqxwJOWVQNu3%(dobXv*+KB}bX%>MG~^Upf{ zmt0rDWp^t-Y&`SypB;SgezRsz9z3K1J~wUL@yg5ZE?x3Ib9krIgLQ<8O51O)xd>-{?7v{mF1`QhU!yli1#pQqDZWzqQJ@oHoufM+P*kfmp9z6`Dn~&FTd+d={R*cA_rLSK6DRIJUZKxAk*cbStFHd;d0)TEW_2@LedG0yPCNO^nX@KNpE04jx`LbZ z)~w$0-)CQ2y=ns}iHl1iZB{H<*Jy^MVS^{t9c7l+_^x%e$;k4D)}ZxVFZ}n7*O#rJ zr;bEoyP9@={XD_P`}ZLu1_}0-dG?Gl0|p#IhrxqgQzi;%=`yt7!vjrzRf!n9S?Uv? z!HI28g7lJdP8=bbv;67|z z(*}SxI5NNZnP(pU&wo_z#zGN+`9w`k4N!PRc{w+kJoYHx`J3bjC*(M3;>20AXE~iN za^wLDXMEM^G^J>Pal;IIxp;t6GjOItl9Od#8M!&h)wF9DJNDeHrN(a+O()1JnW|Y4 zYIi)a(KU|lshA{r4qQVe-k} z&76aEx~O>B8`kPs8*f=7qM00ZS)#{G+>huIAyp_NSM+xjRTeoYwGc(-_L;q3GCl*n z7G$I&S;iCF{Qe!Guu-1IEOa+Z6PMS!y`vK!@<@tU59S@zGt*asRpcW_kA8mjIxV^} zHGQTvl8Adl(ZlLR{aI!kSxPFU%;vAr>)j6|SeCDC?~vYJ6VmRVOwz)kCl*d#|CmM} zG9qdC(fVK5)yNp)NCQhGhF6pyK4$cP)~$>A1BlKL-YX|xlgs944Tg3kVogoacUpGI zZAHOAvB#a~a%r6+r?BHK+`?&d2t1&DK4h(iKq>-cjwS9;tL@M+a@T0T&#^L!!Pmqm zJa68-d+xc1PnFp-?Urte2L~rH(Y`@#nZAYf312HnG(oDHA_AOaPahp>)+bQD`s%CI zt%F1$8a^a}KF18Xv5@`;&pr5lRU@ajAv@LK;GlQnW6UUy{wgBXzDzWLz@S-f5u|i^ zFuu$-9;!pc(c@=zAPtoxzdX5f%t}G`BspbAV&|TFE_MSICvZp+_{CF?*;fb2AVWO=elTE-* ztF@)ox_+hJ@gsyBoVT?}&n8Nc(uX-)+ho?w>4>326V0tf@pv1(PCSv^`elNtcW!|o z3X(38ghRWBa?(PMwViaRiD;`Y(X=ZB0KJ<9D+Zm#AZ?v)`|f>tj32K8%1Nng&gWfSUNhTJQx#SwIbZO&2D#b zzrD@nSz9%5*z7rEB)Z}I;?a1VJ;8Cy6aLn)9pLWPN24>w2C4_-q1#2PH&z4PGaU?5 z-`78i{{1DbscNEACDme5mxwXc7%aZ&Vc###mZkx=i(pg2kbzN~S4;Fe{u}w%TjfK_ zTTWY0I(tmP88ce$d$rUaZdu=6c*R|vH+|b}2PKXP25m?V0V*CrTmJbEs;rgyBsihZSiVWy|3c@k1QK-6#8id$3Ky)=@O%KR6MeJYWFhH$9yC zdV1tVhV*#CZ+Cncw{Hx`y$;^cQs4lgWBabvXH1$kWXQl^C@4lbC>rM_oSs*fz5T#H zAA_>D&QuMLUzd9OYM;vS5 zT4UMs4^ywl=gxs-;F;o}{){dazgXD7 zA{qKsOj7})frg30f*p*Wr9BH zWSw{rXOXp#B#@=gGWL`;tvBgDajL^l{gs&LL9sJfP!`y(Heb6>y+nV{P zMK!A{A$MzMSyu>T8Bd&Y>S1lIz8i0NkRg^2W5;&i9sl=)R5sIUX>jOA@UePdcwY8- z_-<%CoQvmc+C7EQ*pU5UVkFesqlYF&gC-`kE@rzKbc|)f7R23udxFI}YjX_fEj)s& zMay-_)fkfqCN42$g{Nbki(M{kB-@LKqwm&{Bn2lT<;banka<1Lte&(rH0H8tK z7}mM{j}2!oCRNnxnR6Apnp?Qq8*^RZ`~UIMegAkKwJmHDghQ~3B<0=_&fkw5RdL~k zr;sZ5V9HWmpbs(W#XKO(BSnkH8yZIZ`7f7!@4{<#HnQ}kW;{!me6(!oN35NJ`(;m^ zsS3GUSh>Xp4s!qLw*NO`L|uj`Q2M4qk3VrG{jlZv(H`lo$s8PQ3TCyNqpw)iGRH9hd;dJR=*D!ac@@a#pm9A@%i`EREA%= zRwNt^gL>O1A2{gx8!ll>P)MP%VZ+n|86laTzw00?CFVtNmzon}*J8rN(ZBuGJr`bl z^3Giw+2YO57e$PIeCT`;$lefS1me-8Dwd?!_GFM2fkdMquqkR2tc*<@i-yT^%DRJGw09QHzES z0L``6UH9ZuPXTkYTV7LBLoNVD1X1ba3j>G?W|-g1nKOsmknx8;ap0LOaHCzwFGx2? zI`;^}KhQZ>G%%d!7BWT79YKY{OmCv?O&ktMiv1DpYYAieSdO02J}?^6A&O>N?pjfS z4z2N!4Ap{w(Tpq(`7#qRd))1D95bkT*60Qj^0nt^UW94=V^5uAmhym=YPTRo>C+UC z5~*u@#s{XO{-8UTgr!H&GD+h^y^O1_9$i(rvUyiLf|`IDK4kgAKU=#xLo#h;?a0ej5NU^z1prwRLp-SGey0R#sZ3DXdc?Uk8}*FZfo?sLuMCY%?82d z9#_)&-?KN>Ux7iRyGp-AUqMg8*Uf{2a}pfVL`53qQ#4!ox&^WYOmGuB!nd(KeCRaIf(K!m;Dj}rEk?pq}Ic8-;_k<4aBaS%Y&wu_iqT`jU z86D_d0q6-*ndn;U`jy^= zP8y_C`;4VY({zkXCKYvo+R+9Uh)Hm2&K9-2_-s+o-{x?-L*cd&W9zTKxvHjy@sjdV z3Ur@3Ut6;7TVJI;O24I1H}o{*$3km&=gA2ZW_;kGM2%Toue=&R{y07^=l^`a@_&D} zY1=l8`82zn9$`;xU${6xf!pn}&Yx%Re6qtDbq^by8eui6&=DvbRb?A2g{6RoM>I=f z&OA#rF=qdiej%Z}~mcxf{u8sfC9kB@JC@i#U)z=W1 zdYHA+=Ue=byyYn?^j~};c6TL6rvnk0{97!4dLnfHONnSCaKj^xx@!MHWAnee$ouv> z|H`eUj)?!I)kQ!2bKnn=yA{pzC zRF5opc*AfAZJ34V=Vb z^;lZYJk(1t3kn7`o%WZ&ApkNqH0-fxRj_?lRdtyYh31%cHKX3rbBaOa?`XC;SGQva zF~U()P0UDKx{-0C>hj!q+(0giUs-YIZEb9M_^Ia*@yOwYg?Szf;YAaeo0s~N-bZ=| zVTsKN4Dt;qtZZ(HKKl5xBkG427rG-6Ka251C{kWjwBMK!|6tukE0miyDMDh4)v+!Z zsV}s;Wc^5c&B?YF$dL+|XJ>M>!+B^)(ZBlRr1saDIECls8AvpQxVETkn+@XQF9d)S;fIe#Ze9j>T!%b ze7@Y2g3_^{jTSk-%wbr?GwY)iY<07b&cx=)C!ge245q$J7qQ;PFSbgUZc#5NF`RSG zIasP>6^tqy%WCdtLcf8j7mH#h#;9em=w_PARELcCW#)_n`bvzvGV@WuG&5u*Onjhl za^$oe+R&e*Joygk^#xsmLHQ_?t&0Z2W>(C%E6I!mWgQD7!0;rg7<|&5>KIhIU+y=_ zH6CIgJ09LAItQsqQf@BH(7s53HtqAZae)E2Wgw`X+)r;j+V>zm)Op`Jp?>6`>#n(b z!#a-eJDFQE2a^s>Ok^-hh^p)fCmu$8j@sL}=_einsEKM8f^?FBV8H3($Ss+o)sogf zcI7$}4Wl5!(LW65qEXv50^=x*O`be<+QAKPzOgP8?&LP=V-|_BmHLdkCc%d!7ku~B zy81ykTzmJHExT9-!w+8;iDbGM<1io~Q}D#E98P3lGVI@CvV${jSf0fPPKMW1-*)GZ zetY%(%a*;Xb;<${L^Tir{^Wc*qaNpHK3_YsLYzTW1yJhps9|9L ziDT}2;Mdpw_O8bsSz<{j$d$V(Vxo{D7>k_6V>|8Wqo-eb+1I$Jkbbc1NI(w)pI#x0c!^gWc4>|~@lGG_;2lS5)807rkMQ5CJlE9Z*x%6rj<`6zW$((sp?zw;9 zZ+>;x(j|z3gUrlf+^LvqiHC+ zs>jC0U6@P(TjwG^)@g)$3-URRcHXxaefZ&;n%Z*E=dK(Y$n2prM=R6oJ%mg8`llW{*Gq zIG`{Tu+K#U!}8R{7hlX+g-I!nLE*`uMZ-p`n%s>I0LcSqGl=2qj3C0mMqFpX zb}I=%nmD=z!$8~6WZVUgfkQ@3bmBk9iU-EnC8jJmU`B~r7q~7rd~~;xWR71wd5$=H6C@v)n(wEo z6>9KDw~^3nzRSp~1=0RhM%qG!&k_JSnxB`qpnSkNhs={yUHM4&l9hnu*4rn2<&fml zm{=H3J;J7FSPO#5;)D(=6_WmUw|6>outqnhOfvdQ98E|Sc|cJS81x;6>w< zZc%R`R5JsRp$bwhez)|gCfLSuO<5%J{n;}P7%@WCU9a-o>qrVIX39&?zzI$IB0h7z zcOD${P8jF_#^sm-b_VGjm@AVfy_1eUqZxhUjW-%4uV?}ea&IcCG;|U8>=~!p5S*y3 ztyPASdrw3SsdQ+lJZDYSU1PwXveeYnoVypg$ysxx*9Fke8nkDgst9zm8G2GslNP0| zb}}fd(ord0OGgrfmJz?ZS4Aglz2wLmYAo0ojJlG|%B>!arpP$L(8;5FDo1zOWkl=y zE8-Izhwf0$$up3_gh8YNH@CIy_~Xq^tTS-P9^Gb+2RL29mS%BWTwpp z$;2cFKHPWTmkj_Wir>3n=y~Ua=!ZZLZFT`1$xwAVP?wcvyr86PLwUtuLg=|<_|u*Q zWBy2aM2Ij4nL;(wi}~Q zKV#e3+Hv!5n;yL{-r*}~+6Bbs^AyC7TvT`FH_Gekg$)1~O++e}e*aai`@AFaUj49X z#r6tUykph2yt9AnKmVx2p$FKD3S21}SavkW9(W~s$J239&c-fo+)go5rQFSz$i@=E zew8yGjo1^eh$Y$)pn~!X@|;(l75Un= z{*Iu>7V|&zLE(n$TF*biHgkL;&%K+CH9Mkze>U{c%XS(cS|fS(=(pzEM-HoG!Q_+< zwJS$S-i&SQTSpbV@_}!2TY)nb&rF>*)Br2@Y?b*o9KhmZsPPFGcTpHW~|K zag5_>c_$v|o4#KqW&V<(&obq6G8%IgurF{@VbMr0-wt25e6Y0l^qE*vdR_ilLr(X) zgk_Dd(<^(~giH4p31Q>A0Pz`X( zt>>S0r0zO~;$!s8no4Si zER!j^Uqk?vX5CG`Xs7WC0stD0oiToyiZg%4hw4*Rvu}kg`&%wsf}h(@9n1H`DSjICOJ`%fGdjtD?mSyd=wYd4RITvb&vWA;cF z^YvhSfJR688xzUUYqeZ@*_oGJ`lk&WLT8=5aMGj+wDs<$L{K1=NY}q?6zVOET?`_(&q1D$Z_r`EpT=n3Jar;%zn?HH(+=Gdqp@3{;UN6qnY2&=w z$*D2phN=j9kTE`4Lyc?buD$NkQ@--<6OX_A+N&RK-n1*sA|es@xa~uRS4=%<^btqS zo-$>>RMs*+Wju;Fr8xA^83!Lc`SHh|U$SKRy0zQ4Z)=W4<7MS#BS%#qIAzqLW9Mnx zZhXesmz~rg81%?dL;vs2%b$OK>EfrCzW(Z}9oyT`abig1&N+e(oKk<>@eArl)WCx# z3gO4)cAjz8g68Hnl+DMC9j>vLy|YlQbne{!2M#QDx}7B@1upI>w^-)PpUMd}y7GMQ z(4&r?t5NtY{^<1x>;DX z%8T|0#~R=Kh$ZMeXIUt8`lzwTPn|*t@iPh~(O4u%3jIg`CC%Z1(RLxFo{Excx3Vno?g?T2x$7;i<0^)m`;a`Gp?mvRCXk+_dBC zXO|ThIh95&p^O58flF>$M=29seC-XR3M$Gu!vr5mPPFV9JvcI%1f2NOl}mxRnDT`J z7H$z?a7by$0?#?o@?b-j#;6${CClQ`V~Vf)Q_ItjZ~6I;g1!#t`j6S6Yq2<@RaJFY zT~|3}y5gT-L7#=2t{Li4_R0ZWS`Y~D)n70E#!VefzCv4~V_RpzRsVGUqqDBGMR>P99dRTw}tYEfCnthvuY25q?;q)3aKIo?U7B(I;QZ^)4_t6tMI_m3ayEG_|;w1GaqyDrihF0{lVr~^ga`G?eP zyZ97!W5-?z{PUR@_&E{|1t(czlPk(SDE-JsBVT3~NoOk|6CIz+`H?TO%NH(m<*6$) z7`?FBZ1dzl{N(dahD&Wv$zgMMbOx5Z_WH2e8jQcW?5@WbFJ1D+hxF&Fm)5&G9N6$^ zYHG7P9f5G?@R}iizWYD#ujbMqW+YMB9-);)LUkj?bohKq@17hv-ureWwlLruC=7lkm66hHgyvn;(?uv1<%!1z^j57xQF#7qZ1Sbt`*415d#4W`U$U7aTe z%jTRGi(eMVESVurS{C>`kYXv#0+|U9GZ~10M*|n|yKvz`R?TRhkr2=s!*OVjfhwGP z?z#N(?Gt&QN`ql6=8v$>WN6lgHEklGb$W(;8S!Al*b!=O_|xVP$(Y7)L*g`Na&n>h zbyqT-j^@B9w5-l$b3Bbwf4%J05~aVG_`=Xp?X|3|_&3-5kFii_tr}mIo5(b8&_+I< z6HZ#dKXjQj$d%@1^W3&)6?Rki+x-218r7?%1|#J^ zc6RuwPI^_ZH(xQpMa!Vf+EOArM}k3XqL?#hI{!L5eLHqEZQsrnh|a;)1FHsBC}e?* z$WG_S<8giag41-0@G4c3?NR>coO`@6koffMi;i0W4njr*<)C0p_$j&>hfoPrtfD@Q zSkxGUgDS%m6ld5eEMt!{i$RH~Xf^u3rf}~ zDyou_1>;u6VxF|>fgnRExHH#?)z;QRnHzZTyYD{kngAw-xZ*)&0YRp`jFAYOn2d;L zpM5riC8RL)0r1T|$hg@D#^|R~h<@goXJA-i2XIJslx5z$d60soBoi8Pgj+HEnf|p} z^WAZ`gE5#plvp01>yM#h{_v^Ef7+^88wpYFqFiXPIneUAl!ikG53D|B|B1EQ1&LkT zDpef{`wI&4*=pBCA-xgp9D^=5JjBS86ZhmqK&CKI12!*qpbRiDCtGlQm(B9E?2vC%J{3Q#< z3Qt%;ExV&rh3>+_XdtM1IST9X=3||e7>e87QMDpdB24U`I${6oUwbWVjX7A=;V%G< zJWPQQiq+$83q_<<@~9ATIc&BQ_N5R$a*=p+wbDFr5^i%^u-IaY zx+B41PUnJA4TnvbkniyzbD{~kPw=5x@*(rtqUOxCa@gW9V$gi%R3GZkOp&<;2fpy( zm+pf3G3J9vF2d9v=+KkU6>##SU(jboR&l7@efr&-g!F`c%Bwe#RfpM|n0<-^tJ1Xk z(sKHRlRXpf9%ro@UY{hhXOZP9J}X~8<~8J)mu2e~>-KH5a=w0@Aeusa-$5tm^FfF0 zMfS+{$p?=?Hq!UPK(jaIDeFp6Ko?!quH zr^YN1c7G)kexT2QeAZb7Kf2r}#^U%8StkbVH{TYx|AFRFBVF2bp412?fu*13R&LFR z-f?&0sb@D1ACA>!?jeLY8{2m7(cQWuECZStkpoFbTRXJq$bn=e^H}+y<&mvPYa*Di zI#+-A;e}`GM>kXtrap7>qeB1>jc?z=fjk=>A1T$kkeA+%F-9S*8cR8TWSd3d z^f@A>2QkDzepr?BFW-y({O-oLH&r{lg?r({M&~ z3ABhCd>!+vDhizpiwX-yyuDI?M&5KCEeYGIju6dSt4U3WC|29;+qO6T;pV?d?J{|! zVz903%C8wxrOhQR9f8oj|9sZp$zf$_0$MFgwQ3JUqFgvsQUW5z%FNc%(*DQW?&Cv~ z6B_dMMQm=@kU@iFqe-S28Uc&F!Xq&bUyT_>GV3qRpL(bD%IZ5_?{pl4 z{r#4fh*LgNfN63FrmSd&F`>oWb8T%cI$?}-3MmFe z1_EX+jBQMefB{&erE$g?X8<=7pLrJti&7i8y5hlz~fEmaVpA*k4*sr+aicetL6A#54A%Tqe zyx~^xFTLYY)gxzO`SdeJ@Z=YjIYRX6f zXjQq3!I(y5CZja>JP$bSZmYY>AB0g6>5iuE-<#}+qsPy|8$nEVg_}H&ik~C0UO-qS zG7ph4;9#^MjHgVvvz0}stZ)$d8b$HIR#Yq}9QB9fJoxt#E+Mj>R?kBB$#AH?hOCL{ z@wn^ihVf62qi5YyWl9Pq1g%0LC6A(`BmnauN;>849J(mrhkXeC)z=T#BP%}1NcT|= z#V2m~?6LP0X{IDZc09@lFqEp7_uiB?gM&}}Rh2>GJXIJCsi6pXGRQHg;D#^U_^=2E z5q|mQm(h=A#}%-cAqP)YSbnK5P+c4x?Ya5pn;ED`3;xSZUyNB(SEE0$6>FZsP(*4=8}>C_v$)sBZ&~1Kp9XMefn%V@rJ06L zHFDKWmt)XlzySJ4iQHu}pk&+QFCSAN93E4ysWPc7F%Rl=96q9ESHK4@z?Y`MAd!a3 zDxs!zm^xX-$kW^VP^|#Tism@|$Ch zS>M#eouONsn?JNhTRTEwUm%FJeU_Vy7er$TC?J-#!sV><<_)PR9a}xYX^-E*NG&~y3Mq3PMx+X@?4xiWVe7$8*oLjUl+R(VW6Wrb1-QC^YT>_1}yStO1!QBD`_uy`U1PE@q zoxRV!?^wM*6xDP!U(Ypt%{j)E%#a^mghEcaMW#HD_hD#k1_PwemH}F#MKd3qr(Me< zfsZ+gf+Ke*zQLzP5ISqyPN=uQ@9?$6%Oe4A5D#?I2bw2pNfq|N<;?}V61EA(V&8YN zJX~g8!1I`K{%?&4ZU>q<8;>-b2@isHb<@$_Wc8$#h&XXy@?%LZOoj>2cn^f*OUW)= zX!vK};Ek|g7E=`zqD;511Wb)1`iKffQN#!IB)i>zT&#$vpIjKf^j{-9^orF?9XU4Z z1B%fjJ;A`WYn}1Mp-fNK?Aa7w;OL$4^^cwoq}sZRE?<9qOFZVzit2^A3Q9l|`hvJY z+N3IRw9;}cfFj~Mezq!A@2vPqw{)U2mE2|Yd{S=la)-Zkw-PoFr@=L%DPOVR>)axw zM3R|2us~bJe6=3t51$N9644AR$rl>oK zYPdAdEljY;F3;;j`*xTxY1yRb1`-$(^vB)+a+&0?_``7N180G8# zciVSj5zqI#n&V)`rZyOa`Gf?iuozm|GT`tbx26I4%0w99Y_?4i&ll~EO(FT;_kJJo z3T=PL@03Qdj|WENd>GR%jR;AMsIV%NkHu`F)rySwl}r~B4oq}6O975PaP<{$jFv8E zv+lKZODEK)&1wtN-SLD(;4Xvg@WNm-HtN~0zolZ|%|I|KdF8rRP4jp4=^rRuSACDw zs2oz{bnMV7^YTU<6HWfr{D7HiPCN@|Dn~M-4pALCZ}8 zQ3Fw&L$Z7X1w^m)wsq&IMuIT&k zK3_x5XW^8*9J>Wrx1v;+S*#wfa_`8R5f+HtJu}{$hmY`iiDH^o#&d0xggDI7g{Up5 zIpsn3PJz>x)Xn@oWswp>%|9CgyUM;7^efX0&wqOi^nJd{7bE-1FoOLi#DJKN{W&*< zC>S~IGEdXvDu+vUHg|J*Dc8Q7Hz3(-6(J(=W-8Z9d-ms}+PhKOZH!7ym8aXe@XP1f z%gNu{F9U70Ok>!)7TK_&YEp9wSYmbT=Cpbwk zSqlb}Nn{I;5FNywreR~p%|4Y1qDFSlVe3$t--*I^qiodfR`Uhl?dAw&8fB%(bCuU$ z1Vk}iuxYVSsPgyX?EaaOu(ndF{;F2elj`a#HJU(^4;3v61_mXEI#!j=9eZpcBzVlq z==-3As--t&Yr9+Y^E(TQRwlZZRu)l^uTH2@j*goqz5dM^hqb5D^0LgR&U-n5y77z% z)uyT-4xG&EX0IsXKH^>%@RFP6XZi`6lATx(S+R$`GM!Si%hlq$`l;5bU*jkQ%=8HE z=M2Q3J8g7f zhaq{6snrX5NPied`f@ti{McAhBDQ?LUkcexk*HU{(w6CDK;fW+4LwxI+a7IjNH84E zWujRx#&Ve;LxTQzU12d1&Z1-Ou+E72>0;)s(s7ohty5|vOb3XV1D))n-t>zo21lt# z$TZwhPCsAy&r;5`l0YXWpUX&gCSMc}G*FQzX5x-jDvg?JN~qrU)Ro-(gU|kqj11Z~KW60j!lIXsk6F5;xpF(||us`ZY(DPjaXg5w&;u}2P&R=6a zxSvdd`mf6p-iPG{0mDa@_1jEj+$^b~QJ3ctl8ef? z@$)vWR2%i-`=V|q*VLDBhPS~xqH$5-QVQnI$@=z}C_N4sWZj|0K-2fRkCGfC=>t{N z5G&)iNK+Ps1OzC;kGo)gOEai2okk0PRO^1mv@=m%Xh@aCLN#0p_)`vhGg_IlUy6!L z)giS%&d)`wmzQu=Jo7t6VwQQ9I$Xd%8T=>Z+_k5}OG&2XiAbI+FqL^B_H9KEP@z4) zJzC0!;&A&dFD>1!`CLXooNO!QzW>hL%)$5Vb(X<@302H_ zPHIzSU!{LznC&fHS$*0xwpxiB2^gN;E|2)qtGFFE;&w3N`HG+pL=;|9<1Ugcns7=R*WuSX+7ZhyiLZO;|$#Z&Q<1eVnQkpc9rDNi= z!%O{mnwKH5a;0Kn-lifm=*X_NwzcdT!NVzI&*T}`KdNw_H$ZRbP}`xVb{6s6L0&At1QZMBfkF*rS-dcKUcWryUvH0K~u(2RSxW(aaHw-oR^mpH9inMp(bdYH{j*in?b-?@dNzQ!HI9kdiVJiY0 zbqWiE?h!2c$e!F!(M^RV7pV=Jx}EyYUi*XK5`8s^)ZG?A@p?M~OXRT1&4ffyR4{<*w5BuKYrN)mKa zQ!8^!T;U=Gvqwtia)ry{bL$^s@0DW$r!HuPDGU?N}B0y*GQmkTmWH?pdy=d&AK;GlU;R)B(=Okj{6 zv^usQTZKyR$+LM$O1)dTF}>rG+@H|I1l12br&(BDK5FD`*uj_N6k)1J-zXyKHk!7@ zjlz8`S1nW9v17U6EX&4tJfswDkt~3`@|nr!JLO{0Ylhmg>_WuK(W3}s_khdht#=B^ z)?;b0KkjqZ?tV>;J-d!XCWIS`hl%^B*^$X?6#L9k=Th$-kH;2@%(^mvD~JWJ+gVu| zNh*crKzJw)E44bZJQ>KsTa1JvO5aB+{=LWSt*>Epuzd8)3ztUTqT*@YXMI(;!9}QC zJOAR%)rTr$ZT$~Q7HnNAw{qqE!{Q&TmpqBILOKWy$V#YY1<_B@x^PN4>=A4+gYdhN z+xbpfuJ~U>%|(aev2YKXImx0^P?2r9#c`SRN4@|D_|eR&1)dJm*q*0){NA4Lh`eAu ztsO0RDdFAlN;Qp>hvXyOhcWe7qumwAbU7O4Af(I(Bw+V8J!YXljRkQ|#yonY;gwOW zvCYe(0Cyh8czi$ZMc|G@lE8?-sF~CAKVIz~&lBrLjJ^Ko^7@hf2Mj>=T|)ck>=_Hy zl0p=bFS?y=L<+R!q!f|gV(Iy{2QD9CPxWC=s{P8Lp1M`Ss*lR3ce8XriecpYEse}z zg835W(F}tFhS23U?=FYW$`<-gOSnJ1zB0zT+FDqyuw4$-QwWPvO^*PKuv9QV^KDiW zR`8#<2M-#ukBLLYW--EIlhs}tHwkcUp*i|Z86$=G+`((jr4PlyFIZ1JE!ANA=TQ1B$Yc+gvo zqxR%(Eib)ojD-HA;s%}0r%MoSNImF%9QCgbnC&x6h&9i{6yg7Z1k0Y1f|;Kb1dOQ& zO>=ax_>7@T~2ObCOzi!Q{A&Ob${WIq6ER@ST;{S_k89^X_HPg zsoz{*j>90toa>J!6!f(N{@JKjy7!;jkits{G6+oWsEvYjGJ?8TxzVwoocdo8$EHQf zXfkF*%97?k$-*aoPB`@@^gmZOHl85D`3Zy(h^XIp#4h279HD@O97kN;fKP>H}YLThmd&8BP-0{&E#2CpzP8&;z*q-Bm@*e{xt z6hyA$3kNg~uLle+oC*9!So2wi8QQLTv9y?6t4&Zb2lUUrObgxQawp#7ZN!_(52S;@ znQt!CDLxnrb%Kw$OWxO_5|wj!tj1po0$-qZM2!IunoY&A0EU9x8PQM?7muVeZjy=^ zq?@ymW?Vkmuc5J_)R@RXD<1Zh3lxF`(tECDLxA^cNfBY zNw$JNQzglV!$t%0jVuH!dXa)DnV^Y1<-J&I#D;t>GxF~0$ww+Mz3QCd)+P3_J0J;5 zsSDv9UO6+O&eGFKt+EUMX_=g6vF@;k)(|`D10P2N<87Lx`x~2Tih5mj4Y6TL5=N+) zOrBr7vMbMGm(DLDd4kBPfGkEKoX)xgpu{{^3uUCOKiVl%?PlX=2oF0gs@yqsnQmy& zk^q+rs>(R_9{#q<1~-YOLWUNLncUmG@) z(=n#1tgX|jZ$1NBy|fii&YtgG)1e@S8@5LDcLP|JlA)OUU)?EqPK}OysZPOkKb+EYTOP+#^IKbdeQ%d8KDg-{CerCY z{eN%L1rWzpyl%T>KIGc}k=gWdXN5R@Z(vF*{TmsI8lgaWe(da4aC>I@V`=Ck4l5em zidkn)-3kjCaKd;A=jSSYqT)oM2WE)v4p4z`>aHzpniicKDX8J=c;7wqFj%Rsq*6iR z`8m2_j22aezd^TByWi4N3PV1}L~YTnJb`aPC3Fa=&^M`{U#0AUCg;t!{u49+rM4(k zNxwP~y|S}H|3k<0)S$T^O0AZa2=?+R2YI94TY?;7Pc*xP|8TiiZ}P?N*qooi$NN=8 zT}=&Ecj1B_(j%4<}{0c zC;FoWS20Y6ChQ>6kRq}VIxOoMs>_`|o5dfm>B`pRg$xLr-eHJj`7w<$_2hRbQu`eY zQ0tOOM#g-Gw^9qU?eXVv$N)0?tmz1dpekYj?#rT)t-j{4Lan%-XLNzDgAM2Yl?8il zoE(*;pO< z!Pf@}7`qBII?Lu6VY3N3cTWd%TazLOT5k2^b%&C3dHl}UVsEvrlNu_eGOD+C*}R%W z)m{l;WNw+SG-=;HaMYK#f1L$ySR$2=+67PgM`z5=rp(!vCZYT@oE`^6D@{ zEh=g*zWB4$3SC`s{9|ep_X*eYfkoh@yv9>?_*TSzky!cHM?Tpcu}UaK_`ns)Vpdya zbn~P_0r+`}FbQFg4}Bl+h~3h;2AI;RLL{Hp>& z_mVvnJ6!P>Q=M~t=}(1=+5p?c+kwVYAdPs5-Tdj{jeXV@hLjO5;#>_Uq_jF z-Zg3OLg;hDC6++9&x(@AnaBM-pDLzPce8CCj#9$Ud(xGMJhQ=OYAV0mLI;5fdUsrj zo5=V#EmVa6`vrl=v#jh#Z`C3wg-^A* zb_m0yD^Rr4cAw_xQC2dc_cCO{I1b^;?#n|zAv9iU7^vB4q(49E%)-;VrkTr@eU}+( zljMZ>)8re*@oO`+lyD;yo?&u}GqBM|sL1*0TS>^a69LEHkos5EqoEW5&zR^fIWhnF zE1Aj{`(OY}v|)HUR$^pS%CU+vnn<@6|F0kr86lK*I&J1I5g9{RMCTn#`yJvo>Ss(F zKR46&HwWfXIezJKDn%~{wa13pa;bnWnn`@Iez-i@e5l2Pqq09C_$p~UrER3vSyXZK zX(dsxdokAP%#-6($l4-wUMP0_pO8O5^N+YGE1Zt4{>cFT$;AJP{8SIplv$9Gc-}|5 zX|OOh_SJSyN2VY!WOG_< zIwyF4w>d@m@Y5mYIZfN-_jcVQZNOJY_>0)JgB4$LYd25N@G|AN1l$YxhYZi3{HgHL zJ9hUOupE8=ipdi`8_>#(uxR#QpX?Dy4kXnF&mSClK5RMquZT@h;5)XmiD%wHb~w1W zzt)<{9)>lB%;QQ=^JT+7eO?|^WyJHOu2&Xy^PVMN35MEL?2%-D2|G)M$mxKY1u|Zgsa+Ci`@UL_D*98AVYya^;##Eq0jsdDohVoPst<=m+99J8x zBKQR9GKBJ&Y8uJsM@jVosW3X zRm$?kz0ztvt#f6iDoM9e)@U|it8XPp*~KVivQA?Uj+_yEVpueSPsPsvsa&^~X<|!( z`r&qTF|M}bVozroT>#d}$;qe;BR8S@GrAJV-*QnA{x%70S6#t}w(4yEp_l(dxZoFx zeBg@@>SK!m@?Z=ZQ5kY{&f;(1zCjc}0Jwp!nt~8)90NcPqKdh{l7YjQh3D9lWlTiz zS(k8&mKG-$)$S;L4Ir;y4QMKfDUOKZY_pM)kxh@;W_F(DT!`k3%_pSv3w zrDc*S!{FGYwNODpflS$ZdU_gaIEgKF^+yD6q4ahAZf8(Yk+fL4o_lYVk;}FkMtk#e$;B!X{M%7$o!Nxn+2tEH9_vJe>-gcB^uy60lp!nwgo=VyU}D_xs=33-$dZMaiL8_cy*8pm1%B z#7e_?mfmj^G9Q6swJlI~hQ;_?T@4_qYR=8g1?AmA(!)B6in()w4m#~}Oa9fvHA1lM z-)_s!DmwgE7A@GP{ zbad1b_F4jk?=aWlbLX$V7Xku;xjpD8=qYGEEozo%U;t<-4wq$YfbEgx{V(eLg#=27 zi}>~R%NvLF)Z-CLuw3Hq@dzxBOw8l`hD(v~M}IJT5*P;-3{ZyBh{!AKe`_m6((@9I zshkbwJNCrtO85gt=O6gWY|dZ358IQI@`^U9nHdZ^@8IVl zW3uKJVmK;Kcq4we(rC|$XxiB7 zbQP=$x?=KZbtq^tXe5Nv^tp0aaet~j$F_&|hKGm0#3bLoQBy)-lI|G~ZFG9ff@#}+ z7Tgzc*esQyK1*$!hN$=7uRB;qg{!8bN9=14E|R3L#Pe{O+7B!ZaIb>kMO{2Ha*>pf zvk6%Lc@b0tp#iLfQT%@|3?x=T0OWfFfvKT77%=+KB1hhPLlLHBBY;$OFs94mbQT&x zylaTVpbA?7HTJ}y*2zqPfsRg9eBuP0;O*5gD(uHX4x5=Y6=AQPRxd#kCkkKfLy0Bp$ z<0#@sVe@KJBO#xHDU@BK2QNkbJgH1I!SA9%VcNOx%~K=^LY{xpy@qqvrL{m-k`v2M zAtH1QayLgVqb&B{Iw08s-^1a?B+!RHB`I!1G6S5*+HgZ%2g>;3dA_>TbKHio7U zP7@j7bz|opN0y+qfPA1x(@+}3dc#2Z48D9gX4vJk<+VT%_@*YFr zQ^Wl0nxn+YqD|}A_vyIju||09-7y)bX#dqvM_6Pe-isZSe5K6)tg!z>umg$Z5U#qc zdZzNwk&uS9fIdcA>Ed!IUn~V2 z0zhKHk4(kNbINDkkEdaQ9`9pEjviCxyG)9-{*7hg=_vHW#9x@AD=S0GWFrd;3fa%@ zM-UKt2SmVp+|3+7GJm>dNb4bFh&i+_DpEqbm2(Q(CO(v(ta0puXw+c0oU-&Qvr!k; zEE~xc5a0A z_%s+`@6Fsnlg-Fh4*4MhW*pmN3w-1+xW>MFzk(hFlC_(+UHady#6rGv4bif(M!;NA zVV^dpMjg_NmP4v{j{bsrt3LKOYP}oLnkdw&)Dt)%RbcVqHft#6^Rb5&(IwSdYD4ZM*a+m~S ziOJ0Jc(tSW1X36r_=-$sG)IQHT>0K}uZNo4kL07Z?-7Bj?qMbS8gmFZO77dcl1ZN$Sy&&l|6Az! zN4x@EFnDM{`A{856LlOQD)bj9bmJy-=;PkCr~QGDDoIEa@s*~gVMM<=K7o7Z&>7l&T%x_;Bty;ptFb}Jxuray&Zb8P zxVn!96fjp7rqocsMjQ_K)r+f&$BRco91RAx0yOh&ptXO{B|*JjQY;Ct+DgQWJdFM{ zl`Q8x<-D6zm16RCuA`d>bS3ee6Vvse0C=w;sOYS-W+TC0No(Sak5O#nMuJm_JcB}W zshMxk5jvAZshd4qT#adV1J!y0dY#^L`{1+}<#}JRNeTHvkN|LR)hGbvU+K%=3e#P25d!w$N|!`IUFaIdCue%Hx<01 zV_joEUTIauB zR#+Ao?;nS5jDIuP`ziuL309SlMw-*B`VQI4?yhY;gP^~i{QG6|R;|O$VQ7xZr zzh`1=HJqw~u`th2%FrBdd#J&_J0BnDqEM0In+(TthKYSPuM=DXfu_%33W@&9whhtb z45=&YC5Z8F8m_vg4(y@WuJpyMDZcHh@G(%Cqr=TzM_FaBSocmN)u8=IK5kaGrnT@8 zkeN6=d#LV{FihBSvS`E;2K+lB9OAk|BQb|HQU`Zq^B^*0#!4|6AlZqxc^Ak0Xs9$B zqs4r*mX}Nl_^KsCJS5ra8wv8wD5FPT`A+(4l>G|F)LB+pOtd#-9{Jdnbx0Zj0U8ay zNh>n+KdUfqcmR{Lyj&**PbomXNAjr*KL0Izz~u@7hX-^hp&dMJ4fjN6_7qayKdI?1 zh3!Bq=p9a;Bkgal+UUgDNO!A;JPLJZCHsZ0Sa)xRU63QvHj>jGOPYSTF7jHobh{s) zfISiq1NOd;5PTUjrz`5Ru)Y$%doN81Sd?{4og}08Um1Hr}`_ z_(T$@1!#X}_VVF!3;8mUOBGJl`~Q-Wr0C;RG3&d;KXQ3**#e z@8~s2^IRqAa&jh8_RVN0UoQ6$)ONv8_y~V_7XM6;ZBbch35>Tp1SiwPZQb;%P_#DUJl5=niOf<}~GPijnTT!7Z zI{W)%_Nzz?WU-cbP)Y)JD45wVDgt&$BAc-DZ(u4ahN*_rMDVIX-L7UdNVkWhYNwA> zDFF1JmlCM!b#Ut$v}ec3HToeVnRDhn zz$RPneJ=xRp$M`xL91PT$0J7Kn0Ldb46{$JM7w1o>bDE4rz)1aaTa#8$bC?^yn7{S z$mW~=ELw`zk^f7rc0o&^n*EJqR&dztV_rHw9Lxy*NEBNmK|Us6a3logmREIb5t=R5 zG>s^lh-euVsho$J11??$DDe~G2O5Qc9b{y+fz+EFxq5{*hEshSle|484b$G(m~=)s z4_u=5RPu(o4vhqFKX~n6P3D^bbl8WRDR3aVim?aHrru%al4dplO08bTijlwXV!eHQ zf_6Y?f-Ss6c#S5WlktMi&846 zp{N1e&;%|?srB0l@8U*Oi%bi4wuau_;vbZxJis(Jnw3GL>8UQ``AQ4rvW!BjICG@EqQDzDZ3@jHl?-mp z&Z(W*W|&9SCvZ*a#y?w;O9wgPfuE~prbQR6S>(nRQp%X9W+ogUY7^8H?A^JgiR^6m zV=C74)H@H#TM(CMj7I7SK96LC`w2x@nVN9v9yO&25IAZVm)3{+UNiTiq>8>wx(NqQ z+QMpKmzC&8!J>oFFC=Q#Yn4v4JlgKif;^r#t5+X(Ek&;2Cv{Ou3y(m7@w0=ZKh=aK z#+aLK;^mk2m2EF5-Lv?R5mQ!on}ChqpHWP%%G5z^iS$$X2iY11RTXZ$s*dD%LtX!5 zRIw@?QoSL1#8J)Q@(;tROab(k}I8%yh zxbl=vN8{Q5YcO;~L}q0@Htj7-63+F2Ch|^ z-QVA9C_fG5udZ&rSK+=2>l7~QZJVIONnHczQfn@R)977#_ghixaMOZb?1~?M?9|rk zF;1>%Srf}KDs$s)lXmX*KRH$gTB!fj2@#Qu_Nmy$W3W6B6ffn*% z)?K?=E9PnT%Ni}}3`4TUfE@k)2sEh5e zS)G6F{%xb`53Rg5V{QP-_KzcC$JUtH9|E@J4|8(>iHWsoHn^l;j%9*bfBG%YbIyPyUk)2-Sgc98A`b3HvHw za3QjhaO~hP-L*4F(T1T|8Yn|~O-RAef$>CxA$l?ut)5uT_E9KOhfQ}nXDB4$Jk$Ys zx8dP|zx1u`wuVwgUMqSgf1Xz}#BNtw)&r%FHNd{n82G&Uja`mB$Hk<*zQ1K27pd!Q zySBF0lJP^*=z!LyasYh}#?*K72Dr@QmKfh)mHLKn+5-i>z$uV?)`UAA-F@%^bvo25 zZ#Ak+i_+d^ zBPquSeU)$ZjVogUp`5dN@Zo9Ee!~&FZ3NTD(9lRr8P$rP-QR?-NEMDY*?)79aDsB7 zN2#}Yjo4WqR)IT9=_D@ibnqVn5*;=M$fHxg!b_suF~Yi0`$PRGbzQ?|22a zyM45I`+WSIs%5iyrUg?xb|d82D9!-m)v>SO{L+ez&!JDlZ>0h@$2X5z#@;_FC0Y!< zxyLh>PFF48-@v0B@BIw+))(fYV}H79X=$WFW>X1+`<_c+>+v(sTkD5IE}D9*4u!i_ z`majO0)7EQ#A?{3jNsE#l|zkNT5VKX7C$A^B?}tM;z}nGR8C>O`@oBEqug}e*2;%f z4c!R%qVH#(+^8SPIQuaz`3v=Rq`J%*BR+}hKbd=?q#9CbUO>}i+PGJR&D`Wmy4N+Q z|D^_-^tZl|Ow#O6)s-5Q6I)9)HtNa`<2l|bAxL&1bUL?JiUjxWw-cBQmwN5LZx9!_ z_}th3v~@@v(;aGCcS>f%()kACn&LuQ1g5yPv^j---h@ZQa z7^IQ{+vgWs#o#2vl0w&C6XH|>Q41q+?lgLdd0b}Seyj86cSSqa!nBhsvZn{(h|`la zzrY*8kQ1x_k9Pt?QWk4Yw1&9KeOL>acY+Gv{=3EQUnLQXqidd>S~e_DqkKQ$+eT4y ze!2o1oz$GuzAD#2a2-BA^#4hq<75u|8jtUBl%az{BAmbV6M%VshJ)BJ9t&%YAXL&f z5dLj+yv2XyD#>?f)DL}Fie5`d%RM7v(2z%mijhk`Z}UV+3z94uiV|OMNdt74)!Xnb_Ij6_Ep9 z33fGX%#hj%n{+udr8vp$j4LX?b!Qm4p+uithm7S32B>=Q*x zqE8^-E3KPaff5;kY1r~#@Z>{c0p=1#S0SJ{LrRK|lw~}=+-u^f5F>)*An{}|0*(E< z%n*P|hG{V&Cj)1KWU7=KbE;@kI87EkFvX#7vxb<=XX0%%>L!`iRTIQL7dnUDeILf$e7rVQXK;uGmSw+&@(04mI^jF4XAJ z6DhY(GlzSN9@K9f-THlW&Kf=|uGKGV3e+*_DPzHp{aWAV={3OD)4KF4l$^s_(lnK; zvzuk%_3_sW4)f*ohEBOfeetio>+~Z;&x@dGg5Lo)+ioY(dM$16FiahJ!pZusqp1FW z?iy5?3%>9VDbMyOa^s>T(CfGBW6$YLg>lmKhJYn_fv-mmKz3i`eZbdgos#+V_ zP;RC~ds6$a`)hk~2cI3DiSXO$6lthlB$ZUGX`94x#__Y*@l*_*PgljxJFq-J3LSVz z1nKJU79r8#=YF@;LGIV3QxK<0eN}_^>;t~uR;IDu0@-5y%S_bnV%WuX@ z&tAMJjel;_WHqK}%UNumw;st||Q9Xm|H}t>K$*-&P#caJcNNS~vL97bs;i zhJgeVs%f)@n&8~bj9v8Y)L#qt83m}WjarJuQIT$>Bd?I%lo;@-qJWCYI9adGEoa-(d0PCMJ#xpCgeuk4@K!-} z$SYYXjA05YkbkV8smeK)f+jmA%!ZbER(d+EmTO)4 z5nYXIXozNbOgN1h`9wNs_C&(2Ix*aGL}QKo0~BjWBmf>;y>etb*F+wI1nOnEAt+*6 zKt}#%yZ^R=Wl)A~hk$w`Ka$c^0k`bj)wC3 zLGWorOA4#c1F-}thjE(GUq^{m1)#$7$B8-#3Q(2t(Gq&1oD1 z!?~c|jMg6b%Q)!uHGK1AS{-Cr+kTU)O0=!c( zHqM60wdc!9G5m&tc-X)wncFZ5L#g*2EpRroO8$%2;)eY<0`ho`u?3F@WA@LQdZ*Bf5Vw3#K<( zxE0fyJ~0zE%&b&H|my zQw#JDqhCFpmAxN*y*_sKiHWsRogZXG+gqiG1^dyOOzZke2Tze6d;#}C@0NA&IXSra z!2m}11(>soA;KARiGgz8nKDIQ_fQpEQG{;i)XJpQM9W0ux#1*=nJKoBvI!m;Z9%!p zTqcdC5PkAF6Lsf}6`>qF#a1O_toE)=Jx=o%%^f)^i}S}fC)dvjF<5#EVU)`nFr@WS>{PNgsqD40R@n}|@~@t{F}n51^G;f%D=h330qx6r z#>Ry+mEGdKQ;k;6Hcbl>(9+6qkA^Wn@83T=cUxOfB6g{&iRAVgGchG7@~2-tv(zAX zGyU@6qo-%!crrAw@rk`O4byq5mZP#d`sk$eMm&x55pC5#`vYU0>8z%SiV9hgRp!V~ zRs-hYAePObBZTj!a-cui055N!3J>q1y7134*30!MK7;42Sfc7(>Yc4&ZaMuU8W>Ym zCZ?9NT3B~-h2Bbd5`b`T9Z+KHEKo+w@?98cox1@e~7 zUzERApUY>hw%8jyyJA;yQ6oynZAX;jAtq_6yk|Pvwf46Efi)-tt zGRkSawlsiJ1+gyJXQTK>clRswSCjV}T$D0GK6lDK-X%1LII2=(HDZt?33wdk>Gz4m z>?L^4!f%``YVP^%X*Srn$CnM6HyYmb_Mz`VXpH;s5NtKG+*Lcw5xNY~V3~nSFE$b` z`vBFtA5j>1;~?mA{fkS_HH<2qGA};vW&fY|qL2noS8P`~;BOYqY-nta!xR4N5DyjkohV(&HZO-ods zYPe(q*d9=ab}@G&aE%|qw`&n$adaA$L>^OYi&ZLrz*zEO&JA7X^peomIu`m1>T5Y1 zHl^Wg7GtCsourrGdung+kU(jB1S0M>c&?)!c>ur0mh24S??bLGFPk+5y+56#(M4z6 z8X5So3kt}$pTWHiL{KAB zl?ZIVU0wK6N1_xT`ev*mqtm`YrwYFUo@Xye(Ij!^&$^t$dibW$Zx`CddjORyj%m!n8)&%;XmCSO8Av7&7-3~ohNcp+yUQTlb^B= zH>7~DQ+W5Ex^cAEZeA)3_=DUEmL1%5IkYz&%F{9p$MlO6C-RnXv2Vh&=Xk$=BlUnh z&kJk<%uJPX2E~{?K(RgUCKsS961y{pK=Ey=*t>6=t>%Y>_cy;4AGlkUMSbCtBzboF zu|q;ftd}-hNwj1cC1m%2vMMe!^SSfq=(0#IuQQSthr{m?3>QPs>-vpgjvEiyW=N@o zSGcZXJ+ngj8^0`Lf&e$?dcbo&a>n!fy|K&3#_J`IN^kD_D4cuWNd*qSfP5w$MBE|f& zoJ>rr%mSj@nJcFl#yEZ?uqhOp_WuC$Kn%Y@2BgsilLlAP$P@KX5lKAv3Vmi;I`DOp zjbtR8^@I`htA!t0$A{EUW%!GJEYy&)2w1 z#?{qP38~lASvphxp+0&+xk#^j{T3z5oh%pgO9!cxx^CS%hVS>>a}U3#oN@}0^u)z| z{0^#n{gbo2^2#gs-FF|e5vG4kSN7X)Kc-tujf%l&%BzMT=J&RPzH3wL532!c2T3|R zJ70hO^{q}zi=ht*GOUt>OE-)7+8swyJ%%oSxi~PBfB*#;}0e<4uNT; zG0hjUi9(v?e!tIavpZw4cqC!-1Zp!j7tOHU=Fx0!yDguH_qrUJfJe*3W4)m$%lrJtqQ1=K zOcu1|%U6L4r>r*i&34D*X{W1V?C7>d@Akg&inX*N+#Bm|S>^G#%DXb!>u)CeyPerQ z{@9|iP8_Xev(9)%i(>GT%|36n)dhSGMtp9cI}oHq(RiGBR-mm)e3qpXgE))u3THD*(`{Ii) zf|JrXz^$~jl!Y9yT3oB`zWeUvb@}C&1M-5U(!7I5A9&z_%=ghA$WCi(>u-MZ8(>@j zUx>kcufF=~-~H})vu4fW5qW*}t6ybwbo=eMcXV_BE@M!PQ)6%$Mvv>)uP6N5-~JY$ zcI?=(lnV<6@MtPNXYTRzS7hR1THx2?a!d(V{we&$cK1COE`st_t{qKKA z!$`6KT} zR;K+#3cDHEKJiB=gwKpMr&CWol`o2K;}aKYlLDx@55Ll6>6I60`6P_5f&i6^rvZ)> zvgPQnF=Z?;im+&auq4C4pkT3Oa_QRYihMfm$%jLo%aWdv{$Lrq>Y37K)0tQzQC8wh zL?ii3BGup7-X618jAT6<6gZjHDgwaJ(Oh54qP6Q>RTIY5209nNxN_0_a_nS>kJC!W zWXh{t&Nu@Oux6HvfO;tlRg4-<3?N557R4n1qM~*#pVys9J5u1{cAC!^i*aL2l)wOxJb`l++xv2d`o+-cVm{k_(3 zXY;zYww9(~Wo^dkX6Pt`Ro!};(UHen;tEuGDo0`-PNs$eH>vh*82M3PwQZRFM_{Gi z69-fFhx)rZI}e&T{NC)VfD&j@0Y=3<^(jMcb#r%DPft}vg-TmYV1_?V4N$xImCqIEYcK&|0aOBv6*DTHfw%iMPFa#D0;=>3c3&ntFXs@7$;T!)vUm2-ZP4hcj%; zhFop?9zA;e#9{j$IO>$2zINNx31b~LyhwYqvH9OTzi`vdqmDX;*&5cBmI;M%os zUH-#^?z>xzM&*MRf6whpSM)#i_f&rf;~hJY9BooGZ+U-%+SUp5iBj=y4BhGPhmy(r z;zFxBYOGJ_DD@bDn~_x-ZT+*9Z1n#WD`<$(Bl#oW z;D`EJL=ijJ1rS3GrA!_Fc)atzy8_v$JFg}4)?{h*+;sNZ=Uy9C%9?_wU@u@>=X9_^ zNjf9h&_GIkNto7~ccU&I4Zc0;ya}tJHbaWFYuBE0&N&!y+;r1T%$h#U1Evr4hOr5P zo;eH?EiP=47`rfU!SZGH?Ad_PSO6JlyV8cCs}GftNo;Chhtq%>$1{Is@Vynn(-6@% z({N|Ix>}%jYon7I-g_`EX584VY2gi+ShTXTaxKRuXju%C#cmQa9uX$AQCTZnt>j`_ z!TiM{b}^ckj7R+iTQFE*v)iJ~84B!$Omud(Z@^iB_k79D-PZMjInmiJoO*j}h8D=+Z{qLEl*Q?~X^`EXK!)=+ES9p;5{!qM)-|pTN0gY;%Kg=o zCt@*OSrW|lh8i0hUeL5DnpQSpdfM)k)kmizVNa$r3EF>Oi8~(cYF^dks~%f3dK?Cj z8uP@g-5acde?oHvM@-HqqN$$l61(hv$96s17s=#P-f~YQPAsGK?;!{5Bpa?+RFKa@%2&*XFbywLKK9oS zi8pUe4eSIO0Mnse-F4SpK_pq)X9@g)2OhZi;)_9q6*9Q_GO7`pGNi>on92f#x@gg& zqmDX?D#I8C^WF&)CV;(St_yApHzGl$L84!H;RURKfr+^=GzPN;5~Zo7!N<%Q^cmC` zycN`yii}+_Yx5)r+2I$z)vyJzUA1ZzXe<~Lk(7mB!VC^EScX67wi;Y10Es>?bMcPIno{s)Q8n;7=G$lwRV%e@Chc~81TcpaYWk7w znv2PNGaBF%;(H!FdNcs^R(?*K;kI2L@tq*5st#m?w0zhqKqMctK(v}Hv{>YTF-vK% z6pW~;GXuDbgN#r(T2~eDT2k3~yMqn!_H<{sBa|*5IYO#4qku>>;WL1ukend|QEMPRCMRhhT9eNDI@>w)@YAc*9CFAhLh50jPhP=DCt zwAhm!%NEYJ#k=gWLerAU`YF?xGE+JjQfL+9%k zwdPWoMF(AJR~2>-ZSfxQS%MVfbF2 zzm)7d=7>WgPdwxuUy(~<^dr+eexa~}GlDTu8}yuYYg4&VMyim>v=4|{)*aH8fwxMT zQIafaQDz$^)pk!)vh%egzuUF<7k5i_?h$`?*%J@Ad|oXZ2d=c(3mJR9r_i&<5u?XU zooVrmnmya|_wp%U_|Cn*ojQ3GEV%UJ6lq^sJ!2y)MpqyFNo*|ACm17g4(d%_sDvek zc)@Ua8B!2Ie)anSt29+S-njHGd==31w)rZANG|;gC#~M!=wAvSJLXH|01e3pmiXk4 zen~Q^4J6c2Y>`9yE?LcxOAN!*#%R7ky+Xl<+93m2Sp!jNkx~V@6_L24Ji>c`xkT!v zgQx!dGxq~L%(wuHx%D^SWO?O9rY>F25STY>f zRVbe~jk&x4-I_z`P=6#ZPFJn$5@lAyFT^Aya?YGNm<-=_*IjIQ6b|~eL+hPVAiw^3 z4tzySbuba)V$&$5Lu@8J_~3)t@`;HJ0})kNH9u53*`bSX3U6v)Ga6700$)3gz-Gt> zS`RJf$Er7P^HfZb*4f>&VDYk8BA&BkXoY|ze12D5O&v4*d+)ussc~J2 z8@LtQVJ(@ZMF)JQuc4g>a?Y?_3(jIRYsX(82N+I-y_|Fgc1A%Zp zpXzVl`@lmcPMXZ*ArtR+*{p1$bl9CBH5u{TC*2fN62f}_DczX#f=HLkB`1xFh7$`G zuUy``QYoams>bVL`7uI$tbYa7-(ZPpTujhV8A zJ4!5RtJ9WEXDv2IqF~F$G^dvK6l^}aN~fcvp!tI(d0Vcdu{*3K{8opDnGz!sOWs!E z2YOz(z6k-obllOik2rkB^j&IdYJDX>{0d5^kB7u~5`1UX%2m(5`0{;!dJxL7yX>FH z*piyh?GMI6Su|~T*V*c;J7S5_pv&s^bT_RJwYCKO9xEdxyS;4cl$r^n`%AnXYu-yF z`)vjLs0kC=`{T=&{`Y|0c0J+Cq{@FRbJ&)p9^_~2DnU0GJ`>gep3(J~iAg7nIro?gPF|VEOXp7*ujgiw%Iw z)-D}4DPR|@hAsfCbLY;*n*=<;Tft|cT)K2Aw!ok^0HYwe3SedFo%5(M5C&pK7&wFT zDtSnboIJul8jES8dLl3_>abzMz=eUZ!K{&ljELtV0OU4dKo46ic8xxW0Odka4?g(d4L96Ca^Pk-P$F_6hE&K;Jf&7y z!x@=*3MjA6)&^V0$N&wjS+fS_lo1ZV*|;>}b*K$+q?Lw$@E2WiDTc7x;sqsg0zy6h z_~SS#VPFXYj$p)--PXL^EoSkN3CNxDBAfcsJ~AIO;YZd0b1Oaxwbb#EnS7iH`DVCO zj>c4oTOz5FvRO>LwaT!^Zg)~oaDBn4f)Eg&N+nxX&8rSNe5I8>x08_!NDIuU3*bw* zY)d2^ZLLktY_Ho}n!sPI)yBt}w`v{Toz7T`*OmB3xi~qI z8s3SgdV}SDyE7C?L=xTku(Q0RB;~{>OoY~E z0+qJFm}D|Y4RzSWy#{R~*s&+m=C?(Wn}KY1%YyEz8kg>4no>|xa4iC|T|07DMxvIE zRSvrgAsrTXJ5HhdL-l3OY%1>1tc-DdBljxvh;0*P=aO1xbNkAwc^u}DIj<^f7UD^TLKedoaH zTNb!xm*)bfoE&*;k*lgg2K^!jd4eDDE5M)Ne{!$CI&pfS&tjMySXr;K6*5_jXFzwE zPqB*@4j@-d)Wl_mRa=vezjDOY{Zl?aBi4AHr+ZTWqnT51uyXjTBe$r+^TE-&lZb~`RW;4i9rkcX167~ zyI;HT!raOgabWRuDjcYJzAsWYuIbwE9$Z;zO~y0s5|3t0+EVGMyVSnYuqu;h3ur!- zPsa+jm3QA$Kl{*{N#iLtt%4X{$%cs>?urXQ+15PX@+}#Zwdr}$Hh*jX3quic@Y5_7 zSmyG~Nae9atB^kTlX4NwKjwd>7;R;Igsa>>cKF(rb8tx|1p53?!dz&GF958WRO|w# zn^6IMQYi`GDq#?9-<0MAD zN{Nuaa_J9M@U!@<(C0|g`lg@#pLbnDoc-B02OFBvTGZ!$WNmXtbMM5_Bdx6PvPYd$ zAgHYRsFx<4m!>`z{Sy%F5s*GozK9Jjh*i9vszA@l)3* zg>%ek9C>>_LWh}*ONZyc7fBM8FlNaY9CmLh-Je6t1wq1T$?eXvNOym43ve@o5#;O7 zrUD)}5(Vq)I~&)o*0f76z4%L~o;q#nv_P;zmph;C>xsuXH!S1xddr86svkLS)_w<_ zblR6M{@xG&`p>6-aqT18c>6Bn$HmzW!(b_&2H9uGS6VH;2Huuw~LDw(bb z*7x^l{k`im*<>i|bY$Ws?#%PAJ$?EGm;CyUYj>GArmA`bK2wywihs{K@4U+vFS_^c zd+xmJ?$IMh^5}wZUN~ap2>eA8mb0u2F}$Ym0ie|!#t*W6#0Hoq2|~h+0MIrz+MJS&4K-e&@44q5jw%5@2I|G> zGaxeYVBAPTrXDx8H# zPe*HeU&+KV<79^c4H4d!eH@YH2JMort>o{fapz3ncmNc-!P z1@XpCRc(!Bri`ffShF3?4e@LecW9BurLodd5Mvq(T0aB^KI#c&D=O=wJ?ro-O*6s) ziaE_wUtO8+USYRnXrA!+mdm?K9VH@zelRS0;B^DfGZRNYG+$i0az2iCD3jG4?&9k} zch%KZt<7CH=N><4_nd4=COqOMY}VpJPTG!~15BYa?V-pw6-J^gVOfK*Ff)SMGUSdAlbDoQ*f>#9ip z@$@}9zNZ~Fx#Z!-#5?)&BWEAo`^aO3$m&8L);df9#Q7e=iG2F63LC#@mYzARIc&2J ztEj5cdU^}p?dXZu3pr=cclw@3)QvbOov^icv^cGC>foN!CR}j!RX6>% z_iU2#VJP1MMepJLphDjgZEbI!e?hikbr@hXo$3vgznDrqvU=HnuGpu_LW z{i(myOH^X=fpN2zCd;+AOufEGhs zRsiKzaBAeE=Ig@gkTar^9641$t(VAS?x{Rd5Is(>NCFLfTy+XTKP8v?{zJ=_HvZoa ze38C5-JtF($70K+O3LP?a*w>ZXwrz$AU%wCx#&Bs`a!+uia|W%ZKD-Z0nu&IrN|7$ zLZdGFb$U&@YFzK(5RmaY@djBDgB?4_cdiOR>C~Ku!8%_2xHy`Ic@EP&j4mb1o10Pib(gH|YTOytERRnuO?f2Ys_pYOc*Hu+ij~p>fUnr?%$PQP>a>%OKkjG0 zy64HK7Vf&wgt!GX+=1^BRwr2$U>l9s<+NEUvSl@%`tgX7?MiX(V!>tcxNIQQwrqdn zvZwC6^Nv$b`%<~!-Mk}9duz+m#S0fLTH4amie=ESy1GeICQsjWmp%5Jwfi1>oN(fa zpFjGT!w@nD3+WPuCZ+sO$cl&!w&}VG|rSUL&n?kx#yl+QBeUUBN>kJgA%i7Am+2rKAYnQ@3;e_BKFS> zNW$O;M;{mtgA@~K43)v&N_gaCm^5b07%~EbCL@IlV=GN6Zq>jN zRv0@&jFB>Ya6G-o9(%CU0t;p2K^qFP;TL)+Y5Ccp240L0=+&!NQ)CJSl#k5VR3UJ!r(&#C5#?D8Wq8l7~)9<0bxpX;)y2$TLVUu3zDe8ZE+bDr7G8Eeo4Z> z8_V=7uDF7if~Yt@sjaEm`9{l|QG)sCv!ekugJi-4R;JOpGbXUhj$4OQCi-kmt1PPt zYi_(JM`Q6!JjG(P42#4fK{nawjIXDftTSGKmS>+kPP zyGlJJBZ4Ewy2I;2%i68|j*+$FN}VBlwx_>qnaf!oxA>C)89A*d=5>bC9=9)#!)Uvf z?P+LRRc4($9sHTHFdAe_u`3a>5SExjbTJV(HY{F1p^+B z*W>llcUmG|j6pP7^bb)^{XQ*%&{&DNs?cIehU->{! zEXe^fx*6vHN2Vd^oOa>SlP^2>7_qFeSrdum6aRW991fjy>``rT?bNIP+|d{Fu-cO? zWSK1K=AY;U-*(o#90c$7#_zuJGy$MDR^LYwdy9#9NnnLOm+jmcB~QI)n>6L9w(FmW zB-o?xz~2qCIx90VPAaGBQ(9JdfB-ojh7F$Lib7CxuhUuM_12dMMmQ{uPd?fA?A%0_I!2X$&Jpj`&!oAcKKob>l&6l`h+c;vSYxb;naf7xRy||eZmkVN#-=EOn%)jZ^Mdbw{Kod ztMow_v_jv)Yu3DV;l;U@rieYOB_rXon&+d5zpn3}wD+N_J93lP_PXlqo&ZPr$n?hH zXX{6P^u%E6;tn8XaJpn6gX`P$3;zu*oS!I}!jVKEbeJ5-P=m(|Jh0GVWR#W_@=xHo2_^0 zlC@WU+aHajI8lokKH8H-CtI)6_s_<)HaFk_ot+(!g>kU-b~@6}=Z)SldVn7Rb&-&Z zu&8{a%Xp+~S}F)VD8v|^P(J`<6)Vye%eZrdDW;4{@4*~JU z3~lEqyIBfT16!{FYKmBrWnvL*lRKNQ{J!k+R@cvOyy2pYFY)?)^dQnb(2|Se1uL#I zMvt1_9!b}X96=uv?T-x(FKOXrk&MMMh^1BIpNu@M95Iu_8yJHN&EfO9nwuNH^rbI@ zQ0N)a3&>w2AxUFf=MR2z(_epotCE3VpUV@D_GwWKv%p{7dMp3bqpPmGg3TQD!-f}f zf``(+F&_e__}uIRr%l=;5{}abq*--!u>Dtuwurc*92Fv)Q=PD_?l3dZAP@& z_%h4oF_}qB+GM2_86IRd9iz>LuW2TGoDB$*_y-~bO%dvafY#$>OeIk#Z)+~ zWl{~xTAz9Dg+mYhoD8xV1|;JDdHk{OTyj}MZ?BUrGDC^1kB6Sz-LYaw271%j}TZHpLgDQK%yA% zo~vWExGvqyxPr!t%8Q$3&g&a9W(?3XFgXgekyQV z0bq^i4QRk>u}W5uE|$?ap!n%ee~K|OzLI&$seo+!VjQSAgAN0BUwY}KSSSOO7b7W1 ztKe^tWjxzr&5a~9$Xv+D(THTkaFk2|jv>aG8)AcKGgO6=c*;UNY_X3f2Cx`k(xk#M z2nA6BppdSvu49iq7Kb6==~zNQ34o5R@wL}pOVP*+D4$YO5P)W$k`OE&SJxOv180*v zKtI4bk1#d|pockOvc}`bcfRu-)&RIgY<`O`xPgNg$80i8LQp4U=Ga3#N&}{I!X%tU z5yrG-lPS$eQv*Aw2K4zKR+xw%V<%Q#3x(`e)K#nltpdEpQ{pl;7fV>u8SJH`(+9Q# zeP&}6pe+!u-P4^(;4(6m#HB@EhjyK8D$Ckk?4c|4_Qv5G&(+xNRpn)%yo?TA>8!Po zOQw=6ai`OqaOR;3Q1K#OIP@;ZS5<<^&@>A7p*?)sXS%AYM&z z(%QEBj2RU{PisH0-3G|7URn6`fE)9jJ<0c)Isu>oIe1ZR$9((MzvaxH< zODk}BfP1BllK=`9>?yCKaP}8w_k|OGes)nZE7JkqC*8^*{Xlr*EDesvBVtrox02z< z#&>b-0b^>as(yCw-0mn&iP>m5P{tgHjsTcIWsb2U#lw_B#9p5_53p^<^y$^LwHN&C zZ*38=#fc{IJ0XCXz+>tvSRCxgbmY%JcJIBWO$6ZEjFtCbnr-%1y@J`Jyh~RnZ+)hv zx6@JTufP>-j_IFM-1OLOI4X1%d^S4>mBR`O?Qm+;7cYl|(l(^CwzfuJw0&fmJ7{yI zN-JXNE*vmeGq$)T{!ZDEFI63u?YEpXdEJ%YKM|pq%z46vXA5drj^l&)<}GncF5!!h zoW7UUSKHARi~9m~lc#0l-5gp!dE~Se$yX|Cn%|u``O#I4r;Hs{i|s5f9WBZByY759 zm7ICmWr9J=o?Myr7}tR9=aR*5UVKTeqcg!NKJjd{qW-yt6@TrHeC2DG`pPT&GL2oa z1=aDC)9bXlZA@b|N6zBOSJhbkHNH%U`5@pn#+=TemRa-s-)$#d<)YcNVf@P%#mkea ztboz@n8+||HZuRT1ZcBlBCm_{{C%d>izFTT`Ba>mDKL#S=km5C z(oe5_Z)|l1zH@*h_($6%!-7GjF%}1+L4gGHS2Un+!s^l$uGB6O>XraCTP5L_NN%ya zVM>FE$Ic4BQfd@MN!6F7e}uA&lUt@hSlMv4%s0RJ%`30Gk~z%IssvSb^VihCCNwb6 z{;FORkXRZFMpSjxRUGf4vAk$^fB%P9Oy6bZQAZt#w+pJ0*b2yAs(f`-#l_z`@AAvO zQ&T#rJKV`GH1=YG*wWHSD~C0Uz|IVs_^Vqe>wOBNJ`R^*#iz6^fG3O-PB@-jXnKP* z&<7v^>uV3(|3}d0{SG^_ZS~4@E*A;oKHBQ48HIDZ%3)DP=vYhz6?i{Fg`+cRAp!%pMOQZ}up-O0Wmzaz)4@VHoUYdKp^^U|Kg zLrHd?+A1N5*zm`ZwOO!Tu=t(MbV+5-<{VK~KJVRm*Zt($%dhx8?)>4#`0e#)pV{w- zBa!X!DU-{Xj#&#Gz1@uZoE5|ECHc>>_cNP3`Lr`{zV6ENzxVyT(^p&KzVhPJYb#4G zy7{3!r&i|t>>XvuWAWJVf6W%AsLdktJTW+}VCzHmEo>f)d8;d0~8Me?0oNTvs_4R!FyO%xo_?$o8_s5yL?@8y( zK#Mu1u2s$Lw0V5iL^2NkEQ`*X=5laSJe#O8^y!Q=1~qN|H8t?r(g0&B#uYd><5)a4 zmOc68lkBfL>76&l{KV9f)NNbB*CZ)3>SwUv~QROgMKQzW)P6! z!-r#=j6pPBiP@bnd-iO?7!i{k>{!|Af(rvW&z(D$V=$mU^UO053=Rx(81I3t;QInF zmopDJDgzW7KnE0th8GkV%o-VpIs5Fh0fQPE8kEr=eBcit3x*5I%-D$}Ak-(Hd@?a$ zG^9ca7$XzLN}3}#h@og$C6lk(ZAO4dN`VaD{qA=;KM+3~&@cc4H($4I9U23GMx_1r z+wb(#Pe%_(0$h%4B*6w5TpRoyg-{S6a*itmD@OqEcjX%zN-%mxcdx(xy2?)JU;Uy4 zx-jX*2If_WGxSog66ukwT&>sl*=Rosd z9`t#!EO2_#zF?_%cqgw6o>994WMH?4K z1N-4oE^FtEXMOT(v9@>i^e5cIbxc_bf;7O>*#f)taNQ~~Qf?^#zuc-f41dX@=o)fc z^kka_cSrzQ>7}f^jE#}&8kP zb$w8N8^=oworeHf41($1?WMNN*T1k&Z#X{Zg~hrRj7^{62xG8XIdTs}?0jPEaM_x~ z*R*b3W8?buE|+h=efE0r-|sxXpqc$e!dCD)e%}AS#FDyToi)MpjW5eQ0S)o{abC#I z&Vl16T0HBMnJML*=Lr^t^}iL16e_pP>U0zejx7EOX&szWRjk1h7gjH~{ds=pyYF6L z>&ge>t6XUn){#kZ&W{84!)65?~3Vq+F``?PZRGVpcYR zvGgDgH+aGa#wU(TM$C+e8Tz$aNt&dATTcX zD$FCat%J*GF_UKI>To5*t20Y5IlfgWp!STDLfzfz1h&h1Wf72o z_ri7*+zfje8gih3^d+p@6q4C2tDYo;KWl|Z9nPjB(QHGwuhtis7%Z>#_%gOU3CYW@ z`<}M*=_vV-d$1q_z=jS(i(oqXEJb-=4+D`Kt7~V9QRs6lo>=j-Yl5NfG&NXk=ydF! zN@BC7Jf1Z@A+5c~J-(9tkiZ{|^69Tt4N}0dd=6q@IN;n_)TpD$>M0uCnro1i_TwM_ z7}FB`Q7{FfuicrnOma};Y<`z5TRvsVBw9I$ z8TrQ}(Rbf@+f`cq+H+3}H7#T=H+7E#N~-D-(a5@Nw70J<6boDP4wl<-!ZGLBmwpzG zR9Ctg@u{LPnIN6lR~jr!v-w92Y-lm7fO^Zy>;di9H{F(ngAop{Vq zcina0`RAWAcGT$3wiblN_L;6PXW@U%Wx*j8uATj!pxj9cI zqFH}_-(x?&an8(R&Pj(llTB*_g`78+4z2IVx*7IK=RbAwq?ccQ<=Youa{nLiFRiXr zDwVf~g<~$Q<>Pj1!QtWPdCnG*ja9r>jHCnz*L!xMGcQvEpCt{bu>>svfGMyk$S1NaN-O`DFuL&;BSN> z3y3KNm^%XCV1&~+z-lKeo5O15e9Y11zm5Yj0~$CKD6J*T1o(Eu%wP#k$j5 zXlbYM(7j+;Gmo~Y+@(tvL%r7?yRB{Mo%8Z?_V&wRE5c~Q%c7;Ubcr>4_VEXXqKUsf zw-~Po7*6Pv8&hwX_Ji+q2J8R?$Hw}yaN+@DYpQB*e(=Rek}Z>X{gtAqufr-deCM{h zQroa9*-MCni2uI&N;;7~;pn4UTKaE!;3c3-zCP-JT!Nhq3Wj})9PbwS;rVBx5vm!V zsZR9q{Rmp8Y2!v$jQiStTbXODCwlB{ucYVA|K5n+;nCLk>XxY6uBGCZRGP{dvAEtS zJ@l`xJ*iheIk)f1Xqm^ayFO}hzx2lK$ygsdU_&)t{Dh>U zaau1Mj!3Ky&4EuYYk8HwGu)|FIB4^DQTXQWU)yY3+!%?1vI-!}Jcztxg#+(qdve5Z)bBn!ZIN}16>F0TB+Sx>+x54ya9*P!?qPx{CG?9s^r6? zL1wEh$-`JcClfg9h~Z3!Ju`(uTO!sKkBu%VofIrDb+TW%fCn2l(#ukalu0@tSqPOy z$$=v1=!0Irq>x5QRbG^wq7W`B`%V=!O1Ju!pLo|T&4RR`9N-q|^`#4>lTTVL%jq?J z0X%QH#s1mFIGb^^sHo_x(5=!2%$b#rB>kX)v(h2I#g`&eF@y=I1`W2@m0+_mhGVdntIts zBTc@v)wDE(dcu+3cs3w*t_;m(A9Q0Mv#W+Br!eX{1|`7SHeZboX?8?Y#5HjT_t4)co>GFHWB>mUrr+X~IKs zD%3e*!qi+Q8|&}s@9Sx9SmtP2ok}KB@fbW<*k%DWoyKKhA<-rM32Eg=s?nbH z_jT*{n$7LaCF3J;0T}Q%ty?~R{DeDyd*@fadinwT?hgU|6wU7!Pdf3T2kw9Izb^&Z z+s=fBjo5BaI$en4-wJzXi?yY@qrI!y?QwFva|y?MiQnr~n30tfFWJ}KT04HctEw)( zdRf8Z4wpH7oV%V)%zf(defQq~qKhx0F;8bRpwFSk^;aKs&=)F8gPiJY*Lp49zIb$P zW3SWgr~j=B_wVlaX{9bas(HH_^Se#_+a*8PbFV$8>^+--HlFUzJmHWZ!<_K!2_py0)NR(jwmBM{J4h2y9Z8mSb$qG6yy0L~-_ zV5J$sWd|{^Ri^?HPeMN0G|qAK3p^LsMrt?*8TQeb7l0ZA^^zA%fOLVLRi@Yl6UoSj zeBlEg`Fd*W2sfvfuCQymxi=Bn#VE zvgLehdEeaK*(qmc&YbzrnRAFhG@c--&J~9NQZPUwq)N)dTYzJdB}~bIjERXI3_j`Y z?WKhLBo3eOA=Oc+v8n}MRm-4~r51d}x8%-;)Qd3Ds26utRH#fYq(cNQKID}uHYMRF ziBoI>hh9XZiqo{gl9Cj>JucoJw+MyBD6F#TUsIna)H5Hiz=|9{_khY*Yd`?r+bDpm?)rZ8V zJOB~&MRGZ8c}R+siN;&XOh-CwwCAhH@%6m6)ecnCY$bl`#p1-o7;;j@8IrfAKt%w$ zbKpwsy+e8aW8eeP+EFw{eN!3&mA^tk9~<ZiT%;Tq}ztX|fB54{c>7YmPn|f}?5- zC;7@!hHIgfWe0M0I+_|> zafn}{f~Z(**%FVX8{1FB_*f-7RjgRN*4+5c$Lzt^qrwfEP6c2e0N}JZg`DY~;@UKm zjJLHlSo1deNfOs~B#_IyT$sV6>#-o0a~{W@4;-%mG;L46X>Ds^UxHIJr_OEvS>=go zr1jttBL-RpyDRM)7>_67;ZRt8dvGl2OeDzmN3ThauB37$5ox${Pbhs-HyR~nB@||C}Z%%UjeZ9#*|FctrBTlck zl134nv7AfTJsSdlcCB|!z?1v>#}-_6-clY5#Vpo*G+It)#cYEKijg=?RW|fUW2?;> zF6Sq#>CyaPd@{G+YAeU4Vmo$ipO}am$%Ga!4UDDUf8p}dI~M-@H+w#EQfDw<(KQaN zT8p>e@Q3)&%D?)@`kuKc$rNJoT{rx8&o$peTUkt3=k-)w>%)7tZ(e@-x}X1W|M=uj zZ@#6JoQRGN4QbB3tQ{eZhJx zX^6@*ipzKxlG8SnL9M$aX>yc_z-aaQdrSrD$$VxolOD@ucuN+2+0;ZnwYZhBv8My2QUyEqS(76atKN@I0aRsQmMW``eQb(7D;H_AnQ^CRI4i=d z_ovBuDKlqSTykiLX~3Bg^BGtY=ES3~-p@i}AC|tT0=($vn{IjU74L>EVUB}yHj!ZH zsw=MofNpMX7#bXA;ZPBe#4-bL9tT|#Q}bC!0^^ZsPA=IZ4g~xF(3f6zDZih2=9wYW z3@9AVoCl;#$a0Qg$m4bvn3X&s&OTZ7te%X@i6)LhX>KNTgb?TUDW01<8oU-jV+ z13#w^mrfDb5>C{tk5ZtCnxS&-+ znlqUxwYfZJH?>5x62?9#71L-^&!dO@yKjBtlixql9ct9eg^LfRbt7^Ph>plesEW^00-f@05_&Co{Cv*HHP`jSAr4CvYc^hwSxYb z@}uMhkK|Y#AF3h|p8zSys=-W_vB7zJqM^)HvVauHE8=ifiK%i#lv2gu&g@Vvm?{RT z5sk3=kT4f;A$Jv-!f^4^to`)*nkS^jLq1g5kq!}fqNFlXBMy1-5bToYL{oY3gg6Mw z@GCCT#eteiguALK0hLbmxq3x9e8MZB5>&z|C!P#ZTtJ7N97(x0{_zr~%8agX90@QTJjveZ4Pfw3(ooZxKqfx4LoGfZZ4sK0=NvwXv}=Wxt!9 z7}YDPiBtm=3==Cv+qrXR^|TclNGu6mP}2DhO&|cRpu%ba%DEs%vN*REk3_D<8iv`TAEuIr7d-- zoUjPi#;k$anX;pQ$i)KLJY!McP|xNS+@T1TTbY;=K)mj`0T+>S+4 zyVr9DpNiPC6Y2h)*6u|%EnmQow1zF~d@e8bqLQkDkS7sOxI9xj5<uIoDhue)kb#qlvm~z!U9=`b3!BcvC z>2H4G)H7GiW3|XB2(?lx=JFu7m^6WgCN&@my2n~55)^5qQnnS7Mtp?bBy2Q9CyVPh z@0;VZ=vnLo8(aFbl|uB*r!`}N@R!&2{rSl~{v1m!mUQ0y{hRK3;I00yIWCWbWU80a;ie~I$p@p!yT1O9(7 zy@2Sf-|U(PyWH?Js)clAca*0R{gbggXF_EY1jz%*L?S~qwC(AdH1DhCs*WkC0Ib>U z_toJrUDBEUC~rlUq6YkxZfXV?R#Jb)Fn@&1CX~xERCZ1D3-Ixm4zcloS`#pmEw^??b?hq$%R1zn2&*uh|AUC3yx+p zdy=uKe6GaSrNh`TfhVfMqDZ}z(ae9vLJIaK`H(o(2*)g7w#;Fg@0b;U zjGzp4rzA%;Q$>H(*^YKzN3S9bA~j^HRd}U(&P%K#yMyo{Bx}1n91L*k0xvJ6L_#;j zow?iZHP5qXm;oYv7{zV3{BCdG-o*D`CjtExq&!>(DPzpP}3Hk zcw*DMxu_%?qx<(oqd|}BOJDfHU;M?@txYY&7Q*^?iFrb#!C%+G(VyKTyT>vK zrbtPaabXzCdb`4IZzWf-7YdsvbX&P(E9x$*%^wJijgQvXh3uh-vpz7oZ@(T(6a#@f zp4j;Hum0avr>yE9@eE4(!=hAuI8MKuPd5hB#(L7qII5isU?r3+Ei&3q} zaU^Rg=d^`cI(h8nuG3dO{;S)cdf$fAU-x?05>@J*+x*Mx-uJG{Kix5J>F|(|$=hA% zYFCQ6OaV9VHXjz*(&((8cG?QK7|TWG`H{ilUq1ZQs@A&6OfeMn8(`MsQCvc5p5}Ce zCzTnqq=wNp3OmrpECj8#A)4maJOAqAwDmMApszbfj#a3so}TlDo`3%N%nL7;yh=jjs~N6H*$*07raU;SLPW3j(rRSU zs3J9$ju~NE{5vQ?B||chMGh4wG7J|A&BrpltBK8Is50VirmSAqWIhw^2!9WXEjdUc zl%79o-0|d~IMuXfB3B=nA4)9=h#D2&n%)Wyy6OPyzxc&3s29~av`CNz2^kG^Rsq2J916Vm-g}i5 zlxk#B!!aYqVerQY@J9sTV%Ycm$(Ai!ZomC@B=A~cyP6t=#ZM+O z`Knc`DAH}W-9`xyO$~6FYb&6Wrd@sY)jd5u$mbYQ!8|&SD1oGZ`qQ8C3UzysWiqPm zFoconQKG-xILHX0=XY9~$Xl2h#6yLVrE?X_gYx}aLx<2|4TDfEFL zOxz3#o|vk|fX1SDq$e`7B#9uLL447gx&dEdMYk(4f%2pxg5D{repD`zUCfVuw|@oFdV6~B_?9Y zl*h;6eeiG)=4rM7P9aG#xXq%`h`6=l)IFN6T1D*36A?&6uari|#um<7Y4Z>0Q$v1F z*yFTJ?Rhe0@i)~6^|ImeSW?+S0fklAgIRZO0OIxa&Dng~u)6ipZBsV#wvLudUSF_f zPM5c?-RZ`35A>1C%S?hTzW(e1rqLdamr5800=%y_Cs$xEmtW0>h4V%K%8`^=}BlhrmRc^ zkL>AcJ8KC>gOd4F;3bMIQd(3j>E1&1>1u99Bv>%$c^C^=J;FtDPL_J^Oy zW*^wQ{rc;E)KW=oedvzCKI}@5xr*3$$i_;!p+StbGz#HO98*wM>QTY#x@_pn^3?3X zV!P2uCPxz$M`K0DR5h`9Ne8EQ*bLp4PqLIge7`!zO-Ui9dzi}Dl-nrk%q8#n-yE0I zqmw^UbmEvF%TLAsOuvH6Av6`-mMX`KxzTKrUK@0JTD<{upT+owVT>1Y504E_=mqd& zX7NU+ds$s0>dZcVh*3*%9tgNkPms1ZOGAg3a)d3!3JEth}>q&hN7iQH?*HMp!x*@7(W%k<@SxiV&*jc=lhv^-j_JW7{hK6$O6HX0fImNBe4xIfA(lAG+q6?|%OCUtr2c z22qTPlwA(VG0@c6Id@So6e-1`Tecz-r0bA&%0?_bfwFMl*oe#NFO~&qRka{5Qy>Bi zmF=ZUCh_zgHxb}s=X`AEbBX=i?SASj$FPlF+P?qWIE?`wRQI9 zlS#~u?Jt)+t(|B&j_uy+wt7nrf2A1Bw`;fEe#`1}&vv-H%8cIY-*DDPu72Ci_wR3? z>&|A4wg#Km$MVc;R6M))j_%)^KJ%QlT^*g|Wp4CpV*}CD&EF|r`dL$da>`{dJF2jq~X}i;f(i2V2C^lytfy`7x@YS)uOb&x+C^`$z>?o|;qW2Bj^KvxK(ik*OUQjq? zslT~i_Ed-<(M;%>4ltQZZcgmqlO4_(Nta#sI~;TTtqZ*Ko9r#rU!XbZ&##?JaVmft zECTP@vj-N6U0}c??C>5v{{Pw`-{ERv@;altyBm`J;SYacnGBe9-+lKnO)xYL_k~C% zvRF1RTErYd(uHRt6R3vih7wOb;hdoi%Y(1lsOB5_oS`ZS3Z^7q6IAz_T&7duHM@5F z19nyzG^2zhW@lvPtR6Ca%<{;igK}33fCFEe86T*ZSroFZJ~j~0Yd$APw;vc7K#=I|?Zv(}c06c~=Mzp2 z{`3|2MJ=Q`pZ`*B7*XQ>|MqYHMzWv%>}PSL ziSS%&wF5O|5_!{`-h|aYG+xmV2dADlZypa-5lDv|!Fk{R{`X^u92b|I0N}}C)sq<- zq=5g)bI&~&=0m=ic_E!@(-5El9MA;j#_8oHmt4}_-CbL3A|o?%+TiA!Z>GRKJv}_B z9c4tO%xneWY#hm-xqk27z2t?37GyS6W^w_Pry>|M$1^7hVnT;kEC>_H#V@dMJN9r4p4bo=MRE>pP7f+;cT^g*bZ)@@l_dk+I_hxMkCoSqpPwgAp zx~sFR%c!3_GL>;xGU0&F?)F$y7*!~tdW@)J!F!;|^(Y{)A3m)NiwK9)m!TE(Lcouj zq!pQu(IAqarQF@xFf^HNU$DB6j~mIsRKA#v7yLt;V~&$3Rlx29J3?PoC8Ej+LY2!S zwNfWXAkyl<>;@)&EtoFDN@=Gz5ajrp$*SQ8$5aeBUIA!DR-exssgLvz59SNG`E%PJ z-!{qga-h3O3&?L%dBIAr+qix31IVlb{T+t8ZQHsX#ANlV<&%?{>+jiYD%kS%tOU(| zP$|30=_}v(RxQbmp&2ud@@LjxGwyhUL%JEa>g& z{K1WnjVDCgrhMogGxi#&gl6gNY)!^voDW^IdPO80{+qA=92a~n3J^f615afu0JNOk zDShnEPoLM*g>=sNnJLk$>n~)a^ib)BheqE0;|(8m3|vy$QG8}Sh5}s<0s94~)r$Sj z`UhHH|4hee=QhOt?V~H_bhI+ku&7g88Hdkj;cQn9ZX>XxIXmOQ58KgGhCb$UdRTkt zMGIa_F{_+Rvk=V~CHz{H+%{uq5+VVlVXis-p0#cHY~j~8?0V<2d4Y@=XF_`!iH7wX zvV>_S!^n98&ldIH?AU(&cfZk5=Zy|-&gs~E+#equ_j%d7!vDO6DM?m&7&n%58SMxb z$P;YM<9{7&)m&$?4I$4oufHzjOj``h9I6E_e*inJHjaX%QyFomXLk34DqLInV;i0( zu9>Nlg5=4xNF+R#AJbglj4G`x0lAqiE+9Jr?x4>Q18wusOmaX^p~Rd>=ff_yq+qqi z^!)v!`zJUD$7ZA5I@cduR@W3_{pxUF?it5+C@Kr|Y~r942l|)-tt^wt!Q>u1Q?eRG z0{_Q!ia7&_Vy<;w*k0%MJUcZJ#m+~mG>Dz?snO;2U_c`8YH&>yco75zr;yT`iPK*6 zFlh>grMjf{(?Kc3OxD#$$9({Z9vV+P^W@ZBx4UQw;2qiQnW>j*S{WrUNQ=L$WkljP zn-^M0Q%_&!uLD149?M_#sy1@%+rx&156@f(=*Wm)``XtKPY)aU_m0{{XOmPdmEDoy&{ zh7B98yY9M&9(oAO{Ro1-$%Xz%y^&SGP2TW^H=y348ux{K^+yst;%jO_12Jm2v$kP% z#KMMJ^z`(gJOvGp2I-DiqCe>+>>2=(g?7;8X$bl_ff!3Bi*mqGNnk9-1g&HB!u@x@ zyYbC$c?-rj%p*7zpUd;Qi(d}_-PCo`p6d!RDrF{bR$JbJjCBO}C&Boz?8DIh}q4jG>8% zNy*a`6ZwO4_V#&;e|y&-R%$0^3OL|JEe3ngF`Lz;Ic%A7DLNj@l{LRL-{|upPjYyE zZc|HBFq|!xvE#fihMVnSyxE}m-PPK&cVO?gzWMc@-g!tqREoKFWNhd+H~toP*yEXO zx?INciQDEclwA|)d{=wjz{n^|YOlln_|EbAK#$FPI&KM*x+9a#+rsl6{;!S0e>vH; zuooqyict&%oflqu;rD-V!{X(QHcNgarj;fNL9AC7u&c-{?Ct6iH)T|g!f?-Jxm_^2 zGdnG4j4`AYst^jGFGCrn7KJ-tK!$<385dkqWf^Yln5 z6aCqK-zG=!_n9}HlY95YewR~>m9cism5R6ZZ+c{Mt0v~JiViL9)^wY*)NgEkEP4Av z&xvO{E{@pishPPZd1b10lyU`_xcAajUc;43vM8xA-wlZq^FtoVdf5y9Fp zc>R2Rn;bz)K|Gn+zx?Gd&z(D$n8z4wnpL4c@h3nt-3fn~?|Rp}2w;g02_II^^J>b9 z&T5Yt`IF~WIJk<^s>q6Ns-MtBxvGg&BPeYT_=)m_2@;KlGLUyIkWFNeWz2M}UAq=# zYJMUIatD$|Ct4-Noun`?3HpqAKw|O)Wd#H+BxJJYEls&_;X=eME`}QtAPO{~;nnsf z8X55+@HBE7`T;1HfOlgGTvd&jOp&0^=sxo~F@d3h!f_iDjYg|IkmtwsMKzI5VL^D+ z!?J|aRvFma@9;(%8yl#j^2wKTMY$nsu(wM-bSaO<~m>)}`KA)dWYA_^RhuV#J&L|}MCK8kT>Vtl- z+q!Yj5Um*r2h*7xQU=_LVr0@8oVqy)@x95^^gfJFH#Spp%#e%?~pjc=S;W*JNy|8iTIGm z%Jy(8#->>iF)p}>fB|R@0>VI!eXmfZG>dw?-4tb;S{jnMR4f`>GjGn%ji*dK}Xr4DXsPu;R+VXOR=lob_T19U;JSs zrBIU@<*bcq4h`&3$1zPjHa_9Bl!c_Q=jLIh!dRTg5++i3M+)n*IDG?)Sd= zJd!f!=Gr7*En&)zB*OL6dj>!M+a3Q97+jrrF1PUs$cqMBu2eCxKW&ez^}hLU-#cg3 z>5Z|keCX81h9(3M*&(i8CXGBzjrPV!B@vZ{gwTY<(IBqVvy*yy(6BB-?G?qBQr=pC zFR%g=DMyG-2T0)iBF~zK!x*lJJN=PMyT7YjetYY#cP{O<=VdP)W&w);O6Ck}#_ii| zHU4MI_HTUVGhOYisraa~5Y=;q@#wgg%vM}>0VDKMHiKHVh+2G$%!J}B#pawZXM5G5 zVbk=4)u~m|wr1ag_J%DguGyO1fxg&Om_}wsHgAZ1Vgsu(hGYSW0hcTW{I3XYZ=z%OM4X=gEpSYqaLIEDLgWXHqX)Y;FM~&0SQ* z=gm7Dg-HV+N4CDcU8kOU`U$wGDjK)^{&rF@SA)~+i=QyPhDLE>lN#^u-|;K~#f+A% zS>3*TmD}z}_3hcY?lzk%j2l3&%dX|pN{%$~7)eK^W%K#$7Kesfi(v@|gAoyaSSVq% zD-j7tJQ38Xr_X;7kWAS3V^21O$>n8Ht+C>dKP^A*Pwr*Ru?&$?{=T41} z4;8X?4!b2+4EqCvLz7cD>GJv}ruus3^csnho{F@GdpK;|WjMilopnwJekv- zrXTr|j5$%NGS>jiJu>~spP42n{xQB(qsu(1Y1iJ7`O!^fhvuu4GAuMi1%lmhPH|Ce z%@WJlue;m3VRP!AuJ*PxI0v%H?{2w2WhC@;+L~v7qiC_`^To2OnAh@Ir$_4#Y`reM z`*rTO&T}u7n#wG$M5JR}#iNoPBNOO{q_GqXNC7@|RI>SBmMBaN0}cRQ*fi+w?gn0g z&cJZ9U^^x+AhWl>{p~2*vi4y+_Q@xoWcQbm1;I=nYf8{Ey!cs8CNSGm)T||cB;ay- z1zx5vvKYh?yvvcp#e-eQ0#6jCD@9Fwm4if^qw0?|Aw^MFH8Ar)h9nh$4NVWy>Wk+O95&`*AF4DI z;>FgzAIMo$kz~c9?93v`U`+!0Bi?MC&Y{K(OIH3l6RlK}mz$Nu>I)8UVfr z=l#JCe(;|6yaz>c?4bid1KZ64pkXqw8Z?fvr-AMZiqfROx7BnA0E1$A1B)nY*RG`^ z*I$1pkaVRADQYq|vV19%{3Fn-1&R4$j z71H4$!Zz&=HHeJT2~hR6ZQDTV(dkB*RMo7_>o^V5&|L775@x=pq8P{=-m~6_4Na6n zR_iJ4ZBC>wI)FJqWl-dhmvlYg_hn6o8|IWQRcG;uzdw)LZ#7+e*c<2j8ycPX1w@9? zj7%)r+7R4{f2bTjHbjIo$t9eCWh>~d$L=epld-&AuRpQfUDPLr4SOY07fHp&ErxxL zzYA$i_!x%W9d^!D(>+8Sv!IonqlBEsVA(t}G8&zThUV0BIuDa(s2K7J=EN~9L-R_L zNw)+616#HSBVjhm+dEIpMTZhw9^qJBF&jby?+_g;ab11|vjRGGapRh$ z-T3uAC~@;`%BXZVx=)xp=NETw7>N~GI#g3pQ=R$*eNDq^Z*B50{qG+fT6^v}d-qQL z`!60skrsQ$R7yot2acpBQu1Q6yYT5N-@>a`1cR7W*~9*%;3h(-ee0I~8y?>G>EOIN z7f$Wk4RxtE%m{{5N!xRoY$4rm^>&sV?xNLavHRItLbsUj0kPptFbG|%6xdIq$qfun zyFy<5gO~LFTT;LAq5g}P^uRwbHq9|dYsI0v+)tM)w{O}0xr@4&Ea)th%3jXO;vy4m zAQrcFVSk`*vP}=R%1W_}ataQAfM3DmSn5@xQwf}SiE%?3pi)TDk@uj8$ zQIsF9_~=$bO%zEi@>bwuyo^F746Ws>J>>b zvoe=||NGzn_P4)H2kc99s9-qhL|MI+JL3PBab{n0(3dmhj~seFFwiXFI0D>_rBy5Uf_q6mY5Wq z^~o2$@P+Su=Q~y6DAMusi6@=_$7fk}j62T@tb&RL!6_aWKjF-rC^DxbTMSKC0X}GO zR_<&D7sU7k$dpq$KsGz==jY*vA6&V7xl9ql*vq}0ZGUz7%I|*j8x4)^Ko+okNq1U_ z4~h{_1bxm_(#Xxt0bCbf@t!MKdu-db>*v?Wkqh8dkvU{;keK{YQ=VqC+dOUo4$Ea- zFU59k&JOk24BKe`etWRpLs#?rcDg>@7v!`z={uwaEERW<2^4m z-UpOEv9Hgr=Xg~#?TVQ5oqQq_p&es_bKJfLA@H%tpgLu@L;P} zz{Ut3t4hVm;eO4KT%eK1YRe1_c{&z5!u7kJ+x>wnub$K0EhM0LCMVhUjNs{|95%_E ze!n%9PGJUXYIxZ1aSiT{FJH3M)zXtrq79)|8(brQ|K?Gl03KAia5TOjdO%hvq#eR@=;y$r0*A(K#zXFz_(J6Qw`&h1!1+{#1wJJt^UEr+q=3uD^<9Q>a@m;$I zSp`VXx5&i0XU8+ApYw*vsra_%9_d-I#_2YV^BNVm+rD~rZ_v-af+dGIo z!wom^yjDy4utiex!>m{E5QHBf@28)B8gy7e-jqQtG*sj&Re^(ff&%g_x7<<-9P<#h zQ_yD`j$Isnq8vlhFnoxHbV3TSDH;(gH(ZZC`Y5)f5iH;M#y4V)W0qAAHWm1aZoo)n zUje0T#v_TdCxMD9xdTr_8S2X!Q1U{+V}Mi($&=&#lGzT&4uG~|GI=r^?eA^~#rr0A z?dor9mIDDiSFH(EnIus>aNFG#r|d)uPGDZZI3TcrU^t&kasVoqh~p0s;ml!UGu$Y% ze?u-Dzp~@LFAfeQA1MhF%^vY;idPFG9?NlOvBr>_JGUrT0UhosMW_&IaKC}J4zTHi2T^3i+ z>$Sla+-{H8?}ru8C199p9Yka<_2IF(ANK%sLw!A40sVu+t5>f+vAgl19TV8;2C|)@ zqVzDrNbO?2--a3J;gc561IetKfrk2QlWy9)t*No8p|Rly*FQF%!ngtuEscNB?8Fag zDvRZUle<tn_SQ!tAOGgh^JNE?9n{P%ABvp{ zI-=ADRN7;${N3eidb`?QwZ=CfsVPZo|L3OuXSNQ0I`FK2^Sa50A9jR;SYH$%9_?RbNAwmZatb8pb?vA*TPoSIE#fYH^unGmCClpvhL(gH zoMqIC^t|To*R)%=Z~ecQFKP@{3fT!P!<33F*}Om>UKa~V?01+u$nmd_&eU*x?F{aF)~zehyWe*U1e{#`wqx)hL#?L?hEjgt|~Ke{I0_t8HsC}!#v+nAX-~8q` zfB*M?j~GfuU8SoPaiVSv#+ zQ!3fs6>cn?p7HJyQJlXvi(W>nm}y=3iQO(%0yCx&hov!j=b*o_$*#q&RN*Mdxu1qE94A>P))!@pUf@d0sTNV%m|Vg*|{J-o0?jTXUrxq2<%{_#l^NQ<#ANPcwxhI0sT`l20CyeReR?!nK!2J&+l;l~v*v>V zL@4Ggn~}}40qaDI!tKcE;$Vk-EQXU^#fsgQ%-A$fz1QE)QRdUnI>+a6%dvNnRxO1@ za^nLJEhKjiw;Jp$Ry^JSRj_!l`C!3pT4E|zU*8xV7@c%QLvGJlY`r%)dO~j~?AHna zsupWLJC(`5A>hPlHG7a{r`37($>^-D?+z~8Gc=hGx=Yq@8Sq6~$_j#nk3k%CNE2$> zyzb_|`S>OO@$cX5?Kw4s)o` zJ=^ZQ=Y4$M)7X?vC)udP>K6vQ%-%wmm(C-%=~g#$I<_}5m&Rtl0c&Gc%QM?@|8Zl& zZK*iWk1B~RTiTT!4%GQ6B_>D2lA9H^aBN+tcMofy`eA>=qFkjM=eWLR%^Q|NF>km6 z79V~Xok*G%(VyVdmu}D5^?Qmp8@YhKCsN<-YHt#+M^yf3FdVZ&|NnM;Q-Hp~0e?_7 z*4^)Z_q#bOgQh1tlvoU4no!+_c@Vq|?auD*ZcOWfJAdwTp92fK>86`FiV_r{iXn3AmWnj8G@egFF|zUUl>+k3~| zk39ACuD<;v7_c~BAG)A1D(+pZtj=GaRxno^BJ``#`tl@dreYS*uojJ++p*rM?H|Ke ztu^5DKDX()4}S22AOHBrkqwaOe*NoTW6S~l+$#D^1A#7W-@g64^Ugyn7UK*Ui{J?o z#cO6To4DdsQ5b3rgn^%|8yfm0WfwOI$jDVG12HEy@&G5p$df zEyWTI(O4HuWeVeoLQ{RGW)w4tnA=h+CdUdK6Dbzun6<^8&SggjcDa1rsLhc@JYAaS zw53z|%=i?2fCdeR?dep~p=UfnfG_k|D;`EJ(>%I|BE@pp4*g|UC6m*9p*aiJLVB!8Y7h~w zrP9#|ANK%s!0%@{Jvuth!JK&u+8^B+HD{m0(uyU8ZT*)1E8fU92vVk85FILS-L{R^ zJ!Q>`Or~(%AD*@XVXN0Qcb*VaBx5b}-pgL6K4y&~{TjdOHd}xHz%94`;nX#&SFTvT zW%megM0ykv@jxm9Y0GM)*ibLKD4dx*z%J#Kv~^^3^v0WSTE1-MX{W3n9!p5qqdteb zFolb4;GWhH-LkR1{(HZAaKo-~+;{VycDo4W8%^}o#?gdZQf2R^110e&>Wc?Tl28N%T%A9Fx6;?mFS1m<4$T5ZEoArc@p0A76xfQ`3ew7& z4Uv)J{VAj%K@!0i6YB&5BB7d{lQ6H|_rCXmysLw;hnDRXf1(PH5R6xM&;eFB6bTHS z=Uj&t?@uArp{X6!C-5RncG*SR=2S8|aVRNc{7U+KxrE-WnhVf?mepV(D=NcHjg2h% zo_%)H1?QbF^MD|^+Q}y^?Pzb=*SE(P@Mm&)>CI}7O=c09OR!l1Qe0OT8Xn&No-5wh zv!HjVP`-Q9@Pd_VcRu+*Hk~%DL`+Lu@{uW?Q8L7^ESCSokpU;hDW|Cad4mlY`p6qa zn+;G}#%ZBt3$(nmJhFdi&*qTF3988UHlNhhMbwAVzd6g9 z%RaXmn0t}M;quopwb8y6pV#lQ*o&zcJKO-uj!edpM=;R}mV$1vB{{jmQFSaYv)?Tz zxC*&sFmhs-cJ|WcD?x{u{@~jpfQ*lgZuJKB)2Xc2>qDMk>fj9GN3Z_KfBgG>d;5x=bG(Bi1=eeNJXIDt zlr6HcY{e z&84U?TrqAhS^B{}^kT|YIpKAdU3bL{IH`sJrDlp5^u2mf;E8;zQynN zIi+=v$u#j2NJ_WjD?0W|`1WP| z3LgSv$u~BHE_=g8b32<06-!QcY}-D-;N;XeG9qRy@d5VCb9>oQVet-*M5jPWjLFMk zbzXS>1*=vp6fW)b?At%FbI-8T!y=L+r0fdnczmU%)iM4;YJIpkuq%@XiOBn>cg1RP z%%mi3Mze15)$MWyeltEkoGyC&uKt1kOD?&H4R6qAw0!|pzxc&30{ts^R27nTVNQqI zINyWpwWc{<@gZ|KGQN~&st5Ar!w)|U0F7zp(@r}L{1^FFNiV>)cniey2gD(oGAX9I z?n}uJQ(d_na5IiEP&y`n;b{P0fhlJ$WG8}XWCIam@Z`V$`@h@U+iUS|x;3MNIJ6yi zESqsB1&~JqT#BD?N7)vv9KYg#)R+)KVS=|5epdNOjrK+LfxIxAhRF_!1TqdmKJt-| zkTQl@uDtR}k|IGRdzkqg_cta$#CYawd=Emd?0CNm8(fyAzEn9luNP%f2!)w7?g%>E z8S21y(3h|5RT0i41BeSLfYQR0vhj+;hBFVh$L#^8WdypiIm`_p=s`?`HV%hXX-BFQ zgC=kblB?6`ZnxJL2<7s+)7d<>e_J*ghY^)0_QdNu8tTGW0B-DDxa9n|TQ{s5>3hzW z9r2cvTF^teN}05!oFlca_C~j*n6X>D!IoSB2ilIv!glh-O0$Ttg#vwyj*V(SQ=>1P z$u`Yf-rV1}cf)lKPwT{Fd}Ql}Vm6KCDMcSPHaJ}Db~ziGS~Gg7f>{rIouOon5zIpl zRtl9&0Tp1H9J$n!YJFe!z=4tTvL}7C6NEI7m=V>|+>8n{+kh+Q&$(86CMVFW9M7M9 zA#qoXZT-BtX+({vewxe(YC!Y_aIaji(Y1-#vQA-JW@K#pyiUL9^s+g{S;0?(DeK z9c+EuvfST&a4m&LhCTwGE{nQy+27LK`{p+d{p5#uXQUG#fWS%Y!_I+S@fE8Ya-)wL zM$+q@@37Z*HC9es(l#|ZUcuXG*>a+@;&F;h+`?Gr;K2~Z-by(W4SxcqKpy$FXu6S0fcmfV1PO;HzL0cMCYFp0Y%^8(_*}_P| zR^l+R^b$UmE<^+x9A+wi2xC4(EVz_W<7UOlS%E;<+uS7jk4KTSh}bmK_02sS29w~+ z)n~MtxvghDk=}@!17}9yl<1~$&lUAVF~27r6j^#jwsC3_*F8Pa&1R~`dhG{Pl@W!(ppi}a zdCcmp2rgXe*j}pXSr~uoTi-%Ut6F6QP>S@x0}pV#5!Dz9hNSh9i>5jf)&NxsDi``2 zeVAoAYjT7+q`j9c`ja5vzU0rJuU-_7S5zG39jtkxXhYvnOQ}Nz)8|X%)%#pnG0218 zg4s-A#%PA(X0N~$Et_N9Opt=|W9W}N#sRsT-siO2ZoB>Lv(G{I7j{F;=H|AmuKMsl zfANcW4a9_?1DMjPVaNdw1m>QqFeQ?AyJh8h!G-7hoX(9~_U+g=5)O((bJja>Lg9c? zBK~4oLm+QB5Jsg$i9m)&CFl~T#Mpqa?Am2+_4qVb{fzAv0 zrK?u=tUkq2c8ok--g>8AviVVgj>Qv1MIlao04HUZ+`DVn6A%BkckYUb$ziN>uzAa& z)ya6#3LaUGwg<4Mqlw#=S#B`?7K7KpYktCE1Wgqq!6tZ(G=Xe$QE5 zJ>6!FO#W`su+4%ci?y01=nwhQc}!-Do<&jT464;>#m0!o3D8}NMkgEV>p+BP9A?<3 zAAYW*&DYWt;#}ZFtiSiX%Nyo!vXGfnR3g{J!3W zMdA)vQkUTcg%r=97itID(rzm>V?_^4j zQ)T0)qWoydrK~!@u{GDY6rnTp%?s>9l|3vaD ze-*)#A%j39nnNzSeJx9eK`BmnNJJSRwK0iy1a3x5;;Tdsjaf~q`bx#G{ya4I!#=6z z!iPjqIlk~jR57^oiJCjqoN{Oi)dE+GafG?1S}GO!2qdkh_6i27q@#}DHDG^$o*>KM zo}7|l0ZRmG#GHaQD7w1D0hnXLMNJj(lr_8G=Se39?V8o+Z}WIV*Z%U>JD=LQs=GB5 z@J51oSQSm`fX{iy1M4q5cV&B96K66WdF0{y*Kb(>oj_v0HoqBfsIafPko$p$p8WpL zZsp)YXG?uk*oWlE<_wBI_dmJytPM||ylkQ7&@dDH$hs%Pa>PEL_eQ27Xh#+uth7)l zVz9iZYo>GZk>Ux+v4BGucAD;ixi+5)gLq0Y^@ zJ5A@(xR~Z}8+J&Ptz_uHTZ~tr0D;{5KmYST=m=M}m0x%+)tFFN$w-es{x|?MP0-WR z1N4N92ZiabvQ+FLGnU`#p7?RMm=GZatgLI8gSZz|_dBi;#$#g0~buPygJ%U z<2VMO={IUPwKg~J-M4pOczF5Td2WocpaQIP8Kr9-xaczUpP}(o|H#x*0B8hDQ-Ij9 zYbTS?s#VKaCI05lrz<3&wnwHvC6fHdFK{$>G4tLxi25@vD;QJF#V}wyqOqZ&Z#X`g z$TB_3V4pSKNylpGX$>|+a8rI5!47_r&yq;p-huc;ERAaB^Ui9Npj=wDWG?A^@yGY( z0LcJ>#7ZGqPJhH7(H~`aX!-TN1u7^!QwPYtdw^zSGb;c~_i9o#c9m8eIXBwty&!tdhP0}A98 zr=HSESq_SM3KQk>mdWPcCUZ3l{EMw;%i?bP{)ghjE3)04ejE*^r-q~3N9{gO*&Xtg zaRq?87_k<_Tr;ny$L$Olg;F|E)H8)jKCp9pJU^Uu2LsrWgx3)ZrQV)De}}idy)u-; za*EsUGl5lv2zy2g7+v$bTQ&Exh8uS$%RA$_awWqt6cB2iWrSFVM#?G{%K3CD87st7 zX&u2WqX(TOU%+y~xhp?>p}RSP^V7q0zdu6B7xH%&u~=Kk(Pk3? zoPNTvVyGD6HxqalkL@YFFrG^dXOjgy0SfQ8%nLWN7rAw6H0RK$=s+fxtCSi%zJM5F zmJ9HjJB$;4N#fEZ{4}lQ2=-u(2OddF%4M$SRbBXH4pFnnGHm$Al3BioK32_PVA$9} zv0J?UofAqd*{!dda8suEx4(~hMW~A9+gai zn-t{t3QF;!w zkFfAQN|}X43pnBI;S6!vh zXSI+}pVZ!~Ss%;ZNT$f9h_IA|tcnb^HH#EIs ziLs=>-Ue<6MS?R~Gj*}sT*yKMRMV(+EK+`BQ{%V3`AzII_I7vkJre-}#)TJN1OV-F z`I+h2c4RlrZMPQ61yjaDYPYz&?y0dMQaj^JIqJLdzT3Co@}FIua|kmXgFwqV*u0pH zP?j-+vJuL`5zO_mR|x|J#n9}IL?&&;1{HHpsp52?rqCtzn4X$sLQxkYlem-sqkQ7o z@<2+j6vy^H2L_qWW?5sWMn*pIiH~y*S4B3bC++cv@8zeZh|}(I*liYH3hYc7~~j+DubDb*f!lwYlT%ZY zILZP=_V&9H$<6#++PTE(&`YUF4^|BGdeCNNkG+se1RI)Up0=PVoJuX{1JBTB_U;r0_xeZUQJ89Wsvz290MJu0j z_UfHm)_wAmpZ)zG#P3t*oX(N4v0}yUcCZ>t_)FzfA|1uc8TulIkx$WH*^ndXM$r;8 zj~+KpHP}}u7i=uOydLpc2NYht6zOXoRNowx02z_vL-}&SXV<3+8YjXEI$l2tnN+aF z9hp;3?uc7NkIT-9VXGEoW5wkI7IZe->Z9d(9xST=>rm>v=HG2)Ee z&@Jw=72pi*3ffl`SKK9Stmm}8olk~R*|Dud4R<~^aoJidSMq9h9pNFg-wR>shmENo z&Q8?)4Ld#Ta~{IA$g!F!oSby3KM8Xk;qz*;M~Friq;O;@A zNqu-|;Z+LNlD`TARFI2uLKeKAVTt%1?|29E2oMIa8n0MZ19R~9GoSek<;Qp~7}T?>s9358p4}*DRd@6w5cUx&{D$1EfdL@mZ8%5LuhoZTk{pwB(M@>dkKChRtu{D;u z>dFgNzWov_u2e-pm40t>*I8X$jX!l)RG)rAu?}qos(EPJ9UAQgJgFwmI2Fj4GC#5Y ziC=%~>zgvk)=HP549&JCo#BzO=N{WzkJ1e z0W~6fF93&#qapx@trZGaT+!899s83$ychx#a zC@>MYpe-DN0K4S*%t#SerMj)TyP0{>;s9( zfrfB6_S{3sSjpeMC~{(tufBywM?$0mbQ@Hj1$maO4w+UEvzT>|Uo+XfJ>1%{cuoJV zEf!1K=JEu?fdcYlsl+}yYn^-{H?(gLCU_}4hCH%`yd&qTXc-sk3J2>rE6^E)kSgt$kV&)eOOZva|VtFfUT&~|WWX!VMfi@O`w?U`aSH08Hh)dnWvG^Fdf-GfUP_6muu zSY;_byLodk6l!a0|HW+^`zLZD`yTW$eNg5cv>oZ@YZkShzUm}XCOa@=sc|wsIZ5a9 z`+R$c_ahgoW93qU0})yGGE*5Rw2BXIrcmj-2VYZDlk^+*x*pxUUChujH>#QT;As4! zkSu0ydT7V@Z+vR=zL*U(nr_KRsmTuDoRgkR$*)`4@urJdX-fePN$C}SpwQ=mvFwMg z-Endy{`SI#q1$ha@7n2^vk*li$OnRzvs#`Due~pHR>9)>r$29g*IU+@(}#@1KU#W3 z19*wIp<&Gz{`tYb{7VQ`mLv__@F`|Qxth2+dj}(h8pA%OF zbK5!r7}Mjr8`Fk(L^b@WN$bF4`-52G;uxn^bZh9PIC3J_m%Cdd>u=iczhY7IoMw+Z zo*vKU3wce~8pY-#@5>w-<60026jLZ$6~u0V7T&+NFuZ=i6AEx{5(6AAw$E6kEj{^^ zzxWFxqp|ICTAXetirc~nWfkb}T`7?v+W-JS07*naR66(K(>p454w!DOq_aj5PKwr! z_$4%>5D`@uix#w$y)0wl(3tyhTRWOltsMjIIlteW`p{V{JO3!C8TAg2QarjfR1 z^*dm7tWT#`I9&^!ZstIiz+fwEyJ7gpp35%w`9Hes)%ASj;;ni`ph{%Iq{CFo*-yk!0O)G8=S%0fcwVhwwaP~>w(5-v zWIS@r*UVe0Ow%J*A%b(xX%@x$`ueEptcNeE?y8&7uh6gIL)EWHkPggG&V+J5f(-Yk zWc{MbS&cj+%i3A_uyDfYGq0czf)E`8PdHd60XKi_vBwkuO$m>O!BU;f;52Y-%plv4 z-F;qHHp9X&!774gmi;izPyhPWp6;IL)WnUy5~_0Ekvp@p zusKOaE)wK)qY8kc0D=R>@-~*s8b~`Ltl5}gh~W1JTN>wA@_bBubBdA#ri%o>)brW; z`AZx<^9ydjtB^{^1OkTHVw-hzWCXP@mRrndFh3R&J9qB<+rRrnbGW_~oebM>ypErC z!zUZtmSi>q)vTq8-{a&6T3btFD<1zey`v>~^R_WW3Am@4+Q_`2y<>dG_O|+<%f`Me zD>Re4Yg#H9U#V%4U~oJa@44vwg^icv$Duf~clWKov3acxF0aq;3~IJEJL9nc0-vqe zD6*@;YxjnR6B!))00*J-O%+U9nKHQ3;cM&oeL8xEwG+b|DI1V?c``bcD`YTV{iUz` z>&36XxUI!hszAoWeQ>2R|AYnC{qpBG|Ngeme(Yl$ROc-|>IeJ#vql+RCbz@ZV722~ zzHD)_9`#%5*bK<#@(zd9;kAlyqIj-|o#aBv>v8yf4#Kj|WYgR%m02)pf@5$o7qX8& zjC<-do9^tMpt8vpJs^3ptQGzBmeEw&6SCuF#$`{Rx6HSFus9lLb*h&*8HRypvtLSQ zDfuh8j8@!R-nf=+Q?(|t%(h{3Nj$~OfQttZbqLuo(J5ml`VEdjV z0Q7;LH&boJ^w8r2&;jjI`~h>oDCntIGZBR!!axQF22ep&J3U}7bLY-Qb8uG7>L+j> z*eS`vk(!#C0F`(}WG=cf5AQKA4%&-9C`|))K|K(Is`vy`jF)KD)Mf?fAv~cZoO}l! z0;WMZk)Hrbe2!gL7$6Z8lbrP}KPdxu(r3Tw-h1!G>=Jkry8k?(s8~bB$^;XQNga{NB z9Zb#}p?k}bf1Xe;UeV}SML@X2Zu&)y!Yu7ds|@8QZJ#E?e;q!n;e_MY<**02(~VQx?HU6Do^d}|LEH<$Yu&Z z{ljA`yW6esC9KUDl|aD%(7GpodFunEN@-q8JsOR4f1JZ>p@^rggTi912EIokW>T;4 zjry2Rljvoj0r@rLCc!XD=3I5J^zLP!%S?GQ{cI*Hk z?(OYm^bvt*5b6l>*b6BsDKN(29w;x+nRnyXiK34pYvHu`wWM*0VY?A=#BmIhrPy%i2poG8Jg+ z5K#yHK#qEN9ex)Yb?8tr6Kj4O`#{!gHV{EqKrm}AwtyWdMCWy1U2~+ZyKnQbZZAau zi>&wo1{kyk{5}{|Jb}>_x9(kZ^4cYtvHhCG2VU%G=xtco>5J4Ohz9*$Fc8E5(;P+~ zJ_W*~%TX<}dQa$GcIL)=f8q6XAQkYBDo~es?V&9jADHUjVzt;) ziHZ8QjylVPmYmQtHk_V`ge!}49E(ZS5rGVg%Tm|oXmvt2ib@J}RMiAWqkFs-0B8j6 zhPwLE(Mc@dEnd*JVP8zN?hZ$-|3}_=0N7R4`TxG&%gns#GntY}Z-fL$s39N_KtKgo zDbfTNMeMt>ySN}IxUklB6$Q~XsMuBo>7j)tHGPsvos#LV%kI5wD517#Q zW^&)X=bn4+slW3(-}5U1E*nfQZW=iM3`Op>uB}^HCM;UGnCQQH;8o~=$Y&}ZxSRqI z6Br80M5W|KXP!zhy=M{?%cRrcaKtZi&Bk4QBTOTDo2hBCoREkGB8J)CR87z%9)$SW zY!0T%=l6rf?CcpuchOL!x9$H>LYjBpyH*|xILSoHSND#LvPQ{JXUl%&QeA3W1Z^h8 z*gO8)eupj~2zh6Bdij5^zr;55QEltad+&~oh8%VE1$_I-(#(=Jm|pOoy2^DpocDJ= zJO8Xx7BEHAMsIvnuv5gI#PkoGGIGrqyMOTgyfGyVOj@g~v4979v#tW zyp*5S8hCM61e<_VMwP8lOvl)b2YoJTflybj=c%o@Z!tPdfWBtUlQ-9yw4|jN%^@yh zFL|@Zr*D5{=IL{$%&e}i%*02c>0r9r1$C-Sg(8TmOvTV7erOX#qs?O~__{U(w?Dnj z?(?xqWhKXl%!O>+UvtLSZ*XIKTDCn5Zkq*nceEok6^$`*f46gMI6mC>>PyL?KFtt^ z6l2PRlP>uJ(kDDJ;H_r16%9^<*=?}741p@oyqRtF^;W0lo;B&C>j&m^;EhehyADyC z(>f4GGDFwQ7W1zT_r+P~WOFArb$G4zP&)a-P>F5ns9{j)aJp4Xp326ibQ8YI8cWGRw|o7s zjt()a^(SInBX?227oof>!*A~~%}1p8@~u5jB#4wH_&t751cPC$w>#dugSnLXivfnb z_<+Uvht94$dj@A2wC|pDLWj+q6^%&BEmBsL*_BLxWJ<^5J-d2>!G@{;uzmtz%z~9g zvv>y{ZxpFdDjBY^e8H_c2vK!cz9_#{4kspooF~?@iiV#YR*4hC-_zHV%Kk>mLan}$ zXz!ais-NHme%}%)yL)e;4ksmr9maiOeMG=m2NLt|Pk++q-r6n0fvSL;qyv2a``^F$ z=9@=GMp(PT$td~XtFF2V^qFN0>6gXi%cJbAee~^mYn;kLU*Q=T`Y`U9bTXZcB9aRk zCmVVU_8@IG#7M*{2MoH1M`4VMvjU(YI;kW+?zH>=`q$G}tYFDUdQ7jCfvS&x^g|Ck z_CT}0ZpT2BHxQOJF|+DsHxN$6%pZ<6Pd@2*1nORV;nioJeY&ZsB_3yiAs>hI@pVPE z$e1$0q4wK^j0%?{^t4#Q_Mp#Du#vJsvtSw_7#_g84ihQqNH5ZpP%IqVs04bwHH{7J zz~6=7;1131F&SHD%v`@|)3smu^3h8X`=a#(eU2p(H-7VG;@j<(QWV$fz}|q+X!s&t z12jt)V0OgrTuv*-yzW?2tq(rfYp}JroC7gj6uQ_LMg|%4Utpo~U7slM2_+_5df~PY z4ZaMO4+eMlc3bC#n`X^0*gQp-p*U-{HG~afAeExUVK%07ew!znEO=ZFSB*QCjw3JR zuzRCvnn1&q3!PIGir{6`d{I{co>w36ZLAA;tcLbl|4VB&+;Qh!*Zu3Y zFgv9jGmx0xqmyF-RD_={z|t9tZjTMDCxy5GHKn8ZQfisS<&VS<-N6U3$A;~b zJYrs1O<5?z8VZ~zMg~}aV*8q`eDdRMS6z72uDXVRk!$h=TA#OhjeCS!&%L@n*NbW}2( z3JCZkANfc*!pfB^FSy_W^{5=EZZYoz+E@-;v}h5kNPMpx!UgqDM*@yPTSaZ=5r_c+ zKqZg@nvbWrxx4A6n_hY4m5DEMecyfe5su(3A42P#E=2Yw#ZkB5zg%2)*=4`{)}Z_19l`;e|Y9x*>h2E3*Lmd^>jR zC`Z2i_S^Bur=F@n^{t&dcP?MP9Ga{GDKZwKxGsOUoWi^ILI#o1$YuZyfxI&~X?cbP z00M)ieX$4qz3+Vw8wCLI5Lj&K_V)F*wX{XX#&&F9`qV79Df`M^8^BGZ>xk9f*#EqcD}Q=g2FggWLgchK0V-Gu(<*7ddVf1F#Oqh1%PJDM|y~+;f0SX+P;1JZMWTq>@fXMh5tR3 zp-2Zd+yJ04XLstUr#}4f!$97kH*Kx0bbAtKp}`pnu-^}nKb5%T(A=zxI=x%7O$V0QtIhS`Vo`5M5DQ0Y}Vi?wG=Ob>1VQ4I! zHCFg%9T$p3&2F#RW^&rhV(ATLQB;~l0)WG6F{NUWoao)FXQ?PLtV)r$?~b$| zwq&q>SNF!}%xo+pGD+t1`Q5`>MP19Rg~x|`cOsa9MUvhP&$C)dB$7CSa0$v}NG1|a zB*t9U)aRM!6wWa~#B;v;X075I=B8lcG9k0M6AlHSts?6bc_U zy?Nz>>-I9>JTV8vE@~ThhT@4BPA;M2Yu2uHIh-xc&3|}!&GvzW*s9gZ)@v`p)na{I zRxG7OZT=IEoWmo&SdO4F5Q`^By0StRoL$|cP``VqUZ)1#w_M%D$ab^I@52>-f`XW$1j-)-z`ltp$Yb1 z^u0qNV^robS6`JK9qs@1O59N3H5{+!l{K!=Z~7kJJl1~f6mO%gvDtr`q3(a4=-WCP zUDi=CdqJDS=`^G)@uApYXMc44s0)=%i#b)mW8e(S{IjN!>(ZuOTl;E%nJwNzH+!uY?_F63=}wwh zKWJ%IbQo0vUsh=|%0z3Ca>>$9dbw&)C_coF*C4y#&e$l_AC5n@noKwz1iU7Ykx#Ah zmP}5vA{0?t7WX_F7o8C4vx3dyz$Ft;)w-Pv4)VY)d5~+)dPV5LGTekABzy8qY;o`p zkcLSqlQ-5lTz;D!(3lF2X}4AqPZ~;hbVPM)`Amb=dE?YOFfHG2SU@R$8Ha$PBC>Dul~P7u=Qu$(wq*Z(So~M4;*e`#ycog;2~lo9EZ# ziQjBG@2&W1%`hp?2df+Gx3fXVgp|Dt4zdSZuiBke)3w)Ls|s577}i8|h!92?Xx_ZV2>5EFiBUFoMQj-ok9HC__!M_m^@r@ooqkkD z#|%<@Xw_rHG_ZoeqycjfV8`Br6lF@nl_Cx~Q=zySd1e5W|Wt681LGO z`~#P2UgC!warU@9?QOG4k+D~P^?TAvM1xMRIqzuzeZKm$U-+kgz0PFD+=T#z$dg`w z!woBc@$=?}`t;DS$LmSuFm+W(6mz2?DRucMSWDi@%7->@cxKxMb4f#)4`YC4Yr$rB z6!Yd(CZ5e_V+pbZ@a^Rc`$_)Ay<C8Xfz6(jlTc{-wFT{?bb>LEj5CD|jI&yVOsqSkq8{@#UAFuzcBl z_x|;>pZgqnL&}v28dU{&5!s>_H!(iEOPGv^fuqMNB3061WGk8VAxaF4-n>c7T{gV}*T zuhCBVV3I{5AA{yBd`&)&42^vcMb>b@#Q;GJ5X_5(HzI)m&=Vs=cIbXAm5~%C9Qs2D zb2QS&2n8c5%XOJTa!q6`tAakOn2;=l8F^8~0no&%DYrx;0&6#3QOObkd;we-R1TX$ z$TIV8Ic4H-@M+FFcI*K6BtJZb$`Q!HHD_J{9=-L}TOWGpAuJmJ8E%~fNftmKk!mg!-B#Inm!F0FmP%CYrI%hxd4c08CLMrm^N3D@2xo6^?={z4 z1Imvr4onJAIp6%|H!1A=`3r)P@J%;<=^wB9;&I0>`R(slOGBBb&W5-x)xE^Yp%Y!wXGGkTD%V4c;naU81xqUn94sjOwEHngYUC5q}pQAC^+OL zeJ4J^7@=QLaMUaSpwWjQ7j!nlkpNKUn9-{s5K5&Op1(7jB+foP7NxPa+}PO2o*6`g z{grLow%u~eEev_~@7XQmEBk(q0YbPUUkrSJa&Bp?17wL-<|*VtrKVEYH$H-xsHEWM zMyYX-CfQ?ru~SGU_sz+^DZHH_P&rB@2koS5hv*k#*&X(bngJT3s^kI?A2Sp>rKRjr ze3`4ojUF&D2^8@T6(7{>CbvJ3E;yr+2+W_|;Wg<@9WfarwSkII&xUaS*4jWL)}dK! z8gki4lnE%sCye=I_qNSUe$laL&V(1YLKxG88^>_Hy3UI%3 zV2my-IX>V4==OTg$s~KiXB{!+gCAHzUg$rs7xV28mtq0$Y1*G3A3EoUFWuTQa$I58 zwm;s99I)N*E@qPm{-Y8&Y&SjQIr|~Yyyl9~FK;?+-pqDX3*eRCN`|Rz>dIg^@%rl? zuv^1F|0&);F^XZ#<$cpU#jt7f_jYP?%oXj-Beh?iR=a*{_lKLOxP!j_&QNe`I6a&} zJlR?4qB9griBa#;rmMer>iNg%;!|YjjGm8P_UJWVH12o_%NV}dzT#-Q=SQ1*rn@Vq zR(SmWS(^33pso4b+?;*rrC_+fJ2g-+V8kKdPUc{3S#{!er+}={(Kp^W@03&NKJ0#x zF7Ps55Lqo_Arkpva7{x2Llz~3b6AAvDi{=ujzm`xxi7>`F_(|2XyPMeZF72Eo=UgZ zgW-yJ_l_-pdupI$&Q+g&UsuzImsTG+zm;wZF?lQX`TFljKZl#r`#+tKJmGA!-B%UK zq^!OwF@=Hce5VBxMzU zV#N@`A;d#x%?}F6o|yhSd!6p-VgD4KnduYpeOQU6V&;OjhFDkkSuNEweD*>iiy8+t zN&6WQg%IQI`*04e)YkKe;MM!8P{LaBvu^$Q}olIst9&9j3c@cNv3?)xz5WAC^ zclGMk0zgYu2t{h2HS?Tv&->Hwe^*gehe9j5l&lQ2EGC{xGddQ92P5a5y`sLNqO-U6 zJOBBuIg6L3v!aQ~i&XN&zCo8j@Pu%_!W7S3gFXzKh5D1Ln3_l<(FUj!WX~v^y;TNT3a$b zz3nx%Y~QByFb@t_-Xdll@VsZTVowmn70phdIBZk&=MXKd92^b0DvOCMid;E^&1bPx zlrl*Khe;V5agx4p9?Z=wQ%b35YVirDPibz($e_zNu)BAl5R7JV9au2Oiupt`?=a;m zz{pExkICW1g^t-0P8AxfTyDF6_ecST#a`W(OJIBpi3&a;U*WL3Y`I2j=Z-#y-<=qX z)+dTn0^S{c121&-FPIuQe$l+kF2A&piJkw63!SbCakor{4;Lvn5A@5hf`s_BX_kv@S0XBq$t(4TCLMw#%2$ z%97;ox_n6=)Y^wy9}9*Tp+DTf!aZdwSz1I}3NCM#^%=5vVg;}X)MML&JPQdF>5 zZL)j2;&}Vre+lI@H!53V7+NZVWQcDnWvfiiN^j9{^gNNyW0haw_MSQK#J}`EhGdv2 ziC$e1UEdORSPaJKs5hH2xjkB-Qos?)Dk)7ks0gSB>m4v?0BF@AQTGPGMTnSQM+Bl1 z&I%W-nK<0?3TG$`7Y{!8AOQ5laiNmOfGHQe4lP2o5Ga{j68Z9%zl@_)!l6ze0;E7X zN={knE~uq6Bo0^;xj&3o5QjjOEN3#q>tM%(E7)!lBEwUa2uK#?0z^iQowpQ2qSC>? z87UA#OqC7t1MUNApfq4q3gA#^S&6;hGvywFG6xjxDbf zLfQEc0^MYlIOQU|`!A?N4obwd0tU^Zn1a)eWel1+2NT423)(h!-E|iLG&Gj21u6>Y zAGA6g4t?&bE0&yaR=(u7m>m#t2gZ@Bn^i`v@S;_?_#!4yCb}OaoI~{!!imr5R;~yq5*ZauogoNZs5q1ndp>aQkcEkH zxF$`)$q)NF)BquD2O@~guwnqR`$gZFMD8Y~@HXEiCJ1s46B(HdW|7GQMdJ|; z^oE1Ob_?rAq2Wq`n=*2%YEMO@0->cYm&K48%|ziL+!elxcp_sr70qLtdp7pDJ>uyN z34nYym-kog?0mIUNV>f4Y=QlIlh2A>t}N2bXq>Hib$x80tHKw^TEfkZZ>z{H>Y0o)r-Ge(lraVH{D0y2dD!p3NoC+6W`D6iS zT~4nl>qckHnC}b6nrm6-8e;LJ(;TM!z1kgoE6g3LQ z0-mVhK;TJWM+&Lk+crG?S1dvs&DKC&)>sG{#EYtp86Hz3NPQb@#ce(77Phq=x8jU7 z&pwT49}Y{YGx!zwqV4^|u=dm~a)3sc!vJzEQey>C3}MRW8Q~c*g2r_u8Uv@c+0smu z+(Je;dtAUR;+2uUL^$n2_}|}c-b>Tl0ZLmFs0I}RfnK<9(bVRebvwokB9<}v5MD|~ zw54;~@SN%Go4dBz?5_5<);~VBc70!j_E7zM;%jiUa4zhA%x`s{xO6^`_FM0vV3^Sn z2viLrDjSO8A%@1$dG*&4<3&;mRG8`lK1t`bC*xO#QeDEsGmp`SCZeY-?_3r%d16ev28^ z&6&jhy(};IukYiF)i81EW&nM*vc+ezVnZ^37kK(^EHWG$8AvA(($7Ot78jqp*ZAR| z{C*n%H00$i*5*F1$+*xLX8IG!8UctIg9UT5xTaZ+E*3vL!mvh-)5CD%5pxbGLA}dc zVRK-EBa%rECZjsA2Ms8=My{jBY&NE!9IZKP~+>~N3sFUwE-&$XML92}^t z_B)N1ywQ*m)nO7tBnkROU*}gAG$>$-2_(IZ^e!Vc{Cc%mj!=$6f6%91c?I_@tdo_U zf!9mneHl(AP$5_r!vr=3RAc0QS<;Dxg3X1?M+g)ggz$2gP;porPmFxfuP1%(pr?P} z1XZ6`pa$!)n{K+Pudk1GhkaD55d>raK9spY#q0BwivuV7u6!yWE!;L|a3uK?+zO#f zcE4oVg0u}VGE*h$n3NH5PtXlS&5&7kIt8o6`y6L>I@uJCCq$;~-g_VZ_{Yxoco7z1 z;wpHZ&a*#!!JmHrP<6-g?sOPH3QpJvT?GI@&G^ z2nr{Bs9+^?=FR!*1NY@wEl@6GobiogG9lL-sH$vgXmoqYk|-RlTfhG1TWOomSWM zsWUMEG8AQ{=-M_kIu;AfX=_+<#H_8OqtSF>*^!H``1CdRt$Oh5|9b2Eg|o>IrYU$E z8A&E@+Mec~J7eaY>%R66=bm@hop;^#pSO~1`_wrjBZ){N;VC7&e*7`UQdzJ+*fO+v zVD>S1feZw58{8;>yljus0ONnWuQI4#9HNtA7HZhohSdPs$eT-93kDz&Xhtj>72BfE zFuT#U{Fv!vKnaVrw|HkvcW&50K2bAg?JBN)g*jxEnf92>{&_8xjWu-;CAFh}((I*= z?0yzaIztRtyI^pn#3DfhA0-h&REcosMPUiyAR9pKz~X4%1N}fwF${v;3BYUO!~3w$jhrvyhm?!g zQHm#rcieFYj|icnKwT*m>F~M7AAcO%M`Tu|jC?d`EVtCm-X(Z%+))aOj2I?LBp4+C zXr`XkJ^>}7t`HHW39yauv!DG;`3J^t8?vi3Tw_zyVG9>-?|j))(d4P9cercm&H1!( z;etgibv4a(H9NM9-Wz#JHtqzj!r-gDw?F#xmG|3ij=|wL-U!*JfzMYvIKkGL{x@2&LdfOILZ0?L2qS`eqAtd7U#}fy zV$fF~jJ{$q;dbnBxt>cTo){b$^=k{;5AWQ*B^yfo;;uU}E8(lC3PCJcHUvkMMKmYm9Pe1*1HdIKQ5zQHTvhRl=Sv1hg zFTcz-HUj}8(ZqoW>=zuT9eGN8&X7mw2J!ce2_^`O3*ODX4xAqQdn?ooR2bBZ*j3EfFah4@3#B2sTQ-wq*ynC>B=dSwJxkeY(I@xPA zXOfXc^&po4SMy)o?a3ho)&m?1&{z~?m{Z-WkLvCc_Q#P|9lZ7~2 zTySd)qC&x;;lkG(2SLW5e=d>fUW+-53ZK{Nc2)U((jW3;>F&Q_=%Y7Mur|#GeQ_JJ z#lcOvq|IWfONX~7V*^P;gQIz7c68fV-jI$D8=QgeNT%ML2vju=q-zqvjkfdlTaey0m;qX-mYif+yZBDn#gy>!gKiegg z#PHK>NoC+aN=T{bZ&0HLrz5>j0BBmPwz_8b;7~rFnKz?(Lk~{8b^kE?j4fd#HRB7L zd(S<62|ie+H%ueS$_HKqD|ww7WkQ1|&41#I#b|5ly;)5$dnFAui6;_Ol@%{^4n)yP z7ez^-9TN`$wG4)-4PLe`dC2v|r(A~so>R%nii!>0p%`K+d`x=Seq4io_yms|w@`8Xccwwn@6bCx3bJ)*t<#Ic$Bn5lwZPk_Ydk{FFnHAaFZn zJj|*gHDGfgOl-3|Q&vkfm54-!(}}R5h+`uX!+UGmR>*pWH$DDD+l$X`IO6Do*>bHv4ckjrevrlg20qQ-Zw5 zJF47zYVu+IkVaAu_Jq6-epQJwq0#YLqH76EjGUMe+_@UFSQvMgssjoUM^%DSv&q0~ z0{83Hl!^B`bd)1Dr?{3*Li1|^kz}7Ak=*xK9Fh;;d0R0P4ZCOamq1UyX)xmeU zQ0F~ifkQ2Q-K_!GB2=Rsju^}sm%n2aT^m>!gYQlj7sI3j$dDQDguotG9wLI>QnH!3z z-n1psi`qNxyYCO(JO6F&g2U*j!m${%MN1cH3y;GhS0Wl8-QBBI9Z}Uh*WGC9NvkJh{K z)sc}g17;90CStcOT=pT0ySiwzPO%o8yEZ5Lx>+$IRupJzHzR`_Nu@Hzfo{ZRomQJI z9?#eiPyW~W8@D@RZ=q;r*j(pHHOnqXhl9uElD_&pCjjaH*JgKnyrMj4zW&2)`Y`C%F1l8 zFPb%zdxi(&fvMT=@_u^pMgQ~4Lj~7vEY_3?zEXDTmcP|(TbscT4T89}RW9P|iA*k{ zqM4u@$Qy3oz8wO>FhK%wqJITNZ^3ruqj*x%?Km^ixJ6kWthVfmkf%h3QsKFaQh?DA zMl#)`2>^-pbgQ&<;#~7q7Hmsms19W0`}qnd*Uk` zU|vr>^%OqJNRV4Z5h)-Csd4-5Z+{#4-*e762UG~-8>B=1kTMFGAhukW33&Mv@1Y9{ zNdCc~v42f@v1kN3ro>cfU-|%n^c-;c{{DVE6S9}UH5fDw45>hbHzBcOBe85c?)KGf z=-jYw<0h}yrWI}LHmrMTTknw_h?a}er^9M{{ITbUL-<%T)&_iThmFC)0t%gu=eG5& zUAJZa?Ai3bmtS17X8qPmf0YGCuep4>5JBSu^GULar*Cw<(Yh59z)S+Rz}F|eH2HqQ zV;P6gqzNJVCGc@RsimW)z|?R>!&P$nE|q!6G$YLev|%AoWK$`N@HNE9Lr!GXO;wi-ETcE#BK zp$6~`3lU>Xv5iMMEPp0_rJT;&c|o3;m4RXm`AlT{rcy2!Nyk9fa>=k($Q06v=~F6V zW1Aw~7~jgnvf)Dub6}}xG@DFTSJ!|Pha(Y(%Z0jCe_vm~?LY$AWVQJ`j?v-4N{=y| zal4x4H`^<+sie)}1hvMfKV1Mc8`#0dDixN8{(w9&;sO{nL&douGZfP(ppL#sg;|q{ zGR-=LJw+xsB&o5af&Ena5jY0B`dxsB*=( zj}~j3c5gm1;w}s(LLQ&PW7N!+;^^*yV9o3$b@`n=J30%s9%p4+|CSIL&EhaHEHMy zrWN$}u~|YB!|C%bPzy@r9*;MZPGJU`UC~rzET65w&E;q)Jd^{|GI_lf)QQVig+wDR zq@7N8sAzWAG&!6IRv)yXB+Ik+^ucgaLl>P0WJrSHvBRb{-t)+&{m4H{Ii=?_MXlK} z2xqhC@P$}y{>!sl*6jkJ1DM=v{Htma7S>Rl+2}pxSW#Zvn?y(yHJ(F}u*c()&GY^s z=KqZO6f@ht2i>HjNi1xL=!$?^a;W@s0WU(2f#u!Rzs+E_nwcnZb7>gYveDzdi4)y- z%dSCQfHaps@h09s1X1CAWi6*^Uwyb|WcS!N8bj%)9$xq3A2^Ui%OQVkhFeCwcgWGQ z+H(98hSrbF%l_9lE_CQxCrWYkwM^}&tzLV0fGfrxT>zE2w!>%E-}SA{_no@&p8K*J zUi52e;a!ReL}-wgMY5>`917WC*UJ`2IV}@D~&z7(b+JSBF0jNlEd^<0SG%4i*~KxL6|u+tzpLL zD~>qlit3IIm1j{3(+}0t@Z5}MZqRKXnsw5uC$W9V+5)#U3|so0kUvcfN(y342pkFE zE5g8%A&iSa&yDGl6G&eKs)#QrENHsj=B=nUEk z$fXA95CUX7%x0g}1^^A{jj%TP*Z)|x>cR-}4U*N%uGgK)hJN|}IZ1P{!;d(fI@IEv zs*=W)jWd&Mh^WOpXOVl>J!I;yN!^GXe=(b=D;m#jt2?sJy?J2d<$>TUp?Vt}+S4SUxG%PX~ z2Wiy5m0DB_B(-38EAPLVcbHNUG-FxIOMF+o%IX)M?7Z{N!_enDTNQ7nC~q__#iVhm zUN*(CNXS}<#S)weCFO#(3ZMY8d#qXsAyL@wH=6W&ARc51Iw0U9f-eQZpyi&ue`UPF!5>&)%Yo_+Qi0BC&%lT@ZR*MIKh zx!=3>TQz}7m#ey_sS$@aerIv#vl~Bn?N{A)7Z}G~|8qxU)11M<1j2c!GbV=8@hBdT zrJf5y&g5uv=02y@8LCX{aJ|Q2&|F?m8mS!I8k_P+t{&N1U+=bh9mQZV_2`RFdiYF-q2tfj{Nu0gntjc` z-MIYZ)BIlDd<1DANT5&hj0;v@#~ypkuYa@PfrlRZ_<0v5qOmFMvwC;+7%_y5*GG-M zfgTRKo*5Xr>Iy%Y1|mq=9H!5ty!s?E&Jw^CQ0@9u#*>48NWaBlwZ&*=YebMH@rDFW zix84v(iUTVqiM+^Wy}^OC4RD2SPxCcwOb3M;NdM zzCoT*!J|aL+D6%`HE=VABg)x8sF2J9F!4E+0(oXf6B%dBhCp~#8GrrjUjsl>Kr%_S zfGh*qgJm-TQE&_&QO4`8yN;9zAwPWdM?d-zW#^g@Zr{6yYF4%f5K2YojOK1_Z7s82 zR2P-WQ@}C;FTM2A_V#uJ>Vf2b_OqYirx8$((Ult8nM#Bz>*{vw=zjU-PGs~#vBb1$ zufQ)HbO1ym^Eu?8A?V05vKrtKFXjvRjtcMSNc_&9{Q<`_Nbptqh3!cji}B{#SoIW3 zR+geHi^}}w8>wn`e*}x7(RH}M}l?VHdX4(?HjV50?$7=zsy^(F-bf)_OIyxuz74~5q|gGcVm891%=h6juJxJ`2=G?TBU3gNY6WE8%HP3U|Az}f^l zo5cs$Kse*d+U-cw6`~_S*bQes9}5OOF7NJv$Vfg@(^!|!#x<0NlBl>NyKF|HIfhdW z_#FM9k^xYd=&bC1qw0k!vrrXQNy23@NCm5v1EgFe6d)>C%E{!!rJ=MS3<{R7bU|!5 z0piit04y1vXRWTf8n4|D+BIx;SLCzlO7pPIG`--M?yt;`Y+sx8wP~KZv2aYY_{oN; zXi0_=g+Re=H#gS?fX3MhCpDx({BWxlF%(WVg<|BiL@XYS@ij_>*9OAmAC$%AbaBV# zCL~dEk243RNEXN*Gu{))u+{1W;>=`0(NT>8hDQE8jz4Z2(^CfDBW4V~#X|91Jex|S zhl3$spgxn!8|{&7-e7k*r_Pw=tgInd0+i|u?Lp~0@9jx$VinZZ)a>f+8ypx~++L5P zHt}~W{K>>9a!mm3I5ZI3**i3AS_?5&-uogQ2|3LPQD2)V;PEY5{(=>Y5t*TD?n6)H zrC2N;j*K-niE8t%-J<}D6Ox*EDa>n2gNTYuJQR^iB(ZT9gJSZiYsWC3!Ve7j*9B)M zMjyY{OUBBItiG1pay;pkhC)~O;Lu30wz^7*QkS2;BNyaBru=;AbB~Y=)QSKAKmbWZ zK~!zW5BitjPn1n320K!? zj81%QSZf2vec=o73oq^2(6ys;=fLLO@xE|0IF?C?Gz)gFJxx^|M|B)|)ZE4eGb<`R z4CiP9zcKnD1(Ph3U%SPK75fJt+OT^p5>6Rku=#Uj*@*EUD2TMY4msn3kOhjkL&8+C z-jC_v&@dCC#5N~IgsMuv74irGZN%Pu$xAAnXvh=9KAt_3!P1W67IIH%M z+TMG}@m<+)(k;r95S{awV`7CBSuyHYz zPA~&dBy30HAhy}#x0|pa`I_Yo9aNXDCG{a^sTd9>5p|)5NDxo-Kq;S|5tS9mi>h;# zf)s%;)d+e-iJ>oKK{3c1LeNY&5c@cwfliP0#HBgpLSEG0khk97hrYZO0W+yTW??#- z6qtK8+G$~_3+SO((V#B*FA?DaFt3GCb71{kY?{e9wWZ)pVCmGkqqU8qtc z4Z#;D4brzQ4}6Gh!2YpxhcgDSK&(UY+y^}mj6}YIHX<@sB+f0R<_u>KH_74zru?9P z^qozR0;=jI8?3~DHdusk%^DTRh706$@c4u<8rSf!Gz1s#mtzmf1z3>XLz-F~w#n=# z6d7vGiUQ({)=gFLN>WH z=BZ3EF#g_d;HR)czxCCCpa@jWQF>fA}laUJHwHB_(mw8 zP6YWzA?L~sYMU}CbANPueQix>ERsTU1?3(oW{& z?C$c{1!|jWH*DEdSvw^d+q@xXsFFM!#~=g_gOo3@+l`Q;C6N*#CGnMP zg=$G%(+BhsHZJ_A_aF&B6o=}~KC^~8Q3Agm#T3g*FtQ@yzq2l^Jdt^BwB#>3Ts6b zJZu*6g*i=WBx+=;9*@5NQiAgWKtsdHz~;@H5p4!?rIJ-_#Gip075zE$%rik-0Dsj} z;ARXjC@5CJud7zA;w^H;86a3Wx&*jXfuu8g_G~N+a7%)m)uCV@04C&!ufP6!6^JuK zfG1><$~hrfGKu6efDUoERxhgf3~$mu@x&9+RcFIeRVHfk6i4CUWpErqicld2KzNZo zJoP$fMN2_ZFS+Crl;4G3KoC}~(yf%bxaEt;V}e`*wvsFI!^DKO4M2012ysxEM~D*2 zJTY(OPrSD-R2@=MTJ0O(_y&kPULrx|n3O3gPkBV0gOnj!4uS?)hOt^|o2i*>236OvW|6RU(IkSKoMBK6mM#tON9P{hdh^pS#ds+@xh&Bot z=bwK*!v2uK*49=Auc8$Y3eqV@o_GOP4k(OT9>f!h#OTob}Pk#v;# zTM!Z~9A}^j4m6yYOATp^E*s+LMnF)2XlXe354NLicAg79?XY95UzoF8-m1@RbT)u# zG~wVUK!<5&z-Z`;*=BW{?4#*SLv=;8cVofZXz)~5*&U-hwj{$Nse)}-Yw*>?x2^AN zUeXfF8;5#28=LE+nN;4_(l)JqaKkh4o!hK#4+>Z5lz2xZBNnl@tOGYl9~Q9wM6;K? zUXS>N)+NAX?guo%T8PWV@`g14GLfL?WD*LK)lzA5lG+A90oW?wRRRvxVzog0bU77v z0%cDNmd9)r8ET`uFOTRZT3xW9p0t0nzejeW9_78YCcXTQ!IJkAtx2zND`=PS!;=a)9+6NsYlHDjSI+%zjKFzII+O^g-3SG(=w-;x;uY$ z*Vfsc18o9A>Y_ zQRlXrE9@*@9CKT&QfHW-eDuq-G9!sD!+RTHSG^9?#Y z{i$LhE_S}r7%moYbtem^Qb_>$OevK}ZS5HfkHid3ewW)=eQc}4Y;xHEVDT;~Vk49? zL(O0xKa(FzVepVqlkgWc}MZEfOAfhW7Dv8DP85D zbd3ppjIT0MgpTV&5WkTR^zL{u6U#+o;zP28VlC=#7|`Z9LjIb=Xqw`19n&ynL3KR~ zDhbtC{FG`O?vZ3%Pm57itn+$sEoe7c98v{36%fAQ-|7MS*CoD;E@(8F5o4RANxFDCN1h66{LBnAbEe25Z+xvKsS;Jv zBt88kb+7V1o&kCKJ~}8L}dWo|S*2&PRy5pqIssSqFuJ)A~o7*PAl zoH?vG!x||+KYHoxpt!&z{3VS)F?|{9M%YwNh<4h$}cD0y+rDko$ zIt1Y$0*R?uPpO^v#{qp2`pXadgY0sme*tR-913w3ip``TPK|{%5OcQ@)d-Y|v1T`B z{@~+N>$7ne6KX=|moJeHM=X2K7)mt6bc%pH9IuL58PY?!EsARiG(;7l?OU56H7_&Ki zA&?<#H)FxbJen(wju6$PWr}qb0<Mo%I4@p$Y-K~M!)Y&OGqFgpXUA4u z0MIlR3I5_|xAXVeFMRR(8*Zq?vIjH1sdU9OG|oud43q8+4d$sIVG+6~W!za9A8H7ByKlzSh56E)C;s%e+T+_3 zRgI~fq4on8_Pwz67oC4wviLZg$&>Kc&#Rts@BePQ_kTb7@e42b%vI+tK4K=2I5Ujw zVaw82kT0@7durfTDkR!yJ09sAj`)drC&`*#0upCd?(7Qp55>Gy1sNVZqJ9vrM2FWPca57IgqJkhVYDW-zrZ^`gM7Rds zZYfX^FA|wEXf zc=lsOO&nIz<1gz!JXL8T@(g6d96=b zrS9U3&pL70l6O%~W(ZKd21gd3efRz4!3SU2)H$cA zzN@c06N-N3Ggn=C`6p-1o{j0%{(-(f{{D|p^2X-IxpU@#Z%}fzsAAe;EduxmE_wOo zmxDGc24J7h{~rpVUr|~lg_kW`#%QAN(aj#!O#tzzObQNABPtFxsmAXCV)BSI>C6aH zK*w;Yifjj1WLH-gniD87Ohk$&r2~n>Lxdz?w-Db{(;9 zG%Eh%KmLP6AUN=H<A z2<3F%{tLbi(WAEA1`JhX4YF%(bh{j>G-l2HHSQ{k?5nJFh>(QAURh-}i^)XVB_Q*! zOv5w~Wv7xs^INJKcfRmIB9k6Y7Q4pm$Iooa#KNxHnJ%&4EGuw0K;l=`iX|?6PLpW@ z9XM8)Y8h#QuprdLWT%fW%)JV0qedEUh%B*adWou_=+%i(v_Q{nD}wm&1WkAvgN-S+ zrVOSINR7$htZuQ{e3aDUpXSk=U@yFy#}*Ow72 zuwY$H@7cuFQA=UZ1RcXEi6MLbX^R~Wx5AqDPHdbx8;eHK%Bilxhi0y4Xbiq-PhxvT zhkLAY+3IURTE_XIiH}Ld?r;VImGp`J;iy5RcK~xlFlXO`zNHt0t|$Xj)(s@7|CA%k zGn0Mowt?dofu6sU>dkQ8e%OW#9 z)o4zLgcl4J#U>XlK(Jh7D-<#1=)$dip_rx0^ldWel>n<^I8to)qjE@9K)a1-ez>aI zn`Rw<qMbNf#qt(q0h&QYokc!Ox#BPB5)>J0 zfUHbd^U(Ah2dmU?A*+Yv6)IjvKOLK2(Lj{FE%_rH3c+?2szf}>qQEKqxy(wi=F(m) zQMd-kpz63q2*f0o{UkwH074#rjMeN3MCK)kQe#8IzkTg%H+}uLU^RRf5#D1jWxB! zQ|e~y90+-Al?a`O(%1qUSa%G z05iK3k8JRV3&(7xD>UY0OS5R+8MKa?iZhokJz?SD1-luq?AbK>Ql+^|V%t{F(#AIB zvmr~-I6RuO`|J(1NB(-{s$Z}C(WkDu@)MVwcf^tN1ae}zNDY%3jb6<8UH0q#?W>_s z?5DTiTHi2tpg)>JzJa!+WrUZeBUrQS@XPp88Ir1(E5&X|1`p+-*Fd{ddp^Y%VWEwA zCP~_v3DjU3Hapi1hfkccN1R2^S!dr!qJ-`cLZ4vGbROwHdVeo=_gl7iM;FYhRz*^Nma(6y-deURhM3RDMInclLDO4QtS}Z z4SxIEd!BsqsadmTBGexo*>1Ktot|nZF4-+!v}tph5{5LVw${T04v(f+uYQr0g#~gC zF*KWA+1_`{b)Udl%-3&O+16Ak>uEy?`yG~Sl6^d}5+{d#)^ka7l2y5fOfaF0x3B&y z%`F$>P0r=s$9}q$iU9GDRUs=i>@-TcW3j}}UA;ih-?;TZ)8XLM_O_XI)$7--Uvc`1 z^UghQ#fsDF>grikKKr+4e{t8(q1cFlvvg&TRB|f05VITf=g!W}^d+`T)JDtuZCc;E zdf&($z-w!3D_b2`UU?;*hgWv&*m3J^w}J5T=)ft^{zQQOaAp{);eX&)c&g|U-bw+B zfe8tD=9y%GpmK!>4+puXlW8kuAp^yl0@xW{q z%NYe>=BW#E%h$=O*;E2Jr`$SSkv($OejaMgNp6A11%RfqvSRPZ980DtquXgmc^{1s zMJ}k2YzEsTxooBc9j3f^Kg3vSGM)7RK)c;G9k3=H;!{4(9NbbsRk45P`TYPutGb|4 z*eOk>Q{ixI&a^3pN4xf!BgX5BhJhpB(i30x{FZ0d^+-P##vj72B8ZGR zTEMDH z!2}u)6qaQgMzjSR6w8U?q)f~_$nF!%Hz_New+=-MIiWpRlhVYBqJf3W8pB{3VP%$u zCgEa`d&ER=;iusa6q^>p;f}<0XtUYQ zijk!hn!mD;OxA+c zV~Ex`&7sJeLSOZQor&CWGX;wwfdh1MN$P-y>XxtdY`wopuJl9l3RJFXE9zTk*3{E# zQe0M;`TR&K@yhV-o&q+sbI%*Xb-mk8Yn=f>2ZqLSw9o2@;L!*gt>5BrP|#=Sq0CNv zjn7K1b&9Ai$G@mIH{aGDkB3R^>=kKGI5jnXsrM7T)+Fly7dT(yf=-68Go+VpfifST z!?{5wAxs9Sw4M?9mR{EJTyag4(6#iYQTdSPdWKZQgLCF9svcBwzd6j+CCF~H9`F)FJA-h~+BunZm;Q@KK7aF0f=r<|zoZF)=f$)h33hw}_^yi`$8>sQBfx zdJ(}imbd@`_^P6o2z;mNLFMOQohdj4p)yJE{`>F$=YRg^4I4Ia4Wp@cBak{os!pLf z)U)Cp57yV;E$Qs(FM6ZXse~2?P0*Oi{RV?QC+hDhfu5PTVeX*=LTF^jpkB$D*)g5b z5mf``0s(!ooNGh=6$$CP@BZCquKsjgod`j5K>tr(ei8t*+3B&lbG^NTnkle&@gfp= z{E4SHXELc$A(71|FjGkK7^^7c8wlr+Z0cEM2SDzPAgwwSDz?^yV}N){loB{2S;X56 zvfCsg)NJB0P9<$srdk)%6CPob(V<)>t~ve23O^6AestK;T*{hRb(Bh}@Niw)!qQ7PM8jAZQw)qhh^pAnrgs^&P%0hG z6yP(m#az8MugZDYbZu8IA%mBkNTO1urfS!WBej#3I~SRa31hW&OJc*uWZ3L+rZSdw zKmGQCB_|zLU1h~lki~(vQ-$B_wp&UW+~g!#KVsv~kWYKe{uvF-4>rmSQ^VJpAIzE2 z(`))0=6B%l*H*Bn<6(ojx1+f=&H^zN#{i^w8M0Xy9x=b`g`xFN{<+HA+_w0n>S9e- z*HB$ch21jm_8;BI-@pF*O`o{rqUo(uB)bK6!eC0-1}(UpmVf%E&;9iFUyTHVfqFlT z77N=X%deE!sD(q3hR}IuUKFNFc$V=)Z_GV6hu~MQTdjk&WEN{6!u9GZa(E*&A#eq6 z`ohj(0BF^+>io>styX6`WAu}PPhXuvM?n;#>+t%!*Ou}Qm{y`h@5PK8=(29%$ts<4FXzZ$0tH6B#ojIR!$|+nB z8PR6I6!juPe;8h1(MvcofSgq+ko!|;4llCECtSrxaF2uA*E`hICY&bLe)oo)R0>ML zRDESqA}Ww+7ZK_5Bc-;F8I5vkL?cjzm!nO(P}v}+(47e?^JI+T@ClUePdxENvZQjw z>!1AOC&9jXs?d;03BK2FsR~L8CWws@W_fr3;4n(6CMinC1(gQGhNLIvwlNI7eED*u zdO;GI!mw$Jj3?2MmCgX@M0TZOBMw)s+f()G+QGH2zS4|VvC;n0i!ZHyxpP)?4KPm@ zvRhyGv#ZWqa`Zg#mX?-|-~R6Y4I4L3_uIA3wTZv#KEQ;MGQJV?(pL}C&G^XP!&-F< zh=!0wi8)U5-e{A^iVQKuyxE$xI#4_r%4J{NxcMT7hn9BfB6@ZA||;~ghizc*GC_Kj4+^p zp)nQ&P7SE7&}S6~`lBiYyF*wgB5}ws65<#v0!Te@4iDW^HKaImP$DP;t;3nx<|wxm z7gPlY(a4O7!v!%pxS$9k|D3^gS;IZLL$Bj0%SX8yaXe$?KB1l9*2B zET*xrp!|fBPIFy=G$M%%$gKL-Xo%&i7t(Sl&$WNiC55iz( z{}*XvtHm4)kM|s#!v@05W)+Y_wZ|O8G_%oyK&9JkOy|Vyfu0D6l29zVsT5Om(xlzM zk^Uch?*T9AQ5|}I-Tie=w{OmKJ?>Y0pynSmH zSbNQa$p&MB1rn@{EwF?olx9Y0Mw4%vn{(&f{dMpERNdRUx|$hAqZxq*)!g~|3l&dQ zojT{#sdH8d6#*;?oIJKRH|DY#^#0slzt=A(|A?8x_lfMc+e*2@hVBk~DVa&kCX3GY zo`Fy}go_kbZ4fn?6Kcbcdnx98go{A{4IF?nKxt}joSJ6KdG3myHV1NlQIFS)%Cn$S zik_(3m4;^$pZwbWBopNrHK1#eNJcb>GN+?->+5$1gAq1g7|FE=wHw_N$wZt9QWp;G zJ3az~Pik4No*RhC`@XIKO6+`<(N_!VJ{pVX3LMP{KRGs4v=CmR-Fgb7DY+o?a@haw zFWx&koBZG>eu!8P)k9EhEkAt&OqjGoSerdQlQG6<49$d5tAR-alt=xB z^_CkZp4|x9j1Z?4*;GSl3{tTnuC2m8CTLVGImX--&#BjGef)}@9z;FtfNP)?X@eC{p!ME^ew~E98r;1oi zFeU6R=REap7Ddcwv?;pGf+rk_)ocmXVc3< z+{Z?g3+-%1q=gkRv8qwaLCRG$l%lR+VJQjF(I9vZz#+L=E|iOHEypSk+<)}ScVv5C z^T5Hm>o4tKSkfQoHWH)=DMfHPKPx3lUMo4ub^vqD>DXG|bXl_~j;#$hZ5aIgGy5M; z#M$n9WO4E}oqay0Nul63U15y3fw}ZB4}PBJ-t0_#pDQkr$$G8F6O!W_-ysA6GPvki@Z%jv<{LTdUR(e-3E_tkEqwl0wS29** z$ORo7l(x88I{<25U&Y$|+l+GtA343|_?YC?H z2fwh%FEj$BKtk1sC*Azo;|tC0S0_HJ3#|Z{a7}0(a$1?X(NfXTC=}o^&^6=GB`=A| z03+tFPUSB|P1L%lkS%K~j>!!lw7m>5q`=j*So;%1p$Py6g&-cr9#_<2QYoPptSTOH zGJ=`x!E(jy>+KpHJGyV*UPJ>5P00l*N&moB{71C4ccqf^AN$ikg0GmGTlm};{?Ra+ z@Y&#UM>@L(Ii=-sJC7eZmd&wE_UsZs4oc2UT}19IHR7Bde{v&>rJy<%OAvw>f)Kfb ztZkBvAC-@~wDoUnD9i3Me*YFZn7f$o8r%?QYOqY)#XB-fvvVV|74iM=-nIMk-AFIF zhqr@9{q5iT?YDjSPc9$aG#86G%t}*tyRF;|;{ufvJ2{e?Nn+iKYJqk$MRwg~qZ{oC z-15QkRh^xWCpR578h(2gLnSms>d$T>;{Hu_SKn*|2iz@Lv+&gDiJ~Lcwx!z}4mdNh zX}9g@!*{ndH2SI>iLurD17^UFk}h^0;HZ2qzYkA)x!Bmjp}N6OnANu_x>rt+vN=#( zn)vZ|{`cSUesI8yrsJuGU{iK#Y5Bfly*p5e&T@<$F0YcnnNQ#nr=u?H{&`~3IrB_? zLw6{M`*)6?6mRe(l$^r`vVZrQ;N+&EO! zPahnan$K`X0D#NLmVpVA$tgka_P%l`0E?@defk#aWs60px3?E81oA;pd*6NcX#q6y zWs+)1N6jT55)-t2=jP`4^vENRpqhs#Iu4#|QyY3+(DpZo0DjX&a8DzCA;3X&#MD<7 zdhXW+U70iF!zV3@(g`)r zU9WxZYrprs?`dbk2(M8t&m>Q#lT+v$9zS+y?BtZkQy-1TdRoHbgAk6&bWF`nn>MSh zv7Tw}G%YsfAp~0dm8FLsIDXG(Y|~($s@P#-inB5>#ko;e8TM|YDv}vGNlkeD6%@#f z#{`0!EzfTwZv-PKMjQMM^01YSY_qZ4SU+9$9*d{<%_bgF$+m9YT;FKN2m?Q%D?*6ud*S*S0qFlKHLLC1W!yE1n~?QY>_jZ0Ggf}dN`@BnmQ1dI;bgO}r4!7MO(d5W#-q8x&HdTMk<9pb(BrCFem3YuTx`01 zY_7xGRc+W-W`uOKHW#yrd}?`Vcz+^S*tBIkm7!8>`ErDV&HsEZI~~n&j)Bwi;kx>u z%Wf;g#!n8-C)5r|Io+rV7XN{rJAWJLO+ z#Fe02)KhHLg+d|R(43h*eDImWyY{>tJ!TOgxuA`O1!siVD|uffHh27htCX0XTrm5u z9S~`_3+XcmM=ydJj6m}IhKq_P!D4nQnV6oLecfv}cejOykz|VNI=W{i$oOUTkRG$* z*+MKUj$edt;b(PGVfhleizDJjwY$#t&evW+8v1D^i#0!VHoXF_SzcNW`hDzsOiV3t zq7W4YQR-VCB+J1K4f1*oWv4S?L@q5Yqv!8*dM2lq${4ZI2T9jwLOm(e>}~b5HPyR4 z-iDxSAq4|~2xxr`)hxA^6UCA7c?8gkJzF2=`PrYZHwssX<&6i%(_eac?01^2$kF@0 z_n|+ic69oKfqWj~o{1t_ld=hI%Qs`B5t@$e%6%>WA3sJz!DrQBIN3$UYKWnR$6h9{T2UTb% z#yUj31WrIIW5PtztyGlyOJ!t~CAO^d8OUT%EkyNAo|Un@jjxw+o$MVm@h zOI6?nT-GI1^Fo(Q;ktZj4bZ7N5C)KQu3VxYq)m!X3c0=S-niq){-0$l)#V(voYH-D z4J8NO9j&fl7%Tq70}(Pk(11n?Oj*stbEeLMnFK|qX0?j zsglV%f;>t}0&GV-o4b2_C@9BijCY5&V%-IKYtZF-MN2#5l?W@_6hd#V=BSFM2sPv+ zD^;9ixHhP+P?Z#z>nJiA*2YOBU%)`DiXGLoe;1!hbc$x4l6&M!(cF}PuJ7OBxF-L|2%VmJR`a-qRvCY3(5z*7Zo zbl{1bT4Obku`q~tBi^sVy!QPix}j)@5-2AsplM1t3e;CQ)r%H`*0fq%?X#>FxsfgE z81S(KQo(F%`C2Up*p=G7zR{K8Ue{;c*YovA#b_x$h&WCNHM5Sa$JFB;cieHl$~s*> zx}`wr1&I<)m)kG*J@BLgfRrxAV(DN06;@P#d1 z@F4&BlgTdFTP{2TrG#t}R|`U7tbEppQ;<9Xo}Vi~o0*y7M$7_|NVMXT`BE~GVof)G zaQ6@1@WwY{d07Fo$}zj&``tV4yz?Wi^_TJW)r#}nyLbQM)YCn^mrPEe%4aSv;C`@# zaDcosSgQa@t_dqRNm=w0)UOsCsXHV>wZi@(90Fn)tCYu773o%1@RjzFLYld7{L%Tz z@sQi*FrlW3&5dEl;z(DMXKs1+#K=fGg95fK5cGfkv!DLRhySp(t6i*5C>4tBTX(#& zZ&xgq?v6D1g3igKhZd$Lp*+3eFe@x#cpTBdKZQbpSdr6p$d_$(UJf0h5aG_3CMhhA|--_91_!ResiUG-Y* znLBd0tXPf)T=xFXHn-bIEhlaGN;W)b{)Fo5<)AuF;H8c5CY5Sp{;hD22Y!0p^&4A* zv$lo3o^WHi&QY?`jz*ttIcw%@jyji7N))Y1YFE$xMDZ^VJaNQ$qM`i~)@P*2$ux54 zXh%mk^7P-l`HjEx;XnEKfBSGta|4Ewp@TGVU-N1#Gc=}?Rwl!#xUy9gI*>&S6#zv; zO8?0!Cxc3YCLHwrg}YK1v=VjP5pWLS?Sl;q3;IvgpHYJL*xe<&`NKmacV2fHGyoLg z6Qd{bb1gKonKSZ!8UBg_lmRU#2CGjT$sIT{vukTR1Qdht>)(F{`jLc&4ObyR8(Ic} zNqkvfvr{Nf20X*_3=QNfoC{LL>#x5aC1@QPyU)l|hKGkAee_Y%5&;<^hs5>?|0JRpW*mZn*8X+t4~ZbFD~7 z&5>PlQ^WS$fHu(?)L*%-3%aq0DUts0iAS!WP_9&ifN+OQXb#&^*ph~CUx!!Mfs02X zV0(ldbT#xk2)gDZ5O0V;pe;nhWg^+!7qv|~9aZS7ufCdr!N_5Io&iPxc0h^0Hw_L9a`qn2JD>Z~ z-dy$6*_0CQtLj-!8k;_R|LZ<<-t zfx_WL)pn>@8cHO`>U>6h`=uUFE}uDa_*ipS{T;va!CP;BCj%9+AQgZPL}M4_1C(%? zGRVu;4gh8ckU?gB%PqHX)QNGW;khyw&Nxrk=5ul10}X}~qFCrmdWG4_h*|;B8Cy;q z24Qb+FA_KUf>b0wV~UlJM5Ziu3y4o9BqX1+DUtLNr4yd*E}H)mvBG1%1?2T3ay<&(jsEVFIXq{y@G^ za&~SUd+f-DNN_p6RH^jIz9pK&NYj)FW3r{yuv~N&(&5bF*wFDO?D=@mW41N74ktvA z4aUfq%0aIyH8-4?9_|eOC^Q~~l&d6XPaICooUCM*G5E%A*y1w_n1~Jd1K@r1={%vx zfdgZXmMsCZkwCNkqzuzw-bY~)Mn zx#3^{8`q*(z)*4{3A5$vWaGVn@G4t1vYgLGLX=BpIgvNxtt94K-M*72j?~p%T?1q75U3*2*KBadOBK`mfon~TBG z90_jiuV+Au(Q;a<+ z;i;0hol@ivsk9tk6franVmpi7HSsuDvDn+l+K@pbI=7*kiNTNpyeq^%-OR#AZ1Sa4 z)%&W3kS8J!RkaXEiu9W8#?xV@QT?WGEDo zDh3%8k)^6Cm4HnsBPmQ?s6gH;6qF3IYI~BMwx^DlUv=-k$+x~{Bk|7x*XV+DN}arx zkE+*d$(Z!6INfEzIjj&;O-1Yh7LEhgd%Vp)-z0u2E0t6k>nmtWODvb^sQ2JTTrwd6 zn-9E%coc3)Iz{?Zflj{i$bbHcc#k^;QI%GumnagM2c1~JBCjL>I|4E236kqaJF@-? zDpu)se+ZO8gS6*03V|bVWJYFA{k$+KhAq$3-!*3%6aXj1|L;m?Thr6s$%WU zvp4#^ZY=jJm6ib@x11qJCE^~I(Qq@5`a9P%WcX~>FZ@oy)$n)srVY~%7t7%wfg{C< zb4j*~5>;z#Icfy_iAoUz-vFahDsYD2SRxb46&t;>|0|sbnAMcvjDZ{@uvv(vFNuKjef6Tg2n-lR7bC@ zFTCmJn1WhSD0N`H*F~eefZ^=0*Lr|GIU%u*ko@Ft*)#OZk(ymPfVFXFaQ9d|l zNL!?AM1!b>CPOU?s}yJ)*C-4UuC3wPd|v#$ZV?tdbtyVSfB->!wo{> z{`k)}5B7_Jd*T`9b=U9VXXyCRD|Wwf*QJ+o%IV&J{V{Jc>7;C}qCcB}2;s~U3v>ws zfoz=dwH9Pek^HFuDtZ*CZsjwB6gF5$NG62Mj(P;@c2r!dE=#+_fto=R4^v;g$zW%` znsw#p3i;)s>|&$KX`MJ3OQ*`&e1qG^S#@8yel(StotZ)aO=8`&j^@TqE#9yG=!+Zr zHnR#AayXB0EzK@2+cSnO)f9mRbA{Zlpg%MdPqD~xiWTJ`botn^FO;5WG~!nnBgvsQ ztMGQa8(|rH?4}EZT^Ik1@qzcn-;$3l7PGEGHj3?moRKu5^KI>$GktA%e=Nq+9xsYX zus;^QpX14dSVhFpvctl)GqhBwQO>560gGX|Fh5evM^7GiU)uFdHjuw>)Q6lJHxGib?{hj=4ogM6r>%>ozKj48jYU8 z{=P4M_LI@c;V*sh3w4+)QQH!f*wS40uJ_*boo{`kr2_{|dBa|0nFn9e4}7JAq>EVI zWT{1Ns8(D)T=<|7`YylmFN;X#pndS@OGk=^CzIWlD?X8o{(NZkRfBz?&>uei3^uG0 z$r;|IYB2(l%;G6$@ubeC-SpUO9iRX9i7$Mjow5IS-+JoASdK$+a1Qi#T0N=_UlwdgVe(8jo|V zgM8BXA7dQ|o%M>w`EevWY+EYGON95m?|o-epIRK9kVk!U-+lKX)2zL$MdJo+$%={4 zT+6$41$OKZ>x)R((IRBM2A9$b+JfQTwQ0|MPfICL<83N{;8n-xz0Q!bxPc77^aMuy zDMDlTGiUps@hd$@t7#o33)nivEZC<$^(kNr?uA6rEu#6{BZFoq;P%^ZXSA@Pju;xv z(6_(+?Igt88?*!p(TM7h(`{{UGdemroSvFJn)BAVeG!K<0P?-0Gkkn(_Rs#u=L-1( z3Rv}#V7V*;;!>`hNY9`^h!1fr4hj7!cdQsr<<)9%zPeBV2YL90L89hlgngZ-+pNh!3zg}pG#HUdDQR_Q%&(r`5 zks&mRRwg)eHJDIDJ9A93T^onTGw1m$^7YL1Uq&>reZp>0=n zX6MG-)l_GbZ)q;-^Z19S5{4&adVSe^!0m*}aLuJ{-ljpP-=A8VS(-ml?=|z$1((Cs z-rl%4{D|LIXL&oUhE1-*62_YAT*+#6(k#YPj;^GCU?G!0n;CLoY9_s7!0)q`>P;`g z!10Bwt80s4igPk|#2$$s^BUPyj^_G?mQN;=+c5;4&x=DrP$JZ6+2#p0_eQLROsY6j zZt7#N3k`Cm`>eox0SC-QB7g==APh!hYfJOViOE$tcB$s-x9c zy!Cav$YDi}b(*}Nk{b5_06+jqL_t&%@dPHl8=FM#Gd#)m3ro~`1_ z7wVMaKF4lWupfYjQa4V`95$zyezLnf4tLPz4B#dQX{1HI0G^csaH1V0vSx3!oUN3z z)ly3Aa-gnFcIX3%w2aMg6uNUpDPxp#MmcL(C`zlg!RM}Qv7DD_Y+2ggGQzMr=(r^J5wGyfcIX0hE5ws8OQuV0B(JL?oFg6Y) zJB8K~aw{h_A{Kf17ydn6Y5C5NQ#ZY`m*tP#&S8a86Y$xj^2if~awBb(KAq6v=>K^QZ| zW=T$x0kFh`H0He(D63v4il5X+Mu>1^Dq0$LI1ww9@@xltotz{HV-<oQ}0$TQU}Ap)Y{sY7y6z;H7g4lM4&h%!dmW(x)aU= zbOrP$V(Q3eUn@PXbaGO07!dUtygw1}H^ND0ii35L-eI`VJxcry3k_4vX+g{~a-0)w z8o+}44xNv#Gci{O?b%o76ft$72*EK_$7ddOBz=Q68IRQMVr98c0g-ckMJLih0E%w? zlRx>BuYUEbowRh@(f*uMbGo8Y37R{K#6sfAMIe;4E)7+K@-?_zFgn zBM3Ze3yGS4^ZNstR2qUnFsvxPitW5`T}vVn-@oq(1km!1)!8rx2K(M|%guM+^@I2S z<~!@_LPI0RzVvthZ@?EyCg-v3po*c4iix|0vf0($v2GrTJeMG(f~uTc5jLoFReK>T z%d*|fdrVxmN^U5xO8nJOWfe7UtMA|9;viOLK6>Jx(I{p+9yQ>?^h68(^rp!RAJMyR+3!{krO0KQ#KgJh@6I&cTZ5rj{rB0(*@V z#y>f;?T(W;KogN-Syq8ue#z7Kk`uq3&aBL#^28F%XWR|Tdbt1Y;sCOPAoTS z84;2}uiEsekZfR4HQZ`2y^uF*92!k-+pds(uib@fB(d{HSSQ*$8y2DU)VT3kFLG;T9%LT@o{htvKSOO5v7q9=k##~I*-OJLm40O1#0ep4u;}r@>(!eVJwv^X{ih+-0>}@A88=6V_glTpDeGen^Z%WNF2f` zt090@GA1CyT8vF3qEQx=?CI(G@|VAS`|Y=Dook}ulnj%{Y|3hBwa)e;yV6WrM0X%& zMc__fa7D2fonPRoA!?JHa6sreS?z?=F){#g~@GPEMSho|#T24j0QO3s|D7 zcucSyj!~_n$AtKK$J^fWx;MV=iYs>S*uEV#0Nx-|X3yiF{^_4M07ugR0t17#OChQ( z#t(2{ykThpbHU6V9)X_Jl0dwd!+C{(9)T}3%X3S$t`r$>dN{88@bcrSAi(g4)VGZN5QNRqW4(XEF)OTrWIOokp-5y92$9SSzYTw@7H$a!M z*HQ5XMrV$grDVY8-Vh0o%#T&-y5s45qJNvZHVYT^+bI~E6r?+!J zR0a`8boV$Ke3kj5L(7Yc0e3x)M_eZ2FOLg{8ypyx=EktYQ4ivE=x&{cW4OmyZqq z%VenagP%gbk%gPD%n2r*$i`rO)QM~$NfNHoNMW}GUc9KF5y>18xe12>u&!ga_jhmI zwh_C^M-CpDI60HUT}&ZQ66C+aFR~9VSFuGaT2Sa*a7U)PTq%-VOmvz}j~81#^t0%# zdhnARs5;ygSi361PnaJu(2Pq_I}TYC6%G?qz`_od!Kw=dV0J@_;U-_UQZ_#2OGcrD zSP^!S+OzouYHSPy8Pib9qP3w3jd!R1#S^{lz~`=!hH@ z?8iTp!y#tK8}YX&h?2b$X#y1oW(;7NrJiUjF$fr00#*m2bso8w57Y)e4C4iuLJ-=; zaQR$Sx4r7ZTwt|35DdH8pBygy=%+(B-?)`}fvaC|uS@@_J|uUc&{pUtfUmQ{&!>2VFLL#bJ=3X<8?7A%ULVv_FYlmw5Poj88?w-@Cl4nMG*+V#sW$;$$$;r@bK(( zD&+Uf&TZU!*-S3;A5)_ zxs=Pt5`m~zj7~Oqe3vz}4mLCsNtG^;i57A{og8NDZ3@<3)z!0<%bbiyW2Hi}jKwFm zQ0OTs09z&ECf8m$SX?@qSOTc1>hBCTZEooh5bGM8$163gRO%ZW!&|mz7H2SjPP0ur zgAtW}1Cun7ytT#Yy{9xUs%;iH(H3-=*<5L-(-CsmOO-sM7|s~}nC&zG3~6q%sDg zfn9@nt;K*8@W3wCj`!9+U7#D8;7YCvVy6hy!H_uP`W&4vxDH(?GnI-Fjk?vUL3|k{ zXBTu!k?q1B;{qFIMsu^LORXv;?l`nU4g5bmIgvR8%280*8?@C>`_gqLGBrG1R%iL1 z8qyqANdie~T|?$P_Vn~{J^S_&`PVQ2G{B`hGK=E@f+AK z)Y|=wB^~qE2T+3ISXg8UQmcv}JjN{pjCU%m{?=aVfvpA5diHVJKM{|Gyl#%IK%$_5 z6wT(6NjV4ogYW;~?eDlL=tC+;D2Ib}Z@TGC2%z`uxsI><9^KEip(%m@t~PJEVSq!H z96fxHG^!FS7swy(@M+E|FImi~IHDFSpF2WP$tZ+z!u9d|e zxtuj)AJj-?5MfGnU8PDGw>(DKEEFQ9y{YPI3e};5Qz+&FU2XYCW@aa6!p)83BL`az zdwp}H@9kHH=3)q4FkI096&Hw1mu!Fi_~A#N8SNWrW>t)Y>RB41#T*8={if6J#;T&d z97Xfm2CrzvjQSQ)ycMG!(v$XdEH(7Z6K2rW9dvcnwLG8h3RVsYbYK4<(@z4ofGeg9Hk z4&$-Ni|CmRaXDfK!Dm%{cb}NeXOfI22tk`!M&wlu7RxF6R9d6gODIux7Km{FlSK=S z4LM6DHqf}rGQ?&z)T$%sbC=$Jtr(w`q-POG&h$Zb2D$JzzVQuJqVc)UeNHb!EHv0P zu35v75-Sy~VC~tn2ca8i3YqLDKJkg^>1m20pWfbHEJ|}vl@zEAq_GGnSv`qNgpYpo zqn!NU1P}S>2s$!+1UE>i`Gjf1ctDwq^^d(Vw!erY>eEr zs2y=LioJ-uF?LK$%B4OS;=uF-AkuHh_M!~Be^FGt_10V2jbKsx_P4*y`URl$b|9?= zN(9bnu@itdV22gLy_LyMstf2 z4aw{!Ca9YP0l)b0EP3mqlj-LAdcKuQa#E07;2^y&`@(Y8&YDmxVs))pEU?ak=drLl zzm#Zh?u}0!a=BfVVm?{)zGCN24)h~KK>@H(@;jS)=b!mWd^&CGV$-{U+Tv+B5l;p} zj&jvPrpw`ZbP1_UeK_b31htAWC?;RXhXVfPSiCOMJ2QKtn4iYw+{}F1-oGmlj5In7 z)9Fg3Gogm=LUJa#IM#r5YqPWvkG5lidHhVaQnW|Ht@v-CMfG(-RyHJL z-a!B2>@llS1_~`<&scIco6WFYCsGk%K+(XnrHYwUwpa@FgOdT&OQZe_C@vxav>KI7 zjg6U1dUA5=bvJD6Zt)M#i}^oUMt)IHB&RGd{A0K@`|`KmC`QE25a>C+V!SMq%Oik3 zIuVbi@TkC{LV2%)E?J)Kw)UoAeO*M+ldGRse`B$Dp^$HEs2`h6F2=Ly=Sm*ytF0In zD65Lq)7*lPJ)6s2(bpdF+M(g0g&Be>zh_0!tf%C{%o(1T-(440g7|0awp#dk`_)ZD zF!tS_Pd|OKP+6W#w}xU#V>UE!aAw{nW-d@$fQojC@L5K_;00D(=ITn#mHjLm5yaRp z&Lc|D0TOTwD5^`v<&@tlguHd3;dXPZ(v?ZUeLyB4pA`ul2MX|)!(L7qi5(iS_!vbV z4XG+ZUBy=l77~#x8$2#2vlJVO4%1_D1PogbBF07fBl28KKTuh_3wG4S*;7m8WG0L~ zy0D^bONEi13Mi3GR~*G$ITOvK78AKx*2)%;bYe3Dy&@;dw*imcECGUdFk6K0 zMC>0Rn#Wh7*frr)tkc8p7a#4Mj3t^ABCP5_(>Ie$r`VE9W~iRW=XFQ?fyR)puF_iX z+YvA~URBxu_`|Qisx1&X^$`7qqeM>!=}I*a^*EDGR-J3fs6?~Xof9){=$dQHv%A*bw@<&h<>X%+Un#8XIaKVh3Q#s^M~Kiy5XDCBiT~v?&;CZ zjcpqvjacJWgUa^9@u8t|+Uauk+Fe(*Z=g7eVU&>kWGeB^6NeLYh-q`@ZQcq@n~|d(jvpaGD|!m#w!n{k`FCU*+UIZ zYrUFO zM`AOnQsJ`JE&-c@IMvRUEpIrIu2c^$%^z5va|Qe+D@H|5Y6-p~Ko940m2_6dDR#2` zK6W#kB6a2EjC@r+A~)wZsBUd}<*Sc9_!H6mXRD7*5}0Dy1F5>K{AG2)R|SJVk0$LL z_^BH6`C?PmdfPy+1692W_R~E~OHo;r%{E)wSN9*5@$Jc(BeTiDhp78AmV}vRSidUlzsGKyD1$Mp$ibb0d5~9EVy(|dg{!%)^a}Q8{n|EQ532x2BCA# zdH(7o)NQ#y^#N{l6Mc$cg5J>zUu>lSQsjY*XKZe8Hks0iNi@O*s!1(d+Di}C9)HO< zsv{K=!0>CSt$pC0 zyT5zv=tuD8M>O5;%PzUBcf;n5gPZc%{N3M|Eu36B&0Km8t*J^|T8=ZHiBJn@y+%B2nASNs0-G$P64&;$&ZRQ3WC3O@m7`+SrmnVyg;=SScc1}ay0chiwL2E37CU$D z2r9|ATJ$+aV;nhf?C4JpzUEywPEC%~g_~?Uw;!B}9muC%)!Ta0Ti)ncn7{wae;(e@ z27L!=gDz$zL6BZB#c)Y8`!)5=V`HP^^Gg66nn57QhCl_I#o>57cI?=3Er3=4F*t9^ z_kiEi-Xdpj9UgZwmCR*x07v(@Y?G>>7G@31l{Xjk2gFU)`+er+p~`-jr@Dk^NQdm> z+fdGOqD*Vj`}rb=cCignc2>-?kbI7&bSfKRF=<+RBL#ZO`GUr=DVC zsa9ew8o5ylo_;ao0M2Bq6*V-zqVz+BNsAm)mqN8cupj>Lhxy7I5+dsa$6_ywTJeVM zUQC7H6Axi%Eq`v16@K9hU%;yY``l~>6O#r~6UxQ5FNQ||f@*XXVK?nUqK!Fec8+Ng zITLMaY6@v1FyWDyT-WA*G2QD10;21$zrMe}9|-^1pZyt-$G!v&*J5bm06pN(G6!%l z3{ANG_S@+@q_If(FHwOUFp5II14*R+8cKY{2^l9)D`iaLFED@IF0VgR-23!?Z@oJh z4Ah0fp-7$A?+XS39&7_4aB{;%dA#2d1F^PArC%4@E^?25|=H*aZEhop=7(uv`rNB2MW zgCE`Vqq}}USz7CvkwB7KcWcdhMl}Zu7*60H1Y41_SyYWMoQc;P@PF<(q0f^nNJQA^CH zEi*uI%AATlnTdnLyqKemi8T+_Ca=%$3j`rPi9#i@c9F|wu?>&IFjuh2h)($(-gv2E zFIyqMmlYZ;5w_W4@*UZ@=x)W61y+AHt`Ma`0-yolaO5CYa<&pK577kUlh5ZzpTXsJ zr_$L_&*e+U9r><$~?0&0Rw7)Do`EHWrT|Fbo9)qX#B1 zLo8I|`uakS2&rs0%z(EtIM{sT*a^he+qP`p)>Z%TaMFf)tnA-DD}PZLh&=($791L$ z*}Ze)+7d6^eJqg;S7RH?GtFD;0wHfYlkIPA$d^JWr$SKCd?{M$35F1LM)jzwqp$^< z<c#YC@}_G0XJhJ>)ielopPFDnZADx9q#Tt-7tjiOn4}VxeitiI~jul7%`lR<~HJ zv7=PRkRRH~m{ly55%{8}X%sBxwJlSuWJRHwWB(F4nJrZ_$Tr1p9y+v`DTe>^;o;Ej zFx;?@CHmEe2Y2SbGCj=>Io4{a7z97Ztk6>mqZk!%*xX<*SEZV_A+0vCxLWbMOJ0x7 z>qZJ!#l8Y0L+lVg@QMi<(MrVjw+@zhtW%~ z&-8jR%lhA3&a&c} z^iU?TC@f^DzFK}q*QM+hikCuRy@hk4FC8`*7$yG|j@`x9aV z)#%3bzip|Ue=4z%#4|#<{F9j>6j|%C(*?-XM^0o&<6~BlHnDb7|uv_-K zCuX0Ro&Lm*&AV7=OE@EDFw<~GG{$eNPDlB5eH~vJo`M`m)bPpk+Nptn!V$y-L;%?3 zc~Q>K3mL0Q0*DG2ZuijZfiKcoQwJs~6(>%uFy0WT67Qi!Adg^=IgCk!v*|eEkV>n; zl2+$a%b%R73=wK?&?iFS2p~`#Lg$&8844m=?MhZCh!J3d9E z8k|U`)a(ozW;qIf0@sJ&jP`FDu@iG;TWeE;%RA2z ztcH+pI-Wi@G8zhpVbahSK*2nV0V+5skN0RMdCN^VhC~1j6$UDBR7$BQ?*DPpWfU@* zwx(80GZzb$4b901f< zs%~GB%Nv@_10#hjy+xH-Vydu+4s2FdO|QWQFPtey+Sp04pd0P3V77#nvE{PM=@DaH za3um&V1$WC)UX=t&JQe3@5O123x}U-+Xf)to>psHT}M)ySoAH{ia3~=aJWVJP`gX+J7A0NA3*aiianL7P}Nn zSdCd;o|>Gh^+G5Rz%uow!NFuYIXgQ)GCIbm-B(}zwzs`?*RGvc?!L0CqbnTZ?4J{C zGCeVqOW<7?4n6ANj~f&;wwAvDPyP zWwgAYnOUpo%Qr7W;6FbEnEUG*!5eTU2o@2X!;!Awn7DQG!qjnpsJXGO9wCzA`-!y@ zK)(c%WU59om0DPwuM5|s@5^UiszXI$$QS+`)Po$RP(aVCj(NwrDdxPa3>tE7ha2iZ zEUqdYBUw_hfJSnBkQK{bZ;1M5?!KM>>^Mb1T|)hJ4fDl1{i2oxl#6ypFn#69NI zie;m~cCyEbD+docjGO`wVCmByk6ZNtGi5pCK7x@!0TVE++?yor}?tOma)r0)T0r=^AL zNJx(4unyW6;_*W9;TNK=XU>x`L|=lbJKEdF#>W%MkB)lXP`v|S{g%dz2Oprzn3IHqY$9#AlLA8Dt{Qfutb@dze1s!FIIAe zN}*KA=B!-a%H+#(%~i5_OZ}BGg2U!h!K&mz8z@sl;-jHVKIjy?@B@_E+2&>rk0eYJ zsdLd*%vZ`#CLkwv&MGDj)l3_LW?KL|(r%bmEQ2}xKJ42&{ODG@QKqqTvIDLY9cz!% z;XzF8<_}EA6*R#O`*`3Z!Ai{h3*Akp?UuF>pXk9CUjfFd3`H4&YWU00}=7%&-nDE?(K%s)$0;iOx9{@T{DJCO1U|%21ahoF1QZo6G;& z4FmKa8dT&rU>Mt*+I}`Zay+w`GphH^o@@&@UDq^afMW4UL7wC`3$!HzU zOK+}b_S|1J+dDRIZQONbcHg674Ft6*RN+{dMd^y&pi+m!yrZ@0*7}fTlza?+@nw&N zXO2POW{T};)1wv1U6QkP9B_%Sc`9#pw z;EfC{rCO!mbB}#P{O#O)^Ud(RM9^{c%`d!CC~-i5|yjEMtIN)4+ ze4#gFrD2Y@r9b+kKN=k!B?mg1_mqVlOq@8;HN51F9sn=2h*QRAtnyx8xuN6MHVTrL zm*=s#Q`X^vzNCjl&p?&oRfv=wS@neX0Tgdh`3>96CYyu(WS9#ptxQEtxtbTe01W+nRk5ydvw=BxW&1KOxZGvpEnBV;V5%^Ix{@l5A#a zV`Iy5DthGjnBU{FT<8Tk@fv~3D=AwdD@%!92iZ=ao*3bMxsZ`VS1v@8cDx#6rNVSJ zIBcy|hhHo`*quqME`_Ta*c^wG1>1v0w6jvIy6X(j?rmHC{@aJ|{IAp7cJ(8=2A8w8 z5B3if=gcWtnX$ITd81vfR(qr_nVooeXz0;wp&4KX!=ZR8BgzGKM^P34UVkeSFMWwbX*rWdFM;>a&-6!ac;khImr#+3bPlM& z^Pz#hp|z=C;VUA+*&2G0KRv&dJe!SU=@BX80tdcZ7Mnn4FqTtOZ2%MrYkfEnblp1TZV(C>C-{L56Ly;Eyw@-7>ZO}58#Gd^#=W} z4}KsVX$rBKMU1m=lU_S;2gm*{s~)I>F%Mu_V*300wau&A@}U8aUMHeMB(1{juSV|e z?M0+WxwXhTXUt`wF3sYI@Rtb%UWM96{!3U}Nxi7?=AL`*L6?>y^jDo5S2_=q8e?N) zyr*0+sz$0j@|B#4px01rWw0#rs1cp6#=yV;8qml+@fc4V2}ni%O$A+$zSgQiWHO=h zD9>X087_}cT&e#TzxYLD)-+t>2kw!W0}x{JmDQG$E(r9oK&|7f&Hp01XFTX3LBoLn zy8?_N#L!qO8yp-2V)Qit(Q&jGn)mbwy^pdpyXow3K-xe)F#>hKp#>{48UQ0B!*ut_ zljC&s(W6I>9bGws*4`#8G~ypHHt2n6c@ZIVp^#6fGV8;(pb0mNHguaC;0D~(r7 zIt9l7Xt^cR>E!V6;KsqLuDXWN%jly1{R0D?9UbU6A{wHz*qNA}n`LK$O_cB5^&PDG zheE+^+qSYSD5)5ABZ}Zw~uVtS`x1FySS=XOUb85gjo5(N6 zIbRT1S?A7Ib{8@q<^{-{iBn%6aX6BZ$kl<4tu8m}#a<+-e5y?x#*z-|jSUT9CLSmS zG)x6q*&#+?EeTL0_-*G*Egp+l^TE=vnvg7Nz2A{z5N*!3}t#YZDFUm>| zk%TP(>Vo)Mq}8n5#G0R7@VcFaEH2KVK!l5w|6IjJE4tgHhZ+@rjg;tCbAxT`s=ZnH20Ez68_?-_&0$rv^w9WmZ|?e@;LR>lO~db&hRQF@5;I3#JP zM{&bAIh|m@GQbp7DhZ`n5u-4AZBDD$+b#lVDMyj5xuD2hNBva zJUu6nqtJ^EqpwR88`;1?TZeJHWzz8Dg~88!}C-X^>9kOpaYA{se&|2 zsbkl8fm*Ad)1*^9JRjnq0Qy3%GKZ_h5=zZRzEmj`tN8-PcMRmq#S(&M*|6e~do-g9 zJQhXnjAAjL@O;W6+R!CQzNNxzmz$vgy02bjH8l+|g!Liq8!|adGSB=!0IF#G7 ztGh1f+kav)o-WTW7jQq9$(x0|St^v{$^1|Ts}NY^wcPPa(CORYN4|!G3WtcVv5?`k zyIppVoNtvI-nh}!<;I0iIRh_2=vB)b!84?iXo#xaPJ@IzI&q7LKOmHv(UpQv5R60i z&j->fD4+fE>>a(KKTEpR5h5c&xMf&o5i!WUqVvv_`D!6&^Q-e&DO&0xtWVKyg9Z;} zatII$u2RN^VSQJ?Uhb*bcX{hBzv9aF<~BNnN>Ww%Cu3gDB`A@B@Qq{(#^s6*IxOP* zH(&mL9@x83tlm32vAwZ@(P%P$JiS=)IJWyENS~RO z(rVQbBCzya*Sg^l{`4HKgG+N)Hn-@xFP~5+gT>RLJ*k&KOws{6m$S`qy}oA)eTnd| zmRrDKzOJ)(ZaA7KSZUKS6kXcY+@{(ipbq=|{HcFg&k~0Ni(GT4vSY;j|K~zhGt<{yHXkH2=R)x{9wH#hX?#z)=hzz3Xuh1?! z$=O_MrR%1#f~Z9V=kOgIcE&(3oD4cX>#{<9480)~ju1fCU_w?pEmR1tKsgKESm(bk z`3rh{@j1Mp;$E`Iz=}@S{uT8wqiBFhd*O`<`tcmz2Uv-!=VE|e=2{HH(tX->rR5(ub7zr@R0boVSO z07@vj(JuIeg@px--Fn5JEz(K3A{FAwBu%F?HpA;My$Ix>3J^ZKD(PG{$~5`;Lq9)y z?AX;;T?IgD0H+te{hjZS7HKBvOUhgQ&n?ja2%V;(#~U4BOt@je2VuifT-Msw?+?Ia zc-^j0iFGO$#>;LYk0hXMru*vpl-6oB@TCPA<;REY3_NGts%_WoRJA z;&Q(D#tp&&#^_1@^k=SSq@vefX+?G zjp=8zoG%;4IY-2yEsh9~uw4cmGf=jM+dX}@e+G2$Lu9;tVDpmA{uQZ6C{wV`!P^|tL0 zYX}mCaPS3-R`Li+plX4-1EbEHFQ*cg=Ep~#SR{N&>k=ckr8D3g0A;oZ^I3>EXwCP ziCM@HKr_W^aM-hF4<uY(p>TiLc{e-2&*KSgI`^=ml4Q)o&1Fp!BGo{PG$;Uzh6 zkIa;6Bly+;Att6d(Dg>aRyRZ!cd=f9vzko?h9+n@8sdy4)WC60sI{H}2oVTC0}v4( zX)gnSUgMA%L>CFQPBfdcJv}|Z4aH#sN#K0J`K)NrGw1}MA8_*I$*HNS6UUF@FY3%7 z#c56~jtL|FRsur{nr*{|S8)St=yMWT_6a6LiN5KHyAZ-Z3`f`V-J=cBXF!W;G+VS6*oE;ICJ<y(jbDH(w=D)j&N{8q`>@zu|Ie0rbcezQ{QVt3fIZ8-Y9^ ziXrNPUS|MvK#adZ_U2p+3B~q%iv8F?@+FU-JLty=t zd2b;^#-=k{OeimxGC3=mDW|hmB8~M7jNgh_IbXobC-ax%$<=(hn$BZ(1662vCe%aW zcB8>Kb_g&6R(8Xf|0^}Zx!W~ zD!Ur^d`FHfa!(sJMmSUf=`Th(P>vQe(Wp-2KSnG> zvGw`GPePei{pMzy<4xV0B(iFkRKR9Co`_cLE_<-pqdhLyj)o4bYH&JdE*3`s zt!pj-SpmI~FBUUaDOWfz1(QfwItVY00Gioews!S&@e*)IHB`q*9BJK3 zOIIGHb}N9AHy19b0kio{Z+-gnpRJ4!V;w-&Y>c1Fjxz0}tza_L;b?^3H4vmAmTrt{ z3F|t{4Y&Q7d}i<5T!%l9WX>Q&Se495A1e}_o=#dhBVhaY$)z_2gUt>v>nvh<_6LC^ zxS_sM>T^30K%-WTJ5S!NYq9PW_(qo18soPv&Wn81Of_~MvF%7!%vD8EDB@)`YoRkx z@KeN!77fFuqV}3zL7a6o(`xE7{c3VS=S)11_BPORyrdX zB$T(l@|CZ^An~5st}8&Guk?4g>ipM5_|N`GU%bdBkb@Rs{KG%|16k=|R=Ytb>-oZ$ zvn-MBfOf=$3({xCgYF=%1ajaL8dZd|%Q`J|D8@z<$ zr#AOB3Z)A2hPojv=1SlZHw*c)h{-B0K~+o*t}My09!wFNywz;KZA-deq*4PmC&ny-(8wTNl?r`_UdQ@+e0HVe8$v@ne7b_wRep zTl;%Em6+CO2${FO3AS-AE-ZZVQ~wwD>0+U=wYB8y^@Ur*o}~uUl_+B1kiC39 z8e2DRyY|Z62c9}8$^^0ttFXUxgkA<@-KR&EqA`iB0uW$AaogJ3##O_Fv4KxH9#iR5 zBoGSw0{EEDmkMI)HJ9b|n;unk2sa9AFpT)suT{Pm_(Gc~lGfbbmjDckNLRY+1mcfLDxW&`?KH3TGa;2O0oLMs!1+tY*ld>!a-n{ zC+tkW|4rrhylFFyprG35J^ME4NrBW1$9?RIX$Ui|-t(UKNS>=BSZAmsvop#H#r73- zAOdXpZMWU_{K&i^0$2sjQ!HSh3JtQwzy*AGZOvjY0p^*N6xk&LXp(?)bfJ`mja`^( zgoEs#AuGK7_S-oR^x4mTmQ2u-B{G4?m~lWR&W0cHHI`UcZCwqpI_5I|Q3WtCBd1mk zieL=0=3?9#VY<$l<#lv)bkCkW)CARO#Ea}t^NHMa1g?OK5}_PMMn=dS-8~|cGlgKd zV_h|BsV=gcS~CF!LgZfMj`Hri@BWLw_zPOv+t-I;9^DGGi9kT~OcDYy0T*bNt#ks! z50Yq(k(}-OV{eqn6b<=Wx*{1o8|#joE(n zM<6qZ`J%L}6+s==%;TOwFse2GwIg#rQnCftr{9(ELd zwH7c}fE=lmvt`ql?z+ZnFQ&@HY~I#dABfLS3>|!s18s9zZ1``NoDhXEU7|RLB=2lrw-U=hB0LQ#^#1UP|SdeavnRIZ8;;0m1(n>g$@x? zjkcuH>1xG~$1=D%Bqb~D64n`%Va1}+lA(pC=$2LV zb$Uo*`j<@;hyBJ^ZtLytU^9W0;qZhjS3o+Ry)im&GLI_qeK_=sl z)cYGFa#VcndZH&rEFNc{q_HtFJDZ-1V+sO>2W-1GqT~nfA>2*H>gyCic3W#x{$zf3 zX6EXvy87Gvv9T0n*KiM&>RwhZ!mx`8egTJwnkr|-g9Mr?yB~n zg~3KVD#vnWod@#}PdpK~+0xVks3LJ$YdPbH-8)m*;`A<*Tpq){&D~z- z@Vados~TFeIP(F)-_Y+hop|_hguMuzjY_5%2xQ%E{+RhK!8)IaGEvdOU_rGSiL4xm zU@HtfOL)mp!x{SM1%1*L#yzAQ(>1G+y2enW?6s^5410#W{F9+ix3gQI0xYD>3Y2V{ zI5I2TDMC#Z2Q~^54%N!8=JuOYse2Yra%#rr40M;A@7{JPB77~VWxxx^Wf-&BB&;Vc zA|G0sJCeftlUU#u%p8W;aJS(^+o@&^$pD)0jwA!*bmbm5Jw?Fe&e}VHV z%$SHbLU0wfX=L%nXpQJ^>)j}^j}PN671MPsm+j7pRGPEI?EE20R)5?`ki}F5a-*|C z4*MaiGMCG>aGsio>=g^LC7&wZi^FgNu@qZPB5!zZOPMk({BV_M8S{n3^|{~A!xL2{ z+u`Binw`gWA}7kA8bpI*LA3`iopYur>FBay)cK06Kg(2z002M$Nkl|;m`xYzW0Elk2ELSp&mT**sc~-EUeHv} zpICZtWkE0=7UJuj@8J5m=^bGTyD zqJTDWIrsDe6AeLF!0`GVt{_JuE$oCD1%EJ9RqhIP1F+FdV@U5{)sP=3f51&&utr|^hu`8}<%{KOys@yDB5yAVopbWV`+|Igle0NPnpiU0QA z?|uCxuce1ns!}8%0;|$Q*IqzTT+7NT>Mpw$mgd@a{jZ_|Hc(uZRY3tk5+N)_BoNZ` zdhhSucYFW;&NuIUxp^sskc9Sz@V&WH&di*dIdkUBnKOmbJ$K(t>DUk}6c}CUf@XWV zJ33*)inAls)v+FCp(5uI4$g|nwJ~z?uh0S88OKmsthlx zTf%Ou#LMo(8!o=+5<8b*3Yc=1wc?(8?%TTkxt7M}$F}dPjZ`L$k-zR5UcI1n>WT&J zTXs0YTuYb9TTxx}{>v}F;-ep1x^&_8?YlX?M{P(GKC=)=U&=qZFGa^r_X|JR+L5=h zv4O7&@9ph<{ISRD>gxvj2eM}KM27c4N?2JV0qMnvo;ExL7(T5(h|!dr%SsL?8>v}G`WZsD@=hF({Q_5jDHNp|^suu;zA%Njo6hN&w zD3G!Ym8ZnNZ(@}IsseT8i)8crluyuf+{g7DN$7kDdBH^^Bcld zp@c&`k$vNK?b?OZkEIi^ti=epfkVpj>5uxUnxJ<&`~z3yd2$b-8g?_ZG%AUfw`5GmvGRqn z)r=`9J1NE2!Q*jw#XAhvd~s~Yrc6BQ^>VSn+u1gpi;kKm#^NStGSt-6vXuJBsl1Fa z^!gAnqaDRvFXNh)`Nqs}Je!YAmSUycl*yV%7v0tKDr;&X6lBmUA2kK(b#*oE z9bFiySg~UMpPuf@h|J@8$PL^%G#^pnJKyqp>AdG-#8d*#Nf3sj0sYYCUU^VO3Srwb zEjrPKCxpI3&p}`l4gJPWqjJqg?ZH?o2aU+ z*s*=r(7+)6wM*x3>e>$PeE7cmCBlU%(g06>=Ey!4!ZqiSa(G0ktJ&ekyD3+C6G zTo-|art-$F?(w#5NqfN3-7$Xgg?_)6=RggcHpd@rE%5Nn`Kz)`O*|!-qQi=&5(eSB zVl|I$O12qt^Hv(Ca)$A32|IUF$I?@dtgX4OyL-H)IPOi?3_r5Hh{!uVHNH5sbL+Do z`eIRP|kWS}DMiQOFC7;o_V48NTxWesmL8V}U zI0lm&BPMJ~JNYTSML4QGLYm|$ZRm``iJ(ZMRtzVlW<@v-q>%}S2OL68RJb06hd{C@ z%pb!qG+cy}8BMUv2%zTd=lD-rDr8#LIU)4g$R}K%C^^U}ukC0e18wqXqe4$eOVtyN z*y1h}Gu9ke9t0HFka?ti*=mb@Pa}KEeq&)=l%)h&vLBOjMCF<%(9!sM$?~r z+B!2?(QAb1`OhrVsw`VgfQahmKi4( z7UZ-6REsqv$rR;6k`dGEn9b2>y>zr}^Pu?>%@6fwpYPRIUk$~8PzYymbR3%^9F8|lqeY7rsVJr};nYWohFJw3eDJ}$?z)Tb?|%0?jArZ$ryQp42VIy!u581G4S>D>{`OoP9Lh@psj8~bC8!OL5F#rF4uN`cuMQ85 z+PQNlXgTbrF_sWOpyhhEZb)Fpw{8RSGh1cjII`zE;%+R@1~>O1#~^5 zk=D&BhyjC`Ms2E96!qlzL>-n8%WfRCda%l91ShLjtwJt?`~}ml#Lj|t)P6!==WI*DLbzeb75gDAtw;i3!Q+_puy!BDqV|Kgo6X^o1c_mq}P~IW}%`D zC1brWT=Mwpj$1YH=iJ*ay@Wo(UWMrKm<>;F+3~fTZm3(dGFh-V8||XffJPyYxns*P zn@M)<_~|eH=d@E!T<;f>U01k{He^7@8Wx|MlZ_pSt$;(=J{cjb=coH8)`y>h7E{b&U^4ET)LP z*xxxqn|g<$zItn@x}j}s>hjA!dD^L`5}4-^Ws|wBz3Z~eKj5(0dk03jz}7R0HJC}1 zg`R1RO~zx{T-rDpojIK}TzJuiv?$A~34y?XXma4dlHgsC#fPIz=?L-D5y5b1U|{gl zOW(G5@e+d6L{sX|Y#5nkXedd(8K(w~){oMOYVi`LVH*BSx?}Q}Le-#JH_y8!lHJsw z*fN^kWiY3$4r?J@Ybh)YIG0z|EUT@cT~rr+DjL6fX~lnE6aL$l(Z@Cq?d&cLjXP6m zQ`nnY(hz^$s=C*&T?=1IGMc1@>x*fMKGby}`-Ms1zA4GF-^2=(zFN^VCL>NSLV4&r zU=llv)a=XaGWSWwLX0a1qG;@_?BxmYmsg`nbF&htYLHB|1zJi1y|H)*S5f5|RS0>@ zqg3AVWUmpwLISwrau{aQkVM0WAlT(BK|SfLwA5K==}LuLJUB9fG$hgBA07r3b=D(= zG_1Q2&ans5XYQZj0ztw;6v5F2oMaFv~F%di+C zfiT8nahuuMJv>?Etu@+8s4qir__|CsgWZW_K%B;+KsmTnUEw8nPbujdOSvE#Rgpk; za-e<37H{3k;DS{RiMUGx;JGmgH4W%HHA%KM8-bM|5<{;049~krt(vxqb|hMj>4iP zO+JUnr^3Mrd*Km_qrRddbKZF;iz=nu#2g%H+d7#yo%_a?vtGZ55NH_F7i$8KcbV?` z%9au1aMcOT>EUQ1Ibrt)jNWuUHXgB5)C5zjJ%|lsao&yM{KvupCav#L)$>3H^& z6bC2_Delu=YnTy6{1#4Z2BTUiF6=*7&qyV+~#I}F2 z7_?6hKPE8dTe$mYF`=YJ!SWG@_!OOc){2=RK<$wfXniEMSIk+SrpGR$6s5U`2fNz1 z*^^0C7mBN@YN{elZiJ@=?t5Eenbhw(cQH3g=&SARq#@diQbbGx+B<#?thvOAtbx11Xzrn#EbAev`Ojd3N{F!H-`M&qPk3tTeK`E=z^Ly3A z#8@G>Yq8`=q2!@lJ*VoFrY5ef@7eJx0?1|t{aLJGvQt8xN@Y33ohM*H2;-bL4^>9? zJcN*40jCZdH*N&@AOHAAWv7^A)K+?p!-1I^@>5}k5EY2((6!fI%Y9*>9VMjc$T`Ly z8cuuJ8Dbh66O&+%HXdFbz&06yrm}-59Ml!z2+vFre%RO}FZHA!xe|_31*w`JUR4i0 z7iF<(pq$8!0o63hrCqdz2ay;{3}coLLUfq=a7Et`c8C)c6#Ox&@X1epa`EEDH{5Uo zDr|bdSDtfaBVj7VQ)yCaOCFRHa6;Z}fw1orpKh*jdB%II zQ==U7Wpnw#p;0(b?uW9A7#r%XI_-k|yrv)g>RqeXEEn^~vU(VYQkif3;75kaW!CCC z9?ao1-HbUelZ7ic9;G=0=x{<{7RgtNQF{{g& z%Ubes+df;gIfuuS=nXin4hPg?s;9rZB;4(^ zL#F{T5GJ9?NQtUwh!Tm*M;)n&Rih5#1ItGU%Q_kf*#1T)4!1^nm4%cu;9t9c%T~g?L z42nlM<~};CC|2PS-AB&5irSNgS#zv!Yk%vus^---i&stT{J+-CkF&dOIO$?{sKVv2 z@qjjlfqEAQJ}f{N=uI zg$u^h?w}4N)}ZZa^-=Y`+62&`oUW*>s7j|c_4f9ie(K595l`1h8ZP}H{300Vgwt7! zzx(_P4+Y)yI$3x*aC~gCSu@Pq**nheLla$=4Ol9p{W6wv3p4?=RBpzpZe{{Rqf?a; zQMhdF;-)81v~AN&GW{<_GH{#g0s&13%QA@)baZlZXn1UGLygl?n&O2OO)8^jVOPZ( zE<9M#&@&Wk?-@95akHv?S(;<&rF1l;lvETyD~;N|GB;SiVGfu@c-R9I3o8Mq&!oUW zj#$r8I^HEiL0&vV+tOyYSh}`UWUsK+G|qRpPyj_h}q*}Qh%*hYNpbl6kL6sCk#tkdJ1icR^rmaAPlgXAdz zG{zaB8KhSNXvG6TN8q<$m`Ds-7-@JEszEOfCW%)O5FENCqBFE#0Ppup33xf6w<$H z+y0)Vs{ks{G{_YWXDJ@FIP9w`s@K%kl^3yJzuLmF(=-~asDt)-r1a@ZstV?F2><#M zu}aVMp@`sFgQe;wMn9aKNwK}hq^D$`%%oZ;C-SCZh1K?!<|WPh*b{)lj^e zhEb@6IQ(e)qUYY!)bt{;r!b>{s3r1+R`2lAt8QWiA-nR^E<7}iz7rN!Gi|(Y$B~R& zG{3E_t+BBYCAH4ZPS$!f!dQ%mBEi174zH32%>@aNSA~TVOj82}d^u%cD4Ny1ONT=a zaWS6ES5ARV9R209nB>b~!wb?+w@w!|Hadn`=C59R^G82=d2L-4CK@(A{0MQmJeR@M z3L_~&5svwYpUi9$;;~p+_sM7v`Tcy)XPEGPGYNy>p4i|<;J-ID;YZn`aW^Vo6mg1 z>HLJtLRyW?mY03rec4C<<-ZzGO+MfEgkS4D2Hq)&9ZFC$3(Wn2LqMVR)NFBALw=(C<#=N<1+? zFgA4h$)~9CNgcrC8E2k-=P!Qp&Uby_yi-nDzAEs{)-86YlWmwLbCyAeV4it|Gzy-X z!Flt|H)E)m@r?92li~?YF*XguiM$C9Zl=$*ABsLr2TlK&9$i}evHwsBs3r}AvtemO zd!2u(8U*nl36%6%1w!K`vG74M|9I(Mh0Ea9m?IJ#`&PV|5*1xKLIWGvve#?6C z5cUgpE>OpS>N}Zy+Tz0f8%{L29ESC9F4jEs&_kHmhMQtuGk;0NG}o77h%i41lu@s- z8OnAuy~aFMhCx&;3CO7DCHrgKv4+0JF)-Ks zqk)0)DVEC?xJt{+O`GHi5Lq8*iey*G-W8khsT?Y4Goe}{mQpAHrg~7k0$Ko@ur_b}GP~C!Pf9u4^Gns7K9H}z~=OZIR@tHI_h=C|}B_Oygsx%(qm#^6|-zLUA&dkH)Gi19l|HGV33I{JH!7^z8ZP zuJ-tY6XTuie4r3ot%#I&t721$%IZo@`do@9lEXv8=`0dtXH8Y5&E{}B9mRs^{0J4) z#sO8uMzG!KnwrAukPmJK(YykPM~R=*Pn0Mz?aH+>+Rm}OLN%!1;GGwixp#(DHHB*M z%u&1=y(;g~{n8w1(q6-w0EPtR%KvKW>VLIx2?h(sk~eQ`iHeYsRDfV!nMD>^xMkSs_Zn z+3!~j06~4U&7?NqrM5Fj-EWQ~7AU05Y(D#%>wfz54J6tj4=a1jzMg!GIA=~`+}R{&4zXc+_8!;*Ct%dD?A7%T0L9ItvZb7fq} z1I0P3X#!HuwIiXldpWW(H89bOnhC^#pL<0g(H~TuN;A=T28VZ$zVVH3AOhCu7<675 zXEb(bZdS>};-t-*qn@OkmF7S{RZ7ZL30hlQQFg|T2U^w4eHBP7z!^VaLxrdkb-KYS z$(_ebFTIr4dz9Tb661~_#y|zTFG|HcjWuZ|F4-PoVt|Lda6nm+vzh>2^e7KT^WreYaY8W1lSXkUy z==phg^*O9uplcQ}5HJv4)?#o8?~nP{3of{@x~husy4qU4$>c=H&%Cn~+`hq~6eP@T zGO|sO1;S*ECNs4)4c$E*Pd)YY1$E~S^!MKMwf{sGF*Z6Zix_lDQpr_EPJ$ce&j&>; z^e`|GpFNALHmxfnq16i)-T%y{sin)9mPI2swbPqNCe!(%$7-(T^((J8kJV7Kxu>uH zGynK0wEUzwvH-~eCuipyfBwH4&8gtyXK>pEqmP?r=nAG$;Xs7+1zGB)?Caw3{Jzdool|hn5U9C!&6Hk zy3sV;6Ar%hqLY4i+ue?pjZ}|=Qis(Nh*X=|I$2HdTb;SWsxwdi&b{lcKJVv0a#=qcz$U8C4t&+Z5B#!S%miMrT8%ERPCff+CtBe(*pHM@2QrA&jioV5^b9^ z6SybooNo>TFEb3tAk~I1)0T0J$}kS&6(9caho5`yIT#)et+>oYDnz<0G|+kG0&5WI zm19LCR{5u=i2#&;ygLs}CK1$I`^xTLOCv@R;hXrWfAMe!Poal2%0qSqUwQDWRhzXE z``}o4CK<=EsBgm=avaNYplb_BLDX#qlma;Sox{K!295>>_RLv>k$YpsY|?J^7)ADm zo1V_%<;I)57=n^e&Z`CMaZm%N!-U26s9>6X^g=R_Vr

    `FLJ!#M-7 ztZ^!y2!;LCjm=ZuN+4)5YL3}7DTkoo7`gpOI*w7vN2eHigU(<#SX)y)Iy!}d@NtXl z{<5h*okco48@XE7Nj+Ev%%%8yE;wEDYgz#Zt)46!M&s!4sL#WeCX`NRp58rJG+RYf zCgPT9zz8MezBrm9rd&;h2#!^hf~|(m=;#=47*>RXi9}|5+bA0H@YXQa^sJf~e1>vraj)jXBaVEvv z#A734BB4gAB~FyKC`)_TR0SB(6T$TI?rp;>*R0io&{{HPti@cxkUpU{QsK46ckFOiWzrm91S`>#wPX6W zXmC5NElsZBfmTDIvZ;A7Mqu=LO}8>Q-EIr=bV`p;B{pw+&g=F-e4-Q4WIWN*(!yN` z-p@oYJ~}mpD4ApoU8GZXE=M>V@H8-3kT$73jspj6G^$^Gd1`|%WDZPnzNf;$MkEpe z)o1{rM?e(S*aJk*eDpk2QVl(s9D5vnwC9J`8f~;{Ni_GCcNg+(%JFf8!ONnd9+wL6>m->zMk zwk*Zmqy}!f0*?*!{=U1F=iAPxu5*~=4a4aQn~*{0{MyS!+RWB2;BqC}%oUw!2LgI0%t=z;xahsnQaM6P4UlGJVGd5_pV8o(; zRc{q8U#T7S*MzrwLTCFpza%Mj9?yu?IiVl8y>UA`&yo8L$4#}X<~OXn;X8l$_=l>} ziGtN4#xzCI4mD(%mdK;!XiaV;p&P9Z|DcY=MK0T^5#OV+Y^BYd(kNdZQzJAUfrEL&GgE0$iCUuGCPp~J8#}yT_`(+i*bJ)m z1V`LM5p*J8k>p~&0Q-ZO7R9kg(sk=pp`^sAkuO^u?RJ97O9Dc4!Qb;%Qsv?eoCh9w z01Js2+|bK{q!0@<;Yc*63ME82esZmqs-o|VK8{L56uHPdYhpfcO%9Ym!9nncP#$um zYNaPep$R`V(L;{5N7V=F_tmd{mCYgin2ve9=tFNid7;J}>@8fl5W31D1rTsZGj(V$ z-gD^ndGTebzF50dPS&!(rk5H$Dnc1tde@Gx^+4kyeEP6ve{b@0ZJ&=4Tgi_4EU|L6zT zeD1S%Joc2H49>)1Ht=LXBp&aJ$I(_Ocub%Dr>m~|r>m^kvcU4t^a*I8sVe-yx3Btt z|Mj1L8YmO87fN+a4X2!N(z-XCvF;7)7B5+-Jw#JP`rJP-^xgly`MT@Ayl~-hBW-Og zYfxWqeomF9%%(IC;}-lLgJCE>I>wOYrC<*C;3)_;VX(?zm`bJ$HKCxDYd|o)CQey7 zE-Yp_yOqb;U1m!nm0#P?^vz%1H#w2~{Kqa|R28I+r!8Od=vV&b+qeIG!@xi`iCJnN z_tdIf&NXMOTYt+Bkv-#n^{d-2zT};pyg~r7iK(Cb?3Y(udBw@A)^an(IE2cx)!@K_ zRT`Gb>$m1}hFm&Tuy7T|;0*@V%2v!}zIOd}*rLAtqaVHC&2R4LZ2##UKmF3beAzIl z<8_aR$Ll`zsZXJyuf`!}$Zoym*3W6<;t_wOU`zT{&6Nsm>itn?Z> z4sm|XFa;WiaI7l%Dl12)iU)5O$@beR2g-h+@Pn7~+KH8QM`LMdGN*JnR$gv1Fn?jU zFb|DB6Kc^4A+Q_>quF4BRUES$wo3U)fJag78BL!3omf5}X6alUiyak{x^ewBo8^>? z7Zg-hB+hVFa9KEn<7{#jW1y8@#`et2$>%F@E`AOJa~OER7+|_FPgOSM;cJoodp-kG zr^!;v_Kqy4JZ+K_A#~AFz851`kt2PqzVf`XQQnQ`93Dd$z=reB<`6HNliX}grA*ee z6DCR-FyvNQo`<4KiA2sA6uktLjbTTX09w@zeFF#xtPWY?Q*j!}*VCe;;_;544+62(xK_PMVij{o>1KgXr=;XygQx5zd2u1Wd zcXh%6*P5j*q|q4S1Erk~S4Gs;RPmB+ZA}dppRW1fsk}6{PyeB1fMli^_Bxd$QO4Nb z4s+FrRAf9A4PX4gY1|tuS7F>MEu%k|JN-o2v8#f@;SkSjYPXK^$1QCzJh)qJg!am% z{g4H(SlrS&#^hn>mruxj6CdpmDzEC#)*Xdh>cdeIg)-HV88JUqEFs8J@iS+LV!AT1 zRo%!!UWe1MYv(RhuHZ9x0G%i*S}jU+{`TQ(axN7em-=dbH_@XnSRy zy?t_w*-1iDzvcX;XPki)*!I_FhyVHG_cS#v4cEkZCyoP#tQDJ)MoS@;DQ0-b#AQ$V zmty4Bn6uXP_IZXTGsmwGUDs7Bmn>S?#7(Z)R5Y8`Zs5*LZ2q#7N5m|(LVam;q^_ox zo9{G}op5hY@A&v+bv5IP3uQ4lCaJjA5SkzlC)@0FH*a6SduagVLmHI~KPJzhO5l)E zfCJuJQ^M;g~G(5#hwn@w;*Dt+oI_skN{n0E2n{$ z(x7WvEX)2EBKq)P@7=u}JY-i>GGDT6nScUUM&n5}^L9*(Y>bU1^Tj(mwte1v3gjNq z03+ezc?)me{H^9YOG!3U! zMdUI=>B3vB<~3nI@1N5z(Afev#Q_DyFggb^1#F_bxlJNc9&z+FbDy_sZqwdFFJGrs zf}`|ReF3pza&gNNcg;1|pq2dWv(I7*gKtMi2b&XgZ;^$~ssnSINzEi}Zf=Gk5UZfg zN>=`pQ32CH>)!qDcR%vTBPvSGYXWu7i8Lx1fhrB=s*w`%`provodji2flv&RDL*MG z{dp^(5+D2v5b6o#!6NW}Q>v-KcfYYmDG)4OcG+b|95^`FkUfpYBM$!<0Hpr(MPp;* zKmOxC9!7C2<(Lj9qxv2OgrkuKW`P-Z)>&tvhQ{QYH?JOR?7^U@z6eilGkol0AHL+` zx3=+gbx%)sSI&e}47H zKmEC(rn+lj@RF-ObHUp#j)W_{;b1UQAq$`!Rqn;8zwxZoPe1J>Zd}S12Xd%sEh7$w zhVXWu6aY6>D)bNZt>5tQSHJR&wq2VVnvU=6N|cIdIb$&i*2SEFfR>!x3rwc~UjO^M z9(n)!J{0gdsrpMTpU zPe0Y#{gscs=M5(xA2eB3H#hy~XFs#Ezk6$Y>)^o1Ks?^r*=4Q>zvc6v``6{mPCMW7?4ia z*3d(*gBmLOBCF=Lg2Rx|M}=Al_(>GN^>BUyL1izGDi1F&;?OJhT1h#BN-&0ldtvv7 zgKOd_ot+UEJu&^nO;AMAXhtivK>urMYM{@mzozHA))xv6$?zNqhm@%t34nlKeaQkS zHdz#hhgf=c-MV$WzDs@3C1RCfM+U`ET$WxI5Drwy>SRYn>2=eA%&Jv+i8_2emkQB~D^IK!{p#@0WE!G3Tr~=Nu8as4{#m9GR7$Rb zO$-m4J<|->G#aPg6y2sil zC)apf4)ms>EUM$AXhh6n9;8e!VY=SZb~;*>h~H{4V;F$fn5POJ=fb7nLDgX<`LX-E z7hikqiaq)zRl;>vGI}^EHN5MsqS|}}o$4)?793zPKlS!=Pkf>90m9H>JA_kt-*(<1 z0U?*78r;pKjp)e^4UMdsUt=@ok}}ft0a;!nWlua z$?tZQ^3fqNmQ$Q6r4lA%GH1#pOo4c^^w9l}Hr622jQCwPm&=YuchKh;9zyyFp^zKR zI55vnSec$gT+XJ^=M!u6s@sqYBRHE*S$1U}7H8+qot&bR3@(aIKDRK?HB%}160ZDU zMR`CMr|~+fNgxQb+mQt6s}!gs8BNi%>j00qhr>jp-KISkGA#u=P!W1%RFhD-GPoQf z=GQtJ1hNtCO~iiEv4#7|jZ3S1epVAGziRK>7aX^H)1&?N!jLI@N89EPEjb?g z%1W~+Sn;9e6?b&*NII=MOX;@$HnDeMHf4D$&+fvKi#IWKe$8@C`pg8;$~PJ@zQNWW z^Z#0fW$JK|hH;99R!4!>U21r96rs2 z?dNaA;o>e(-see8#M)EwtYQYe;00IiRK{bW0$K}al^wC8=|s@U*w*Ux{z4{FR{ z%bN`B*HKSK+YT){w(puMG^VrA_$%1*nU!|uO^a&&eP?@*!{_H_6PTha5ki;D6NLh= ze_moXzoVtrE!`{7AY~jDVJSarD2_W!+xrAv%zV{DjAuqQXIDI=#?FL6&boU<8~QxJ zD2|FsT{WW|=*HquizXYQXQ&(wa)hd~n(S;&&=O@jL(jF%)U>ezoi#joc{C7cqyY{M z*XbeiNI@V(O?e35o8SCqw8AmCL5T`1v82QaNh{;9iKPjIAH4KKiB&)-2!ONFgR3J_ z#4NCf@>A7kzoqY6&w~I|5cuMb@kl#JtzJwN4N;?aUm%ClKsAc^Dma3dBQc8ht<0f^ zFs+bH@aPjyBhs{NmYJ6y9vT(9Npif$A)^Ud=W(l6o^;A7lasMu|K_*jV*?(iH(p>a zBW8spVGSb51*g%8{x_^UlcIfI@9^lTRtGt(#Ks;6ynU(EnP;y1@D(3PC*>u>Og78y z1Pa5cImje63;8qK9Im>?rUeTZ+8wsm?jDT2V|b`dlP((DwwmxsPZ6L02a?|)JQ!)QE z5T!oQtWKWbWE20*T8lHqJ;W6_=5f~3slOE$JxENy&9C3v!o8ZY@;Lsv1X@za4-CHz zvpK<=x_|SRG*O7CtJ_P88`2AgG(`6+?r1-sgtB@)zw>=Pkk{IA1-%>4E%7qDTs?-l zdXHx`gm)S{WGXi@gL2Xrgtu!p*5Y&5<08KW!u^(6u}H)mlZoHGlNH?S69Qy8Zf7lIJ*~_49L{ zR7!R+YnjE{Si=CU=IQqI2<5+ zx~!9T;?o7h@K;bGv4@vx8OtR@lnLW0xbU=Szvhvdic7)GFYo>wDq#E%DPi-4f`2W4 z5#A%!MP>M%A4Nn^%|62WK0lX*L>ked0NgRxa*7>y%k83)+*xwqhW~*96X^Qwfm0n+ zo}@(Hn?x!lW6e_nJv=7`o;dgWW#is0JuB!+w9x8QL?Jmq08jyXzSxvITo52VSjRX+ z$qaA9sZX-sV8n{bo=0AWl1E;S6u2zkv?Q<{kBjP-G9pz=7RQPdc{iMVZBdgys#i#} z>YDTD5xqpopNWOjWHklOth*%6xI4`=7C@{R3S3@y$ao9$0j=-zJ*bz;7w9QH&Qu2t zfe6J;O05|ISu|)|cPrr;UU)s~A;OTB!h}Tf?a!qIjJeC8=tKNPY+k~Ys6sJO(>+Pm zy`b=cVQwNS91y5C_$dX*zbAJFDQHui9h9k48pb1Jwq%{%I)khs(#yxLZ`8*p9bgW@ zRSXQ9-PY6{l4MHrnofFYYMg1AyTL%IC&Bq!J1Vs2epwJNSheanxB^i6b-{PE_1H9K zaUdg`l&XKz&^;fZlin79MDkc`G>3KI;sr;0GkGTK?1Ei6qU7D zG+6xQO$b~K*YN5hm?G1>KoX?K%=Bnb7Ie2M=HmcL+xQFOy6faXno^{*(TG&yuQ0I% ztUmIsr_7N|C4(N|;gP}s*7X@Yw%`_%gs+f(fHdKY$qOhOx8@eO?C-D#Byx{1uUPmj z=Tb0ORh2i8!7Ry=Q4g9LSd0V54+Q+R>zmx_&+^}|Evz(fW8AQ?&nu~jtkBlvAD^QO zs(DWnmS%BWfo!h`j}gQKqU9*`G-Peac1zzstKvgr}l zQmF!>c$EAS6sCMYssw6&yM#W22pKi2WY!>_1G&u6!t>-LDWwW2aYZ#DZQ#&VS0XK3 zfBkrSy7~bz)uzF{spW33$Fwu(m4T>2@Tk)5Z8ct_YyE~5ejWsC@#sihnE}5Lt}d&2 zFPiAiZ?#r)U{vkvqCbBE)5<@UIYC>?uGQLHMJPu$V?r$g?^ac!#Cm=?WR}Wh4-<1N z7GzM<#IDIcdFEZ;VN0K)x8n$=DZckf%wOKqWU}q=;uj7nglH^Yv8QGjQJ}KMzRn&s zVc<^`sEQj8f;m1Cov^>JWOKR{71_E@LT6Ngi^5gIm^_=am%|jR6j;B{hiK}OD=YK1 z@dDsd8uFU9U>zPAw#X`o^?i7E?I1%DZZ<#O==C_DV?688{f6lc%TWkP>D(}@OQu=n z7fVu10&hhywR@W+vYi}K)B3$am;NohGdp~1MXnx#v`~>?AKmZfQT!ZL$Mt8TXOe+w zn2lmO>!{1$dBtE$hrZ?pTR&kUo5;F^{*EJ6aNG|JDlyF1r^9FDFML_wm;v8`@}7g` z;>A(VguuBV92uEaea0U*Wr!W%BSmWzI8iMWiqxc!!9D##=O6n<=*oK##q^*=O)tbq zRsLd|5TA;`YGr0YoO4{$u^)%h1dQr^y5}JfnsZcE;?=%%QpWle3`B>ILC0K+MSl*R zg`V*_R8q=MD2Tv2^u&N3bshx9#3D)0z|79TkRv{rc=bDL(+IZ2iG9DeVt1}n&(M&V zsj0UV7@*uO3Km#Cs38oIL@1|_t}$K8_I7pA$cbtnUa$7gkk%;c#_Z{7kcls5W)aWU zR;SC&wUzD8T8CBxUSBhfMu##8S+v~8qeOyJlf=Gd&%>IQ?JMCESp=)tv{AhPOT9c` z;{lAyA{~84ARG;b4BV5`&1i9&l6PJuh z`@q0)5G|!fG${2{KvP|=V7a^7s61Qmmu^i@Lv{7VpUCO^7w+!v&z;Y&D>?25;j4(? zgYu^A=dGis1a*eR7B-H-ITI<$Lq~!Hk@PSwa}5}Tj45iY3g4GiCO+-&m+*-UTK2Ob zQkh>}T>jL%k*A ze?4noP78t~Eh{SIeTS2j$P$k!5z$n){XUQAd?7*7XmL!D2!vqe-2!m znw!0^EOih3!B?$RRqlYmWj5%1ZX-8q+RiH~l^b$D4#``$J*Zo=F-+LDoECmUzQ-)! zuxHkoG$>F62XW(n60th1cqo#f^eRu(df!l!BD}|qQ-6mHVW@$p|P5u!AvjTR)p2oy68`4enlEMi`3c!oXF&GV=X>D}S| z?t;>o7MMjlOPNJU#7q#U1W52#k+c+uzT1g;4?}{ulanNGhoeBf+k>Uz_oP5a0tgJ` zwC|Ys4$sSOpfW&CI;C`SoC5dlAhMq^8gcn*oj&ky>GoBk()+!1jnP~BC;2|HcRcph zcQWE|%7C%$r6o`!3t3TaVFf6t_r-{4zCx6=pe)B}4jh?s=8qzXinr9>k6?eXfmaD+ zR@-gq!aS-7k&$uyj;B1cgW>2XI|u!j;1DHbN&n(}_CNlyV_4V5cgWzfX`sr|$w0=2 zB!S@F9*5qjT%lVgO>XjtX+4ZB&(~0%<7V;s!g&&CC3F0_#`Qs32K0w|V13wCpjp7^ zo{eMbG|9#@q5jaRfstl#B(#_Prv&Vzvb79d{+kdy9AJuQYf2$%Bhu>I02?&0>Wq4I z^;ZYNd<^<_uWid@SW_@C?9`2G%y=@v87X3+u0~8_aWlM(9n|samaP#yQjrPT;Rp?3 zpcc?69?ci#Oo#GRa;}xNPF;3`qLZ@3h!UkpJqeg+#b|t6lZLM+q^nu@na7k-l?`yq zcCfhrfdv5D9)ai$*i20qP$s&&Huou^-||5&iT1#BI) zc^6-LlAqKycXxUH6*&{{Jt}pfjGF&4$w@)Ul#U?Iw6B1{g(?-CA4}r5Ux*E1yn-$2 z;p_ritojCo!@nn9egiuS_q%Tv{?|~WeL~WX z%GfXKix9re6ln(r{l8N;T<%H+FSjWp8Dp;hV4veu&wm*M`P z@)O)U+83QeljlUQH-lIx5CNIIPbDh#^m(S>;>(bNE8U_{-3KR(SX4T-d#?kFHNcpE z_yb|sd+@fn{aU*m*J}ckoVQ~f@7G7%xLY&v6-gv#9>>LgSdIY0cHzF7_AAk^5K6?! zC?r-Dtw?zbEbMBPIV(3NJ#wq${bdr?Ze8Vs2I{{eDt^H`x!c1e+;1e1^-zPWi*ASgL=FsmT6FX17_*N-@nLgerC> z4QH+SJ>3+KRqv#d@zg{s;a3rhVsC0&Jm%ug%1AjTNJMHZ(<@BlwDPE7WH_{#Y^ULX zF6&>pk*f)@}y+m)G-~y=A|dCz~8tcLOICS zZTc^eGMg0%lV1&btLGO~DcKY=O;|Fs60QqSwicI7*D=?^%T_c;CHpPqV_t;jjjIV7 zj)b`(K8ldr`Sh5$s!yD2D7GJj)4^3wq%h6S&aK|xqF*wpDC|8ZuLZXtwS*C?YgWhu z;tfdsr22F)1xggGleSK6RoW*IL4PowPS3HThW97Bbv!A!8RA}6@IM9k-L1iLtLJY7 z(o31}YGqHLcnSlN8GMC|4?O9(hR!L9ki)ZQJjg^{;Ne!GI9dmqjqgj=-B~7<@mjr~ zU0S!!`v{mhg-RS+fxNZP&zDet*8L zjb^+~fo1B*J5c;F1NqG@lc!>8NvQ(C^{4(c=&rF*SV%%js?R9~v&_*~S06*3+T_RO zZb0_)YN5IW=3Us&J~y!R7S?nsW9xw&fSsK1IRVSI*@qOq8KLHjc#SYEeR948&i5kl zaT-amS%e}iaw&sAYlw-z*E}Ahe*Sh*8@d;2?tb(0Cd~JJ&qsv=i0r@?B>7J%SJ`$C zT;R3l#jf z+0eN9g1xVwi*Zb-5jHmV_a6S&-i7Wr=UIJ!bhYn`I))z559SFg2@FJ7a#<=qHi0@i1Io*GY6 zwtmp>aiR%sMD?oMY!U!*EQE{^k_!LS2Aw5Ic_KCd$GNft3K}w`g@^~)PtU1INkJzU zL0sPXiy{HP{y2BYU=<219ur1teLpRQ=ar=)LD+Lnq(M8qY7sL6AM_lY29MxG>08UW zqJzQ`m|_|9D`3z{%XmoGvjO(7kaW3}w>2a&9K#tVc`U1N9edl!+B&IYlg$#>m~f~= zrmVDo-CG8R_xA{U1@wbJ`y(+6gG~)Nk(suRsOWegAPt&FBzD?|B=C_~RoZE9CN@GM zlrHq^tex97y<3L3e(UBnY$srurn7$)9bBE-l~-2&sYOGKOto?cSr80((RK7Va1u>X z{TEOsOV1Jfzu@Y3Cljk%+L^mXC%hLJtlSzWQaN&oNoLdDVEz*!QVIWWI zx8ATL@0hk$xe5fT!FAAo7$_t0D<6(Vtq2fhqt=L(i<@1YuNLk)@Dpa8!w$)f0zHa( z<{oppz3=L=+4kab`3=m0hnD6d2}-sxm+4{kulP}do^E+Ge~ZoJPF~}>aoyuH-)+hB z?~v-@vG7}Ivi{Cu$s&q#L5CSvtR*)y7Oaad=bL-?EZNSnLpc(+1X)cPM>9}76jJfA zKjno$=8TGNXoMBx0r{@@cv(47%tatfefdiO{fHCh*wEN`FTYhl_~xMVAQ~!}IpYfV z^66e&G2%D`|LSSE4=ZSSjGwF%YZl)&4m0pU4(b%?@XLvcJO(Vj7jDaJ4i$_6=@I0moK-TlENuQPdxN~eE?t_U{(T7G$4mtZeO9`YdO z8^;;Q#G`{|&r<`otZs@}ZoGa7xgZqV0KTX;nnnM8Z|wWo#rOLi)R)1ORioZ{>Ifeu z-OiFAmMS|B5Lr7zMA7=MsUs*{1eVn>S!MmH=mxIwQ`czeQJOlMzO9KAvrdiH-7v3<(dZ|f+q1oW%=h*5k>S3xoPG^ z)`e79G`SYMd3vgEriTbRJlUVCW4Kr_ChLLrRm4dC8I(1i?-DwFe0MvD0isA!L1PuF zk+7&tSnK-vF5G2~@(P6h>?nop+*J)Xr+5%BZ5(871GWMUf7VigJu5}Ay#5A1RscYxX!o=co z;e;y`HF?SP_)>`GV2L24ftb4OTR77g%osss62&WcQAsj3peOYfgjl(D<7B4T`{f(E z#a%|stW6B0MG$Wn*Zz)!u`QMRbD-p|y4egjVN>VsT)ezn11rj@ zTfJM5$dzkWW3Myhm8u3p;MO1f>Vlax{4^}AtvfZfHY%i=w6rKJC^NrQuwinf;QcN; z3|4b@YrFEbmPY7ha|Hjdn=d=L>W$92nvNu?+Xx|Rl}96PQBmed`m3w@RlW9EIM>lB z52b|67Qz0g%TM-vy3#C<9jal!+PhQSh){*Wa{7n3+qm((=RrkaH=c{EljI0Mc4~~{ zA9#$56TWYbKj=Bd##ci8UPsAl^CZH2T^F81sA_%5<*2Vrxvwz(r-lg$JkUtgBKXWh z=)h5}f`hr=AEw;glYV+({ljGk6A)cLBLPeU!-UnZ-Vpey2Fz*Mw1eg&0VouT_C;$x z{Mc+JqysU6;=3M2g^&5AOj@OGQG7_m72Y5})6K}*RI7FoFXAA6Z~ckmvOkFYRje9u z=)^UjE54szfqG60BAb$j@&ZMK zdu+Bi2iHcE;w6dwN)pn#0u$n-P>cF1=t!v`D0shrikpjgMg@zCFj$pSbRT0d*^*O84An-;jV9l#Ryc z9IG4y8nOoq*`*7fwGqgDoByPRuTv2VA4JpRLGA#UQixp>VIy4oU7@q>d9?5%Lb6|^ zWGg#}aLbC>SnRHaUSpkIH-KUnOlR;f=TXg`3eB z9NAkklN@%_R*oe|kt521cGE@a_th-D zha4!;B|%u)|ukBH*bU>x=Ae_?d;t%SmBiMdU6ze2&!nJkx71> zF$l4FD0|bVND3D!RYb%&7agTC`!S?G$K(L`ZFlX)0^=cj==9Ewlh&(AlUAn@C5=+h z-)f0$IXJCyDG}`@HNx}R!ElET=|&`N^odfrJ=a}SQ=%ZX8b5ca_T&mYMQ5j!M{Am; zz}>|q75IWn!_3-r<6|>#x_aVyQ#(Og&FYMS)DQyKb+(NodZ_Q$0h~mUR`U!ee8Bc|pp>FE|Dzrr+ z(p3ql8>K|sYPJoM)xtnRK{UC=UYp13R(0Pc)rn`5)ow5ejKT4%K1bBLgp|Q`0Qli0 zT}kwM_#9aS-meq7A-JJ4AsWJ>lkJFuaT#+)ED1|C z9R4ep6G|XONLS_INyv)4G;*hqNZe) zm{_uLl3HO9VsH~rRbgJ7{kRQ`;35V#XO%4x3dZKlnSo5l==4i>fW`9>^H#oj2z`9< z-i{JrbB+0jO`3s(wCh^9Um4R1Ej(7gsz#e&Qa%n>ZPX|)nl!xpBie>C#$z-TRm;=} zQ74MuLOr+=%un-&etQTP+LxZ~q2pt5b$^N`viPyPs7d1bpA+>fuq!zmXP6N_%Q!s@nRj_4eB z)2c$lCu_3;Y2bFtv-Z_z`|fJJcjiBKUDe2_*QeLYwA@Awi`nPP>6y zp)-IA4-0c1e(o}gFMiZ8%zXFBjXi9gR@uLRBT5Z>_Ff;HgMp(M ziyF5jmN@R|{xmiU9jy?_q{(Q9_i7h5Zh5APQnR{9hH38S3R8}u2ON+L!m~rCSVj&6_H!FiE+{&sCN-<>qU%LB;sWck@Hdz8y-Q5*Vk}Ypcst+3;6Ir z6Bp!oZATBVg?3)z{lW#EYjKT_W8;nnD!mK2l(2P_#npfzk6~kBVIbK5!1$OJ_3PKK zQ?eb$86JvaeW-&?$C+Yz)~{1_0?u7^h;nL4bC3pa6Cg&@y$D49`$Ya40LBSc>-EL$ z?U+S%Qlb2`*CBIcAOpd)2}ucPjbDmcYbgWX z;!>lM!oVZZFjn&`p0_>eRER)&un5e8_+h_ZbHCH$9K@;$u=%-uUf&e1ODg0^yhjO5 zzqg-zz~y8w%;2y>jRf#PAsal%GLqh607kVN`^t&*4p99IcxRFQxZp0G! zBMIciPY^F|R_lRf9E+$W&E$1v)H?8KD8XCKC_grR5kzMxo)}&v*ga&zyfJ)^6UH>^ z-nNoc?2@;z_2|Z;=}fp4iF6PrN*hHoJLN}tKSnmNJGf$fw>qZFS7S=?v2iiWe>)g# z1*o91I7dmqy)Ud~^`q73IvAWV#Y#s<6(zRU4QR!miL`dm)6@Iw*U~f;0IkO!xOX-- zAX9+$6Mn+fNE$MMKd(O(i{mgLd#DvoS38t zb%n%*kkZ?2-DgG-Qf%tOebd}%+wQ1gQIj$NDQ*oYM;c{F`}DeYO{Fh?W4va~;j#8j zQr$_i;f5Suou-Tymr|u?fzK8fshZ3KMT6FV0~;n2)*_4O%Dg0x9fg90f`PxO^Dc3a z{5_*ILk`Fh)Q6yLtf6}9plD#7MT;@@m+(}f zRYhc^;?oUgNbnbhQsi4oRo82QDh48o(Ab@^ukIf85 z%jVf4-(%)|hDE&Uw9!6~tk8{1YSshjs!a$|PMzIX-JTQyZRd&AsZEZWb?wtck)&Mg$*!L4d)p zwI0=jR~5LmWYY58(an}T!zooPObfp8d}Zs4tx;{{*}SP~yu5&>34(j@gcI`~!d*Jh z&C$|OrXlbt4p8B)37dca^A=F<#6L;|0*eWWvygukPXUbtWzSy?Ovrm@V?*rF3oq|z z^OIhr1ycrDpgLx5K!^hBPly6iPTvS%Pb7?}HH8-_!F3v(hp{GGB)ne6Q54R8D`;hu zjyNs3pq?X3pDnEw$->u432b*qGhvW|mtV!8#0;Ank+y`q*P2B(9(a5T1aT|)5upQ+ z@G>Tp%W3`dUMy+1qEbC%9`RYQeN@=ohzbeBnP}TKLckji_AkQUJUB`9L|Xq-3&HII||A=5vz0_Z;E8# zkke-B zSkcY|FcfbSvoNC%ziAT}PFRaEf}M*$W6(pJwH)9DthY-aH0-LQll}zZAe*!Bt%(8+KR$|g8RfF6P|t* zR5fwjKo9rPctM4G^0HA++>_=;`YK=mY)BKamgfGPVeLYFxS%D#2y;L^_tRXy9|!o3 zOaR{cg7U3`dLHZMrGzFTZB;ff#8)D}GL&%IG>R%Wtq4d3525M0;yU5D!D2Skdnc&ruRtOz`VoeT%p4(v-KZLEQ*TI5ez6e!YCLRY&`p)EB7 zzJ^U)kGRcPVqu}!#%v}~pHxGLenpA&~y!{fbJY?HJVU@0{>K zx_1h?RIi^*nP$fIl_gN`KB|8Ny?=3IydNF7&=1t3ON89+i2LrM75lWWz2C5^b0F

    0re^K7cGxg4KlIwcS=Y8M${jQ!Wf=5xRr809)Z53Xb3z5y|rnoQ)am`gnE`UqPiP_ANK0pQ&7!Uln z{+2;Y=-`v9knPKwz{s(uaM)cou-wowcWklabW`fagVuXyxy1qn47!{;#&H^&9d?Ml zIFv{QB8h<&FkOl?5r?n-L*5;Y9?G~vfuVIn#Mlhii~M|Y6T_IHFj~C?97x7cMUSCy zFRNi*{antFkU>1`uOBBGUIJi5u9rF4thfXsf&W8*B;aVVAs1giq;A1zv7*B;G_zh0 ziEwB}mmsdV5hsJNPlM%zJmHa)(N3q8%;<&6UhS+X?vjP$X4Qjm3(w=?@b~jo4lKM! zl)I8Y*W7xu>UA$MnXy{!mV1NUZD#*8|I(lskyXk#;cidSd5IQ;k3ku(Ttmtm&F{j!!*Qo!j+W2lP{5a-j&OJQ{w@`}bBkO068UyMYo zU8A7ZkY2HD5c#l1cO!}5UJ{ucY9~10_aT75tnfOY&$l1Pv(%KwFU&@r!)hYSl+Wxi zT@gr4rz{TgrsODE87djgFxdT}qWnRJa>TSxG-6121pUD#AqZrA(i{SG)`)H}sXh^P4TS!z$p%85p01yu-e_}|%Q&9k+vAo{Dt#~{LMqU5 z+<+QwO9piLHqk+@D>0_{9V_Q{=!a7{1A^aT83C3w>(Pvf#c7PuwzywM{0|x!giS@j zI{3_(o^x=W$X0^xo11@Sino$fnALylq%pz`7rGdJzfhcS>F5>@AnvmmH_n8LFyR_U zI6<(4LM&WAYbatw&JLNw%UEP%NBHZpmH;bEu3GbZqrt*jlXdT&ifrJX8B`{P zcs{I8FS>k}5bMG(4;J_(V%U74rHG<2=-om2fdBCY+PfR`jxi~G`?qsf) zQx@vqur{@Y;IMKr&dQSp1lapY=vtUm4BBj_ePswlN~#5<>-`vhAcz4T2k+a@yh$Z0 zVG;Z7f;Ps49DNb&Kb#4B2(j1d3Xh-D?CT_RG#jO{s8BDZsV5C zwgMhu;{~RhwzLMO#e9RgBny^`*E_cM?R%(S>m(sj-aXi_w!*h;y97ygzI?dSixm)nDKRC`B6se{bRk*3*}_B8|fKY zX13PRi;H@a8POOa+E=o8#W|`J%SMdt>NGi&D2|Yqfsnosc6W*h__7OoIE;U0HRG*0 zeoreaGVgc$Be1fE-Mx0nmPRIxS|@}Lz6=VJWkOs4QEAb%>vgGb(D#sh;&ONja4o>FWaHJ(e1hH-5m_%K0=}V=$}?w8jNV(n5->L#Bc) z1jt|@e*$a8``mysjz@X$9Je?bCHD$pbMahr0#=4q4Fx$72n1;*cLUS{h$3f__wUPW zNWb4A$zMC`o}~+G$Vl@NesOg-5CIH+6af*Pj8qVuoaa0CqI32rE11sO_Whs=;P!@t zpopk(GQgv<>d1njG}+aOvNyKAH{X@-&T2N-p0%wHDe|d*J8YK9l}dZo<+3X#c&R=i zzS60pOL?lUX*~Mu0!ULA&i}RV1fv%^=cP%00mZ0j`)}6TPR8 z$aC60$XBX$9-qN|J_2D~cNDTEejE%+baSkQ$$craWx?|3=`sq2h*QNBlfClzdGz~! z3Q;$5&B2E7j}IU9?$CrI_})M8z3w9$J728Uytu0u%$k+*VA6OxnO!3u0hl?=fBm5f zy)b?Q;+!(naSGJR&<*0D@*WwsA%yk~668t7u!74>1;Of~Hb@`eIhhV~{v*t_{VRTGckp>*6AIkw913>I)Q$zy-CY7vt zXxbo8;UKcW-{s?$^1 z3iXL#%zBb>AC6i488Q^_m5yeI7$AyTm6n&bjh%~gJtjuTMH->#bMx3jX-qYnBnT%@ z7a_f(gSP#iGOGccB0i(WXfVEG_JA+2pdB%?eQ4v9JqQIrJw2jaAJI*wO=lh^f^zESQfe}UWN`(PsehObzp0B=zG;W%aUR1C^mYN&^ zN67%MmhUYx!juwTB@ zy#_K@mv3O8n;iGpbf!5iuPKLJxvGEmIe7Pgtc8C;&}6g;`0)wzX~UOm@Z~eE;JRSM zj5Zr;DNY2*#aSkhPRJi3SRD2RgSI5kww>~PFhf-H`b7VZd9 zGLv!>e7-P?ajHD}Ki%Dsy!a`cFLr}tB}n2! zEN0tDu(F8Cvzx)H3gK_--1DVtP2vzCBtdbP?Fm8c;aHy?&+bc*l&)-!if5N2y;cc7 zzTrYIE6WY{$$~&CXj~J8{Ca0OJ`=`K>0HBP%as;utF`4OJ-qJ3+CpqTkhEr{gJisD z|IiY_i~Tw3{N*aSoEGa@pR{xVQ71$#w(7`oyoax>ypUs+xq6tEGo;L6jge2kvbISz z|Bd2R&R>}eX>v*dH0jL z$*S^Pfs&VfLQd1=L>ls`V9sq~LWNTT$ZYt4gJ0?PqdSLPd^c{IMyCjf>H@6jMv12s zTc;CN+h;|ioqPwZ5ON5O+@D`Q9w#mkQHVgw=I8X_o%T51Z;`JnUB~H5zFz|&Twm+c zVl0j3%ESsuGu${1`-2^>@s;LOIJ5=Y$22!%_2x3bZ$D6&L6vREioLM?{k(6}_;;xBpXy1Ye`gTX{Umzvc zNzW1NAaDR6=zn06`|Dk4)kMDE*H?O6#u7*mBatu4LO8NwHYO$C)DXO){Gow4bbTL} z)DFV0)rE>$ywv9p#sa~9a@1=QGeM#86%GA`G}FXwSL^&EbK2GYzQ_-4*Em0^`gpu-afgP3+Wpnz7GX1L_V<~Uw58Cbi4_@rwxF5W1Y3Y=c+b1t4epo zAVIt?E1e(4>YsA~1tS9wl`d_I*E3t)v59U0vLf9zTL6#!)ufJH)m=IE4SWldyoArb zQP*ZUl8m^7<$R}|snc*ew+I7#Nn7+_MJX0CIp&V?g=ETB0+C4gws9G~~q;abjI0(cJobsc?hM;sT zy(S>=eiRt|$z@{H?ue)dd?P(on8K8Bi~6d*x#dK3Z`_$tOQ5$oH2tF@Y+B;Er^mdTPIU1<#wQ~;+7bZnxi~Fl8%`tssgMf2F^4p;>3}8sCdjFIe z>a;vMT6y3xQ**NZ*@wr3;1?9O_4!A8qou{tkz!RUOocx3h` z*NkENVYcV`y2#uE!&_;6nr$>%dbHS1IXgRu!3^-Qn?i4@VI6fTmFR1h^bj%{4tEKq zI!xS;k>{{4b=rn1n+L*-weZ5zh8AJ~0o7<>0Ex#K?IX^jRb6S3>E!j3%xY=`LNu{I z`Mj;nf3WC_?0G8PY-ssvdTS3eS9>QmDO@Y$tEdFmrrS4ypBWHMJ_~37H@7Gcs%`4LQYR`dtT~fon_c8sY zXj;W@*eAGMv}MQzOj9?Q3uDS*jX1h|ZmN&KP1$zvD^aJvFvLxnydnO&qkN*1?M~aq zpSYn#UwP#MA%h2c=rc<`OZ4n$uWxT9O0x0UO%c0kPbR*(eKW6jLp7Z}jhI6zlrFKA z%ec9~*rK3f>4C(ET=~WMTI}3-vZTDyz!iq3{-)hw#w=Ktd$yqwF(1D_Ti7ME>&qO* zuNQyYd3&hBTsKb)#2p_2ZgVV`qQw>kNF-@AFM=`j=oOWcF2>7Bh+_Z*?k-5|@%ctM zGQ~q#Vt3MoXMPE_f3J_VVB+}Rd7oXR5HcO@Mvu$Yx%KOV zvK-)+*|py>%yf=`ahsK{{6ooBddjfNoz97^%jIVJ>A7?r&C+6~5KtAc zGq)r^!`J@o-`9YEY2#(W-5&$V4uS&&=kG0?w|SYW#rR@EkPCFsI6TR$zP%ANxmau_ zd2^za;0M~f2pDuXYVAI*Z(ij~V199f0|yxDC)7tsuMKjlz)=(c#hHA1b$Pu*FZ3~SK`bj!kBA#Jzdl=l|>0N^DizaW4Mrk&FUzibxmGS zW^R8qYLd+=PkAv3GLyf5(?$t-7?b=>^^W%mu!!KKx#99X%K?T7c~S?nxR_P zS}1i_%t2gM3>Qh)dNJNIb1#RC;iDNd95E>3+fxHK*tkKNJ4_4xo=oFTbB=#<67$`z zcRu%BL<)nKk30AveK#fca}M`qkdh?B`unrwYZ~Grm41!4HX|Wsr!L#-95Bq@_JR{! znJ!0RdWCi12$mIf!~s;_Oue5-n0PQl3%zJ)0x$>DS8BpBix&%d*?jt*jW#9&xh z&DLW@y{fVDJ?=o3=Oyf5$$0?NH`e!C_a<0fJ1+=*=kKnK@x$Caucg^)q!a&Mh^$5o zERJZf1jiThey^A-2jN(!FfLFc2;h`JwCrSNOu_X&9Vgx5><89Ws(V#k3A)fiRL$Cl z2dC+b0RHld)TO7XKC)wsL@>Z(UiOU1al>jq+wyXI@t>a5n3c9k)8-HB$-2j55N6Vq zj3->9k^cXrJqZx>pLI;Iy`3cW_fG$=QJz>`2}mb4SbMCPEe;3>J+j?;R1fLp+VicytH&e zVE0tIa^Th=LQGd%t$DHc9&B_E<@wQ1>2?eL?%6AYMgztF9QXgy=6_Sne*^=A38+Ej z$x6x?hV39NcKYuP5-|W5IUfF&<+p$3=x%cRxC2*Ug8}i(b4^&E0S_+kaD;^UDe=Q2 zQi!?i5)-I2-cfclb(kLfRi3qSb%$G=^CT-#=Ml1fnBxA-Wn+OPv#%R--fP8X1TpyVxe>3A6Qajl74p;m1n+$1eGIE&nf{yL}=A4!b5(N0Wr~ z84xJC4GNb`8D|_i|5MxlG?M=(KA~WK7KuFm|H;OG8|(5Lf*thXOE-iT{J+opKg^(~Nc2NyVuN~?{QsZU-(r1~ zdC%XBP8|Q6^862MNksY~Gbd?iKgi+#qCEd}e&+*{{l7?4G=jh1Qxt1s$nihM>mz^& z!ZZUTwD12vFCWJa;_%-64h1gsbtsw`$=<{QT$`a2=3j#H4;THRh`a+t`|bZ7fE@vm zo@>)2rQS4mLu<34k3~xR`9D!dzXy?LPpit7`jBO(kPYzf-RgAzr7zC69DBI`A%A*I zME)BZtqR3I`3WwZr;2^-eE)W0=0kvZob+7;MI0mHBZCx~*_fNZPP_Kpf85U$hV%aX zMEwK+JWpkDES%+yfY^^L{!8p#e*fB?c6*&wT>qhCdN2raPaN4YHEZ6sL@TI}V%@?} z!Co#pk9*)UJlrS_7SRlSTlN2Dkq5;5u2&yMk6dBFNilpfXorjV`KgYbFP6K{e!|PI z+fSHX8r{7v>qm5aKOax?z&E9GP&CrG1p&zHB=B5A#||mc$;1CS@5>RwWT?!u=;@?E zHV;h{lRL@ej%3hBwA2slW9LO#-=kWYdmiGT7#=R}U1Wa<1^|g-HFUnXa&`TnNEa6& z&H>`oEvteM>BQRcSxm*Y*lJi_LjE_#^h01+r?aIqm@0O?`!?nyd`G!b4C3}B=VZzw z?wWJDc6$h1n>rBnT{073C@uTNdVe0X^{#Dh;>3c&ga5Icy>{ascgIeAv-|0ou6AUm z0I-?iZJxtGfZs_qn?;ydCd0@qt%=G1WixrbC9OZJ)Iaj%%X)MlC($ng##?~FGJuJQh0?PbBSqOVrc82u-pn`I znaf43$1l#8Dg_KEyx<`EL=zytu}HFI3kQAA%S&BuwtwsD`mXAS;(DCsH#ax`1(n7t z4Z(vPq@6}U$a7hwkT` zMxxWzR8%DV1_Kf@DTGne+fSKvkO(;ni(i(d{bcs>?bTysikFkXG9Je-F50k7-F_Ew9Nl#)xQJ}lT%H}yCvnKpGW_ab@?Fkfu9 zgKO}rsw;m_KM*uM5qb?vcURncdsD#hz?q!Rd32Kh_Z`wlLB!u{Y0{i8uSW5pT~=pv z5z~yV)ndKY_BuAg#b)yl);aF;&dR|W@5-cAmd{ht>hwe8m$jD=gJ z$*71EnSSf-%{6`hRMGA^O40hs#M9Q$fK1B^{q-sY&jXV7Q##Hx+j%)s=YdGxc>N}~ zUT)fpqx=aPMEUbYM6)90T;KjeRp+t;9*74yL5v!#+)^Wg{)nW0@RKODm}aE^Rn7!t z6L&VT-APBjA^p{EN7%gUPNr981^sls3I^~y&J<>zJfqu90Bu(EX$}R;L^W#eP-}34 z%n0Y`=8HOlO%)HzmYL7e((-44@7HYyG2r-Kah7K-R%`n!tFpPg-g5;aVtDR{=B3#! z4oBmpQYqpkh|)J;F-U&FYb1#i4zFT9!;Ab$4ugQcT+wmg5NQ;T09x;y+H0Z&elimr zqJDmBz_(2`g4^$~^^i$NQPkvpz+&jKoj;A@ldV3m=*1a0yU^9ukxzqUX zg$;w>X0sw=KMV}7tnO_%@sU#z2`(GUCQck_LPd6cevGTX1H|l4SuhJ+596Z}XY=;9 zXGD&-Y= z7Np3dfnYZ(E*{l;Z7#HVLKDRMRD7R95p;a}V@z_K=8qyu*bFy~oOhzMNUjbDBgS;! zpD<$Y{cv*nMfo)qH8tN0tsTuaJ3^7mm3K3Tm!C+sPnKHuXs6}*m&qKS_ZiQ+eUnKeb|iQgtR2 zheS7Z9nKH4lp*A6A3$6f%hakeTrYQDB(amD)v&&r%oj|iGKM_<9{~M80>7E<5PvST znwARK`oor3_H`5|53q%KF~gpo9t7s0$ zn4n~+zn?5g5bzvXDwc^qxqW0+lBe~wj(thRFRf)bbca(w4;?E6UunK55;%{4dQeDkx< zKI`usWxIh7gBg!ah_MRef_J>*9n78)9zKC#)lwEalqfUEzy9^Fnx+c@{293~zW8E> zL(1U+p+~V(k_d6Ie4PCHc0YQwc;w%|(|KbJ>7cmk<(wYeAa2vNZ-axPo{HY`(sbH-SbrYs$3=;E=2NSe@!zw^++r{ zEjIs%X=f~%aomC_%WaN2Q@bA6`iGuG#~BOW+*mg|U&vW?wxucKpvrqyMwZiF#X-VS z#8_;b`ej1<+KEwomuzK<-p|>*Q4a%@M(5N&wT%Q*R9ZnP%m}wPrQyJKrpG6cgp9{a zCM~{R^1*%^PjC0aG#K1~POklud!D8&#&WckfP?(fqnpi#ehi_OY<|ZeEPTN>uKduy z`T`F?XCS}DIUJOrIEwQbbp$3!DbVqGO+NHYsPNF{mIv>-``&L}_3-`oGuBU;H#-)u z$fq;mTt1V_GIgK>+1hl_wJ8}mbqGq?_d!d1`D><%sS^5x5mr*?|+zylBb&;R_-nl)>n zKk>v9Kl;&+a*0GS@o?oi@aQcjpa1;lnNg!zKKS5+nOEO+*Ig|wEm|)q*DME)IO2#4 zFT9Xf=KQQFm|ffG2OcsmM`MQojg*?>*E_FYzy8T5pQMeiUAtCxT03{{MEh)IK!=O= znZpfijnI~tE?r7(WEVu&!a&ASmtWOb|NKxK)Gb(U!*xht*xD9>c+WiZ3BQE==h_Sjh+JF%-J0PR% z<9IVNOh}Z6Aqq3+uYBbzKl#Z|xNSqMq_@Q_8q1&IM-Tpt5b}T7%U<@0PkiExGtS^u znq^C0(qR>{uY29=7#E9a-u>=(W7>c}Nsti2Y}~jJWiglK6%(TbN9l|29Q9dCW>TR~MC{L3%D{L5edvOl!g{gID+gms9OrU+l z%?5e%&hGZ^bQBAEqZ_5lu}2ndnq5zw8B?@}%UlqlF??Xljkj&PIueZ(GLd=lWv4HA z!?c>YPqwalu=S6r!Y+F8WG~uhw)iN|z(bA-k$5Ox6-)PI7Ed|$lsOm9u3z}%j(h&m z@|$#3MfuLIC^N#)XgS zuzrWmTdWXl#H_3^fkdr50srFHaxyT*wNe$w!UwU5Yl9$`;%2xERnt&F)BGQP_+ch~ z_%NMAgLCVxw;q1@;kd=wFOOo8x~AV;93hcJSuCEFa{!0ULP;9sm)!Zqz^$ibl*!;J zfx!^HGg&}Q|NGzn9%B)UvsDq25kZaP%rnn?!yDefEFF6kr-Pmh<+y*zKt;0kim!um z-wSOSQ>V_(PHGoT1-!{6V-;@1l&xz=&-{4iIz7K?KA?g}rLkDy4!c6(@|@ zg$guJh==kJi`1>a&CSj1)BNQxf8i(qmQ?``5JQOoisercH^hW;W~3Z*`6DgI9Z)R5ZD7jc zP~wt`-57wNySp11M!?F?9JW}|(KY!!tsDNpVqc3L!XN*D82D4iFl#H0GIXEPG7UYx zqjU)DBLeg;wA5tV)~?_DD6;I7LPxJ>4z-V5%SSJSVl~wr%@3rHY~rp2EUzNvSLWrp zxR6mpfF4kTC3Coc|M!1q2!u5qF&!Ka14hY|6sjP4MmWHSA(<;XP_TaTlb^&2*gs$w zGl8B?`EP&w+iPF@+FiSLu~7_9KN-<~@Pi-FcYposUxzh+J@`D`wi?4qPYg?zN4eo15ISO2*p z8jDM|u@hkEoIOb(NBjK8+gg5@N@t_tc({;l2|e-iXCJSO*5uB)9gho{c0Ua(;5(#Gn!Hf#O*;M)KC4jooRs#KO@~#k?tp#G-pmoVIqYCw0aVuDzaHza$nl zM;(pMHyr6sw(soSh@(#o@ZeZ(tZHi2%<6ap(AbjA+jEzM<(={S$+qs*_#ni0CJXr_Xh zfgoyVxWF_P=PlmYIOEWz(JE!IY}`PANy}S)z|-IB;^|35$GPWw118;xdyoeKSl4l2 zh;amIc_cqV5%kS(eiIX-gAO`KloKcEKq-6WOF;|CzB*ho0%3hM*eh-mVM6im6VfY% zTqg7I7d~0l)t1WUVv(2*4@U}g=GjM|eLViDFU?%In4D6jN@i`WJ%Nsdx$*gy_Ky4h zddt_}WDZWvUc4mH(cZgrSHuMFxdF+vp+YF`ty<^JnV5TD+dudDHn zB9CGE95bwJJ0@;gHA$P)y?i~0J6>4dU36w91%5OxCpiWcE# zo{!_G(T<`>Dx=+9iMB3mkQvvFS_98mv@maay-ITwlPk%pG9JxmdSVggj_jX@3Yk<@ zykbHW;w8nCr&p1~4{W{Z&n-X5aacPPq3vPgoJ$*(Ya-NEp!(!1j2$=C9%JrEAr_BB zVrD17plYT{VHDKaG?$C=mW_s@X-x78*-WIXK%tIYw*LMfTW{)(FFmGzZ69q#F^!l5<0?!9O0Z(0&- zA{BfWu>f(TkbNQ%%C*!T-FViD1#hXVoN8^ZjS|`DVe&Vx|K_&Lnw~_azG~We2Yv8} z*{3kW_vZ8Aw#2q;pZs_x(i`E6in+*TM}1??l!Zj}avOeT$3O1ac~!DE9rh|!-rR~| z6x>s)rybUC#+mcqTvJi63yp z8Ohfl`4}W6Go$*TW2c>W@`VF1;%5q{gb7> ze^w~@^Qt~d!kbXNQ}uG0TJ9+6GM1Y(nx){U$-C%FO|K#e89h#pgm=v=&xX+#W0 zEm9$q&UEd}b|)iMwOLQ&XXF+kW`t zpI-4F4F?|_O=WtvZl~e1X+u{SWXHE;y=mB#DO1>bCsdURhZ~<}?FIkSIx@D>?PlQ)TV|KJZ+> zemx9n@0_$d{`lihIN=0q-(Yh@M2yqY$^ny*MI}M6_^l25=xHfh|Luo6sYJ4 z#Q=hXeX?obl~A@KL~nVPbHI?)G3bMXipH{qm3%mZPnOA)lvAi$xUlZH( z&cHfon+j2iO}qz4!XHF`3m^HADY{3-AV0y#-1Pay5hXCC%t*&@Kyt-21N)$S7?@zt zP^W+%6e343wg`Bt9&`!x5ZOqkP%w&#F&(AojdHn;GzM05&SRR=*aElzbEnH=Ori(8 z^wLXz`qQ5>NHEMWGL1NA8r9&*{_xpnpUs6B%+ZU74SHS@BK0e-xPqHEm|im@=O7Z- zS&%fL%zd$FU}mgQ@Y~=1_C*(6gn>2-01-2*<{S{C1t~(q?3sg0Fd^bU{_zj;GGoRJ zn+q87*jMW)>1jj#4n!qgPD_z4ZjGj-%Q6F*QJ^y(Lr>~}iERbbcZ9)*nFOs_+Eh6w_&j5+C~lavdkh`)AXc~wI4ALn0^?&&}Yo5m8-BpnVVa+Rnu$4Df~ zhYsjhcdY&1Us|eS*ye_!;Yd1{Su(Bg%QB!U7by5QDLIMH9BKYxlAV>%2Ll!^F_1aOl5UEo~w_iYNuDtYp9x0 z8LPoSIGsx;vz@#0TUra7qxH#5x+j;#TnJ4yYEkbZVD=YyGk&Q|D%w%A`FBr!{cXp7 zrmC{GC`V{>BNz_f`0Ur36aPq|B+Q4>^zMZuw|j*1*$R#w7tC5(ZI2n~T^oP4YUj@* zg?OF|PIH-j0R=kkJsinbPqdN6IuvUqom=9AQF9qA;vH|9xFhXO&1`0 zB6-u6wQDb0`q|33ndMXTXh_kSnxx}CRVmU%LaDq_f)--%F_b1t;_oFAja1~)yvKlm z%e8?3L+V1*)9`x){15{x>PR6jG9=# zAilq3CKTGV>h9WbG#QO#O;yOH0$*jYg=Z9ZeR)PgZv&u@Rp3>=ki_HROrj&xh1#t@ zW?zibf5O3l(Yw+g(nHdh(&5v2qR+x229@rjMT_Rnor@>zh&X<@6^T!u zkKzV7v9M#&s4PIm*oReXU?phF+1ihlC_yJQTahk)BI{`>rZ@X=QC?E9XrCg41IXk>|o`h`D!v^ zj_{bg^wr_<6jkD}2EC=D{gxko|GH0JG5gTNdbVy$70eb?3DvVF97=t(joiY?yn;0< ze#|bAJ{Ky~)Yf+O_DCyz`A07A>P>#{s&9S!jMH*=-(7X`DW|h-J6QJAUMN-OOYH7* z+Zd{6MN&KB7aA%v>PR-%(EIVNvB>(;HK?bsybprtdj!i_EV@@Z59HB|E6X5s4sW*1A9c`On{Z=ba+PlTL9;a9&Y%EY4=_??X z30)SqrcgRe8tu-3LQym@mBpV|Qb9s&7tnF5e?xVG%^lqcf{{UJD1CHN(BnhuoGipf zQsOCJ1Nft5`T8XifdBxv&V z&qSnM&_~fy6iSMCDlXAsg%6VBp!nGSp||I*$O|sG0Dq-kPDrA#e1?^JKamkd0+fq| zoHSTE?f?6~|D#i)(jreeVpx$18NtD?x@&w$g$IW}A~YTheJUtIu_)0vVE1=C5ul*y z#YpjzOD_4@&wfTfNZ)5ioe@g{TMZH{#kmlJ6CxPVz!v@io(yv8ZS{)@_W%2T|IgB} zQ;Ncu={w^M(HR&0vhhU`RwoX#;d#?@S8m8Xm`E6va#dwTn0Zuq z8XE}F`b0iu475EsF*=Suvh6STwq2h{<}2BIjOA;h)v3h&yMU5iFJ*;d#&b;Dy@R-L@?Y%dDb z#41Elh?^?lMJIrY$UF8Tg=hp#wvj0Km}!$BPecSZ3PY_za13FJ7Na!KW~XK`hhJ zQKO2I_gaPN2*AgCOwstBz^g(`?LilBOv3wOmO^e17dlVsFU5t%2ZI+5dum4RXRiKG zztC$5&9Y?0iWSEmdn}X++QW40UFybJMPpydn8gbJ*T4QX1~2kQ9;DJ8f8#IPP;*}> zY`*2jX*;)P=FjnzZ9tb9)6)!J-vVb&F_D9 z#iwR2IizRHR{Vi`fWeI_L`RJd6vyL_Kh9nY6^X?vx!AU4E819QZkY6<&H2NPe>!CO z;hCPE@31TX=;L#aK4OX2R?D?G+fuH)^2*PC_Oo_ELPEB=0Td;S0rEZGbMeI&GqI8G zz>lG2#mQyN1DOkn1FU#Ni4Uxp{BSglNg8%@=nVEo2bLf!YOiu%CmN5SIrs#AB|D?h=cEOE0}t3Hh^w8%lol5FOPs zI%4?a9}o%LFp)#0j*5gF5d|`S>6hpVbdR&RDRs%ooK~+;;-k(%KH{&W6)HDmdi+8C zer5kc3|n~GxI&3ag(92V?L+|bqR}ff5TKmJvKR{zY6zwwf3=mM1K32?t z&#nMIe(f`P!H2xiG`O-B(|al{8#(0YuYdh3N8QOFHzr{pgANo0^q|5DG^!128CoB& zgGPY>0jLJ77e4*zPopQ2NJEJ@Ml=$D210?Vy;GoUZ}5Eri`W9z1j zDi&^ZK^p4;%@R)r2jT$^aItB0JOTS86hoLG6*UtF z)e`e5+6X607-cYIMh2P^nq{^UG4^7Qiq2MNP_zt}49YSLp{Ju`o9Y7}_y8&LYGo*v z7J0}uu>eHEzy}A9GF}`7A81ILB z`6)->E{)>|7`Z48fl)w!_Dj7sj7(QJz~j;Mh3~DFG7%N(r|D;9*_I0ICvtzs4FNuO zXSL6CYBpVJ0ll8z#|Ggbl47=t99?YL*ij4^56gc-yGy*gtmz?HZNPYj889$M!%Ac6(eHc z!!Of)jV{DR9gliNIpUY;2ul~`kykkLFkGE=)>%vq#c&Uy>m_Hs%+Az>uY1x%i?F8u;`Vw zl~b`IU)S}(BRg))=FK?(w9jpct+#CWQ8u5eEW{)6ipKnc74zP3@YH2kRQ6=LAKmt+ z`?EJ^vOT%(LbQI@s`WR#{IGZSZwG{TCbq;Xqxm#xlK)7dw)g2>t4^??u6N|$Y=9+ZvEN)JARc(W7wSDl6x}b zDWDCq{ZF9XfgN?iVDBgDC+06UmYEQE1e0%3c6wqZ-@Fg}{POmPRdci`7R)@ma^#3N4 zG`?UWw(bN2%D%(G!054tNL9BSwYqn@M=s050+A^`^ekrh^_PX*Vx=f7Y0x8}B4bU< zarnS6Q7*Z$@Tc2H<-voRg9WFR9GM4LevE}A!{tfYR#rE3^lsveL^hja>{MynLDXLa z6r|Uen4-;73LhZ7TTx=tn=| z?oPVfTXG~$vqWg{XX6LewlpA$1tqT%5)RNP6rC?=q0~TA1C9St zqWUEwiWq$ao47W!(8FJ^$`SWDU~tEIKK$|F!E_F_0!2oj=8s5RWkE?W@zbl7LH>I6 zyR8r00>UT=e;%UnYq{a3^FbX!WJf+Vxe99=}&)x5@GO!xnjXwnB&RC(~KaT(%>jSNuHc~Isg3g z38JB4<4otw)}2^cA#tcK;ov$B?p)$>8nPKEl}4$JKn(8Geu5sw1`X1Y9_WK5?ib1~K={mPr6 zG8k4$LuKmd217uD1XK2}eB~?91_nRd!41sD_QIkM5Yz24W^)@L79v;*veSnH=0*(zbjms z3iWdBaba3v;YCM$vZ20j$Ec>N{+#-EPT4f=&Mp6&j+{m_Ms{vv`lhr`OG`jQc-YVpbLX z&4wnQ;nQLn?`9HiF<3O?xR%|I71A6q2xn1ZkN?B6$Jnx(D{n@exG#excu-?Y`1-s^ zo$ir!0>*|I)KFDv^?FRb^r^}RG$12mtP;V33DPalAu|`5fEZh=^z5KnO>H& zu?H_sY<<4FV^=&@jg>zwhSqM2&1k9^zxraDO)u7-W;h6$JKLy071{1hKe#g8n>h64 zube;~v}%F`pf%Eev6E(UQQ#PC-v^_-HG%blnV4abV;iof8v^R&nZ;bhIeL)V&@yZ0Q)ZZ%wI6Sb$9DiYu6lm(nE{Dmu ziS@%D{xF(f$-rTAtnic(I4DIZS*~->0GC?G?pWD@53$fiGONUVPqCC=C5KxMeu)A% zr7IeRNQa2$F0QB2~#mDQFrL z%3OBc)EumYDrJPH-{YWwjjqjbg5<%hfvn`Jewu<(F*ogpvmzD=Kb8MRSS?|3ClpKl5QH)X>U; zUr41we{%cnx1$WO~rq`L=wJWhH!@00e?!U2aNUdNzZ&gx zE}w~TGYDe`@`t0REO^bcZ4W$`dpwkkrYk#IdpDziW+DcMU5U+bVVE%DhI9FJxGlbU zd-n!DB)F#SK5qIzC&_<6z)c*Tg1oCmoQz75XxJ!pcv`xiMGF$fGK}gS znypk6G{A5FVzvZHl+Me8fUp~Q7jQhsp4d!c&~;Jq5IZ+Z+Gou+o@e-oA)L6cmfv=-$D8 zTEo2jL-nA?V+3JQgf$R^j4#wK9^4p)uoKBjK*~5q5Og{^(2Dg6l+eI|{#NHs%BM3< zA(AtY7-Hk290h_V$?LI~y=TKw%h&(uw~^;JqBz-O1?|b*)zg#g?({yA$zYI=#pCr; zr*mZsI^8Jqy-Y3}t;}YV8?XDp)cFf$9(goNLzH$CmNl>DWb#~?Q$ekzew#aZxRkwL z=Mt#fV=AZ8y1%1y)$eZPHnF+0XLavv;|l|(-Sj2g|F=jERc|I37?%-<>X|E3X$u?? z;5;}!C=Jm_c64^u)lc2D?)h;2w2%Jmm%sht)p!2uhnJju`r#*^bhOuO0|}@ea=e;` z!-KX$GZ|XYD_-#m^upYOiFOYSFV|&|3iL<<4eb^ z_z^vFo__l2nASpo28}DTl@N0BfFbib)S6O2Gj|0gwhc&yO#&SW7c5X>GKomUf)z}p z2`ZPml}GrHP2fV^BW?x0Zkc@QbWiu zS@4SiQ23zk!IF{tcKOC8`1=V4a1)m#_?3gScx>v$5dj?ND30Qw3HL#A$zUDhCKB37 zE+x0BK!GVc+yTHGH}U)lQGC3j?gS;OjRtWMsIsA%Mf*&s%9GL?-NKxV6GYF0 z!7}SyQsFd)Iz|N*M=a+9Lp65p36b_0J^^B+f-Q?m`arha2vzrmzp`oR1EoML9_)hI zWuyaq|NGxhXDe8*6UdQ$MF5~+^Y8M@FIQS{P$;pG0obK|COLmXxc$;vhC_Gk zS=0?Zj-zx4j2!|4w3AYa((26WK3u`+V(#Li^BrilX*u+D(w=TWR?~gcx0fY+B{qy2=L1OL}VP`8=RkluS1xnS8n@(}r$3 zht4V$n^n6Ao_s4sdT_MQ7*X;&yK(WRj;GTJ%r6T)sV&>_R9EdRZ(w*F^tm592bUk zB)9HPYmSt{J?<4S5uuD!~x%lMM zS6_AI?%Qt;)zxxsvPm6fUq}0lH@#)X(Z^;}Y$tO;Y^wX2wcAl+h0_()wV^cSg|vBY zp07@&p8oZ(P(T~)vuc-32?xS?wZ!}D59o7C!CfL?Krh3MT>B6+AaF+{Qkk07H`DCf zWf80XavzZKC_d-ra>5u5XlYxE~jqFoR~(a<8$P%xKZ zf%@eyf0@jn_mt|HsT7I;ncFk*uC1H0E400;Y0;d9`n9+Gm5*TFfA#l{I`pumjSc>@ z7)nt!1eFIzdcXVK?{emV`4wiuT*by!=KWHczg(OK46;Gh-wo#tkTL-ucdV5{pz&cVY}-IfyOvT(H2h+{%N36`rWA zX-z0_-~RTuV~M7V*RWFL7G|bc1Zir=eXLv<+SJr!qci{HVTF$hMwFz8G8Y86x|-b4 zcr7swcsCFv5ixw%j$0zcK|G{TNpe zpvADPZ7s*B(HwP+mc1I`??D5H|O;-T2D&Zbp@~io?4V42L zV4W?AGA0vW+t)C6kk=?0B)yfnZb{Tgu7^Z5-t(aiLT{R+3M#r?N?{fFTc@ z=@U?=vUdeT+k}fFmh(XXxY3DWgN%b(M-p%rJ#H}Pm17XU`OR4R z_eo>C7W^q`AB^%V4RekT6uso#H0-AF>GKz~tkiZiB3j|y`Q4BVT^x58m) zJ3BEacN8hs%Jhc#6!+R9V?N5EJnrpc$YkRV(~sunW{nLZu)icnr-`PU89dWpe>V+{ zidDp#3tCj^h?!zC%qSFN8NV+kO{`@koFcE=+KVQVMIA=%8LFq+OobMUp#oZLIKJ?#y^5jQSQ+H(& zxr%Tk8jsww{ddb}y`-^bCPf*jjVL9&uAaH6DJmXRL4MWdhuYZQZH1X*IJYj1`D$sn>TuvN6Rsi}Goj8v<8HVu^-hmb@e= zOWAi@rGgY(nw>}2isCs`9nHkJPJ=0bb*3U}Oi6u@cT5PpcIGy=CAQ^I-)AG4cywmw zkn;|Ee^pftGQ-3dVeFlzsd(KN$y%@mOcn`~Y$~L(wPZ6+!J5(^Agb;0in(eqqN`*V zlm1ZSI~9ozki*L?bxqzV$(L^v1h`%bQegjb;P(t{ZB*5R)z5XNBf#`wP zfw`f6Qa`U)l8w{@Op0Hjn)e2f7 z3)=Rrvz8rw$Z;?Bo@{I#jhSQwC3ZPhJQbW99(L{2@7xU!!#*Y`U6za z{-~q;SB?M4&d$efyPbk#Dxglu-eyuRJwTY!Fa-@D3Pe-}*q^f9g8Be@EP|PV=o(61 zVOUXB-TCaZq2rI8w_w4VKi!PytRt7L{?Sh!dfQvhKlAJ+uUT7g2-QPHMI+2 zj~fFt6wRnLSFT*i!8>%&5`&D8FOq`>A0-5t-{4Cen1FEx9MdzD?+6A%{3R#y<5ue8 zgI=|%sR_5TV=2*$lOwtgB}8c_=T|6!?%X zo;-++`LQdLER6jR)7G+6(2eH_VdeCP;>l}q5_np)vB+jG zijk2PJwQU1KRDy&u?fK+ZuWJE4)~B9{RSJHR9!|x2@r@5XZ)GaQlJbmixw>^DWuIK z$1)&;IW`Y(FY$Gf^8s`eSdWd=zYh~ahNa!mZ28x(C~RzL{rr{j z=~FQ9@Fu;ZCKauej)M`4l`88}^+C+eHJw%Hs3kTSBRU9lshq`QKX9Cr9!#_$g{v2% z`(`*P?mE>WqElv(ptCl`Ou?TSKZ;ilyAg_o1qRMsrKGqe>G9-13R~Yz-l{;u0DNq3 z3jyanSpsof1wQQ7GT+rkD?%bFQKX(wDlB{WpfGA>IM7qGosMA+OcW}5`$|S2hNo%{ zzwo34{T(`4#@ZS_c#;+zSn2r*@TBfxAtI?@&cmRB4>Btw$`{8xnfJ?H2BkTlJVpS~ z7ymLFfCJGLR|H5Xjd?Ns`1mkPGqul}%_OyD^UG{Mik&K}dhfx6ln1f*{F*K9zA@4S za<8n;^=s5OJh?!@OxJ*Tkc@b^oorL^d}s)pAu`S|LstMXNOE-5vaac~n%@g$9c35TlUb+JesBWOPBhgoqV z(~BM)4Y(;@B6$~UkRIuC&ab|5?)K#RcqkjI>)G79dT!$)qbm=a&juo&x#lGw+S1X? z*?|HUeYsFgyzlbpj?~WXOuP9mB40$Tnz^julv~$d$KA8t*`83Ym#Zs!Q?*N*&g{%> zq}8Cmt%yZYK%0D0Uu`Y(Dyk98*o(6r#T}r9DVcfaAM)O5^|MJ2+)R|AJf;jhsmYmv z!K8uWJnMY~vN|+nY0XQjBef>^Tz+@^QRddd(4tsAj zrc?P=V#vqmG4+F#s3b#44@?W`MDIZh&iKH;G-P@o`RbRux_ZIfwDvNO&3+(U{V=Kx z4t>*++IFojh2d47!SM&d0Xdzl-Nc#X&_D8J;Khp7+tP}F~dN-qB5W8Y}tqc8ilsm zj-m3y%Hy2P=acQbxg3<9X zoV|gdXXnn|=hyW#uj}2mHOB?q$Vq1s4JTS#(0~G#>NU08Yp;GbW9vo|gxnPhty%N* zA3pu5I<5s6>^#0~z)|LVwc21#&7|y@a!C73c~OXzukZl}`q_$_YVMeR|0h1V=KfWY z&fU}I>sd4Z+j5-TKIJ$2ZkaQ{xUmN?htN3u$zh7`;*rc%|~#DH#qz+3Z09t+@K7 zdLtOMi{FPIewd1iv}&aAg#MlHe5a7Lnhq~JdFt@3x85q7WlebSXLdw;gx-{?r@|mn zU7ZO{f8{i$bEHUI`U>oDp(jOt@uwMbwwmY?2`21LVcg9E0RqV^hjN706$Lc@&=U)l zG1o(*)RqAJLaYbmp?SwU-hsZ728A%`R86%HHJ$ITPy)o%S8b5&;c~J;rU!181|Ow`&%huAQWq;c1FQz+QydW{)H>y{SOyp( zA!{pp_b#t6DW;T!%8t0nC%{|;3gXvKX+1~aKqO){H#fsjGFv7D;Y0U=rj<)?Y%d3a z@`6J-Ql|8ar*&9Xa^SB<%Hl`f$H0$#}xp+qmv4*oV2 z12xV`qZFbclQohS&yv3iRa_C^E|$M!+<+&7ksR~J>#x5aJ7^}8B}GL5(?Bf0coM~g z4jnXKb45s!3lu0m#AWkp+l=N&=3FLtv~BV9gSX zv~BD>>beg#op2PxPE|Iy>AhD>Idyq9ks7U)G~EPU5{(>-1FnAe=Y`>c@3FAT5{*A- zEZpioP>gaPJRct*i9pvm7Kx57Ph|nzbh{s~e*U)WXB71Nmvm#If(k$kx%i1ulkX3d z?1)8!dYArMmmG;9>whc=EOQKjNf!>#^UDCQ6*yCW#&{Oex-3s+jWq`!xrPH>GaWaR zQRtChBNp=;x^FlugP7NG5K@H&G3z&`s(ct%QwPy7gJ&L(8!~8ES8%|SeBq-MS$ARf zf?&K#X57r(nUwQI9Wuf~NJ*fV$2bBq9$2B9;30@tn^`Lxt2@3tK#=0%PZZc<#1}7L3;?ur%^FS&0L|oH<`-hxqr7h9;&XY!6qEx z(FmIfa$k(%+z>!P;2+OLq7C)tm}ETGHx(<1355g=JV^*gDwRxTOez&|(v3yU)WrA? zmM$cd^dZ+smJgw{jcx5(yFIav3LZB0&P-n8r_8wkxLW z2X}O!dam|V$@A)#H>dx>LH$&=aDU66mrgr#O0}`CHzIm+-oNd4+p*h;_-96i?E2GKYd?FXBtDaF`HSN&G6W1pm>`4@&`AlVXbZ+>_Ia3bGbhcx)Z7l2y zvGzo(mEZ6;PZ(R>#kD6csy?1AkZ8DSYR$}r)0S3O)R?T52S<^8zvk;~hQ6P#f{Y%> z=(h@$ktt^{eJgDDiejlvGmk_oL&r3pwYlq=o$2SWBVHG}w>5Fzoccw~hZ#|Q5y!=8 zq^53}+Ex0YexOb@%6&tFx-hwY$DCKaVeZmn(`z2-*|9!4qbbkHr1A^~Vjc>ilOlb( zV)fW`s*Lp(|gmMGJ-JPv1&s7s@jgHXdvK0 zx65dPW(sRZUTvu5V~NF$1Nd-5Q>;}DJb92rza)o4Q6!#z1Kccui5w2EUAva+S-E%@ zHI{rVy+mTFgZU>4KDhBfV>zImE}8Az z?Xl_uqS6JGOSWwnlchSDRf#@9GvMNw-$WCmB%YE?98(c}vcFH4^$W z*iY5>m#RpGnKJc@gqeEhAs`O}~N6z9ySw3rHFzlOG# zUq}v`e^7T9s&-R^l~bl{*|6c|AHIB6Rpk{Q_~6&B{94oegC2h1AuxRMn_v0I#h1LK z9)0azXj=(XdzlS#ZkqbT1O|m8Qz_vO84i3vjv8WPQOB&CPbk~QqF8)5L_7V~U&Oq^ z2Mscn86T1sPdI2tAAedpzgQulXV#8KA@*7*A3cJ#IP33o2SPAj&xYq)1-;9E#l%QvQ}hnS5GBG2A+NiO}?0fYkLF#0XQoQOz)u~mLM8{zGM(dsDgnc1Ouc7W)K1(D+5w5~~6DC`bZJ2AJE3C1nVt1&z%`Krk5k z^T?E*=Eyt&{-O*J*yts(wV^|FC{x;^D2_tXcygBxTUksS*q}lkN!=TGH-cEmMnss4 zzkcPTR5+EwXwDKcBWl2_FSTWu@>vI#L;3N~m^hXiA%6Gc3;GWd||02DAmBx)>^I*Ju7 z0W=au{3S43s^EzaK|DApQ-T=ju=7Lj0dw1^6>$`QodS9k!E~&~2?2BDGF+&rjJMqP zT*Eg$+I0L;v}H!WgI;_7?mym&^6F~Fz?Y(7YvBti0248uYDC|AL6TnV>=EQ13jj?etJ5z zy2`B5k-u_^n-P%-3KvJ{1BOge;lq*xgA44@FozL+Nf}X6^WAeDnx?ZRA{)qDkf)Ib zAIy;b5pB1NvKs{%V?66I4B_e1>6DrJ2Z%|Uj+<>{h6J5kAqi;kL@+-wS!k<^%{E{wHjX`iQ&y<8p|jZQ^ZIKB4x!)Ba)+`RcSjD0K9F)2w)WsO9+K{nf- z2z~80PgV1cHx_v53>w52AAgAY1jPa(^941}=6S=m&O29cdE~iWEp5q;1e(TdRXjYk zwsQWgDW@)-apv-w(;6^MWomBZFO}#d^+VU7Iui|<3B&50cSS3rd2XenMn&^eG7Fba zKLdX%l$Qa>Gb~2EgD55*8kwNRv_GSur$_vmqng+L!S^HX6bRGP=CtjQXkuF0)eeRd@XKbMdULXpBYbu;JtKiyggN@G(<4`-DT4Rq^FBPd{en zS=JASXQoY-{eETL3}-Qn={Xi)^jtBj7qG67_}MH#2HUAg&TNf zUdlBK$V@_b>Q{&{#wm*Zjm9gCBH62heHD@0;B}L-sqtL??R`^{3Q}1+W62>Kx^{+V z%@5^BnnDc6^3i;60&XU**J<4UxsOfhZA%hDZ=cVEVv!^}lU@soKnxu>iPM^BD%)CG zue)~pV~?Er;g2JR70K_A_Bqwn@zmAd>Uv;RCAS1+Lg^^~PzWI%>=+NQzcbnku9m0D zrp*`ssLE7oKc}&E10e+f+%4U`PyOva5=$j|y{n(ib|9}P(YdrI7D|V+;Yi(-bWfsv z^Jc$H|9<(0t81!ny73Puo_rE|=f@v^9GgLIy~HGnDbw7!bNKXQZ!*mVG{ib;<%=Kx z%dI$e?c88=E-}veaFZ}TjfB5`{%{vw!ZVZO^epE}DdoXX|w&K84%C?}rBbmxZ zL>}u;-Q(3yk51Nx1{{j6nrVXqlP>&a=^tP#dU4>F$8wXl6?>+g3k3svXi_w+OI`;WStK8jq>xuM#ibI`OCAN;ZH zl|}=oZQh{)7K;P&&<}8n#lV8WkSJnKX95%X3><5WLRDnDcemHn)Fl&K=Vd03w04ry zL=wex$?+l}j|E{L3rq6A9EWuW(&Cj8VWA56k_`;GppUhT6+=<_O#PpL=wD0DOSZ&Ss$f>kX+-y!vLo(D3;hT zVNpYiF6M(gJS2glkiA&0s^BCLyDub1yWn&w8&O>NfIK7wrSOphO2#tGCI}+kDO2j9 z3>2KrBe%xGpL$NYbD*WFsuJs>Q%^l*<;sU4w^4Tl z!5Z}h97Bh|s3X8qoWu3WM7DRu;U~ZDmCWqDiGMCUYv!DbUibW4F0Ojf$=OWc{>u?c zp_wLgZsIdhW?aMonLd{V6+ZZng96%iD>vPA6I}`E(hC>oM`R`YN;(((O9lmEm82<7 zYXm+dMDIpKhD?6_3E?J`juK#5*fXnu5+5D~;b0KuVmOYy(DR}ZM(YX_4oh+wAGgKP z`*V#E!-hK0fOtg52TSDU=4N_TUPZ=qfnkh2Wct}a6kY`~>n`?h0g#ozHP>8&Ei+8Y z5o1k^Ei<9?`}~$iVG|8 z93WjN{iRc!=$QIYR?O^C-(Gjyx=p>+g)~NUjE>oOb^X@X9u&~rWJxu;bM^KcAMH;4 zfA;PJz|W#g9RK!~O(BI;$ZisPs8R%^1r)>+RPf{!>4I3#Q?VlUcAg%dX9W@AEGPE6 zQ#cT*N=JIll7tk}+ite+|1Dmd5y~rr~}lu#$2?f_lc#eZ+>d!_pW{9^do1y z?bW+dRVS@PVKF&SuGCv}J?3C*)^-2zj|=Iv=n5NZ>((x5qkvBMGQNORUfSnp7OlGM z_fKAb-@>-uDql!TI%$_8l=-WeyS(>-1s%V;chTs&@>37n`HWXiA3n@sC_QlfB6c9( zzs28BN-E~!)|UBe9)EoK-A}B%li-?#msM4lH#hE6TT_?aBaue8ak}e_={2>rd8fsm zhcQnEHuFO?vaq%dhBI-QCmOwYdDrA3grbu{Ar_SJkg*d$zM`UAF}# z``YS`+P0~O&Nxvjlz1*_Z*h>G+Gb?=h~d>~Ju_|8{-dfV_Vz8Q=qs=99lPsX4oOuD8s6 zCaElemJw-Z*Scvt9MClE(3bK$I@@|zjhOx4PksB8JwBkNqPdI2Y+wI|dbxCywa+?G zGnQAbTeot};>A5X?c03Bte(dnS+n5T>iUM>_V$XV>0_qNC|j|7(XBVt9d^?2rkxkv z@cXJ|OB%;ct*EQ*DQoRkKfP6y@~H{Z2u;Je#9^(b0F03i)VvdYRsGC+e(Hz9xYmfM;-Ne%Z;IhoiJ|eXZ*VY_A4+dG0y2 zANj~f%q%cSB@lq6f>(ae@I-i?mM0&HC4n+^%Ex5N%9US24w4`^2t#26dMZ)e^lHZR zDhY(1R{p?(lE^L!XdbsZA}PfxDC!wxPEu&lisV(+)TCX54OwICBV@#8wJi zdhx@mzRIqOs^F8U4KmI70Iu!(8+2ngi=Le~=f)d#(4MZ&6gV&x3=FS5-4zWZ$1Hw! zu9y?P@P(acOslS`d}`jJiSrju*kQy6FZ$5yPB}H&g4RaQq?>SQ?>+b4^S$qWPm<f9e-#n&iEv;{fYYn(?cB78CZXbbW>+B=3d48!ZxJ+lT?EiEC@e+ zv^#cf%2EYFlH&;v0QNxUmwf+5IJClPjakT2zv`cEnHLgC;>jTNbD#Tsx(}boS5dL! zj^i9Mh`9+Q4AFI6Z^guzy^$J2r$&yNe&mtIuDkAkzw@2%zW2TFJ>i7oue$2$KmPG1 zNn~DKUHRVkzGs^#pb>@=Yhh|-1&ks@rR7h>39^xAlBG2+Muk6)`4VZUp=p7qPMzwo zh1PFsY7$7xT_ZXJ;YgoBGC5DiT9G&*1udX?6kZf_v?YEU9PJS-C2;W@Z0 z&r8zg0=%Sv-rO2{3I4BN1LlItn%ZaYczoC2d~@WKDVZHv+Kk2q$G!T<r+K>=+AHsZZ4JK9cgm{3~bH_kMQ6} z!9c+XjI;o}X7gD;TO_B%)F)GH*W^J;$kFDWJiEk!R7J*BVG9>iNWgfaB>chwKq4ga z^@{i$?Y8wm&fYe(`H9HP1%+OzkKg>}H*YLQ7wxHSvCi$%0`s^vAEPw0o^;Ylp@62K zw;8S`RbUZM6xIq~)}eqF3rv$q%dUq2RANq|X0$tbn)Mc72)X9wW(w=G&ptbtc%T)l z2x6UqqM-GB}l-FRU$~F z(tHH9*|TR~ef8BLF9!VxCQsz9yMA_PA8Dud8iULtXkbV%E3I>uajI*R8H9_eHmMYK5+Ky~8ICU%96J1DD@* z*PJ%$$SNP5Dy3m#I%rjql4M!A=64Xs+?3c48+U2 zD!N9@7a;H)Q38=2I$YrT#yvjzvqwI^Z20Uo zt6Mu9q%U97)4jTzj<>yRcvU(klAH;nyzH>aC#_ny=;1Q=0Icinq8RE~-2H?O((QIl zRs!Y}+UWL4Z`kbvqlS%*dzmSVmv=Aiq=Bv|udf>3P?KzgYpUw^8}q7L7GG7>Tf6tj zqw8wwQ($Go=-RPsdgpd@_O7j3x~`|Sp)$Hk8kv)2?o3^cSbnS|cWLp=QJQLeD zB*J#RtnApSXI=TwqwVF(dskOKI_#EP=S_dbPOs0peIf6Z!FF}oC>zM3qOyTqYWs@$ z%iC7f95ic}V~*K%ze5@uYwr5z&#jvCRAuAHl`Ebb|JqZBjU2h|zCSPh*^kG5>FbA{ zclPpEzi!^W_sqZkhOP(is@-8k&4{t8%$8Mbd-NA3>#_s+sI&BLI>7E!OK@QIOtZjL zBqsDt_eL0;h~kPkqY)v5*1FmWo0v=kzd%a`DsR?FCKsnnELMYnNFqlHYi6NM*|!RU z02%Rsw}i;|HDwgBR)E;GsfV`LbYOXDLd;1D59B2wa0aP#6ZR(gxtM4`(ns@KotiH! zS$SYES;$eiDaIUX-&dei<`GIsW@0WA;Dkh8QNxg%aRQYhpdY*_4z>W!lSo*>^myaF zFZJH+DvsWCSfRIPoqKTXFeTkUIu}sko0@%9!_v5eKhP*TK0&?gwY#m$ov9V0#;oh? z&_k+f%4*iG?rragQvycOI$Or=ovpXty!Pb3ZydEl8d(Fy2|vl{{;z(vY}s?^vS*9m zKG*4(nrqfPx2UsgbyZy>EpvH$TTR`l>K#Uz4A?-+7O%?cB%V<{+xICaFZUr6+Gn2VR1v6O#ie!uMtefWV|)z^ zKx7fmcqJVb1Nq&j>{;wlIY4CLRUbC!B0L655qapdhQy%5$Dk`>K%^cX12a<5deB@D z^W;**oKq5b@f=;hd z)$!`7X4toq+f|gZ53VR7oG8Fp2V;={3k=(-bUE6{JznJ)&a36vwbx$v@WYQJzMU@E z>1Pt)ap33}{NQs`xhKLs|M4H+efsHV9(w4Zd5_9rUZ4jOc>(5uq$HKVygQ*p7tOnz zRC&{sr1Gjz-~oGL_~yaDlNX1_rMHgZ5+(e3&Dy75Y?E&c(}x~<keRMu$;MD@`jqdgQqO zAx|hH6F#1A3`rh`iSt+?uvzch>oxra@t#~Z=8^}@bI&dQ=*K?3diAQ#&UBbHb%soe zAV1`&w#E~=7&0`QS6+D~{Kdsujyd{(*F;w4A}T7-)4*}gVDM1`>$^}x8-RQ7y|=-I z_sT_bI3)~!U=ExmPcTB<%VY~Gik|~S6mobR9fn_2-XU|aE%O8(I1x<5id;%ifeAeW zRvZml0ZX|# zg>N9XW?-BBAd*ry{v}X4}>=8DOr5$L8=37tdXM@x|Cj02AZv{Wdo@Kl{(>9($aI^AbnPo){m8?Tvm#?pcQ+@8W*Iu9g^rszdBLvv#CA-7y zOSm9$Z6(_5n%ZQ7D4NBsoi~79b8y)aTUFil*I&<~oDq%UINSs>7&ib0I0O;ZMKX}k zGM?cx52@FwF|9+Iu|z-i*kerzk{9siPzp3~krw^{fF%5(MlaGP z>cw=1ITdX>$K31tf62nr^{@S-Icue)<4tX9$)B{MM*o`jzK{Oko_kw5%Ddai(S}_G zLr4)x2h75i+B5}{nR~k0ZhN}^;w$d_=eHlF@itwqq_lIp0X0XZdkzwC>bL`IjIaLU zFIV2Yps$mW=^EILoAR=1TE>(Wle}mq>Jh{$P{+DwmepSP)jxjufwv4yR(TUzgm$y(Op?q*;O~DHnafi3!;i&IN5oBe&I<1QZ72lu$qx? z+50oMw*2yr)xRzumW<^cie-0LTUA}LwuWgV;B11>6y>j;asIe@lmFCu<+|GT-XyA3 zy2ZM#!D6JMtgCNw-@zx$JZIbp*3B##6Zi8u!Ihm0s_X4`3?JS(x}u8RB(+oJ%rUcW zTkx~8-r9Y~9}P^iGl3jdHFDU9+Va(XYkC(mf~Kt&McZpbsJDCFuwl-zmM#Fg)V?Fy#NI+~8{$F4}MJneV%mNnE5cNsv9%W+-O(f@Hp zV<&aha3UHS>esGr%_$jOKjEmI-tvdV-|y-K*mL`m{~S{@agXsYSE~b4>OkV{{F}xJ z##2_ldhz@n(@u`q2O+5X}SFJ%dzxO5CFrFVGzhFIj1THh-JV1 zZ-E#!n8;%7nlpQ3#YVV;Y1Ai#Dr)r z_PSvH{2%@J$K;bB7)}%_8nZYP4S>LDSKhgMYcT3;^E-W9KAGzL%0)9y=dR$w85YH) zlP50{mRUfTu#dbm;wl+Owci3{RomkG9xNX&hwPcL;fyPH zwRiXI^Rk_fIClKhY4xK_QD*swmA~xhSO3eq-#zVhufFJp>*ikb%l6f2m&*Z@HLKSUCuX>lW(>KzyX#@7^CTPd zMDmTrZjk?Qeg( z4I%JeOOR}j*G)<1+atf1aK2OnTTlZ|=Hi?wq0^ETcv=joPoK?A;Y3lC{*7#$A9# zouuDf>5z51;nibLYWgrOv$c~;MhIBai;{37EWb5H_kk!{ldzTRlXHDdBhAM+y zI(s^5%Ce?R*}izr22pl}NMCD3^{7+MJ^1ifOxV@+IKKSZUAFMqRdZXGJ$Ucxg|-3e zd)Kb6*=^<|M#syZTYS%->UMv{n)~m4>dGIE*=vsx)0=C@O__Ss_HA4x2C|iRifg5`b0iYySXU1%O=YYN#03HrN2t9@QqPQZWn!+bKQK`I;7;6n=>;RF3Yhf4I= z6O9WHBG%LNB$aJ)NCK2$)GoX3>d3b2Btc=!sn3Wb}?XeaF)#|#_Eqxg1G zmD)!gRjjRX%O1~|Ljiy+l9w!?h2&f&Lxe~ARXuF~(=8gwvb}TJ9k+zFD4j=i%w=V7OS}O#j zFR!XB?`&^f@T}L=E&<0=S=qI&ZSJ+dCTV6@EZN&g;EQT%4teK4?s3TB#jTF%`|Nqw z(@!pY?7phT(V5ygvBE^+i{*lKtYQY3oy+d-=&TqyvTNSFWlQ@%Trpw#w5~a`F}M$Z z_VX>b-b(wt)9$;?d+hNK{o6P0fB2zW|M$24j(N{J-*Vo0Pu`KPkggdsdfmKd+3b@F z8ioz~$$$LE-8bEQ+*J=x5-@VUi5xa!J>AAHz8#%}xVKl}H;?`ZEd z0ICw(TVH?(xh z5+Go?&@2;;*niRKNEm&O{MOXeznOnngb-nKy4b(h_zO=}jVqyqpi^fxM#0@0VoN%B#jMezzs z^r%=Gx&fqeiHwTRfyfPi;pY(MnaA*J0&7^U964&iB;RHhQ3oFQGIN3L&wKB^&!SS4 zaAZjJ!yjHfbLQU19y?1DD}IhJLsGG5(Q{c|=^`msR@0|Xmy7w!qBwH#6e1NX;8=P` zjs5heKMj%sj4|&y=bR(CK<&j4Rl`XL*bviKEy2`P5SG&bIP>>6fmakNg@uxE$K z1WBIk%$zB)c$Zg9qeWC`6HaVneTY$0tn1+cri!Alu2wU9N+pCVCf`o}Au44%<@6HT zmug@uYalI4EJ3QPS3JJ3{-f`ja^OKkTeD0WFCFD&tJk`Dw_=BeviiE6-txwkzrL}z zt+lM0t=Rf`baM$X2r(Vs-jR@Qk*H+F$Zx7+-x|7O7RSb|0nDJ-YLIYAxA@!N{?;}5 zbk;FJ65MH%8LOJ!sQHMVki-a=%4BJFEYcQoswkPp1f0i4s^G9eo+m|ZXrIaP2(aHv zE|-wWwmmV+NSaEVG?2uMf_>+ya^!@7P(bG)+t3p&T3D9(ux{TUIfc`k>c;l*2Rtp{Ju!^4CBLLTr4a8sC?DS^pf zt+gni$wp3`p(hW|Jtl0*V$FnjO$L>kr#jC8!UIMJpj?hM|0d>a^M`(d{t^uF`paMb z5*}I%lKPy)?GqUdZT z`2R|;$$WX}Innq|eT&r0<6h3{y2`2vwXOT^GJ5Q&hW766xl7vad%CZ)qSiGYjMAJv zW{;M{@tu=4)76;=o+ba^t;rBhS!fhs43m@ z+?$rYX=5Q(i9oi}~ljvxEP#h?51Xa4Tw zlSYmlb@mx&(KAx=M#osWa&@Y#4W0g@j|D(H#p^r)rDO0AZ)gC?LNQ)8M38!&aH_yr zvu1@d)T`#>*dIV{U&qczp6dGRuXp7%ohF2&KALD066Og@Y{BSvWC{ZscnC!RoZrt6 zw82BJW=5df(`zvKr>3#@Pf|jO`vEARgU-Mp7r}1SjU9|8ZejGXMcPeJB5TV$ZJl){EaNo{F);}SpK@#oqXYiZ_hh9 zLzW-?=*Qpu=C?8ioF=mF?jBb{AAR&uQWbMD%jt0djDVRl_hboF)KuClGPo?3MXM!6 zc5yS!a;(1TxD7^u;gr;UK21$cf!~m{A!PNf`J`1?3rV}4M<0E(*Ag;{B*Er2KJUb@ zymIHkBCrnAw}TD=Z~yF9zy9U7zV%H;(2U^*rpp+@n_ag>8cO^@EsIpft?_Lk{Y~Wu zsU^TK{56t$s+{oigu|IFGdX8CY~z{hH`YtR%TZfwB45Zi>mbM`Pz{cXUKjKajujG{ zmqF){0GkekS^Y=xbuiiC=ke+}IBoDKQMM=b5ZeaPdjm2S)Fr91aa0nvC9g7q%0RF& z<8ZS{N_GR?ay>#JAl)d!MUse%PDKOY*u9V_L3BQg~Q@meVUaiSTRt#T@r@+*Fdz`=bUqn>?F@i9Uj0qbxa0gEstT-95H$1*_n7i zMy&djohYetfWYR=ohzhSMzf=#6Spj3{{>q~)+i_OqnwS8o+C$MdU1MyR*u#NlOnLyMM$zESKeDQqOA2FUNPp)uRdbTsMNUO9%)(fm7m>z-<%}O#$C`o zWxhjI*0QkdzQ^Xje4nWz7}w!0{Rxt4g6Uk@j*XSyc<-wkhu72jCyivLq@ZhN*LCSH zAL=ge_HAiP=iVyD)%9a4ThBjv`Ux-JWn|&Y^;UQf%wGDfUq5(TOMO{44Ne&?I1&D_ z=jyJx@zFOQKU3DE@BvEyCVy27Q9ND0fzDt#iB4q^kW{4wmx=M-(^VM#u3u+6@S6Q* z{d%CbH;CDcm*56NCdlr}KtsP)E{D;DI5blcRiwu2S5yHI9=6OeM)D-NC$fuq0S0xE z;QN~{{iICeJq@t*7lAOlu9_b!a7x$kv_u>+V&vGd>8>H+dXNxw@ux)Udp+h9R&;Vv z$(iaxze&kA;R1g=i(nW+@iiT)bq~n^&Bdtg>`#ME$1>n5d%CN;?UuRbx2&_bdu@5u z+Q!LihApn?UR$g0RaC60AF=;_2LM=j@4dY})ssbYT2 zlQY69;xyNIrG_(EM|hrl?vXY+7)5{r2AHRenwpx-l~fg`!YFLSMs^j|PO#_^{iD(+ zWUI$aUi;^p7c70YtEaoHtGjL4b1NRYZ`o6i)r^{AgZsfhyHDcZlyzI~EHb zd34Wn&OGhSr_XC?ab>{CXP-T`scA%Id1GDOXHR|89{cV4=>2~oxUOBj=3l<@73XtT zEL*1UmDN=(yy@nLrcQm;ThHw2=)Cg>KO8@O`nusjK6B^0AXK}`@NLYHtvkE$i_du%W0eW)OH zq!4e4Nb;UWkL=4Iq`?4-aK@pu%mxTyo2@8)R@hYPevrUM56J9;Z0wcvOQ}kwC2Jy9 z&?7memEpkdl1zmd&LIH$kugK;Iv~+W5b|%9Dflx|_RVQFJfjO{Y zM7b%3kf;iBxO!tDI5@ddz)V?h+X-K_D?o-vL(t=i5+PdZh$D`On+!2e^=7$5C8{c>e&lWc^dZdkK5SF3pXE2C&;4h8eZR(ud zH%Ot3x>7MGopkaiK5?-S(hGiv28+kHz3n^=_ro7v1x(Z9Ksx+QH{CpI)-fgIMCY-x z_LUk80dNjr$Qak|p^BOZsSa88gaVr13r-hxVdDangn14-|kmIA$1wRH>ccxvbG zeSFfcGs>K9Z<#;u>i=B!>F@THE$f>wv9G?W@~X8f%I4RcbN(K$KWXxL?_2TPKU7b4 zNOS$%wz;Ioq)UvWfQ}`f`HYg0zyy`4&Xagb0gZRZL>2mF;%Tmc4y)J*H{)(D4bKZ7 zmRy#sAl*Pj4q%VNA8Y9$=Uv2rcjXgN7)habe%_3>9w6k5B1yq0ZP#101b#~7T+AJu zqtybD6hpTw&gB61t}T^qfS-N#+14cP6&cKe^BFf%1s6sVPY{-43BZy)b!43uFctgG z*zw!%Klb7)?)u$5%iDW9C`jll%6dDlxuxZ`N6Z-BPzQW_39tiXZ_TfJjg+UnuQF+C z@s&iY;^`@UT|FJ$j-6)b=2a&*t-1NEGta8ZJ`R>=nmT&^GT^DIs#j56Yc{mc zOBOG={IV4Wq z?fo);-7A+bpY!yycip|>kJt9LuBn*5=h)_HWy_XW?$?eS=cX?^mEmYZ(q>T|De(q(4-VuJ>W7uCY?tL;LaY}G)7P*)){sDC&EE#|EA zP{Bk1;y@k0UL~ZM?Cf9a%%uN-2jJBbg3%2;n7PFaPR=jN(*`Y_j?MtSNPG$AjlIHP zqOng2XG|F&^-1e1D{#8iS^||L{L^f4SW498x*2P&RUh+VMNH?=@-b%5tfxs%mXr zSN`&&XB>K1LReTq?SI{Xd+2 z#)H54{eNak;YW@;=J?NiZgfTEwHIC}miGCKv(B2@)bx%EFC+?5?r4$JvhCeFOr6qs z&)rwuamQQFIdAcEOP=}N@5W7?+TGT+VBUfQ&N#EGvEhcV{PX0UcKYn6KK+mH|0lZI zefHb;{s;eJ`AvVZ*PeU2j;W!pzSu>eRe{82avIr5_tT20PW$@kn}}_8Rs=Her~lPU zQBv%9#kz|qhLgS^O^X_xIetX&SqATwhR8iLhAqEb!~&*>rw-r(Lp+5CCCsi(e@v}|ydn(0 zKww-+_~yQ{+@wWPrBDSv$)dMX#)heSdf zi~C99m?k;dtc@5sMlE?d_Qw^|A{Bs)%xkLXM?dVB5qWJ;x5jhd=zG`STa3 zav8xK#Y}CGxjZi&HftYHNiYx@@DYfG;@Gg|@H_ybusY1=KmWP3K+CqAi!htzPkCoV z4y4i$S}^)~n#ZGQ24c6t?~OO!7+9jbW53wg$Mo*aeTtXan>>6JhHzJg?3qL|w@^9M1=v&@_| zYnJ<4oUVwKzC6StOf2WM_}p9yA}xd(R9a~5uK6~SBM6#CY*a{&HbU}N%fnwZ&)|i2 zN!HtnHtnvkss-;NlIdxtNc9suuq0C*Lq$n)`Q?}EOOz6^6;u?wB>@vSOOkKRYmh|A zfLk(#Lmo2FQ-ZS?Vz4L|reu;b^-BUt3H)|_eNi*pt|fU1`Tyk_@ZCXEcvbbf)op7} zKJ?`$oXCE$>&^!r`{ZZa|M%9qL-s5$+bIcsePvbSM%PqNYyJL@AD+Kx+>YZa8rQG4 zH@AL*N6;@w7_%K-%+@$2OL~Mn+;%-V&(L)PhAFV6r9~7C0xl4WU5h;-!LVX8)@unv z7qSH|b7MGz(bzGI3#@U&fZQfj4Vh_R4y)T@b|Jxh@{^ym z5>SMkfPe{h8FK(uZYgea8-A=)AP;y>acqn`)rk4h2NCWWn}mr?-~kh<2Gb@Aj1|bs zUiLDoVQ7WeYNnl!Wj5s6PRpKk)>#_VD{KLb4B%GyH?UZXA6Y10@OJWsUEs|`i3>s zUHIDF{^_!NGI^G$p5%4<#b*|zYcZoQ6-s0{h;{bc4t5s>H0F|4CaL44UiUwD&UNdh zbKl)bm0j7;gmu%C002M$NklfmOt6&5mu?Egl*QHt7%;Z?4*Zs_P-XAcJbHK`(8zueQi zwtVTT-erwtBa?4Nh7W)%6iMYPkqCw z6wt;6jxnuy>Mwus3r9hzl5f7{rd@a2^^k+pF^eBuapfOwxUsXl(_zrY#)fykGp(iq z^DVdBI%n>jxYd+)1V6}zQn}-$_8>pz;b3a^g5fSg-~7RU z`uyD4D;|D)!fv~)ShD2ES01(WzI&hZ73l2RZnqG8;^K>mJzxI(7ytXWtb_00d+&W7 zn!R-Rh=%?}=0JT$12MQJS`&@*E+Z~_n)?~Jly9cm;|bv~wMy3Wz2==ZLUdOq7ls&B zkyxVxfWQFDpMfF7CxH~EbSnboE)|PQHqrD8WXQlE3K%DsaDf55ybw%W%mq;xFi&fE z#?(Z8sW5Of1ga7w@Cc8B7;#19DZea7PcV_=K>kDg=Ddm8+H}~hBKn0lcB@g`am%ogR?|=XMLXZ@-QOs1h zKu(~iSL_r6#Da1p+t7nN#OrnMe)oGqP{%8>KV2yGB^`Upl*zajS;DJXd-duyOKe{+ zS*k)Z$bOPFIG=5GU|bNX2ub$9*D5OZ-g~B9mYsLrDa&-LI0pP`FVAIwjFcwls-nby)5zj)Dk0?zm$|jY?+A#f(G&ART?`Q=cr!r34a&404As>Qa^*K9E=< z>65Xlil~?b4L#Oivu4d=gaiq+D$`v(?mfV@Xy2%zEyJ6eo1?>s1rv28$2^xIJ+X6~ zp-q$E#EBE^D)DSs)$11vZ#d zc|zB9cR%{p_w)>3SO4;vz3bXdECx3r$h^_p(N%x&-raLrmOlPu19Ab)0Z7|C#!O%^b9@u=|1aO{e>ph`=&*={jCTL0E zcnh9L@{kMtuj267>qeM`fpQUKamhH{jO-#YQ3K3XtOT%82tz4fgyAO}sUn#c3mbmd zJyRT)z!z^=HvO{}4*=!>?q3e#WoOElqbM{Z(n-VkHWUC;cz(?^U4!*NU?B453TRRe z(~<~}&29DIm8Qv^8xih2l#_|!4}qSdS+|T33TWg}K%<1PsEX*aBWiP>#hTgNw0{-& zOeH`ARp~C^6JD_=8VCS!AUfz#qNIHAnYi6|oHDv$&hpN(zOM4VP$u-PTHD#K7*Qsa!1n%@8D(%YUb zf4seRxuNGSR<%^=ZtM~3p6PgKa^tk9GEbAYJl#6dK`F<-_YiRB%-}==?A=w zvO!lHW^0&(A)|p(gY_j%6Z}FzzUDQ5_xR&aQu2C5`M-bTTZjDc5GNb{>wo?`CCQfg zpZLTlturBkQ^H~O!(0!o)e>5U&V4S`P2wY@_uO^Q*S>b?r#^K__U3Z~^&s_u?#^yp zV8g;CZXgRgkzf4cmlHjf?ip1hxo($-~WNHe)V6>8c{UBdP^vjgAEE1BSM4m{vs)v)mH zdwbo(Rn^z+iec2Xt!Zz0eEvOmE&bDNs~)|-Z^W3&i94oNb*Tt0n%ZQ2B@_!Iwxr9c zI+gRhmNi8rL;6i#d0&E4wd>w7K@{Odc{NuN67CdfTf3YnztURP}pEtW0SMhcxW)fds1DWs$4#AM(*e%))^f^jGO={lmyhGE&Jg6lXk z#d%4-f6Z6C!VP0(Wep?K5xrZ!`Q69wyl4ExN#$)FbDnwp^soP0*}}z7Kl$XFufD41 zhgZG)kV6*Cn|t-uSN-viH`(@}Pob|2;@7Te?OxYWHhPEOfBy3$#_jNtZ~Xfgjydkx z$DbVanq!Ae9DBp(zB+pBm^rhbe#g7tr7dp1^)`R@(qH$6H_cnJ3;HArr(NrE2FynpgXzVW2&W-tLmE#get7r+M0lQWyp}v;@WxYAjwHam26--arx|BTEIbMo0CMrl zNWyI)$d1^^S~ypvM66;)xMyIq^O35dWVxbI&2}Y zw5)4sncXt`nH8&+wzZ}USn`=SN>N>1HFM@(C!c(hV=Gv9WV*$~qesm!H?g`ziJF&7 z;zwDo(K50y9JV+M_yZdZ{GKKwn#2f?5T|y8=U{nWLI7k=Y=5voE{DkzPM9!$6BAh+ zEXz|xKMy=E=&;7ICW^{bCp=a|1|Y}JvWh0!0*Ymi<&v~|Z;ooPC(ybc%}kpWD+O3f zT7E_rB}oE)!i0%rHtO$;fYL!xl4OftBd?HERIIZjoP}XaOA8$|eKe-W&sa(?wd_SO zFsVF?nF>KCm$goc$~{G}2=@#;u0N)4WmZyB4}rX?si`Dw$*ZG;B_Z4Dl|_6>0dvez zW0;1Jjltx=FVF+0CNSK5D9hU4ZJ+k-B4jWInSvDSUM3%QGM}2u27~3SdvMeihsYFK zr$+20yR&6ucoav2iggqQj}2-!2E6^kUs6DCzq)-1^ERvjw#}96<}a_j;H}LEAJlvE zy^o%BVef8L)wQF0+t#h0=ms+EZSSmbr>(<(1!;94ax;G8HUrGp&VO+;Hc$vLeG&qI z8SVI;sc!%5x+oii<^vOhK(<0*>0oYPYT@>~NM4*Ag4bhPJZ4Ih#0#MkJQp(xcpgTw z!F+`a!B(CJ59kdggXe+Yis;CQNC!voz8o1k?Ok&g#_p1%CdNR?9~LKUB|Lp7Mk^5Y zyb@lSpHSvH`sZs2XPtExy$R$bB(X;vafFNiG>7Ayqz4F#l>kZPUKB^7u2h{UZ6pdd zslp^JClXty3lK|{5W;AbBDF#00+N?38@ZsoSkmxQaOfvN6=0B|V(?U`90^b8&_g91 z;qeSSWDeaDJqROiHa9nmjY=k$6yg7``^$-z=F$;0?Rz%um{&rv)cQEH=wbDBlXe_A zXVvO*XSe%>v%dDuF846hWD02YS4@@sX>=4uDsOq&WAj$_(1Db9^p#cD_H_4EbS&v? zxb&Czv5ZPr0{5{ErWN;(T0BdeuAQc)tbAr!TTfSaC^`^8LVRYyGBAU6m!)L$J=SHOdGw?Sd4#2}tkoKl99-fBo05dqswE>glH4>C>kf>@)&m1>z@5moEF# zm%e=IrT>b;z^Pb(`Qdr@yWeHsj$Y%=JMR)GEnDV=3m37_0g!>EyaN^UQl?3)t~xtA zu*%3f=m8m2o_OM`U-hb2-gMI~&h)4>nVQ0s@rWZ{0RR~I7uof9g`^MdsvSAJcGT## z^PYL~Ti3Q+v&Xcjdh7FUog=npV-xkZuuPW%^wyf-tTv`pp&+)5F?LyxK^N?tb zePn(M-DBTZzIx}~W=e}Z$On-0|5|e| zdEowMZ@RAY=_l4MoNp_zy0R+W{hq!>+e_2grRMuTZ#&RkYzJz)4XN^1XO?|#?)k39V0>wbSn zQ}elReQW)Q#=~BIC}j;kU|mfeiGjDwoik$O$m+Vs^RJ(J z%Il6fZs`*(4?gzL=*g3vwW6uH;`>*CncCd+hZ}G7_rWiIX~OW4!w=YR{HPsNmqD4f z2M3&vr!noj+ci2gW)4wp%@~>?)w0y6c|aI33FvL zCdp_3dnfoQI2Vvok^Ow2i6j{pzlh3v3wmTqt%DyjTceP*DM*GCm}4;FD4S$K*-eax z7PS%veq9X|Z*xhO@FqEXugWMpk>Q)*^0K^}NnTd*h&KR#xGQ>-Pigi^WW z1V_RlpArI-T}~C8kx(6KFL#4bZss_F=~M`F$qDBb63-!X+2TOi!Kr~9m!x2| z9U06}hdS}Z6C6F%2b`mS{P8C!?vz7qgI76ey6@{#75W2nW=p)|k3V6=@Db&eJrvN3 z7A;^J($SIjgH6O>cHMOsAJ+*w6(p*~YhJNiPz3$iCx2qUaAV20VWpWbObtq%(;P!G zZ?Yl{U~;fLyaY1FC5``J$YK()5^_9>BPu+)r3-eoj*l(b9taq*>O2tAP8z?ql$drh zjGTKA%b%8Wn)nmgH-U8 z62>^r!=na-7+k7IzYT5{rOV40H705>m9kbqX)#qhGGq~_Cwo-a;Eccs^ld69fr8G>%3@mqZNMn^I(RgldZqBuV zB!HHd7GEGFD}%vj!{#)0hKX(heX@g?Wn0orN$xZ&mCRbGR)#`-Xi z9qb7(NFpi}m&6fM4pQmF38u)4i{3&XIvB}|91@a&8H;||td`HC_#la#nTDkZlMuv{ z-EHuC^|d`EwJ1{0K9=qLn$nT{&N=5CMT_suk{vI&-~#Oe#$@dNK}PEmTHCNv$)|^y z4)e9g;IfCbkt>~5AeiEWfndaN!lNvMkwi$e3z(8tj@ZCZOdIgU@W3C}?h)Z8 z3?aIcr?e_i&n$`pu22-UX(9pq-*6SZRq2~m%Da;)qu+Y3$b3l931MGv zSEjm1`6ijQuXokjb*<}Khc#rDbVKL)HxZh?xmR93qJD>&^{?pYZM}Z+x7V#@CD_^3 z*1Mqh!R2cgj&7XTn|1-pIyyUznl-D}WGbAE5}#GQ*zDK2`u=ZKsbDp@8B0x6F;%wb zbp8eB6*J55h)n7~iv;%-e&7Qa@f$A`&>#&rbXpvqfBxINCeTcmkt6YH0RG+Iy#~KJ z>7>`LS+knBi8h*nxpU_cD09e7cpQJmnq+Fsju|uBT9>jr;Duau)z#ns{uMj`9(w5E zYp=cT#1mhQ$RaBMyw_fP8r=sRu>bkzzuoErFfG8+rAsKFvkuvxKR<%cKmR-|G$$$Q zA%D$ESxy&2H_f%RwO)7K{|W?Vt&)Sis2c-KF7p$^@De|J^66?0*c}oN0%8v!kCmJYhA)smkIFqc@;qd7J<#g^ zC3u_zfJg5VD~bc7H}VKkkZ>f5_}sk=0jTtk3 zm)%G2mk%%I`eFx61d+dM2NZ=eyL*1YE_Z+QAw zzpfl!S>Y>=Wo2(X?e8DB_Bz^U{`+pcai3FOf9dfj@PGT8-*#S@+Sg{b+dmOKW7l2w z+GCHg~8mSHMN5BkB3%G13}^9a{|>azcbRH#d`$>GiPsK{UWWF33(e>5t}Y5EdiLRug}&|zF2$HY?8xuV0vM^&K_Pc#>gf5wkHQwOb5_1 zZs6#ziJgwA5jbT^QOi66&ksYk7&wDz5H64n1V_XrjkAt~2XaW1h*DMchNzj7A@`tx zhjs9$KJ_W^{E`R{Q`TZ$0Zc5s;)*LwE;+CyuHf^G5XA6H$b-=lhS`mh4B3s+MhQnx z6biz~i_FYeFG?2#;6hZ5V!f()1|MdtoZ8$Yc1Sn42$4kDl?y#ij;f{EvuCr>iA7WB z#OZCL;Lt{`4vBwj0)sXhOm%`P2P&eH-|>zMDVRR-iAyZp6xJP9uYBckcE=H>Hf&E` zc;P#l!f0PME1?C0iY|5Jh*A6Rf52D% z4MyK!_+qBg7GJ}!N0p?C#u^M6AqpFKq~a+_TSzrTUWM2pys#k#e*ItPVTj5yz%?=& zLeq#9#c3&i&H%JLv;Zd}nuRxA|J6P)kPSu&dDO6H_=g}R+bXloKV;O_2Py?>70obF z9HrLZ7|}aAAS#tDb23uBAPrA047~E(i560E7@GPC^)w?4j*i~89|j^hCkcFc!s4s* zz7)_URToLzT8Xyc2}35wZJ0yh^HH24{w?#%Mb^aNP|iSGf=8@CtUg4PptA&KYhI(g zBqc{1ZKVC~cfX4cSyKGSB4m4&z@elBW-#$vLs*_xMlrcK)&+5^ zH(;q*oDhGdY^#_ocpT9)tllE({PWKzpM^gF$V`-;5n@A((JtL6NyX+lOA6tPa2Z^< zESNubjK%U7If6-1h$G=910oJVoZs~w0*Q&9B`)AGUve8IxK%p!N+1uNsqIR)NnrYp z_%SUZ#+hSEko;9%gUu1*>FBALQ`-$pcn*{)tP3=(8Puxfhk2L842G`6B&r}@nQ|zO zc5wx>uQ42R%rTZ0PNLDyNbY*9xWx}1bx5BAGD->$Uhf&3qCA6Zzy%lT(}E|2Edmxh z7a>K+oM3^`2O?xhgvEq|{UxYM03w!L&O$_sQ?fJn24g<+RBBH(T$HaNlHt*vP2 zb)CL{n$lGEb;c*NDtj5nQOI_ybXPoQsNlwAB0DNow$aR>9oDwCOy$a0TW`8f60*N} z=ioaU-TGWnUfDcyud2CKW#yd?%QH;uX>7Y|@o$cAyddh)2?0uZyvSXxL+=D+g-sQh zMN?ZRf5bw=UxMG*v7E68v3eIpeVho&+Rl9!CBP-GfzS%}?z``a zC8E4O{_&5I*F^=e(R%jTXCeF7zy6I_;kX?Zu^$nxy+_urz)0NU>EwrBO)Txv##^XRv^2+8N5mqUl>)|s7i_>EM zdPOn(h4`TjY-%<4^JpwRGgx;KPrwK_>F5l3lyC(n3`B^&kz*4g3yq6!ccte`*ZvcASqqbL6T>3h85C?5u- z$Zt+(I4_ilUayWhSC?7RQcIdflm{+Z7`{mi`o`Q6UD z?l$*{$Ls6sKKq%^Do#gd2aD;I&n=$yx>KI{^Bwx|=%%To;%Je|*l?hM56-NcQJZo{ z9(iO*o#31#+veuxlJMei$fIBrE>j-%vm7mO9$WMPh}XP_=dXc5xcg)|?7EncAAT@7 zhLYGo7!2R6!IkKP0v-~cA(2E?l%O5*Rfnfi9~_lePF^}5IeKDuHW;{)R1quCpeApZ z#OAMNoY)n}LpIA(9HGh{RSl;cIl_Diw!AI!f|LMk%`4>4n%pU%`HfbB0}4++{Vg+Q zOn=XN-it#0=e_TJcT-bSF(aadS4jW|w_tRuQ|z+K^dpWq{JY=1Z0_6()l&358;g_7bRJxZAn>jRD(S-6{uXHX^nQF3y#q$wxl>h!UZbuoCT~xaf1ye z5KmTAU50=grKJK7Ly?krwL`;<8u#!DCdbcX2g|0Kjk+Pz>Ub)U9XbVc3Fcxho8^z< zQ?Q^P{*rzLm1+@)bsM=dEvco=%4=i5vCuX*Ic;Nm)<3RUFy|D!0VB$*v zw)i!gY16wzkZYYS&SIM+Trc%*6Lc>jd8r1rZ4IQW_M8P<(YEx2mz}uJfpfldS;rr5 zseSqWJ#FpyW$Az}&3hB^n}|xB!T`pdoy8+en1|SgkVm19sK{sHq)AR;IBkcyQ+kGh zGj*_2WB4QX$9BWV3GKm>MC~`)#KefD4er1Wf_O^MH;IB|c41e|DY?=@47|sZ&unUm z=vbmHHD|uCGCNQf3 zE(eRUFcN>`8{a5U|MU!aOA-B(9-lFhKvEHjAu26TzG=^vQM+lJTNg{vNtaX@E<8!A zo0j?OrC2Zils|zb2#Nq#ai*|Mxgu;B841n$M1t2lTp-hv7NRqHTp1Bb(wDIK zlE%5BI~ihE(R>V~&uH#PEt!nrsdN)Cg((93cLy!yvlZ?7Bm=&`&0pF;gpF>PGJV8B zk9FMM-o^&dg)?1ut^3^`V~^N*#GcB$-@f~N{nD>hR`wsZ-Bdx6xp)$Jsg$r;)xz_q z`Mqi>&e_E`@;^ia+ig`a=^+cs^QVJTt(fW6olbHO?$6Q~Lox~=aU10<#2 z05cd3L&Fv&#PrZUi;7s-2+(Y+-A^5BLUV*YGnB)ScM55retI?}zxvg$tpq|-iN9I2 z0~4O|OI_MJGaV4dKLuJ&x36pe@JBx6V?iu~2f+FjClPJju`#al~>q;YhSy%&O%5-04`5Yx7!4v>r)p9 z_bFc8s}PX9%80>wnz%Ktc{2b6s$M&nItevRG*C&};;W|NqQ*SANMgwv%>)<#K5Suc z<|?Mm{T2x}Doky`^CMg;i^lMq=7L)Ig$tyBUY&iGP>9!f<_W{Iv1b4iIkY&E@{WN3 z({6OCjintNUd(!M?3RQie%jA8Be^W9Gfi<7Rc4_nolH*qjiLu>c2c8cfzST>8vBA} z6_p(>4X^B5wXSQ*8SmKdxLLzSjdb^R>SYkFSiI_~$CoW#R9#)`dsSKfr8J-fudb-8 zujp>~1;j|G@3pN?cT>1(DeGbSqJODl;*z)-1$4ifWlJhz+oajOrh3Mnd+I;5&nH~` zk)|m-efN~pE2_)f(_fK&Jn*(({pO%kPbvFi+2W;3Cr{d`yQ_m7L`)*tx&dQY!>|V* zdhq6(d`0yp1Wg=0e(WC88;?44w`nsjxaQ}7x%%p_eD1Tp$9B|l$E{nn>aM%)Ui#eP z<1e|SrnUX2U-)A4n@-zj=NW0Me8Vo91@u33KdK@dFti)`d35i97p05lA$ckd&gHK~ zk8nwZD6f%d+_6+p95N)CQ^;pO`&na$WT>~p%r+S#<22r^yMv2YGOCCPh6Ex%) zcqHU<5C7m)5rRBZhOwWQeG@rG7J-c)2Echnu1;o#!cfCDq;N7J5m8~)Lrwq>SIi>t zKouT3M{^SxAyKQ5MF3!Qv@m%RfkV0?{vv=fG9`B3i_2KzOOgSZ5tSZMlf@+4%8zFF z@4ffFIdkS^-c)ZcMVU2g*1O*IZe%cgzT}cm$WE#AOogkEQ0ru+j-u0Cr?1PH-zzJ> zAMmhktkgNS7sq21*dmgb4ifz?j!u@e8nO}W%r43^;MASCcqNmVE7?2=vCE^zZoKi< z^Dj8xG#53Q!KOX~-n8Rfq%ljf282X4=8#~>4EWU_|9F%8 zEl`qILL|>2x84&&Kt0PvF=^PXYN>q{tz>in;7W2FD30I$1_c02Tc`c8QKJ}poqhJ% zEX3dSu6KbEl|!a9nbYUF!3t>fs1_sFVtjDcGK%DopL_1P8p!LAU?ntf;uQu}VE{V( z5y&?Nj4DxsYiVQf#c-I5uS5D(ehe8`hLWb@>revK$zb@6AsiBTaPlndiID&NpFBjsGj84A_E10rwngwjB7VS9}ydsfbn!sk{PWEyJmLNBtNUWf4%fl zb{P^za%{_oO3iIJyV;#WIoCFl{%K%i5u5XfSdm(+(la(SHNkAAcOj{#1BP;Bx@C%G zWSuKne8HAI3kAB^5@v)vfsqBzi|Huk5mRKoH1CYf9T;Ko%YGa&ge07uFyYXj`oZgi zLIO1XyA4}fW=j{!ec@t*#aloB_kaI4i2*i;G4n!2*)^g%kNVG}cp@zr^G7(cg>aK= zL=}NwOuwcNdNdQKnA9Tdl8~zGAxEl4)M|INL{pDEu_Q2ytG_z^FIruZ7Yym46qKbT zWc?_{KIK5ExR#;mPm=mc_CB}|46moWu!;kbl-NC$J=Jwp;~VQH)KyNbDBEPQtu)qgjISI#$Zfbo<7$7_tT zi!S=m8E2gN(T{#?*|O!vpuDC`*(vrBi>ZXeR1D##O$aV0cFdU3LU_0UgP#W<4ig*x zF1L}Vub+iW*aH62OI=3v4tHe;30`;BS!YU>bH)Ay^k4P^+FIAF#U56x1Oy}`5uKG( z5+s>u&OP_M%PzZ|!WtPE#VMz}Ay!{Gc>{^I_is>_)3`x)*qDpEwM-kPiuGC(%QLz`9 zWrRnFr|Pv0OaRD}7d<9)6SPS!;G_Pn3|X87m?)hjZx>m^Zz}?P9tbl0^3Ag@=92rx z@{?+8T1yhCgeWW`WB)Qbtw33nI8k|Qj&oxkXK-dMeUAY`Ie#x&KA* z1ld#Fq=8$Va;kPeVAtKQz5McdYnSafev-@Ude(MK+Ii}2SNx!=z3ucberBZ`c&aLU z+B+Ska-Q9RGgc0x$BbqeK`=vb{pcMQE`P3juf10L4_{TqvyrL8(kojw55ePw+0JF|>y-Az`bf=2N zh)eAPI4_qZkx>z6z<7#%=R4m?sJ46Rlp$`(DA?)-g_=z5`T9CA9XsW{ahD@6dSW=Z zxb{E(<3F^8D5$oqs*7kh%TI9@RA)@Zr!3#{^Pm4>-MV&0&>#BHMNny!yjX#GO*Xlf zjAfJ)!tGTngkG~*G;BZMXc|>&zTnq+kEUOxcK5veEQR$z2uTlUHtJ&zVNxPJoc!)up`wTXJcPvKU`MfU;OAGt&_$Nh)?W`s{KQDJU7r0p^x7GjEnrDx;EKdg;H} zJT`+vo;v`V+xqKU-}-i*MIdJcz!UXQ%x;VQfnU~e>WXx)^trGJ=bjgBG?|2IBX?dS zIkftKCk64F-t;EeMCCZ6PU1OaUJ+%HPMiqx^0eWBS*E%QMkHkGt0geNX5kMr{3SUG z1cO;Q#3QO$oD#^be}y~|LMUqlyl~80Um=^$D_VaOFwugW0NCD9FIhlu?;3sy z|CZMP1HUzd!I&k5V5gQ6&%_n`^3DOW6oK=bUrU;7;Vr zF1sv3=o-QkS(ClInp`9B#d${U5oO#x6vCenT$ln{(T+X#*jck?5icycRa#g#Bg`s- z9BlD$^wCGFWYsH`)}g+4!wC{)W`@s}UX^{7HM@>){I?4aanERKr3^d) z=Pm+u^(4EeZ|)@}i}pXC=tV3~c&;Q5X zc>vf|l%>u~`;q2U*ciwsDnVENH-kCF}CA}_I`}et5 z9Y6Ve*4up4F&yG(3}x)1JVqCp??Wadq3E*u`S;geZ7ze31AQ3uIlek&=)s(P)YTt( zc!8q%J~c;KSxsY|sH)E#&Hu!!c z`sA2njM_PUQ(UiI70NjrWs3sz3Ju&j(_;!G+@R`&HS_>9i_D9+9IQQIhRTru_uA5}^hm|rUiZPl|jFF2#r6tOU z6bxc|gAdk!YMDS{(fN#zOeF9i7~9)ucuWS8nLzflIgih9hWu(&BqSWk8ReNC(CYjR z!|zwVP%_!D6A74*1k)aG%g&rR)5?ZNnZf~wFgOBn{8VA}Gy4evfttN!$L0<3tQ*vn zN$fe;$RcgB>(npWDYE|>trFbu!BTVUMktK-;EZCTetrKjBLd|msU+PH3R;Dya5t_= zty>i=Y5T64zmc>F00`W!&Nje+fh{YRw9r(MD48tlJ9PbjUus^pJT`O`Rqb7}go!*6 z2}aXv*EO$Q6^)bwQ?_)y7DD@@wkD1oxz8zIp7*!E-f_ugOXe>aJZxy=h7G}R6pR|Z z3rwH<+uvrKdJ0?ajT_elN}_f3^)xvQF&GZm&gXCg^DZW4|9<%4Cmw(N$i4R6FsF9K zh|0eeK+ zO=cntSvhi6S29!ZWy?PN?QgF?_uO-6B;rgU-H@x^WtdhU%*d1vc(RtHt9nJ_zPb3d z*In1Ie;-~Bwv_OhJ^R&P{Nk5Dr`ZL%cktlh2Oo5xrP*YUAjR^_*&5oRR(#}$nxY-* z5E#q};Yl@V-lbMYNom9Wti9Sa%~jQkhYDq2<-YIx?lUWQ_JXj>il*XpU*=1f3cS*B#6F39()?L4!?9xTeEA`26 zzi4zp?fWnMCo;58FwRF~P@Em*!fPx=UXU-?5SZbm6Rim`r>V?Rv~5P~k>q%w8Za5N z#Y!BSP6lYHV?Q+uMNZ>}Ii2e58%rmm`9Xt*2JemKo!o-8B5)+;fGYP)($}3s& zF_JL}V-AEhM0%XV%M4~HGE5}o2tDq!(@sN=GglxSZVU_@dS#*s0dpo^GGgTn8G(G8 zIp&SH90&F$Re`Z%$4YXtVAD8SQo?uLNlSMA5^YgGvQcW5)(oF|ZAU7YsV(v|#^d1{ z4Hg*O?99{|xS-b}9~>AUxoewZGI2ysUK-N$n)y0|6CtdhnICgTg96Ha4F?KHE}Y%a zK^|ntD5FAZYHAotHFA&y3pgPk)d+z|NY2F?lo}6bD>xvJhs6n3jk77jf{nu?YAT4W z<8la0(Nv+>JM^vgjKaE~83;&AC@@x{0g*8CkJi`BN6_MCmVg}^-J!NKdGvt6m8Glr z%pL~_xPPNH_4bnWAFQvNI@a9Mvk9(!66}{{6WH`l60|4RG}oU<%HAv(MpMM zdQo8Rrvm!{yiJwup~3IE>n@yy@r-o5)e%JlD{r23VYCFd)ZK97jrhIuNv3lVh=S#W z%g=sxxw@NQRHViL!tLU`gl;4Zh04lfY9*u-<|W;TW?RDx)Yj8noViZROHKQjqFB@7>;g~ZdYt7#rqAV*of!Ood-`S_uFq@ ztj~TLQSwA829b*{x^U#k5g7iU*DDcHk|I;NFg~*J2@^_zAB#4`ISXZ(Z!u4h4Pg)Y zt{Oigwhie;%YyAFkfQQPkllcUC$Hl?_uO-ace|sJAP=`fu`z%RS~sG!M;h%4ww$S? z;&{Oy(14e#x;Q{&0US4O912;hQ#gY&BRhi^0~|w}WkoKmr8(`070eDa(6d5gj}|fr z_(`3z{L|TF0tvx5f&dKbyk~0LA@czQ<~Ska0`*R&HY3rP#_u^ez?my|v0_^qgjcDV zCt%}KI3aj=%0vIs#}zO-z)5@{z=KmRN~kA+Sm#Ax!SNIL{TSHHYBH3aM7cW4jetYe#5#@ zqy!bqsqaKn6Ic1X^2fV&JM@SXuKwj8zkANmabud+tf#VM5oY2_6UF3l*0;X(xq}ZG zf8fCt1N&Ze>Pd(>WMlo(7hfE@_pV?1>7{p`e-Rr%6gQ_REM`kN6V)JDwP^lcGDunrov-?(kbW#^b`V_C1S?H zqoyk+8JSupWSuh?+Y6M?mO=?hqHsDUcTLC+p509#7A5DDIY7Xgf)g#gPl-pFs_YV5 zem%upeo^}6XP}|H5{WG_E)%eY^(U98lEE*V60+NB2{@e%VqEdWT@yA?`P!fI_ye;A zgN8s+B8mN(6J%l~t>}B?DTdgQ=g(gt0oY~WOgCd9pb^3eXfpDn;pJ;Y<>(~}!E4uT zvUot5Z`IV+*3w^aLS=1pIEw6+bH?CC@*1S$?|UPfLuMRD^K zu+dCnVzW5yw3&}S`WR&aD=)1%>;2WQevQqlsZ*!*?c0a7822XgZ4ZV9iibv#F6Sro zcinY&X=#iXQrYkEcSg&9b39gl?j5EIIDG{-a7I+zCUb@@X(_Uw1F%>}*T7Ib+gf^iizy!9mAC6UFI3bzCnyn1b#M}#KElQ!%Zh9qa&jP5&hTv~&>5h&ox1+ym6Xp9n(1pO+OTe8psbwJ z9IPj}MYVmkXeI<^1d;hUt9;oLUoS-CMRsJT^sM@_KZ_wy{7@wmgz3dzAbM*1F~16lrCjfYJxp&5Ey%z8xcPKPNKfF@~;h%593Y7B;hT1t1Lp$ zv>ZO-PGQ1H#mnY!(=jw<#A@x{d(B6XFuai|*DevxPd)j|S{K34mcRSmO)P|n;&mDH zJO+2az~aV}!gBcu`PvY1vp-ofu~a$y@Ix0aeE*?`{zaxNAZu!BPC4ad=}Aku#XaPW zqY0R6Y)lvES!WE7hJ8Bf<&({vN(3BUHe#*FkU_=SwG&W)B;yfU6vfNtF^U(!sY-5O z#3aY20yKm$rm(nT(-f02^+F&#X$kyf2NWjoB#?zM>*Oo0xPmh>Gyw9VMNy%c_TWi< z!3qgQkNsL73RAn{iRGFNMLa46X&KWQK;gs2DlL-`UXJ1QAWR8%8x>-4kTDTa2|+yZ zVNabkIR)`GW^-Vf2F6|FY}Rt7j3@+S*OMZ%yu>JmbsIi(H;zWC_-bHKN;WGbKS4&< zhAL}tAl6TyBoc{>VEEa*ZoNU!uBJnwmW}J94fRBsJ2!mtD{aoFQ7?u*98ASSs0}nq zI#p3s-SYhN%V)eebm!gJl?ZIuxb~Ij-@5&d`nBuJ`-6Y`ve{^*P)VYRw<=(6TBkAA z8iD%lvd7X#AL3gC-UZ}=M5?7?;NbWFd`C1AA3tONXl1{2vSHoZbKbt=PivRfR`ea% zl5REk3PBj+!jEvYeyzE$BkbK|?e*=P!uM<-Mdv`~0V7A%p8LJ)c~`wG7TmxDni7}} z7Y>G+o6L)G58wIcqc1prhduY0`{GLj237NIT!|4+CaXNPcKvUDL&&A~-#>2f;O~Cz zt5@H2^S%ck^wh1tdt~*pZ~pk=nGgPTP$(8&w&G`Jon0LY)gO4ko_kN<*Son}d_lDN84!XaAUs8+uw9s z6ee>;&LJus+b$EuOE0~Yi721KX12E1UVCZpivGxTrFxB$6Q;Za!R-O;N~+CghzBKo znRoa&I>5dZ2588Tmd-`i6c7ub&6J*nm5p;72e!AbumAu+07*naR2_7X;keR|_xl^~LEQIr^bM9gyEo%)pOMTgnEZHa^l+d8Tn0XQ?Lls>c zN}NDuHxA{4qClNecjzlp32JB{Mp;1vF=HGDZkWDOK}1PBn-^-9oi;$mhKO?G^bCR# zC~hL_sVBhd9Y@K)D36N9k3$WT3m%)7YJrd^o_MlzOq($st^V(SKdc$Jh;7=B&?AJY z6l}zdaZI;>9r36dKJ!jS&Zq zl8m_=r;%6(G4fKU3%z4l#1f_U$x4b7&}wq|vVk6Cu%w@N-v4p-jN+4)?2sJ4hn9I6 znlS+jd@9xIO&H?Lr+C{B&L$!lT(f2^@72*l*l%VVqX%1pR~@EOBo#Jj`p88WU8JMm zWJDAK$a!*h@qivj0qI|w!;pXwo6P!k$ld<51bE0!WkmBZQ$hvNHdHB=j4Y5D6~t{$ zs5QL@1~-5uxh2c#flT~Co5>j4{Ol45fed=(%alehl#71`4S_fX;>pR!CLv$z$5Q}U zqF_a-X_g#ZK+Q4|A+TD7pGk%vWHLfF=civ_{D{;gH{lPlzalcaYL`qlhrrCSoO1|# z%n=B(I5B#I|Bb?GS6Xd<%}JFl;H;`LIp$K71o~+#S$4RhvYD8%jktE5C^GebKW8P> z(;p7KlH`oa$A=_-CfQPXT({JN>`=Rmnv9)HXe2-KAgv^k8pZF|r;3G4x>B(ODnuR? z%Fl-o4NJ!#e>{UIKMN>jC=rGkjKmPPErmjHd?f?&uq=^zOPDaW`3>~o$yq!mSUPK| zRIE=5&$o&bVH=<__K7w(bU;Na*=#Pz;M`i;d|M_SieC4?{7d_nj~G-LiIh+mrn3eE zN9{fO(b*qzPY0F-EKHmxd+USNv#)>Vk}vNvY+&2vtsc`h-Lz==#^3yX{u6I*Xh}Am z{o%T=9ck>d%o%C)ctm7WL4F6ZX_@8}Xj`iMv|B31%R02O>HQa1{-wF4H64sd@^<-? z@uuXOXzicoT(sk$>AMa2+{ivV=(~k}fhdLO`FP;mbuYZM{DIZ2a})6d#kWUX+gg4q z6p1CDTlm*wclr)iAp+Zz`uQ1c#^+)le)til(S~_2$dMnGxY8An{`%L~E?d@SXk+^O z!ykVC*=L`-@WP8o2+hqm|Nc{-nwD`r0;%A`!Q|1S&F$*SPrVNfW3z__zxZH=U=ZQk!D_W0wENC`YKURQ2X=0_;s0S4u?2+Kqvr;amVf-?exjHS)BRZjVT+O2 zqS2Gp%9&@L!E3oXpnB6yH?wlybI(0sUO+?oIrNyH$P7gJ2g&+_6qr4}?0d|bh z9LwU3B1TngPyS_($7(8;45~+V?Yzb4i3kHkATTA6-ea%n z^Dn>hu?v4#J$_u%2g?FzZmJt0nj43V9b5a*Lv_b|e&17PVt|hIsj6GCT9pWR@{Aie zq;`ifd=m7wOD~-~zUJ=x?rE&AdtlZqnE&e76F>XanG0JJPu_mVpz-6^zW@GLfBvh( z#*D!5Z3j3{ib4ScvgpFoh#+jO#dP z$uxd+9rj;tI_8Z8rhGZ`BQ1@VC=SzMZf0)@12jy?jtlF^0!@e*w14_F#tsais8bq0 zZ`aYOnTBDmB}ZEIEw|i4SA`XOGh|9r$D&6&XB42fVje;m%(aM02xPoHfRf>~W`72vn+QpTLUzcJu>B89}LjQj}4Baf9yhGZA29y z0KEWdNltbY1c7;@4g)mY&`X$!u|A^>C>>LA%+tJRNUZJA5)#3zwCd>!AxAu_HO@q{ zwT9&mZk)7bpOq>DH?oF|B7++{2b{u2S}gSxguGCLma{w$IFQGv8GBWLip8$&oG4dtxhYL5(->`j%Wmz1=lP93UnLE3f5&+2M zmtS_>b-!J`dMzQSUZRwXS7f8=8F4PS-~y&JCT07f3{Q}@>6v%^m+4|SddihoUPUVW z;)9=r9+(WBjIeF|{Q_G*N!p3cXhK>Wb>W2<(mYTO5D+frj6w476tSw0s??% zi;f|rJvi@QNQv4qsrT!+<| zUc=Pt?|=WtV~@?Eg5&W-X=%w1e(-(BxWxi%?<0>q3I{A2zy9@gzxmCzmYa-R9%mB^ zJ*sZ%ab=8%`LJuVlkyy^57H+=z_xc%$ zL=QUX0M-w1AXb4qNrDX#^X1H$r~dZ0*As%0{Q1wXyy1rHF(Oz2GRoNVKamQtxzPd% zjN_^TV*)fK*=%Q8qA@+Do8#$Fskx8EtLM*)$0x?M#bWS_%G%Q@utC|ReIk011!5+kFpOq4^gp*K170rNQ zkyG>VSB`Ka7F*kl88a}7VZrg+ms$1EKCw5!jU#wugfO%LGLqQJ9U68h$(knyK8RIt zj*?+{f1EqSyhR)k@l|Z03BAt zRn>!%E%DXw&JRRFCH<>8SKN|hbFHN`QbH>+R-9Bg9g4R!ty?ks(aJgf-g@e>L$AEP z!h45Fq8c2wj5Fn?M1kOeiiIW-{>Mp(fl6kcY z@A&<#PuzSf;*Xd%ZN=MfAA09KhfbNOI~v-?tfGrXb#wfgR>~nV_VZ{eJh30$eDlp1 zpgG!xgMh6OohgPfjURIcMr0tbvHeCp3BZqw{ti7C)=0yRl6#TWm`+Z8bU38CyXNSljMW2qD^karZY1~R4L^A!xTKE=N@*crBqGEc!WdG`ol)eTui(s5Al7h1QHIkdxA}ZN@eg zT9GYYhF9jC?5If{<;+V6D2j@sR6PqwD0bai$co8j>qOcIp~ zH?%PpZH4$j69=YP=n7W-XdVYC{=da*x)CMK=@c1Jd{YHqD){50yG#x z{4~~&V5k>jg(s|diG(a*B2k3^SFBKKbUWd4P_ljQxAI$_eh-|~v zIEWs$1o{E@^VtMHtQdgkBlIr2%!GZbPVtun?i49k1Lxm2>hkr zu|9LEMdM$WY)OTKOwSB@m=JEKQyH=Lr}BjuCq-|gy5&*YE=MT{{8kBNfsg{(=4ho7 zTMh8pu{L>51T1|oc+^FG9hGUHEP(#bN(dEZ%A_@OSAszdxmU-S8;l3-VKU+WF+-|$ z7}@8w#m#BH&cyW+>9DzSJ{@mJL|==sxi)$V2B9EQlU}~@j^9|>i4 zGt=52XXZ>v0N)d=t)xtOxe4UW+BKZKn_AO%?1(|8ynYz0SXf_;fxFkyFNH+7W zM`LwLn92hHQ+^f;pcLebe?jhxkL^@?NWXHw^|`HYQsvC`ne)-G)!Mx})Kt=NA=6i1 z{qNORUjvrVaAxbQv%bNx6wOf2IOFTDyfT|v8hm)c`M1Bl{#)Prrjg#TZJ~F-)3ZJs zR;D^~!A-w|5{5jr41>(`m{gLA+b!_ic;oMo0p?6Qyys3a&fF1o3-JBk;}7ggN79n8CV$GpU|L-G(QFw$#Cqk$6)Kh zK7vdvzkl?jA76d-uUIhich5z z%d$td8&Kt^qV(i_Ow2LZ#aL!*O=#-gyL3y2Bx(e1)G~qi3B(4(X+g3Q2Rsm{IxvS} zV8SR2EAio}hNqihAf^&)YHF~3V^$WKN)0#d$IzZ>Br>`w3mO%Hyp9bkiU2*rz?oPP zhy&tDNLK!smbkcpy$S*m9uqUSQNvRRNZNL^43gr2ErW|YIT=Jk8><5HYNW3-m;k-H1{E74VJFLJpDodl#9krFiHa41?;fpRCPp}s!ZH`Zt9h{Up$kx)3vrO~01NGf73gRZCw zrjq?bfu_~VFhHYgsNj5s=&5ir08BtXX2i(GpI!dT=bl*g{`&*R)-v1wEX3l_WH^x7@%Y26>;yr1+zh9E+OH9=joHjZg>BcSK&STf4{YS)ruee=qHDN z?r_W=KfmINKizZB2Q95wpFi{SpC5Jb0Y`e5Z;)ws%SMyKoJ412W=KXfFbpdwMs7y7 zDvofqe6NLuSV9xRwH35*JT!jHF_<`MleAJO3G_R)MjJw_#*ZC`leSp8Wql@)hDy(c zt?2Qvw&z4M)@SH3>|)Mi+X>?ceO64ch{^iQ>YYHo-&k8)%dubR>0CVNdOWj5q7xDR z```bb%X9SI4oow2C{9>o2=fb^omQMNonugD4-CUDtVn{D2YWZ-sTV7uhEE>j$d1gm@whN1y&Y}RN_N{uD~e|FuNZ)3s11W&~QEMUs|i~xYl z8$29l#71My>oyncQ}D5d9>_3`=qorXh^6ci5B2rH1OKGF6o*^6_S%Z01WvlU4c@fRTtBw z#Q}BAe)i0nGns*8u!T8%5QA_J)kmmbZo}h=z-Uy2mjF}>CE`E{#sTckY)6p)* zjh-^3%w#B0$3)46T$@@FXKK#19$#<$)o`{Mj{B!yp%CFSI3g zA0WjggyH+M^*J~29BFUpm+pO1E%YA)A0rJd^6pQNwBA8c(tAk zI`U~70Q0fvrZA4Y7z9vlsA-Ool$Uw%I~{0tj7vGPaxnG-Il#LXWi zKjRi2I~3uEXFhJ($+tuZCP;m{$?L`D(OycM8`j#ecWliVEm%tz;ey->n)1F3<(Z#J z*rp1Ylki617xo(c#-e$~GGutckqa|fNb|Bar*W~}R1iuW#KQ+xU3uEB-?-tq`edXe z#0RZ7zsJRRajdDdw`3^Bgv;0`(#>IP6zOzxFhxZ&yGy1bu|Q()@s-tm4d%W>pJWFI zeI?b)2U{-lfN)^Nx`wCUT*Uk>TvGnXtBVc`2S*RBHi$sgiw;zv4a``4 zLP3Ks_GnC1txXuBJ?lG`8D65VD4$Y#_`#D-_lnrj8r3pc8tu5_Wae;2D&tJOv_~0W znO{EmAU6q&gpwH~lPXNEgxfjdx4v~2Gi=S+X3u^F>mCz#^b$)lY|tnWR$|epnImO) z1cflg$CZ~e=R-UZ1~FBP8#j(0)}3_HmoTGn(&Y8m-{9ydXc^E#Ay(JZr|-j=kwJsZ zt)PV1B&=aD)nR|9T+EmWA2w_#CUQ<5ksX1vXTSQ|Yp-*82vMAVU9nkmNWB$c1wGnG;A92gF$BajOOmLyHy(W}nc|Yz_iC=PfR3(QBdvI$Pf-$ zMi$D2+(Aq$E`_v_d9u~cn>VPkvJ_jbH`t-+{Y>}}bs~@q_bpr1Xg+CJjFT9XPx{L9 zA1*1K`)(q|WgIAd+7ed#cyp>XRvOzlYRr)R4%y>~qavZ;y!-x?T(LY5LP&O=!qIR9 zn{qrA#;#74lcSm!p54Cvy_avgF7fPBWqi;s!1;Y+4WZ1Y>m>qww6vjm@SdliUeVO_ z#^o1>22`Y5;ut!loj4+$441}BVhs)T9fyvJDbME7ARh8h3HK+^~M=@S%5~`+xuY@B6>-qx0{*0CI(inWP30WG1HGTXP&lf z@uC+We|X5~G22ZTf7>0mS5%fg^uR;>JMFa7hL0Nc?n4jlcI6c(o_gvDeX7uy7Ow6J z4wy_-)In5jBXaFEb}pMgP>NMOuNL}4~U3yHY! z6SjbZWflZD<*jd&Y4*rq#4svkgd0i&ZW^ia%$PBQ=Yjr@YEBXhRSCQWha~VaM@*- zh8JZj*4Ta2Qp?jG&yCVrg+RTNAu6m!4E!^ z{KPSZppI~uT-k&4_RB-8cQmyiIoyyn-bNMq$A)J{P;rztpD~47KddlgZ zV}wN#jf^M|4D=M4w0<#^iq?hmv&9c*zYI{4koJIi4#%90GQylb4rldrF^2}#MEmCq z!8g8fCe45j#lluJ8Ei8$?bc5fM42M0b;?5Zi-cH~^)4XcIJ6@A69+w`KjS+NCj2B8 z4+-&51pJg5M?b}3rstgox++mZ5`w}GG7{4F+5F?(1@^S~Nk)XjMA=aam;ezWwtvxP z*f5~+047O*8Y?+AXwpJVLO%yW2uDsUHUkic%t%gJX|sHCs+iz_7?KCh63L$g{x}8# z1(Fv(!PZYxz%OZ0hTI3jwkWUfkQ^r28A+Z3thyDYa$Sh8h_E0mO$$% z%w#iT&0y)AL*QeA06ivOr!mShkK+Q?JTaNvJbgxB2QwzvUG>v^yj}QaAs{u)bc8iO zhcB29F?cY9Y!*{5u^pVwKKpFmd_y!d=tM6$iRc>TnY{U3XEd8DLu zpUFd?e)-*#KR4Z&yYp_nc?`F}gL=TAJg{=ui4!lnbIzp=WsB4G*q!5{SfpQaQgwLr z{LpiWs-{E}R(Mlu)DcFX6nhDAY2TzdDog=`t>#-;oPaIow&v13^Q5=-uqS**zV#1l{8P!d0JiXxEP3HRUsvv>$W2}nW+Sov_LGl7IC zN1HFPDlD3oF3(RTS6U3^T(?T@l3(iAN&@kgbsz=cReg3p>B~D)o$W5+c^Ts%l^Fh&uf@Vmo8Pf zrH2MXFv=E(sY3RBAqk}=^LscG#HFsNR#t}SXEZr01PG`U*2%29u-Cv!$GiN^z|Vvl zAqsl-QyCH9#%2l1oJ`3bk*G&1cmMtOXJ?evvR+`vvcON;KkGViqYLoUa#nJl>;ZF$ z0dLB)c3rq|A?67NFF3P`ri?W;H4Fz_=*hVrrS;1R4Ym=AlMex#9SpT`n?cFXA%`Ck zU$++HufViP+B`{PCT&QxP8c!DgyexbBNeQorLpNh{PCL){C&mak476dm`&qgpg9z2 z>_2eO-qUy4d%w!+!Gt9n>eEwp**JJb|3QNzWo6OQvS73%9O1o{K%g{MT4@dj%E6PK zyT=*dS-Sh)AH4j+>ctD=%T@&&nj2$5T1Nj-<3~)Ly64{el=rW0+OR%${7lYRQ`HoZ zrdS%|m6%Adq-5Z*;X@~S7Lei!(w_O|{-rBT4Fpe_ykqF?cmIC=c?%!>XZ3^$t?Spt z8=L8GtzP?m;nqKW_PgKS{`sdDJ!bYW0?|lwV?*HZLx&9;de0AjNWkf*d}+zjWv~3_ zzr#ljFD;8z4j96*GHQSN4L2Tl%u!$J*T0`Ps^;zt#gza}03o2|ZVWyq=qqL{Jh`oc z7OQqe3#Ym2wE%_qQsnkBDI!A6+a@7*oRlGb3IcMWhxbPEW7Thx4X^>_UE15R1*@=%hO9f$I%3w}CaweJ+lw1?Uei(y02m=V; zTPt3q44(OZN~5CLu-ea>^|*fCdFP+cJoD?QLC;=LkzKnnfz4FRY4D=-%fQiiuWx0twM@F@Aq&w{sMAkBop#IX17IvOV z*2JO;tTvEf;;-UBfFpz`IU7RfWvuwe(UP@OP{AKs(iX_4U}_iHa|od97>aneg%3UPjvl+mgrF0x z0_|>A(!v_v_zpN1Ji!5m`NkMOf71GY%I_cfcy$p&xt~T!7~>IJYZ!&_nFXAsBv9ch zSC^v#385qjW^SD2Ln)M&iH-(rLXeR6m{t#_s&jeJ?epBHR($WIkjTiW!Tt zX-FN71V0nDU3VCM#}5wp&0lB#>%Vn@NS_ohihC0sZv8a3NEl_q3I-j8g{Fivh&xm_ zpMCUhd+sz2Nty036SN`&J7@2BTbxSZlYEea0O@gk%cINI)QukACl(DiH8cxg_xMWq`F|Vz7a!$)Lb+HxP zK$1=}6{8GoTAE^kqmho&g=OJ%Q>Z4e_rw8v?l^qUl1OZA!!a)|zW>$m!;z}=)RLnQ z-R{c}0$_F{R7l|&C%qEqN5bEp;lNKzU_H?L)rESTpNaLu0cU^a^N2>hZ0OJ-{PR;P z+@GW9dHMq-xnE$#D%>x;pSksmXEqth;UiWMLm-AW;THD*AX#!Kh7+=#E2~Gc=57mc zRPhTl1O%0xGs~P2L)By9We1Tfn=!Hwi`M0ZRu*2-qOzqfIclMhiM;7}3{yBp&U%AYF3pkqaXhNUvwu7q2=b2dYpsXXw( z=EXrp91@B%sbIollBeY$86+oZDL$p+9V1K7rH3RocT2p>A%|Ii7oJ?nb0#t30cj*U z?U*l2I`oK*%Rbon!BSqnm@;N8H%^pz_x7qd;qr>le*K#aE0K0feKteMtRfRT^3%KV zua$47a^NU|v4K&Ao1)8Y4VLxox96#+XY;WkIdQPDJ?=qIp?m3QyfINZdE$U;u6y`1 zyFYWmMfAS@6DGtP>RRhIju=1wKX>0fXs5}azu>Z~9-Dy-G=*j5u?xO^_B+o!^Y)u> zOqn(n3-hmj{p)CDMN_yWQc?QBg8AuTLr?kRormnX`{&Bc1py3yX7_J1Tz2!Y%!tAP zogDg~){fzo9U~er6F*`hrWPQO$EGddkp)fH@6aS*LYr5!=O+otf{rk2)+{st9Yp*K zn9!G*=AjKZ6wL8tMUfq);|v`$I=YxriJ|!Tnd`a(9m*yaV$w=} zn>!vQVdECRY}QcH_aWv?G#g`nE1N%IwqLB+;sOvpQVIe25=f@t1Cq#0Ai9*NjM2)A z^2(Z@VJ?JBJlPe-p?kTphkNbmWmoko?Ru&m!%)=bqEEf@N?cQ(Q)1cYj(Yl*=nx8|GAs zWo2n>NKTI>v#cOfpr2btTAL~(Jm*h{ZMffW1M%3rGQ=P%yZtL+@iJJ-4CXddD~TvA z89&+nwy~SzQFo^C!xKJa!MhP`Hh=AFUwh(-C%AYA)yK+|aK&2Lptt@E0mOa1P(vpV;2?I_$$E&w8K8RzNXKUL5I`?P0)4`zQFG`qm&<2n zhB|kGTuh9jG(5B-)I%dg?tENmaR@MVLt`?WFpe_SX1F39LljETYQ|zX(SD@y zS%k3V$Q^=udka4KhGE!}%04r4Q7Q!E(mD>EY1FhLkq{?KH)7Y+)NtCGcbN&HL?W}q zup%4-gx--9Xa5scHh1|AchC95VMuYvj(b9xnp?^3fRWA9hCt(I2oT($>cTI(wZ1h!I8i=3kzvzc9i}6uk3yB9v?pR;{3PYZ&IQon)8JeS*e917? zI=CdcQ%&%o-L^k)_i@o^DJEGWto7O0SOdY*vQ#|uVP$n`B1Pgzb8|ygpT33zR)g`? zOINJzTN;g|6RX#*JN_VZl+|BroeH_-e_(Inij9HgLr?}Y zBMz!MX`lG#7q6f9%#zzbOxK#@-&pZI$JudS>kg+|qk)0bst((EyBR|&YPgD&$W%Ht zpknyplg^yF;efi9^^*p-9oMCODsA@DcCm~oe-caMZ~vkv#Ksb0Q{@cI$in{g6Wc(` z%7&=2AkLsKP>Gh(N}esS&Bzkl9P!v#1zH*#E{{LlM)~<{S-+PhGMH-i>bgUo;xe`q zfOg?&h9)Hs^AbbR&Z2>~M2&NB566oj*$mL<=t=06B%8p7P`?xheG5Yr3(iK#LzMUw zXbGYefmAo~D?KBs(@%3Jad#@zGpvAqNm+UI`0e;-xlt&|V?t2Y(T*Y;VOWE;tDTG{B>4>i zH&&6XkM;uF7~2gGQyjAB-24dS0wOr)!=a7KmiZ$!N~ahf2%J$fvgVuL+F_sR4_*25 zWe@%fxvIz1w4~A_Cr^Cv!XFQ~;pPjTeDY_%{6*8?!AG9_rTH(saJTmv=OYh0^!>$4 zmM>X0X7s3~OO}A)u0Olvh{KONeA0HinA-@v9=BzL7gqzIXSB8bh--YYZt%VWdned% zMTSXN2GE?1%`cz`I1S2iKW-%^$~J!9$s<;cpZjDvB*E=BSZ{6ClEAzZ6p@eU}_140L z3o&DngzLP?0y`9MmRP~ankW)lo=V8OLCDXPn<*~kWtMxu0SBOgx!e{5v>!K{aC1B` zqzK%+bjBH9yZPqdd;K+a%{9ON!4JNF(@i&CdF3w_EO^fjN5taii2_4kaP2Q2SFEY2 z`Q|sjO{M(oXFml}Y39ulsn^od64V$rKgS+qwK>9UQ89{SUL;w!ib-duXIZ6$eGmr+ z_KGmS;@EcLOCG%5%KbTdFG{_s$X*O*W;h()=TjE@@4vs^qM#+yJ5WU364eregOnH^ zZ&UjqbOQPl1OpM!wr_yN#n9k_vidt*1Y036sr4xpLNwmwNE)Jxa|*l!QQe#FHor zD6*W~kR)ebgu^Ol63MWopPGt9!ogpjwofxNA*_U`2uu&jRF!8LAqp909z5~b>DVq= z_Ih^2R61tfZ#G6~>MmPIZ{-m9+UIuu@*z`*HcCee<`A!?cYIvl%g(g7T_+CXUsH3- z>J827>f?2d&Gn5=i3^sj<%>}h zMs2SW=Pah>xurcwNWE0W`cE3Z2YI1Nkq6;1-te<5TDilZovD%A=UoVyIeO>SiMb^u zT@opaj0jFXeEXRup#j_Ls@?~&2pQS8!%kGVjD=%ig)2;xGd5?SxMe@POI$pCPRg8t zT^3VfZ%*3mg7<8QUpBwLm|VP;qk zJKiwv)pzF3y8ZSgciaXhH11IoCj9XmUpwT&3%-8%VLOZ*xnlP0U!VDnq1$aAY-;|` zv(Nwcg%@a1ixw~0`4_+X%>H{Hyxn&DRP-OImVbQ3msbLR>jekzq=>vM0Q7{TKCBtzxkRy1uJ&PNRm7SkCeopdo&jTi4W^vs4 zKrVa$kXs<^iD1qf@_rbzxV!GU3v)12ET(fzRyn!M{W%%AWH9HaK9I<#KF5zAj~&(; z%2jIJVWQ9U$!;zVGiT1k0L=|`+~fm2lt2FQkHHYjHQ#f?Sj=1VP-Z}+v^*uP|4ASh(=%`9 zDtrJTJ3i;j$qx!B@wgg@D@1q$9l^)~X}MH{`8hXVVeqnfDMw5^Sljv17d4BS2~@c~ zpBbz^I-h1ygWy<82Uw&og%+rvZJD?9d@Bk9x-+YlA2Zw+VkkaF7EG{LdWlG8L)ax2} zST@q+Sfa`j%}>6>h-SdZ%Y9!oY1YwLdszt*Mf-#yD^_;4*xjM8(URG{ zlDw4lW>y5UNk|xy5svFJ&<|X3!`1M3Fv#*EFA}O~+1Vi#N)J&n)beV=XFl^8%*WDr z;*6X{iYfrnqPXmgiVPuB_!LPjGUW^S3`RK^&o;>l2# z@;QQS1c5<^P2X$BCz!afO29~=S+c+Em}Jay(6eLMnXdKtDGU2~EfXEm%1PBh)l3CpwxL-udUBf824$@nvl$`Z7bq4<(*&ZbvF~rSjzX2I~jzqvR*{ z(=J!Vu;ra2F8X8&&bu&ri`hTGkSXIaqczJ64s>t>AR{6<+9I-IVYUs8#N#a+RxFoZ zdMPv-cnD{FJ^b*)StH>moTmil!~_coCKD7>>l|gRaD=fL5su>pNp9+7lT*2~WWte< zJx}e;63+Y>o(g0!00O)M$%KP3+s_S3OwWWfcOeNf*jS>Fkar|?AENU5NS+jVa3Av) zXSO4Xz^d|6{$!l<@8ShHow$g6jL%FgGRkHMgA^@Z_<+$k%uLn^l$ zP%>gw%LnE%63;MgF7n2p5Q*0G;hR|8qmtk-wN2Z`&@)PVm5>{#-YK2SWgAC8dPYw_ z6xkvE*nIv?OO=ybk*ta&^Jig`$YX!{X+EKTQjkb%*UfU0FVsQO)}@14_RD4h4kPYshv6!hDGd6$6}2!pw(2{X`PJ zdv?hsmvCn~Mqw@s<_dKV*q(gy$xQ!7jT*&qROs2Kw{MY?P#f*=Bnk_)SZRx0Tlj=v z9Koo4%{ABDbkj`)GN+m}X%Yq<5%ZICxR_a)%Q0zW(#82`B#~`YtPmSwNiM(L#b@S* z1s0nxGe(Xw=y(Lg%(XbQc<;UUVpguHsR0B5u1qN-W{Vqdypfa9oV-5goO75SW5;2F z$M@FsIvphvF_>V}!5qwYN`Z^wbHo^Hlwu``a6mRpuFQL}3v-h!Gd*loh{TjzCnS(c zsWP4!rzIeR6}JIkdOq#6)8If|aEh5p@_qN+hs}ss>I-8xhcpokY~hd9i9%snmK9$0 zF3!xuu|9KxgtN~~T#=c}J+M==C4eM;WHJQX9EApR5Pr#yMg-8kT53Ph#N%Lzwu(H`7m# z5JU0Dk6yx^e){QzpsTsxOpZ%?=vj!$T9pNu<^$0Lw zr1$5ZZEf|1|M(RUU4)aC=W9q9eEEU_o29y&FQ>c=s7!o$&4;_Im@G1^`kCZR;tym4 zmbouEk_uBS^J9Ok{F+AdWa?}OLUcWOF*CqphL`pYYCIg5U>wDxUzcm*A_{xR>``Kc!w)|jRa9_Ede zP&^jxf83}GCk&b<ci;PtZ`?ok8hfp(nl)>! zsyUzeJm1fjf3%V%+>nU1tSVK7CEMun*e&Gse~7_iX(@0}B3>@Dwx!!F(}iwkjaa($ zx9i88+drZ?f+k|}%Jhr(JHgiw>En&Wun+4^_Ar#_Q+Wea=<5*-;fKq{ioz@q(77gZ zcrwdTEgq0$nf_wJ-RSRx&YA4?Nr3OO6bPW^Ib-6C&B#_>CNmgbBm0B#%vsd9JjZ*7)*H z`QsZeax6JZlHu;JV94QiDR>MJ`Y_6HlMw|&x&|Y%X)z6d_;*s~xX(j+-+WZ%bpByW z(Qbwd2xG92l@>5+xoMB8I0WA38CzdZ9(-t1O+mCBX z-v9+?E~QdgQV!%j4^^t)lY|6d3w;Nr0vX{>bYe-)O`@HulOk3V^N1*i%^SLw-KyNT zv^2UQ6XxL5`jfCc$bKp7u{F)_D$$rqu?fVhkQnlXk5(r zn`s)Rm%bn*ol%LVAE>*4t>e>M_?YPMH1wYJ=m!{8n44*+nKA7io^JvdJU{#T=d>^H z2;an0QY8;@#81gsH}wJySFg`IG5ZT}(WWer)=~#wTo8OrkS4R+rFr@wi{I`n;knjQ zZ`E$A$ZJ*IvQPDKOA!a$Jb$hIM3WPv)r!<78xKwL%c7)#=jBmMm!rwoG^x>5ke+_C z1-m~kPvMj}$S)k%kb#&+G~p-G8;l4Vd+^Hal$`#D&)Bbf5yjWhca66Jo6A*>*HP=+ zbADfOaJD*HL@RgGA_qQPkRf6MY$r!4C8>h+9BDbBx4GRhBNe2(np}{G<6{b35P0A& zKG=Z&;Q|Qt6UsYA>bs9}SUPWGc-o_cxl^znK8Vf@db24csv|#2YYGdYj390F-%A&; zE{*q5l`POel)IGcd|b0?M@b(T%5pe_H{nfx2<3aud{Pj^@_0F4E<{!4VLhxABW8 z=aU3bqJ&PIM!F>(OAr7>PPgrTtRw5?*piLH&_z~8OrLeNW&fMkMak9u{JGozWk+_Il{CrW#!l^Ly?%HI`5;VaSA$)Dw2or;X44 z*Gu{bB!IC^RVlfK;9q_2``9m!0Et4%m@+$0KJ^Fin2ay5`*vyX( zi%RUze>eYc570sa$#Pg6=TtA)MDn{o~(mxaS3#0@{2_>%{rj^!?9s{_S7?(-~I(zmtoy zcnEB27A9@3rKEPV$ zJ)#r)m*xM1DgJR&oeTjWl(R1Uqf?Oczx?F?Z=C*HVt}4_;yb1m{y&&-g$&US{EtmR zh7RHXg9Z7ohygw6j&1*Mm--_!V_^ObcQ_4iVGV`RBtDua^lxhyeL#z5{1_`p2xdim=B$A zbiOc0)J5%28zw?V1ILGMlzizo>6zS*cvzitiZ+Ftcc2wh5<#Gt~aC3Mv z=R}n)P8wKlOprW>JHxpn9bwFl0S!SE&+o*4n1?HR$yPDlBUI@E8$2;J+ zJZ%jwf2vLbjeh)H!mKdBg$7Z<>}@T(fu-o$y>=IlC-PQS%)^IurCw39tDJ&SC##Ob zuUXJ!i6_QPnAbVsOKwD~ip(xfU%-doM>D+1yP9b1K?e% zgMp8J2AI!#Jdi4PLlQ-{CK!wUsz7sY|fvTV}Teh{y5S1TjR+QRyKax8`` z%Uh4&9(D>B0gc{NCSgxB258C5C}9{VTl|}nL67pv%nXC|f*;hnTCLt}*R+e-m9`^I z*E!UgjF8A$Y!gNUGpfEzlJvo95{VirUK+pt{AsCiBg^Y3iX;big20K~WhqjnSG~`e zTt{w#qV)B713>{&&gA4Ieb@D`Rsj7SiX8V%01O=g?XHf49T*xg-wr${%sASEA9Ed7 zQ!B+tF3pj7caEYKlaF`M5v{UYtCO97L!;6pg_g963){RG_qt4Ii6>g3J@D?G$!zs? zjtZ)cO#xLO~ zPs^1!5cS21dAR`+DVexA2w)Gd)~}NY{S;9T9LbX098Vdosvn(%t2owh8AEX6q66JF zmg4oCU;8_aj65jjm%Dw_n=@V+44C3gWQpPWEZXhnpB>6p#tY9C$7p(;mO2-oTt3uT z(KZcmSo%m~djwjg5xGdkx!*J+`KXAihvwysKyUKg!Ud7B|CFM#VUxy^j$mdAbVa|T zlHIs@0jQRr0KvoWYTEvM@#2Uz`8L@7`4Ev79aW`X9&x2c&4-BcCe2pJN{%@dHcB+# z$Xza)MA`pvImH(}hz%qYho__36dU#hF9{pk(p<98R&k~|Kd)i9?8gqH=mo%=zI=O( zKfZCH^CUwmlY~0A#V(d{W5Uyi6W)S!;w@9YCP+VAMLL6a1tU3)zA^PcU6(IB~9Lz7u%3x6E z^)#@=Q3`kN2Sr}XwZ@SCwl z*-IF%dI+ktApGQXE#_v*?Hb%G|)KSolR!?&0Dk zQva7{&*2N{O$8)-`f3TtN7jiL+|3T%z}|M2g2gRG+c7yu=H5x@anp?K&ImF`GJG=> z3hbP!g>|`cgRjL|f8yB1V3kf;OfT)tLSysIkuile>w?Ubu0IVqh@iBaD_#oDQf(1! z6S1@HTN-R2Y)m^!O;Zyp-&LXke_j;3kL6L7bxH%HZF%p4`dd?1>2hW_FKaCK3y1@_BVH2`ks@#lCaLXQ0kPyDmaqUq%Vp22?o_2;z3+$gL27DhS8e+-V))+o_P=r291g?<)$5Oy zw>i?=_(S;_A=M|1!Yy)F{aIV2~?;Y`LVy--nt7 z-=ajN0D;oQUSD5GbMl2wH##@l{*LCeYq>NAfA!HqiX2D|*UJq!Y*qlR19&>KA?@nY zE@eZlz;OBT+S(c*kNVYhH&u8}EE@H^6Nq4K^Ap$nUX!v<#vPaju4?(#8Pf(HB%3R8 z`hM|;Qu%S0Q+DA?^0YH-n{EO~(hIw_N1K_+;*TCyo#wPrgZc$uUWR)pK$WT zr>+!jOj@ayjQ+K>Rl8x1oMnzB?TJ8J-N7>;ECo$m{PyrQi?_4#AWbsUKi^6f==}%77om zLLU%CbS5=0yL|17iV5|%zzPZQx{E32_7fw+h0-je!3#a3tdoE}OuTnKIZpT`%F8FC zm|m0;(oZ{d^oja8FaRtn&5zV_Kh?4~9F6sl75aVB%2b-BO7rtW`v)Agbgifg_X2ih zWd!TFkqR4%n9$1j94w*c*{b|FA}#&|`oE^!*XGFDLZ*e6090vY0t-bxC!Jjs<%V0EdJzj)6k>Bg{tXF$b3OmfAV`A_*`_ z_Gj1PCuB}-hVNy}4lT@2;J5t9=Xw~p#6Q_k36>MGdR3byQ!**`cOy9T{un$bcCT8K z%!VHv8!#(9iw5q{H?TS4xx6XahJ7}5F8LAZTVVAOClJRVg$-@hA>{f!J6j)>0>lut zaSjQB0!dEEoNQe>HeI2T;Jh0Shh1JF$UH%hK+iYnk3{8xG}CU?o=}KR&P#g%Bne5U zw%rK)z1eKBUh$sq5<+uj~!tHeTUh+t*J`1s_rrlMkiOG~jL zsvOJF>0)K>{e}sEk93T(G|O>{qiVggvXIv7*dFpg*bfSrm`$dppg=H?@e^(O1=O)* z60@wSt{~Vf>M{ezT(-{Z<+d2G*3|3t0f9lQr7D3absARvKEI5NjGO)6jr#!~Q&V_M z&jc9E7)Ffu9&ypZeBI%^MEwMfKGYQ;yVj+`!u@b$!WvAyV%f647>4?PJr4tN3V_B$4`? zqP*_HllmLeay#4u-!i^Fhu!g6CVyJ$BlSTcbu+AoU^F@p66+DLP-I{dB7hbiPjHw^ zPgCB}_iav7@(P7PVXq{X8wY%oc)_lvtEx&vri`YQ>3LjU<>Piqr5-c%z9_~Y8lep9 zGkZK=g}`+}e38xJemN=4J?hbaKM+{}q$}Po8hb~f4UWp0ZC^KO;iBR6-gCdoy|20x z)K8RR`I>)Udh&zg+YQgS_xVH2tN=ZZlIIQsd7oAP)u6#gdYNqOaenyG8xVEm`n)S9 zD3l0kp8==EER`+~;J+mNjpKR$a{Lt+US;w;fbaE%|MUeKz;*S02SuJm;7-CUvE^}A zjmd0kz0r0PCj{?)-46k^eTthbh{=pq0RkLE(ebhk;Lp+fyiJWnqb*PgZ0T!?jH|{g z$f3=vyU+l{@vaE+I)tJztEs3975XlQOQ!_+VT-C5(K1jc5Xitk3EoXJ}g z6GC%ng>S~hR#S3_gCzG&rV0~vSX{~41xM$ievrvc?<@-ho--Z06`w)UFZ~_?;avFw zLQ1Cdi&_OBYnWYHvZ}(zF?Fqn$zZnLph&Pm%ILZq=J-=Nz&Ge(DUQI5nn!10wQb6scUr44MyjvvaXJ{HU$vv0MWhR*$JN zmCwl&l zu*XrR!IcAZ*=UC4#>zrpzGkD5Ee2#&7ikmHNMLaful(AKa)Xz~b+C!QPa}3|EF4aw zlAZkb-_h01O+ppsEOTv~h!RaD`}aTDG26P#mDa)Z32JSrx{sr;@9ky0smHsBU_Rl= zp39!>DBQL)Zyv%EoE#gW7`c$rQ7q=sKu+AOEJAo%QEDIYk&hPQ&2y)Y4Eb!djL6Emij2LzjaK?V%;cJz@fS$x$q1v%ckp#B z(peiU)W4Y4noFrU>kHVw7keQVQySJ4W=NwmM>JJS&U}w|;~YD$Q)<|H?e~HT?U}2{ zw`<98QV4OQTFsCSniH_@4NiPEN>AQ&7^kIHts=fugWkaMm$Lj`#duG;;2T6qQ7Kt$5_ zJOco@MefGtbLUNTfHOBKh^2_{=Upy6AT}#qhBIoW3aA8oKVoCy7`D~KUB?rFuP1u@ zI?smkOHo;T&UMYsHrU2A1^R|6ARvr}G%G3N@Io`6q&=tjw(zPrUQ0t=DOcI6YFg5! zm41|v(Oz5*Bk2Kr1$Mw_>FzYmr>t9_FKzZo) zw%q_+SS%pntJ@?jqq*-FAyR1>Ix#b1#zKPzz0f)f+6;))*WL;)=)Pz6`L%6~l*X2IF*O z95g2&0dPOP0q6?WmE?GWfin0(^|@&phXFtq6RpADknxT#iYR{x0{ZaN>U=&tK;V!c z0LhA6F=a8jgG{96%3PXG6YiJabGbjmx{z#~I}!03*-Z)!8zoxA-Oh*5_#S(7c`41c z%DPL@XPKSC2RZP}D)*0=V<^_}hTFtbqu#bX%^nPx#aJ(3mr{Gap4fi!I*%on<@p6+ zolxCqR?{G2zM3nCTo4RghFaGv{>uIQc*S=fJa-;nE&{nR`+Q*mF>jdf(skP%lEH3e zjKOob&JV@$3d8+lXg1-Ej7$w1qyRcv#D*3qYsp$2w%B30Nbmbnsiy0GGD`lH{~en9 zcW~9|YC^rr{K0D_N5R4R%8Ga-KwHvG1JU*Bb|HOJ_t15T#u<$I4~+bX1sv^r&)cPu z)BvOq^wI_u%<{pIAR|`~j8*`10LqMC)j^vgiLQuF(_4BA94 zVWPy`TH^=Wnwop`H`wVh4E?${Xt5h9q{ZXN5u^k8@=+T7hmVe)#e;g#)i$vHKQI&J zj$CirO9+$Gr7i1Rfoj&uMw)NUe%^4o(WDL>oxsI6a<(bRKIe( zNU1}m?xKH0|Nd?(oy7Af`;k6BX1rntRG!Mo|JqefdGkbCuFg)?Bz39{V*w@S9%o%L zYqskEX0E4Ihc-$OU@KtJ8g>4D!BVa~;?Uc&6bOVRQP02#Q4D|n%cVj?+Ggc}LT0&y z>LaoROz|8|?n_H|>$8x$-;ThkM)A(J%CoSOYk{?}J zXC#gq%jStGPFM++Z@obK=IqO68xtMz6qoki9}KL&yLPw~H= z#hk<-1=faT5pl^J4x+7CRUtdKJ1T2pWG)%O?2eKTmr*bnm%81CIlV6@}_8zw^y+ZQ)<%=Fk3MWGK9!4%fgggR5 zH?_8+B4_k~Z^5%;t-B{|xvlwuU$9O$937{37F8$cu7mIO6qj&Y;pPrsEBq&@p-Xi}JgT^Q5&pVy%s9UXT7!p{im z8b9#F$dW}lc1Hlpr%rIK-LW*JF{$4J^k^;F8oH8dBGTIRY14HZfdBa`X)j8?D3|6J zv{sHcJ_hwtVgSN}+hklMm1`(DOBq!icVPXd}o;`-8NC8Zg^-^5YCKjrb-4}nh-CBiz1+`N6Mlhbn8vi#AE zNs(MhQ?O~s8(jQ_Yo597PQIH3#aN{6^KuA4*YRH9XQP5NySo|@LmczA#)5h>LtqH3 z3^wNJ-F`wyrTC0QN8UihVk>Ypc~jJvFT)4h1c}&s*BQ(&`Ga}_z`uDtJQWy05|=at zn`V<8G61q_gdk0^*lL~~zj_n*X`1x0)x2k2Z|9pM8!iUANWcDYs!%?YF=N~wROTvksF0NEmFvqlYQAUv)iDG$HkRfjhr13l1Y;Z{vDgf+ znY!I(Vk+u`8iN~S*OBravC?j5dhw zUu(iGH}b(n^@x%2;A*2E<6gDZ(0bg=tfqN?63ik;xCnwn=#1A1%U=*>yncK11zk0i zR@?OHs*(|f$B6uTpxl7nzVRP1rSmpDn&L8V&+~6h%8X z*N`mJ!S(f^#;cdyP*qOxn*;gr6WurYODh8xGbN?#@u?y!B{U$XCf!36*f%h75$%EUGAUnFJTD)MS1s}(j)&kqgWnR zBVyB?8^j?)Y{Q8-HuJ4o3F%x1DMZUv<4 zl0x}*1gOHWxG0f560zfI&E*xoAN)nr{B)Wl{*+I49 zXnbGB^-KkTSdG1Cu;R!Kb^Jv@G3&|nMa?p7&CPd;nJz7P?q`G`U2brE-*4!tz7(ko9_Go5KL4PlJWmb+!JcuVHX4Wcj$ZlNk9>F=r&FSRqnA-R0+%rZpcI zqe?Iu5Y+G041$&_OqRG*egmlz;&WbNds#9=unuHMHilmE$GpU@lDpkG8>N_vTaUzi z{eibpK7@6KN56bA#L(cwJt;!>^)v3J$%9CTL95zs@M#;^s;Wf?Bs_cOl4%S@rAC*{ zj#hMf)9|PVueM2tbZ7GV?}y)42J3*=eNlbaTa#M4y3S84ef!eu!9M{^f%sP1?_tRb ztzuT7zGH&knlYAZMJp}Sx+wE47N9H~JgE7=Mz`$8ryH`LlrQ!!j5hUIu>JLaq2|aH zlhFeJ*f-$ZaR}+}GF8Jb^%GeUY50rMV64aRe4n2Vo*^bAv8MCN{ou^ZH`$EWt#YCP zobPeLR`&TEwiEqN+W5@*YF+h<=XUSomX@!P#>UjD!#$;5`(a3K6b|c5jy#w&%cJ%s zx}LY|5;|Q|OD&p2;NtTgAjEWzt#`P~q?J~QIwDWcOBboHO`ZOFM;!b0_=>N-Bt8zk zqJXo&=(Wy}&cZxQ)P2#pU6f&DD$RW|xL+#ARaFp_o}t9AL3rRgfg-_Hf?+tCs;j|% z_4xMbfpEvWs^Vr@;h7roeeD%}tMwFrZ)KXA=?}yLwWIf!)lX_V^fHLqhC^=-FpUXT~YDpafRzz+QEO_H?>j962R(+zw|ASY} z64#?6620AV1lELYP`!cxWZkYnMXGJ?fjgIBM)rSBs?- zSAaI}?a<=VQbiRds4*ah_m_s3jJ_@TIo9_*5Eq5$2o{4mq!Ds(_}e-ri`&X2Cd2i9 z>8v8ZiwnDpO6!&f^)ilvim2j*=B#*x3>7ztar|gWRAo(AwOAC!%|2kqJ0pakf^h$RWhLu-cwUkLo0HmhgNwIoWV>c#&NUMEqLVjHBqcl}hlInQQ`3LndRF zsgry+#qV=aSA&U-UEn~w=s-rpQU1tqH2k`<%AV|qM5D8a1YarK5S?iO>RvSJG{md zjvFrj8)6Sr9S1-{E8jhOB+4tES+Ezn;X8IDZ8EP>6==7qlO}Uq9Bud+7slhY1pmKa5aGIt!zI>FJ72||n zJT6_+jz}q`7fivn!$(RgR|SJM;s+41{gEU^tE(_A@y9y>dYA>rZKkAKn?%%%zX`Kk zkF{>=kClzyi7S{;29f30_lWJKdt5b*j2B})#=`UNHCx`( zpif&Kn+A=taAJGKq@lb|Grd2zZ2vU#ed_fh%x6XMWl?&tS=)5&Bv`%OUoS;x5APh^ zwe`B5EDy(GxxC-xP7VPh9WgbjJ)9dnWV$@J87N$YCzx!h;DGXtIp&MsA9dz*zYJ^j zer!t7b)I7nfZw~c#GQAw;SD5DPI6`ZY`ckF{v# z0>Xh5GvsT3oyvWGw~ghtySVv{e}eMO{>ONtOfuw9oF-V|DBqULb}QXyhv)O4y;7)~ z_K!cZL|rDDpa5o=@2WcVt(74%t47oGJzqKNy)GxNy^gCdg;o#^?hW5=R!OdC30IJ= z3BF*2ZMDoVw&@vM?1CAT4zE4GMJrNDzvj!|=ZK67g#?Mg(WtBz2XdxM!*JNKpQ@@7 zcUJRmgvd3Zc^{~=XWf3?ZmX|C;{V{x{3W<>A!9!#k;&zk)rrS2TF9%~fIIg1V6ic&e4;s(=A~OqDIHw#GDi z1Q-LimqC%XmMf#-s8%9}TbJa>C6zu&gwa0C6yrExE2p(*<2sQ87XFc4OIi{l3i%lF zxvUHJhz5%*k+%^fB|p>SwquTJlgN~nPRI2^CG4IfJ%ZUDBhCwN*le-D51IMuY(WB9 zP~J?m`xcNb66lGlOPh>$bgrh>y|ip3FRU%+RkJx1iJX5hc-=n1iUe*cNzGL-|JKx5Bd zl)gk92dadI|4>_V_3kjo@E*dT{lFgTwFZM%4;r^y501h-FF>88A%Q<00=q%V) zKL1_$kYsx1h4Rk4Tqa*19%sktqNekbDDKYqQiu@O)WvKQNDY`FMh;M<;y9%i_m1bX zVo+q59Jqlt!H+d@ItmXADmgfq5FAbaJGR6yxlruhL**MY4D7OU${fE7#u&deEY-n~ zwz0q~tPQ&mgTg6!xM`?6T+u|3(H}GpF1!LiU|Lh5x^fvvDQZlH-2>SQ=ynJ zIHevpFCS^C!UY7T@Td89dpcx(RzIbN9a5b7`h?A>bGmECuP69 z2KDuw-maShGx){m8KK_37kF69$LL_*d$fdDMuc(LN;Z}I6%k!Dpt>sH1)h9- zOP+1FQQi9WW4L<;2ZiTbiF%U_{lV8wORv}2UVEY$E|-VCTvSVeQhRgx%f;atTJP=d z9@|pwW)Cyg?*Q6v7FD*g-v-RF-50}ea&NaH^t5g$`Mr?4!U499bPt{ykntf-u49hZ3VKep(7{$7B9iJrF<;hnAqeh}>buI+4Yb#S&U3`9(K{6t zQiDyTpC0JRwl@*MI%&)tIJs~lkPZleEWc83ED9h?6J3Od+U6K{h~J6M)aN>^6u2>B z^cy(z>Kzn;7z!j^C5Ct+jcJXWO6miCY2S~XuIybDkBak;rz#9*LBc?c@f&MoW+X_p z79%VC)I$ZA`_0rtY7~#qDz<#F6CiG1Lr^W>|G?cuCLiPLX?E4y9qq#gv+I=>S;(Y! zx(RQV9$}P;fNvLkqi|U_?m>v?QP*?g|9S-B()3>4lk6M2(8|3w^ZFFhx9tj^yMp;n z{*@sp_ahX&qYEZ;PMg**3n`5;t7@?@vE--G3n?P>>?uFAzuxk?TavP>Sf3pn>Uwxk z9fs&@6^QmPs9CQUQYiR?phV~_Zo~j2Zf*)jApW*Q@ugiL$L6G`2t?|}F5xOz27PvU zO5oSCL0Dv#l6cTRo|@2kX+KvmHi+1^y^fK2l~ z;g0}^ID`l;oU!`|r-&KplUzLJ*D)A5pNr01Py2o<5t>bA3`K%r>9X6n4q28XdF2(4 zkbr3+elU2ZZ{-g%=-f>CnT~luWe0~ZsF%nQcMCQ?0FI!vagt`*va0b4mLmF`5gf?f zI$NtsP-Jsx=g6nn37bRya$tBS@Y4bWd7(SDzHjT|g~|ggnLhJT={x1}(z@^0p?ty~ zVMDO095^Q?%K;J~tkI;x>p;Dyqf_ESPO}3ByweOm$6VX_v<7?NMl(D9K>COhcahD} z?srE9m~aUV&B#eWlc+&`j^VHdIOv0jYyg2q_q+n{IWqpdns5BvXuB59tXSt3tMpX0>e~_0t1Sp4gTI3HJZ+~OaDSY%ZC^Di`V2n*M0fR9 zGN4x8yQ^+ev@u<6V6Bz1U zqvs6w!dY3B_DeRCHG18y4)r`$+W~4=k;ziP3X>MLgNkapw&#`V1D

    s#=s!$M);c z3U(~QTC$8iSr{dm@YV%H=zCm~oKrE>@ko#f%M%Kw5Qcjkrobp&(pvh^*2%JyK-M!-8lPj!#c%q$=g8$~le^MQYt?OVI>e^u zvrsu_yV>Cs-j#P)K_b_FZ=RU5$=G1|C1EVFjIIV_;C-5K>u!P(IguT%a-I4!G6ECW&?wM!6R_`irjJgSiUD zRSFKveA@JDfp^IkTuWaVc*+EyrtfqRAlTqOE3vw3Gpq@+zCmU#E$>twgz}ZO{BKEF z3H3JNThrCn>C81GX6euelhCwSP;{1m>h(>|78H_|fjNjqVn`KzeP9esi=(8NT%7|0 zF;UMS9?J7N7i@yr4Q3qBL}jRA5DklY^mLZB=hc=q?Vg;Hmfg@YH>BGNy`vF&0RvK-wSb>wXmg4K{fY&_-~OqKY}RPG7dJlt2#K2YoS>YvY{Pkh z*Wy}yUN-`ZLy8K3b=lmgo%Ncn6j7{NmoljAZu8?dB#gzyRS;1u8_M@PKW)Poh6J)3?%6yCef zYzAP~9TEA3n9_K8T?BbuK#q5rFX4=jL@pP_jKOiD@;!*kHm^%xU!nm z17y(6&<_x)w)lC6mDq^d^vkKD?1NupFP~oGg`Tiy%mD23M-6r)ZN&zY35!?V&4vPl zPr58ovQS!GBp#vxi%V5#GKXLYc5j)dj8ddmv5m{E+IW@LzxUweaFo0Waa-GL#JQOD zxlD0#0O^S&OU8yMJr#2}u!kv(uyb2LK#j%=5C{g3eqgh4*2d<1)^9fwE|*3wE#+Tk zm4IfU3f_H}u&-$OkwoA(yv4}$2T#fW)6~_jCx|w(ilp6O)~Cs)=+;a! zp!^NRPk?)J)ISFiNG?~=$ZO93!bH}E7BL5@EN;wBJ)=7qQTtIh%n=f-d@b}`&f{h%vrb50*s?xr_MHrzn#;dY$f=pi@}C^5?j z8}EHLl`yG?U$idr*B)#XqA8a(;;c4@FfeE!tq*8mXdqZkr$dkDf`S;})3Iyd6U4j| zG|kO8NC8a+4a4-Soiboo#7%@?6v`N@7??({C+kEVi|ma-$1ZkU_t~d9U`DOg*&hFtG@jQ=aeeqZw zUx#JZpRm{8`XOuuU!&@B&;k5~m!ERHkI<%jYbBhn2~R$>x8FO#xpN2{8Mc8AEEM>G zvu;y*>pBb!Ww5iMX)fa2BrcsE!4tI);`ued9p`-!oMcE;CM2-ggAeYY6JJ}L| zKtvwSL}K(zkb>>27Y#@LhT~G(hsVp|7Q{rshooZ@HiLeM2Pbngw#=ZB!mu3d-mx?1 zcK~=poyHV!hGscKY#DvFhh3u)QJ30TPBt)5CWAq45Z+x#chA)-qQTOT&Y<+u$b=SR zm_!a9a8`vUNdoSLguqBkA8RKKH^pEw2b&R5Q~`Va3A#$|cgd>iLxnV3Xx@BZQ(=?2 z>LJDu(;t!zPp?GS>Qf{^F7=VA1u{<_@d4*y+F034a)=Nj#PmEiLtq5VCyo87d{Q#0 zRpMn&6nE~s^b>~ElRP63SSJ^WLSMRxu6FvY6>CW@o751-l=2lf$NLgx61YWlX1Y$i zkm*}K@JZa5`57!5&~Tv^jWwbDVLBXPu4xe~!{(VkUY6s+Q6dcmNUx;a6wZYch=iuu zZB`$qe?~C)k+f8Kdc8hbrykEOBL<6&ED;x}MC3kAMj~=za3aG2{K}UKk6x13!z?rF zu6297j8KlGG1J^-cJ4Rmb(MhTC5&zHkq+Qcax)cEeN~K@jW{qu6opL#4~VP@zll#8 z@ZOSw4|(;ny?YQ~mI8_tzcq+>HzL2h*SbNFI&jnDWM;5ggk5n#q(cHfRge3ZA4w>S z8Fn|qM-v5M{2rAMFV~%Cxlr{7!a}R6zAe~%%xFq5nYbQwx~b>k?mxz;T!#|t`5ypr z2tI%&ci`Ky>474%{)7P_+g;;xh5~cxeb~)aFq=oc>s-8|A2uU~r+|!*N#V+Xk zm*XQi^Q$s;Hd#wAopUcLf(dno6P6fL!`K%<#%UK0Jj2GA@&5syKw-ZC06+jqL_t(& zuF(<8ojwG1aL?IF)z8b82%v#^?z!ivN<{@Q9_`B-lKtyM<%~7MTE5BxfQCW)RP#Qx zBFzrf4>UDsODuK~K!4POvy1WfFTu?0%zc%N+GpjDB29p6NMv?5fzCoB3JGJoqzuMoH`KhEV6!bXx#x%?ueT?X>h)}13fCaMt6Arf(87e-kFKG zJi$=}rDnVW1DVOM{XiuTuV>`N5XVdFD#p!-%Kn6D-~kwWK?r}H#ISdT7-EGO+d&Lf zLymAm4GlRFD(B%OV2H&{6!K;8gN+8vHkuq>Vv;5PJ%d3XIq=L@@~(c+R^H2KEY&w2K# zmtOtX{g!vU6@SMn9s9pmU0#(|Iu`jF#*FtLIsCzge|qZ4$6FTD4FZR^FTC`MIdf#V zvz@Q6_f=QgPoQ^*Zu=NKpwGCm`^}g!?fUC~cl|FO89#LxVr#4V z(5IexVfK+TOG^Au(w+f5(dBx1!J9w4@}fyIPDS^*s>1j7EAL+RKc`=D#U+FK_XR8P z>MBc11|BhO%H&B?r_Y@G_DEpiN+J2VFQ14S#h?7Z^|>*T znm#2wlk9YMA^~>>%gKx7gL`FYX3M7CZh+2Yw!bYyNsWDDnx}nn*@jO83k^irzv{QW zZ9in}v3ymQugty8?Nsa&vdGNMaJvw)?Ux~z2#@ej81RCOpTzLS7> zB(idQa`m?0$U!|i0kxwc+~$?mes&6pBs4+Ch(wmO^tk`+&>53_v{x`q&`(9# z9`#ZCnCa{(fc7LO)*b1}nYq+fQ#95Xj2u{ERrx(4!EEo%T9^8pPA)hxYUlCB5-}!d z%`P3+^*=Jk*b5tjM>{chJ=v0@`^>p@mvYes16oR~Jx~T>4PRSZ>%_pSj41ZntgKj6 zbZJvY`LKUX+@B{zw@|F@&*S3RjE9wOq6G>Pxs5scLy?8u@A*nB_N$U$b>4SPyz+pQH z5e*>1z?0n!a-vl*4%-p;fDNTTlNJSD{G6AlPJPbg-53a?AZC5T8};E2dHOcpWMxv3 zRU`W)<{H_dC9%uFYPSSy8!Zjt;Eu#eGrm3Nm{Wiw4Lw#4OC=Tm11`I%0euFXd&2*W z8a(p$hpr0Cle%0OMz4!k3Yizd3M`9!OaY+Rgi2bR2wC>~cC6XH_`sT(iV8eMI%Ir6 zV$uO=CKh!N>mzrg%A7|L+J9N{vS4M|it%o}#K8H1+TVZ`U2QoGCO9QB-}s<7v4D>x z4oGZdQRxU?S>1B*fZYjJ%xJ-*f=V;Xhone8>}_D$!1UOUgEx#jv%XihBLGD^`1im6 zJ-VwZpM^g>FN0hX89jA}*cwR8lx^O;88c;g5Dn{Ssc21iQx5Y9_i()OiVh2>5#)=2 zQU%Zk*myKk7FSS0Ad>>MKyr9!VDN(+sW7ql*(~WT7RD%KvKpws{NmUVA&aC=IY1(o zfdY712sOhU;{VEdAbI(1Op@4>}7!(Z6Ur;gNkd{#bIWn!3sA8Pq z26GK>^)THa2!*&ER21y`;R1{4y7r;Oi zr65y?EGEaos7x%3Eid<9arq?^CLH+oJ8z?^JblKrnMcf^oaACtB|rE_jpPZ0JD+^| zxeXgP4H|gy=Z^i%ek1B+)V38xX~znF%1Ot)GXM4GpZ^z@k;aX?`k2og(^HhSX>Wjl zRT!Al+4F!zqk5bw<3aTFX+btHG^05D%}c)V^uOP34F))H88vdiLr=}W?7z3x)(nFV zkuwQB(zBX^@ju=FnAK-SD4Hzud*6O{%Z1Dx39d4ACoORksh>X8< z%0-7vo!A_Tj33_T{yXQ*J^f3^e|DA_YqrY^eidu3koh#str|{9T0Z>Xf?KXZ`W$6N zCtcg-Tw2~I^bG7(dH&bt4j$NR;K0EmeNM(v4YwsUdD)U(`~o515;o>?GO-fta-))X z>D1JuAyu)sSj&l8r8@$N#cP`$S>|p{Rk@Kf=1NXkl58#GaWt43TH}LC{GCd5MPTJC z|4dEztV!OGszGb*=PN6-wp@iu_9~SnSw1MC4idAX3B!ap#dOC4Yl4-3c{4EgaN#+S z1S`TkMH7@xXSaM?tvN>m6ua!rwZ}iX@6OSE62YiD6tlJj5^EZKt)8ASj=-_qVXJ*Q za4I5cmkD{nF%|YzJ^w+&SEtzqD;#jf>nxwx(L~(sO@99v-;gR78vR0CLC2~{$V^#7 zd&+Mcc#iTIH1yC?pYKbfL&uGVsvaEvqng_sv6gLaedxW|_CzIClaVa6iMdTW^@yp3 zXv)2LXS`o^MpRLssI{eHi3b*^rjO+Qg!iGvsfMI4X$7dy?7A)rV-^sFhik8{bH}}9 z?pU)JW-A&sX+4;B^H;sLu65*~oDHx;ew|d0ov(pmpBWD({`6LA($L800qxhGI$)F! zlOikTqX}T7Wu6kg=}6YrjPmA&CcDepkxYf6u>qAOEMl|++H~`ihkiR4^=D+nx=hN8 zKYxVIiI`Moo@FJVcpzIS=S_pR-r`qH$&QfIT*s&b;b1Yq3TMGspb2t1! zP==osREK0meCSGptsDqh5wS|)o))My$088y36OmP=sm&ZPjDV~@7l8Ty$N1VED}ae zW{;`T>v7B|>^~482L}#f!$}AtjFSHTU^K+qfV(yJYZ(HGURa6Wn`%f6t*B9LxJB=; z^;Pt14zZ6HfHo(`VC9(VhzEQ2C}rnHxOSvAfPH^Ic^uGP5Y{uW6|1$$I7l%VUQwB6 zghiZz*n({mko@K=p+<3_2Ob@!yL~WK8g!G1+=opjB++7ZzJcI;v=Id{T2kbONC5~z z;=nFcu_EoB6U+7{nInc+$o=A_7uzDig>^+h;xu-4)LElEvVM zJ6^SX@l*s;8EAXRfAWu>E2c4!6(dq+lJUpGuI*c}|74wa!nMcFo&y|C?t|K^RkMJn zPeYyvrY&pc#FKpPk{kc>ZSLW^5*oQ+ipYSUZa3V3Mpl=)i4X^378HM)IMF6 zj8t=<7O3L0?BvuYsqVl3exhh67>?)ep|HTd{!c7z0J-_)mtU^*WMlZ`hEPU`r?C7Y z>{E-w%n^uaDKau*EgC(S848;WoS?%HgtNq6dg-OePkCwv0Vwuru#ef9dF7RuG=Uh*o)}^%CJ4!eESNfR5CbJli&O{1U}%V? zf>s%*pqZC^kUkR#qo7SY5n1D**()UBa0Wk|fo$xXb1cUv7?gfusbwt}X_cSGL+NlJ zAp{mNB+^tg3uQ8>Xf_%PZy7xC6QY4&1B_qN;)qiGq%s*1hyx6g)DO3D>endpr9=QI zS^}B+weAd<)1#=MJR=t;OjrF-2-)T3B`2SB{E1&Uj!(M}@pyUKXCqW$T%xwF=EAR^ z6OX05+|id&H|ln^ZBa$`CnGt@r%gR{+Tj!7g&QH3h!lAg4tV|734tt6#Q1^DIwd7L z0nIj^3J)37XYLs%{m(bAI(Yh2o_$)m=)u5l;le8@PNi)k?a+8XJqU^c`XK`o`?IFv4T@(FW*;bM>1)}z(jyX9AE zC6ANRaklI7_^fbUwWoIvPMFdc-iP+G4j$TP|G}YapN)p)csED;5@m0Sm$1T?r!g2G z)JG=mf(|xG{g3VM9$ekt>#}!QAjHD-;M(7N8`lVbh?lrsi>lGa+WhyhV z2M(&7R1^Eolc5F+DT4{_;IZqA`wOMpTbnf^M;q#pBJ;zYNTFz5@2!4%Y2c`_-iMdO zqC8HDMz+`r&b#Hz#8U7ZzC+dg^~qR*W1r&NWEv^0h#o$Fz57d(!d`DF9P4@u%}pQV zAni|j%K!Ls^Dj>H_+efjWcQR8J{019%z|2uJ1`JW(QHyp;FiRa) zkHFN`)qw_2L1dYcAYqxxVL7XMBY@5X`dGiaJl1@y)b7iCk8*(KOYcGvFTQFyYy8%5 z1bb%$+S4t!k&?U?jjh>+P;|t|5jvDC+rFe^Y*{GU%7rKt&KMimiqmPhkXhm?jWmSE z)*V0@z_G14?(&tlH0-daE;Ae==kj9N%+=B`s-_QH9hTg3(7n%n@;SgBRqtJ96osp} zyoZKKM2tH#j?<7BkuzZQlV(FKJ4}ovp_Bxe?gn!L??Rx?1ng1KVj~L-U$Vnw3&-fs zy;Nihs@+V#EmPa~++AFt6~M927DIaw^LWUzIx;ShnKqLXis~$k4-E z&|+tbw*lE&8?p_2wg;LS1R(gXyY7M^;Ai8Fa0+<}yL~kN7#~PQ)!gxrgrZMQR#!SuB%j$iX>ow`CUz0JUnMV08=lzAVV63D1;C__S5ma z7;Fkj^VSRR+8#9F?l7U4ter5-N@yR`@YdCT5a%{$+!muqzd==5BH20eAL?QrmoFSh zu35Fo+gdi~u#1pB6Tvhj(&s#mC{Q3%ntJeYA8uIv$iHt$#KY3a1)+!(h~nWXcEoHx zL?a4^vPL|%wRu@I62VLW$vfSoWn_+&4LwQ^P0CRRNUKKLN-pD4{b;$;AQ zqCa6W^dsVABt+p93l(Z&0#PzO2$?eVg~BW>WdLM4Ko+m%RVHiiMsSbgw180&o5gD5 z+YHEz)tJ&|Y}fMubfwvcAdAe&Ol<}lg+F`HAP@%tzffWT>|hDea3xYcQYq#O3PK19 z*U+HIX(|)}4em6gZHI($1FfMwrt0C$_19mIKCjLl{Ngflp`->$ryd#`mMZ{* z!^#loff&wr5h9!9aEYlCViT zJtWr=m?;lKH{=y(!)Xu83g9f1&9in6L!Q=h22Q|~lZ0n;fLKihW?~tcA)8-CLaWp9 z*@+X{bkrpwm|35|5bgMiA5?}C0BEr|CkCe<0{EoVhDc}ZF8gVBa!*7=ej+cnjY7!L zLfRONOI-YsSv?rA|g7p zg+*>A&JG$g*)yuaf#?yrDMl9#=c^rjG@&-mK6_%L|#bjYo=T62e zAmK>o&_Hl7Z}E;JDy)otSQN1nQ3TpaZC~GsVI{*cN$Q2E-r8{`E+U*qqbo=U^<}HT~ zJQ2blyCJowG`l>Sa^A$$DiH^eD!dzO)c%LsCqU8 zcCUvSipjUVm{f4*PE6-*3x%<|)wfJ8Q5CtahLdDOcAZXtfZ?2k(3c2dm(BftefZ?K zB8Q`?j@dm0_eS@BKAfy=yfz=v`DJzx5s@Y?C9NI9uTo7O_>rcf2lX@^RC>{blmir z6oB5+lx!?_m($4w3_vi*-09*rqc7>-yl%^kZ_EIaUBs5AXtb2az9TXOw)J-&CdU|@ z-{Wp=-ZbMR*>c#+FUK-;Z{*WHnu_9pjO!gocDsJ1?rCO7MKREE>Zzx)^<~i1?NdIy zJVc9tgN+slyEG{0LrAy|)@)F@y_@m=8)G*L+St=n34*Ne9ZnM>AV5M5VU8H_u3EJU zQ36U~?8zw|1e2TsvTsMUq_PY|@PHw1aPo&cx!APCuqI$&29?QI!I)IoZDJH#b7TUW zJ9jQSQjJw$!~qER&1M@&WFqY6(W=7&CdOM0PDSGUH4_+t-}~P8Fhpx&&pYotEdp9* z$Q=lWGiRJ}h7mv$LUPV;jaDGCcn%o4x5^AXd!ff!mAg!y6G?Zqb84KH!{Gt4GYF&E zXsc$SgY1S74lVdaut*gbNx3!^+8*$_!s{+-izGn6WZULy32oc5b6qUPE(|qf*~+E0 z2H9sYRwP`0t0dHFty#Gx91Yc0jXvqPxprC+KNrr6U6!qIXPt8N*{>{qcwO*acgoL} ziot+tipAoURh1sED-py}kZgsaCJ}cx$F?>Fw)86*E^}NbIY|ES%~ZPbpZ?3p!`R5` znW4tXSn81^#tH|qh}+cuhDHg-f{q$zctMtj)CnUD+(coWjhqhqxkw%fq{BLMRAi4l z@(5A*kx?R>qb-pgU^FepD@GekOmLjWb8wU;J9$BhJ^_)+TbTCfqmN=(gV*p>^o)EE zStkrZOBWd^9KcvGZ}%Z0W*UMQoL?f0 zW@Uw6nVi8O*qf8XN~Hc$FAAg8k%7mwH=PTBd`Zq{U0oeVl{5?#z;!^#AXq<@u$)mE2vs<`0OJy~6@i8r(lVPUF*JUN zA%qUHdi83+7{0iEga=}3YisYm`)=CdS!bO^5{N|TPZZ6b5`iC{Q&?s<&U&?fk&3w( zn~7*i1Bs&&M~)ncN2O`XC2}M=fy!9tC*c~Xkb+Ioa7uVff+Cs9*{?%QmcefU+l4AR5s-qS#qS zKXmK>42(uYk#UDjnsvkxz}Ql`yaajNJe`*qK78o6zy9SPTyewr zsR!7ym(ZfO-a`PLZa>U7_Ka3l$#b~CBQ1lfLI3#23kQxJ>&3E0k`b7E2(BU+df#>>NR!Ng*yc^gaAi#{V8I~a z{I7>JEKI0oT7|4%Qr1B=<>wzB`^`dMJc7NT92nrg2zoi4@t429IiLb)Am!MkBN66{ z6DQmJa;myiI+Q=F=NZV3o*cP%1aN-QK#)DNoRGi{ZNpxA9XPPWdM}P~G<$QE2Xo4b zARXT&$GM2e)f2JpA$NTY>3sw{+VF~Q*4AKm32$2>)|ou0`06@W%2)1BU;qxxZE^A! zgKfOaDbohWESZruAa%^^wBFL{1#5QhKZKwT>1~i*{6QU%l-x%Tg@b7BPpOL!??wCg z7={T`045+N9X=W8ON~%wT4p<)Q!VD``wwjU|4)lE4Na zQW8SY98GWyC_UNHw@}S0DJ}Ixyk(wBx-LB7D&@|QE1HU+>EYb?lZqQdE}lA!He+EH zNYi2HLNcb~>>u%{)8Wfr`~Ym=+oC_VzwHD=0vB@f9?%PgX<&*5bL~>63o8L>0}CHp zNxCWH!nK3cgWVA-OKca>gEoVEM&>%=V=M{r8JAYzTes9W!#&dsvTx2d+0m)k1(Hne zXd!>+Oug4)g z$BY=!*~mLBf|9DTDrc|hG+}oF*bT2KvLzaCjz{B6D|7^Q1vE)I9Qzt}@LsDV67sBC zxg``1S5{O{ojRvSUsNOI+3{j1p_mxmC@(8NcKR8&KKz3u^Bj0Z5+eJe-hC@9%qNnI zY>7oIEgKt8q$#+$U+>}eyw!QvaCTv`VlcC)M_=U)Prah$)f^uW`^;1XL1G>4%=vB zsEVin+8O)l@GDz5p^8WlT`p^DfDMh z%O?QNaAmKiQedawnOwu^;F^S46;my+7fvcdej$}MM$@7dachbyKm?Cb7f$X$MPYTa zrf5j&331X1#~9uxO_~I}+UEfvCovGfaz#%LoMmxRy9<7{4p68FMZ_eda(aW{#0E*W z{Q!7N-A6?RZ3L`saQ5m6sI++pDMhZjXan!?S4Qe$osihljJN|s>f_^_Xj&yS15&3e zUgE8FYu5k!$))2C>jSr!yuSYX*L-cr;Qr7q8>Ji#B%QYiy^_#|I>r59pZ^_HiOZ_Z<3rR*LD;U&HA_4MUw9~$WWSCUP zjrBdVBDSQlA{7nhRlbHhDQi=MoD++qytWilzcPL$iu)lh&x6Ziy(;3U%XZ2enryY- zb<~J5ISY}6PG`)N<^hcU%gA5iDoR=HaF#|vWx6 z0cf*GpBX$~Swkb^1R&if4HQQd+}V)4xiwDHkr!1>WZJ{1!9o>-JPS5@PLIW~ZYtDf zLhbrD*g4XOdCPwLO7I8AU=r2h91lW27RNG!iH5AZR7R-XnXp>Ju^~J@;U{?(6FVym z(-5<#uEa86vzrz~vfSlRmYp)UqDlMBZ+?^8!z9FSlCyGSIi%|l0<-ZL$O0a?K`YWl zz5(MCY*1U|+Rr3(di2PdQac0p5`R%E+P#FHBev3P534eC5ZAxA6i7B} zy&NTw1uBC|8A=D?#=*VIRqI4E)dgAht-W@7+I-9b&Y__#cu)T=o?s};3G6Ja0_^EB z?AiR-J~4=+cE{con-vr}Xa33xwuS5uRREn6tV@C5WdFbkAsWQ&)1X8*s1Sn;h21Qg zyvU~6zS6XGi)ipOF%XU&WTekbAv%8`4?-@(E)E$VI?)_sG6yhAA<5;b0c5_KTsQn6 zR1bl~vTw&j=~O-lF~nlXlFd8<4o#??f`s%Y^wFS!eCdO_=QJ>YDH{<>!7DcHZ07X} zv(ke~G8%mOj%{^A%XEt{g)ATgY>1xOu4^rj5sc!O&kVL`Agn_!4;j=fe&?20iQM;_ zlLKbZ%Nd(9P@9m}QBD92q?)u^5qkm5%0?}Y5lbCuZ6fGVSx*5x1)?&v_6k6Da}*;6 z8qmS5Xb<2Kd2`y~r-3q_(1v{*)^2C?;DIq$tn$z?M?-_HL{=;AtPXLgyRS&FBEkVhLRVHX^?2Row_|C0zOvc z03+$1IB_BbP+lPUWmMr<3yC&qQ8h(ghKvsY#bdJmba;?#(oGNoqQZ>+GSWSmiJA=3 zQgmi1Bj>5eF^NSW$iXThbTNKm4!;~pash?&NOX9aDLBI9whEl*DL;l>UbCSh_{DfM zCL=g)WpXiEFvYV}n}_nB3Zl{xJtJ3TLcvd0wcD!HFeE7$J1)J)!A^PA7GpWQ-LWCWyeo1V>1cC zv^_Y?^{EVOnzfSvI0+2$Q{?zsgBeLOKAmYZqPqIY27mzoy?#c<`i5roFnU&3(%Q(P zjitKMlOc!^GZaoVw>ER8P+n5btrZEBECoiylWlUt#%7+OiuUSLjYg#jRIqdkNtNk9 zB^#1Lj*LW*gtBNTVZFX^k!9`2jz*R_{RZ~yC;V@70=Z@D7R!3i@B55R<+ib7NBMXx z4P9lYT1{I5^B475uE+3MS6egvGl#F;u(?-t)rkFjzV_A&KB>rZ`0Zt>qPhw`C+UrgGL(3 z_|`sOXm&D9xvXZf01bUgX$L~67O5T4GD?;DijqrU`6?NXzOdT&$~w8G(^<{R#O$x~ z%ndi6+zZiFC+(mEak)Myr@Z-K`G50Lyhl|c9?=ry0?iJCT>F5WF*hT!us$x}7_30n zIcIEY*?hW(@GJv^eiF(hf%*U^=5aUY>vrwr2Bo%yl__2Ty#Kv&cHx;cWo1D9Vd}d_ zGB{&6W}AubG=+fJxeHxc_#}C21RK#6Ry;k zRy@42x%7^O5iz-vT@~GzS7A(McI#5{pm%39x-$@&ROsq6Yfi&t@Nn zPaFs6PBd25-=3`-xTz9}%Ig+-)G5DSx0kDYUSEA<%hZ|UwOKFOw%9wu*UDn8ZKKN& z#{sF|?f0ZS&D$D}oqjxgU@x(3{q}^XHWUdkc*wfJ{-5Cl`x_-*Unsisz%g~Y6$i6Y zQs2<{ua{r8HQJ>AxAPP0JYFwX6ow2MwBN`&R_A7DYlqphJ|%eL<}EM3x{#b1^sCCt zjy-0!ZUZuCNds@%{L+F~eO`Yg78}s7?}*x(R~EimQsR$CBXz@T4xfCef@P%rlzmd; z6cZg}3_h}lWFN@hGP{h-7KATdx->g#*FtD8j43HCtGJMTQM^eSegw`^0h>uS^@k9k+d&7H5 z=&Vsjij0gKYF@ZAm*inNGTz_?oSlbK%z|5XvHyLG6d17(M}~+0}U8@t7?}+(-Mvc`Jh>q5(1kzjX+e2 zT$N8UGFc$3#6|?gsjaOginf8_2tE-mYpc_FO*2KDx@gfNC;Y{4XxwmM`R70X8O+=pqnZq!;yqLWbp+WQK$4fLx9g~`wL^7- zO=}QQxT;<2NfJU{1ioC~p%u|Qs972YskC2_iYpW_0Rc4lS$zS(&_Ot*Kwyo9AN&OJ zy9S+qGs-iE!Hc_{C3lln#2dfF^fs z3G9$rbx=}1HADe`H=lNlG#fAg&o5{p&q*OL`l-F%j+B9J_Z?%g*X3Tbam&2h?|JFf z_q^`Z=jVLxjMGjYP+e|kN)EI=b`~;RzWCyTTkrbo`c2!04DNl_S*IOy)C`%=X!9c4 zl)tpRmQdu+e}3TM$Nn7%1*c3oWbWM44;nexh7l0{w_QHs0kGS;WNGg@@U*2N4k;Pb zaP^F^7Z<#7!!Pb0H*I7*me^7sKJ7CT`t|Q`!w9Lc2>*tS+jvGn#5#OfeFqNc&mSja z+i++8)#Uy9RF6M!#4E3?=slrFMY;ct1s?{2?RshglS&O6)bBf&%{^!Ce@!{+jQXZf zD4IOv@bSx*Z$9%&=MFw#;@Mw3`iL1*$BZ34aA1GEl5S6W!cEb#l)_OKQ^ZU%y73!s z3UfrznI5FlT(NgR%9F*LFrdJskeeQwAhx|r;?cfUMad139OMdFl{)F75>upJ*l zPWsml=1?FMDD$MvwzL86#$Pe(6$>qI_N1DzFB3L-caGBLkhXygU}==L%ZE+RHVzqV z_3{R`CraF6?I8n48-`@E8FNmFBn?A& zb#7moA3GQJrMM0>(mJsVUFLF~G}^UnYjV{xD;m?*ifw3Ngzco~VC*~Q@A2B|Z3hl3 zY9wh(Tl8Pf$D-jES24yh5^}I+YPo0(-2tc*jXebvO@P=!vg#9wP(0C}r3Q^kr;V=A z!(7RXNeUfZok^J%b(UAE0ALzL`phRv0J?-`QYIYdObAXK>jb7(!n;# zgUEXbxRj^FS5oRnDSCBl>zAiYA&4EMc!?R4-1i!`v{`xfp4d&*LujBkN8Cnzl`ydWvLYUnQ0YJzTDZZ!Wt0hu3oa zYZJgSNB+vJ#$U)vxk~*0F{4I&_p*zpPnoPMcmO^Yr^Dj5?K>{N=4WcnuF~t8aKM;h zH8t6UDW8Aw|9<<#vo9v%NpFe&zrQwj`Kr}F|J`k=c%;OgyzuNZ5kNCxqpbF^6lYIn z${fI;uL9`8`Kp3&VVGiK;lGaTh+=`)sfEop`(8e&FAYSs3IPF=5RyA43Edeges38>=oxdg*0u2%a;EXka z#-l6(hJ+??cRY#*p)ks)aD(9yb#FA#A9&ya9XVMGaaPAY9#{uM&|lWX4=4eqrgD~r@)FJnEWgR* z#Z1sb6L`%2NOYEG;f+OXP8SFS zh8Y12nu?Z5APk3T+=-#=ozht(0Mh48+nX=A=ts}|{eil16A`L^`|D?}`|zjN{_s2H z~ac6ssTg|lW&v-%xgH=z8D_gDS-j^91{#4}$w{ust@WSe&Pb%kQ7-`#Z2 zRhOSXbo9}FulJWv{qB(`7CiH}8*7IT0dpI}a&~iuV+Q1e8v&$O#M-F60p|q8k3fT{ z9ZiAx^I!k(E3d0LWNiI`~|LmSUDtSQ>QUQc-(L`#~#?8o`F-Xm`h*q!i zKK**9+2X{T#VJW|i}}1B*Pwy@tspO=L7m46Z3zW)tjGTAzm8w=;s5>YnjcL(;`8X} z2g1>+s)~uzXEp~zKfC50%er#(lrNn4xg%#xojm@)QA39fVxtfjHB3$c!ApnTU8T{i z5@ZEXUVA5o@RE(9Y~#pP7%Yy4%kK-zqc5+ECtN`zZ?hxYf25kd{sI2bfF3e0rxUlw zXZi#{M5pvhsW&-umJX^;edZTf5mvR!`r6=j=P%Q|eWj&6*KBM;B*o7Hkw%~26^OG- zV)d->59^hx-|iJ##(7u;l1MDcQ`Tb7+-6hW45fn!7Jh||Y3HOu{Zbkn1#){>{1BK9 z(eMJlax{PiX0a3`GYBo;0Mkr9+!1?pNjw?D8jX-3T{XioM{t!o8mj3j$@eM;#S|eL zPcGOXhS~E}EW&qBb!^Ls-aS*U($qVc;E=*n(2iWDn2BgS@#4nvFGphKCEaX=L)wAV zG8*r4(zfTFj^iq9Ek1W;5v;<{&c+zsJkhsAnvs)r#be8W6mHlGRj3Ov@tJjn2C}L_ zIe@hjdw<=`nt9gXVF|&~owWoj9~0PBkD7bth@FJe32etFeh$$&)Mt_3Rh$Zs44w4@ zGdrIK^RA)l_EdXaXYTeA?nAhX9I*QURyF!_zAPJR``u}oA5w0Q%U4!{RgLWttG;Ko zZhbMX7cJp@+a(sH(vFv)J$^5?I!ZiIPqnWaVH`1B&y4wcpjN=jlU1Od4=7Wm!1;Yv zGF0V`aiJB+^b*|ej7yd;XU6k0?=i?TNis=^!zb@eGd)Ek;dhrVJNKKH-SN8{rhTk3 zXnVP3)eRpubl|}Co3}z9o4t*jH?tAS=>H;Hcf02=eB<$_pW;CkmPbST_5RwKr(OBu zYh9^Wsn4GXw;XCq?d`&T`hRqAS5XTy0iPKhGb~`Z$DchJ7=W&Nw6QVkkPz7`zepC? ze<~jJLm2z>j7&A5?)LzjKYu>eoo>4Jhz}C91=aQi;Tg%n&&AjS4mbc0xjV@~Een+{ z%yDRvY*rAiQTpoyP(S%9T0{VZKqUKEy~(TPGIZ*vrec$iH4>FRGwA~Jr$7A(Gb1`T zlb16iO_=jnh_fBB{LKmTDG2-+i>4KU-~g4t0-S_G>dskf*p@-p60`2Vq3nQLNLNBr_7EJ zqLhJTY@Cy&no6T2U)w2wqSZ<6 zbJQXS#ldm#qgmjmyHT?ghohk1+<4>P>_=;%4Yr`7i*7Fmjo2&(9vD#Jx#pT{7>!wF z;V3wnDmO?%Y`$_a6A?>xoHj9fbA5+Tc1k$5I)rPc1ZFstjtLPESsjVKbbX~f6|a&{!t#<)4~GiJ^fob)7n52>oIvh6ar4~O|!VowP) za+k|C>k+^Md6pH{rf!mv6?=rL^3wmk;<5n)`d)ewy?DsD!-n~=AQg)u#XE4y2)}Rt z=9bWPKfd=m>!~qDqwPM0Uqe+6k1bH=z7LYgn5$&X&Ujf# z`nfpfuEvP}-yd54T+TeqEB2^|=46m?w#;K4)F)I?CQ_IpTpJ##6}xJ3rAhA;iC3w= zz;>5wBcO};Ofu?MyKR>cP!JeBu*&VK&nND*M+rJUI<6`ZrOBFHvodp-FTtCaK^5;PX`9}ASS5=e_cc*%khUbm=!jZ4NarMmkN7l+9nrQ3Jb`dJ_;R4OlJSa-QNY-wnX zVlAs@x!kU^BfHF@v=T6$u>32F{spzCh+nq6`v6tEJN+s8OR(a7GuBVVUNkwG1UJbX40>Z@UxjTxoTQ)Q_c|*qK^> zUn#5*$*?$~T7FV4UXf~S2(V+f!`SsDW1$G|?qE@s@wCJ6TCk`frK!Z?(dL#$ybM1( z8aGWl^8d4U9spJr*W&+fFI(9HEG)||y-1NJXhZ}xRxB|p78Go$Molz%CeOqkP1F}P zroJTBC{d%a#HhrAh#e7B5ZI-&lI`~S_H-QnAN?-q(Cd4ET|JKxNiGiTbFnKNh3 zjPhrDs%x8dWoor&@=LK+ciAc34VG3|mGJqToN0Hew(Fw*Dolb0}Cx(B@i8d$T6C1}&6;1Z54n5U5BFIU-El zwtaIr685-#g#|_60Zd9^=(kg4FoOZKz)&HwPyzEkcWgl`c1|{L-i%-ugAW9v>0DV^ ziNPXn4Tf{?OKi)F=tFEXk3m?G5fG!!2%Le5C}W+$RignT*$p2_88bO z!9WLgw1JU%5KB<#R&!h==d#c*$fXqN^$c19X%swMxOw{Nr+E&ME<`t=b?7-XF=Rjt z0CopvrUt~*1k%~ag+{@T3O1COj55|U8z;b!o+GQJFH!9z6jX*7dtSy*tROTVq9g-8NyVN>r1-&Os)#5lLJG_Q|CC(#6_4N-GGqkVb0h>6a=L+? zP5~e}MW*$ISJ+eSzkkb?&6ag=Q*$W61xA+WVHQ`xZQHBC%(50X!6{v+wQ89G+It0)_YA|c}?j0xw(4@Tj1j(2jxB8TB z*|HUN7Pm49+KofNoAA244Gp2ozs9{E`e#OX4o*D9L-P(kbVgewsb547eel-bpMLSh zVdZ79WYpzEC$U|61BZ*VGtztx>;Yb7*XJ(X5Ro25g>%}g8xTYhx@!sy8Y;+eg8-gD zVZTA|x4*vd@R`#eed5_$uYbgfZLs9*Pa9E5CE&l{ftA zcXxjO>{Cw;W+`T_dxEAiv*b4=!+rat_p5|THOO-O&uaI zdq~W(ko~e$NDrVUTH4Wk9w-mxb#T(u*7BDR98Z2ow@vUEU&O%!&`wsGaU|1m_<{>H zVJ06r;IU^-NwZwZBP%$fbH@|5K5sircogE&688=useRF;5l=9DT#M(3c-25`j^NZ^_Qw_xW zKyhlAts~iDIcme=@>BMM_##gidy+=Rkj<5r6hmP{Nx zLnIWE&`{ocB%dkd7Xs+dw0i$jk;@okZyDdbiRmHS%7fI3KT{r<0V>THfQ~wx)lJQZ z9<1yJ(7&tN*7)*M}{aJaQ&!LFVt zVW}7JvxIXtHPsFtq|`Q9Wx9AdR*&}jhK9-wo7IG^XOsWB{F`%T9@ffIl_gs=%Bt(P ze|+GT*Ox&CcS}B9zxIChtfVDSQLT1uo#ty`2?T@P*ohmF45 zZ@OL|i#oD`*yU7bVuBfZ$cSpO)2R#CNm^=;wNp;=eTcGS_%gUI`zg3{=PU#iiOFF65jNPM`$@dLRnv#RNTW`G;xfs2x ztHz~4k#-FpJlIH5QkoJO6An=$H~k@|D?Ix~=jV`02==?PmBb0#cCbp-mWp9=02pbF zx3+}go2qCm@Z*l%4V!n>Z6BO9tTR{cky03rqo!`>_MKak2?V3f1Iuzpj~iUqP{%1M z{8jCE$V4mrfQv7WTPtfwc(>@KMKIBWGU@AYyx!1I51#zI{5f;xAcZV1FE>rbni#zd z%7<|V%tI4yIxzKsK#j{2EQs+x_~3*1$@Y8S`yO{1=mr=lIQQIh8Pt*lX3OOUu2~?h zLs-ceM}iCh7nK<4&p!JsI;Y$S!7KyoY;GfBcY^Hb>L5p`hl(f!Q9 zAv7YErhx~EREw}*>IWxD(n*xrleXruK4LjVfMC#)mIDd0pen$YKFQLuBA6EBf}e_| zs}Pc&kqH4aTu43*B-rdBCfuY-4>3`AAkQd-LJ0&DNGFsUutTQ!f#k4_Kzsd=7Y;!@ zLx~P>&pr15fLah)Fw^l%S26N#FaX1dfQBosxPl&wB-*YOk&fsfOVG@We2m=VFLw)UjF1{W1*f?94-s;emR}NZPh75-srC&>s0lj zp)>vH7{zitlMfx&F4C~UF=^-uK`f@u7r6!R_jx{8x`F3H7d`g)@pFzySaF#?Od>TC zu!GR%CLl1x6M^ax+P!nJC`t6-Qsv`pOm*@U2d||cva2|FEH~vw&->~r%ief*+1tzS ze`K-Mu-OU@8$Yfu$AWF)NYd>Yf7m2sju)SI=9=&R@S1CW(5E1qcj)xcN!#tDWV3&t zw4_o3qLz}$h{dxdOtO4pYJto0Ei{fd?usRx=?b>08db?H?j()P4UexVkdVD4N2|`N zO4Lp~=2!ZK`Rst|-Cvy;!K^{vyJX!!DGBR7F$f#Zu)fm9@aY~=d&!}_XY$o>)U9F5 z#^x1N-38d9*a)riM!kmZA?59J8?VjHn%?<9e6%I&AYcYE^|2jXMRx{gF3UuYEHMHs_@H>5~ zrI*x{M0Jj)SiB|_;Q~lNAB`Wt@-dEZ5M(^~Wy!%)7A%8V&T($dn;fuW`wBz~!U}Wo z;>EnNanVH=NvhPcb@5Gd;L&ElgaByeCbZBXt9mfAxCJw->n?C)4hA!LNXr_MrHhy! z*elvH<2|6EUkIQNXm$QyK_+92O=;HdnnVs~K1>UWFT{Dv+Urc_Ab<9@M4h`5)=BzR zP{z;ha803A#QP?UV5c&TX?fKJHa9xZRwx$Q)ja8pNmLKxp}IEW?u)tOsE0X7*BHl| zxgKAR$8ROV4YeB%Kl=LLCYd}eVS=FTsNZ}^@BFSd2%K+Y1 zU0qvO-?yl!xJZe`ak56l#B+T^BTIJdh7_Zup=|f4WuhRIat*H->{Q3O5%8_su#vPN z)Hu}YAL(;zTid2t;KJ^+`i45?FY@!3r=l54=!)PXDq&QHLp0`jgYEZzZv|u`X zFGD120hTQ6RV4n5^hgp(j!Xo}0!u2B77t~ir2s%wfl$D1$J3;>=WYll(BQEL;wPL~ zaS|mV224Bvm=NPP9ut+~q4g;O3U`zjCP1HLbB<^Ui=2o>dQ5Jx^&ZkB`TRXXB-?MY zrh&}iqE{Qr}6@3(~-Bk@R^r{VZx4sVGywM8OsHrlFkmEM<{|J3XgO-A$bv&uB; zcFx~bHd5zUX21}w5`+P+$1Zaj3t!$<;~F69p8|&L66H-$p_hS1Cp?FoX&Pb~ylBg^ zV3mv*x#9t*D1jonoi%F~OHx5aDo&b-#hK1eh}bwn5=uXT6(EBH4^nRg(0Ft`xKJ_` zE4^S7aWI6Di)1AE+JA}VlktMN1ADmmSw&#-3lqJRmk^s>t? zqi)Fvdx9e3B$iSmBIngXBc3LZ=0jJShi5SfO_NcdNPbtYT=~EQ5Afm*066Ylo_OMk zSkK^j0E&s)I8sr$rT{zu)J8YOp*8igM7_^J)ggPODN%xE>O|y?jb;LMK6`#(gNXC^ z1}#~TDSi&6C=uagw+FOi4w4W6z>Ht|pfjzL7tFkWaHT9Xptpqw)X z&Ofk>Ojnf32VROP9)77SLxU-WpiTKD7H5D{VkI1al<@S=ZeWyfR#Rwx#X}N?9xfdl zA)+$Rc<%;t#)Lfv&YC%kfwFyjZArgA4rlzWS60pX@>eDvJf4K?6;yV~SW#Zq`Sa$U zfA+~!zI1xR?MD~?-6enh#l62RDd|UDbG9dvnz5rs&cEPm_y6gyhs->b9YjM5+WH@T z`GjLY#W|w}W1o^zd(vrHfdP<+B|*u%sCZ6=)aMSk#Ji(*pxLy#pKOjm#gi~T8>bZSur$ZDINjR{K1qtm? zDjYvXI}$OJqMfd&_=4uDRGq$kP%o#^N&P6=$ywprzxU->-2--?|ka5ZgC`I zd-0y6bit3eN47Sh;UCRN8~B|r|JdM;@`8Sn#%$O02ApjY?)lvMZMz|k$Cf?3$5@A;{BQnhFa3N`cPJEpY`{aY>TjonQJ z@#w661(>r}r*vq3L=xyY4)8ks9zH1&ZK^TuP0_lVeA972ts>Rs;@JswGFa4cO^ubL z1PZ*Ah!q+h)~={3mzS5rkh)oz*)tMixNF720}bn;Lx&P#PkZ>`hqETc@+S*O*0ID& zj&>v&{eqcg9&-wM*`&3ToiWMhANYj;`tz^z|9~8Yjq+T{=wKj;+JYjP$&S9C^!mM? zEI%eVwuK@MIXOdy3?YtZ&0P7ca(LuJ-P}~r>d63)+ZzaYvO+B_Nl$XjC}l>FeXKvH zFpLR8KD1*N^SUgr4|^TSNF?mH)GbS5+VSWqe_dr&B&t;} zZ*Fa6HP6MnqN0LnlP7-j;tK{3;w==#dels6VFtR4l~+6pi*+M1W^s>Vj&KlGoa~4G z{Pwd9RA1G&LOOY1e?{qCfxlcgZ!`}sS} zxsWMTWz1TdOy0>6e@3wV4`lm_R1Q4kB7S{eGBaYK7VSdrP#5;TT>kI zFmu>L?0zA_ATd#dcU5nh=}rp;CxvAUGUsu2%6)J;IrYE^Fi#rZamO9fXVTJj3V;Sk z0u{f&OWb}E)+vJn{UMSLMkr$+-1hqHF)IXu1zsaY5Jju9x_D}Z1i3OEFl0$ zS3!P?83%|&U?;0seuGrQj8;?dg`gv zk9pWl2%|O-*(2Gfh9QZx95ArQ01r}Q`T!M((mJ`wy#&k?!;N`c4|Qge2$Jr}1`KXS z6ChW`A*KhOisi%tNjEzaRwIx>Z3rHzH?reX+FgW_&ph)CvUS?dUT^pz8#06vW(NvO z<;%H<1d1#hY|{567yGZt+IS>Zk`pKx3DP}j#7A-ffXrQ5mX4>&(KD`qy;}5RRrs70x>O3BZ2`ia7vCs z8^1V110DdR)Pw^sQIfm(O~}~8fi^IF4RH^<&tvkC5 zW>1AW?5GigUU~gDU%TR(ca}U()Jdl=yyeCp_U&5?4O*nDL{SKyzIy6$b@$$P`8RIB z{tycaeN-W3dZU8^d$U;XvDXPpq8l>s7 zgTB$DM)L2pQ|4a&t&5i|ee2hMT=c=~Z;m@;LL?roX^c%f@|ZjCxM}vB=_m4#qbeqc zuU+FlpfMdBMUYAZre;8>u79^TiD}nliL2?dsjLc6&w^xxCyf zO{gmqCArR#1J%Hx<4pyPX*D!pOT;^6zsadeGJm!`m(rRJR z2Bs?yVBlvB#%i3k0SkU0@yJ{(xggp`EgG#LmSHG8nAomxO1OZrbYa~{d0B#X5C5-< z{Xzi!ud4Zf>wKl_yH>Bt=43y_v7S1hVvcfpT<)OP=gV?i-d!yXkpcZh6=mtlrGa8U zl4{LL)fB}L^0<6{SCIXA>(20~>eWHV+1}WRogzyPSTn(-Uy}0-lz} z=0Sb4Smg_!0ziO1S+!a(OBDXn0VT)*QMHEosI4T!)#F+D@h97>s~t`^9G7iXKc1G> zo2ZvwdF`reudi=v#{8Vq;Y}pnkw|k>GkOPg%iewWj+?Ig%1I|MR%O{{%ma^RhvuNO-|{%k6jl_74xTKO>b|4=OFKIEu`hw^lEE>)rc) zbLS9!{H2TLC?8yk4f)#IR>_dhKZ{m(2mO~zW{7H57h_b~KUt72U**6Ja zeC4%IH*AW>!yboMZjzE0o0%0WS6y}O4Xdj*YHC?PgEg_GdiU19zx2jC@BiVhpC2@O zl+M?B|HGA$7y=NBBnY52q)K%EgMWVa<4<_8+v{}jU?U+ALtC%;bnUPIa39vVc$Iuu zS?S0z>Zb5M@pj37AAhNNx((76c?*bAXGA0wD0fvd0_BT@dkz6Ke##I&(ci6-t3y=xMV4%os;1RnJE~x|?H{zLi z03#3@Bv9y)vopfrlKH0%+g!>eOD5hUO;l2uDPUy;o@u6tFZ0{ipkO z=_)&^1oR?ry6GlFNT`=0fTqy}TS_O%h=dlGPO@(VWW>35fqFv84fZR{F5A}l5zAGj z0qRR z>DbBHxqfULaLb3`PX6r7Sei0d@*hinCd;4;b9L?ZD7wK<)zNl~7A@kLHNZxV8pZLC z^huOzk5fjNZHh@k8jIe@l^B(9gZuBlA9ERuJBc-!N)j2l7%yhA ziyaK|HP`?U7!zXBA_hh81GLu`K%80Ei#10-Hr6)tvVT*_560KRFRMIK=}1u>xjtPl4(E zCt`7i2}I7GJsWP1b_r%ZAeGGtNZ_0@UXYa|OovWHx(I@iq{C5R@@D@-i{pp+qgPIH zURtNc`9vq0;&Z2ggvhdq#lVgn%3|e%mX(3lBf-+Rf|Hp7={5%moGe0y2vs@2fa8Hj zYDVBG(cO37jrf)7B^Kpw42-<;$}99qvIf#rAn-UUmd+_k>%`LZphXxBS~;&JkS0r~ zmb6q94gj107!RLdW+uV|LVl?$Y77rGO#MKf0Tz!CLj}qK4Df_Qv&h8d9D+~iC!Al- zGjKE?C#+NmGHaTN?)~`Vk0XqxmPC=CSTd#l!7NKtK8=&CsV>TBIwXan!X>#3LqbR* zEiOei7!J4xlE}g|6ZqNiLl2e7$rBb`0KnPv1s+Erbxy&dS*qF&vyXly;*HNdY|@KQ zKTwS+dCO5=US61=Ltf;laq^dCPb}bff8&z*#~n4Zv9T$b?H@XHh|f*9T4r~EDGCRd zmE3*TEmvN7DRxu(_3t-mKuP9hVk)^9j&-zzq9cd(yZaY673OAh5CMqV*zoK2KJ@St zSAFN!@rRD(gu<%hE`4m&$YDM%=Es#;l6FdMI3djKa8{JFDX2jp$cD$Vws15Bh^=V0 z1a>dwrdAwSC2HHSX=|S$SwyymB9mth3${P5Wrt4n3pM0I1iwMQZ_LQy{F{5iu}?qq z(xn&OG<z{x3fp{0|Viz0oU^#G4VVlq23kUg}co}dMTle31f-Aq3GsV~&l zti+$)%en1%()>aRrAEtG^;fY-MwA+9YLc2&nqzk($ZM?mNf=(9%bdk3A!QA!bydc{fJ+or>$uovY zLOOr9r0qeECUbKrdeV6Jv#TN-LVj1G)nxCeE9h{OgB_%DUWmxP_-kGr|4~!i0CRFp%R`$YT~i9VAWP~+3# zU{ev=vKb$r^b$BAGp6V?JN?;hNq2Qa<6#F+g#uW~=7#m2Y!^>BD}vO*QaxXTfwlm5 z>5}oCn`#a_Ol>6CmTcJ35=*$kk&tFPYP5M=&VbM5&35y=M`K;xv+Om~crUy9zzV9!K)>T!x)P*PO#AA<{J!>YhyK8H)79EcxK1ufP zTR3La2m;wPE&p)kd6#@^ZRHlIgIA9lHgxVWvxk)rRu4P~-}&KnveDuxsPaLB z;#|LpCu-{&NRAwaLabP|^10VujwGW_kDI3&QJ2XW&$?(+;zh>;`FG!$$47K^2hvA|NAt|A_{Rcs_{#vgdho;H*X%Y zNTG_YEEZ9@eS`8HH7W3hDn!-z1@h*bZ$@IvW)J#lH5}Kd5f35Je*XFAxlhe@S2pLS zydY%n%Jp7OLD>M4I}Q&s8Ml6927)T~jbcI+zc>;ip2k8Y%7b$Aop3`{FFh$q$eM&m zN!W$5@h0}W-~BEUXKFxp*H~y}m&Kq13}Ab5No&f*CyKNPuZ281ryaPLi)ERke;+a{-+kK7y6= z$RjV^ynfRvrV&_fHzW}y(&x=vt8Tsfd&L7?C(J!0nC+^q-HGvAG9e?8Is?fx1%4%f zb~%glM$jvCRCfiE8sij7fLO~SH>C1e#UlBI4@kH%tRbId1&2Y4lO-%6)ISo#d+$|q zP&ZEUVnxf580~HbY{n!4j83i?l7=L-Jb)x2N~1XZP>9qLj{plE^i}adKlqJH;hcQ3 zc!0OaZiG@(98w{5B{>cX`9y6K?Gijd;^>wrbij^Muu&T%5ipY@9zujLe#Jw`zBx%Q zI5|_qb~Ymg4nXk{xFe2dE}$&5!cTtk6NH%OoO2FUhg}hB8|II$H2G2|k~>Tu;WBuz zurKmuM4Z=McikWU@CRC)Qp1bbd$8Lf7M))>jOtvy<4%$V^$AW+)UZa){S}T693Dc*7hB|9<3LXw`7hz3%Z%V2 z_AX#FAH4|VQV{VYiAEtEooFUF>IzMBCM?(P$_VOH7(J^yfGI_v^2{0Xn8N((q>wYQ4yU;SQjkL>;7a-xU2@@B z&;8?`weRgj>d2|;sPg>hUj1)-$?yy^ItHk_JWZ${JU^W?HL1V z#}7~gKdpW{2Xs)+Um}vR_*ql4N?i?>J4@M#*hi-lN@A}S!|X8&1nEWlfbZqXI7%_B zbGmS|yoiPl)31(PFMZzBhiww8&|P8R>JU6g_q`(MLXiGLIIr1|+StD@3-_$@mHS z-E&98hn3{CMPXIlbvTAwr|dze@qJt!u8FuK$SDMUXCM-(#z;h)62UdQ5+7AttE#QF zHA%PElZdEOh%~J2>7B_$Yt*%JVin9f*x`0}|urT*wQre&khj`TT|?jBNq9?{II zWTRvsyv4=R&S8BVPd>Q4@tzN>wr$*cMsD(ZV=E5t+c#u+SM6%34TV{8(t+!mBLSzY zAmCRdrZS6Ok9i30X9vbpaU9SqmOJd6EmON*00O1P1yAOje-=r+5Uj%nRrQpt8+I9>oq~ z)5%ClE1&kLQ=2R4f@u>GgifF4)NmoG1DsEg<1#vNQ*QrDZ1sJVgxS5}V8 z<7{Y-Y;OtA)%qz2nCjyVeUgRTCE-15w0WI8XYBL_+(D1a&n7w{4A{YHTxR7!O;wS8w9UZ02e;W|KU%@$LsJ z*$=QgZ)t7$=;JkyKlKduoz=)e3gAedcJhfbiXMLKiBK5(7nr1WoHqBQo38mmAmHac z!}Gs!+47ZGeCIv-`i&bm4d~w=$#p0kUcX@@yB;J+;YecBw%urZpL*i42ag}me)5pX z2iMfqEqeTE4rQZO-0gGSar1v4f6QzM`sb@lFS-2tyjy~lVfCl$*l)0chjJXEhm!t% z*H&)A#%Lnx*|Ehj0KMhxLg-qaGox;g#nG7yLTzx>U8%j=~r0T zhj7@~ZFl{$xi#c+dnxs~r=NVymEX?E&O)~Sz5l-P#aCX3{`Hj`|G8w@DJOgx@o`~M zv17w#>Z+z58+mG}%I_nOKN*Q7JuG^7YTM~-gw(<}n%avFpdhnzPvyYfb zxY19?f506zW5>xS%vAPB@M3ne5G)MZ4kmu0fafhW(SVksrGxENh-|l*U0~VRA7G2f zrj&gwcV5^4!@-e*tXQ#vK(aHWN)~)BT(}U8Q6>@+vPH*aCq+P($MzN31p9WbS2Jf2 zOGiRffle7|$yA7^IC$7vBXmHNg99f!84g7Oqgq5@f!Rvg`hphG0R11FKw^ZH4KrPi zga|myHoKQKW5A4uOhL}C;OCd4SM)^QBtqU^B}oCMytFk-D6}0}>o6P;D$!o{da&mLk>aR8=_>RS)=7*_L1pmU zQxPbi{E|E+$|Tu04{QZaS21An+v}f5B%*8xXehN2bE!2hf&n!}Xx^jrlsVnB*f!MP z^XQe|ns@uq(s5*plvz)904kmd3_pk$c&gpyaDTe)GMP2kL$pViE zd=YEHlxTF2<0L)20*}bu3`Xfo=93X5riWxG36CX~d6R@-fUWU~Jqk3AVSor>4gM77 z0~k>vGZkzm7b%@dXu|iw11j(cevYhQXyRar9Ei@IJ)4I>FTVIdf+I6ev2TRKzapa01Uy>=cUh39Pm>EQWa8Ce#Jq9A)_Nq|Lqu4 z_P~r7(g6ga)H!~rHKzz*Fh~F(RtTfUOr012JLbLe!$=idL>-Y!`%2EGq#^1W3Rr|+ zYjj#*hER@G1&dG@<0D|_T}HXcEXHFQQjiUJ@nB<^O#7&4ml<`WGXT=E7w+vPxBY+{%?}tk@ctYk(?2W9_)n zqq6;8HG620kuDX*)MFMK&X6lrK}tcOA+%RTam$n6IY%FH)sN@>?79ahOdqDUByVm- z4Q0^40ji*C`rEHLSGAkYRFj|bL+)g#49+TzO{PFfp_Eu{wAxarP)~3|LFn3}^Yenv z7`Ib(*RX*gpHi81WZ3by1A>-!dz{k-c;`;)#%@UmwCyi_T{@r%qgYDBrwga5QdL&F zgM?UAUEsLn@Zk5K3n^RB#L^}e=rxFk-f&hhs^Y<1~wk!#pQ`ZtmB5qp4kwLqq(nErz)upQRkv` z{-R?7+DqWhNqhJb76dnA&7)>RHoq8g-Btg>hHdok(@Kgb^s5*c;Q2_0H()KTZ`;(+ z_~FjlIb|g+R*jwXLGLkWt z&6i((IS6I#0V)AN)QjQ{@3?SJk;kPm`zE;nX|jV$D0-K<~G;XWm|#r@^WhA&1K7c*@aPNfBrG2@FKR;g^{%^pC{WER9ElR>=1tF_|5%){`GwiGuXrmhhmYKOLD388DnwwmkvGcBz2L2QS`M1 z^S?Ux#HQw!#-^r251ESenQ#<@$BZ2I!AGn0LJSU~_%d$C&Ry!AK(KJs7LNmV=Pf@u z@^GctB@QvmBft3-*pTXGX9cEfL)Ao0ojf5gKYMo#&nr0+Uj00`P5@_ssDUN@)pSE~ zr|LP01iMFs&a-FFX75V1v%N&OOKfhCTu7yX zpi}(v%bWou3eMbfK}#A)U=SbUOr`*^>!Tr1+)LL_1dpi@dqUZq%Vfz8pWD;2m1QVl z@)h9`QP4?+uro(eAT?u1m7XI+3MD2ZAPE5g3?O~f=$q}dq-46Q%dU)2yL7gBOQhsF zOD;4(7cXASEpOzKh^PPqz@)N!SfU|FrN+=H=myN5q?dl#RgNs3;j@ZE$<18+;MrXI zIE;;9H+O@%WNkOAf-M zUKY>Ns=btl8dD(Z7cS3DA-)hisQn*%n^>ZybVy%yp+~fk?3h#hQde*Z@xU?c0CMs~ zh;&^%(h9H|Bxs1zIIKe5^4s73Hh1obWePx8X~fxfRP;}pm?4b#kAo|?3YxjXSnOaz z1|gyfl5_)eBu80;_LUNWgzV73oik?+Ng!V6hjJu_k_$!P zMLrS|g(+vL0cc}L(laR+i}j&Hha%uZmdeCs`nLhE4?igrH$sSy?FwrM7817zoK}CKRRNIh;+3 zFMlA1MZ!*5022Zz5fdo)X1GRUFiRA_I5|XN z3kTDH0Gx#5G4LRy=Wu3;B01SrR8&+|RY45BNQgl`jzf8z6ECE?6lcwvHHhqy>CI9K7k3cf1an`6VsudIn*P>h;8!$j1hUJqaVTPq#a&in9 zBvEjpq&`7K{V)J=G$QjImTE{&wVR_{NFszo3o04fD6DA z{;iq3w)F~tq{bG6HTU?VZolhcG*MvTlgIV_-MxP}>&(+<&zw#jD`~PC9DAG!!LWG$ z;$vn{{l))0HDStt;y!tcpMUlBH{Lt_f zpd0Mrsgov`zmiDHJnW)snq(oLyf$7C%UGHSd;l*9&gb5s`u5h_VB4f9#7D}Wt z@0uPPY2A2rwL@Hb*6oS(X#p}3+7Af}(jE(gx2jP|p$JKFx|ySqHlMon;?&aT6bO2Z z>ItOPI8tNd2#sAWiCCQaOZ{UCX}=PEO=iuGZ2OJyS45pI?IAtEz@oif)rfzzlAPDMl4 z1g9YA>QgX)idVd2KI_efws+QT&X0sn>t8Uce_>I;PcaqCOD0QQj>8KAe{5}ey{>ue zfLMLfu`?7J>W=4n)pa7AS~{q4*sB5w7!xs8EF`)763(QIlNs3_W&FU%8WOoPt2I_H zT$o1Nz$`2QU`ho8i$E5-*y7*}oAn8L8-S&(=UG>o*qw#=~ zTv*AVWrBd4gy6hDUyNftoI*2;D?}D7N4cBG42}?-!*WBU!P%8Zswg8FT_xGi@J`#U z{lxV}^8Xt(fMA9$+qCvmRt1=9fXTuPFhhZ zEM`~OK$5tm%ja_WJst$U=t{R%Hw`aU2SJRq_trPKd__Ew!8FRG!ivG?1=5`r40t@Q zwuW8(^RiJVf&0k3MiLTk*tD4mOA*2Hi;Fq>@&e(E7R7wjl+1g&33t*t?cnjZ-SFRx z9|ki3s5bKt4-PZU+p2f&+Pxcb_R=@sWjct*lUZJ0K_8`Jj9XV(#amK}#iQ?LC9b*r z>qwtP#?8FKK$7N!SyXFbR`+u@n(eYjZMfe{`~lpSnR^w2eY8!x5;>@ zRbB1bwY%oYXZ}u+xhXw#Sh)z?rSdhV1NK7=7+xuC&Y)($#}#8l44m%~NUT(s0kC`M znS8>p?ScF6hc>oeoLHh8g`O9CW68*1h9rz~R8&+L5jpY>Vx_YoYC!{9bf4Kdn^fW< z1jz#8A!ZsfVvEZL8-zFj=&R-B>cKG%EoGx9sh|fB`(6$_MIK=)kUKsMJ*1y#B^x@S zM-YlyqM#BY1);>^7XaBC8yU=l?6kXH6h-J;g>CJeGy@ibli$C`Zkd7uf{jIl2Vv6^bK5 zc}hW%sdm-@NNLUa1QK~*D6DBC@d)ONB)P;L>{*Tm!jBE}BT!o9eEqB;zdHm%Y-}>n9 zGbYR(Ie1c^oc><7QnHA~!ws!FHtziBz4gy--2J9AkZ5a3#-pqh)!qZf&VTI=y!wMN zjXn(ff^1)MMDC2DywY~CUM!N$2$dzE`7{SYGQ`MH<)(izM}QVB>rT$VNF^rYsaQIy z$aXvEYyV65{Q2`aQsQWVAXc=f+!_IQ3b6Sk72TV)ECOgwXy_Pp28I9tEUyvd;h_^k zo=}M23=M+>8LRjqUW$g$kY&075D&_#9BzppIVQbDq=85haq?2!jW^zib}&;08JSul zYq)m`Hf$-RgzW#Plo32E@ujy@^O(yQZEiv+AWen{80}qnHNyl^GVnsGj8?>{un_`j zJ_NqhCxe1Ya6$S-pr5?JB$Y?GvnG%Hy{gS~+SUYI0mL^wO1 zbU%g*0frcMeY7JPu~eWe5JTNk+gkGffIT7nhyE#3Cv&b;0x6S@gT4*H@Hf~RXCCxkvH*;lk!qm@Apl@t*nBcs!@=kP%q9Rp5(`)IUAlBBFhHU@ z4NH{ThAKuV?Z`Ob@B>rVi|zA4^2BD%hTZ?GJggTj3_+(q->F^Y}j|Oh1Sv z?Y3Ptr=2xt#E5bLZ6(3WK=vS<-LkWW_r`rLcq}_Iif@D3gPd}xaOwXlSQXS2&CfGW1*^OpT|}-o;x)c>6i%9I@8#mQa4!V7%(O+ zw-U{(a3r&;=nDKmI`FZEP>SXJCarU(_*ZOcS{=)YV=S0kyuA@XXCg_h5A@-zg+tYxOENvJ%)6mVAGs$C)sAG9pNTrd~o(@8I&8f*mjtKln0%U1!wA zz$XDnFmgg-4krc|dQTmf_{$nM&k^WX`Pc$ugDp5Vd*__dm}b%oD#aM+M%~cfDT=K$ z?YMk%yguqn#yNkbKlb44wQ6VJ8Iy7Bp@b3cKjU>gXY3R=o|h)8E@PUBEHhez0x(dv(n%+pAA2DHvTcILpKG21ct6 z2UuMrA>v){35EGXcQ;lwHLR*@%+ARRwMP4L|H{L-*M}0caPJz7+J<--qg1AlSn7a*wKUhbS(&h|W7&p>wH%9N$_p@?Zq_iY zqUB~4x)H1ovHe9t$irpKorKKbEGk%fftFu{(Rfhe!LjHfYt|uH&Bf>?S%7WUtXYU7 zDk>^SNb-zm(*xQ5gUT*6NQXJFAsrL>`WBG4002M$NklizdarEu?db5K5Kvp&j)Rvm+6OK3>NSKh! znZjHU*D?bk0FPnE$;Ln#`7BaB4tHKo_OQWaCmnmtyfeNc%04ofTUuKG_WTQPy}x|p z=FK&=b$m88H%B7sbt=jTmo6PRu(${#ZpwYMdJP3d(EyRe*bzhLo_HLAWNK#$Yu2v+ z$IGv-`grx`&0Ff5TX^N8wxM1r*XbD&(hvueO6pK}i3(B2(P{yUw3pox8=HIobbo6k z>h)ktI(GiN0C_-$zcUAwmLlm!FinA0f2yp=Ast80e0W7U*ig;>cr7)MjK+Ba%f0xu z*H?V>2~|N9S{R51YHI3KUfi$5+NowYyv?E|{8nvUU29uwLu2EU&pfXdP%g*pBfj+3 z`yVtlhr_K3!?Vx7v~BxNvW~_Q3+A1fos}(=5On~ZR0!HPs2H|>;V4pZvl#gZ+fgKyoHQaJMlFbO0sTnL zVD~};-2<{o$TWcD4zUQ66Owew#cW4!#Hb=_p=`)OLU#7~z}~gE;Ed%5>^>vbVK++@ z`c~*|aooz*S87b)#gDWUm0MKOup5g=l)SJ>Lf0Y-qR_)az`<06bcqm2XtG1XP8~8+ z(s{73DV4yC#hgkYlaLq!rd$#w9;D}x1Wqc7U#f+DH6m$|R+EqoKkz~x(srr~@-S(F zo+IJxz2zL(kRixF|6h422(35TQF4bQ>7pzb5VSGDQwj7{9G^haxHKh2Bb?&UUCks- zscCmaNMN8t@+$=t0BU$23Mf)7Dp@L1Fwk@GbQLJE`;eDCiPQs4i4oNw|MC&HlvVQt=au%)snY;Z)6qZ z^vlaCbh|yxtuWB)sI!@)&xD$_*fgVJMh+d)XW{Y$m=c2D!42_vytUuN3CF6ksI_nV zP*R^=J2Nz>K%mU0X6y>A$MU)Cf@_%kuuVw zM1stP4-RSAV+f0&Aml;;5qe^vpUXOk#Zm4iPzDR+;U_H|l_M^!JONDeG0NmrfLNr@ zG$KZsh^6YNUIJk+I6S~pZ+LKE;}epEDhV_I6057Zy{e^h3?6~E|B{yefQk*GXZAUi z0y!*A!qTeqP0F*vvJMZO5P+NbI|CDf&Iu&vtpGFI65)X=ax|02Oq4f zuHI4HFMr(lF@3UvbdCx~QrQncRd)<0s8Nu5m{L&(Re1 z$$Rx5%YXB``>($GYuO&*Y09yJNL*d2?S)f7%;Q+p>Hs#Lj)2a8RZHl86UU08%XR6Y zzRRCsJ;P+jMy)ewufKGbiY2ByP{w(qi0f1dtFqBmx;x$)u|hFNbwli<9q}cbl2LaM zIaboajF5Rz!3luF2~g}yL%Cq=Mf}>M07@lETCK@~P{JQfP^G;XOb|*vVmL(^Nbkki zWBy|Ky{C0nzO+}3)?fFPUK%)tU}X@T6BW!!A(Tf~C+) ztCY4ngItU6d*~62P#c0Cym8FF!50(OyBj0Nj8(<&A~n5f4_cjtbZPY)jVC9UxX&IH zdwdOsI9e!S54nCW(TY=FYoUty9T*nCtah*&EgOFcOvjcUB1l-+Af{uL1%QO4Lmt?WF9gsBwm$#! zv1ulU6s$NBcljJFhu{fJ^_Cw4&|VkH0B-N@So8KsbiTGh!I4Xy)llHzjwd_?t4!Q- zaR*#pq{=RjH{KLZwk6S?qh1h2)rXwHY$u8hFc201ey=mj>&)hy*Y9QN*|>B4^yy~- zDIA4?&8-MNE4OUMb`{rVNOHKxyX@BI|nw4=)gY z|JoZ@e6mLNYKoO>!ER1=PD`_Ts))1Bia~=|k;gIJz9o!Ayp&lmJ)KuWR@>T<%GCj3DL>q=#e7;-ZL9m78=mGIk`;@{e>O14d~^K7&3Ul zS!cfe&T?&mibJ#3=U#dx=0b8E9W`|D++)>QbEow(-v`18Q$|XXt`;Zgg>2Ym_qj=1 zaApWtZ@6~%*wSN#%hRb4wcsF|y(Rt1$P~oBgh>cJ0P`sc`9xlTBZU1h6p|Jv@UjCG zNP|H**nIw2jUKAFQCAyaO*nh1b+NAR3Gora^UNOhS?)ALsgn&GHi(RvGfNTbQ99G3$O16(g&z0=MnyQ7MAMdV zSO=9)c6f-S^6eqw7vlK^ z3G9pWNc3w^LTA53(b#d(E;Ip7ASEx#NXtShyD|z$K_H$$QyTzFYw~L+FQt=1gCT&~ zjZc0hgsB8|9!Nsg4+9|zVmODe6C*{Syl_q-21x8OW5tC`AqJAzWTH2Oa39u6&qT71 zWSN9awM?b}2om}an4y-gNO)ysCCm*WIK`BD1CnW%v>Y&S&_d4y8^4su3{@y6IV_H9 zVPK-$&Z#hz5H6J~bD zQPX(S&9~lt$NyRu7b|P#Uvj|>KmI}4fMSjiwM-U1jv-|CoA0l_a`nyI0R$ zzrXR)^Uw6UMH3BdFfmGDc(O79Vfe4`>P$tTpe*DPBS(~7|Fd(iz3OKZ4;>pu4(FZx z*keymoH#zmzsL5PNlqGyFt|AXTNizG;o0X+{?c)^O)V1+9e%@)eugsNH@|slL4dWN z-WcgLYStl*!|~zj$}6wBzNxu&K;IlTCEIt^9CP9sv-IODjDZgP>SPqNd+)4RbJn@v z?jMbub?Q~?Z`*j@xn~Y4kz1QugsUWns#9sFHbu+cTz=M;G!Yo4tIWJ>&&65pO96jdd*BT)fd_p30(awhPz|B z6Yk+uRGKgZ;{h$a5;7Pg=T3+pGgeKqJvqRg9*0$tA1}!AUVMo2{U;jh9a#?b5?@A| z7%Yi4x9k2D@oD`zJY#^{28YT_*MM4*sn*Hl+Rr2)8xeDs&vo{s$eqg&baHZ$i1~f9 zOA})U<-napn4s`0EL~QtJqsvC9I>l8`ThP{x7A;bfnul~*GpsHEU{k~8R~9FdBxQ*uFig-aS6E=<5Z~Zrr9oaSPFUtK=?m4Y zDAHH;84F}Ev*bY04aeC(m|3ns3F`qcvr>|^1R*%Hq{)cT9w;q>4%~$oUPw4;Q_5ur zK7jr&1keYtGXF22l8(4#$&w*nzZFG!fiZ{Z*K+3s+}QzNPPRAc-Gx=L{zVlP6%-g{ zsNBA}?xZ_ng)xTVad4xO%)I@29X5Lw=l9OdLI zuDN#gx++d*xq>~gq~wT04;eXh2z$ZjUR?aY5B*tbjl`3qM<{tQ%n)v}Y4cXtJ^H^K zuT7mY+2ChpMm+tG#jpMNmfLx_gh>?UGIjj8sZ%G9s3=3g^wT@NnUr?h{`>PAdt#G6}MwpH)=)gSL?%H++0cr5z0h36L)7DBls;XJFRrk3Rn zl<;hbEF5F;Xe1m`;tngBlbt=Fq%YffrxHMOVTcRnYUzcH1m*6DBqZDcbh}@AWyzcGFITD^E^GcdXR=rSEYzPNNvcA4 zF8tBH`_+6>DQ*kp-TcC)X(n{d*ius4z2~jn;7pG)TppV7%b_UQ2{-2#Qi+mJDVHD- zel3vrDJG662?4Tuf+dz6tn5fhNEW2cn2Op#iL5o2&WNlOeP6DYqDiHY*9tH@x^qw$-wl|(H zPrKl~PhJQo5SqI~;ZPu$4Kq|?WQ-5eL`oDb|JvJ2y;RGFg>KIXigF`FEpDNW0JKmP zky`qUN7JlXJRod>1sjWE<>P;6G!gbR4?1GnJVmG86)R7-PU-<+y+Bbvcw}%<+lcHX zJYAoc7D2v`I1Cj|8TE2L2g0s0l%B)k5Y~H9Rt1vo-4(Flq0|sVZ^WoEqGz;65v!4e z`P$gu5DX??TAB8xlSr2)R@jbws`}(ThWz|lvu5GB?6S)^$ic(02Nye-Ri!Kfj9(Zd z3ke*yeXydy9Y%!FbWZ9=G6f6@>6tKX!4E>69pdd5{+CaPw zh?o`fr1{7ZFlZ22GksM&f~}ih*{#vIrqnPQZuUSD`bUzGZVxsb!~jMv(1TxyLGF*N z89gAvAx7{Zv!+{;ysD~-U-}8Mb?7$^YJsFS*dkJU3_~Q*92KCvOx98y$(^+9Eg3l2 zNHM6u4=Ru#BPL&l2{LYCIeVb15F$;$uh2sjNkAguf|+0Q2`UqaA7DN?TcT#<^i;Yx zfp$nqLSMoooJ2x;`AZ!#rg{n7BN+Vfo%cUJZ{9`Y51CFA(Q~&}Hyn5D6_uYpT2VGA zrVSaeIATQI|Iib6-*NMdS!cC{!+xLl{@>o;udwL)>#ow~%GCN0>GQVT4VPSTe3{n?a6NJ`^Ow&Bp?b)KU}g~tw1A~r2CGk^+DSB?##l?XS6Jxy^g>vsj! zIh_9Hb$e9p?%v*ytm2QI2&TY?5 z?F)Hi4{hieVqsgv%j5GpPZ${}$jgR2)8g$&Q^D1@QoB;Ge=}9#7C0X>sMhzoGtwi9X%<_I6PzI@+sq zYE_>C$vKn*BR=1l;rafv&20&#xu2=BJ11BDau1a0La9Le@l78C?aroFx38{GULU1D zZY!D2TQwR@TY@F%qTDC8)Mk6bJW5vV_p8w(%k%a!_CSXW-|8LP`{k=68Ob^&O)twR zwaqWHc?t&eNvteNW#PdZ7-wR|!z7D`Wx!rdwSrkDeG;-J!F7e%tT9pmy8k4L?g0*L zY?qaIV6*uG+kZq2sFCS(vX^MCtmIKw)GXQPaIWnR_%HzNW@qQicC@;8)VGw58P9T` zk+5p_hyKCZguj}T;y#zp@9}5*f|p+MTa(+DtqpOi*P1xT@^ND^ z=wrjk)}gt+df1>cwnJ*d-XTZ`u83Dl7ebF*zCl!^R1tA&XGeRElK|a7h+k^Jz}r9Vemj74NJ0QWzC)(iX)&f+45aY@52SP|LjZM1-$24;z{CS2QdAM7 zW+Wg5ejh$*aCFD|6%IaO#>IbKdRsVdMWSs!Pb@3j+t!9qh9*|6-0{1|qnJ3WezhOs zl1V#I2M5FFVE-BmB!n|w$cTlRy&fbB(=@aKAx1M@VkJ=W1yX?d zmFDJVgMi5|4Qf86Xq<>pQto*m@yCh?y2A#*?x9y8rRBl|CkG%WN`3`~f`Err2iq{A zgkJ+=r%eKBcZ!LO7=3C3NkI_GFIcdEQ!%9WR2|}7!JqPr_#SJ^sGL)iR2mp4i_n7r zod<%@rsqm57hJFj))f-L2`Y~LKn3NX!bu;N3WT{~%!>6brXGL)``@Qm4nlB_d8ip) z>|}sQS@^{dD#-#Q6qasGTgYJm;X-ptxu^jq6td>5f|g=#Vj#%4v)4AM6Q>{chXh|Yj5|590zS(#?X_25J!;Modez;&U`wOZgm7$zaF=zh7WTyeH+jr$3BoL z!fho&-r$4Fn{OH5W9LUnWv1282%toKl$y5V8$oC+$*!h%j??5gcN&B0B)WGgIzf?! z9>JXc_36$lo^FexxX%sL_QgOa$nHN>(~3*4l+G!ozbcVoPmq$1>&kJrx71U8(gd~i zqLl1u#dZ8`|IF|Qh*+qdF=dEO2}*F?IUezdj%`X@#!o4;Df-+ouElFwwzyG(Ztbdc z*hXuMCm#90aacttJD^q+`{vX*)!p*kX<6?*9S#P3=Ny#io9jczn4Pq#8P)ex2jsV- zfx5^~O7Z#zbwr@RyLLck#AOookQ^n4Wb(}op%W%5K|$B~bQz=iK*AbT;y-gj%R{UE z@lYFg(7S~GydpHSwZ;w|Qng_N0%(pFGIl)9S^}11a#7wZyXtv!GdpSJ27-#lUe^Sz ziO{{asUa4M1o{Q|l&tLqRZXtL)1&NQ;s*v`MMAgDK`iqukTTb&B$0_b9eFn)f#NUM zcrK7AOntOrcRV;G5s#p8i~N+$BL<*zvVz_$>_>-oZmm4^RJBxMz{)wK@W|EcD%r8Y zK!;jX$)^x#> z6&sIdK<4f%6HLH@4VI`lY} zzWuJ6VjamdPCcbhpQ7D0H90w1Jjb}Lx_ayO?YxD;^U({=o~Psp+77i;$iLMuMV1XS z+q{a33N}vckv<0sO*`&wUcE_3iIBF)k9OhH)Fhw(kG=B%u&b#0`0H=`X0z#aH@%TwNPrMRF9Om8 zM1|0iCZCE5ihzKM1r#X?2r5ND1ZhS(B#@qv5JEyoLVDd~``cH)-`ulr_U?Oc-KHWebK2j zr99HNnqE^9pb?Um;`5X_EuFa7K*dy{Iq*~pE^ne_CuyOPNSM&Van{4|BnCCf(Ov{C zj9rFS30odLjuR$dykhOVC11T63Az|!vU9u~h>u!GzP7AE)dE&!%s9gvC?fC&k*)vj zGO3Q7F4~%BTS?R{scQ9Cm)jrd>K#AzFm=RD6Rposiahw;EP zl3O`{BV{VAgqY;C6Du^>zgW)U^c4kb{GuVzP8iWRg+qLSIZlKCXK|30gBLg!ne*~6 z8WKZ8!Y;`gq?pohzNVS!#tBv&%28BQ#8a~4A``KaQ&MSu@oZc8S9p>I>B&wCLS%a8 z6c7SIjPi2gFolwpRQOT(V9JzDAsDzh(~#~I zQDF`r(BQ&DnOvZUm7N25VPoYe4Cu8OBDVe&!E`Dr6h2&(g|s{+Ax{Y)41U%C#oIwk z;9_$ITUCGvJ3i|-*sN(MY?1|MS~&5-R)6=F+1043l(%ShrC;r!<%JC^6gT)+gcX*QADv$yP z4k8Sm{us)|&Wn)bj?DCyP--XyBDqC!9L#xP^y}vC?|kvK51)PXMfxF%=y2rs9oBu!lrhyc0ji)dKWpCmZ~o-AUtE3FWt^R- zJQXcCEP<_;DCRi!m?`gkFlYMIbGr2J-?vA{vhwQ8tnAT~CkLu)?)&A_oUvC|G)HFF zAzeouJ}?jrVa>_*d*{u1?Ugs)8rYvXSBM<~!nSRGrGLk@wO^t8*g?_P)_EP(c<|QC zT<#c0sqsj#Z0W9ycfY7SW?;4&VCxY!a-;av=bR=15HtIviP?srG~_8BS?0W0|1SRT zjIH|Xa(}Q|9hVU=OA7jwQ83|Oym6)^sf}z_=}`N^F;7l-%T-6=E0*X^ZlT%;w93-m zX&S5-F7oK2jU;W>L$+%NuQ@5Og>ZEfy>ZXT7ql{DO%YVnnV-)Z`mg zaWTixuD;_2RDZs;?1Yi(i?TLNSr|2fkIs!(Y;$RJ>1J0rB&&MKzzHjy+NhRPZ1vl& z&aY2Np>l(7I22gA!}Hb7K;KR+G{H+T&l{JycuVE-NOm;HDJ~Xsb&6an*{rAg`bUPF z9(?F{-P+=!VpUeeQrfj04Hend<2s@+=f%yX#l8$aVt`;8yhem%)MISr0I_Ym`wu8; zC?VX0AtI%u5m9wsLacAo1T4m_gK$Eot;ku+pO6Ldy5KsXiCZPmro&RJNNkwwI|SrK zS-x~>PoJ7C@PPqdbliUZKI{8~eAKu)vKyygXH*>G_%ci+BjWZrgEf3M0dtJc%i)(^ zpVQ+CIU*cD9IJ6K;Y48UKD#Th`LX~V#vaOP6+SN~Z)7PYC-*|jr!&iqLe#$$cP;kSQrUlO9q16{3nsyA~C=vSn)>bT0ocMjQCHDT1Kv(Gq#r}U5VZZlt6h20!N zO!+R)Fw5DEIR*!DOdLCE?Z(X>x9hW&Up)BOlh<7O9n0Or@y>^{uK3;$*g8dredMI^ zk3Vo9=bFKdNmQ4@j;p?03x*uH5$5Fn4q4y)`l)2c)FOv!P{R&6D`|^*_x$?T_PP7B z0-{A1(?6Ln;Ub5R6=CLSE#lN(5=jfkDU1m)HUg@Ec`TD{y4w6v^x0O)Czp1l+&rIzS+{jYKd#~^}s*^z!{9r1mv z_#%K7DSbeVw$UhdD^6~aGc+(BaoJPxO-SrwQg?cY5g`B>E0_?&ho=&6Pp)Gm01buU z&^M|HFJqdDDpUN@#PJAKT5`b%jz=d3XvDz8Ci?@lFq)Wp=P(U@s{=F-^Z{wWL`p*1 zHesBg@qOlec8r@ea(erZKKh8J$Rlj)T$+gl@NX6SEP`a2BITAH}!>KKR-z}^OUr1|jjN&}6HKuIKB z3aCmdBBi97r*NRnkXP~}J6S>)hLW{#CM*}X$VuyBD*zWpTRI<_B2Ve%=%#deg-qBA zHxULQ2_Q4}T+Gmf86!}=_!R_rgauZHV-j-dc)2AnVM~BVgc-i^M+QG5yCf=U5xVTu~3PboyAo-U^Fr>{VKN9g0;-RMqK$MV00$D@1B1y~ACi5ITXrRNf zC?{)RIK;LjhYu64qpYa72uiD-u?ll|PWHsHBOZR>-AP9eEUl=@&Ty~aw)42j!@71+ zb|Q7$v+9Z+J=F=|otX=;&yurOabU8EF zm5DR1-M$g0k-yXumf}GJdjIt5v+n%KedCTAg?-e~q4PhVe`(yf5k8MP98a^YO#(Nk z8-w}rM~#2?qZf{ug2Rn_+)@4btT(Q|gZgyx6nD195j+{Aoa+$`2XWjk*;BS+!Rzgx%h#CmQlTw>We}QIK!5tM_0Z2@7Y-AQ*p%TLOrhI5`|=kItO8vEtK6 zPB>U)85tGpl4a?WrdEsbpNhOD?vw@q%qh?ow?iCkpjD(y%cdT65k5gW%JkH!`xlbK~FJ-Eu zQyq)4YPbT1nLMRq~bxv-)YHLYjk<^DLZUtf~wn1tlao6sc~VHvoEj9&&;B-EFTv-}DZyFQb^mRq^>h%c$+mL+P| zwoz0>1}G&je$hS9ANZAd6EWnjGeSaUVbCKdo{N$N#020k$t99s5u13;LCAy~VFLV0 z7D7f?^C2ws@F!EGLS`X@Ax~TDIN-6`O4d0dbt*)%BzV?T=9Ci4_l0Bs#el$;}6&#?!7}33} z(v|JKzr3o02K2`sfytY`gg0Js4o9xJe1;XN+@Fzwgxh!S+PZ58iY)SVDeP41oo%tW z^r8#i_}^RQRY4^D<$ZtpWclYKhYkK}{l=I6J2OZnA(? zmE(izpqyu%@-oF>_!_MnaY@IDel2g~cw6y-y57vZwpvi!VmS;k0Xv)YyViuy9<(t@6be zU&P~;*9v0x)Ps^3pgD?x0}$w|G3wE)a|kt76==wjQyn-d7!DB7VlmvnnWF=+DRT@i zwn+T|9Vwv@RLBb zx1dAz&TZErxP$7}35$!1@qEM!Sa*Qf-Q=lsj}(SSA~|6m zp{)vmMjjg6L%b?-{9^Y2YZct_nQs~l{6z_t=aP%? ziKnRhD{mZ0u$2(2Prrp8>mlnOG*06AG9ite^F28EfluMljGir_p4j)oA^Gh+m+KDe1Lho^n2i;o3Fk4;*Nbd{KvI&!Anz5`Nk=yD*p-VQVK0V zTK|BS_eHgTKBD4?&D*j)XVa>ZUVQftV@$&rRv^qXC!TopojgOnLZ+K>O3eZ+ehG|;Q^x|195&={kKOmu%g6opp?`e- z@oYzzk%M~_aDD|VsU*a%O_c>|LVR(2{fbQv$MWM(I{VKLy?fmBX{1+XE~HcYN(C9> z_WpvE9YYbjE=EEWiQK#Add?jde&%yuxH@1pcgxPGL{L=f2I*bwFbHf2WdG;W%5%o} zNX5w7(52RUTY8bDs;Xo=Uvn730mLywbFS_UuT+L&UiF=bdVn;@jns)K)MxNo=FSn#Q0y9F<1pk(_f}f|P$#08c@r zNGTK8Bb7*Xw1g4T=XRYx(s|D;e3My~su7J0gCk`lDXUf1;n2Krk#cYLKNpqVFdZjo z>uef3=O%~Ao)Y)y;OWu9s=?G4HNsB1M~L2E%kkU_dJE6QDzmckW=355?;&?-L7D3KF+@OC)nY>1pTCdAh9#_+Z)taW9ftaPCLyZX-` zQ~l(M+;Ff02=?Yxs$;zuAyp%>7(0#dW!$jgtKPl)A}3W`*HA3xm`HlMU6Tv4{DB%j zT_tTeJqoI$vFtex$Eq(^^A#@C1{G63mBjFE8>TbtRbnDT3{x0%QL@#h1{6y)Ro2>h zs+AnZcL|FEjC&B19aL6{*BQyJP6hEBZ@hsfkM?D!)Oq2liPl$CRHS1>NQn752=i7F zGBx8^Fr5VfO-z_eSBS*Jff(ZLWRg4aBEKZj1d^%T;}9|hp!X8M zgD1IaSS}Z?aC^3G?Uk1o2q|-C1b1E9b4@4~EOqWI^Z7DXghC@uK2civsf+4=4H)7ZjxYfO0sj!z`e(IFTlg5mi z|B3p9a5x%yZ}uFfM|5@AZC8A;Iuzuy+RgxO+t!S(IuKa6bSXm}`k~kDWY3yC7whG9 zTzKwTGvE3k6bbuW?p?cfzx?0-@kJEAW`T3ZCo4XWMI%19TdBGBlyUL8b?s8nvE%lV z-6+Hi`KXL19y@K?QAbin(L1HEoOWGWQo>F=7Qp)V?j_#YjMI30lgsTt`oRxxyECNp z3g;W|eDM0)AJES*Fu@_y>%RMzA5T4E3Vi4zP-n@Rvr4F=aF_!&99bFuZ=I{QghRkD z+dRoQsP^T#`Hte*XQ;z)$%xQi8 zT-FY-BHsA%;|Wkq)EzdhOC*{NXe?T^h^KGA{WcrGv3aq99rryBc|gO!s~We{nKNfX zCQ10T9mYN^-S}5xS;kr|b}O>O6BZge6R|nsdWPnZ0BUuo%XpU)~F1CcTxD-bPttQn9cDjl`e z!SYL=X+4#>fi8vWN^z{?4`)x|0~hf}dtWf^o?hJs(a$&6`mE8Q%J53&sEzmEe; z8Zf6W9COSu*tYDAmPM2qGiLCVmOxtREj1GYoHj$B2?1y3N<5yn)DDz5q)QUQ@T57> zNU(>}(-P(p0nEEJ21exJ!-oqozi{K14Foho79?cpLOL#~S$(=Tzbs>*#1l`8l67m^9;!A5Xx2{15hlzHa9ow9C8{%?p14b+x4^`n zsfYwOK|tix^6bZeUOeC(k%fHTLH03Vb_W&&1AiQ!SqkC=VGfiK6R_026i|wmPz0;l zD$M0+8cJw{*v^L-`>kd!d^B6c(2pcCWhy(3gqujF6Q-w^r!5dh7e|EWSD?`ON}!?K z)5qK8(UdxnkOjA@TWOBom4;O^bBnihYqbxXn7oN(DRWGY1m2E$S@-_xw$Y;p&Hm^k zj<7iOwrkEl>+60zV&hGYsWF=Ir12x?&VTFg|9JMRjq6YCIsAh2|8(T!!)eeW50*9z z6PSi)T=LDr!h+Xc|8H4&`IQ&{?t%-?=eykG5*NG9LD}lMm1f(cN9WVd{0?W-RZpy7 z+atR>ljV%ZC`FhiKKiiXcmL*rc?%Zi<>s=MxoL3W(q&7>j~`>rFY5Jd2&U3nr#{j1 zj~LwV*Z17|jdRbO`9C%&&YShYYDZ{2AA{tZmkvj-0f+Uz?EGmbo^Z?L$rF2a>B8|1 zTrvxY3!wkPRy7W_$Qh0G=-lb5%Pv0ggyZHd_~hMpX1_ms!P0qOa4wbYWA%e01)e6Qe#GT^5wMOcUDwvboyKl zzLluKSMpdRu0`aCRtLlXTJD%Wpt@tO+77s{E;XT*e=W~}R)Rlw-%kFE$HpF8>I+qK zKCLQ6%B!}F7W_iPTi|AEY6MYI7_ODyZ<8u3>~vs`S@Z=aj*{t;DH0 zU~m)xQp(w^$d>W3rxNq;Q3L$1epdNONp>t0#4Lc?rD!ay_-oNC_pV@|`t2_rCk`qb z(koB-?$*9_%@SD=!x*0ECh9$J(ItA#+Fg;AJ2=~hm2d15DK2F8x_v{lgGUTihjFL5 zPRNQpx2z__Ymt(XlGzyy1wPsB`EqA;P!}b8C4G6$i&*N=EO(AkJxHsH5xwWj`o8Xwk{>6~I7@ zYY5Xxb{9!<)K1(Zpl2$C0U9RwIAhdC4aRSvxVRWUo`nk+k_)@Xm_wo6@sw#1vs6@K z)NE#3sJKk5&{R zYu0dd7{_xhSg?R!+3AIb&sJbWLZu`LMaFLlU6jqN?7Bl3I5Ybr7kDBPk(5+a8u=wV zrXkFxQ-WEq4w`&p4A4!6>R>07R)zc9yNefX?c6yM3bM9tb&EK9DWxH*KBwwkQC@N9 z5l3*#*@d$|{HWW&F5y5(^^x>sYI0)r9nMGv=W1*yopQ07>+&YgpZ8Jc9>w@lTi=ql ze12H~wLa<_V(U=Z*2&lY97+^8HLF*b>MXWw+2;3obFvFKez{Ypf__Cs>OtC`m#2uq z>vaFG@A|>5Kc6*sKIe77maiRNaMqbuT=MPfe|+nzm8)^7W=9@#S}3<~-+|EGI~4}Q zkv=`T_3qWvo(sugc+`}`@B7v5zxegZTv#XIx!b z!2zQxA^*oO5w)O0{+JO%=PzEIos}Jlggq|jjaMr_uY}il)8@^E_bJs7gaR5Ru2t6Ric$P@H7{_rL#PmZB_F z2|XBk1~xdf7A|xnR3%;?2uLFCuH4c;pyKdCp<`iy=G29&ufCd<|G9JLVmPKVhwaB7 ze~bwdtWbAIPAZa2pFSPy81EpgAVbl?@XcxL0x6UTaP76%;vfCcLk~&5XPu#-tDwZGF;05-cob@(8jbj(fybHe9(dujyLxvWz@i}b6iL(EU*|Eh(EtEI z07*naRK?6X>4GHz++*#@#n`H2rcIls!*xBsj&eA_T;B-+%K%&wNsPP#{4%KFRSTM6yJL-p~8U5geSQ!@EZ9Z~+4H zQ;PI*+RJDUr%aVVkZ_wa36V`CYbbf^# zZrPdY`?}itY^ltu55eLvar~%Jqlec71DwN<;q{48FW$c>+b^1Yrr&-3xu>6g#z{C7 zXYv7a%P`%5IY}jDJK*J)e|yFy7paaa#!=CHj#y258?1CIKfF3_y78(|xW=*zss4s6 z@Y8KD6&w{$W=WBp4DZoX#!NYU%$_}%3AUE**&PVf;H#XQo7bf?|8>grDFI^9Aa+R0 zK+Jm`FQvsN;Rj=i@(Oe~`uFL@zcWuektM4g+qYw(2!)KjbChSz(k5EAZQHiGY}>ZY zF59+kn_X6yZ5v(ea^2ti&CIf3TI2bTvx)H!UOtP*C^+en%y6V74POGm9%m=Kn!TZ1Hi%jHMq zNmX|BTErepmow9`;^LULc}}A4@xmM@$wl-KyrvpW9Be69V=qup1( ziMr@?a@BqrDvt&6mPWm1tok_T>33Ym>3bP>){!Ht^Y#R!L7m*3^ z0=Xw?5iQbnl7icOpBrYHVyQQx7#WUwMfRqy!s(Z-R~%)6X&y3(CZ~LZ7VrHEc!IDU6C~V0>UQOcp!(d?%#4VF5)-`7%O$o+s zc*>k@-9qywaBirF4R5-S({vo&f91tZWEU?`y&uL4&TRbwa2`PF6IHB4NCVklN#rn_ zh|?~$$A;oS{We1a0`|g%e7yBv1Vx-&V!+1OIePf`d4cuiz?UXD)qaQksMcU2$8P(j>*M5;pVWu?0c7M4`$4^jQ!BeiCbwOEQz} z83h;LO(W#@pSzyd&9>XU-*^J1iivKvvTc@b8zEMA!OiPoogYd3+B-0Qo2k@3zMpm#g7H zKm5hTzYmHEgHva-IMgmxDG3Gr4!Dl%e?iZO;`5>)#wd?y%yzsKJsdXf=88jPxSxH!l$3%;(EuICUs zdL<}GO;;C={HB7=@2=}SWP!2pZU9eGYi$f1cLa7h{K;iTJRphODP-To=}ZA&E36cB z%~v}n0d*nB#B-q;;z>}7)C)r-hKJa>JLL&1-U;wW{e0doC-AyCeGu@c?k7UbO^9W* zwo|ryX(kdON>Jgi15x}`nosMQloIVSF3NDMSmarL*{}PNKYQ=NaN+r~F0qx9A8Z3; zXY25;TuEoGGQ5`_C285thhFK1Zet8hhDtUDMUIz5cwUy8)X&B$DqSa+%k+aF7gH)B z2akMIpTVc+h<12*ihTVpn@CNCMUHy*XXKLDs7B}_hbKD*fM0Y2<%{B_*71rR;TFu& zxJNog6{Z>)73n$ph(aY;s2RB-2cEPMiWkYH22qd8*r?h>F3-n#OLXbh>6QQLYCrbW zRp;F8^1daEo&CbBF=|LKT3$BLP1KDT;zv`IvD`^BtJ{2RC>b^(#AA13$l#9&n@`fY zakJmLDV-TE*gPK7hX%?Z%bCa%FNL=D7t(ZP=vucDlT^@+27fPhQvIK(YH)iv1{;xl zr1cmCYc7Y?E`+wh^G`fTVZcHK&4tUIrEC4~(DEirC2LXF@*?d{LyYn?)YWPujZ1%*%x+YKsf-Se7X!IypEMScRt_|O zOT^B*rL4sH$LL|Kc3I*#5w*`>LNXO*Ri@t(?7!|zrFOqEv0|`(auGDxChwIR&SPFH z8CArk)wmp|PKJsfTKuA?vxy#Zr_VET>bf#PmSW=bUiMg*(aSxCePAe` zMA;&j8qhW%p^<)d^RhqLR18t=A&oy=fDy7Z1-i>qwx#WHVFjwV7I|$%0}j2M2kKLU z-Zo63@Qg?6C9qLYb|l@e-f+*ej)FwtfVTyTPU>A%iY7L?X++*KUnw5mCqIqcD+1g0 z-VjVR#ruFptn8~Q$?oN5?&A72I_H(lMI`AIeNRm{tQ0HO>+w7#OffV31te7y%=L!x z#y~*$IfcU57hDCS`~(5RGqt3b|EsU7coI1{5|kseH2-H-Z+D5rY~Fg4f)YDkWx8e= z&z1N-v2(=H1tyMSL%^DzdY9W~TUC>D+8^TPDr&WG6IvL&4v}r+w;?eU1iFzwlR43) z0@F=ccJp%uzq~+1SYaqpso>@olpBwlDC5_$$B2zR%$UC%tpEEd2Z8JO)v zrY%PI!*<#1r!s<>rJ9?Oco`R|9{KOJ+wJjpCQXUWQq~D)L@eX+hM;~wo-aDJ1VOJe zvy&1i6^0Y*TyiNRa$5BGJEoZDqRbMTJI*=c{K{gt8IP!;W(=caDMHI=yYnWdhok07 z)zlEiuJ zpI0i7h}cz% zjkia0=QIJ;%TDWIC@~opA?Gxp1*@_$eISDQnH_T$qyEd5Dvbk#WxP?|TUzLf*$o zQi?++!XLmZ`RTeY`;l!^+ZZ#uocMC<+EAlQe;&q zwipu+E(X03!{3}He*KzOYY=tWk?jBZnGnSpYA{J|mVVc$g!e4tBwGd%=nAFjSH0Os zXE9RZU3wYgw4zFsDazC9t!J>24uTN-gkLGDF=2gZ_X8a@UOsh_Ae}>lo(1CUq*nbR z<+8=hq4sAc%rC6xG57?am%o~{E0`N7Z?$AKqOhi~QungoezQU}&O9^T#U zjoMzPsqpXM=uh^X1S|#3cMbL@O*Xuz7yPR)a%HRrt{+<5!-*nz7114Ze3Yo<8A)Pl zDBqRG>X#Dh4$V2h8f4?`blql<;_e7|%d?y{9t^vS!8uwfYvRz92EG-`slVFOS@zRD zS|XXkcjp7Ot4ihsK;@5)er1DmTz@%W6E)umHsv*@t6CK5qsph5M#5v#mrAFY|!NOuST>{Y%5)HM}ASvs& zERvO!D>S`l5i_mX!Q4@?gjw@!In^;KnI6i?5Bl!OZ+Pvi%@23N_R~9jo>an^Pw(^i zqUP#KSf26s?`9;`Slw2=DBI)M60$@Cl8RhKIs{3xSBicC zzcMS!7=Y1EughLiRpRjp_tm;#gSy%fdnNoS{5`+7fEKo*VAH1W%PyD1kp+MsIVO{j zvMfMon*tE=UXGiJm$xhHDxrCTnjMy{&&rIXdo zunDPfNNiHXrA-e_-KNyt$ReaM;GJYV$uh_Q>GSQznG4y{t_+VQu48m7^UaIkCbJ8A z<>1bKavGGZz`;U8P?AGst(>yX1AK{fBHqFw;)0$p`{B$_lMo08$GO7IiT6#T#ZzUu zB3`0c{Ghmx*X_Gs`QIOqI2b;PylX8ZnFL$+AWgurh=@C`i*iND`-KzkOvajG;lX$t z(b!o}#QJJ%SZR-D>v+-6sT%qdX`z6MwsEY*^U0>gaJK8cp;kK4Ee0TK1>mEHWjXxb zY)b8ddA+UhStcAVDJ>UA!jyFnZz6N`!Q{$MK9Agv#2tu1+bi2e18|NiY% zoZl=p5AVv5hnEWFUED|ie9)RyaCao~X+o`fTv#iI5MEuwhq-Os8$bp$jymv|Y=hmW zY(^`_Yv%bpd7V1dCd$g!DsbIuOQ*CRrj6?UIN997GP&<+>Y2O!39RA9G*$1bUwcrk zqTa!@lB`ZV0ckidvn5Yx0qv8sj(rpNWq4b&koTIW5B@~}E}LYnmz7f8p)9C8QT{@u z1=C#QxAj9IaKqQIQN#cFf|oC57COD(&879Tf*unxw#tW0hEZ413eb^#xs>%j_mMcyHTBeZ>jLGRcDpCh zsYQe>^-*Q|pm!XZ2&~B_Eoh&u+3$9J(p+8cXBV_E(xd6$f9z>0&vUVV-_6sg6^AeV zObknElJN4*zkoA<)U2dQux?n?GAg2WXy?0i0<})F-#$DofqqoL&5XE-@oJFO2+7Ho z`2dB{EAHm5wyvW0x7vt*Q}{&+x6A|HvX9rVX=B$DGBBCwTc2_DG6bmx+;3XGpu>WK zjm5de6%%_ z&Ji9^b_5!0&3~jfYcLs1!N^=WWd8V17zJ;pyV2=~QYx=^4A=BIn_!@cRk=^(};EBpo-0@0H6x;;zT*Uj5A<;bc z3OJm^YuUS9b^Z<=87&aN!2y7pHDDz}#%{FV; z`uajGsQR>Muv?{Cf5q!TglyOG(t!ylLebr7W`~PC3*`&rww%WBnJj3r<7T;RCky!- zM#z2_zu$Bt`W>GNesj|xbJ)c3i3A?Th5;dD6dtd!^zcfpMMcR>RS^Jd8m3O1hRJ20 z(D}SBx;fm?Z6b-$$2jLfe2;7q6o`0OoYtQm_>Q4}_z@_SZS*2Xqrbh!-*{bgB#ybB zZ{acuQ-AbIk0URZtCVi z0$Ga>gCYTM6xv@y7QBcb`2`7~Iq2uO(`)3hVKeD&Op8V#(c%tOE+_^~?ujj0Gj+0G zIFE{!?T-DmG+~ZISIRZ+B7?t|{sdaAgUmO*96aS=PvlSgNR|(tpDnfA3KLN?9$Jid z9k_VqUKI0k($=Uci2?O5&d3m(2#7QbsQV;Oqnj7)Su5aAFw=x=8&=WrrI78 z3dAK_lh~oEN&*g__P$5 zBV^hy7hTdub(o+3r)uT&S6#}e&2V0c+91Y^+pF{NFu+`JhP_X<+I^!+ZzTv!it9Ed z!-4yIySr;IBq_O*ASoOcn97=)`NgF3D=wxU?hbI{B4jUcDFlnqH*7jTgC}0SANg!^ zAtm5bnBWCSh8m@-PWx35nadtzPq%{+4;4(;gh!%$@iS2aXl5B0C{P|4wr)C4^8ld* ziCS0|v?dax^f;u9E7ohy0ua0C!xq?6tyeDOq-{kkoyBr0co~0GZGSPPFLESEn-0{# z8Be25AP@0aB|^Tl;2Fksv-RWkMyzERKn-9#Cg9By?_eU7i(}1{i)*_#O%fA~%a&19 z9FcUehgdfs!~%C|Ibs|Cvwg^+*fuPF5H)*y3$d?cO%WL)H4qOp@p%}3r?x}ahU$Tz zVV}`{+^-Z^7tA#%NbeBkfc_B>S8Hl?YG8_E&y*}QlEQ0^L?`lej_iv|%v%2GN`Wy! zd^i%q8U;n!91RlEsg^M4v+CGCYuT>^;3J86gl}&jtb&sF(DKo|c&*Oa1D6 z)g^~l{e5>)`_P_dTZ5olSxlv8ORh%g{3p6wneAd?(iP(bPkqa3A)$!)(;IPiT9H7% z00cGSS>uOnpIuCV{Sb>Pd;7)lCkiNAIhelF2s+nb!6hoAMzi^povwTGHgRac#XHV3 zK5t0@Q>Yy}7*ig8jffd88hmsihg*>&p0A{JvSl?}+w(vPy!OZrTJtC943MaZf_lAL zk2g3WtviyS7zNBV5HSD6rBL-iQRg|3gXQ2< zg&Ir=YR!7BwC^AD8JRB&z5o=Z%|C%x#fnx&en#%Ezlv{8AA{g4B4BsL}C2_@um zi`AEhkdJJ|$Py%K6tZQcena(+GB7(5aWtPqw1M2`G5-anI}FeHZmhHvben)S-fE$A2$hv z_xMp|$gxHel!A}&K6PhA#oT!9pLsAIBGY>`X}C#K2_a|70aAtu8T;2%9iuvGx1$}% z7+~*PW;Q%HkpH?z28bFEk&%uE>QIqL+qD6kSu8ZEp{!8`qPHwCKxP*P8%%U?i-3_i zD}L)L{f-J@NM(BY>1rY2Ex?vMYr(f^#X ze?EbS2ZaUt_)96i4DEk=`(IN2)BC@CqF|fY5N__ePC7>DKWM$TC-l$Ii<{2{+sy*j7q3m1R&<7UMg1Lf6#j1S6~3M5Fy@^rL@t%U&8-G&<%Wm znAV4Q9l+v2A+kC^aTvap?yO z72u?GoFff5Uq5%{$*F==1a`sxXAk}x?fj>EE=?p!CJ(YL0=iN@!$~8)0>q3emLME3 zZCGG4KljcCfpq(AUqEp#lemn#L;Kn?qnH0f7)wH^2Bq1nWg9{@qmuujw2(+3nwd^s z;(L~C(iywq1l|Cqp!(egBhVE@V}ybxJkuhaN5m!=_7P?%wjiL~#>MNfv*vF5&5yxF z{QCE=HEa!@vrt4)LCfy7XGc=3jInHU}{G>kYRxqj02 zRja73AQl_bG2pQLO3WgvjP&B$-uIM=Qw)XUVJgpk|1GtlT zUC$I16@h37;!lxA%k6hqZp-fm_*fXkfLlG6P%e39)w<4 zsP({8qb94-?Odo?bFxlop^FQCLic|zRzk=?oZuF&_fu%Zu1b@s(f6hQl4>exWPBu7 z1oE6n0|MS~D7zRd;M~dz0_x(y2bq}xz-Ox^QpsP>?fvvxO{R}$^Qoz+WSDY&)V^@P z1%&^JBSmfqyZ#Xo;A-K}b2kdWM7w?d+IO{me0%_6_2BS%QXHzhdv|69-mfAl^Tx-= zxo$cRM`Lk4HtpK4*PF{7cKfy#F3rr%52(UBjQ|x80IB0!ZFT@YQu$n-T(6VNWJ(1L zglhF#<5+}A0KV$}@p9*}tw3*ocbQ1?h*+sy{ytUp77OuwD?DR<$|InF_}ns*46R8Ogd zG}`pI%_3AFX?wW4KcAQ9$1R1F%jZU6hcr;_K&mQjNNZ+}3|sKLGiaCu?0Br<%s?W7 z6y3Af^4*Vi$22uxpqAgilvfvjb2880F{N zd3m))ec#_5pUCj9-S00>achi&1{IgY3qZKX>(1XkkAp}`l$}1m?vsS%WLA$GUGZW- zq?Yks0EA7eB#2qD1{;cdCx5qqR?o%zss@+d5aEYRJaBN@$MxMkqPdqdj~GP^-`9x_ zFDBa3&x8gg_v`S0nZ!J1jP2gN^qqy*RCWUKYoUQ`)ZA{HncUE1{|jeaTvys9jMKKg zeOvbU4idd4i`6W*z$WKDgY`m(SwQdx9`;XXW1`dLfDLq)0$-grb8;axgr+9sC?5CJ zEA4Ism)y#g?qZV8WY3GSaPv#JD_G`&q*i9&cae-lsSrBL8Qq!%#s|rCY98tON(!$ZM++5PN}RAs_o`2y;~C>HUSGuQ?b#K7p5@e zk&*j>WVlV(A=Vg`w zn=?yE!L^IS=CK$FlXXEd&)+x6mh)cS592M<{gfCg1Y>cr0hj_ixez|HZ6Fb84(vZ$ z#pUvRIg>?96a#GB_WY>BQtKyGA)n3c!#rS-6|YG#P~V#>QryM)icW1QS1ge0iIuL6 z+w+-#ti`q&)R?eDp#@)$lAVISjv4*6^z>qB>?tKt<(st=a$tZ{{${(acaxsyn)+%S z;(Uq(!5GO@tZP?VM=rDRT~9CX09VB<`91IuG&Lkqzh+cZF;gM-Mbe~5o1^!)r!x!P z(g#s|76t&_vOokO3cTz!juCA3cs+zbqssGMvtcZ9sY1~{IQYNo2n|5UIfNQz$vbX$ zxp@jL9{U0OwS<0;^MJZe20qv92t5Yf?(}#K26%2uN~gIV`t|y~Oq?c3Uk~};fG8kd zvq`i@bw^#~y1DWkXBdJxKxyiO`{OBtpRdObewR8}1=$hqY%vQr>ur|5C^>aAyKQvH zSeuPES6aK>)4xt%dl*+!Pmg1K_aJI!=Ow|4B~iWFa9Nf+)oWhs5qD3m+i7vs^-5Ur zpdcP5F|V}#2#rbYYH-N8U`WW&%0jTRBLr5%iB+#UWb#^EHXWx%r;SZcVpsNnMmbBw zp7A>ghfAUAVOw`JRp1x-%FNi)&NP~igmJ^VGwA3yemqF3g$~{Bu$da(oH>c1j=fUE z3{O?6%i2g{P_#0?pTtiVJ=K-D$Vg?fG(DBb{Hg@!ZX=S4im_9wotYc$ehT)k5|a45 zYMx#AX2nCQTw>iMuc{Iy3b~Gixxh+P$YY`Uxbf&W$>@0Au<`kO10U|r@@eUZglHYt z5{`D9j6i=}{I*n?ylHs__S_IFD#zKetl%~vPr8`56mM&FnWQ;l9nlw86Nm(jx>)w3 zxbI_v?y?a@AeOw5wK9F{xqxG5bndxPKOur@7dCu#A>aa0c+2CAkESTM2Y3jYQO-#98f8F z&1!>=ZZIV+jf6&Ahi|_HVauF_jgvHx^OrHg#-Cr)K|3=D&V4-NHVdw{t-?FQ2h~?O zcds?IK=&uBKHs$jg=wOLQqb(Z$6zZFBf6+V%?!47eKoBVn@3V`RqIgMdzVrK4s~tg z9rc>V_q`neORN`YmW-bbDM2G~=FH$5P)QpscnlmodR~6vMPD)w-%_r> zCnFe}&F2Of@L`R}@m*Cs+fZ@TFx4S(5!7D!^jidMmJx0Xp}yLdQ{^4bKJUS`IuHA7 zZ0G3fSg;2MRfR_#BpZWZdkMt+NS;eGlJb@TR49`_jU9MpdMKB101UqzP7y{td= z#^ql)c5oB(l+BzK#0}0=&^9>#Zh|CS|1y>D-~Y`6X5wbwd}VPcQcrT`}TR8vvW@i42M9pm?}EyDE2X$MmlA6uryI zw2=hbP;Ugybx3&yOwPf`J*z_H8ynwo;vds_9QY7=l?oU-&tlaAJv{%9JMX>}2&Dai z@V)x(8=f>}MPZ^cufOMurwaaWsBy2Z`wPIy#Yn{qiXrVg-qirlHHjC_*L_4wgYm&C zpm1>@C?o=*0N$4@!tqEW<{|+_ZHqs}zD2H^`uEqTl8<5n*ZS2cuEWPo>+0l18GoeY zIE!F4*J8OsdTp!w-5(UqPUqv}bb~Md@4x;Nth3%VlICjIlw$gB%W7kIE^wWox7`5u z;av`QIKI0k>aHAeF7AXVg=E}lN7lT6yo z@84_NzJIqpWQwJwR)Qq&K7`ScRka6xkugJEsela!9l7yn)aX97_kVxx*7qDenaT3s zM_kr-|8(sCX>^QcrDCn4gLdw?Qg6`jaw@-bK;f=ZOCP$QjsRRq`qTeqi16!#vp*2c zFNyK++>^%$K&I0BPyR@IbN<(3`Fk}1xk1j+jNrE~9U`3XEZ+kh>C0CVC4SAF1qkU_ zQBi4*-}5@l0`m+D0?Se3YQh~tD)hIYvJjra>YjmR$6kPSpbb$qcr4oP1xS&a8u_;m zKURff*YdNzjzC2a!&fN30!M&^GF&uCrIi?RK8)Tc#OoXUBt9FP&47@Hd|VM`qgn+z1HkzJ zjszbq0t~$41L1iEJ}qUs$X05uJpvXSr{J#eaBosLdNaKw)8hEC5fbowW153|E;AGQ z6Ngot0YsMmjHELIelP(Do7sj07Udodm(36I<6JE}s9BrArMtaWQ{Xg?FkB?C>0{7n zb(igG+T~=+Phz>LlwICqq9HNa|5Hfa-CYG^B`e89XW`7A&10alTSnsu%tAw>(}cP8 zmH*^%4;CLrg~H3sYMCCucNi-8ILaCxCqjdNMj3z?AEg(hi|TypL#P#CiweQ z5^#7IA+$O`RV1c*x4&%hkBuj&pl%K?t#RcsI}%#iF? zyLKo=zbaOnj@JoN`OCqXj6O8HeK&xWD6%-5Hr>S81$Oh0Menj&Mj4K>NW&pvwJ;cR zt2v;;+<0@Hq=+Q_3#U`D?Fti>166w_hnU+THn%^waJcx{*GTUTSt9w4hyAe>riBH` z^Eg$5%};pmB-=sYFoqQZk$}#@bx@_VHg|>_uP5eeL5zRV)Huyf(p-)LI1~H8A|RJ@ zKk*YI9sDBK&$&TvZ<;=^!c?b@@Ug|24GDskeB`H zES*LtI$?oo;RIvCECg%VyiHx*?Kq0M{QB6t_4!Nxc7vYo*Jb!?6kaFK_uvkJd)>;r zXN4xN$0I6xzCZ_daph3tx?rg>8~c)#hOj*&BcAI3Dvf*o?|68*Ogh8Jn`}m|JD=Tw zZ~v2N%`w^Qj^hx#WNRF_zubwP}_#5o$+n02JmDYs7zU9nu&C~+xA_y z@iAK5hUopEg>+*mRl(2SkLv6tD4W&ye@@%-g_|?3NZi$Pv9J($!R<2(-64$P;(IY} z+?k9_Tj$0VUNsKbd0l9Jy`83mUG~grB*Hk1a9$VIi0;HE$fvxD__dDdW=_NE+Cq1- zCT{;4xms?2pT~@)FlzAA-&DyuI zU^hP~*A~XrdECwt3ZX564eGtQYhdCjF!m{>4F!+*lTh+ zBw7+%?5wRp05wef&4~(n5&ixiHMl5V0uju!)v(8WMU;=$cDP{yO2Lwh^qxfMmUkK?{&(L&JE;JiFKI5BH3V?yHdCcc-~>Jvg85h@=XECLz1Yc8i0%y3H*h{6NrXi;Rqg)b<~1-V5{~19F3wzo zLf#Rsf1W*Cu4)%9!3*|t9g{nz}{>nJWIy^Mzf6B_bg+$se%cht^>2!I70df4^Go^uK zMqcc~#} zS%IwrHI5RU+25x2#>H~)H|q@qGc=K(ewOSoa~cNJ{Vn*4Rb}gg>JV7+Ur6HJFWW4{ zhomlOp#qk(NFbmkCWYQ?S+ADhMSd$QSK7U>W!3-q#s)qL9U z?tMu`!7QZ6)vAl=(NT%=k4XP@+a?wM<_L$~MhGyEoRnCpqdVP|<5<1%FPwT(^}8hl zlWKM2UA1QOn2v29*RCU+`dM5UiLSUNd4oobC{sCp|H&o2FIj(abI*seDha}0V^dCp z6ZmmFT~$p@s~wR?*&Z`uKH_q&7N+8D_6&ZHz#3F%VJ>9K%bhy=W*VI=A6EjSt<}y7 zR_kMgohN=sBdLw1)wi+!bzTq0L4-Ryr!}ziJ}AfSy6B*|D-JLFPdlkHgABKCg(ls( z{`-5(s733YJC<~V681ZpTA%S_tkQqMR{av+*FI_cwOLPYb}8@IqkRBg7uY|t3nI|K z-sB&=XZ?T7%ukpAX}jK>TS04{fST90a9EEvx~?nH81w+zfzZ6(cGu|P@l0HcJTHoF z7Ol8qPSfo2z3|X1{&E&#v~E^7uVE-MKUyu;P?MQ70tc}x=j-)8yOHT{b0;b>tq~&) zJ;6U~sF>gHuiFMSHBrMKDsckOaRzRt3YJtyahr3Srv(d&Qoz8PAnZo{v&Z-5rwSi; zaoqhgbe~LEF4c!z#>kWS(OuXkzPvkYjdQDJTgzB{%=c6>EuC3mKz3MzvtMuN3xFVg zZe!UFUHCO;K8QF1>tLjaDt7HNUH18mW}YRt$w*j+j@HXR#CnLh*K19F6TSWMZiwdQ zr{c8Ll}!3@va>buRIF^fIz!C4xL@Ew1o_>UXEV2-e`cEXJ*m1iZX=6|hR`FAeDyNB$_VAFeEQ;0U9BcQe1hijdC`MW6AKBf(d9QJKfu$T4 z*xcNn1WTXVxTfc2?n3H72fB~PIGY2>eBNqcD($y0He5YWZCA9J& z0M_;&Sfgg*cx|*3f8P=koRTTz_(%Jn{B0>(dfd~S_cM#nz3J$6UBb6oN%74l*# zB4Q1Q%w5~CiqH)+%;%N_f}Wf9s3X83O2LDl1ixPu2pWZD1C}jEf3p>5FV!>hmd{R< zLl3n&^xeGNv$oLMv+5-(>f7IOW1jV>qQhpWUt^;EJtb7A=5VO+`uJHsd!EVG_;s=A@o%lX9G#3(qF57#$ z?2-ZYc1;^4CX~kJ6H&W55(l)!9)$vcdd3F0GRWqyjc|M1Y>h-?J}m!;lQZ>>Yz&Bt zae2G5q+tHUyqgAo3E7MP`AGV_>UhNuVZ$RaLuGn0@gvq(9w{2)5XoNR%BR$2SSl(x zjG^zvSax9=cs#BW(;E(sT$ZeJoQ&yrHlmZ-dEW2pzVWTzsk{B|SN7C>M)lfD!HyjH z*k+3O4EH6E`q|$zD3>lBUEWWy-_wNdnjXH68S(f~>VnvyCyYD3-zJ1{_#1a!v~hRd ztlhF*UZ*t;yUgW05wk>LKGW&)a5LCQeeMo)JYXTT3{*pj2ZZC%-vW3l}eBU3W*SoA7@}> zr=0_oAwE72gk@@qAo=<7)Mym zJ?0Sk!rGUL9*t1)SF8hSp&s`Ku@v&={}pvDRROr~GkN9B(YUH_lF1SVVay z_5*(Q=arz@pW_JYFsnZAAo9Oav~@xaCkT^WbniSwn#?`U@=$Hgy5egrp(L?>`Lo)F z8i4_++Hre({3Gm0#qep^9Ae~96e|`7|L_FbvREDtJDPJ2(INzOz;To+rzECZ(WCA# zMXRj1rUkPMFhnt`yR~^H>YVzVZJ{?bn9K0+UeVG>g|X%`7JPsfWd!pP$S$u%W4A#| z(9ja8xBddl=|?7^;W;{$7&7Xhf!@yBS=H@!KipWuWfUFMmz`;}mRR=dr^|Nq)W0QZ zvdEyMT!$o*U0nwqnbxa+ouXg~Be4dGuNe#=#P8l}UQ#p&v~cam@4|H|W^vUo*L zDJf$}|GfhMg}oi-SgjBNta<3z!W6O@1LZzUQcQLOHjxBTl?V@zX;Y>cffGRC_-J$p zwPWniDj>`+(#^jx7Fpx>9%3DQL03_{MdE0SE`Ly(M3WQJA7%K@nZo?&kMCv^w{s>7 z^DEY!rX5DFARgYwtEpqCt%0fi@*R_5?3kKrH+z9}qpMl(0dO$63p!ta8|=?DXqTjz&k#)c7g*apU1KVbZNXP6_rAI*Xb!(m4qVyl+g!xxTaT z$iLp@aeG*(PuC%6(YCBftNp!-f_OHy^|M+f(HLvg(ENM~WbSpSh}tC4&-y{tX7_xh zeVG+XZf-Pfg1(%(e2k9JFOivRBG4z7pMCuB-l5hvt!2XN@V3gUR_^cjxdo0Lr$3*S zMWt>XUc7O*-C7;PyngQH62s;;;9e-toyq2~(CE*jj6Z?T?YsTJiYWML>VGOvGh?r0 zDcorFkt9hgMKkJck)7Zzm`qeISrEEA3qo$jh+=)0(vddJBVImdHqXpckV#f9U68mL zHXfoN>}G>di|hG*-QGAjr-*6}HBMwK>Hf@Q%v!mp!R~Omz$OY~2GYBAuj;%%zB{aykO-MLsnEV<5MciAGjV2%6$s^~UI@Qcka?ZFy1|@Ir!Nj6ca^NaOeuAhK-$^;b zOU9;HWJ3%7W_-5y&HY1n!Y?c`G{<;q$b>%vNgq4rB*K?Xz{oz{$C(6#0G^`#1%S84 zO47eVKz}KHuc1>u%}C)}!Oc;{u2qgK^8J7yBFXD@^{vA3VNNzp<2D&!ym3#`;AB z!Y_a77iB-!=mo)uKB0(lX@A6iGV$UYHpza#oG(SH+SM@DOpmh_sJSa)s`gW0M||Hb zCk@?^mzB*be*#yXTO5dJDJLN{ju?w;w!Ax-V(4A^Qsufj+}%iDKPm}V>d*C%NvVjIxjm1sMv&J#A<|Q!kxw_RG=D<$DI^hOKkFy`Xef&%T?Jl zErgo{P7fRe`<;sw=lB}4|0NWwpwOXY{Hg^**4EXP;Yjqb09mo#4Zj;gngEdUo0Y&* zuKZNQ0HH!VP&;moe_oh0LEoRVSVi^P>YQQ%$R_u?3**#(7PVG&E@!N6vVQp1pY2ZB zXjzyiZWeU-eQ}@Z@JFj0&ZEU~tHfUHv%#tRfcJ2}^5u>Zsv8w)fe$%+&?DKx{sEYr!tmQ#8okchVa5(qy`lVwYml1Uvj-FQ zfV?*VUuv#Qi-(?rZkn0U#^cX&G|ZbASxTt~`jx4QN-3WLS}=iZ!dAB^yJq?T#SC!R zQj+=>opW}g8@1S?2$|2gy1)CHMW6V;PNU8n7VuGe93eVfGo6p)=hI(uyDv0QORS_^ zY2R&jKTyb@JJl4GKmIQ+fP+fdx^B9ceO?CtpSD8&4(1fH+U+`0NDj9S*l^KfP;fn7#kKq%w$COf9K%fNBxA~FG6`>W+v_Y&uxRCH zn(a~QIVh9bsGQq=oOD^(c*h0lgY*XR#BuUnD_rk~pqxu|O`<^2)j=<3NES6Ox@Ost zSlMhnP&=NtpcX8)gAp}YkfX356^yW8l&}%3pQ8@Cx^@`WXf;DvU>l_h8QO0Of?V{r zwJ{e05!L3v1`-2eJ1LaJ-D^;=3b5xphNsXa&S~p=Q2h5l)z9xZdH8!$qKB|EPVQP| zTT&i}spxIN-vL-+%&~^;T!j=`f@)2l3Ab3I)P#|PzV%fDR)It;PUykoYX6tp^VK?3 zj2VFH6|0*mYZDMI(Gf3%(RTE7QC+Xh0J6l$03LGJL%{1!H|hj8S42{TjWR2RUn6DM zE{7zAG;kP5OD>8sAz*J<5+FoBQnKe6SSm#lkJ8k<7!8b5il)=X|5GsZ(iQm4ciHvP zjGfHvq81nKD6{r;DetV5+V$W_sCJ&`O9;|2hR_MGb(ix|WnFAXwrwNgJjL*_MZ7#F(bQi4Cfywf_Y90ov3q-NJ_b zBvVFXAiVOOHZ58~DgT80tBfrPjpXi{%lQ47p2Uv}=a}#8DZ8ET^9oi}-{;tDyW34f zZ0@B*(xC_e56p731hhRcBO%lHWRg#MwvI(QD3SI|uI3!Ym z8u8AZ#Ya20*t|5;1~>!&s3xQZ$cqUr!a}|mw;_@e(00Fk6zV$JLSdjU!O`yn5_95E z?g5?(B`{geh;V_hHLwyzMGzt*0lkP$?06wt_7?#WAPa;`A#@2&6NUg<;y2$nkd1(( zJjksYw~5Dz1BJq}S5IT5dNTjae3v^rlxQ@ZX3YXdPs_X+O zgy`}lyV)^9Z)+Osl>TPYW(7jyq~_qb>mw{69@)$bO}6lrfg&C~UDQyklxeI2+|Y3( zJZ-2o?}V-()XGC{M5tcE*nF%VO$w|Sa$)IqF*qZ0OIJ19;|dcaH;cD_Vq#<^Lnx)r zz|yA-$M}}UE`el!b?KMSrY?_OcftJ)o1gb&Skz4%#I=6(dGNzx&kE#o85kA ztDkc;YCRk3TVNYh< z5aW&>>VHjL$fwW1(;yi>s>?Jq_m^2Gbw399DH?I_}RShcylIm zLOyq-E&^^T4*w4TpFm*0iF$iDL+Z=CSy`ShKmI6M6LjZfs?(hLwA!9vMt*L;5hK}} zSeLM*azj?8I();CDTA{U1;DXp=dN8n>xdc;X(fZzAdXyLzI-{R2VO>ANseDfZ(unG zQ=k;8advG>AyVO;$3heu54YGFFe2fI(gFr6v~B!B8P^FU3qLMnm2srZ;?a9s~5=h^?DqQTV+5rI{BKCFh^2(QjZn@e9S^z`3P@j}BcD1xhH%k(4`F3ah}W!6t^>kHIKwIprB0#( zak}{5dJkLU2H&yTE>4xj^5NodaM#w*>cx@GpNGnKMuO<%Zck3GyRfUP&td*Phj}w{ zplO1Bs}PD*Yzl9m9rbticR!L3jMxEeRDSw?`ry*4P20*>Wc#}JEKu7Sn|KM}F3aMu zyQ<>Lk{xSzmuwGI?WwA+sfl=IaN$B;F}g3f@zu>~)22a5u(sYN@lYzV_NDbKd{v zrB|H$jdNko*iY7yi}^i35ugo8my7(2CMd(A>$3HPnLaNI)=6F>I(!Jyv?V%ibZHcR zbO3n`lK~-~BO{0>AR0JpmISyZk|xSinD9!HH4Kq~VUE|34OQsgj555xe3DldwpgFE24 z=bnq>HjlWZ2+ut84AaA>pMDx-5I#XRnXT|$3JzA~5k+GRB_Wk~_St8H7|c&U{dCF; z$i>CQQv3ua$+z?^%$}`PO@663)nO--CBxVJ%`ilBe#?S0wcu!euK-fa)p$7 zfdM*Y&JD?%Cf;TgNJC{F83Yb?1k`J0DOe9a_#gp#8Dg*|&>6`X001cE^!N-0Sf820 zpwDrOy%>A6^mHVI7y_OW;0O*nKBj8il9m|h6JZNCR@J(8?Mi@DlDlBcEdd?FB$l%a z$&2J%WCSZlAgt23V-uzWeeb*Iz4~IWyvN?x_h4iG({Z znv=JE^X{ztlFC4M;UbSeyYorMo^aQ1eAa%+)E$pVv%h~W>$B^V<=gJ~&08^bN~#m( z+Y$<=?~uzKeHREqu9CX6R}*c z6%~8;s!y*7_6De^Gywq%NE1bR?@1uNoPNIF?3HYeCxsvh`tFx8ZsyEhv!<_E^Pe@d z$BjA3;&jIM|5x4*k2*@0dHq~XjDr+mYc+a`^Y?CxY~{DqFsJ_2rTlxP?#l?QX3RBN?0mz(*)}7oO9yVq1KO5e2Wy#3ncd3VhnLewtPutX!vR=*-gwnle|d-ua5mTn4<0O;K~{+V+7Nj|pdmDrPzwZDWHOLM6%%PwZHiPc zS{HT!Pd)WiwFH1lz^vFd!c_=9{q)m^9(t%+VhIF`5r@nqL@Ggg7$@EIs^EY~7yvD5 z9~%q^Js^AHl5-J^wIuiFUP-Rd=5cz_gcU!-LiBJvNPgfXaA#Cr&_=#{hSE=)qRWPo ziC+()Akr3u;D+rO+G}hiIU_jEy90U}jk_$j8>LE0}N+A{+c2s_;3Lrm; z#i&OhFhg;{8bW{+X>P<905q5&+YjYIj za3Bx~Q%yxxrEc&LbOaidb+4Le6rgN2yZ7%bp7mb&@5^nz9ET-f3iyLoW58?+SS=>2 zujFTAX>7B|ZbO}YE-~Be#KHQjhHR?&$L~7mUU`3n@nF!xHzc>mcOIjqRj1lg3XIW| zSF&xv+Qy;o=tt=G-~+vJYgB8gK8sP?v#RaSkJ+2&N#IZs_+%cEE{OZ4BVq<%B>&}P>hkrsc+z?)+W@^w6MF2Ws z18nEM1KYQ4<#P6X?N0WzW~n`U_UhiPYYg|FYFpZM&jv#TgQG)v>TY)p6f)S%rsb=(wE+Zp@Pd)J^Cq8vRcvzdt&zUo4azzrOgV`Sy zu__G_8L*628NXB%qXzwfZ|k8R5Xeu?({Q)d*s)_7gACrs9(xS7lH`{6fP%E|-zA+eC4g&BIC& z7Ny~SQaMsf7&x;M;SOk|5Xu!PvdzYl5O{=5eOihI1wskwgis<14jRhB6a1Y!!DtTr zEETDI=!Jk+R2S9DSG%ZZN=kU0$7#jfq5UI|BhMye%gjp6Y7Io#6Uk7uu40f?`|fZc zS2;8LFgGa}++g(CBXsmb%ngINxyr(fg*+EYZ`rJ3D(Y~90H!wHn39tBStClhijztU zxu)ZAdVk8-2tfa-YHN)2UsnS%@Q_(-bAk4X074ui!oZ8s(h#y}X@ubLBjO=rA;Ik# z5U`wJsRI_n*L7HR2D$ZGZ- zijQ;ojYUcmw-lu`yY$klat<88ST(juBD0iCAz|6j`TtcOb^)-MSo8aVNzX6#8chyP z#;B>YQltk>9CEM=P>+q?bv=?Clc4^?t}I>cvCpuv+iU;H>e@jyV8t$iG7nMw z+1+8+*KvgNO&YCwNOxs90mO_thyjlNO7{@>rsg0x=bUq@&a67+U+58S2Ga=y1u~%_ zav}u>e?i5>?2ZK?_qQUTM8s8_qC`RLfZ#xY4hK3MM#&nL?}@Qp$GvG-LyKYx+y)tD zkE~j~+d+)dIK?yDFWm zem#hEB(PM4URUA?{fQrk7^f+jJJ4lO&6yOKO4M#(6=U$wOcF8lr|z$IH${Id9+;yR zGZ1iCn2Lp37)|5PzoZ73Mo}184w1ST-qH>5OLwKc@XJMzXa#h2dKw|@H1oBezw#Ci zGEuLNaV-O!LNO?CC_IcQS-P{BXH8hI2_9x9!UTN`Q)~7h0m6WssBI|N9OC?$5FCzx zk4dhE@%RU_8h$XAX?M00E0UYIX!@SSJQPzQr)M$? zSer2aV!{k@e0;+1zpvlEb4S}YZKN1;=g#G=s055$6bVkgUw--JtTIqwnDik7BLl(V zEmIOR6n?NaAR*aORrMsi8uBT#Dn(;P7Q6DjIXP?B{ti$+{j0CnEnikO@f&Wv?UDQM zOKQ>tO+!Vh!x}+mZqo8<+lQR9q-cAybNck^d*1NN{{8avEmBjdPlkN8+=z%HCp@7c zQRN2@syE}ps->(gM5-&4f)L3$IaJvTsT2KGXwe|ke}?*Xp4A5GZ>#kXMbd(^&b(U6 zh6@zs6aG&=`6O5*5TY-@QQ-)bJCQoqFAw*#bN2Qn6sdMQ>Le!aDCsZFwG6a~x$VAGhbvHaUwjQ5X?dbXgr2&80qB+?=E>7m24WF0M&P^S9Dl)1at=eWz{ZxH- zLeS?wmoc4brKb^quB?g1e;aFnV_7~Q@|{t}%z>ZTMP#l3(4v~4QSp=75;=}cN5Mjt zarA@DPbMBBR_GJKAh-|Pj4))Dl5n2h|42m;+#qVDFw%PibvFkICYj_2WL1bMcrf`rBh-qEEi3Wa*~{*pteQ=+RP0zO!kWf5G)qiK zP~qBgPI+o@j1GnaIvls9gJxon!yZ1WA%4Yxp_FGG=@Dp1 zD)dES2@pd>(ZfQy;U}CF(adD22@O?^I*ZvL+hDw+R*_vOXVfhQzg%`defo3&6yi!L zP-@ZY6rhOUi2 zQB3Bc;{Y1gk})+Af-9T-WfrdWQojyPf7|!@8+NnL>oAumG&f~*H>Nf>V!`V1nhSQD z_Wx=vJ7_fcy}>}9%Mg{nDR0`H370(Uh)+X&)8VR3i`my3Kz@1*W{2Mb^sFUYEolvb zK}t8faCpXd~-#cm8M9EW~}#YXZxRv`4V;Xb~OPDki>(Gs14Qv2Hk6 zQubR;!M6Q*UYpfZ?ke;JUj1>)n!SY&UD(fJ=Ad_l4Ry6?(aEul;T4lU%NcNCc7PZT z%x?NYBK%^r$vmsil$AmA_e z`fj}Orcq-@J@f1{iLo)9R#zr3mHkaCwz4pkoYGrN+{db728&Bdrcay3?ExIo;3{wd z&1*`xA;PIKv&mdqR>mO})|)ZW(VaSXii?dSoDoNz_Bxis_^T}Hr^la&)+pv<2jfvrBC{3te>PS6l39WjC!|@l73?DMU zgoR-lHn5UO7W=Fcx5GovOLCC2JS_D5xg`m&8MV$toM&BR0om;FmcUN}&(+kPY|%KEM{6Zc+he z#ik7=02DgCq$p3q$umOZiYu;=5T;QoL0UGH@;LjYil}OK2!L4_L@W?MnQ0UPS!J-h z23U{bImkV)*p*$+Sup#lM>M~@y2?hN{jaKpqKX@F!vW&&hGOo!Lou0adP zg_lZNYF8CipHPLQtNx`r9>gYU&H>-9?aU3#o16_Qw%Sq$ok;{4QwoM=@HS24lZPh1 z!DF^My#53CjyFwwD(TdLimzIalMgjQ$&KoAc6(CCqqtW}F{y)V1fc6sNsT1`-_(Ez zcLWX70MZtR+(8@@&Lkuvm;s4Yf}%O^Aq!vPXZEbI9cOxV;|MKPVQ=c^MfQ z=oTbRLSgwi{y)hE=rgx$yfJx6X<3ldBz|tvH>oe4S7eTCs%!y}n!u$EChyFJdxOSh zqb@rsB0ka3_x{3VkHwfa6d6w}O})NtM|B@oqpM>Lm}27+I&|7@cq-bQ67Z=tAI)Ji z*y+KBfY<8wc?~{GIsa(a=rK1lQJH*z&_(8`mS>+|;Qg{-+P9XZc7W2#a+;~k#kZ$S z0fWcpa&vpAp}b7>F|8?CuyHolRp#=ab8=FPmgMk=-A}qG_POu8^A77G^a*yqIr|n` zIb@`Ugw zPz$JWh{@Z!LPAvB-w%X#KT)$wQ*H48cnri`YU;> za|jI&d!^Hac|xO*8GcHLWL1duK;aphXCc;k*8P5^e(OAzIP&uuEXuj2$Te3kX!ZYgSj>djJ59 zIHgB`AW`cvKlNFo) zHV8sT_}caB%<4S2vhd~BLglF(FB0q6p9(JF9u>6%;J2BrOrPsEZ~0=zjQj7tOK1K+ zw~xPUJgCrCIB{?GZUd$(iz_76>bm=&4FukdB{SxMTua$Z(&kHU0lObqR9+js5xcPtHEQzIcSm1+B?j=C4fK&xuaccV9YBkNKCj=lY0?u4nG$brHYDlX_B4QL8&?6*U6{)A2(Eg>&c3 zZJOK^WuCnj8N3jyRf8O!RL!nMRvo}fxcZ)CJvqIX3i>Qkog;1!Jn%r+z#)5_Ctw{t zapFYqT>1nmF7p4i*Io8jI zMkblx*%H7q32224epU_h=g&v`Vm-n-g|=huz^P5LM-<6F`*T#FoJ?Xl0}{>GgSdtW z^$hE2j!(gs0;0DZuR?)oh;3bs3DV^)2#TOl8E@?%ev$+y&4pNGN7W{Pm}4Vih)234%9BlXEBCkhd=c8b zLR?!!q`_hf#6|`z=AhS|lAWF9D(xN{lNJ@15Ebv@7Xn7MHFr$TOBl zJ6!<}naewr$BCi)@4ufbkO0uhL;cE^s)ed!h-3rnf@aNPQIC{vX$WF4psO2rG(U2Z zKeeBWdh*qG`#$|*IY~q$B*YK+S3$FJrjFyC>%6?_Q;b zeO8;Dd$^@}c>2AbgpSP%zge*UUyrYS`sL#6Y)ga#m4PYLY_}Kwy0*ozA<@ZA)Wlfb zayPWvrEka~HPB~tchm(47%wVInq$y$go^7vxv6L1)OAIvQ4;BMO;;75Cp^o50eSSeW{TE?q?unwn6=?qlS zlTSX?`Gl?>^^Fd->p-><_;e?}6+@}utafI{)A zl1k;1kkGslqB}hU5a@y8(O=c#35`N#_$ld1lxj0Wpq}l}==ehus`eETae6AGg+G*G zD2E2}OGPocbLf>Mz#j>r_3_IJhoAW6iIo$6^32i>vqb!?136wG+2-eelN02Z@uH6f zMn^*wQ0i7VQ@41y7m_FIa4Htj$CIruL}ESGGpumvd)Q2omIz@fvYaESX!lCV2@TSN zDD)8gn9fl%{KWsaa&*?3az(iA8a~fxcb3?o#hSCP;G%a;@ShL@n=e;HJ?PS zy(I;G-kHC5>dKkq+vYRa&6bvys5?(R|FV-$PfuzJ`V39zAI;D*CHa=Yr#^6Q|46F| zgH@xubm@-Lsq>V&TT6bCEp#oqB}&e7&ppQ;7$!1AVS5-0O~e%Q7nXnw2LcgXGV38c zIhOv}XVaE0Te^Dn?=73F8$8ZC_q^PLId4ySd)ZG*-QgjfRi7Y!$5)27Wl$s5nQIBgBWM!o|0 zP_5AWTC{8#VdL|an%;{6jrvz%sf-k^=%QDxS@TO_VFAZkeZjz6Z@qob9pg7{*!cSE zZ$P$a@e&r6EYDOYR9*3SINFQyZriVVm>X+Z@ zgEU0YXgGO^?GZ~9Dw$Z=AmNm_uRllSkaD1 z->gGrW!!;pa$5x)AgG!tN>MdXLWCy-cvNXMk7Nb{3B&_iwy_0$CPh6P(1W*<89ZT~ znGiiuG6pMta)Gj(CIrO5+LtFS8=7bQgrK5uue1mX_O37ok<7qH=lK_U$Od&ziP-MN zIEhOaS(R`y18a2b|0n{$^t5Ty?z-zP*@}~_o^i$*2u5@>8W$QoY@1P~yhW$yf=8*t zuxf13V$z?rR;sO5d8brc1O>xJ%MHcHF->s7y=>=>LvOt7qC5e=!4_FE=)zWa-2KNq zE9MEO3@nadJFr~clJ9322CWG4=^t&sa@g*FjnAJutGuj~I%Vk6=NNaO0V;`lb^1nN zy>e}2)>s4oXKMgiBVw8r3ywtvKnY+L;j9@Da3DSqfDQ2qxsMZw0lCKbMBhSE^Mz>Q zQU?eDo}f|acE~tHA%2aq6+sU+#9LxXih7+v!$(4ZlY|m=gmlS(P`X@-19rdAb0dd( zVv&t1WeBEt+=F7{nngMGT8x_moW9g@X)DTQZy;$$bV6E}bM&15<;Br+^7r>}l+@I=Wy<(_bDn%Bc0hYy zaT%JO&0)>`?x+2`^UP^6mSpYQ$C`Rgan!L>n|)hR_Rx`+80^Mo1A0deySjAcMrX6Q zK)GAhJhtpurZ_C+o3?D3`LoesHMUD+Plj&Bc1pR+o7ca`IYS1kn$dPyYp)_{N=BcM zasL;Z2Lnw8hy>!tgI-0)#)JNZ#Tgz_p{tgMpg)`gNF{46c=Od%PzW}1X0+W$5>d3pohy(#0xeQ z+$9nk1xbR{FzOUSMs;wlT;c)dKuTZ+4pgnPVui`Q7M#dKOGe;OGrYy-j-T7NZx=G| zZA2Sma|`9{(MKOu!%2^?d5}Lq&#(fNm(#VR2rFKaRh-BNstbjcy2aXpz)&7S5Ecjl zHP0fD%cIfGg&`ISY$1fk)%|cLUGBBOfD!bW)hxSZ+;jwi@YgBp*CS0YqFd4m<rL$Rei4$d$HBRH>Sxjz_Ye~R3@(Iuh^P#=PYL%Ir~qK70$v<_v;=#6-tf2 zYVGL+;(-81bm+y;b_)<29Vs(2lS~pW9R_;wlS3MpRRoh1lM$;F+K#srmREEbI+gI` z$%Qt$9~6Tq@Pvk<(SO1+6ZVs75iC_wr>+Vjy;FWwzD&#~qW}swT$N-eI2&V?vwS^(Kz{68#7?#6^`^kkHj7oCFlq!Ro zv@omDQzT3HStW9AgBu&DOsY2{BZGw#mOJYBZIvOZ$NfL*p*hGo;1rE6MWF2(x-3%9 z)I1}R&jHY%>64tgpn;Hza)V91U9z#RV zN6ZonkPc)}_|!|5j**G9&L3p@F>*ZC=qBtN%V)l0$jQ#>dRm8@C$g;<^!qewwO! z+N3o>qDt=y%Rh3ME6BOunbkyAR+d}_4KY0s(?8CKAuZ9M5WGZ0&0uyG4lH?)rTO`J zDJh9VhxQ?mx$KVH$0MWm?A_D3Q@h@MFppJ(8hu9p2nQR?j4uLFjhG*SdOLRLaQkil zvw6!FkJr<&L&q~tAL#X9VqDLT649pl1;t;^{BrDdw;9}ry7un#>++vZ>e21CDQ}V0 zD7$0b=FOekwIg8+A+_YGFy-(kH*LxjEKv)u^FwQAi)P#nn`_68%}j63h`#Rn>*AxM z*ntNg1!!h}y?~ACB}>-*{`TeiFKt?}<{!7;e$U-^rzR)o6%~JQ$|<*vyXjx| zKiIiLhxgu@vijGx-Me%qKONh)PW$o4tbYBTdiKQ^pMD|=Ba+IFM-5=!UhY%3Q@-`q zAuz1FDa`ohAZS6+FU1P_(FtX7K*Kr(={q6TnR03VVu8J&DHL(^3l1?rWy zyiG|>;h-7Q1}j#^7ov$#Z!=n4ejk=tsAB9oNXv0^fyS~P9;Culh0ctI3_H{wRQEgY zypwQ>tj}VhDe;P*ka7783IKipYqmcjR{is6oZd5~f67z%!$#i1lWXpKmqIV7ZngCgmdf$` zDH%qZv8l$4udAu#6a5oi5u+JO$Er}Ol=TZHRGJ*~pkS?9k^T5XkvX|VmdN77riLr8>3;QCRS-sv&Jzs9 z?{{Xlc3g0o>EkJ7oMcAyG2qxlXS^2Y`sd8Z{^oN-i_Ew)hD4rsVRWn3YBbWlbq=-U z>}X!8`J>S_)<9zo=rw>S$FU$}%E5!2MSH{Hfrb!3DAu!aR zrhV?eeO9lLj>HH{gwgCf+D?b_dlMI>*e%>?w) zOD|#RM&9_zaG>6}BZUk@z;GjwsfRDL&||SWmqiPZ9NFU*Z!~piSaqPF)2V-=PGF1{q;3C(S_yxKx2v1oXUOC^0+^e+Fd zAh~6Wv3Dr+nX7)$U#oGLf$`R7u}4JrzuGtVVZKx7@&s)K8~q2?8PdBct4z@i!{ZVR zXvklk=CbhE>UZTdQQbQU!*CNbiiO*M$~TmtM}d4Kc+I0uJzJsA>M{gVwNdF9+E_7S zqt>NmvujW7_U}b&18%>^82QP|z+!|3 z0;DTqGxRNfhuv{{*6E>vP-5&Xv3Q~g;b6rmVDDU~Y?hiTex@5Cmh$KX$LN9E$~C{; z{m=X7&-$WQzf)H(Uk3X8?uQ=^J@>rWXkdL+>ij~@+^1=Bg>=>Gi@w4uF3{kame#xu z*?^VeR{2CrR06HAs3@a(+NQ1B+O=-;?ZO2wJokLZc5SfI#qc>dzu=BL#=rOW+ZSAX zF_e4u?dLgb_8gvDcIFPt&+YtUz=RHd_+O{blF z@{2FNblYvWUN!Qvto|p<0!uh=*uHQ0&@(SQf7sKHJ~VvzMT5^6h~=czFm>|fj8E^K zIO&sV(|z3GrwuU*=neRPUb_67Z|1CCy|QW3WG2M3&pI2%xG#|V=!P~f!fT3&WTAD_-rwTQP%NiwH-hLrF&qK z3@g$NV^}pLj6nZMS!h`%DXfFJNQC*3Szco60(? zzlle(jr_runJkGqO1pqQgQ#F&BsNKe^A=+r_86Xh_F4SUNL*A+iAdR{`20McPF+b; zt7-)FLBnA5?mV!Ido!5tIQ$Mc6v)l-@8IfZe|g6)k;5)e8+LItuoYV-@C)lC8vnGL z#&7&>ZS3#AlpFn=-2{AwZ_sEf@iJ!yBe!jL?RtIx$5UelottvqxX840#j0NGq}uuW zcvf{|T8%aE_o@M=4I~lroh3R8V;piBK~K1dbp{~93vtHDdKR~k$z(t*8~_k23Otlb zD3R2}g%5#5#Np@3Tkva+gs`^H%E}@H{=y3B$=w3j>F^Un2gC=u0x&YepMSaLjI3!G zV8z^{LS1DoY^G?3bC=z=*I?Yab| z^cj!~n;<|j&@qM^5F6kf>Lw@vgBpy0aN>UW!3V%wTnz>qi)jP;aco>1yFn;1fT2K& zXk(;{#)&4UCx_C>?H{1eSU|&&aSikaA2NXX0A>qV#u2XP4NQ{(2!9|9uw#H@LfD&BDh|pnVci^qz)wpO({P^14Ecq?}b0~e6E_; zSW9v30Qw&(hEfYdPWb^Zl2yjYgA4|8z@il>f+f|w|@3raK9 z#SB42<`*P6RR0)X5T0n6sF{Pn|Hc(5un@NmMxV1ZbvC;7K434|PJ)I1WE@uz)QY z3PP8L8&hq5em-C{l#B~DO5p&6%}=Tq0`P8zEo((#NTSFpXaLh04lpF!ylT*%BZVbV z_I}6`I|0%<_z_l8#;^=9HhC+dP3PNZ*$|M+A~(n8ws*(kae z70W;XcSAOU^#cT}wb`*{MOvAS7P&W{{SWvtQg}-HR%I_oo*7xZ5`crVETGkBV#l7J zs>vNyh~$S2GbRW|F>$HGiiV>FD|u0AdRAHgGAc)n8U=!>_xVb~diYoIWNX?KD0fCj z47)lmF;TO9u5IM$ z>4}DNJ9hu7)xY%a*&{i#W6zULS^4AQTkn`~^NlyQZ_^siq$v4AS>)0de&(iQ=R_M{DaLLk44#@zpo82lP9M9cc}fQcD7FemVOnS6qJC^l8(ddG7h1y?Q3b#nCPH z9>}?P?6|8&k3qY5=FPWz&?Z`^aeIB3n*QUa8!6m~tHx~DwB?=27md31x|d&ikq-9A z<4^3)%WapQxpB+3C!c$E@8-=n-f;c!i!Unod0%|xmHQ_sWq9B@L%y6p@82)JIAZK| zAHMbGGcUd*0JJWe{#><@I|Mi)on3I@!0nohqa&iO#G=0;200kV-5o4U1bwdG))a1N z@0ppIWUrzJ)?8GrvTJ+|j!e0@`k6V1%M20wXp(4y*dNdel$uW+%5}+1Pt0*_I32Mb zYD}zQUZ^py4H;?%KZ(ebn!!nH0-$3Ogf0r&&b-EiCCUIT#f6IKy3{AJpeMRWOMb#o z=gBMl4O4SulmVgvYQPau7pPIR^NMNDOy}&ShJd@G@aBx zvhxY>Qv0>qoG5%)s}N$3j&A+TE8Fjz5VhvVGLP49v@s1)U#0+eZ<@-vd&6L`mlRoM ze!T7b`H8pR*X-O2G>LgQFURPsZ3;g|){W5{YvBK44T$7oO^A>s|MC+Lf>>k|ei7(Q zHq0&vGMvabY;9OGvycugxJW=4BK5#oQc_YNU^z{6k^m`?6$>125Q94lP6RP>kW~t} zos(~T2ZGr-xekXDVdGL4syg&k5LW3{v)ydo>-Tb}V2MAF;Vm!SwZk8qU`TDA+_U$g zJ-gF;U2xj<ZJ2Oo*s&coX4E` z#n%?E_-*$oCneuB`m~tnh&-&gA!(Zrzi6%XR%v?%9bt z~y;XV|X+qM2+o?%{n zN%mIh*x;+GLh~(kyMOupfT6@Y@|vOVztr)>6BUThjHi8pG91`0@GAq8;Uo1X6)4ICpaVFspwC!?^5qce{3Hq}fRQpE7!jzKLktWSR54zG zJ_FhUfa=7cW2B2Y26`JtqhrR5(J$XXtzq|wSiod*0Vsaffq)U8`-& zY+SMOfB*gWG1k-N3`jI!AGXhcu)xP?hkS8E@;?9oKmbWZK~xI}Zk+D}edcgCNHj2d zD3(nr?!NnOiUt``(7IY{4qXKNjzAnVdX$=a7e%9PsbO$uY|L>ZM~F9FWJpA*AEYHmK(JPzdXZ6}tN-}NKSYp9^dqKn>;x1| zGJ^*PL#6-_TaIBWh!7iI&1}kIvFgSJk~a;ARu|WsOzIdTWklr#T{`vDQ@M5%I~qzy zg911r-eD{JB?)=fG4pyv`WqcvSdj-DO#^fGS{N77X}Rbh^qD#&oSs0xqRVkh0B^Z- zoE;Q86}e>tlBNd+B^=0@tqV?AV}~wPfms|4A=#6VnzBkBNDCS=3DC@?8Ct%SF*QAh zB@LSjyd{vHz-S^5Y{$whIcd@)F5_d60@h2OIU>Lqm(5Yg=rGb5*mn^Cn*9l;R2qo6 zl~oyIjeRL#Yf^`j5rkM^O+||QtSQg+5>5}Hx@d8xbxJDswlp`)DQs903@)tHkp@&O z%Uys`x;-Z$5ESIRDt%b=#-B&50qT%OM^>{xp##v^9TO4Rj(|mHJI1P(=qzI4PiLmZ znR>9tr_seYv}z`4cPJTsEa@2$=!7i((fSa}e>f^zHD<$yAg|B^$q(+RQe)3jOlXfP zR$Yi`M7BCv6PH9LHa~fwiW0Jxu7LyhWAbSVr?Ev>OW7{IU&!9MCx4gP=S0n@ad08$ z`D5L!1pd)F@>!t`h7a@#PMWcTapk@>0Xv^++kD^(E9@l!&e z$3qyp5MoNqoF!1gwKO%|P?K^JOPI(jh9REN5DBlB=k(9N=+M2_mIDWKw(b1l%dZCw zKGSKpVX}*?ry43-L;kI7BQ0UT*SNRd1CQLSs@P z`p2A=DYe(pOx7)|VwGgbIe6&HIc%3& zPwJy?Sy9lH+C8_pyuN9lerCu&)HJihxa+R%)uVggUcFR(GIR`_t!;kkl~=#@@n_?2 zxv5!7iqiMh-50^c^d|fF?Qhj8Y8iT{rbz!T{}DyqVcp|Zv6RvT5Qq)Vg! zAd`8C#>@UC9#N&LkpCe-G!r)au>e3J`NO-AACf7MU2iVIch^fp4^@WB|SS~N)%POOfg zMDOMBB}y#I3e1Br_om3GyI2e1Vg7yOkw>TjeSIY5(s`mh>;8r*GK+8RgwByBIC?n8 zz+F*s&7OWavR$Wu8*2nMTbPpH& zHy?gk7?yo3_3(G;M#oZy#<-0&P>(f$EJM74Bf}HO7-@^x!Y@zp;75@Hq6OOlL1yVI z;Sgg0g^7($3^!q@+mfIWvNmRBA_>+2e?Wl0oJceXhz>(x%L1E~3~MBQG9{B4r!%5e z%hq{$hYsx7Z;dbo%@&WpOuMtEV)N7HDzQby?elm`qhg4XZVWm&t)G+{-MU>$=g!6X zhcY^J?tQ+p=;T|9?b^5Jk9_j^5xLZfaD+8EBr^aRaNx6Jluq))+vDa0efIec&%E^g z@-;aoqh-+#c~1MnQ6mN=HHo|OvNI(oL2r@4TV}Aw8O@H&jHdUFKWo>X?DlP2RA!j= z;;*U_qT2Bf;k2x#F6;CJkvFH#BGz&~R@1a5_xUQOaIP=PPM>ef~p-+)>fi zs0hA2qUaB^)Dlxsv~bO%f+WGJWJ18(P5O+|qAPbkUZ916vsev&MA zVnn2;oO{ps-NVk=wQ5z-(pA3oJFxlW8{Xd5Egd6ZZB`2?znMezZ1K+?%Fj{9fH=%sFm_? zQR|RzOs-hEj~+c5dvo`}fIDIuO!sD#F+9;oAON%-f5#o*n*`G5387-? z@a&Lt^bD|U+qP{03Se8GO`BF&PykZUvsW)P4>)K|tZo5D70bxTU`L(kp|?MC0T~hi z5DI+`wm1lg1t^A11mC~nCswqmr)ZG)aeyG;R=g7QS(a)v1DIrK#UXofHY9Q+RK8&<#^!WJ^dK2OR*@o^GSe@X$t z#JQ*h=5mmYx7cFi@H9XsT1*j>t~bEu1lq5&?8eXHO>!i3E{NejzdXhduR z<$#IQ(MGH;sn?N)EKwUcq30(pMQ*{EqGMu!o~1v?kYxJ=O2ma!DRGFWg{VG8r((l^ z%dEMc1)B>DNdRl8WU-SCtw24wI%bmOU=D`Mof`mcm~zl7V2DGjW(7q(vlqgh6>uiQ zTuOtzGXn?yAhW35bY{dpcF^(2gY_AY?p)pxWQS7LU;o?n3FNG2YD%OS}b!YFJAF8T(- z?bxw?;ZH{;S1^}mWk_QF#y&*Fgk70qA!Z=3wnrM!Iq4yETHeC}c`F2!pq*-%$~nWH;&i;IavTdn)(Fei2Nt^XRWi2D#c<%hg}pVf?& zSWVeP7daLYQCnP)JGI3g3~bEZtS&JN8j)QmHtWDs?&YW{PhsJLarekbG0gkTjf^## ze%-o%SicjhrY(I*Z$y5IjMDoUng9nxP?nIxdLYS#Mv-uOwRo5&xJE++S{OI^DbG;7 zB8)7oIQ8;#@7{eIepxy8hMWI+_g$?sTXNPES;`ziJ5%kINr(r~qauXLvziRwegDHJ z@4x$u`ZA$(i)uOtMNmu>e1nkJRVF2_Wh&$VI}|hxSggxcVS%)J*PcoZr}+8jo}2yU z%#S|#^r=aYJ@m+hE9a2?nl*+OYh` zVV7RsteMgWa5S{lWL>mm(L?wB>$z86r4F|T+1`QtE_p~!dUVqc+rw=SIE&az0*I#?Xja)62lc%&hx)*Aa zClLH>y4vEp>+ZX_y#x>6Z@l8lD?b0?^AA4!NPSx+CYt{UMigDI6Gq+*f7QV0wkS%*eSZqWzOZ&~+EnKA`cnd4B{J+KAB zT!wBy2#PfD4k|k0jy^!~IbvJ8_FJ_Q{zRWt!lvdaN=X?GB&d$>4Vr?E)Mk-Qn&|09 zXSPZ`ZQ#xmPdYg1KIRoed5Q7k|7_d5CjHqrB4XA3nW0msV9?yO-ul)F1%uDcp8lbK z$vj(jp2^^M83TU4rwS5+0QChupkl7FyeA%tXxl!aYxnxXp#LsCNw2;}Ph$=IwKc#J zf|&!&OeP_oG70IqV%*CsWFLYIiHsaXDDzXMD4sazc_q?{SEwocWMRxTuhikSvwv=NBK$=N`>c z3^&TlBVE37yLErSpLk;5o@WlqJ#e69`wp3!1r`%OA3Py%qzewhqL-yFDm|~ALPg!$`n$8K0~414NY;Bnj^@j3Y2w)D2^fFkg1m9ZAIIam3tn3;+viOi!lm! zI4o$DZZCKC8P6HebnG>Q(QD0Ettc%`#Uhn$+jc$v(#mtr$hh>v6X67Fil8N^I)Ii9 z^;Ah#{>0A@v2jq#2PPAZKo5iv3T*-kygqelUSZiSWBNr$MG#LIY9OzusnsZ})dZ3D z(L2hi>Cle>NC{P<-s z#zdn8N9)$jy6y!5rbDbQKoCHVWWP#M=M^5YdBiXL@sMXwV_qR%Sch(lH39GASS!G`Du}6JQaoi?`75Q=AYJ z5*k?fQvC}7e5e7gNW=7l537>2ZV;D~n+rOOgA$WolsupZDPSm*+WjPfBbH9aPw``o z#fM*LGRjC{sbOsEPzr(6p|2^=I-h#U*WwQ$s_Z2_(Zj$%70`JWSkJxKOT)j0_-e_HRfCZq&R`@@xo4mZ$+z2cUsJ^+WAR zu4r*GR#VsIE%b~a=t17`b4NDU`w09;AR&$JSZaVeq;(jooNi%hjgV)zPdXb_%`PLY zqxfsx_-GS?GyGAaxXqlnVv8WHCM_Gbz z(_L|ONcktoG~t5vGyA3Xh<57UDpfyqU?fVEIihJft7v1;XW-_#Li9$y`d2l! zD2RwLV(F!kcC1QVV@O55LNLz|Qfbzll7l&=xqNcXA2j=1o;InO8cBtU7(!mNS1Wv4 zLR6DT=N?Z9jkGhngf9}BEfrSGdQ4KJLo$KV!x5Nloyx}sk*M^4z!U<}p!7f?LmD$! zgbBwn>Dx$t77NnKTmvoRh34CoWJ9iL&(q znsd|@s~4#T&v)}?Kk>}-<8HhmD$>bSsM-u%(aH+0(OXnSujtjRy=)f8_FcQr%sOq> zyaniZ!Jr43t*0R6)eA*9wn$u>%=ZHqFIm#2RmN%kPU0&ja#$X2bW{ZXfxN=crp-ug z(`o;f%^8`kIE6#Rn{T*o;i5%7x^+uRYI6Fi15WPOpJcjrIe}NCVv#k4mPwMUOW)Qr z`KLY7M=^ndLrT-8HU;lebF5@-`*L$`zvoUvV%o^dE@L(G##?W_KV|Z{=bblV_=Vu( zMC9A`eBXkIUTqO76~#|Jp=nnqeSL{>G56kk_XTGSqAE(X<0dypJ)Dw_yIlCCran@s+ma4=k8FJ3BiE09s~wEsB^Q1o^V}Z@>T6FKcjzcI^qL z8kLwbo0_Gl9xJOVJoVzxe1s3W1Rjc6$Hq~OsP%cqLcQeV_%NaOqOD zwcrkN;~oT{R00_gLSb7DzbvqGyZ61xL7TS-Gw0Q-cTK#n!?XXc%2wUWp@v>Cu0zMT zdndXN-FoonWjWu@3jVM#$yHj+P994eh8XhAVvO~jHsPwxU0nkYOWV4} zXrybbf&c0n5IYW$#XJ#JYKGJ1Ig!Q8Ln8ZFt0SRUY7zx`L^$*aI213Pk_85GoS%f_ zVe!Lc#ws1hs)JZ;udy6LL}G~}NdpaFJVm<1f}m@+u5H@1%lS4(A*)skYL3HVH(0!p z+Sl4j^70TwmYCRLiw$Vm>MFCCtVI^P(PCf(HQYbVMSq2~HMi%th>kB^j`jTZU_hU+nM8)a_0T}1>c52sJH9_g#g75E+ zG;H?z(|lf2L~xgN+ndFCJLCG^ZZKliQX%TqKS9JXx?*J^lu!E+7S8*MR|+5G7iw6q zuJJ9?&1G)GieHOZ44%@viPv40(K4R5pwF6`1lm%;knb>i3>KG1tY{%nOrQ~Ny2?`V zQ_BQ?Ei1~x+N`0~S}rOA>1(>u0v5k&?Vdw<{?f8wGj>zaxKdQhsK2-HhKHFbxl zGOP&(REU%p)<^FoE=5v|%lvuYFI+qI)4UI6n46?nQ)8$Ev)7QfbZPd~na0GVR{tE? z>C($>=}qaMQhGpja=~SV#)7i_^A@cC_tb(#Gt3#?>@hKBQ0Y?NzS&E*zWk1(YuC0D zMt3-OkSPJ<0%gcU7u8VjI^|f3ObyeAv7N+_kV^)@D>0%3broA(AWJSXV;`HV+%hsU z7*?>Rx3eT;0OAi-5Mf9NxR0K^j0lNBT)DD<6&;SB0Nk(&wQbY}8GAtLS_#HG&rtq4 zThtd3DS8Mp1b-+ic_mqrbKFQ3R(dE;0N=c2n~F1Kl3O9ux#8*Fqlf$iYKOUi8leP7 z^h@>f1R=$7R|%LVmjiGU0*2VKtfERm%CHo`luwY93LWT(+_ig(VJK>x$UTWfiY!wp zGHkg*gyc95!YkBY&?1Z%^f6V3M2?Asgd{DVIwRy{t5&VZ_MHw-yha={eGQ z=vRQz%rXK%!%BMKwr$(+ORvKWpKTb)3?V{8pTyclGQbmM9gAt!Au!h?VlD~{!J3e1 zj(T9rhnYe+NcJFRFk(2P^O00Qv@y^o2_d8Q=#XTIjSbqDp3I~}TJVGe40%e&VEhsh z^A-ZRbA}lch5#9430By);CMxSV&BTf0DdB}W- z7RK%KW5$eOCr_GB`qfdTB@sC;!xSU!jx?i7BO66-S8aFUFPo8c80b+W8M9oMv~}CI zE+?EIJdY|H^-C;Ts~B(Ag|krVXi;6F)RiXSw+8$cpWo_tmq$cKHP28Hs|=-Txk=5N ztv0SfGO8;wEk;)fpX)Z**&eGp7&&(AHv7F6%odf=my$3?*$`-C9(8%A=s_WQQi@yU z90K|bYzEYc6pc4VCq~Aq0;&JQvlPOh(yL`k$`$Rf#W}6}3atj8H^0zZSnN)SxA8ud z3zR5AbbGoYdJz&59SIrE&G-U6vw4r7`)v`S2xO*pq%;x<8)uMZ%m7K4EpP-iTY7}^ zlgh#2LDKHnzT=B8W~8@hiO#e5hs9T1eg!=T%$g(ZK+p7Qux$3o;YrencSIZ-8djF{ z`J=4c${MKQ-*?~tV8DR>2zS1vrS2-O&8b?#fj;j$klnRcpZ~l)g0lEVnf7TW7~J{$<4{`)2r9dt5)~z)l=AS+_bJ;+m0yv{Pg)y01RAe{O?y@`Rd9yVBpl33of6+kb1r<$JmkuBaAN!LeH5^{c zh9M<21yz;rd@}C>vcElf>e{8tKmKfbauapi;iQQVU39_uba=4YyoBmbViheUxhu@K9PstmaB?ac9Zt^LV`Pee|)< z%MP)Hcl>b$_OMGXmRb>d7@Aa6a!dmm%iR9d_((oO3M2iz0{c0Nu~sORM144fv#=30 zJFKurOrfH%N2L2Z5im2-OTk`|1{ez?D;UMx+zmd9#1O6Q?~q^Gf~>OsV(G{F4q1ws z5t<$v6d(M+_8C#e_uj>dhzw&!BNj8EjR*%`vD{#1n#SVEPs9{jJ$k7Wll?jFb!6$s z*;%wQexkJVq?YPf8+1v!reAe@5j?`U_NS5zwNfxv8ADum$!C|8xKs3%$}NgMkrOYw za>wVNSc|g#26Lg&VE=C3{zVHgj#h6qN<1neew7xB6@*{Vp4cR9$hrI#ZCao6#ph+y z-it3UEn{JiqzDArt@1DXzHr03*bbct(NnB7tF^ss1fXlHoyK?nAJza658@2@!hl0h z;wjjQAWBjpy6E9tFq9(5cp|)5|0A`9jEDq^;6_$LsUuCSIa$E-lefq<7XR340c>Fn zEtnC4k`z(w2J|1m`g!5P1?3)hxw5u1nT-~|*W>rNNX6&%CZ?u>I{4jQq^TFnXkWmF zG;w>FkrSIY$MhO9BwtmDMlrb&34MZWP)s~LDFU!UsF;?rH0Tr223(2!d*Oe7_;JO4 zE8lnZ0e;$0<*g=9R`0arrm1A0bnUxQ{(aj5BjP*si%&|;+wqfU^QTFMC51aripxBu zeDeq8Icp=+2YYiCx$}2gk_JR~y2NCQmeTun&2#Pegey{vP5MW+zrtdV4!ZLSS3Pfw z?O<}oxp#iyw>63EFxsBb_UaK?q;)W_@Wu&Wv`UW|f5Q+dyT|LByI||LOLlkzzCow7 z7;;8OyJr4?{MLY1g+8zPb^r9Q*B{I;>f9mWiVIInh>vi&eXmabJ|RB3W4p9zGk)9oK_|UF#F_G_lyn^p|+03@_ z_kVTPfP`zV8uY*KEYHr)9eK&gA52?w&Ka$vA}!CnwqS5p>r2m9AGuob%l(Ofpi`KvO{>D3QF{O94_dS76R;!IxmLJ>+<#aguw&I}U zwh8~*{M8SqJ@-J<9-WnGwx(N}Ff!VEXw9=PZ+`w^OV?fzC!b+*D*#M0kv7_+BOQIa z1>$?#}X9Xi_1e0Sscw{am(p8Zi~aXl_Qgixz;GPry?0f%#t^@0T6m(pDwWwL9AUt zpZR7ZR=ubswss^Od5nn8=S!W`4=-X1gbPoV%xJk_)6CP*J;p}ls+Z@VI%L#SE~Xft;O8b86W9T zQ*&Jt(nPOt#%$IZ0Vh5);3@JLid{aY{Lp%#?MR1N2I!fI21JRUOgHT6F}(sY!-u^w zM3&4B)CsdKV6<$FVA0P)27CuH1TVYJ`ej^#rej3S>6r^IIKOq9HqdpB0 z`pPwBAAj=bgZBZ>-+1%QS6wj@%5%;>`^$$+BlB7B6^U+}C{OXQoD`*X7C zD;D5qgJJf<<`lLr6c50fl+bw#ps#0l6 zSZY?_j4T6cL5$OJZy_H|C<`%I6Qh1!Ubt7 z5(?WZR59d{OtkEnF(E;K*)oC*GI>iZkX!^4R#$>qqhuh+Uuo4MVT(xu8NkE5f+HvV3?tTKHIPTpXP8fYf92AZIcD{> z7(jLrZpxUXWtu|M+@-l?*=x#;Nim(zPu6TPQo5z*`tnUV9~A6d4FK)U+nnHCvuD-% zK;i(Sv2%Lv?3`seNdxZ0oX)#@UU0{|2mHMq7}4a;-&^WRKly)*ezz}ot@qHHGD~}t zFEYjP{ecyxlz|h)pt!u;LsgJBl9rj~xeN`4m(v-2I zMz;Ky{m;KTH#t7PT}F%Vf84fz$Dv0a8iwAvboq{;$^P@t>)bv=eyQcbr{?nY7pK#D zFwX=GotkX!-nHZWCEF%{@KbtXX-2c8d5d;z-M(kieU~K0lNSR=M_Z+ul9QCI-n{ML zu05{DURV$amY0;qozSrhSLV+CcI`Q*w~vaBU$%TVKbt41d(+4{&5q|!IBfzl7>iuL zz54FDdvA;Ff0n`R3%a~&!cpx)k<}#Scd_4Lj2>`G>AoFvhKxRI-hY~Q>B_*sV8pO5 zZ`A|O?3nzjGi#8stem)5E|3!yS<@wrZuEUi{3%09-d{8Oz+FS$d?_lug{sC%bC4ru zJG7T7wq&UC$?ySFz=7&=X@H!Z;@g9A(*;A4!6o$7rXsIseaNsC#ST{|V?Bn6B100j zh9_$(&@ugO9X*P_mRp^kp~u#JEm?w6&lMSyh>TX9LzqWrr4xq{)c!NHZmCwidLz#6{?B-@YAH52%Q00ouk8gBu}0 zx-n*_P5Bn$5t-K`0lAWl2~VjRLQu`Q2D(q*zCcLtz5o6bk3UWgU~2HRtd+!ANvlfk*SKG)UXT+8bY_B zW~yQu0{52;!v``z1g?$Z1{ld9vDo7Q4tdbmsNtp-xDJJ!Ux>fQO&t5dK&WN)<^yt4)!f!@VUC5DR!68q94* zj~-2B!nu}+)pGlL21>X23-cyD2dgMCbRs95{X(arOOG5eBCUCI2#&U@rF9qutZ!i` zTRZT<&#ghUX6@z06cp(pWO54!>sxN&P=ZvGy0u4dptsyxjp-i%B7&msb)t9Fqpial zOQA^&XZsG#UU(HN3MEU;#`u&p{;gvYQit{?8Og(+B98jZu@MAI?dJZGgAz^Fgig*A z?{}~nhK;Y$YT=Y&-JO=zmQ7DdC~swGhJkIsVbOqcb(fkNzuWURE!(}wgLZ9n>?=Iz zEpr2Nx;@@){+ySVPWK0~>*O>wAR1qV;;tUf?dFGOL!f}UNLoP!6qY}vMM{RW5AaWLl~_lgkC1*~k?b5@;M z20vmDO$iTo{gWt~1KU4(Z-KsE9C>0K{jpiAFxHw0lSg2b-_~#F+NtB)Q{TDz>Z_<# z4)p;xQiBH$WG6Oh!W==}KlkjjEUcbBY6F@Dt*Bhpe*5}PDuopxGm zbSzP__bWSD)RLc8tQ>RI6)oC!X`R{p0W8fUBB(d2S1L`0`4MthCCd#MpnAQbsdm@O zjIU>px@J_5?%kKJTsc;||98TK+he06y!1JPDZ*jD?G^<8-l7-EZsmxh;)~$J{)s*88PlfGEX>ZKx13Wa{(wK)89ijk*>k?Uamk{^S6?|I zLR-%gcjK0=O`0Y~@y#?wyv5R{OV8haUsuc-5$zk=u~Cud4H>jx)|X#={ngm9V;yFN zQ}55qpD}$p9%bTEe-6t45$r6<;i?z2E-9!%qK*9{&H{Dec6?|=Jp;65mSp&oD6#_E zICc@Rf#awI0zqhwPkw4jg^Fc_f*Ole5XYGKd;DD6HyGq7?g^9tK(KA+#Uexs|j zRDB*yTY>rt@(HvhBq-UZJA|YrC)F*_!C*qy9`;w>+A`*1Tkbwk8I?DqF=yS{);j&M zc|sCCHb#xH8*AXdqXrNY2q2k1z?u>s8jwh&f~;Tf3x76i@>$Un5=om;{%&%l&+l&}u1i z7vtd`Xn0yRi3W1V(K9~#X0`#H8;aaq`e8yNgP;}}$>N{I22aTq8KXEnb@@y5hIU$V z?1vlPn7VY)l08Phhhiz=i-=U^<7qZqHH&h;%kM1-*b`FIlycAEEtAC-m);|I;3JEh z&$Jr&gmigP3qz~n>0QtCd4u^s+;1ycQ=GRaCb31)`j0%8Ce8X?Yj-$H)&!Fd&UP1^ z?~F|3;*N4#+ot{Q1F9|j;Z|?y0iV0T8maJZl?7FJl?f^&JGbP^S?hcCXfomEvuL!5 zPky`byR{dc-`QbvqH>7|^e3PHYBu=q`k&#csp((O+4$j%wX0Tc=+&!(-AbbrPq=kR zQj?_npPs#AZ|QZHcRBaW9(tLyL^uq0-*IVteB4LVfB$Ue+F#dh z9d=I7`HOe#Iaqezgo|RdJD_7@9R6TQa*XGSi@UYVNO#!HLr(9wVDWD|w(V@wF?Q*i zT`BPxP`B0cT*K6)3Uvg>#6$Uae?51@y|={;I6F|xof2w2#A#NO)x!0w0k4mWfeMY! zS5)Fmj5Yg<=1sW&qIX_(CZ`xme80c--qy)a#GZ1tzYwG2ihc-NR+1*ZY=Fang4;`q zOQZTWE1t9ByXW3G_tAeE)YK@`-w|>M{0CA)KY;9x}rF7_Us?xMd(W8?q zBog%ixCQ`?!7>#^_UZya(=LoAi23dZ3~3r_SWM@n)Pjd%WdQm{Do9sut3YMM8XA}q zBpLzBB3Ah5S!y5;CDolIp*Iabk>@x7bc8YM&rzdB0ojO}OU{W%qfl6Jl41NP^qfbQ zZ&88{09x@1wmjh(%D)~91+su4Kb1+YkonjS>&&s{U=CsykbWi88K3WyBG3vnE4n@r zQM+kzIw7yxdeuV)Bt&y_UV+6Aad{FV{IT6* z4keH(1-xVU2y+fVur7r&qlP{M_yPe@ST>Lfe#jcAk{NUq0r4W=LK0;pF9$eiCPo3U0t;*u zxrN_-$03HgvkIf+3N>zhk+nLh(2fv*^dUuQcM4u@+5caA=K)w(aV+fHi@GdXwk#LP z4I5Wn!KS!CXvPFgLP#JO!y}j!2zhyd@FyYfK>~pkN(zLB122IT5=enSC=R{ZF<@}P z*m7@@)vR*+{l7gUt&eWgRkIy92XVZ2cXoDmc6WAmc6JW~P1;>1GUg*BEmy}>S63tG z)Z}Wc0~5+RY(Irv>4;AzL)TFUl3}_PBX~T1fBBfP-O8we1%u1uEhrnRBU1znK0DpM zoTBm+saZs!u`-ZzeWm=F!9~;{d|uf2mj-uTV@o7%_eVGirp}2eanKwMZfM-al*s*> zZ0~cI9)HNEc+A0t5KIf0tg!=dR{{M9wabXdQj9M**`1*_u6=Mrz9Y<+ot1R}O3VZh zW(7f0qVOQbnVZ<*K$$_PB6bwKQFjQET;{eT65)@GrDqb4ERv~N?UEToiFeQy96Yo< z$LkMA!j+XH2BZ5KMoBJFWjXWm%P;dr8k3zpHcUJe{h;yD2+kr1bEMqfzs;0)!e;13 z9ZXTxoIG>tkA8gTefQk?=O><6eAZbw&~gKF_0}DmHhq97xbli+tKVKbZOX)5d-whL zz7=1-{8H|TzzR=BCQ06-u~=PEB}H&yAm6i`JNJZjAAZO}Y|i2(RpX{qZ&?4=$9`LG zGS#W}HaM1+NI`d4-)a&>;lNsV&Gk3ldFw69mw#pI)Jebj<6pwHJ0JP|qtmBMio}9= z>2tmlRc6BY@sI!YZ=Cn~;+2=b_|l85&CP#(?2p%d<9f0~bw|D8HMLFQ5WXgg&ny@) zJ(m=#8|{>4V>E=!-AG00a>~Q>&wsh}lFx45Qay7fpNNQk_~GWSe&x$I-}=38eB*kK zOAag>c;@M+-hIap?)}BRcszK#-ZM`-^@8(0dFxN^<->;CckMiW*6f4L&3E2&_nJ-H zamP~M_UyZdKF`N0z=s8vw=`ll=&7a#?%RHzP3b*@p;4HUSc9uQ3)w zJYm{`I|I?I2!nz9hBbzH1v&aK3oBr7iNMQ&1t5OVd|QP`Rx6Z+MF^Z= z04Bv_%-v3(R|$E%h8Z7x>@*Z%;S6wxEK1BL@lnpW1Lko%4flnPk(CJC&dkc&yIm7~~x|lQ8Y(A9YIe`i=3n1My&PEZE=;G`78ZLrV;I zl32c{AaG#2Kd&qrYH<}$_2(&@z%CT zL7r+@ZeVe_+b+H6#PQ>qGZbYf&mI1c7uLVIwkhnaI~cT`vv3G~lFp0rXAs_#m-1q$ zX?gD}Kh8Pslz0oXxH>``tbC|QJ)gh@(3&QFLDFnP;QL4pOAl`t&`w>h*c zdF5>e6C^Yc=33NE8X8o5SA-Vn4=*Y+wS<$akN_Y*QQ4^!Mp8`bJm{=g$>A97B}n9r z;!X^zJf8R*sbMumGvSCKrAV!LOCV)Iy@{MRZytA0(1;+pFP)bL8<7&Vbp z0sj&4!$sT1U_qaR7_7`R5IQ%L0&^C(pxk%gebR`~-(8ZViNPZQvNJ*j3GK`EQ&6ar zh?jx3V8H@R&%|RZha^hp4OIdFo%rHGAwNlCI>Y&nr3h!w#iULoXtjU0dAv)}ef5^l zB*G}+GiVXTa5WqJ3{qJy0W8u0Y%G9fTxWyfD2M5%j@_+VLj$eD@WcR(hDMJO7FQp=ccxFCjGGT$ zMQ^QoXV%QAt|4PipEU)5ZQFNYfPVYkwYH|(-Fx;t_|UI^_~W~YcN%xCM#B;1ablzDJGm|GA3yWxX;h4O^a1=d?Cd^_nzti#c>#mKo zwf*$YAHDs?OZjCZ9{T;GOO~96L8{|sL8Xw>>&{tp_Tzv1+YR6P&hP&3K`L^^RabxI z%U|Ih7}a?Ug^=1#Id*7%KIScDW#bRV8#gl>=>`mUY`6xG;5(Lzb+*{hvVjlX|I7RC z`{jRs=SIz(Z+-Ws^FDbV*>S7#IbF*!G;iJdt#94{z>*6uJazuOVMB*L|M$mkzvG8| zCr)zx_?~RhtC8f27ISgq1A8I6+cbSxLp&SHsBwl~Qt%rPE`K2uFS%7h%wil_80zwKdw> zVk<0EHe4ATo${y+8-SyH7>vqs7uD{L*B!7`j!ajQT+9VVnhBw4hwO{>i)pM`yam4Wq zK{6X6Qi)>z6c3|O_x>7X%JJou`bs9{Ha)vZP7szj6{BHpKtgB{NZ5$;SQE!$u6;Qmwwz1sc_`ZX4a=vd>O0 z$S(*-xvB!5Cd}-Ni zug4pWhN%6(0fq3#u8#+^M6s{OZrM=bg3n)i+$Ym2epcUq~>fRk|-jrDoIK;%hFRdFC0m{dK$U{#ome zJr3%{Dyc14TrqX^pZ_*`?um}v9O@|=ZH7uP#29M~7GO|`Fy|%MmE-D4>GOt&C0d75QQq0B^qa7K4HS4}+RimSLc!xs4XLv5}5) zg94-t&=N0MGQSNRbQ>zF-V8(D9P+|{6Ow3W67YJWIOGGjk8w;4WeAr9z&Ip}s6na_ z#%za$3))l`qlbVHeGAvnyAw#C^aF z3B_1jaFOQbH8Q{ioRl%S64o35-ke1zQB!iEm(yhUHFM7fZdo*e1{MsuI>bXQk`UW2 zkirKJ(bIeg-ga{P`X8YI=BvKZ*^(}VnTe!uz%V7F{vx!cv9SBI+6Rmzq$}*gdd`I# zEXWc2G!5`1X~IFPF;idZy%M8gk^?YDh}7H@82M>_LmPHCI1fn(d@iG4R|b;-%^_Wa zg%)cMvO^eFX^MsnrXg~{bF_K(N3q$ltfEV>Euo1_rivsYDM)I;PbiVP$Q#>)aE3Pw zp_jrRxx4~m$Scz&0jUCgnBE0pf)<1{J&OkoKu2YbgpryOnZ@v`hGyWgdVrZp7Cds9 zX_qVoXAd4Kf?WgVkXPH03Cko7-=rg@#7thm@G;k^a^RO^>{!)VNChPX&X z)#s%c1ql73RRhqrW+%F0TX+&r8zrkSMEW^FUu<(n2m-2a`Ea4*Y9q5<3Xl)yE7K?73I(PyxYsfA&QPcf-&1h8aIWi zAB#9#aZYA=s|rS)i^oSNu=M0gOYJ`Juj-l?9G;wDJTTBVenQ13w5?&`#7}M8SB>wA z*AsYc&xUmk+rt4a(QuY}3Qwwe7R3gsO9B%U9hE*WG}A@dsN+o%U5-vmKyqQS zL6k8UppcM-4NLh3K;`fe&p!7oN(lD>UUk72e*ft2e{$!YTv@_!#-WvI1;2i5L*Qg` z!DPeC0vOyztqR+mDcUmt^e3~D!;oU$p~oFBZq`pvfu>vJUJae4OatG(b; zmqNq(*Pnm#iN8Pb_@l4B{`$BH;~x6;!$U@n`};p%-ne1?;>C-8e%DXjeAk5h>Y8Y! z^%6$qmpS~OD_1_e;sMm6+kSZG>7O{2wCu%5zg9mZa@ARIMXnfFddClL{f{dyYd+Xq zF|=a%uwnEK`W-f6BfFY?q-&jf_SrM0Pv5?68=lCh#Cd#q2!Y8u$LO^s1B#z~;!m)L zGgGRM(vgh++G#Lmu+jlVTi3h}jNj{bs4oh}Dl3M3_dDOZ;a`Em{QpQ z06+jqL_t(FmRi2rmMvSxVu}Fn9Rye|i2{QU3PxVmP$(gq56+ z6}I80fQAYHWD5c2w@e<0QItg}geo3H5~Y(wrBdcHW9XAG#G`q?@cJg~^FHPGq2@FL zGx{CIU#`rzP8*K};xa?fZ zj2+j8q10gy+i)&#Z#TrNS^yY({|fi;p#@_``B%MLchU)M0|(?h|H6C6j42p9x;)GY zJ?`cUD<+>fd+6Vu*}Q(^?wQkb-(P>=V8foJmz)vct_g=neOKK;%|eI{Vz>^g8~r1k zzKle3{O;qA8}aIz>dhZ+A2WK)s&@`JA`PFtXdbBHPg~gc=o9NEjm?=hWh`IPap6;J zeC%0q&+v4fKd0(fkG@-5zxB9doFj&-Q;@nAiuCS1YFdf6v~7O-ZM$tK!+_jsCUd*m z_N}j+Hf8wai4D_rxnlTWKEqXqK1@csu^fxWZCTuG@f61JM-pp$4A5AO`KS&m1@Y)B#M3UE z+xqTzzboZ(3~kEf$=v#<2RB46B`G+xMhsb zsi|8pj5Q4FMjU1di&cvoMF_J>zG&1Bx}01V+I+0WiN|8U{N|U?^UT7cb@%8=4%90zY8b{jrAQHi$(P{-d99 zfE|%Yk^m4unUiZkh@lkdXZ^Wl%NEY`$%X;eXWSOJY6IYOWRS#zJfy{`2x=uuTrPvA zTY3n%!%gCQ6` zh%GfGTB#02C#NRFfSe*|J|1*sGco)m60VX3!7dp&YzRC&Bne3U zk7ghc&m-1nvR`-Ib=VY`h9HbFLZeehAvJ+2{gW;&1W+7RmUyWbry9}wF=Pt>i!@+Z z(DGmwgdTp1y^>tOu-$?$u$Xs+F#14MRTTsP2>@>fHCA=Jh6#f~ZZHIxR5o-;B@5wf z7^|z0WkC3_Yv)dU!`T=U^D%iTi-(?|O|Iz>fpc0|Q9^I33G({#vF z#tR!0lTvl{M3|obrcaWUr8wJlLaj)Qp5p6CKFWoe3`qndJ&kS;RWcY^!O|^dHQO!J z3>M@hRy;ZOOI}1V?XGtvGhmZ;r@Qh1MpvQ#aQ!zMY)X1L8dNQ;wRFc8G)WpB%6PrVk%_+Qms~So$>kDq9z6j zj06x$z^}>Zr+^}u!=X;+j@^6ycg2eD{=XY1&Y1h&s#o&!)Ydh&A)4(U&pf|<>pRc< z^F?mgzGnHAlcyj5^pk(T<9j##W919SjvIT^jW^u?#ACa5?NJ73V{=sH<54a$Dk$d+ zD=L(3dGdnOFI##EtYkqY`j~<_iXYYLhDh{z+*3MET_B6-56Z}HdgPNlG#~e0^G6Do zI18kKL&;SP^g}w%8m4Sq)f3!q$!;_arK{=NWw(#49KoLyNDP)cDUlc;3-WSjPMa>N z6so*-(5!skNfXq^V|gIP>vokJn!Li?>#hX`ilFB(Ixs*}1b1<8h5%JWR?0@PDPF>p z`|rPBc9a=k9o;4c@X-(jyM$vbg;uOs0ZEKd);kPgYKrc}n-R^aIF8;!fb-FN@LBNHxE^iT0kT%!o*sh)~q1x3XG0h&Te5{vvX$)N;vs$CpxYQ|f(e2CdO>~OjH z_<_yo8#mFpsX!SIAm25VTivuwaPg_ssi zj`1%n1DG+6_!B%t3IGA(v7una7GsmFS`i9lL75{9t8vU^8Xf}~5&(lEGW zQWgp7Sd-eES9TDHmx)lwNcToYS65fFQW7L!mWrcF>T=WN?UQ)1pDz3K^q=1US}<&f z?@A?9(iJb^nA7f#M(kd1?UGN<#QKb}(^E9Mo%e%{mXaHam)PhRh#4{yc8J zCKsCpfk?4)!1#mfA1v~FntaEWPP>E;Hj-30>C(nE2i@EM8rkt|00VCMG1z997+PKB z>LjBo(-w#pIlL80WtAt+*BlSVgDN}hg*jI(opaCqFa6@7H^}FXH;<`Oe%3U##~q19 z)Mmg%=gw$t2|l@U=U<=M=5oa6%^8kj1iEOXDHJxoqC+^;oP(>1vEYnH+k9S}q1EE^ zvWsWgosmcWyg6>$<&Fo>m^VZep!p|MKKkd4&#e3)*zCms&E5j1FLehaBhQJ)5B=*? z8=6|%PMR}7c@6YN12bm4*nx(YUHhG7#q>B7RGEh2wt`?t8MAl?Z7nto>w%a{srRmk zGYnK5OL|ekwx^#D)zvsli}7Vw?Wla(<2dHKU3?n*Kmea*@P*WdO8exdX4$yI?Qqqv zt*PBpW;-^`tZP)&^x|Vp>|?WB$HB+A%j;X16&Ou)U53@Y_udPvSf8t^s<6pIC@cjS z6@;T?j4!k(_RLutVOnLAoQ-|ljTy*<(Z(3Fs3ss`baR3gtp)rT8W{N4cDby8B!+OZ zbxFhmBhf@`dr%@NB0(!fu|sFVr~9_sZo?H66^b#4MFSH#IoaIeG})t%KFUgxu1E!! zELnnDjGHsH0GN$>u7E&jKtHx=EG!5sGQt)jMHHY`VnfGE6iY5{;F#*DAb2jg-~w}p z5fOxK2(v!w9VTOnz`l(C6dyw`C@e%D<=PY24u147tk3WY3%DQ=xq*8W#&oW6korP1 z`vGRFE7oV+R54|u#z~FZ8N@*cpBix~xyRBMk7<-hR8MYO=DHGeVx6%M12Vo~odm!P zk!F%K$25SHj_gHx)8FtK!+J=SIk!l^Vpo8!2ol!ng2$YZusk4 zv@ac4_b8fR!GZ-G5(Ej@u(E*%7yy3ogCD>#ng+2i(-|3ICc84Sxx&Dqdy}0a=pJlu zNM4BN&O5x=nE0^S;nYKS1-Y3gnp%mZWwGdigjoiLNGeI>VtV50aCQ;sjj#wl)5F_IU+`2!gAYz{S#-;4a0f0H7KT6duuTC;!7_NA2o?3)ru9rT)S@FFMfXS zPw&3-{s&f^Ht*yS!^`K-n>%~jw1+nSj$ACS5-6ly;XLDZ(xhX5c-K!SO`JGzKrsVZ zvorzz==>>dLH~q2!WoFChtT3c0)}spxY0 z4?MsI13C$76SQ<8Oq4otT|&L&xE@OzlK2P>ngbZ5lL)YWiz&Hq^0d1A0gi?`4!3Xw z&lwNL{`s8k^Ovhs7}Z%^^9e6}wA!|B4Zi+zfXkMq9EV_0w_J8~Y>hl&_EW3#AiX@hl zSZ7GZ%!J~_vvA=;{FTgnL%Nw|F=6Bs0v&{g=u_jCNQ`Be!!T)amA=ID1~U%ZI8c-{ZG&ddMC=P;aYmbQIu~-Z8(C zpu9bduIu%-PM;MRUgn9!avECWO|AH41II^moo;8%j-56K`y*K3F}}0ta<=(hk)b64 zuP+!mC0dZHaL}b`d;V2ujinwf&pg*+cuF4X*Qx74C!s$u^svA(HZi#hoNVBm^Pq5G zoW*1*rdt_GSgz^taz`f`hA0_27j_x!+TwVK?UhY+v=dTs*yPb*1h{mJTbLy~Qi2#6 zblCm~OH6{Q!8j#}@y-yV3OWn!sHjaGcg19O%PqHv&jqRSkR-|Bw;|OYT`*MH~%7PFwcQg=OrLTptPZOV`rB`c~na3 zWroDY3J16?8YPwb!c{SZVFw3Hy9AoE5Jq6)VgQAx=8z|?NxX26`<)55bFU+(5(|d5 zhcg0)g83B!uw8aQ_1VADPhc|qK|IP&X)h^5V$9`{%7fxd5)%YAdb$Um=B!vS zZz1QgNdZ8r0oeWm10lg90ZGU#fu(e22kvY!(;#7J=B%hW9-K6d;D>2E&?#b{ItrvT zA9iy*pi}1MaF3ktAyrT%bQ_&Z;?dOc2-cB0ARM6SvG;L;fer(~NKOFg7(5!10H_2T z^h>Sj23V+ZGbdGI1dMo)u$ja|)pYFyMrvoq+*e^(0fq2WgoE^dsAZbwA)tFQVA8|W z6%7)Sgg-Bq^g(U+RwfS z@q&REnuC!}1M!x&pwTlRL~?3K@W{p?a)U{Vb~((s6w2s2|SR2z%5*t~h2tpw?^wome{fm)Z-9S=n?lQR$#py?aZ z4F=^8_BcIlv0ywD58ERL4%T6SrmIkTLKgK?A~Pgum=u{+6blxR%ZQT>nb4`sKLO?^ z^Oue!V3a^sHFF6DiP3L?(LV)}pE^du8kPJ!Ja4WWW8pS;%A{AGf9}04J10~QquiHY zda3@SsaA&^XS zN-#63?8Bg921f{EZ)FKUtyv3jG7^6Rv~=*81v|hHgC@fj=eTr;7_Y3XWQqYYna=FV z=vPS5i#XuO_CHmiM(Fc=WQB?|G3lbIJ29*jU){?BS`1TL>5Gqb_ocLt38GAQn$sPJ47E)9SQ5lQo3@$G`YjNav zziP&`9I^#C?flLwd!Bx>{PeSwxmk%*#JiCjBd>A2Pt7lX=51`)Ra7wYG_~Yx7yeQJ z3nfDobD6Ww#l*%ugAGN2kShBzi&<>z1MSEul!Bq?mYdk%H7 z-r=!wTO9Z(Z~)Q9GE8JK;)$Px=gpgko1vT`MMfilh~zB+*2735;sw~u1tugOfQbYE zABoZmlW*VXs8A=k7yoqGm!^sQd8b2w;$YR*)n9S@Bzt7*w{TrS2RUm}`vh%RQ z7x^d!X{v}M1_0zNjy4EljACeTA zd-K~5ZweDQ7n4(TXy?F}uUrLrgl}|%QI$g_hPOc#4lItLLnvC6E)4hky`!osG#G(F zWy(?6kb@Zk1yJwgL9JVS>L(lAxSAX3q3AXm|M z-}}!En-0Wcp|ejNT{2)0Y$S`o_xR1hIJ+anLZh%!|~0!GZ;pqH9eOVO+U!^y5q!1`g_i zIKtW{6c#REWn4WNxXE}!> zIjKyh%vOwR4p))|05dR@6A2idjYpEqwbQ_T9>9pnW*Fj#4#3n&x50^qAt|k|xJr>7 zA|<(WD5q*15oL7HndvZ8nbFGm40e5R;s$_v88}pcJ|;*AGkys(LOD{vz!VN77olSS zfbHT6M4<=)VI!i6F$I_uq~S9MAS?p_se&9Cg(RWXuzJHEF|{MC$g8WC0Z)G!*+|6$j;Vo;s_IUwrDqWZF%0QE zT&6_Z(UiDj)9&z!O;hBgxvaw+7A9oR3Qb;n|1pUpopi(lnkedJ>gR^!(vh!VLXnmO2RCsuC|g2?PTMXm6Y`+M7x@b+3d>rWcH6=jqTOqE ze>i$@xMNWo{CP|M19mpn0!$?5#CSynd(?2z&4v-{-aTOt+zr-_6`F;tm zA;^t{!H!fat7rMWk%D`hXE;(d+k`r2wILb zF>w>-lZiMBvPQ$cv2^KDVz46LRkodmxY7LTmmc+{D*( z`2O#G+mY)ZbmDwc%|as7+EVw^AGJO9TYHYPCv0)$Y6P=J=}BA*aU~4{_DTo?|9Yy5T0Hm6iQOSy5QEdGnkx z4lmnUA6c<$=!lAo=myHxL|5Rg9s_61&+c+=SsQTK`IJq=xl1N4I#;PQ9rOrbkKg@o zX6i9%Rz`~hM}h;0TI4U%leHOxAGHI66s8lNbmRa=uH;k^+{8i|@g zAbDBpAWU)I6zN7@z{rA@$!ZFtlH}F7`Ya%ub;fK5$)UY(G=KOv?=hdt9XM{@$>VV1 zzW-Nmb18EqZudCquDoQ*$tRt{t{%i_ddOuE1L20~r)FSNR#IEev0q^6J}6K5^dVsl zuD4q#jO>aDa00GqY=$|Ttcp=e(yKh}sj7g^z>>>|S49iMfg#46OP8W>8jn$h)M!aU zaRmy5s(6D4jjjE+nh_M3z$6rR#=@%n+`zD*WoMs$f`Nxu&mW2)v#V@iY+z}$HsH*M znTnJAVP5taq`G}Rw~u&5t~WO)VyoktD@b(59f5Fc(A2SwyLZL5?c@82%EP%O>~}j$ zv6x_C){ld48mN^yc)FbQC;=4VKzbo01KqB%zC-+~BY&wjMBJDFzQ{xqU+NLIwd`lDR_z zhd1y`3}8~O^cD=tTVbvOI~8YMwPL@!z;?7z5=Z26#N1YLbORNH7s8d8f~~o83sOxCtll# z0Rt6T2w<3oc#T8{RK-jx3y>t~7%3ea5Q-g1{G(aI|M}4!dA4QWPSYN62Ny0K7bcjj%>5@c<_rsnGxl z0byWr-HAz#BrlP|SaYEgqcIyZstOGy(MBD>I008hcTMz zm|Sdev1HP0p;d^aXY!^LctVNjCu~_U?zk#Pb243tFoZ6O#}fc@4>)5PRLCW;rORcG z7h2CH#I zeL9htOaQGTk&IdDg`JMwM0OpzRVf6;vSrIy8#7^nLE0Vl>_{1)g+J06x>XS~f4ZK( z&CrJ>Y>C#^c>ke(%H>Oh-8>6?49vTq!e^`-c*m8vu|Bm zJm6D{7Y`Xa?6K+7hL_Ey^p#IM#^02=^S^Q3HJ>=+^g$(R#}|b{ePA4aL@sO*z1$$w zSWTb-r)?d@mJTK#o~l`;93BqP`H}6Y9H{-6DKW6JC5*VPtgK{y$22LP5Y^SyxO1@| zDO8~eu!*>E;X)ZcW>Uc>KXpK-5+g%~k;0?n69VQWb2tIa{8N{u;fbMY=q>0Bl1hLp z+BASUJ7FP=05Di=vGWqcQUwz*j>A$-Jd4?U<=7~*7>g#(=V7=9d5l@GXZ{v4*pzqiJv|l1l=)!;n_MgNMAVvruv{aj>I6fSoyP%FxDcF>63PY%ol3 z-MSUKHa2LC(Kz>@r2xQzOPp`8I8ztSNZ|*Ke}GKWnk||(39y#Ko7i7cT5s7+iUWukgbPX- zB9$;^9Ud_vu=+Ji(hm8cs%H+Hs|yn39U~c84^DijnZN{C-Yhxh&6|gM$Lz%-5DORa zsEMpeq%1Om5DbumGKD4t&W8GiU@#ze2kYX*^u}AJ5Wr;nQ3Rz1Bf#1Q&q1aN+G!=-7qxCbYJO z9{k-}uY3Q0TzuSud2_XWHmMXyGo+}z42!lux6p6+6T<jvSvlPoy?-IrQ4r zGILhh5cPQz1(4k%%%Rf~K>% zE`orz=4)W#6-hi2NuZ5wtfj;=iL)T2P-g8dTefic6#F%+VsmkH zGBUzOIw$8jI6upR8M#LhfQiY8y)lZ*%vhnE`VwFr4zSi|B#F0lY2sOh0>c$Ftmr69 zcJu*2lCWaLw}^7HDNbYV!+?~_dKE`wS`f}d68PZ^jFk$~-_n&RZNci-eE$Y@q{?j9 zfe=>nPM6&r4=PHRJ1E)Gqk%-*#QB|bHf*;@S>`PL9hT~|Tfk}@MrBi+bT&w3c4Iq) zx=WYKCT|uneS@rB)TSs;jVh<7z+E`ncd#bZ>I}!Ctu^oDk2og_RRp1}_MSi3^_a~b zQo~G!Xo^x)l-R!~mrq)`<*hb%Js+=bbJ_m7{`F_3v zR6+&?@nCS_JQ*#N%}37{>Re zrh~tD;K7|cci#N%8{c_ldxo{wx#fRV|aNMw6* z67wdJ3_~)~_fmE_Fn}2_05rA)R0%(|C$ff@j?HOEQ8O6Va)}@D>1HnB1F3w65V?Vr zATJm&K*JvhMlE4$8TA7T1JXbfnLteMf2#Q<9!I255FR`bgS{9X3_G$$jx@s?9i<2n z#A#P<-Vl!vWD#Q@@_^+0D_{hWW}K@-p+eB%9L<4R?jFP&TJHK2oY=dur{jmjuCsVs zLqp025_m33#adH1VN&ITkJjJwlY`Iv%^!;Jp-x|*&H2<{TAuk!GZz5yI5<4v#zT5n z@j(A2S4_I(GMuxtrC1lS>ATmLRc~yHvS@XASbKYOaHNX)V;G)yUH>JuuZftlIs7(z zp51AW#v9!}SAIeBthoheFCKH!Jj&5HRiVa|P;v3)wZ6Q_bI(L~?Eszq*(Y~A^_XMW z7(ZA1^SQyMroe_Rxt>U)-yI%#+<;4$PCRpw!lU+3v(jx;L0vtT0lF&=S?M1q4j|f) z{yYQ_E*L}z$gIFm!rfwqU;qiyne_~^56oJofJzW@OA)gX`-i~rAXt&AXmtPxFnDl$ z<|7y~EumAoT})AjhykrkEzATwXpO8(S-awqr^&`30&<8!fKnDq9gqV_q~u}|%M{DR zNx9_eR!y@3#{L+s`ByX&@|K?v-v3tP>;J=rdCdV&UToX$w;mom|N8vgymQVvZp3h| z*mjOTW(?$+?X#JSfMDQ-^8O$`bLmGgmA0d~jEeU~t4X_i-J@rnu+FwG&odz&j({CY zv8Nz+?>&DEwekUXdR~wZfZJ@1_R1OV;sU<1z$bNE0>QwH%E2ejuG_tDW8lGjPg#`j z26>#(eFrvt^9K$aN5zd<(#B+2;GI0KNK$C{5_kDmmv&tjy5z3KYi5vc+n zy5Z|ItYI)f)B0k+;}9ssKxdYXC^f<{hg=v#`N<59EssO-7>nfw9+JRD$6)se=Oflj zeES$M;@Q2%V8n+*dHC7o!(2}mz*ts+A5$!zMEn#7nGD%sK4${ZH%>X_lnh|zB$N== zrKlN1vUz~+fh(D0&yqQ2Y<&_IZnGlgj!qo4U;;d+QVd)8fSyJvxJ5%=N(yCc!Z&Q| zbW1h>$SdyT3|{hP-|kW!oZJaWKj%%m<8OsE9B(oKIGk^;1*aRcdgtkGxwyLH`lsw2 zC}SN{WOtGD6MWi9k@9dT<3_gPW9`jvFrBvsIpVy!W&b<5WmDoYzPXZmnQU|eHDzty z{kPW0hrtk5q12GNMsz3qk^?zfDf3(h+q7^D+R5{_kH7{c5m*XGK=(Ig$V z0B5Ht%VpS2wr<#V+QRvj!-t)F&Z0m6`7bx$^etQS)*Jrwt2g}5Z8!bbS1$U@XU2@I zq7}@Ymt*&e)U4Qi*y>~zbeK3mC+ESO%IcWTOwY%=7SksNXtCZx2eUsWPV^IYix(_d zKuogr86?CnUAmOK?7}j{_$f1yXqe~>7*a9p$`{U)2MfSNGCKgk#m!8kNZMpD(CSAD z<-$OWs*r?1mL!QJfY&oO?16*}#F+JxY1Vio00F=-JHP?%5~TWICQ0bWm{4V$+nzUX z9%f%rW~71%czXYnDxiwUyvfcMJHb?hI-+Ty9TAV?vpCJbABe%Lk13vO%DCkWqq!KM z*;K#>9Q{r7OsEnq1se#)6Smn9j99Cw7YJ!qIRww8sX%6CyHrqY(D{SQ^KZT_f9Vx_ zUw^fE-TVG+9|T&PLqV3+cq4fN#f7oT(fJdnjGi-hz>uK|bBCWYVbxNUMCjZLw`||y zaQoD6C5ez_2q|L@P-ol?SQ}p&bRG2iy@f?3Lx&cO8dF@}emkhL8k<*<2HL`k;f2?H zz3uYlP3zayY<$0d`{vwD8=^I}bsuhKI&|fDLepl3jvZGxV^;Z$0-X@9dawT#esh_4#?tG1U;l9ZF^Y(W6Z|I{RiYoYAyZ2ECpe4=3zUI#UwE7D6*=N zay2k^I-$u-q8?qH~(*_wKX7WU3 z0audFtOKS(nh@7r_=N2Lrax)Q{-E4H=Q#huPlmSabQR^;0^Dn%27`Y>x!*OE$&4b^ zClBm=$(?UMN8>gZ-BipKadVczTs4jhH(1O}~4 zv9WLf6yj*YZQonl4xD%H*><-t8lw;QWLD}~>t~-U9i-H#Z<`=pS?NmYZ+Obhz6i|_ z9Y{xZa(wn#vZp7xlx$*TSmDoz!iob0#nESzGa{xWGG!n+(u_e;dFueF6vUN$1Sl@q z@NLfi(GJ50*ivac=9)5X9c^sErx*%Z?XV)n&Vu2R`!}$(n#s;GjG>1+2f1MeH$&`z z(h0E;X#=#zgT;pj^E6)JvYKLkCp*i7=7R^(H((SD6gGl~Fe^+ZcUGHNkj47UPc#JV zP+a}NvW+g6&1?crGzym7EJUU2YN`m3%9}Pq@!-KI&mG4^QaX)^^%+-d*3bORP+T%v za}j+KrgX@|UVs4_KEM+yg=z$0oKzFOr7KA4$W`wG04mtXj{fDBUrrr~6o7Qu&G7<> zzW2G$eGbztcv#g-D}WyZv^1hQ%V7wk4Z;U}AhK@=fLY0BbFilS^vkr+E@``)U7U`| zl`+36!ZT=2^Oiq2Y)!Ga%NcKO*!VMd-uFB?CF)*i)ux9OErTr#E;c6ZJNLe@zWNc) zIp+EXHHGSxBU;9XEh#L=(}zynuy6C4*ycd1ttAwEta^1Q7C(35Y$H_(f5WV7SQ|7p zLnInSb4LUnN7qb4qzZ6dC;u7G$dQ%Xwr!U%<`^zTrN3cTv;MK^&0TUa9k;DNV2D0D*fS+^cs(UTYUwrOU#y2?$(~bF@2E78?4O=zH3L>Qx z$#@vw(tm6&6nE3n zM?%`Pba@U_dD!xYJ&T9WxgtL=7s@D?B;HxNb@UZ&79KMPFkP_1nQ_B4|2XCJ@;N8k zI3N^=()GBA!^R&IC7wD=S86)qdxJJte(wI4wtKI=e9oz75}iM3%+!az`Nn6L3_t1Y zaC1wP&+-IA_&OW6FH1SJG^-+Bac7}_+lx<(|HUsx&zKppMcdDdnyInE76%SH2Mj?J zMMCn`Z+tyO8uR8c)1rTx1LV~|0Zs^$ssXeD4H%OSlLb~q0OO%oV@yXIVY!ac3RmlUe)?0Ed9gQYCBkl1++1`*Snx>mp}UH6eF99npVHqF25dUuZp5QBD7_)uag-Lb>LNxrk-m}u zrxy7!SKd%h#o7Lv$7)(op&f4fwtZ{9S#s<(Ie12QhL_I61$*1JKfY5C7T&=N4IQGPj_tzcR_sQ`y$Cs6h$F9QCS%9c= zjhOnDwl_EJTfL=r>agOoW{%3xL&zcx3bJ4*7>l>N)UdJ27uB%KtXsFPs;Y`35k_h1 zOBkwL)Hq{=G7xB4RuDWoQih2ErF;et-2i5+L5Lv>R_PThR$$KNR6DNI0B0alQ1#Or zmWi)8b)kqme*B{m!-qxje4%Pi=agf|PZ&S`{PQrKKlS|c&wc*l&(YR~2lSyfk3>}6 z+a1pPiOOE1g}pSHLSvYmdX3LQkjMeiJ?KS@DI_+2vOH!Wk$!-Qd@v_TSO%jWk_lik zPKlJEmz-V42tb!$=0bH|U8p8Qk}^!kIK+-2aHO-U=H#9N) zBuVCRnu8Cs^RYn$5&q6Ezx*;qq$a46VTi#!0b)R9fOGEdkSfij$bu02vdCQ4d&IDk;U_C4@*-KtD^+9e zq!f}w!m=8~0fz&0yk+Y$x%6}u%sReZcIHpLqA4Er?tZ)_8jRarF;8&6_vDIMSL6>U zipQDPoxm}DXN}eZ>=zEmna&|6oiOVU55M-Qb1SCJbL9IYZ2_g(8U^B2qoySelj7c- zyG!E*Ri z0J5iFS{#!oS(vPui|H!(z+xw&6uH|$umK5jOgx)6Z|2Sojyg#^Duh_B(-lfCFk`Jo zH{bz`JDORBX|xF$m5?{0WYLA$T6CcVu#`V3h$2v0cmTk(ihI|RB}?!ZgN)2A3jkTL zg;7)4O3w^0M8bSd<4O}`h6g#AVJ|hh?6S)+K(qLyYSIMe>WDXhIR@GQ!|wmcBadME zr;fBcf&v(P2zU#CIZNiSz{{O2K#C4FX3Ure9(VvZHv$2ZAfuGKf@3_2-);B;@^aEH496Dyi(Fj&*rxNc9)KLf#?+^!dH9e%>}W!n$DrY`HS zD`REqGE8N1YbX6}+3`yrc=L%5Yz-|3gOS$2#&FH|UV3s|>7c3Qm19c=mFDE;qS7lF zXph9AZK244mf+_7^=r25er5B{rZ!g~;&@{9hhqj8j2Wg{EoIf{mAs4~@^ohJkc z5`$AdoVgUzK*BVn!yRaN{Hdo=euvstbrgK_6x_Uuh4H04iiz*VEw5FOn1GRG1keRpuB4MSX8g%8(170o+9C2W5(!1Z;Xp8?i2*a&DTs^!h&h8) z!ek^B^^rF}(FlQo7~WW-S>Ga;IaLI5h!h%ZA6&n#WpNLIH2- zkl9}-E-vMwJ#}4!^&A}>P%09S-Er*si@Z-i{o2wib82?wjhODlOP%GMF~2E;ayT4( zujWJBy29)K^Wv|5wYaQ|b~JhsAJTG9TfWp?n*Y|as|ML(IaQM*d7e013(DzP?dLi| zfx5NTTWq^0-}AFmmww)zo6D&mwO=bmTW^a4M*#;!2j#9k1m^ws-;a1iHx*$Eb!Lg3 z{8PvWMuSPfh|p`>_FI^c%p7pW7Zn2#LLLEr6x7}#p=%EC^cF=`7!acbt!uGs)h62NpMoOif>8WZZ1Pd@p7|M!2~+JPUgWX$~L(nB6> zPngbu1XW6EwKNvjX*tK58FNA^Mko$f;nvN$eon$>C`&R5B@73CvP$I5*YJ2V00kiB zTdZbWl|!mMmslBT}j?w+C>KZAw7F22}~E+&D>$zKDP@_i0vERuT}QK_JUV z;4w6FVXhny)){fvB3`w1nu;VdO1$PZhAsoba8Ys7F`-K&8UPz~GOu)M4+8CuV@O?f z4TkEe*&~sv8J??(f5>g4ryE|PNmz^l6?3?A@}^$jwC3i*f}M5EVfF1gd&u6jva#XS zHuPwZKjL&nl<#bt!((rY1f%?8E1y38%YI*BB-%b$J+V>Ya1HlZ85*YpX>H`U3@<#7792UTifbeg8`15#axl* zaEx+nu7R$`{G3dhGnzkU7c4An=g?bZq(A_s=QV5Aur0)$6!#J>_u zEeB9CxTFcG#Qqq%6#5woJ#QG&gTaY2i}=W}JB?<5o`(V_yiLZI9HU!-Bve4uJG_Sq z3i7!)X#4hU!$yqI034tL0OK;HAaL}Jn_`77hZGht<7r*vU&@8><4ol!GS}Hue|WeMT?3@j_k;5bphdo^*&lS zpyem7hmoEAg6i`3ZoIC%{8Sq_pIc7=Ci|2FS(#!m>VV z9v;mBX?h%%u|?8kG$k?EWtjAth@o5nx?2TMaU(My3t~o=-ojLl(I*+9bS=zA3l=Qk zEB16zzQBWyp>0D#lKG9u@`2dxRvz*z<$gS@xjemftbLP^uLkakx{i0X_> z$iToS6(^Ax$e?9mRA<;szXT7yVBn!T@-tJ0G-+f+!=%xbovx>yKN+`s$k0}YD>o8~ zx;zaozca5JUnr5f*!}s`%VQ6F{qZ_)q1~%6q*OIHAFVFp$Qe>F+ugTU!?73R5}t+v)2U#{0?&`G1E zEXk-R^9Ocn-seo3GqJqtnGfE1E4YK}@B+a|I1px^J{)eVZ)*ibBx(-^9Td+deUu;Z znBVJg^2z6lffvs^b8yK3Y}w#R;GT2?_E%WQa6u3jVK%WCS%A@-@POuGANGW3HO{9a zvarq|M&Om;VQY%J>}BNQBFzpE=P)EYd!=k&34ScsdhI|KCNknVW5Ix8ONK%T{P2fA zL@HwUk&c}}=VAB>YYablzNJm;rSNl*J5OLEeI{Y>Kr>^LIw~h0@R8G} zm5$&{tGbk2c?%tlTD^%KR`96gfQZNbCXG@kf}YI^oOAKq`HQQm#OR_0Mti8EMDyORutq;9X5Ez=n+-rWzd;Hdjd1l zmh=i8mcYXgKg?z-8xO20_>3ywz^tsSOn{W132%*ucpWCdPhA!Z77RMZ+?)eQ5XuoJaXjshzokMkrxpqwaNU(~qk$m;l zSIfN|-Lmi;={kKx%C`*AACZQ%s?kdhh>*fl06VXs!nP}sZ0z?;dE#U)AISv?W?z&u z>@g=0(A|P`_T&;Xqe_4~&$GsR zB15HW^{E&YReqmF{{xeas+oM+=Gz{~Jg1bH@q$tE$1B~BRDO2)CSSpi?z{I6+SM;q z5PZG)M&rkTJWiPpJ3j5`H(#7;v9adk-m595Ten@?w#}3+YIal<@YKI8uRm8<{)~9> zndijWlc!Hk{L|*0*L7}Y!`!D0uY}#!mR=UvnRQj`&w|2D2f3QtH>qSYFg=(U!_qK) z{*f7zCmm)wmetz)R%cnk$>;xi=jkqRnEG__$#X*Ym^ND^6h25k%J}wPU~Fvfk;g@A zf4|$^&)>r>JR$$&=0C@~?A@1an#TC6W5ZpoD~}FLd~#r7`1MVZY%-pFk*Vs14Svq6 zB~J@YJyx}>HgNHEU#(krw(_-xUVE}I09pH?Xu)CCn?KwN53zFI3@qYs7Q6PGZ%V|p!1N!xLfu^s?e|)0*iy!2x=dM9 z(Oca9y9Z5M-A3|n7!t(WJ9pp*PcC7Rs^|yGym7(boQvApNHvxk=Hx-oc$Qv zaYg$XK=D%i(#YUl%VH z5)&0;4=Q#zb77L&Av4pMUlEexMm_?MuNior*U~=vsNra1zb*TepZscHVzNaOZwK2= zy1irKn+bv!7O1tl2Fau~2E_9Q$3*LhPM^K~k5tq4gfj6dgXeZiumH0`lQ} o5$*Tw*Xib8y-lp1zh@f%^Pf-C?^ivT&By=*p00i_>zopr0Ar{<$N&HU literal 1014336 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æqj_TXMH9y?VJ~Xzo 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

    5vu9uNyQ@F`V*964hE8|5U9G`3tI4vnX3xdP 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ϡ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%0D+c=&F+AzBu!y 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 CVm~kNzqfo}Cfr`Ms7EIwFHvj$K|2=wPn!cu{ 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'z(N}6N<1VW($3H+A}7q*6WJ!w=2t~ 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 z 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

    uYq0DT)ONIE|GvY>B4o_X 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

    VRTsJpvX9?wB}#_{rq#UzyIFnpRcSB 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 z%0D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℞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

    K5B=`}8A^p8xG{ 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 diff --git a/index.html b/index.html index 6f2db8a5b..e85b37651 100644 --- a/index.html +++ b/index.html @@ -1 +1 @@ - JSON for Modern C++ - JSON for Modern C++

    JSON for Modern C++

    \ No newline at end of file + JSON for Modern C++ - JSON for Modern C++

    JSON for Modern C++

    \ No newline at end of file diff --git a/integration/cmake/index.html b/integration/cmake/index.html index 1f61bdbec..60408fe9c 100644 --- a/integration/cmake/index.html +++ b/integration/cmake/index.html @@ -1,11 +1,11 @@ - CMake - JSON for Modern C++

    CMake

    Integration

    You can use the nlohmann_json::nlohmann_json interface target in CMake. This target populates the appropriate usage requirements for INTERFACE_INCLUDE_DIRECTORIES to point to the appropriate include directories and INTERFACE_COMPILE_FEATURES for the necessary C++11 flags.

    External

    To use this library from a CMake project, you can locate it directly with find_package() and use the namespaced imported target from the generated package configuration:

    Example

    CMakeLists.txt
    cmake_minimum_required(VERSION 3.1)
    + CMake - JSON for Modern C++      

    CMake

    Integration

    You can use the nlohmann_json::nlohmann_json interface target in CMake. This target populates the appropriate usage requirements for INTERFACE_INCLUDE_DIRECTORIES to point to the appropriate include directories and INTERFACE_COMPILE_FEATURES for the necessary C++11 flags.

    External

    To use this library from a CMake project, you can locate it directly with find_package() and use the namespaced imported target from the generated package configuration:

    Example

    CMakeLists.txt
    cmake_minimum_required(VERSION 3.5)
     project(ExampleProject LANGUAGES CXX)
     
     find_package(nlohmann_json 3.11.3 REQUIRED)
     
     add_executable(example example.cpp)
     target_link_libraries(example PRIVATE nlohmann_json::nlohmann_json)
    -

    The package configuration file, nlohmann_jsonConfig.cmake, can be used either from an install tree or directly out of the build tree.

    Embedded

    To embed the library directly into an existing CMake project, place the entire source tree in a subdirectory and call add_subdirectory() in your CMakeLists.txt file.

    Example

    CMakeLists.txt
    cmake_minimum_required(VERSION 3.1)
    +

    The package configuration file, nlohmann_jsonConfig.cmake, can be used either from an install tree or directly out of the build tree.

    Embedded

    To embed the library directly into an existing CMake project, place the entire source tree in a subdirectory and call add_subdirectory() in your CMakeLists.txt file.

    Example

    CMakeLists.txt
    cmake_minimum_required(VERSION 3.5)
     project(ExampleProject LANGUAGES CXX)
     
     # If you only include this third party in PRIVATE source files, you do not need to install it
    @@ -46,4 +46,4 @@
         GIT_REPOSITORY https://github.com/nlohmann/json
         GIT_TAG v3.11.3
     )
    -

    However, the repository https://github.com/nlohmann/json download size is quite large.

    CMake Options

    JSON_BuildTests

    Build the unit tests when BUILD_TESTING is enabled. This option is ON by default if the library's CMake project is the top project. That is, when integrating the library as described above, the test suite is not built unless explicitly switched on with this option.

    JSON_CI

    Enable CI build targets. The exact targets are used during the several CI steps and are subject to change without notice. This option is OFF by default.

    JSON_Diagnostics

    Enable extended diagnostic messages by defining macro JSON_DIAGNOSTICS. This option is OFF by default.

    JSON_Diagnostic_Positions

    Enable position diagnostics by defining macro JSON_DIAGNOSTIC_POSITIONS. This option is OFF by default.

    JSON_DisableEnumSerialization

    Disable default enum serialization by defining the macro JSON_DISABLE_ENUM_SERIALIZATION. This option is OFF by default.

    JSON_FastTests

    Skip expensive/slow test suites. This option is OFF by default. Depends on JSON_BuildTests.

    JSON_GlobalUDLs

    Place user-defined string literals in the global namespace by defining the macro JSON_USE_GLOBAL_UDLS. This option is OFF by default.

    JSON_ImplicitConversions

    Enable implicit conversions by defining macro JSON_USE_IMPLICIT_CONVERSIONS. This option is ON by default.

    JSON_Install

    Install CMake targets during install step. This option is ON by default if the library's CMake project is the top project.

    JSON_LegacyDiscardedValueComparison

    Enable the (incorrect) legacy comparison behavior of discarded JSON values by defining macro JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON. This option is OFF by default.

    JSON_MultipleHeaders

    Use non-amalgamated version of the library. This option is OFF by default.

    JSON_SystemInclude

    Treat the library headers like system headers (i.e., adding SYSTEM to the target_include_directories call) to checks for this library by tools like Clang-Tidy. This option is OFF by default.

    JSON_Valgrind

    Execute test suite with Valgrind. This option is OFF by default. Depends on JSON_BuildTests.

    \ No newline at end of file +

    However, the repository https://github.com/nlohmann/json download size is quite large.

    CMake Options

    JSON_BuildTests

    Build the unit tests when BUILD_TESTING is enabled. This option is ON by default if the library's CMake project is the top project. That is, when integrating the library as described above, the test suite is not built unless explicitly switched on with this option.

    JSON_CI

    Enable CI build targets. The exact targets are used during the several CI steps and are subject to change without notice. This option is OFF by default.

    JSON_Diagnostics

    Enable extended diagnostic messages by defining macro JSON_DIAGNOSTICS. This option is OFF by default.

    JSON_Diagnostic_Positions

    Enable position diagnostics by defining macro JSON_DIAGNOSTIC_POSITIONS. This option is OFF by default.

    JSON_DisableEnumSerialization

    Disable default enum serialization by defining the macro JSON_DISABLE_ENUM_SERIALIZATION. This option is OFF by default.

    JSON_FastTests

    Skip expensive/slow test suites. This option is OFF by default. Depends on JSON_BuildTests.

    JSON_GlobalUDLs

    Place user-defined string literals in the global namespace by defining the macro JSON_USE_GLOBAL_UDLS. This option is OFF by default.

    JSON_ImplicitConversions

    Enable implicit conversions by defining macro JSON_USE_IMPLICIT_CONVERSIONS. This option is ON by default.

    JSON_Install

    Install CMake targets during install step. This option is ON by default if the library's CMake project is the top project.

    JSON_LegacyDiscardedValueComparison

    Enable the (incorrect) legacy comparison behavior of discarded JSON values by defining macro JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON. This option is OFF by default.

    JSON_MultipleHeaders

    Use non-amalgamated version of the library. This option is OFF by default.

    JSON_SystemInclude

    Treat the library headers like system headers (i.e., adding SYSTEM to the target_include_directories call) to checks for this library by tools like Clang-Tidy. This option is OFF by default.

    JSON_Valgrind

    Execute test suite with Valgrind. This option is OFF by default. Depends on JSON_BuildTests.

    \ No newline at end of file diff --git a/integration/index.html b/integration/index.html index b83b678c0..6f1d5aeaa 100644 --- a/integration/index.html +++ b/integration/index.html @@ -2,4 +2,4 @@ // for convenience using json = nlohmann::json; -

    to the files you want to process JSON and set the necessary switches to enable C++11 (e.g., -std=c++11 for GCC and Clang).

    You can further use file single_include/nlohmann/json_fwd.hpp for forward declarations.

    \ No newline at end of file +

    to the files you want to process JSON and set the necessary switches to enable C++11 (e.g., -std=c++11 for GCC and Clang).

    You can further use file single_include/nlohmann/json_fwd.hpp for forward declarations.

    \ No newline at end of file diff --git a/integration/migration_guide/index.html b/integration/migration_guide/index.html index 7a4bbdf10..022c3d683 100644 --- a/integration/migration_guide/index.html +++ b/integration/migration_guide/index.html @@ -54,4 +54,4 @@ { j["age"] = p.age; } -

    Do not use the details namespace

    The details namespace is not part of the public API of the library and can change in any version without announcement. Do not rely on any function or type in the details namespace.

    \ No newline at end of file +

    Do not use the details namespace

    The details namespace is not part of the public API of the library and can change in any version without announcement. Do not rely on any function or type in the details namespace.

    \ No newline at end of file diff --git a/integration/package_managers/index.html b/integration/package_managers/index.html index ffecd08cf..9d69c7a7d 100644 --- a/integration/package_managers/index.html +++ b/integration/package_managers/index.html @@ -330,4 +330,4 @@ cmake --build build set_languages("cxx11")
  • Build

    xmake
     
  • Run

    xmake run
    -

  • Other package managers

    The library is also contained in many other package repositories: Packaging status

    Package version overview

    Packaging status


    Buckaroo

    If you are using Buckaroo, you can install this library's module with buckaroo add github.com/buckaroo-pm/nlohmann-json. There is a demo repo here.

    Warning

    The module is outdated as the respective repository has not been updated in years.

    CocoaPods

    If you are using CocoaPods, you can use the library by adding pod "nlohmann_json", '~>3.1.2' to your podfile (see an example). Please file issues here.

    Warning

    The module is outdated as the respective pod has not been updated in years.

    \ No newline at end of file +

    Other package managers

    The library is also contained in many other package repositories: Packaging status

    Package version overview

    Packaging status


    Buckaroo

    If you are using Buckaroo, you can install this library's module with buckaroo add github.com/buckaroo-pm/nlohmann-json. There is a demo repo here.

    Warning

    The module is outdated as the respective repository has not been updated in years.

    CocoaPods

    If you are using CocoaPods, you can use the library by adding pod "nlohmann_json", '~>3.1.2' to your podfile (see an example). Please file issues here.

    Warning

    The module is outdated as the respective pod has not been updated in years.

    \ No newline at end of file diff --git a/integration/pkg-config/index.html b/integration/pkg-config/index.html index 2fd1ac4ea..ef5af2413 100644 --- a/integration/pkg-config/index.html +++ b/integration/pkg-config/index.html @@ -1,3 +1,3 @@ Pkg-config - JSON for Modern C++

    Pkg-config

    If you are using bare Makefiles, you can use pkg-config to generate the include flags that point to where the library is installed:

    pkg-config nlohmann_json --cflags
     

    Users of the Meson build system will also be able to use a system-wide library, which will be found by pkg-config:

    json = dependency('nlohmann_json', required: true)
    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/search/search_index.json b/search/search_index.json index 232036ea4..e5a62fd78 100644 --- a/search/search_index.json +++ b/search/search_index.json @@ -1 +1 @@ -{"config":{"lang":["en"],"separator":"[\\s\\-\\.]","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"JSON for Modern C++","text":""},{"location":"api/json/","title":"nlohmann::json","text":"
    using json = basic_json<>;\n

    This type is the default specialization of the basic_json class which uses the standard template types.

    "},{"location":"api/json/#examples","title":"Examples","text":"Example

    The example below demonstrates how to use the type nlohmann::json.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object\n    json j =\n    {\n        {\"pi\", 3.141},\n        {\"happy\", true},\n        {\"name\", \"Niels\"},\n        {\"nothing\", nullptr},\n        {\n            \"answer\", {\n                {\"everything\", 42}\n            }\n        },\n        {\"list\", {1, 0, 2}},\n        {\n            \"object\", {\n                {\"currency\", \"USD\"},\n                {\"value\", 42.99}\n            }\n        }\n    };\n\n    // add new values\n    j[\"new\"][\"key\"][\"value\"] = {\"another\", \"list\"};\n\n    // count elements\n    auto s = j.size();\n    j[\"size\"] = s;\n\n    // pretty print with indent of 4 spaces\n    std::cout << std::setw(4) << j << '\\n';\n}\n

    Output:

    {\n    \"answer\": {\n        \"everything\": 42\n    },\n    \"happy\": true,\n    \"list\": [\n        1,\n        0,\n        2\n    ],\n    \"name\": \"Niels\",\n    \"new\": {\n        \"key\": {\n            \"value\": [\n                \"another\",\n                \"list\"\n            ]\n        }\n    },\n    \"nothing\": null,\n    \"object\": {\n        \"currency\": \"USD\",\n        \"value\": 42.99\n    },\n    \"pi\": 3.141,\n    \"size\": 8\n}\n
    "},{"location":"api/json/#version-history","title":"Version history","text":"

    Since version 1.0.0.

    "},{"location":"api/operator_gtgt/","title":"nlohmann::operator>>(basic_json)","text":"
    std::istream& operator>>(std::istream& i, basic_json& j);\n

    Deserializes an input stream to a JSON value.

    "},{"location":"api/operator_gtgt/#parameters","title":"Parameters","text":"i (in, out) input stream to read a serialized JSON value from j (in, out) JSON value to write the deserialized input to"},{"location":"api/operator_gtgt/#return-value","title":"Return value","text":"

    the stream i

    "},{"location":"api/operator_gtgt/#exceptions","title":"Exceptions","text":"
    • Throws parse_error.101 in case of an unexpected token.
    • Throws parse_error.102 if to_unicode fails or surrogate error.
    • Throws parse_error.103 if to_unicode fails.
    "},{"location":"api/operator_gtgt/#complexity","title":"Complexity","text":"

    Linear in the length of the input. The parser is a predictive LL(1) parser.

    "},{"location":"api/operator_gtgt/#notes","title":"Notes","text":"

    A UTF-8 byte order mark is silently ignored.

    Deprecation

    This function replaces function std::istream& operator<<(basic_json& j, std::istream& i) which has been deprecated in version 3.0.0. It will be removed in version 4.0.0. Please replace calls like j << i; with i >> j;.

    "},{"location":"api/operator_gtgt/#examples","title":"Examples","text":"Example

    The example below shows how a JSON value is constructed by reading a serialization from a stream.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create stream with serialized JSON\n    std::stringstream ss;\n    ss << R\"({\n        \"number\": 23,\n        \"string\": \"Hello, world!\",\n        \"array\": [1, 2, 3, 4, 5],\n        \"boolean\": false,\n        \"null\": null\n    })\";\n\n    // create JSON value and read the serialization from the stream\n    json j;\n    ss >> j;\n\n    // serialize JSON\n    std::cout << std::setw(2) << j << '\\n';\n}\n

    Output:

    {\n  \"array\": [\n    1,\n    2,\n    3,\n    4,\n    5\n  ],\n  \"boolean\": false,\n  \"null\": null,\n  \"number\": 23,\n  \"string\": \"Hello, world!\"\n}\n
    "},{"location":"api/operator_gtgt/#see-also","title":"See also","text":"
    • accept - check if the input is valid JSON
    • parse - deserialize from a compatible input
    "},{"location":"api/operator_gtgt/#version-history","title":"Version history","text":"
    • Added in version 1.0.0. Deprecated in version 3.0.0.
    "},{"location":"api/operator_literal_json/","title":"nlohmann::operator\"\"_json","text":"
    json operator \"\"_json(const char* s, std::size_t n);\n

    This operator implements a user-defined string literal for JSON objects. It can be used by adding _json to a string literal and returns a json object if no parse error occurred.

    It is recommended to bring the operator into scope using any of the following lines:

    using nlohmann::literals::operator \"\"_json;\nusing namespace nlohmann::literals;\nusing namespace nlohmann::json_literals;\nusing namespace nlohmann::literals::json_literals;\nusing namespace nlohmann;\n

    This is suggested to ease migration to the next major version release of the library. See JSON_USE_GLOBAL_UDLS for details.

    "},{"location":"api/operator_literal_json/#parameters","title":"Parameters","text":"s (in) a string representation of a JSON object n (in) length of string s"},{"location":"api/operator_literal_json/#return-value","title":"Return value","text":"

    json value parsed from s

    "},{"location":"api/operator_literal_json/#exceptions","title":"Exceptions","text":"

    The function can throw anything that parse(s, s+n) would throw.

    "},{"location":"api/operator_literal_json/#complexity","title":"Complexity","text":"

    Linear.

    "},{"location":"api/operator_literal_json/#examples","title":"Examples","text":"Example

    The following code shows how to create JSON values from string literals.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    json j = R\"( {\"hello\": \"world\", \"answer\": 42} )\"_json;\n\n    std::cout << std::setw(2) << j << '\\n';\n}\n

    Output:

    {\n  \"answer\": 42,\n  \"hello\": \"world\"\n}\n
    "},{"location":"api/operator_literal_json/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Moved to namespace nlohmann::literals::json_literals in 3.11.0.
    "},{"location":"api/operator_literal_json_pointer/","title":"nlohmann::operator\"\"_json_pointer","text":"
    json_pointer operator \"\"_json_pointer(const char* s, std::size_t n);\n

    This operator implements a user-defined string literal for JSON Pointers. It can be used by adding _json_pointer to a string literal and returns a json_pointer object if no parse error occurred.

    It is recommended to bring the operator into scope using any of the following lines:

    using nlohmann::literals::operator \"\"_json_pointer;\nusing namespace nlohmann::literals;\nusing namespace nlohmann::json_literals;\nusing namespace nlohmann::literals::json_literals;\nusing namespace nlohmann;\n
    This is suggested to ease migration to the next major version release of the library. See JSON_USE_GLOBAL_UDLS for details.

    "},{"location":"api/operator_literal_json_pointer/#parameters","title":"Parameters","text":"s (in) a string representation of a JSON Pointer n (in) length of string s"},{"location":"api/operator_literal_json_pointer/#return-value","title":"Return value","text":"

    json_pointer value parsed from s

    "},{"location":"api/operator_literal_json_pointer/#exceptions","title":"Exceptions","text":"

    The function can throw anything that json_pointer::json_pointer would throw.

    "},{"location":"api/operator_literal_json_pointer/#complexity","title":"Complexity","text":"

    Linear.

    "},{"location":"api/operator_literal_json_pointer/#examples","title":"Examples","text":"Example

    The following code shows how to create JSON Pointers from string literals.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    json j = R\"( {\"hello\": \"world\", \"answer\": 42} )\"_json;\n    auto val = j[\"/hello\"_json_pointer];\n\n    std::cout << std::setw(2) << val << '\\n';\n}\n

    Output:

    \"world\"\n
    "},{"location":"api/operator_literal_json_pointer/#see-also","title":"See also","text":"
    • json_pointer - type to represent JSON Pointers
    "},{"location":"api/operator_literal_json_pointer/#version-history","title":"Version history","text":"
    • Added in version 2.0.0.
    • Moved to namespace nlohmann::literals::json_literals in 3.11.0.
    "},{"location":"api/operator_ltlt/","title":"nlohmann::operator<<(basic_json), nlohmann::operator<<(json_pointer)","text":"
    std::ostream& operator<<(std::ostream& o, const basic_json& j);      // (1)\n\nstd::ostream& operator<<(std::ostream& o, const json_pointer& ptr);  // (2)\n
    1. Serialize the given JSON value j to the output stream o. The JSON value will be serialized using the dump member function.
      • The indentation of the output can be controlled with the member variable width of the output stream o. For instance, using the manipulator std::setw(4) on o sets the indentation level to 4 and the serialization result is the same as calling dump(4).
      • The indentation character can be controlled with the member variable fill of the output stream o. For instance, the manipulator std::setfill('\\\\t') sets indentation to use a tab character rather than the default space character.
    2. Write a string representation of the given JSON pointer ptr to the output stream o. The string representation is obtained using the to_string member function.
    "},{"location":"api/operator_ltlt/#parameters","title":"Parameters","text":"o (in, out) stream to write to j (in) JSON value to serialize ptr (in) JSON pointer to write"},{"location":"api/operator_ltlt/#return-value","title":"Return value","text":"

    the stream o

    "},{"location":"api/operator_ltlt/#exceptions","title":"Exceptions","text":"
    1. Throws type_error.316 if a string stored inside the JSON value is not UTF-8 encoded. Note that unlike the dump member functions, no error_handler can be set.
    2. None.
    "},{"location":"api/operator_ltlt/#complexity","title":"Complexity","text":"

    Linear.

    "},{"location":"api/operator_ltlt/#notes","title":"Notes","text":"

    Deprecation

    Function std::ostream& operator<<(std::ostream& o, const basic_json& j) replaces function std::ostream& operator>>(const basic_json& j, std::ostream& o) which has been deprecated in version 3.0.0. It will be removed in version 4.0.0. Please replace calls like j >> o; with o << j;.

    "},{"location":"api/operator_ltlt/#examples","title":"Examples","text":"Example: (1) serialize JSON value to stream

    The example below shows the serialization with different parameters to width to adjust the indentation level.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n\n    // serialize without indentation\n    std::cout << j_object << \"\\n\\n\";\n    std::cout << j_array << \"\\n\\n\";\n\n    // serialize with indentation\n    std::cout << std::setw(4) << j_object << \"\\n\\n\";\n    std::cout << std::setw(2) << j_array << \"\\n\\n\";\n    std::cout << std::setw(1) << std::setfill('\\t') << j_object << \"\\n\\n\";\n}\n

    Output:

    {\"one\":1,\"two\":2}\n\n[1,2,4,8,16]\n\n{\n    \"one\": 1,\n    \"two\": 2\n}\n\n[\n  1,\n  2,\n  4,\n  8,\n  16\n]\n\n{\n    \"one\": 1,\n    \"two\": 2\n}\n
    Example: (2) write JSON pointer to stream

    The example below shows how to write a JSON pointer to a stream.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON poiner\n    json::json_pointer ptr(\"/foo/bar/baz\");\n\n    // write string representation to stream\n    std::cout << ptr << std::endl;\n}\n

    Output:

    /foo/bar/baz\n
    "},{"location":"api/operator_ltlt/#version-history","title":"Version history","text":"
    1. Added in version 1.0.0. Added support for indentation character and deprecated std::ostream& operator>>(const basic_json& j, std::ostream& o) in version 3.0.0.
    2. Added in version 3.11.0.
    "},{"location":"api/ordered_json/","title":"nlohmann::ordered_json","text":"
    using ordered_json = basic_json<ordered_map>;\n

    This type preserves the insertion order of object keys.

    "},{"location":"api/ordered_json/#iterator-invalidation","title":"Iterator invalidation","text":"

    The type is based on ordered_map which in turn uses a std::vector to store object elements. Therefore, adding object elements can yield a reallocation in which case all iterators (including the end() iterator) and all references to the elements are invalidated. Also, any iterator or reference after the insertion point will point to the same index which is now a different value.

    "},{"location":"api/ordered_json/#examples","title":"Examples","text":"Example

    The example below demonstrates how ordered_json preserves the insertion order of object keys.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing ordered_json = nlohmann::ordered_json;\n\nint main()\n{\n    ordered_json j;\n    j[\"one\"] = 1;\n    j[\"two\"] = 2;\n    j[\"three\"] = 3;\n\n    std::cout << j.dump(2) << '\\n';\n}\n

    Output:

    {\n  \"one\": 1,\n  \"two\": 2,\n  \"three\": 3\n}\n
    "},{"location":"api/ordered_json/#see-also","title":"See also","text":"
    • ordered_map
    • Object Order
    "},{"location":"api/ordered_json/#version-history","title":"Version history","text":"

    Since version 3.9.0.

    "},{"location":"api/ordered_map/","title":"nlohmann::ordered_map","text":"
    template<class Key, class T, class IgnoredLess = std::less<Key>,\n         class Allocator = std::allocator<std::pair<const Key, T>>>\nstruct ordered_map : std::vector<std::pair<const Key, T>, Allocator>;\n

    A minimal map-like container that preserves insertion order for use within nlohmann::ordered_json (nlohmann::basic_json<ordered_map>).

    "},{"location":"api/ordered_map/#template-parameters","title":"Template parameters","text":"Key key type T mapped type IgnoredLess comparison function (ignored and only added to ensure compatibility with std::map) Allocator allocator type"},{"location":"api/ordered_map/#iterator-invalidation","title":"Iterator invalidation","text":"

    The type uses a std::vector to store object elements. Therefore, adding elements can yield a reallocation in which case all iterators (including the end() iterator) and all references to the elements are invalidated.

    "},{"location":"api/ordered_map/#member-types","title":"Member types","text":"
    • key_type - key type (Key)
    • mapped_type - mapped type (T)
    • Container - base container type (std::vector<std::pair<const Key, T>, Allocator>)
    • iterator
    • const_iterator
    • size_type
    • value_type
    • key_compare - key comparison function
      std::equal_to<Key>  // until C++14\n\nstd::equal_to<>     // since C++14\n
    "},{"location":"api/ordered_map/#member-functions","title":"Member functions","text":"
    • (constructor)
    • (destructor)
    • emplace
    • operator[]
    • at
    • erase
    • count
    • find
    • insert
    "},{"location":"api/ordered_map/#examples","title":"Examples","text":"Example

    The example shows the different behavior of std::map and nlohmann::ordered_map.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\n// simple output function\ntemplate<typename Map>\nvoid output(const char* prefix, const Map& m)\n{\n    std::cout << prefix << \" = { \";\n    for (auto& element : m)\n    {\n        std::cout << element.first << \":\" << element.second << ' ';\n    }\n    std::cout << \"}\" << std::endl;\n}\n\nint main()\n{\n    // create and fill two maps\n    nlohmann::ordered_map<std::string, std::string> m_ordered;\n    m_ordered[\"one\"] = \"eins\";\n    m_ordered[\"two\"] = \"zwei\";\n    m_ordered[\"three\"] = \"drei\";\n\n    std::map<std::string, std::string> m_std;\n    m_std[\"one\"] = \"eins\";\n    m_std[\"two\"] = \"zwei\";\n    m_std[\"three\"] = \"drei\";\n\n    // output: m_ordered is ordered by insertion order, m_std is ordered by key\n    output(\"m_ordered\", m_ordered);\n    output(\"m_std\", m_std);\n\n    // erase and re-add \"one\" key\n    m_ordered.erase(\"one\");\n    m_ordered[\"one\"] = \"eins\";\n\n    m_std.erase(\"one\");\n    m_std[\"one\"] = \"eins\";\n\n    // output: m_ordered shows newly added key at the end; m_std is again ordered by key\n    output(\"m_ordered\", m_ordered);\n    output(\"m_std\", m_std);\n}\n

    Output:

    m_ordered = { one:eins two:zwei three:drei }\nm_std = { one:eins three:drei two:zwei }\nm_ordered = { two:zwei three:drei one:eins }\nm_std = { one:eins three:drei two:zwei }\n
    "},{"location":"api/ordered_map/#see-also","title":"See also","text":"
    • ordered_json
    "},{"location":"api/ordered_map/#version-history","title":"Version history","text":"
    • Added in version 3.9.0 to implement nlohmann::ordered_json.
    • Added key_compare member in version 3.11.0.
    "},{"location":"api/adl_serializer/","title":"nlohmann::adl_serializer","text":"
    template<typename, typename>\nstruct adl_serializer;\n

    Serializer that uses ADL (Argument-Dependent Lookup) to choose to_json/from_json functions from the types' namespaces.

    It is implemented similar to

    template<typename ValueType>\nstruct adl_serializer {\n    template<typename BasicJsonType>\n    static void to_json(BasicJsonType& j, const T& value) {\n        // calls the \"to_json\" method in T's namespace\n    }\n\n    template<typename BasicJsonType>\n    static void from_json(const BasicJsonType& j, T& value) {\n        // same thing, but with the \"from_json\" method\n    }\n};\n
    "},{"location":"api/adl_serializer/#member-functions","title":"Member functions","text":"
    • from_json - convert a JSON value to any value type
    • to_json - convert any value type to a JSON value
    "},{"location":"api/adl_serializer/#version-history","title":"Version history","text":"
    • Added in version 2.1.0.
    "},{"location":"api/adl_serializer/from_json/","title":"nlohmann::adl_serializer::from_json","text":"
    // (1)\ntemplate<typename BasicJsonType, typename TargetType = ValueType>\nstatic auto from_json(BasicJsonType && j, TargetType& val) noexcept(\n    noexcept(::nlohmann::from_json(std::forward<BasicJsonType>(j), val)))\n-> decltype(::nlohmann::from_json(std::forward<BasicJsonType>(j), val), void())\n\n// (2)\ntemplate<typename BasicJsonType, typename TargetType = ValueType>\nstatic auto from_json(BasicJsonType && j) noexcept(\nnoexcept(::nlohmann::from_json(std::forward<BasicJsonType>(j), detail::identity_tag<TargetType> {})))\n-> decltype(::nlohmann::from_json(std::forward<BasicJsonType>(j), detail::identity_tag<TargetType> {}))\n

    This function is usually called by the get() function of the basic_json class (either explicitly or via the conversion operators).

    1. This function is chosen for default-constructible value types.
    2. This function is chosen for value types which are not default-constructible.
    "},{"location":"api/adl_serializer/from_json/#parameters","title":"Parameters","text":"j (in) JSON value to read from val (out) value to write to"},{"location":"api/adl_serializer/from_json/#return-value","title":"Return value","text":"

    Copy of the JSON value, converted to ValueType

    "},{"location":"api/adl_serializer/from_json/#examples","title":"Examples","text":"Example: (1) Default-constructible type

    The example below shows how a from_json function can be implemented for a user-defined type. This function is called by the adl_serializer when template get<ns::person>() is called.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nnamespace ns\n{\n// a simple struct to model a person\nstruct person\n{\n    std::string name;\n    std::string address;\n    int age;\n};\n} // namespace ns\n\nnamespace ns\n{\nvoid from_json(const json& j, person& p)\n{\n    j.at(\"name\").get_to(p.name);\n    j.at(\"address\").get_to(p.address);\n    j.at(\"age\").get_to(p.age);\n}\n} // namespace ns\n\nint main()\n{\n    json j;\n    j[\"name\"] = \"Ned Flanders\";\n    j[\"address\"] = \"744 Evergreen Terrace\";\n    j[\"age\"] = 60;\n\n    auto p = j.template get<ns::person>();\n\n    std::cout << p.name << \" (\" << p.age << \") lives in \" << p.address << std::endl;\n}\n

    Output:

    Ned Flanders (60) lives in 744 Evergreen Terrace\n
    Example: (2) Non-default-constructible type

    The example below shows how a from_json is implemented as part of a specialization of the adl_serializer to realize the conversion of a non-default-constructible type.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nnamespace ns\n{\n// a simple struct to model a person (not default constructible)\nstruct person\n{\n    person(std::string n, std::string a, int aa)\n        : name(std::move(n)), address(std::move(a)), age(aa)\n    {}\n\n    std::string name;\n    std::string address;\n    int age;\n};\n} // namespace ns\n\nnamespace nlohmann\n{\ntemplate <>\nstruct adl_serializer<ns::person>\n{\n    static ns::person from_json(const json& j)\n    {\n        return {j.at(\"name\"), j.at(\"address\"), j.at(\"age\")};\n    }\n\n    // Here's the catch! You must provide a to_json method! Otherwise, you\n    // will not be able to convert person to json, since you fully\n    // specialized adl_serializer on that type\n    static void to_json(json& j, ns::person p)\n    {\n        j[\"name\"] = p.name;\n        j[\"address\"] = p.address;\n        j[\"age\"] = p.age;\n    }\n};\n} // namespace nlohmann\n\nint main()\n{\n    json j;\n    j[\"name\"] = \"Ned Flanders\";\n    j[\"address\"] = \"744 Evergreen Terrace\";\n    j[\"age\"] = 60;\n\n    auto p = j.template get<ns::person>();\n\n    std::cout << p.name << \" (\" << p.age << \") lives in \" << p.address << std::endl;\n}\n

    Output:

    Ned Flanders (60) lives in 744 Evergreen Terrace\n
    "},{"location":"api/adl_serializer/from_json/#see-also","title":"See also","text":"
    • to_json
    "},{"location":"api/adl_serializer/from_json/#version-history","title":"Version history","text":"
    • Added in version 2.1.0.
    "},{"location":"api/adl_serializer/to_json/","title":"nlohmann::adl_serializer::to_json","text":"
    template<typename BasicJsonType, typename TargetType = ValueType>\nstatic auto to_json(BasicJsonType& j, TargetType && val) noexcept(\n    noexcept(::nlohmann::to_json(j, std::forward<TargetType>(val))))\n-> decltype(::nlohmann::to_json(j, std::forward<TargetType>(val)), void())\n

    This function is usually called by the constructors of the basic_json class.

    "},{"location":"api/adl_serializer/to_json/#parameters","title":"Parameters","text":"j (out) JSON value to write to val (in) value to read from"},{"location":"api/adl_serializer/to_json/#examples","title":"Examples","text":"Example

    The example below shows how a to_json function can be implemented for a user-defined type. This function is called by the adl_serializer when the constructor basic_json(ns::person) is called.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nnamespace ns\n{\n// a simple struct to model a person\nstruct person\n{\n    std::string name;\n    std::string address;\n    int age;\n};\n} // namespace ns\n\nnamespace ns\n{\nvoid to_json(json& j, const person& p)\n{\n    j = json{ {\"name\", p.name}, {\"address\", p.address}, {\"age\", p.age} };\n}\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    json j = p;\n\n    std::cout << j << std::endl;\n}\n

    Output:

    {\"address\":\"744 Evergreen Terrace\",\"age\":60,\"name\":\"Ned Flanders\"}\n
    "},{"location":"api/adl_serializer/to_json/#see-also","title":"See also","text":"
    • from_json
    "},{"location":"api/adl_serializer/to_json/#version-history","title":"Version history","text":"
    • Added in version 2.1.0.
    "},{"location":"api/basic_json/","title":"nlohmann::basic_json","text":"

    Defined in header <nlohmann/json.hpp>

    template<\n    template<typename U, typename V, typename... Args> class ObjectType = std::map,\n    template<typename U, typename... Args> class ArrayType = std::vector,\n    class StringType = std::string,\n    class BooleanType = bool,\n    class NumberIntegerType = std::int64_t,\n    class NumberUnsignedType = std::uint64_t,\n    class NumberFloatType = double,\n    template<typename U> class AllocatorType = std::allocator,\n    template<typename T, typename SFINAE = void> class JSONSerializer = adl_serializer,\n    class BinaryType = std::vector<std::uint8_t>,\n    class CustomBaseClass = void\n>\nclass basic_json;\n
    "},{"location":"api/basic_json/#template-parameters","title":"Template parameters","text":"Template parameter Description Derived type ObjectType type for JSON objects object_t ArrayType type for JSON arrays array_t StringType type for JSON strings and object keys string_t BooleanType type for JSON booleans boolean_t NumberIntegerType type for JSON integer numbers number_integer_t NumberUnsignedType type for JSON unsigned integer numbers number_unsigned_t NumberFloatType type for JSON floating-point numbers number_float_t AllocatorType type of the allocator to use JSONSerializer the serializer to resolve internal calls to to_json() and from_json() json_serializer BinaryType type for binary arrays binary_t CustomBaseClass extension point for user code json_base_class_t"},{"location":"api/basic_json/#specializations","title":"Specializations","text":"
    • json - default specialization
    • ordered_json - specialization that maintains the insertion order of object keys
    "},{"location":"api/basic_json/#iterator-invalidation","title":"Iterator invalidation","text":"

    All operations that add values to an array (push_back , operator+=, emplace_back, insert, and operator[] for a non-existing index) can yield a reallocation, in which case all iterators (including the end() iterator) and all references to the elements are invalidated.

    For ordered_json, also all operations that add a value to an object (push_back, operator+=, emplace, insert, update, and operator[] for a non-existing key) can yield a reallocation, in which case all iterators (including the end() iterator) and all references to the elements are invalidated.

    "},{"location":"api/basic_json/#requirements","title":"Requirements","text":"

    The class satisfies the following concept requirements:

    "},{"location":"api/basic_json/#basic","title":"Basic","text":"
    • DefaultConstructible: JSON values can be default constructed. The result will be a JSON null value.
    • MoveConstructible: A JSON value can be constructed from an rvalue argument.
    • CopyConstructible: A JSON value can be copy-constructed from an lvalue expression.
    • MoveAssignable: A JSON value can be assigned from an rvalue argument.
    • CopyAssignable: A JSON value can be copy-assigned from an lvalue expression.
    • Destructible: JSON values can be destructed.
    "},{"location":"api/basic_json/#layout","title":"Layout","text":"
    • StandardLayoutType: JSON values have standard layout: All non-static data members are private and standard layout types, the class has no virtual functions or (virtual) base classes.
    "},{"location":"api/basic_json/#library-wide","title":"Library-wide","text":"
    • EqualityComparable: JSON values can be compared with ==, see operator==.
    • LessThanComparable: JSON values can be compared with <, see operator<.
    • Swappable: Any JSON lvalue or rvalue of can be swapped with any lvalue or rvalue of other compatible types, using unqualified function swap.
    • NullablePointer: JSON values can be compared against std::nullptr_t objects which are used to model the null value.
    "},{"location":"api/basic_json/#container","title":"Container","text":"
    • Container: JSON values can be used like STL containers and provide iterator access.
    • ReversibleContainer: JSON values can be used like STL containers and provide reverse iterator access.
    "},{"location":"api/basic_json/#member-types","title":"Member types","text":"
    • adl_serializer - the default serializer
    • value_t - the JSON type enumeration
    • json_pointer - JSON Pointer implementation
    • json_serializer - type of the serializer to for conversions from/to JSON
    • error_handler_t - type to choose behavior on decoding errors
    • cbor_tag_handler_t - type to choose how to handle CBOR tags
    • initializer_list_t - type for initializer lists of basic_json values
    • input_format_t - type to choose the format to parse
    • json_sax_t - type for SAX events
    "},{"location":"api/basic_json/#exceptions","title":"Exceptions","text":"
    • exception - general exception of the basic_json class
      • parse_error - exception indicating a parse error
      • invalid_iterator - exception indicating errors with iterators
      • type_error - exception indicating executing a member function with a wrong type
      • out_of_range - exception indicating access out of the defined range
      • other_error - exception indicating other library errors
    "},{"location":"api/basic_json/#container-types","title":"Container types","text":"Type Definition value_type basic_json reference value_type& const_reference const value_type& difference_type std::ptrdiff_t size_type std::size_t allocator_type AllocatorType<basic_json> pointer std::allocator_traits<allocator_type>::pointer const_pointer std::allocator_traits<allocator_type>::const_pointer iterator LegacyBidirectionalIterator const_iterator constant LegacyBidirectionalIterator reverse_iterator reverse iterator, derived from iterator const_reverse_iterator reverse iterator, derived from const_iterator iteration_proxy helper type for items function"},{"location":"api/basic_json/#json-value-data-types","title":"JSON value data types","text":"
    • array_t - type for arrays
    • binary_t - type for binary arrays
    • boolean_t - type for booleans
    • default_object_comparator_t - default comparator for objects
    • number_float_t - type for numbers (floating-point)
    • number_integer_t - type for numbers (integer)
    • number_unsigned_t - type for numbers (unsigned)
    • object_comparator_t - comparator for objects
    • object_t - type for objects
    • string_t - type for strings
    "},{"location":"api/basic_json/#parser-callback","title":"Parser callback","text":"
    • parse_event_t - parser event types
    • parser_callback_t - per-element parser callback type
    "},{"location":"api/basic_json/#member-functions","title":"Member functions","text":"
    • (constructor)
    • (destructor)
    • operator= - copy assignment
    • array (static) - explicitly create an array
    • binary (static) - explicitly create a binary array
    • object (static) - explicitly create an object
    "},{"location":"api/basic_json/#object-inspection","title":"Object inspection","text":"

    Functions to inspect the type of a JSON value.

    • type - return the type of the JSON value
    • operator value_t - return the type of the JSON value
    • type_name - return the type as string
    • is_primitive - return whether type is primitive
    • is_structured - return whether type is structured
    • is_null - return whether value is null
    • is_boolean - return whether value is a boolean
    • is_number - return whether value is a number
    • is_number_integer - return whether value is an integer number
    • is_number_unsigned - return whether value is an unsigned integer number
    • is_number_float - return whether value is a floating-point number
    • is_object - return whether value is an object
    • is_array - return whether value is an array
    • is_string - return whether value is a string
    • is_binary - return whether value is a binary array
    • is_discarded - return whether value is discarded

    Optional functions to access the diagnostic positions.

    • start_pos - return the start position of the value
    • end_pos - return the one past the end position of the value
    "},{"location":"api/basic_json/#value-access","title":"Value access","text":"

    Direct access to the stored value of a JSON value.

    • get - get a value
    • get_to - get a value and write it to a destination
    • get_ptr - get a pointer value
    • get_ref - get a reference value
    • operator ValueType - get a value
    • get_binary - get a binary value
    "},{"location":"api/basic_json/#element-access","title":"Element access","text":"

    Access to the JSON value

    • at - access specified element with bounds checking
    • operator[] - access specified element
    • value - access specified object element with default value
    • front - access the first element
    • back - access the last element
    "},{"location":"api/basic_json/#lookup","title":"Lookup","text":"
    • find - find an element in a JSON object
    • count - returns the number of occurrences of a key in a JSON object
    • contains - check the existence of an element in a JSON object
    "},{"location":"api/basic_json/#iterators","title":"Iterators","text":"
    • begin - returns an iterator to the first element
    • cbegin - returns a const iterator to the first element
    • end - returns an iterator to one past the last element
    • cend - returns a const iterator to one past the last element
    • rbegin - returns an iterator to the reverse-beginning
    • rend - returns an iterator to the reverse-end
    • crbegin - returns a const iterator to the reverse-beginning
    • crend - returns a const iterator to the reverse-end
    • items - wrapper to access iterator member functions in range-based for
    "},{"location":"api/basic_json/#capacity","title":"Capacity","text":"
    • empty - checks whether the container is empty
    • size - returns the number of elements
    • max_size - returns the maximum possible number of elements
    "},{"location":"api/basic_json/#modifiers","title":"Modifiers","text":"
    • clear - clears the contents
    • push_back - add a value to an array/object
    • operator+= - add a value to an array/object
    • emplace_back - add a value to an array
    • emplace - add a value to an object if key does not exist
    • erase - remove elements
    • insert - inserts elements
    • update - updates a JSON object from another object, overwriting existing keys
    • swap - exchanges the values
    "},{"location":"api/basic_json/#lexicographical-comparison-operators","title":"Lexicographical comparison operators","text":"
    • operator== - comparison: equal
    • operator!= - comparison: not equal
    • operator< - comparison: less than
    • operator> - comparison: greater than
    • operator<= - comparison: less than or equal
    • operator>= - comparison: greater than or equal
    • operator<=> - comparison: 3-way
    "},{"location":"api/basic_json/#serialization-dumping","title":"Serialization / Dumping","text":"
    • dump - serialization
    "},{"location":"api/basic_json/#deserialization-parsing","title":"Deserialization / Parsing","text":"
    • parse (static) - deserialize from a compatible input
    • accept (static) - check if the input is valid JSON
    • sax_parse (static) - generate SAX events
    "},{"location":"api/basic_json/#json-pointer-functions","title":"JSON Pointer functions","text":"
    • flatten - return flattened JSON value
    • unflatten - unflatten a previously flattened JSON value
    "},{"location":"api/basic_json/#json-patch-functions","title":"JSON Patch functions","text":"
    • patch - applies a JSON patch
    • patch_inplace - applies a JSON patch in place
    • diff (static) - creates a diff as a JSON patch
    "},{"location":"api/basic_json/#json-merge-patch-functions","title":"JSON Merge Patch functions","text":"
    • merge_patch - applies a JSON Merge Patch
    "},{"location":"api/basic_json/#static-functions","title":"Static functions","text":"
    • meta - returns version information on the library
    • get_allocator - returns the allocator associated with the container
    "},{"location":"api/basic_json/#binary-formats","title":"Binary formats","text":"
    • from_bjdata (static) - create a JSON value from an input in BJData format
    • from_bson (static) - create a JSON value from an input in BSON format
    • from_cbor (static) - create a JSON value from an input in CBOR format
    • from_msgpack (static) - create a JSON value from an input in MessagePack format
    • from_ubjson (static) - create a JSON value from an input in UBJSON format
    • to_bjdata (static) - create a BJData serialization of a given JSON value
    • to_bson (static) - create a BSON serialization of a given JSON value
    • to_cbor (static) - create a CBOR serialization of a given JSON value
    • to_msgpack (static) - create a MessagePack serialization of a given JSON value
    • to_ubjson (static) - create a UBJSON serialization of a given JSON value
    "},{"location":"api/basic_json/#non-member-functions","title":"Non-member functions","text":"
    • operator<<(std::ostream&) - serialize to stream
    • operator>>(std::istream&) - deserialize from stream
    • to_string - user-defined to_string function for JSON values
    "},{"location":"api/basic_json/#literals","title":"Literals","text":"
    • operator\"\"_json - user-defined string literal for JSON values
    "},{"location":"api/basic_json/#helper-classes","title":"Helper classes","text":"
    • std::hash<basic_json> - return a hash value for a JSON object
    • std::swap<basic_json> - exchanges the values of two JSON objects
    "},{"location":"api/basic_json/#examples","title":"Examples","text":"Example

    The example shows how the library is used.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object\n    json j =\n    {\n        {\"pi\", 3.141},\n        {\"happy\", true},\n        {\"name\", \"Niels\"},\n        {\"nothing\", nullptr},\n        {\n            \"answer\", {\n                {\"everything\", 42}\n            }\n        },\n        {\"list\", {1, 0, 2}},\n        {\n            \"object\", {\n                {\"currency\", \"USD\"},\n                {\"value\", 42.99}\n            }\n        }\n    };\n\n    // add new values\n    j[\"new\"][\"key\"][\"value\"] = {\"another\", \"list\"};\n\n    // count elements\n    auto s = j.size();\n    j[\"size\"] = s;\n\n    // pretty print with indent of 4 spaces\n    std::cout << std::setw(4) << j << '\\n';\n}\n

    Output:

    {\n    \"answer\": {\n        \"everything\": 42\n    },\n    \"happy\": true,\n    \"list\": [\n        1,\n        0,\n        2\n    ],\n    \"name\": \"Niels\",\n    \"new\": {\n        \"key\": {\n            \"value\": [\n                \"another\",\n                \"list\"\n            ]\n        }\n    },\n    \"nothing\": null,\n    \"object\": {\n        \"currency\": \"USD\",\n        \"value\": 42.99\n    },\n    \"pi\": 3.141,\n    \"size\": 8\n}\n
    "},{"location":"api/basic_json/#see-also","title":"See also","text":"
    • RFC 8259: The JavaScript Object Notation (JSON) Data Interchange Format
    "},{"location":"api/basic_json/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/accept/","title":"nlohmann::basic_json::accept","text":"
    // (1)\ntemplate<typename InputType>\nstatic bool accept(InputType&& i,\n                   const bool ignore_comments = false);\n\n// (2)\ntemplate<typename IteratorType>\nstatic bool accept(IteratorType first, IteratorType last,\n                   const bool ignore_comments = false);\n

    Checks whether the input is valid JSON.

    1. Reads from a compatible input.
    2. Reads from a pair of character iterators

      The value_type of the iterator must be an integral type with size of 1, 2 or 4 bytes, which will be interpreted respectively as UTF-8, UTF-16 and UTF-32.

    Unlike the parse() function, this function neither throws an exception in case of invalid JSON input (i.e., a parse error) nor creates diagnostic information.

    "},{"location":"api/basic_json/accept/#template-parameters","title":"Template parameters","text":"InputType

    A compatible input, for instance:

    • an std::istream object
    • a FILE pointer (throws if null)
    • a C-style array of characters
    • a pointer to a null-terminated string of single byte characters (throws if null)
    • a std::string
    • an object obj for which begin(obj) and end(obj) produces a valid pair of iterators.
    IteratorType

    a compatible iterator type, for instance.

    • a pair of std::string::iterator or std::vector<std::uint8_t>::iterator
    • a pair of pointers such as ptr and ptr + len
    "},{"location":"api/basic_json/accept/#parameters","title":"Parameters","text":"i (in) Input to parse from. ignore_comments (in) whether comments should be ignored and treated like whitespace (true) or yield a parse error (false); (optional, false by default) first (in) iterator to start of character range last (in) iterator to end of character range"},{"location":"api/basic_json/accept/#return-value","title":"Return value","text":"

    Whether the input is valid JSON.

    "},{"location":"api/basic_json/accept/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/accept/#exceptions","title":"Exceptions","text":"

    Throws parse_error.101 in case of an empty input like a null FILE* or char* pointer.

    "},{"location":"api/basic_json/accept/#complexity","title":"Complexity","text":"

    Linear in the length of the input. The parser is a predictive LL(1) parser.

    "},{"location":"api/basic_json/accept/#notes","title":"Notes","text":"

    A UTF-8 byte order mark is silently ignored.

    "},{"location":"api/basic_json/accept/#examples","title":"Examples","text":"Example

    The example below demonstrates the accept() function reading from a string.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // a valid JSON text\n    auto valid_text = R\"(\n    {\n        \"numbers\": [1, 2, 3]\n    }\n    )\";\n\n    // an invalid JSON text\n    auto invalid_text = R\"(\n    {\n        \"strings\": [\"extra\", \"comma\", ]\n    }\n    )\";\n\n    std::cout << std::boolalpha\n              << json::accept(valid_text) << ' '\n              << json::accept(invalid_text) << '\\n';\n}\n

    Output:

    true false\n
    "},{"location":"api/basic_json/accept/#see-also","title":"See also","text":"
    • parse - deserialize from a compatible input
    • operator>> - deserialize from stream
    "},{"location":"api/basic_json/accept/#version-history","title":"Version history","text":"
    • Added in version 3.0.0.
    • Ignoring comments via ignore_comments added in version 3.9.0.
    • Changed runtime assertion in case of FILE* null pointers to exception in version 3.11.4.

    Deprecation

    Overload (2) replaces calls to accept with a pair of iterators as their first parameter which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like accept({ptr, ptr+len}, ...); with accept(ptr, ptr+len, ...);.

    You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

    "},{"location":"api/basic_json/array/","title":"nlohmann::basic_json::array","text":"
    static basic_json array(initializer_list_t init = {});\n

    Creates a JSON array value from a given initializer list. That is, given a list of values a, b, c, creates the JSON value [a, b, c]. If the initializer list is empty, the empty array [] is created.

    "},{"location":"api/basic_json/array/#parameters","title":"Parameters","text":"init (in) initializer list with JSON values to create an array from (optional)"},{"location":"api/basic_json/array/#return-value","title":"Return value","text":"

    JSON array value

    "},{"location":"api/basic_json/array/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/array/#complexity","title":"Complexity","text":"

    Linear in the size of init.

    "},{"location":"api/basic_json/array/#notes","title":"Notes","text":"

    This function is only needed to express two edge cases that cannot be realized with the initializer list constructor (basic_json(initializer_list_t, bool, value_t)). These cases are:

    1. creating an array whose elements are all pairs whose first element is a string -- in this case, the initializer list constructor would create an object, taking the first elements as keys
    2. creating an empty array -- passing the empty initializer list to the initializer list constructor yields an empty object
    "},{"location":"api/basic_json/array/#examples","title":"Examples","text":"Example

    The following code shows an example for the array function.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON arrays\n    json j_no_init_list = json::array();\n    json j_empty_init_list = json::array({});\n    json j_nonempty_init_list = json::array({1, 2, 3, 4});\n    json j_list_of_pairs = json::array({ {\"one\", 1}, {\"two\", 2} });\n\n    // serialize the JSON arrays\n    std::cout << j_no_init_list << '\\n';\n    std::cout << j_empty_init_list << '\\n';\n    std::cout << j_nonempty_init_list << '\\n';\n    std::cout << j_list_of_pairs << '\\n';\n}\n

    Output:

    []\n[]\n[1,2,3,4]\n[[\"one\",1],[\"two\",2]]\n
    "},{"location":"api/basic_json/array/#see-also","title":"See also","text":"
    • basic_json(initializer_list_t) - create a JSON value from an initializer list
    • object - create a JSON object value from an initializer list
    "},{"location":"api/basic_json/array/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/array_t/","title":"nlohmann::basic_json::array_t","text":"
    using array_t = ArrayType<basic_json, AllocatorType<basic_json>>;\n

    The type used to store JSON arrays.

    RFC 8259 describes JSON arrays as follows:

    An array is an ordered sequence of zero or more values.

    To store objects in C++, a type is defined by the template parameters explained below.

    "},{"location":"api/basic_json/array_t/#template-parameters","title":"Template parameters","text":"ArrayType container type to store arrays (e.g., std::vector or std::list) AllocatorType the allocator to use for objects (e.g., std::allocator)"},{"location":"api/basic_json/array_t/#notes","title":"Notes","text":""},{"location":"api/basic_json/array_t/#default-type","title":"Default type","text":"

    With the default values for ArrayType (std::vector) and AllocatorType (std::allocator), the default value for array_t is:

    std::vector<\n  basic_json, // value_type\n  std::allocator<basic_json> // allocator_type\n>\n
    "},{"location":"api/basic_json/array_t/#limits","title":"Limits","text":"

    RFC 8259 specifies:

    An implementation may set limits on the maximum depth of nesting.

    In this class, the array's limit of nesting is not explicitly constrained. However, a maximum depth of nesting may be introduced by the compiler or runtime environment. A theoretical limit can be queried by calling the max_size function of a JSON array.

    "},{"location":"api/basic_json/array_t/#storage","title":"Storage","text":"

    Arrays are stored as pointers in a basic_json type. That is, for any access to array values, a pointer of type array_t* must be dereferenced.

    "},{"location":"api/basic_json/array_t/#examples","title":"Examples","text":"Example

    The following code shows that array_t is by default, a typedef to std::vector<nlohmann::json>.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::boolalpha << std::is_same<std::vector<json>, json::array_t>::value << std::endl;\n}\n

    Output:

    true\n
    "},{"location":"api/basic_json/array_t/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/at/","title":"nlohmann::basic_json::at","text":"
    // (1)\nreference at(size_type idx);\nconst_reference at(size_type idx) const;\n\n// (2)\nreference at(const typename object_t::key_type& key);\nconst_reference at(const typename object_t::key_type& key) const;\n\n// (3)\ntemplate<typename KeyType>\nreference at(KeyType&& key);\ntemplate<typename KeyType>\nconst_reference at(KeyType&& key) const;\n\n// (4)\nreference at(const json_pointer& ptr);\nconst_reference at(const json_pointer& ptr) const;\n
    1. Returns a reference to the array element at specified location idx, with bounds checking.
    2. Returns a reference to the object element with specified key key, with bounds checking.
    3. See 2. This overload is only available if KeyType is comparable with typename object_t::key_type and typename object_comparator_t::is_transparent denotes a type.
    4. Returns a reference to the element at specified JSON pointer ptr, with bounds checking.
    "},{"location":"api/basic_json/at/#template-parameters","title":"Template parameters","text":"KeyType A type for an object key other than json_pointer that is comparable with string_t using object_comparator_t. This can also be a string view (C++17)."},{"location":"api/basic_json/at/#parameters","title":"Parameters","text":"idx (in) index of the element to access key (in) object key of the elements to access ptr (in) JSON pointer to the desired element"},{"location":"api/basic_json/at/#return-value","title":"Return value","text":"
    1. reference to the element at index idx
    2. reference to the element at key key
    3. reference to the element at key key
    4. reference to the element pointed to by ptr
    "},{"location":"api/basic_json/at/#exception-safety","title":"Exception safety","text":"

    Strong exception safety: if an exception occurs, the original value stays intact.

    "},{"location":"api/basic_json/at/#exceptions","title":"Exceptions","text":"
    1. The function can throw the following exceptions:
      • Throws type_error.304 if the JSON value is not an array; in this case, calling at with an index makes no sense. See example below.
      • Throws out_of_range.401 if the index idx is out of range of the array; that is, idx >= size(). See example below.
    2. The function can throw the following exceptions:
      • Throws type_error.304 if the JSON value is not an object; in this case, calling at with a key makes no sense. See example below.
      • Throws out_of_range.403 if the key key is not stored in the object; that is, find(key) == end(). See example below.
    3. See 2.
    4. The function can throw the following exceptions:
      • Throws parse_error.106 if an array index in the passed JSON pointer ptr begins with '0'. See example below.
      • Throws parse_error.109 if an array index in the passed JSON pointer ptr is not a number. See example below.
      • Throws out_of_range.401 if an array index in the passed JSON pointer ptr is out of range. See example below.
      • Throws out_of_range.402 if the array index '-' is used in the passed JSON pointer ptr. As at provides checked access (and no elements are implicitly inserted), the index '-' is always invalid. See example below.
      • Throws out_of_range.403 if the JSON pointer describes a key of an object which cannot be found. See example below.
      • Throws out_of_range.404 if the JSON pointer ptr can not be resolved. See example below.
    "},{"location":"api/basic_json/at/#complexity","title":"Complexity","text":"
    1. Constant.
    2. Logarithmic in the size of the container.
    3. Logarithmic in the size of the container.
    4. Logarithmic in the size of the container.
    "},{"location":"api/basic_json/at/#examples","title":"Examples","text":"Example: (1) access specified array element with bounds checking

    The example below shows how array elements can be read and written using at(). It also demonstrates the different exceptions that can be thrown.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON array\n    json array = {\"first\", \"2nd\", \"third\", \"fourth\"};\n\n    // output element at index 2 (third element)\n    std::cout << array.at(2) << '\\n';\n\n    // change element at index 1 (second element) to \"second\"\n    array.at(1) = \"second\";\n\n    // output changed array\n    std::cout << array << '\\n';\n\n    // exception type_error.304\n    try\n    {\n        // use at() on a non-array type\n        json str = \"I am a string\";\n        str.at(0) = \"Another string\";\n    }\n    catch (const json::type_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // exception out_of_range.401\n    try\n    {\n        // try to write beyond the array limit\n        array.at(5) = \"sixth\";\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    \"third\"\n[\"first\",\"second\",\"third\",\"fourth\"]\n[json.exception.type_error.304] cannot use at() with string\n[json.exception.out_of_range.401] array index 5 is out of range\n
    Example: (1) access specified array element with bounds checking

    The example below shows how array elements can be read using at(). It also demonstrates the different exceptions that can be thrown.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON array\n    const json array = {\"first\", \"2nd\", \"third\", \"fourth\"};\n\n    // output element at index 2 (third element)\n    std::cout << array.at(2) << '\\n';\n\n    // exception type_error.304\n    try\n    {\n        // use at() on a non-array type\n        const json str = \"I am a string\";\n        std::cout << str.at(0) << '\\n';\n    }\n    catch (const json::type_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // exception out_of_range.401\n    try\n    {\n        // try to read beyond the array limit\n        std::cout << array.at(5) << '\\n';\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    \"third\"\n[json.exception.type_error.304] cannot use at() with string\n[json.exception.out_of_range.401] array index 5 is out of range\n
    Example: (2) access specified object element with bounds checking

    The example below shows how object elements can be read and written using at(). It also demonstrates the different exceptions that can be thrown.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON object\n    json object =\n    {\n        {\"the good\", \"il buono\"},\n        {\"the bad\", \"il cattivo\"},\n        {\"the ugly\", \"il brutto\"}\n    };\n\n    // output element with key \"the ugly\"\n    std::cout << object.at(\"the ugly\") << '\\n';\n\n    // change element with key \"the bad\"\n    object.at(\"the bad\") = \"il cattivo\";\n\n    // output changed array\n    std::cout << object << '\\n';\n\n    // exception type_error.304\n    try\n    {\n        // use at() on a non-object type\n        json str = \"I am a string\";\n        str.at(\"the good\") = \"Another string\";\n    }\n    catch (const json::type_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // exception out_of_range.401\n    try\n    {\n        // try to write at a nonexisting key\n        object.at(\"the fast\") = \"il rapido\";\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    \"il brutto\"\n{\"the bad\":\"il cattivo\",\"the good\":\"il buono\",\"the ugly\":\"il brutto\"}\n[json.exception.type_error.304] cannot use at() with string\n[json.exception.out_of_range.403] key 'the fast' not found\n
    Example: (2) access specified object element with bounds checking

    The example below shows how object elements can be read using at(). It also demonstrates the different exceptions that can be thrown.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON object\n    const json object =\n    {\n        {\"the good\", \"il buono\"},\n        {\"the bad\", \"il cattivo\"},\n        {\"the ugly\", \"il brutto\"}\n    };\n\n    // output element with key \"the ugly\"\n    std::cout << object.at(\"the ugly\") << '\\n';\n\n    // exception type_error.304\n    try\n    {\n        // use at() on a non-object type\n        const json str = \"I am a string\";\n        std::cout << str.at(\"the good\") << '\\n';\n    }\n    catch (const json::type_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // exception out_of_range.401\n    try\n    {\n        // try to read from a nonexisting key\n        std::cout << object.at(\"the fast\") << '\\n';\n    }\n    catch (const json::out_of_range)\n    {\n        std::cout << \"out of range\" << '\\n';\n    }\n}\n

    Output:

    \"il brutto\"\n[json.exception.type_error.304] cannot use at() with string\nout of range\n
    Example: (3) access specified object element using string_view with bounds checking

    The example below shows how object elements can be read and written using at(). It also demonstrates the different exceptions that can be thrown.

    #include <iostream>\n#include <string_view>\n#include <nlohmann/json.hpp>\n\nusing namespace std::string_view_literals;\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON object\n    json object =\n    {\n        {\"the good\", \"il buono\"},\n        {\"the bad\", \"il cattivo\"},\n        {\"the ugly\", \"il brutto\"}\n    };\n\n    // output element with key \"the ugly\" using string_view\n    std::cout << object.at(\"the ugly\"sv) << '\\n';\n\n    // change element with key \"the bad\" using string_view\n    object.at(\"the bad\"sv) = \"il cattivo\";\n\n    // output changed array\n    std::cout << object << '\\n';\n\n    // exception type_error.304\n    try\n    {\n        // use at() with string_view on a non-object type\n        json str = \"I am a string\";\n        str.at(\"the good\"sv) = \"Another string\";\n    }\n    catch (const json::type_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // exception out_of_range.401\n    try\n    {\n        // try to write at a nonexisting key using string_view\n        object.at(\"the fast\"sv) = \"il rapido\";\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    \"il brutto\"\n{\"the bad\":\"il cattivo\",\"the good\":\"il buono\",\"the ugly\":\"il brutto\"}\n[json.exception.type_error.304] cannot use at() with string\n[json.exception.out_of_range.403] key 'the fast' not found\n
    Example: (3) access specified object element using string_view with bounds checking

    The example below shows how object elements can be read using at(). It also demonstrates the different exceptions that can be thrown.

    #include <iostream>\n#include <string_view>\n#include <nlohmann/json.hpp>\n\nusing namespace std::string_view_literals;\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON object\n    const json object =\n    {\n        {\"the good\", \"il buono\"},\n        {\"the bad\", \"il cattivo\"},\n        {\"the ugly\", \"il brutto\"}\n    };\n\n    // output element with key \"the ugly\" using string_view\n    std::cout << object.at(\"the ugly\"sv) << '\\n';\n\n    // exception type_error.304\n    try\n    {\n        // use at() with string_view on a non-object type\n        const json str = \"I am a string\";\n        std::cout << str.at(\"the good\"sv) << '\\n';\n    }\n    catch (const json::type_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // exception out_of_range.401\n    try\n    {\n        // try to read from a nonexisting key using string_view\n        std::cout << object.at(\"the fast\"sv) << '\\n';\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << \"out of range\" << '\\n';\n    }\n}\n

    Output:

    \"il brutto\"\n[json.exception.type_error.304] cannot use at() with string\nout of range\n
    Example: (4) access specified element via JSON Pointer

    The example below shows how object elements can be read and written using at(). It also demonstrates the different exceptions that can be thrown.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create a JSON value\n    json j =\n    {\n        {\"number\", 1}, {\"string\", \"foo\"}, {\"array\", {1, 2}}\n    };\n\n    // read-only access\n\n    // output element with JSON pointer \"/number\"\n    std::cout << j.at(\"/number\"_json_pointer) << '\\n';\n    // output element with JSON pointer \"/string\"\n    std::cout << j.at(\"/string\"_json_pointer) << '\\n';\n    // output element with JSON pointer \"/array\"\n    std::cout << j.at(\"/array\"_json_pointer) << '\\n';\n    // output element with JSON pointer \"/array/1\"\n    std::cout << j.at(\"/array/1\"_json_pointer) << '\\n';\n\n    // writing access\n\n    // change the string\n    j.at(\"/string\"_json_pointer) = \"bar\";\n    // output the changed string\n    std::cout << j[\"string\"] << '\\n';\n\n    // change an array element\n    j.at(\"/array/1\"_json_pointer) = 21;\n    // output the changed array\n    std::cout << j[\"array\"] << '\\n';\n\n    // out_of_range.106\n    try\n    {\n        // try to use an array index with leading '0'\n        json::reference ref = j.at(\"/array/01\"_json_pointer);\n    }\n    catch (const json::parse_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // out_of_range.109\n    try\n    {\n        // try to use an array index that is not a number\n        json::reference ref = j.at(\"/array/one\"_json_pointer);\n    }\n    catch (const json::parse_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // out_of_range.401\n    try\n    {\n        // try to use an invalid array index\n        json::reference ref = j.at(\"/array/4\"_json_pointer);\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // out_of_range.402\n    try\n    {\n        // try to use the array index '-'\n        json::reference ref = j.at(\"/array/-\"_json_pointer);\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // out_of_range.403\n    try\n    {\n        // try to use a JSON pointer to a nonexistent object key\n        json::const_reference ref = j.at(\"/foo\"_json_pointer);\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // out_of_range.404\n    try\n    {\n        // try to use a JSON pointer that cannot be resolved\n        json::reference ref = j.at(\"/number/foo\"_json_pointer);\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    1\n\"foo\"\n[1,2]\n2\n\"bar\"\n[1,21]\n[json.exception.parse_error.106] parse error: array index '01' must not begin with '0'\n[json.exception.parse_error.109] parse error: array index 'one' is not a number\n[json.exception.out_of_range.401] array index 4 is out of range\n[json.exception.out_of_range.402] array index '-' (2) is out of range\n[json.exception.out_of_range.403] key 'foo' not found\n[json.exception.out_of_range.404] unresolved reference token 'foo'\n
    Example: (4) access specified element via JSON Pointer

    The example below shows how object elements can be read using at(). It also demonstrates the different exceptions that can be thrown.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create a JSON value\n    const json j =\n    {\n        {\"number\", 1}, {\"string\", \"foo\"}, {\"array\", {1, 2}}\n    };\n\n    // read-only access\n\n    // output element with JSON pointer \"/number\"\n    std::cout << j.at(\"/number\"_json_pointer) << '\\n';\n    // output element with JSON pointer \"/string\"\n    std::cout << j.at(\"/string\"_json_pointer) << '\\n';\n    // output element with JSON pointer \"/array\"\n    std::cout << j.at(\"/array\"_json_pointer) << '\\n';\n    // output element with JSON pointer \"/array/1\"\n    std::cout << j.at(\"/array/1\"_json_pointer) << '\\n';\n\n    // out_of_range.109\n    try\n    {\n        // try to use an array index that is not a number\n        json::const_reference ref = j.at(\"/array/one\"_json_pointer);\n    }\n    catch (const json::parse_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // out_of_range.401\n    try\n    {\n        // try to use an invalid array index\n        json::const_reference ref = j.at(\"/array/4\"_json_pointer);\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // out_of_range.402\n    try\n    {\n        // try to use the array index '-'\n        json::const_reference ref = j.at(\"/array/-\"_json_pointer);\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // out_of_range.403\n    try\n    {\n        // try to use a JSON pointer to a nonexistent object key\n        json::const_reference ref = j.at(\"/foo\"_json_pointer);\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // out_of_range.404\n    try\n    {\n        // try to use a JSON pointer that cannot be resolved\n        json::const_reference ref = j.at(\"/number/foo\"_json_pointer);\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    1\n\"foo\"\n[1,2]\n2\n[json.exception.parse_error.109] parse error: array index 'one' is not a number\n[json.exception.out_of_range.401] array index 4 is out of range\n[json.exception.out_of_range.402] array index '-' (2) is out of range\n[json.exception.out_of_range.403] key 'foo' not found\n[json.exception.out_of_range.404] unresolved reference token 'foo'\n
    "},{"location":"api/basic_json/at/#see-also","title":"See also","text":"
    • documentation on checked access
    • operator[] for unchecked access by reference
    • value for access with default value
    "},{"location":"api/basic_json/at/#version-history","title":"Version history","text":"
    1. Added in version 1.0.0.
    2. Added in version 1.0.0.
    3. Added in version 3.11.0.
    4. Added in version 2.0.0.
    "},{"location":"api/basic_json/back/","title":"nlohmann::basic_json::back","text":"
    reference back();\n\nconst_reference back() const;\n

    Returns a reference to the last element in the container. For a JSON container c, the expression c.back() is equivalent to

    auto tmp = c.end();\n--tmp;\nreturn *tmp;\n
    "},{"location":"api/basic_json/back/#return-value","title":"Return value","text":"

    In case of a structured type (array or object), a reference to the last element is returned. In case of number, string, boolean, or binary values, a reference to the value is returned.

    "},{"location":"api/basic_json/back/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/back/#exceptions","title":"Exceptions","text":"

    If the JSON value is null, exception invalid_iterator.214 is thrown.

    "},{"location":"api/basic_json/back/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/back/#notes","title":"Notes","text":"

    Precondition

    The array or object must not be empty. Calling back on an empty array or object yields undefined behavior.

    "},{"location":"api/basic_json/back/#examples","title":"Examples","text":"Example

    The following code shows an example for back().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_object_empty(json::value_t::object);\n    json j_array = {1, 2, 4, 8, 16};\n    json j_array_empty(json::value_t::array);\n    json j_string = \"Hello, world\";\n\n    // call back()\n    std::cout << j_boolean.back() << '\\n';\n    std::cout << j_number_integer.back() << '\\n';\n    std::cout << j_number_float.back() << '\\n';\n    std::cout << j_object.back() << '\\n';\n    //std::cout << j_object_empty.back() << '\\n';  // undefined behavior\n    std::cout << j_array.back() << '\\n';\n    //std::cout << j_array_empty.back() << '\\n';   // undefined behavior\n    std::cout << j_string.back() << '\\n';\n\n    // back() called on a null value\n    try\n    {\n        json j_null;\n        j_null.back();\n    }\n    catch (const json::invalid_iterator& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    true\n17\n23.42\n2\n16\n\"Hello, world\"\n[json.exception.invalid_iterator.214] cannot get value\n
    "},{"location":"api/basic_json/back/#see-also","title":"See also","text":"
    • front to access the first element
    "},{"location":"api/basic_json/back/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Adjusted code to return reference to binary values in version 3.8.0.
    "},{"location":"api/basic_json/basic_json/","title":"nlohmann::basic_json::basic_json","text":"
    // (1)\nbasic_json(const value_t v);\n\n// (2)\nbasic_json(std::nullptr_t = nullptr) noexcept;\n\n// (3)\ntemplate<typename CompatibleType>\nbasic_json(CompatibleType&& val) noexcept(noexcept(\n           JSONSerializer<U>::to_json(std::declval<basic_json_t&>(),\n                                      std::forward<CompatibleType>(val))));\n\n// (4)\ntemplate<typename BasicJsonType>\nbasic_json(const BasicJsonType& val);\n\n// (5)\nbasic_json(initializer_list_t init,\n           bool type_deduction = true,\n           value_t manual_type = value_t::array);\n\n// (6)\nbasic_json(size_type cnt, const basic_json& val);\n\n// (7)\nbasic_json(iterator first, iterator last);\nbasic_json(const_iterator first, const_iterator last);\n\n// (8)\nbasic_json(const basic_json& other);\n\n// (9)\nbasic_json(basic_json&& other) noexcept;\n
    1. Create an empty JSON value with a given type. The value will be default initialized with an empty value which depends on the type:

      Value type initial value null null boolean false string \"\" number 0 object {} array [] binary empty array

      The postcondition of this constructor can be restored by calling clear().

    2. Create a null JSON value. It either takes a null pointer as parameter (explicitly creating null) or no parameter (implicitly creating null). The passed null pointer itself is not read -- it is only used to choose the right constructor.

    3. This is a \"catch all\" constructor for all compatible JSON types; that is, types for which a to_json() method exists. The constructor forwards the parameter val to that method (to json_serializer<U>::to_json method with U = uncvref_t<CompatibleType>, to be exact).

      Template type CompatibleType includes, but is not limited to, the following types:

      • arrays: array_t and all kinds of compatible containers such as std::vector, std::deque, std::list, std::forward_list, std::array, std::valarray, std::set, std::unordered_set, std::multiset, and std::unordered_multiset with a value_type from which a basic_json value can be constructed.
      • objects: object_t and all kinds of compatible associative containers such as std::map, std::unordered_map, std::multimap, and std::unordered_multimap with a key_type compatible to string_t and a value_type from which a basic_json value can be constructed.
      • strings: string_t, string literals, and all compatible string containers can be used.
      • numbers: number_integer_t, number_unsigned_t, number_float_t, and all convertible number types such as int, size_t, int64_t, float or double can be used.
      • boolean: boolean_t / bool can be used.
      • binary: binary_t / std::vector<uint8_t> may be used; unfortunately because string literals cannot be distinguished from binary character arrays by the C++ type system, all types compatible with const char* will be directed to the string constructor instead. This is both for backwards compatibility, and due to the fact that a binary type is not a standard JSON type.

      See the examples below.

    4. This is a constructor for existing basic_json types. It does not hijack copy/move constructors, since the parameter has different template arguments than the current ones.

      The constructor tries to convert the internal m_value of the parameter.

    5. Creates a JSON value of type array or object from the passed initializer list init. In case type_deduction is true (default), the type of the JSON value to be created is deducted from the initializer list init according to the following rules:

      1. If the list is empty, an empty JSON object value {} is created.
      2. If the list consists of pairs whose first element is a string, a JSON object value is created where the first elements of the pairs are treated as keys and the second elements are as values.
      3. In all other cases, an array is created.

      The rules aim to create the best fit between a C++ initializer list and JSON values. The rationale is as follows:

      1. The empty initializer list is written as {} which is exactly an empty JSON object.
      2. C++ has no way of describing mapped types other than to list a list of pairs. As JSON requires that keys must be of type string, rule 2 is the weakest constraint one can pose on initializer lists to interpret them as an object.
      3. In all other cases, the initializer list could not be interpreted as JSON object type, so interpreting it as JSON array type is safe.

      With the rules described above, the following JSON values cannot be expressed by an initializer list:

      • the empty array ([]): use array(initializer_list_t) with an empty initializer list in this case
      • arrays whose elements satisfy rule 2: use array(initializer_list_t) with the same initializer list in this case

      Function array() and object() force array and object creation from initializer lists, respectively.

    6. Constructs a JSON array value by creating cnt copies of a passed value. In case cnt is 0, an empty array is created.

    7. Constructs the JSON value with the contents of the range [first, last). The semantics depends on the different types a JSON value can have:

      • In case of a null type, invalid_iterator.206 is thrown.
      • In case of other primitive types (number, boolean, or string), first must be begin() and last must be end(). In this case, the value is copied. Otherwise, invalid_iterator.204 is thrown.
      • In case of structured types (array, object), the constructor behaves as similar versions for std::vector or std::map; that is, a JSON array or object is constructed from the values in the range.
    8. Creates a copy of a given JSON value.

    9. Move constructor. Constructs a JSON value with the contents of the given value other using move semantics. It \"steals\" the resources from other and leaves it as JSON null value.

    "},{"location":"api/basic_json/basic_json/#template-parameters","title":"Template parameters","text":"CompatibleType

    a type such that:

    • CompatibleType is not derived from std::istream,
    • CompatibleType is not basic_json (to avoid hijacking copy/move constructors),
    • CompatibleType is not a different basic_json type (i.e. with different template arguments)
    • CompatibleType is not a basic_json nested type (e.g., json_pointer, iterator, etc.)
    • json_serializer<U> (with U = uncvref_t<CompatibleType>) has a to_json(basic_json_t&, CompatibleType&&) method
    BasicJsonType:

    a type such that:

    • BasicJsonType is a basic_json type.
    • BasicJsonType has different template arguments than basic_json_t.
    U: uncvref_t<CompatibleType>"},{"location":"api/basic_json/basic_json/#parameters","title":"Parameters","text":"v (in) the type of the value to create val (in) the value to be forwarded to the respective constructor init (in) initializer list with JSON values type_deduction (in) internal parameter; when set to true, the type of the JSON value is deducted from the initializer list init; when set to false, the type provided via manual_type is forced. This mode is used by the functions array(initializer_list_t) and object(initializer_list_t). manual_type (in) internal parameter; when type_deduction is set to false, the created JSON value will use the provided type (only value_t::array and value_t::object are valid); when type_deduction is set to true, this parameter has no effect cnt (in) the number of JSON copies of val to create first (in) begin of the range to copy from (included) last (in) end of the range to copy from (excluded) other (in) the JSON value to copy/move"},{"location":"api/basic_json/basic_json/#exception-safety","title":"Exception safety","text":"
    1. Strong guarantee: if an exception is thrown, there are no changes to any JSON value.
    2. No-throw guarantee: this constructor never throws exceptions.
    3. Depends on the called constructor. For types directly supported by the library (i.e., all types for which no to_json() function was provided), strong guarantee holds: if an exception is thrown, there are no changes to any JSON value.
    4. Depends on the called constructor. For types directly supported by the library (i.e., all types for which no to_json() function was provided), strong guarantee holds: if an exception is thrown, there are no changes to any JSON value.
    5. Strong guarantee: if an exception is thrown, there are no changes to any JSON value.
    6. Strong guarantee: if an exception is thrown, there are no changes to any JSON value.
    7. Strong guarantee: if an exception is thrown, there are no changes to any JSON value.
    8. Strong guarantee: if an exception is thrown, there are no changes to any JSON value.
    9. No-throw guarantee: this constructor never throws exceptions.
    "},{"location":"api/basic_json/basic_json/#exceptions","title":"Exceptions","text":"
    1. (none)
    2. The function does not throw exceptions.
    3. (none)
    4. (none)
    5. The function can throw the following exceptions:
      • Throws type_error.301 if type_deduction is false, manual_type is value_t::object, but init contains an element which is not a pair whose first element is a string. In this case, the constructor could not create an object. If type_deduction would have been true, an array would have been created. See object(initializer_list_t) for an example.
    6. (none)
    7. The function can throw the following exceptions:
      • Throws invalid_iterator.201 if iterators first and last are not compatible (i.e., do not belong to the same JSON value). In this case, the range [first, last) is undefined.
      • Throws invalid_iterator.204 if iterators first and last belong to a primitive type (number, boolean, or string), but first does not point to the first element anymore. In this case, the range [first, last) is undefined. See example code below.
      • Throws invalid_iterator.206 if iterators first and last belong to a null value. In this case, the range [first, last) is undefined.
    8. (none)
    9. The function does not throw exceptions.
    "},{"location":"api/basic_json/basic_json/#complexity","title":"Complexity","text":"
    1. Constant.
    2. Constant.
    3. Usually linear in the size of the passed val, also depending on the implementation of the called to_json() method.
    4. Usually linear in the size of the passed val, also depending on the implementation of the called to_json() method.
    5. Linear in the size of the initializer list init.
    6. Linear in cnt.
    7. Linear in distance between first and last.
    8. Linear in the size of other.
    9. Constant.
    "},{"location":"api/basic_json/basic_json/#notes","title":"Notes","text":"
    • Overload 5:

      Empty initializer list

      When used without parentheses around an empty initializer list, basic_json() is called instead of this function, yielding the JSON null value.

    • Overload 7:

      Preconditions

      • Iterators first and last must be initialized. **This precondition is enforced with a runtime assertion.
      • Range [first, last) is valid. Usually, this precondition cannot be checked efficiently. Only certain edge cases are detected; see the description of the exceptions above. A violation of this precondition yields undefined behavior.

      Runtime assertion

      A precondition is enforced with a runtime assertion.

    • Overload 8:

      Postcondition

      *this == other

    • Overload 9:

      Postconditions

      • `*this has the same value as other before the call.
      • other is a JSON null value
    "},{"location":"api/basic_json/basic_json/#examples","title":"Examples","text":"Example: (1) create an empty value with a given type

    The following code shows the constructor for different value_t values.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create the different JSON values with default values\n    json j_null(json::value_t::null);\n    json j_boolean(json::value_t::boolean);\n    json j_number_integer(json::value_t::number_integer);\n    json j_number_float(json::value_t::number_float);\n    json j_object(json::value_t::object);\n    json j_array(json::value_t::array);\n    json j_string(json::value_t::string);\n\n    // serialize the JSON values\n    std::cout << j_null << '\\n';\n    std::cout << j_boolean << '\\n';\n    std::cout << j_number_integer << '\\n';\n    std::cout << j_number_float << '\\n';\n    std::cout << j_object << '\\n';\n    std::cout << j_array << '\\n';\n    std::cout << j_string << '\\n';\n}\n

    Output:

    null\nfalse\n0\n0.0\n{}\n[]\n\"\"\n
    Example: (2) create a null object

    The following code shows the constructor with and without a null pointer parameter.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // implicitly create a JSON null value\n    json j1;\n\n    // explicitly create a JSON null value\n    json j2(nullptr);\n\n    // serialize the JSON null value\n    std::cout << j1 << '\\n' << j2 << '\\n';\n}\n

    Output:

    null\nnull\n
    Example: (3) create a JSON value from compatible types

    The following code shows the constructor with several compatible types.

    #include <iostream>\n#include <deque>\n#include <list>\n#include <forward_list>\n#include <set>\n#include <unordered_map>\n#include <unordered_set>\n#include <valarray>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // ============\n    // object types\n    // ============\n\n    // create an object from an object_t value\n    json::object_t object_value = { {\"one\", 1}, {\"two\", 2} };\n    json j_object_t(object_value);\n\n    // create an object from std::map\n    std::map<std::string, int> c_map\n    {\n        {\"one\", 1}, {\"two\", 2}, {\"three\", 3}\n    };\n    json j_map(c_map);\n\n    // create an object from std::unordered_map\n    std::unordered_map<const char*, double> c_umap\n    {\n        {\"one\", 1.2}, {\"two\", 2.3}, {\"three\", 3.4}\n    };\n    json j_umap(c_umap);\n\n    // create an object from std::multimap\n    std::multimap<std::string, bool> c_mmap\n    {\n        {\"one\", true}, {\"two\", true}, {\"three\", false}, {\"three\", true}\n    };\n    json j_mmap(c_mmap); // only one entry for key \"three\" is used\n\n    // create an object from std::unordered_multimap\n    std::unordered_multimap<std::string, bool> c_ummap\n    {\n        {\"one\", true}, {\"two\", true}, {\"three\", false}, {\"three\", true}\n    };\n    json j_ummap(c_ummap); // only one entry for key \"three\" is used\n\n    // serialize the JSON objects\n    std::cout << j_object_t << '\\n';\n    std::cout << j_map << '\\n';\n    std::cout << j_umap << '\\n';\n    std::cout << j_mmap << '\\n';\n    std::cout << j_ummap << \"\\n\\n\";\n\n    // ===========\n    // array types\n    // ===========\n\n    // create an array from an array_t value\n    json::array_t array_value = {\"one\", \"two\", 3, 4.5, false};\n    json j_array_t(array_value);\n\n    // create an array from std::vector\n    std::vector<int> c_vector {1, 2, 3, 4};\n    json j_vec(c_vector);\n\n    // create an array from std::valarray\n    std::valarray<short> c_valarray {10, 9, 8, 7};\n    json j_valarray(c_valarray);\n\n    // create an array from std::deque\n    std::deque<double> c_deque {1.2, 2.3, 3.4, 5.6};\n    json j_deque(c_deque);\n\n    // create an array from std::list\n    std::list<bool> c_list {true, true, false, true};\n    json j_list(c_list);\n\n    // create an array from std::forward_list\n    std::forward_list<std::int64_t> c_flist {12345678909876, 23456789098765, 34567890987654, 45678909876543};\n    json j_flist(c_flist);\n\n    // create an array from std::array\n    std::array<unsigned long, 4> c_array {{1, 2, 3, 4}};\n    json j_array(c_array);\n\n    // create an array from std::set\n    std::set<std::string> c_set {\"one\", \"two\", \"three\", \"four\", \"one\"};\n    json j_set(c_set); // only one entry for \"one\" is used\n\n    // create an array from std::unordered_set\n    std::unordered_set<std::string> c_uset {\"one\", \"two\", \"three\", \"four\", \"one\"};\n    json j_uset(c_uset); // only one entry for \"one\" is used\n\n    // create an array from std::multiset\n    std::multiset<std::string> c_mset {\"one\", \"two\", \"one\", \"four\"};\n    json j_mset(c_mset); // both entries for \"one\" are used\n\n    // create an array from std::unordered_multiset\n    std::unordered_multiset<std::string> c_umset {\"one\", \"two\", \"one\", \"four\"};\n    json j_umset(c_umset); // both entries for \"one\" are used\n\n    // serialize the JSON arrays\n    std::cout << j_array_t << '\\n';\n    std::cout << j_vec << '\\n';\n    std::cout << j_valarray << '\\n';\n    std::cout << j_deque << '\\n';\n    std::cout << j_list << '\\n';\n    std::cout << j_flist << '\\n';\n    std::cout << j_array << '\\n';\n    std::cout << j_set << '\\n';\n    std::cout << j_uset << '\\n';\n    std::cout << j_mset << '\\n';\n    std::cout << j_umset << \"\\n\\n\";\n\n    // ============\n    // string types\n    // ============\n\n    // create string from a string_t value\n    json::string_t string_value = \"The quick brown fox jumps over the lazy dog.\";\n    json j_string_t(string_value);\n\n    // create a JSON string directly from a string literal\n    json j_string_literal(\"The quick brown fox jumps over the lazy dog.\");\n\n    // create string from std::string\n    std::string s_stdstring = \"The quick brown fox jumps over the lazy dog.\";\n    json j_stdstring(s_stdstring);\n\n    // serialize the JSON strings\n    std::cout << j_string_t << '\\n';\n    std::cout << j_string_literal << '\\n';\n    std::cout << j_stdstring << \"\\n\\n\";\n\n    // ============\n    // number types\n    // ============\n\n    // create a JSON number from number_integer_t\n    json::number_integer_t value_integer_t = -42;\n    json j_integer_t(value_integer_t);\n\n    // create a JSON number from number_unsigned_t\n    json::number_integer_t value_unsigned_t = 17;\n    json j_unsigned_t(value_unsigned_t);\n\n    // create a JSON number from an anonymous enum\n    enum { enum_value = 17 };\n    json j_enum(enum_value);\n\n    // create values of different integer types\n    short n_short = 42;\n    int n_int = -23;\n    long n_long = 1024;\n    int_least32_t n_int_least32_t = -17;\n    uint8_t n_uint8_t = 8;\n\n    // create (integer) JSON numbers\n    json j_short(n_short);\n    json j_int(n_int);\n    json j_long(n_long);\n    json j_int_least32_t(n_int_least32_t);\n    json j_uint8_t(n_uint8_t);\n\n    // create values of different floating-point types\n    json::number_float_t v_ok = 3.141592653589793;\n    json::number_float_t v_nan = NAN;\n    json::number_float_t v_infinity = INFINITY;\n\n    // create values of different floating-point types\n    float n_float = 42.23;\n    float n_float_nan = 1.0f / 0.0f;\n    double n_double = 23.42;\n\n    // create (floating point) JSON numbers\n    json j_ok(v_ok);\n    json j_nan(v_nan);\n    json j_infinity(v_infinity);\n    json j_float(n_float);\n    json j_float_nan(n_float_nan);\n    json j_double(n_double);\n\n    // serialize the JSON numbers\n    std::cout << j_integer_t << '\\n';\n    std::cout << j_unsigned_t << '\\n';\n    std::cout << j_enum << '\\n';\n    std::cout << j_short << '\\n';\n    std::cout << j_int << '\\n';\n    std::cout << j_long << '\\n';\n    std::cout << j_int_least32_t << '\\n';\n    std::cout << j_uint8_t << '\\n';\n    std::cout << j_ok << '\\n';\n    std::cout << j_nan << '\\n';\n    std::cout << j_infinity << '\\n';\n    std::cout << j_float << '\\n';\n    std::cout << j_float_nan << '\\n';\n    std::cout << j_double << \"\\n\\n\";\n\n    // =============\n    // boolean types\n    // =============\n\n    // create boolean values\n    json j_truth = true;\n    json j_falsity = false;\n\n    // serialize the JSON booleans\n    std::cout << j_truth << '\\n';\n    std::cout << j_falsity << '\\n';\n}\n

    Output:

    {\"one\":1,\"two\":2}\n{\"one\":1,\"three\":3,\"two\":2}\n{\"one\":1.2,\"three\":3.4,\"two\":2.3}\n{\"one\":true,\"three\":false,\"two\":true}\n{\"one\":true,\"three\":false,\"two\":true}\n\n[\"one\",\"two\",3,4.5,false]\n[1,2,3,4]\n[10,9,8,7]\n[1.2,2.3,3.4,5.6]\n[true,true,false,true]\n[12345678909876,23456789098765,34567890987654,45678909876543]\n[1,2,3,4]\n[\"four\",\"one\",\"three\",\"two\"]\n[\"four\",\"three\",\"two\",\"one\"]\n[\"four\",\"one\",\"one\",\"two\"]\n[\"four\",\"two\",\"one\",\"one\"]\n\n\"The quick brown fox jumps over the lazy dog.\"\n\"The quick brown fox jumps over the lazy dog.\"\n\"The quick brown fox jumps over the lazy dog.\"\n\n-42\n17\n17\n42\n-23\n1024\n-17\n8\n3.141592653589793\nnull\nnull\n42.22999954223633\nnull\n23.42\n\ntrue\nfalse\n

    Note the output is platform-dependent.

    Example: (5) create a container (array or object) from an initializer list

    The example below shows how JSON values are created from initializer lists.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_empty_init_list = json({});\n    json j_object = { {\"one\", 1}, {\"two\", 2} };\n    json j_array = {1, 2, 3, 4};\n    json j_nested_object = { {\"one\", {1}}, {\"two\", {1, 2}} };\n    json j_nested_array = { {{1}, \"one\"}, {{1, 2}, \"two\"} };\n\n    // serialize the JSON value\n    std::cout << j_empty_init_list << '\\n';\n    std::cout << j_object << '\\n';\n    std::cout << j_array << '\\n';\n    std::cout << j_nested_object << '\\n';\n    std::cout << j_nested_array << '\\n';\n}\n

    Output:

    {}\n{\"one\":1,\"two\":2}\n[1,2,3,4]\n{\"one\":[1],\"two\":[1,2]}\n[[[1],\"one\"],[[1,2],\"two\"]]\n
    Example: (6) construct an array with count copies of given value

    The following code shows examples for creating arrays with several copies of a given value.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create an array by creating copies of a JSON value\n    json value = \"Hello\";\n    json array_0 = json(0, value);\n    json array_1 = json(1, value);\n    json array_5 = json(5, value);\n\n    // serialize the JSON arrays\n    std::cout << array_0 << '\\n';\n    std::cout << array_1 << '\\n';\n    std::cout << array_5 << '\\n';\n}\n

    Output:

    []\n[\"Hello\"]\n[\"Hello\",\"Hello\",\"Hello\",\"Hello\",\"Hello\"]\n
    Example: (7) construct a JSON container given an iterator range

    The example below shows several ways to create JSON values by specifying a subrange with iterators.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_array = {\"alpha\", \"bravo\", \"charly\", \"delta\", \"easy\"};\n    json j_number = 42;\n    json j_object = {{\"one\", \"eins\"}, {\"two\", \"zwei\"}};\n\n    // create copies using iterators\n    json j_array_range(j_array.begin() + 1, j_array.end() - 2);\n    json j_number_range(j_number.begin(), j_number.end());\n    json j_object_range(j_object.begin(), j_object.find(\"two\"));\n\n    // serialize the values\n    std::cout << j_array_range << '\\n';\n    std::cout << j_number_range << '\\n';\n    std::cout << j_object_range << '\\n';\n\n    // example for an exception\n    try\n    {\n        json j_invalid(j_number.begin() + 1, j_number.end());\n    }\n    catch (const json::invalid_iterator& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    [\"bravo\",\"charly\"]\n42\n{\"one\":\"eins\"}\n[json.exception.invalid_iterator.204] iterators out of range\n
    Example: (8) copy constructor

    The following code shows an example for the copy constructor.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON array\n    json j1 = {\"one\", \"two\", 3, 4.5, false};\n\n    // create a copy\n    json j2(j1);\n\n    // serialize the JSON array\n    std::cout << j1 << \" = \" << j2 << '\\n';\n    std::cout << std::boolalpha << (j1 == j2) << '\\n';\n}\n

    Output:

    [\"one\",\"two\",3,4.5,false] = [\"one\",\"two\",3,4.5,false]\ntrue\n
    Example: (9) move constructor

    The code below shows the move constructor explicitly called via std::move.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON value\n    json a = 23;\n\n    // move contents of a to b\n    json b(std::move(a));\n\n    // serialize the JSON arrays\n    std::cout << a << '\\n';\n    std::cout << b << '\\n';\n}\n

    Output:

    null\n23\n
    "},{"location":"api/basic_json/basic_json/#version-history","title":"Version history","text":"
    1. Since version 1.0.0.
    2. Since version 1.0.0.
    3. Since version 2.1.0.
    4. Since version 3.2.0.
    5. Since version 1.0.0.
    6. Since version 1.0.0.
    7. Since version 1.0.0.
    8. Since version 1.0.0.
    9. Since version 1.0.0.
    "},{"location":"api/basic_json/begin/","title":"nlohmann::basic_json::begin","text":"
    iterator begin() noexcept;\nconst_iterator begin() const noexcept;\n

    Returns an iterator to the first element.

    "},{"location":"api/basic_json/begin/#return-value","title":"Return value","text":"

    iterator to the first element

    "},{"location":"api/basic_json/begin/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/begin/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/begin/#examples","title":"Examples","text":"Example

    The following code shows an example for begin().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create an array value\n    json array = {1, 2, 3, 4, 5};\n\n    // get an iterator to the first element\n    json::iterator it = array.begin();\n\n    // serialize the element that the iterator points to\n    std::cout << *it << '\\n';\n}\n

    Output:

    1\n
    "},{"location":"api/basic_json/begin/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/binary/","title":"nlohmann::basic_json::binary","text":"
    // (1)\nstatic basic_json binary(const typename binary_t::container_type& init);\nstatic basic_json binary(typename binary_t::container_type&& init);\n\n// (2)\nstatic basic_json binary(const typename binary_t::container_type& init,\n                         std::uint8_t subtype);\nstatic basic_json binary(typename binary_t::container_type&& init,\n                         std::uint8_t subtype);\n
    1. Creates a JSON binary array value from a given binary container.
    2. Creates a JSON binary array value from a given binary container with subtype.

    Binary values are part of various binary formats, such as CBOR, MessagePack, and BSON. This constructor is used to create a value for serialization to those formats.

    "},{"location":"api/basic_json/binary/#parameters","title":"Parameters","text":"init (in) container containing bytes to use as binary type subtype (in) subtype to use in CBOR, MessagePack, and BSON"},{"location":"api/basic_json/binary/#return-value","title":"Return value","text":"

    JSON binary array value

    "},{"location":"api/basic_json/binary/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/binary/#complexity","title":"Complexity","text":"

    Linear in the size of init; constant for typename binary_t::container_type&& init versions.

    "},{"location":"api/basic_json/binary/#notes","title":"Notes","text":"

    Note, this function exists because of the difficulty in correctly specifying the correct template overload in the standard value ctor, as both JSON arrays and JSON binary arrays are backed with some form of a std::vector. Because JSON binary arrays are a non-standard extension it was decided that it would be best to prevent automatic initialization of a binary array type, for backwards compatibility and so it does not happen on accident.

    "},{"location":"api/basic_json/binary/#examples","title":"Examples","text":"Example

    The following code shows how to create a binary value.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a binary vector\n    std::vector<std::uint8_t> vec = {0xCA, 0xFE, 0xBA, 0xBE};\n\n    // create a binary JSON value with subtype 42\n    json j = json::binary(vec, 42);\n\n    // output type and subtype\n    std::cout << \"type: \" << j.type_name() << \", subtype: \" << j.get_binary().subtype() << std::endl;\n}\n

    Output:

    type: binary, subtype: 42\n
    "},{"location":"api/basic_json/binary/#version-history","title":"Version history","text":"
    • Added in version 3.8.0.
    "},{"location":"api/basic_json/binary_t/","title":"nlohmann::basic_json::binary_t","text":"
    using binary_t = byte_container_with_subtype<BinaryType>;\n

    This type is a type designed to carry binary data that appears in various serialized formats, such as CBOR's Major Type 2, MessagePack's bin, and BSON's generic binary subtype. This type is NOT a part of standard JSON and exists solely for compatibility with these binary types. As such, it is simply defined as an ordered sequence of zero or more byte values.

    Additionally, as an implementation detail, the subtype of the binary data is carried around as a std::uint64_t, which is compatible with both of the binary data formats that use binary subtyping, (though the specific numbering is incompatible with each other, and it is up to the user to translate between them). The subtype is added to BinaryType via the helper type byte_container_with_subtype.

    CBOR's RFC 7049 describes this type as:

    Major type 2: a byte string. The string's length in bytes is represented following the rules for positive integers (major type 0).

    MessagePack's documentation on the bin type family describes this type as:

    Bin format family stores a byte array in 2, 3, or 5 bytes of extra bytes in addition to the size of the byte array.

    BSON's specifications describe several binary types; however, this type is intended to represent the generic binary type which has the description:

    Generic binary subtype - This is the most commonly used binary subtype and should be the 'default' for drivers and tools.

    None of these impose any limitations on the internal representation other than the basic unit of storage be some type of array whose parts are decomposable into bytes.

    The default representation of this binary format is a std::vector<std::uint8_t>, which is a very common way to represent a byte array in modern C++.

    "},{"location":"api/basic_json/binary_t/#template-parameters","title":"Template parameters","text":"BinaryType container type to store arrays"},{"location":"api/basic_json/binary_t/#notes","title":"Notes","text":""},{"location":"api/basic_json/binary_t/#default-type","title":"Default type","text":"

    The default values for BinaryType is std::vector<std::uint8_t>.

    "},{"location":"api/basic_json/binary_t/#storage","title":"Storage","text":"

    Binary Arrays are stored as pointers in a basic_json type. That is, for any access to array values, a pointer of the type binary_t* must be dereferenced.

    "},{"location":"api/basic_json/binary_t/#notes-on-subtypes","title":"Notes on subtypes","text":"
    • CBOR

      • Binary values are represented as byte strings. Subtypes are written as tags.
    • MessagePack

      • If a subtype is given and the binary array contains exactly 1, 2, 4, 8, or 16 elements, the fixext family (fixext1, fixext2, fixext4, fixext8) is used. For other sizes, the ext family (ext8, ext16, ext32) is used. The subtype is then added as signed 8-bit integer.
      • If no subtype is given, the bin family (bin8, bin16, bin32) is used.
    • BSON

      • If a subtype is given, it is used and added as unsigned 8-bit integer.
      • If no subtype is given, the generic binary subtype 0x00 is used.
    "},{"location":"api/basic_json/binary_t/#examples","title":"Examples","text":"Example

    The following code shows that binary_t is by default, a typedef to nlohmann::byte_container_with_subtype<std::vector<std::uint8_t>>.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::boolalpha << std::is_same<nlohmann::byte_container_with_subtype<std::vector<std::uint8_t>>, json::binary_t>::value << std::endl;\n}\n

    Output:

    true\n
    "},{"location":"api/basic_json/binary_t/#see-also","title":"See also","text":"
    • byte_container_with_subtype
    "},{"location":"api/basic_json/binary_t/#version-history","title":"Version history","text":"
    • Added in version 3.8.0. Changed type of subtype to std::uint64_t in version 3.10.0.
    "},{"location":"api/basic_json/boolean_t/","title":"nlohmann::basic_json::boolean_t","text":"
    using boolean_t = BooleanType;\n

    The type used to store JSON booleans.

    RFC 8259 implicitly describes a boolean as a type which differentiates the two literals true and false.

    To store objects in C++, a type is defined by the template parameter BooleanType which chooses the type to use.

    "},{"location":"api/basic_json/boolean_t/#notes","title":"Notes","text":""},{"location":"api/basic_json/boolean_t/#default-type","title":"Default type","text":"

    With the default values for BooleanType (bool), the default value for boolean_t is bool.

    "},{"location":"api/basic_json/boolean_t/#storage","title":"Storage","text":"

    Boolean values are stored directly inside a basic_json type.

    "},{"location":"api/basic_json/boolean_t/#examples","title":"Examples","text":"Example

    The following code shows that boolean_t is by default, a typedef to bool.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::boolalpha << std::is_same<bool, json::boolean_t>::value << std::endl;\n}\n

    Output:

    true\n
    "},{"location":"api/basic_json/boolean_t/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/cbegin/","title":"nlohmann::basic_json::cbegin","text":"
    const_iterator cbegin() const noexcept;\n

    Returns an iterator to the first element.

    "},{"location":"api/basic_json/cbegin/#return-value","title":"Return value","text":"

    iterator to the first element

    "},{"location":"api/basic_json/cbegin/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/cbegin/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/cbegin/#examples","title":"Examples","text":"Example

    The following code shows an example for cbegin().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create an array value\n    const json array = {1, 2, 3, 4, 5};\n\n    // get an iterator to the first element\n    json::const_iterator it = array.cbegin();\n\n    // serialize the element that the iterator points to\n    std::cout << *it << '\\n';\n}\n

    Output:

    1\n
    "},{"location":"api/basic_json/cbegin/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/cbor_tag_handler_t/","title":"nlohmann::basic_json::cbor_tag_handler_t","text":"
    enum class cbor_tag_handler_t\n{\n    error,\n    ignore,\n    store\n};\n

    This enumeration is used in the from_cbor function to choose how to treat tags:

    error throw a parse_error exception in case of a tag ignore ignore tags store store tagged values as binary container with subtype (for bytes 0xd8..0xdb)"},{"location":"api/basic_json/cbor_tag_handler_t/#examples","title":"Examples","text":"Example

    The example below shows how the different values of the cbor_tag_handler_t influence the behavior of from_cbor when reading a tagged byte string.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // tagged byte string\n    std::vector<std::uint8_t> vec = {{0xd8, 0x42, 0x44, 0xcA, 0xfe, 0xba, 0xbe}};\n\n    // cbor_tag_handler_t::error throws\n    try\n    {\n        auto b_throw_on_tag = json::from_cbor(vec, true, true, json::cbor_tag_handler_t::error);\n    }\n    catch (const json::parse_error& e)\n    {\n        std::cout << e.what() << std::endl;\n    }\n\n    // cbor_tag_handler_t::ignore ignores the tag\n    auto b_ignore_tag = json::from_cbor(vec, true, true, json::cbor_tag_handler_t::ignore);\n    std::cout << b_ignore_tag << std::endl;\n\n    // cbor_tag_handler_t::store stores the tag as binary subtype\n    auto b_store_tag = json::from_cbor(vec, true, true, json::cbor_tag_handler_t::store);\n    std::cout << b_store_tag << std::endl;\n}\n

    Output:

    [json.exception.parse_error.112] parse error at byte 1: syntax error while parsing CBOR value: invalid byte: 0xD8\n{\"bytes\":[202,254,186,190],\"subtype\":null}\n{\"bytes\":[202,254,186,190],\"subtype\":66}\n
    "},{"location":"api/basic_json/cbor_tag_handler_t/#version-history","title":"Version history","text":"
    • Added in version 3.9.0. Added value store in 3.10.0.
    "},{"location":"api/basic_json/cend/","title":"nlohmann::basic_json::cend","text":"
    const_iterator cend() const noexcept;\n

    Returns an iterator to one past the last element.

    "},{"location":"api/basic_json/cend/#return-value","title":"Return value","text":"

    iterator one past the last element

    "},{"location":"api/basic_json/cend/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/cend/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/cend/#examples","title":"Examples","text":"Example

    The following code shows an example for cend().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create an array value\n    json array = {1, 2, 3, 4, 5};\n\n    // get an iterator to one past the last element\n    json::const_iterator it = array.cend();\n\n    // decrement the iterator to point to the last element\n    --it;\n\n    // serialize the element that the iterator points to\n    std::cout << *it << '\\n';\n}\n

    Output:

    5\n
    "},{"location":"api/basic_json/cend/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/clear/","title":"nlohmann::basic_json::clear","text":"
    void clear() noexcept;\n

    Clears the content of a JSON value and resets it to the default value as if basic_json(value_t) would have been called with the current value type from type():

    Value type initial value null null boolean false string \"\" number 0 binary An empty byte vector object {} array []

    Has the same effect as calling

    *this = basic_json(type());\n
    "},{"location":"api/basic_json/clear/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/basic_json/clear/#complexity","title":"Complexity","text":"

    Linear in the size of the JSON value.

    "},{"location":"api/basic_json/clear/#notes","title":"Notes","text":"

    All iterators, pointers and references related to this container are invalidated.

    "},{"location":"api/basic_json/clear/#examples","title":"Examples","text":"Example

    The example below shows the effect of clear() to different JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n\n    // call clear()\n    j_null.clear();\n    j_boolean.clear();\n    j_number_integer.clear();\n    j_number_float.clear();\n    j_object.clear();\n    j_array.clear();\n    j_string.clear();\n\n    // serialize the cleared values()\n    std::cout << j_null << '\\n';\n    std::cout << j_boolean << '\\n';\n    std::cout << j_number_integer << '\\n';\n    std::cout << j_number_float << '\\n';\n    std::cout << j_object << '\\n';\n    std::cout << j_array << '\\n';\n    std::cout << j_string << '\\n';\n}\n

    Output:

    null\nfalse\n0\n0.0\n{}\n[]\n\"\"\n
    "},{"location":"api/basic_json/clear/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Added support for binary types in version 3.8.0.
    "},{"location":"api/basic_json/contains/","title":"nlohmann::basic_json::contains","text":"
    // (1)\nbool contains(const typename object_t::key_type& key) const;\n\n// (2)\ntemplate<typename KeyType>\nbool contains(KeyType&& key) const;\n\n// (3)\nbool contains(const json_pointer& ptr) const;\n
    1. Check whether an element exists in a JSON object with a key equivalent to key. If the element is not found or the JSON value is not an object, false is returned.
    2. See 1. This overload is only available if KeyType is comparable with typename object_t::key_type and typename object_comparator_t::is_transparent denotes a type.
    3. Check whether the given JSON pointer ptr can be resolved in the current JSON value.
    "},{"location":"api/basic_json/contains/#template-parameters","title":"Template parameters","text":"KeyType A type for an object key other than json_pointer that is comparable with string_t using object_comparator_t. This can also be a string view (C++17)."},{"location":"api/basic_json/contains/#parameters","title":"Parameters","text":"key (in) key value to check its existence. ptr (in) JSON pointer to check its existence."},{"location":"api/basic_json/contains/#return-value","title":"Return value","text":"
    1. true if an element with specified key exists. If no such element with such key is found or the JSON value is not an object, false is returned.
    2. See 1.
    3. true if the JSON pointer can be resolved to a stored value, false otherwise.
    "},{"location":"api/basic_json/contains/#exception-safety","title":"Exception safety","text":"

    Strong exception safety: if an exception occurs, the original value stays intact.

    "},{"location":"api/basic_json/contains/#exceptions","title":"Exceptions","text":"
    1. The function does not throw exceptions.
    2. The function does not throw exceptions.
    3. The function can throw the following exceptions:
      • Throws parse_error.106 if an array index begins with 0.
      • Throws parse_error.109 if an array index was not a number.
    "},{"location":"api/basic_json/contains/#complexity","title":"Complexity","text":"

    Logarithmic in the size of the JSON object.

    "},{"location":"api/basic_json/contains/#notes","title":"Notes","text":"
    • This method always returns false when executed on a JSON type that is not an object.
    • This method can be executed on any JSON value type.

    Postconditions

    If j.contains(x) returns true for a key or JSON pointer x, then it is safe to call j[x].

    "},{"location":"api/basic_json/contains/#examples","title":"Examples","text":"Example: (1) check with key

    The example shows how contains() is used.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create some JSON values\n    json j_object = R\"( {\"key\": \"value\"} )\"_json;\n    json j_array = R\"( [1, 2, 3] )\"_json;\n\n    // call contains\n    std::cout << std::boolalpha <<\n              \"j_object contains 'key': \" << j_object.contains(\"key\") << '\\n' <<\n              \"j_object contains 'another': \" << j_object.contains(\"another\") << '\\n' <<\n              \"j_array contains 'key': \" << j_array.contains(\"key\") << std::endl;\n}\n

    Output:

    j_object contains 'key': true\nj_object contains 'another': false\nj_array contains 'key': false\n
    Example: (2) check with key using string_view

    The example shows how contains() is used.

    #include <iostream>\n#include <string_view>\n#include <nlohmann/json.hpp>\n\nusing namespace std::string_view_literals;\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create some JSON values\n    json j_object = R\"( {\"key\": \"value\"} )\"_json;\n    json j_array = R\"( [1, 2, 3] )\"_json;\n\n    // call contains\n    std::cout << std::boolalpha <<\n              \"j_object contains 'key': \" << j_object.contains(\"key\"sv) << '\\n' <<\n              \"j_object contains 'another': \" << j_object.contains(\"another\"sv) << '\\n' <<\n              \"j_array contains 'key': \" << j_array.contains(\"key\"sv) << std::endl;\n}\n

    Output:

    j_object contains 'key': true\nj_object contains 'another': false\nj_array contains 'key': false\n
    Example: (3) check with JSON pointer

    The example shows how contains() is used.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create a JSON value\n    json j =\n    {\n        {\"number\", 1}, {\"string\", \"foo\"}, {\"array\", {1, 2}}\n    };\n\n    std::cout << std::boolalpha\n              << j.contains(\"/number\"_json_pointer) << '\\n'\n              << j.contains(\"/string\"_json_pointer) << '\\n'\n              << j.contains(\"/array\"_json_pointer) << '\\n'\n              << j.contains(\"/array/1\"_json_pointer) << '\\n'\n              << j.contains(\"/array/-\"_json_pointer) << '\\n'\n              << j.contains(\"/array/4\"_json_pointer) << '\\n'\n              << j.contains(\"/baz\"_json_pointer) << std::endl;\n\n    try\n    {\n        // try to use an array index with leading '0'\n        j.contains(\"/array/01\"_json_pointer);\n    }\n    catch (const json::parse_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    try\n    {\n        // try to use an array index that is not a number\n        j.contains(\"/array/one\"_json_pointer);\n    }\n    catch (const json::parse_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    true\ntrue\ntrue\ntrue\nfalse\nfalse\nfalse\n
    "},{"location":"api/basic_json/contains/#version-history","title":"Version history","text":"
    1. Added in version 3.11.0.
    2. Added in version 3.6.0. Extended template KeyType to support comparable types in version 3.11.0.
    3. Added in version 3.7.0.
    "},{"location":"api/basic_json/count/","title":"nlohmann::basic_json::count","text":"
    // (1)\nsize_type count(const typename object_t::key_type& key) const;\n\n// (2)\ntemplate<typename KeyType>\nsize_type count(KeyType&& key) const;\n
    1. Returns the number of elements with key key. If ObjectType is the default std::map type, the return value will always be 0 (key was not found) or 1 (key was found).
    2. See 1. This overload is only available if KeyType is comparable with typename object_t::key_type and typename object_comparator_t::is_transparent denotes a type.
    "},{"location":"api/basic_json/count/#template-parameters","title":"Template parameters","text":"KeyType A type for an object key other than json_pointer that is comparable with string_t using object_comparator_t. This can also be a string view (C++17)."},{"location":"api/basic_json/count/#parameters","title":"Parameters","text":"key (in) key value of the element to count."},{"location":"api/basic_json/count/#return-value","title":"Return value","text":"

    Number of elements with key key. If the JSON value is not an object, the return value will be 0.

    "},{"location":"api/basic_json/count/#exception-safety","title":"Exception safety","text":"

    Strong exception safety: if an exception occurs, the original value stays intact.

    "},{"location":"api/basic_json/count/#complexity","title":"Complexity","text":"

    Logarithmic in the size of the JSON object.

    "},{"location":"api/basic_json/count/#notes","title":"Notes","text":"

    This method always returns 0 when executed on a JSON type that is not an object.

    "},{"location":"api/basic_json/count/#examples","title":"Examples","text":"Example: (1) count number of elements

    The example shows how count() is used.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n\n    // call count()\n    auto count_two = j_object.count(\"two\");\n    auto count_three = j_object.count(\"three\");\n\n    // print values\n    std::cout << \"number of elements with key \\\"two\\\": \" << count_two << '\\n';\n    std::cout << \"number of elements with key \\\"three\\\": \" << count_three << '\\n';\n}\n

    Output:

    number of elements with key \"two\": 1\nnumber of elements with key \"three\": 0\n
    Example: (2) count number of elements using string_view

    The example shows how count() is used.

    #include <iostream>\n#include <string_view>\n#include <nlohmann/json.hpp>\n\nusing namespace std::string_view_literals;\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n\n    // call count()\n    auto count_two = j_object.count(\"two\"sv);\n    auto count_three = j_object.count(\"three\"sv);\n\n    // print values\n    std::cout << \"number of elements with key \\\"two\\\": \" << count_two << '\\n';\n    std::cout << \"number of elements with key \\\"three\\\": \" << count_three << '\\n';\n}\n

    Output:

    number of elements with key \"two\": 1\nnumber of elements with key \"three\": 0\n
    "},{"location":"api/basic_json/count/#version-history","title":"Version history","text":"
    1. Added in version 3.11.0.
    2. Added in version 1.0.0. Changed parameter key type to KeyType&& in version 3.11.0.
    "},{"location":"api/basic_json/crbegin/","title":"nlohmann::basic_json::crbegin","text":"
    const_reverse_iterator crbegin() const noexcept;\n

    Returns an iterator to the reverse-beginning; that is, the last element.

    "},{"location":"api/basic_json/crbegin/#return-value","title":"Return value","text":"

    reverse iterator to the first element

    "},{"location":"api/basic_json/crbegin/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/crbegin/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/crbegin/#examples","title":"Examples","text":"Example

    The following code shows an example for crbegin().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create an array value\n    json array = {1, 2, 3, 4, 5};\n\n    // get an iterator to the reverse-beginning\n    json::const_reverse_iterator it = array.crbegin();\n\n    // serialize the element that the iterator points to\n    std::cout << *it << '\\n';\n}\n

    Output:

    5\n
    "},{"location":"api/basic_json/crbegin/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/crend/","title":"nlohmann::basic_json::crend","text":"
    const_reverse_iterator crend() const noexcept;\n

    Returns an iterator to the reverse-end; that is, one before the first element. This element acts as a placeholder, attempting to access it results in undefined behavior.

    "},{"location":"api/basic_json/crend/#return-value","title":"Return value","text":"

    reverse iterator to the element following the last element

    "},{"location":"api/basic_json/crend/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/crend/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/crend/#examples","title":"Examples","text":"Example

    The following code shows an example for eend().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create an array value\n    json array = {1, 2, 3, 4, 5};\n\n    // get an iterator to the reverse-end\n    json::const_reverse_iterator it = array.crend();\n\n    // increment the iterator to point to the first element\n    --it;\n\n    // serialize the element that the iterator points to\n    std::cout << *it << '\\n';\n}\n

    Output:

    1\n
    "},{"location":"api/basic_json/crend/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/default_object_comparator_t/","title":"nlohmann::basic_json::default_object_comparator_t","text":"
    using default_object_comparator_t = std::less<StringType>;  // until C++14\n\nusing default_object_comparator_t = std::less<>;            // since C++14\n

    The default comparator used by object_t.

    Since C++14 a transparent comparator is used which prevents unnecessary string construction when looking up a key in an object.

    The actual comparator used depends on object_t and can be obtained via object_comparator_t.

    "},{"location":"api/basic_json/default_object_comparator_t/#examples","title":"Examples","text":"Example

    The example below demonstrates the default comparator.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::boolalpha\n              << \"one < two : \" << json::default_object_comparator_t{}(\"one\", \"two\") << \"\\n\"\n              << \"three < four : \" << json::default_object_comparator_t{}(\"three\", \"four\") << std::endl;\n}\n

    Output:

    one < two : true\nthree < four : false\n
    "},{"location":"api/basic_json/default_object_comparator_t/#version-history","title":"Version history","text":"
    • Added in version 3.11.0.
    "},{"location":"api/basic_json/diff/","title":"nlohmann::basic_json::diff","text":"
    static basic_json diff(const basic_json& source,\n                       const basic_json& target);\n

    Creates a JSON Patch so that value source can be changed into the value target by calling patch function.

    For two JSON values source and target, the following code yields always true:

    source.patch(diff(source, target)) == target;\n

    "},{"location":"api/basic_json/diff/#parameters","title":"Parameters","text":"source (in) JSON value to compare from target (in) JSON value to compare against"},{"location":"api/basic_json/diff/#return-value","title":"Return value","text":"

    a JSON patch to convert the source to target

    "},{"location":"api/basic_json/diff/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/diff/#complexity","title":"Complexity","text":"

    Linear in the lengths of source and target.

    "},{"location":"api/basic_json/diff/#notes","title":"Notes","text":"

    Currently, only remove, add, and replace operations are generated.

    "},{"location":"api/basic_json/diff/#examples","title":"Examples","text":"Example

    The following code shows how a JSON patch is created as a diff for two JSON values.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // the source document\n    json source = R\"(\n        {\n            \"baz\": \"qux\",\n            \"foo\": \"bar\"\n        }\n    )\"_json;\n\n    // the target document\n    json target = R\"(\n        {\n            \"baz\": \"boo\",\n            \"hello\": [\n                \"world\"\n            ]\n        }\n    )\"_json;\n\n    // create the patch\n    json patch = json::diff(source, target);\n\n    // roundtrip\n    json patched_source = source.patch(patch);\n\n    // output patch and roundtrip result\n    std::cout << std::setw(4) << patch << \"\\n\\n\"\n              << std::setw(4) << patched_source << std::endl;\n}\n

    Output:

    [\n    {\n        \"op\": \"replace\",\n        \"path\": \"/baz\",\n        \"value\": \"boo\"\n    },\n    {\n        \"op\": \"remove\",\n        \"path\": \"/foo\"\n    },\n    {\n        \"op\": \"add\",\n        \"path\": \"/hello\",\n        \"value\": [\n            \"world\"\n        ]\n    }\n]\n\n{\n    \"baz\": \"boo\",\n    \"hello\": [\n        \"world\"\n    ]\n}\n
    "},{"location":"api/basic_json/diff/#see-also","title":"See also","text":"
    • RFC 6902 (JSON Patch)
    "},{"location":"api/basic_json/diff/#version-history","title":"Version history","text":"
    • Added in version 2.0.0.
    "},{"location":"api/basic_json/dump/","title":"nlohmann::basic_json::dump","text":"
    string_t dump(const int indent = -1,\n              const char indent_char = ' ',\n              const bool ensure_ascii = false,\n              const error_handler_t error_handler = error_handler_t::strict) const;\n

    Serialization function for JSON values. The function tries to mimic Python's json.dumps() function, and currently supports its indent and ensure_ascii parameters.

    "},{"location":"api/basic_json/dump/#parameters","title":"Parameters","text":"indent (in) If indent is nonnegative, then array elements and object members will be pretty-printed with that indent level. An indent level of 0 will only insert newlines. -1 (the default) selects the most compact representation. indent_char (in) The character to use for indentation if indent is greater than 0. The default is (space). ensure_ascii (in) If ensure_ascii is true, all non-ASCII characters in the output are escaped with \\uXXXX sequences, and the result consists of ASCII characters only. error_handler (in) how to react on decoding errors; there are three possible values (see error_handler_t: strict (throws and exception in case a decoding error occurs; default), replace (replace invalid UTF-8 sequences with U+FFFD), and ignore (ignore invalid UTF-8 sequences during serialization; all bytes are copied to the output unchanged))."},{"location":"api/basic_json/dump/#return-value","title":"Return value","text":"

    string containing the serialization of the JSON value

    "},{"location":"api/basic_json/dump/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes to any JSON value.

    "},{"location":"api/basic_json/dump/#exceptions","title":"Exceptions","text":"

    Throws type_error.316 if a string stored inside the JSON value is not UTF-8 encoded and error_handler is set to strict

    "},{"location":"api/basic_json/dump/#complexity","title":"Complexity","text":"

    Linear.

    "},{"location":"api/basic_json/dump/#notes","title":"Notes","text":"

    Binary values are serialized as object containing two keys:

    • \"bytes\": an array of bytes as integers
    • \"subtype\": the subtype as integer or null if the binary has no subtype
    "},{"location":"api/basic_json/dump/#examples","title":"Examples","text":"Example

    The following example shows the effect of different indent, indent_char, and ensure_ascii parameters to the result of the serialization.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hell\u00f6 \ud83d\ude00!\";\n\n    // call dump()\n    std::cout << \"objects:\" << '\\n'\n              << j_object.dump() << \"\\n\\n\"\n              << j_object.dump(-1) << \"\\n\\n\"\n              << j_object.dump(0) << \"\\n\\n\"\n              << j_object.dump(4) << \"\\n\\n\"\n              << j_object.dump(1, '\\t') << \"\\n\\n\";\n\n    std::cout << \"arrays:\" << '\\n'\n              << j_array.dump() << \"\\n\\n\"\n              << j_array.dump(-1) << \"\\n\\n\"\n              << j_array.dump(0) << \"\\n\\n\"\n              << j_array.dump(4) << \"\\n\\n\"\n              << j_array.dump(1, '\\t') << \"\\n\\n\";\n\n    std::cout << \"strings:\" << '\\n'\n              << j_string.dump() << '\\n'\n              << j_string.dump(-1, ' ', true) << '\\n';\n\n    // create JSON value with invalid UTF-8 byte sequence\n    json j_invalid = \"\u00e4\\xA9\u00fc\";\n    try\n    {\n        std::cout << j_invalid.dump() << std::endl;\n    }\n    catch (const json::type_error& e)\n    {\n        std::cout << e.what() << std::endl;\n    }\n\n    std::cout << \"string with replaced invalid characters: \"\n              << j_invalid.dump(-1, ' ', false, json::error_handler_t::replace)\n              << \"\\nstring with ignored invalid characters: \"\n              << j_invalid.dump(-1, ' ', false, json::error_handler_t::ignore)\n              << '\\n';\n}\n

    Output:

    objects:\n{\"one\":1,\"two\":2}\n\n{\"one\":1,\"two\":2}\n\n{\n\"one\": 1,\n\"two\": 2\n}\n\n{\n    \"one\": 1,\n    \"two\": 2\n}\n\n{\n    \"one\": 1,\n    \"two\": 2\n}\n\narrays:\n[1,2,4,8,16]\n\n[1,2,4,8,16]\n\n[\n1,\n2,\n4,\n8,\n16\n]\n\n[\n    1,\n    2,\n    4,\n    8,\n    16\n]\n\n[\n    1,\n    2,\n    4,\n    8,\n    16\n]\n\nstrings:\n\"Hell\u00f6 \ud83d\ude00!\"\n\"Hell\\u00f6 \\ud83d\\ude00!\"\n[json.exception.type_error.316] invalid UTF-8 byte at index 2: 0xA9\nstring with replaced invalid characters: \"\u00e4\ufffd\u00fc\"\nstring with ignored invalid characters: \"\u00e4\u00fc\"\n
    "},{"location":"api/basic_json/dump/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Indentation character indent_char, option ensure_ascii and exceptions added in version 3.0.0.
    • Error handlers added in version 3.4.0.
    • Serialization of binary values added in version 3.8.0.
    "},{"location":"api/basic_json/emplace/","title":"nlohmann::basic_json::emplace","text":"
    template<class... Args>\nstd::pair<iterator, bool> emplace(Args&& ... args);\n

    Inserts a new element into a JSON object constructed in-place with the given args if there is no element with the key in the container. If the function is called on a JSON null value, an empty object is created before appending the value created from args.

    "},{"location":"api/basic_json/emplace/#template-parameters","title":"Template parameters","text":"Args compatible types to create a basic_json object"},{"location":"api/basic_json/emplace/#iterator-invalidation","title":"Iterator invalidation","text":"

    For ordered_json, adding a value to an object can yield a reallocation, in which case all iterators (including the end() iterator) and all references to the elements are invalidated.

    "},{"location":"api/basic_json/emplace/#parameters","title":"Parameters","text":"args (in) arguments to forward to a constructor of basic_json"},{"location":"api/basic_json/emplace/#return-value","title":"Return value","text":"

    a pair consisting of an iterator to the inserted element, or the already-existing element if no insertion happened, and a bool denoting whether the insertion took place.

    "},{"location":"api/basic_json/emplace/#exceptions","title":"Exceptions","text":"

    Throws type_error.311 when called on a type other than JSON object or null; example: \"cannot use emplace() with number\"

    "},{"location":"api/basic_json/emplace/#complexity","title":"Complexity","text":"

    Logarithmic in the size of the container, O(log(size())).

    "},{"location":"api/basic_json/emplace/#examples","title":"Examples","text":"Example

    The example shows how emplace() can be used to add elements to a JSON object. Note how the null value was silently converted to a JSON object. Further note how no value is added if there was already one value stored with the same key.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json object = {{\"one\", 1}, {\"two\", 2}};\n    json null;\n\n    // print values\n    std::cout << object << '\\n';\n    std::cout << null << '\\n';\n\n    // add values\n    auto res1 = object.emplace(\"three\", 3);\n    null.emplace(\"A\", \"a\");\n    null.emplace(\"B\", \"b\");\n\n    // the following call will not add an object, because there is already\n    // a value stored at key \"B\"\n    auto res2 = null.emplace(\"B\", \"c\");\n\n    // print values\n    std::cout << object << '\\n';\n    std::cout << *res1.first << \" \" << std::boolalpha << res1.second << '\\n';\n\n    std::cout << null << '\\n';\n    std::cout << *res2.first << \" \" << std::boolalpha << res2.second << '\\n';\n}\n

    Output:

    {\"one\":1,\"two\":2}\nnull\n{\"one\":1,\"three\":3,\"two\":2}\n3 true\n{\"A\":\"a\",\"B\":\"b\"}\n\"b\" false\n
    "},{"location":"api/basic_json/emplace/#version-history","title":"Version history","text":"
    • Since version 2.0.8.
    "},{"location":"api/basic_json/emplace_back/","title":"nlohmann::basic_json::emplace_back","text":"
    template<class... Args>\nreference emplace_back(Args&& ... args);\n

    Creates a JSON value from the passed parameters args to the end of the JSON value. If the function is called on a JSON null value, an empty array is created before appending the value created from args.

    "},{"location":"api/basic_json/emplace_back/#template-parameters","title":"Template parameters","text":"Args compatible types to create a basic_json object"},{"location":"api/basic_json/emplace_back/#iterator-invalidation","title":"Iterator invalidation","text":"

    By adding an element to the end of the array, a reallocation can happen, in which case all iterators (including the end() iterator) and all references to the elements are invalidated. Otherwise, only the end() iterator is invalidated.

    "},{"location":"api/basic_json/emplace_back/#parameters","title":"Parameters","text":"args (in) arguments to forward to a constructor of basic_json"},{"location":"api/basic_json/emplace_back/#return-value","title":"Return value","text":"

    reference to the inserted element

    "},{"location":"api/basic_json/emplace_back/#exceptions","title":"Exceptions","text":"

    Throws type_error.311 when called on a type other than JSON array or null; example: \"cannot use emplace_back() with number\"

    "},{"location":"api/basic_json/emplace_back/#complexity","title":"Complexity","text":"

    Amortized constant.

    "},{"location":"api/basic_json/emplace_back/#examples","title":"Examples","text":"Example

    The example shows how emplace_back() can be used to add elements to a JSON array. Note how the null value was silently converted to a JSON array.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json array = {1, 2, 3, 4, 5};\n    json null;\n\n    // print values\n    std::cout << array << '\\n';\n    std::cout << null << '\\n';\n\n    // add values\n    array.emplace_back(6);\n    null.emplace_back(\"first\");\n    null.emplace_back(3, \"second\");\n\n    // print values\n    std::cout << array << '\\n';\n    std::cout << null << '\\n';\n}\n

    Output:

    [1,2,3,4,5]\nnull\n[1,2,3,4,5,6]\n[\"first\",[\"second\",\"second\",\"second\"]]\n
    "},{"location":"api/basic_json/emplace_back/#see-also","title":"See also","text":"
    • operator+= add a value to an array/object
    • push_back add a value to an array/object
    "},{"location":"api/basic_json/emplace_back/#version-history","title":"Version history","text":"
    • Since version 2.0.8.
    • Returns reference since 3.7.0.
    "},{"location":"api/basic_json/empty/","title":"nlohmann::basic_json::empty","text":"
    bool empty() const noexcept;\n

    Checks if a JSON value has no elements (i.e. whether its size() is 0).

    "},{"location":"api/basic_json/empty/#return-value","title":"Return value","text":"

    The return value depends on the different types and is defined as follows:

    Value type return value null true boolean false string false number false binary false object result of function object_t::empty() array result of function array_t::empty()"},{"location":"api/basic_json/empty/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/basic_json/empty/#complexity","title":"Complexity","text":"

    Constant, as long as array_t and object_t satisfy the Container concept; that is, their empty() functions have constant complexity.

    "},{"location":"api/basic_json/empty/#possible-implementation","title":"Possible implementation","text":"
    bool empty() const noexcept\n{\n    return size() == 0;\n}\n
    "},{"location":"api/basic_json/empty/#notes","title":"Notes","text":"

    This function does not return whether a string stored as JSON value is empty -- it returns whether the JSON container itself is empty which is false in the case of a string.

    "},{"location":"api/basic_json/empty/#examples","title":"Examples","text":"Example

    The following code uses empty() to check if a JSON object contains any elements.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_object_empty(json::value_t::object);\n    json j_array = {1, 2, 4, 8, 16};\n    json j_array_empty(json::value_t::array);\n    json j_string = \"Hello, world\";\n\n    // call empty()\n    std::cout << std::boolalpha;\n    std::cout << j_null.empty() << '\\n';\n    std::cout << j_boolean.empty() << '\\n';\n    std::cout << j_number_integer.empty() << '\\n';\n    std::cout << j_number_float.empty() << '\\n';\n    std::cout << j_object.empty() << '\\n';\n    std::cout << j_object_empty.empty() << '\\n';\n    std::cout << j_array.empty() << '\\n';\n    std::cout << j_array_empty.empty() << '\\n';\n    std::cout << j_string.empty() << '\\n';\n}\n

    Output:

    true\nfalse\nfalse\nfalse\nfalse\ntrue\nfalse\ntrue\nfalse\n
    "},{"location":"api/basic_json/empty/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Extended to return false for binary types in version 3.8.0.
    "},{"location":"api/basic_json/end/","title":"nlohmann::basic_json::end","text":"
    iterator end() noexcept;\nconst_iterator end() const noexcept;\n

    Returns an iterator to one past the last element.

    "},{"location":"api/basic_json/end/#return-value","title":"Return value","text":"

    iterator one past the last element

    "},{"location":"api/basic_json/end/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/end/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/end/#examples","title":"Examples","text":"Example

    The following code shows an example for end().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create an array value\n    json array = {1, 2, 3, 4, 5};\n\n    // get an iterator to one past the last element\n    json::iterator it = array.end();\n\n    // decrement the iterator to point to the last element\n    --it;\n\n    // serialize the element that the iterator points to\n    std::cout << *it << '\\n';\n}\n

    Output:

    5\n
    "},{"location":"api/basic_json/end/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/end_pos/","title":"nlohmann::basic_json::end_pos","text":"
    #if JSON_DIAGNOSTIC_POSITIONS\nconstexpr std::size_t end_pos() const noexcept;\n#endif\n

    Returns the position immediately following the last character of the JSON string from which the value was parsed from.

    JSON type return value object position after the closing } array position after the closing ] string position after the closing \" number position after the last character boolean position after e null position after l"},{"location":"api/basic_json/end_pos/#return-value","title":"Return value","text":"

    the position of the character following the last character of the given value in the parsed JSON string, if the value was created by the parse function, or std::string::npos if the value was constructed otherwise

    "},{"location":"api/basic_json/end_pos/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/end_pos/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/end_pos/#notes","title":"Notes","text":"

    Note

    The function is only available if macro JSON_DIAGNOSTIC_POSITIONS has been defined to 1 before including the library header.

    Invalidation

    The returned positions are only valid as long as the JSON value is not changed. The positions are not updated when the JSON value is changed.

    "},{"location":"api/basic_json/end_pos/#examples","title":"Examples","text":"Example
    #include <iostream>\n\n#define JSON_DIAGNOSTIC_POSITIONS 1\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::string json_string = R\"(\n    {\n        \"address\": {\n            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\n    }\n    )\";\n    json j = json::parse(json_string);\n\n    std::cout << \"Root diagnostic positions: \\n\";\n    std::cout << \"\\tstart_pos: \" << j.start_pos() << '\\n';\n    std::cout << \"\\tend_pos:\" << j.end_pos() << \"\\n\";\n    std::cout << \"Original string: \\n\";\n    std::cout << \"{\\n        \\\"address\\\": {\\n            \\\"street\\\": \\\"Fake Street\\\",\\n            \\\"housenumber\\\": 1\\n        }\\n    }\" << \"\\n\";\n    std::cout << \"Parsed string: \\n\";\n    std::cout << json_string.substr(j.start_pos(), j.end_pos() - j.start_pos()) << \"\\n\\n\";\n\n    std::cout << \"address diagnostic positions: \\n\";\n    std::cout << \"\\tstart_pos:\" << j[\"address\"].start_pos() << '\\n';\n    std::cout << \"\\tend_pos:\" << j[\"address\"].end_pos() << \"\\n\\n\";\n    std::cout << \"Original string: \\n\";\n    std::cout << \"{            \\\"street\\\": \\\"Fake Street\\\",\\n            \\\"housenumber\\\": 1\\n        }\" << \"\\n\";\n    std::cout << \"Parsed string: \\n\";\n    std::cout << json_string.substr(j[\"address\"].start_pos(), j[\"address\"].end_pos() - j[\"address\"].start_pos()) << \"\\n\\n\";\n\n    std::cout << \"street diagnostic positions: \\n\";\n    std::cout << \"\\tstart_pos:\" << j[\"address\"][\"street\"].start_pos() << '\\n';\n    std::cout << \"\\tend_pos:\" << j[\"address\"][\"street\"].end_pos() << \"\\n\\n\";\n    std::cout << \"Original string: \\n\";\n    std::cout << \"\\\"Fake Street\\\"\" << \"\\n\";\n    std::cout << \"Parsed string: \\n\";\n    std::cout << json_string.substr(j[\"address\"][\"street\"].start_pos(), j[\"address\"][\"street\"].end_pos() - j[\"address\"][\"street\"].start_pos()) << \"\\n\\n\";\n\n    std::cout << \"housenumber diagnostic positions: \\n\";\n    std::cout << \"\\tstart_pos:\" << j[\"address\"][\"housenumber\"].start_pos() << '\\n';\n    std::cout << \"\\tend_pos:\" << j[\"address\"][\"housenumber\"].end_pos() << \"\\n\\n\";\n    std::cout << \"Original string: \\n\";\n    std::cout << \"1\" << \"\\n\";\n    std::cout << \"Parsed string: \\n\";\n    std::cout << json_string.substr(j[\"address\"][\"housenumber\"].start_pos(), j[\"address\"][\"housenumber\"].end_pos() - j[\"address\"][\"housenumber\"].start_pos()) << \"\\n\\n\";\n}\n

    Output:

    Root diagnostic positions: \n    start_pos: 5\n    end_pos:109\nOriginal string: \n{\n        \"address\": {\n            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\n    }\nParsed string: \n{\n        \"address\": {\n            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\n    }\n\naddress diagnostic positions: \n    start_pos:26\n    end_pos:103\n\nOriginal string: \n{            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\nParsed string: \n{\n            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\n\nstreet diagnostic positions: \n    start_pos:50\n    end_pos:63\n\nOriginal string: \n\"Fake Street\"\nParsed string: \n\"Fake Street\"\n\nhousenumber diagnostic positions: \n    start_pos:92\n    end_pos:93\n\nOriginal string: \n1\nParsed string: \n1\n

    The output shows the start/end positions of all the objects and fields in the JSON string.

    "},{"location":"api/basic_json/end_pos/#see-also","title":"See also","text":"
    • start_pos to access the start position
    • JSON_DIAGNOSTIC_POSITIONS for an overview of the diagnostic positions
    "},{"location":"api/basic_json/end_pos/#version-history","title":"Version history","text":"
    • Added in version 3.12.0.
    "},{"location":"api/basic_json/erase/","title":"nlohmann::basic_json::erase","text":"
    // (1)\niterator erase(iterator pos);\nconst_iterator erase(const_iterator pos);\n\n// (2)\niterator erase(iterator first, iterator last);\nconst_iterator erase(const_iterator first, const_iterator last);\n\n// (3)\nsize_type erase(const typename object_t::key_type& key);\n\n// (4)\ntemplate<typename KeyType>\nsize_type erase(KeyType&& key);\n\n// (5)\nvoid erase(const size_type idx);\n
    1. Removes an element from a JSON value specified by iterator pos. The iterator pos must be valid and dereferenceable. Thus, the end() iterator (which is valid, but is not dereferenceable) cannot be used as a value for pos.

      If called on a primitive type other than null, the resulting JSON value will be null.

    2. Remove an element range specified by [first; last) from a JSON value. The iterator first does not need to be dereferenceable if first == last: erasing an empty range is a no-op.

      If called on a primitive type other than null, the resulting JSON value will be null.

    3. Removes an element from a JSON object by key.

    4. See 3. This overload is only available if KeyType is comparable with typename object_t::key_type and typename object_comparator_t::is_transparent denotes a type.

    5. Removes an element from a JSON array by index.

    "},{"location":"api/basic_json/erase/#template-parameters","title":"Template parameters","text":"KeyType A type for an object key other than json_pointer that is comparable with string_t using object_comparator_t. This can also be a string view (C++17)."},{"location":"api/basic_json/erase/#parameters","title":"Parameters","text":"pos (in) iterator to the element to remove first (in) iterator to the beginning of the range to remove last (in) iterator past the end of the range to remove key (in) object key of the elements to remove idx (in) array index of the element to remove"},{"location":"api/basic_json/erase/#return-value","title":"Return value","text":"
    1. Iterator following the last removed element. If the iterator pos refers to the last element, the end() iterator is returned.
    2. Iterator following the last removed element. If the iterator last refers to the last element, the end() iterator is returned.
    3. Number of elements removed. If ObjectType is the default std::map type, the return value will always be 0 (key was not found) or 1 (key was found).
    4. See 3.
    5. (none)
    "},{"location":"api/basic_json/erase/#exception-safety","title":"Exception safety","text":"

    Strong exception safety: if an exception occurs, the original value stays intact.

    "},{"location":"api/basic_json/erase/#exceptions","title":"Exceptions","text":"
    1. The function can throw the following exceptions:
      • Throws type_error.307 if called on a null value; example: \"cannot use erase() with null\"
      • Throws invalid_iterator.202 if called on an iterator which does not belong to the current JSON value; example: \"iterator does not fit current value\"
      • Throws invalid_iterator.205 if called on a primitive type with invalid iterator (i.e., any iterator which is not begin()); example: \"iterator out of range\"
    2. The function can throw the following exceptions:
      • Throws type_error.307 if called on a null value; example: \"cannot use erase() with null\"
      • Throws invalid_iterator.203 if called on iterators which does not belong to the current JSON value; example: \"iterators do not fit current value\"
      • Throws invalid_iterator.204 if called on a primitive type with invalid iterators (i.e., if first != begin() and last != end()); example: \"iterators out of range\"
    3. The function can throw the following exceptions:
      • Throws type_error.307 when called on a type other than JSON object; example: \"cannot use erase() with null\"
    4. See 3.
    5. The function can throw the following exceptions:
      • Throws type_error.307 when called on a type other than JSON object; example: \"cannot use erase() with null\"
      • Throws out_of_range.401 when idx >= size(); example: \"array index 17 is out of range\"
    "},{"location":"api/basic_json/erase/#complexity","title":"Complexity","text":"
    1. The complexity depends on the type:
      • objects: amortized constant
      • arrays: linear in distance between pos and the end of the container
      • strings and binary: linear in the length of the member
      • other types: constant
    2. The complexity depends on the type:
      • objects: log(size()) + std::distance(first, last)
      • arrays: linear in the distance between first and last, plus linear in the distance between last and end of the container
      • strings and binary: linear in the length of the member
      • other types: constant
    3. log(size()) + count(key)
    4. log(size()) + count(key)
    5. Linear in distance between idx and the end of the container.
    "},{"location":"api/basic_json/erase/#notes","title":"Notes","text":"
    1. Invalidates iterators and references at or after the point of the erase, including the end() iterator.
    2. (none)
    3. References and iterators to the erased elements are invalidated. Other references and iterators are not affected.
    4. See 3.
    5. (none)
    "},{"location":"api/basic_json/erase/#examples","title":"Examples","text":"Example: (1) remove element given an iterator

    The example shows the effect of erase() for different JSON types using an iterator.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n\n    // call erase()\n    j_boolean.erase(j_boolean.begin());\n    j_number_integer.erase(j_number_integer.begin());\n    j_number_float.erase(j_number_float.begin());\n    j_object.erase(j_object.find(\"two\"));\n    j_array.erase(j_array.begin() + 2);\n    j_string.erase(j_string.begin());\n\n    // print values\n    std::cout << j_boolean << '\\n';\n    std::cout << j_number_integer << '\\n';\n    std::cout << j_number_float << '\\n';\n    std::cout << j_object << '\\n';\n    std::cout << j_array << '\\n';\n    std::cout << j_string << '\\n';\n}\n

    Output:

    null\nnull\nnull\n{\"one\":1}\n[1,2,8,16]\nnull\n
    Example: (2) remove elements given an iterator range

    The example shows the effect of erase() for different JSON types using an iterator range.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n\n    // call erase()\n    j_boolean.erase(j_boolean.begin(), j_boolean.end());\n    j_number_integer.erase(j_number_integer.begin(), j_number_integer.end());\n    j_number_float.erase(j_number_float.begin(), j_number_float.end());\n    j_object.erase(j_object.find(\"two\"), j_object.end());\n    j_array.erase(j_array.begin() + 1, j_array.begin() + 3);\n    j_string.erase(j_string.begin(), j_string.end());\n\n    // print values\n    std::cout << j_boolean << '\\n';\n    std::cout << j_number_integer << '\\n';\n    std::cout << j_number_float << '\\n';\n    std::cout << j_object << '\\n';\n    std::cout << j_array << '\\n';\n    std::cout << j_string << '\\n';\n}\n

    Output:

    null\nnull\nnull\n{\"one\":1}\n[1,8,16]\nnull\n
    Example: (3) remove element from a JSON object given a key

    The example shows the effect of erase() for different JSON types using an object key.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n\n    // call erase()\n    auto count_one = j_object.erase(\"one\");\n    auto count_three = j_object.erase(\"three\");\n\n    // print values\n    std::cout << j_object << '\\n';\n    std::cout << count_one << \" \" << count_three << '\\n';\n}\n

    Output:

    {\"two\":2}\n1 0\n
    Example: (4) remove element from a JSON object given a key using string_view

    The example shows the effect of erase() for different JSON types using an object key.

    #include <iostream>\n#include <string_view>\n#include <nlohmann/json.hpp>\n\nusing namespace std::string_view_literals;\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n\n    // call erase()\n    auto count_one = j_object.erase(\"one\"sv);\n    auto count_three = j_object.erase(\"three\"sv);\n\n    // print values\n    std::cout << j_object << '\\n';\n    std::cout << count_one << \" \" << count_three << '\\n';\n}\n

    Output:

    {\"two\":2}\n1 0\n
    Example: (5) remove element from a JSON array given an index

    The example shows the effect of erase() using an array index.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON array\n    json j_array = {0, 1, 2, 3, 4, 5};\n\n    // call erase()\n    j_array.erase(2);\n\n    // print values\n    std::cout << j_array << '\\n';\n}\n

    Output:

    [0,1,3,4,5]\n
    "},{"location":"api/basic_json/erase/#version-history","title":"Version history","text":"
    1. Added in version 1.0.0. Added support for binary types in version 3.8.0.
    2. Added in version 1.0.0. Added support for binary types in version 3.8.0.
    3. Added in version 1.0.0.
    4. Added in version 3.11.0.
    5. Added in version 1.0.0.
    "},{"location":"api/basic_json/error_handler_t/","title":"nlohmann::basic_json::error_handler_t","text":"
    enum class error_handler_t {\n    strict,\n    replace,\n    ignore\n};\n

    This enumeration is used in the dump function to choose how to treat decoding errors while serializing a basic_json value. Three values are differentiated:

    strict throw a type_error exception in case of invalid UTF-8 replace replace invalid UTF-8 sequences with U+FFFD (\ufffd REPLACEMENT CHARACTER) ignore ignore invalid UTF-8 sequences; all bytes are copied to the output unchanged"},{"location":"api/basic_json/error_handler_t/#examples","title":"Examples","text":"Example

    The example below shows how the different values of the error_handler_t influence the behavior of dump when reading serializing an invalid UTF-8 sequence.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON value with invalid UTF-8 byte sequence\n    json j_invalid = \"\u00e4\\xA9\u00fc\";\n    try\n    {\n        std::cout << j_invalid.dump() << std::endl;\n    }\n    catch (const json::type_error& e)\n    {\n        std::cout << e.what() << std::endl;\n    }\n\n    std::cout << \"string with replaced invalid characters: \"\n              << j_invalid.dump(-1, ' ', false, json::error_handler_t::replace)\n              << \"\\nstring with ignored invalid characters: \"\n              << j_invalid.dump(-1, ' ', false, json::error_handler_t::ignore)\n              << '\\n';\n}\n

    Output:

    [json.exception.type_error.316] invalid UTF-8 byte at index 2: 0xA9\nstring with replaced invalid characters: \"\u00e4\ufffd\u00fc\"\nstring with ignored invalid characters: \"\u00e4\u00fc\"\n
    "},{"location":"api/basic_json/error_handler_t/#version-history","title":"Version history","text":"
    • Added in version 3.4.0.
    "},{"location":"api/basic_json/exception/","title":"nlohmann::basic_json::exception","text":"
    class exception : public std::exception;\n

    This class is an extension of std::exception objects with a member id for exception ids. It is used as the base class for all exceptions thrown by the basic_json class. This class can hence be used as \"wildcard\" to catch exceptions, see example below.

    classDiagram\n  direction LR\n\n    class std_exception [\"std::exception\"] {\n        <<interface>>\n    }\n\n    class json_exception [\"basic_json::exception\"] {\n        +const int id\n        +const char* what() const\n    }\n\n    class json_parse_error [\"basic_json::parse_error\"] {\n        +const std::size_t byte\n    }\n\n    class json_invalid_iterator [\"basic_json::invalid_iterator\"]\n    class json_type_error [\"basic_json::type_error\"]\n    class json_out_of_range [\"basic_json::out_of_range\"]\n    class json_other_error [\"basic_json::other_error\"]\n\n    std_exception <|-- json_exception\n    json_exception <|-- json_parse_error\n    json_exception <|-- json_invalid_iterator\n    json_exception <|-- json_type_error\n    json_exception <|-- json_out_of_range\n    json_exception <|-- json_other_error\n\n    style json_exception fill:#CCCCFF

    Subclasses:

    • parse_error for exceptions indicating a parse error
    • invalid_iterator for exceptions indicating errors with iterators
    • type_error for exceptions indicating executing a member function with a wrong type
    • out_of_range for exceptions indicating access out of the defined range
    • other_error for exceptions indicating other library errors
    "},{"location":"api/basic_json/exception/#member-functions","title":"Member functions","text":"
    • what - returns explanatory string
    "},{"location":"api/basic_json/exception/#member-variables","title":"Member variables","text":"
    • id - the id of the exception
    "},{"location":"api/basic_json/exception/#notes","title":"Notes","text":"

    To have nothrow-copy-constructible exceptions, we internally use std::runtime_error which can cope with arbitrary-length error messages. Intermediate strings are built with static functions and then passed to the actual constructor.

    "},{"location":"api/basic_json/exception/#examples","title":"Examples","text":"Example

    The following code shows how arbitrary library exceptions can be caught.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    try\n    {\n        // calling at() for a non-existing key\n        json j = {{\"foo\", \"bar\"}};\n        json k = j.at(\"non-existing\");\n    }\n    catch (const json::exception& e)\n    {\n        // output exception information\n        std::cout << \"message: \" << e.what() << '\\n'\n                  << \"exception id: \" << e.id << std::endl;\n    }\n}\n

    Output:

    message: [json.exception.out_of_range.403] key 'non-existing' not found\nexception id: 403\n
    "},{"location":"api/basic_json/exception/#see-also","title":"See also","text":"

    List of exceptions

    "},{"location":"api/basic_json/exception/#version-history","title":"Version history","text":"
    • Since version 3.0.0.
    "},{"location":"api/basic_json/find/","title":"nlohmann::basic_json::find","text":"
    // (1)\niterator find(const typename object_t::key_type& key);\nconst_iterator find(const typename object_t::key_type& key) const;\n\n// (2)\ntemplate<typename KeyType>\niterator find(KeyType&& key);\ntemplate<typename KeyType>\nconst_iterator find(KeyType&& key) const;\n
    1. Finds an element in a JSON object with a key equivalent to key. If the element is not found or the JSON value is not an object, end() is returned.
    2. See 1. This overload is only available if KeyType is comparable with typename object_t::key_type and typename object_comparator_t::is_transparent denotes a type.
    "},{"location":"api/basic_json/find/#template-parameters","title":"Template parameters","text":"KeyType A type for an object key other than json_pointer that is comparable with string_t using object_comparator_t. This can also be a string view (C++17)."},{"location":"api/basic_json/find/#parameters","title":"Parameters","text":"key (in) key value of the element to search for."},{"location":"api/basic_json/find/#return-value","title":"Return value","text":"

    Iterator to an element with a key equivalent to key. If no such element is found or the JSON value is not an object, a past-the-end iterator (see end()) is returned.

    "},{"location":"api/basic_json/find/#exception-safety","title":"Exception safety","text":"

    Strong exception safety: if an exception occurs, the original value stays intact.

    "},{"location":"api/basic_json/find/#complexity","title":"Complexity","text":"

    Logarithmic in the size of the JSON object.

    "},{"location":"api/basic_json/find/#notes","title":"Notes","text":"

    This method always returns end() when executed on a JSON type that is not an object.

    "},{"location":"api/basic_json/find/#examples","title":"Examples","text":"Example: (1) find object element by key

    The example shows how find() is used.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n\n    // call find\n    auto it_two = j_object.find(\"two\");\n    auto it_three = j_object.find(\"three\");\n\n    // print values\n    std::cout << std::boolalpha;\n    std::cout << \"\\\"two\\\" was found: \" << (it_two != j_object.end()) << '\\n';\n    std::cout << \"value at key \\\"two\\\": \" << *it_two << '\\n';\n    std::cout << \"\\\"three\\\" was found: \" << (it_three != j_object.end()) << '\\n';\n}\n

    Output:

    \"two\" was found: true\nvalue at key \"two\": 2\n\"three\" was found: false\n
    Example: (2) find object element by key using string_view

    The example shows how find() is used.

    #include <iostream>\n#include <string_view>\n#include <nlohmann/json.hpp>\n\nusing namespace std::string_view_literals;\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n\n    // call find\n    auto it_two = j_object.find(\"two\"sv);\n    auto it_three = j_object.find(\"three\"sv);\n\n    // print values\n    std::cout << std::boolalpha;\n    std::cout << \"\\\"two\\\" was found: \" << (it_two != j_object.end()) << '\\n';\n    std::cout << \"value at key \\\"two\\\": \" << *it_two << '\\n';\n    std::cout << \"\\\"three\\\" was found: \" << (it_three != j_object.end()) << '\\n';\n}\n

    Output:

    \"two\" was found: true\nvalue at key \"two\": 2\n\"three\" was found: false\n
    "},{"location":"api/basic_json/find/#see-also","title":"See also","text":"
    • contains checks whether a key exists
    "},{"location":"api/basic_json/find/#version-history","title":"Version history","text":"
    1. Added in version 3.11.0.
    2. Added in version 1.0.0. Changed to support comparable types in version 3.11.0.
    "},{"location":"api/basic_json/flatten/","title":"nlohmann::basic_json::flatten","text":"
    basic_json flatten() const;\n

    The function creates a JSON object whose keys are JSON pointers (see RFC 6901) and whose values are all primitive (see is_primitive() for more information). The original JSON value can be restored using the unflatten() function.

    "},{"location":"api/basic_json/flatten/#return-value","title":"Return value","text":"

    an object that maps JSON pointers to primitive values

    "},{"location":"api/basic_json/flatten/#exception-safety","title":"Exception safety","text":"

    Strong exception safety: if an exception occurs, the original value stays intact.

    "},{"location":"api/basic_json/flatten/#complexity","title":"Complexity","text":"

    Linear in the size the JSON value.

    "},{"location":"api/basic_json/flatten/#notes","title":"Notes","text":"

    Empty objects and arrays are flattened to null and will not be reconstructed correctly by the unflatten() function.

    "},{"location":"api/basic_json/flatten/#examples","title":"Examples","text":"Example

    The following code shows how a JSON object is flattened to an object whose keys consist of JSON pointers.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON value\n    json j =\n    {\n        {\"pi\", 3.141},\n        {\"happy\", true},\n        {\"name\", \"Niels\"},\n        {\"nothing\", nullptr},\n        {\n            \"answer\", {\n                {\"everything\", 42}\n            }\n        },\n        {\"list\", {1, 0, 2}},\n        {\n            \"object\", {\n                {\"currency\", \"USD\"},\n                {\"value\", 42.99}\n            }\n        }\n    };\n\n    // call flatten()\n    std::cout << std::setw(4) << j.flatten() << '\\n';\n}\n

    Output:

    {\n    \"/answer/everything\": 42,\n    \"/happy\": true,\n    \"/list/0\": 1,\n    \"/list/1\": 0,\n    \"/list/2\": 2,\n    \"/name\": \"Niels\",\n    \"/nothing\": null,\n    \"/object/currency\": \"USD\",\n    \"/object/value\": 42.99,\n    \"/pi\": 3.141\n}\n
    "},{"location":"api/basic_json/flatten/#see-also","title":"See also","text":"
    • unflatten the reverse function
    "},{"location":"api/basic_json/flatten/#version-history","title":"Version history","text":"
    • Added in version 2.0.0.
    "},{"location":"api/basic_json/from_bjdata/","title":"nlohmann::basic_json::from_bjdata","text":"
    // (1)\ntemplate<typename InputType>\nstatic basic_json from_bjdata(InputType&& i,\n                              const bool strict = true,\n                              const bool allow_exceptions = true);\n// (2)\ntemplate<typename IteratorType>\nstatic basic_json from_bjdata(IteratorType first, IteratorType last,\n                              const bool strict = true,\n                              const bool allow_exceptions = true);\n

    Deserializes a given input to a JSON value using the BJData (Binary JData) serialization format.

    1. Reads from a compatible input.
    2. Reads from an iterator range.

    The exact mapping and its limitations is described on a dedicated page.

    "},{"location":"api/basic_json/from_bjdata/#template-parameters","title":"Template parameters","text":"InputType

    A compatible input, for instance:

    • an std::istream object
    • a FILE pointer
    • a C-style array of characters
    • a pointer to a null-terminated string of single byte characters
    • an object obj for which begin(obj) and end(obj) produces a valid pair of iterators.
    IteratorType a compatible iterator type"},{"location":"api/basic_json/from_bjdata/#parameters","title":"Parameters","text":"i (in) an input in BJData format convertible to an input adapter first (in) iterator to start of the input last (in) iterator to end of the input strict (in) whether to expect the input to be consumed until EOF (true by default) allow_exceptions (in) whether to throw exceptions in case of a parse error (optional, true by default)"},{"location":"api/basic_json/from_bjdata/#return-value","title":"Return value","text":"

    deserialized JSON value; in case of a parse error and allow_exceptions set to false, the return value will be value_t::discarded. The latter can be checked with is_discarded.

    "},{"location":"api/basic_json/from_bjdata/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/from_bjdata/#exceptions","title":"Exceptions","text":"
    • Throws parse_error.110 if the given input ends prematurely or the end of file was not reached when strict was set to true
    • Throws parse_error.112 if a parse error occurs
    • Throws parse_error.113 if a string could not be parsed successfully
    "},{"location":"api/basic_json/from_bjdata/#complexity","title":"Complexity","text":"

    Linear in the size of the input.

    "},{"location":"api/basic_json/from_bjdata/#examples","title":"Examples","text":"Example

    The example shows the deserialization of a byte vector in BJData format to a JSON value.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create byte vector\n    std::vector<std::uint8_t> v = {0x7B, 0x69, 0x07, 0x63, 0x6F, 0x6D, 0x70, 0x61,\n                                   0x63, 0x74, 0x54, 0x69, 0x06, 0x73, 0x63, 0x68,\n                                   0x65, 0x6D, 0x61, 0x69, 0x00, 0x7D\n                                  };\n\n    // deserialize it with BJData\n    json j = json::from_bjdata(v);\n\n    // print the deserialized JSON value\n    std::cout << std::setw(2) << j << std::endl;\n}\n

    Output:

    {\n  \"compact\": true,\n  \"schema\": 0\n}\n
    "},{"location":"api/basic_json/from_bjdata/#version-history","title":"Version history","text":"
    • Added in version 3.11.0.
    "},{"location":"api/basic_json/from_bson/","title":"nlohmann::basic_json::from_bson","text":"
    // (1)\ntemplate<typename InputType>\nstatic basic_json from_bson(InputType&& i,\n                            const bool strict = true,\n                            const bool allow_exceptions = true);\n// (2)\ntemplate<typename IteratorType>\nstatic basic_json from_bson(IteratorType first, IteratorType last,\n                            const bool strict = true,\n                            const bool allow_exceptions = true);\n

    Deserializes a given input to a JSON value using the BSON (Binary JSON) serialization format.

    1. Reads from a compatible input.
    2. Reads from an iterator range.

    The exact mapping and its limitations is described on a dedicated page.

    "},{"location":"api/basic_json/from_bson/#template-parameters","title":"Template parameters","text":"InputType

    A compatible input, for instance:

    • an std::istream object
    • a FILE pointer
    • a C-style array of characters
    • a pointer to a null-terminated string of single byte characters
    • an object obj for which begin(obj) and end(obj) produces a valid pair of iterators.
    IteratorType a compatible iterator type"},{"location":"api/basic_json/from_bson/#parameters","title":"Parameters","text":"i (in) an input in BSON format convertible to an input adapter first (in) iterator to start of the input last (in) iterator to end of the input strict (in) whether to expect the input to be consumed until EOF (true by default) allow_exceptions (in) whether to throw exceptions in case of a parse error (optional, true by default)"},{"location":"api/basic_json/from_bson/#return-value","title":"Return value","text":"

    deserialized JSON value; in case of a parse error and allow_exceptions set to false, the return value will be value_t::discarded. The latter can be checked with is_discarded.

    "},{"location":"api/basic_json/from_bson/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/from_bson/#exceptions","title":"Exceptions","text":"

    Throws parse_error.114 if an unsupported BSON record type is encountered.

    "},{"location":"api/basic_json/from_bson/#complexity","title":"Complexity","text":"

    Linear in the size of the input.

    "},{"location":"api/basic_json/from_bson/#examples","title":"Examples","text":"Example

    The example shows the deserialization of a byte vector in BSON format to a JSON value.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create byte vector\n    std::vector<std::uint8_t> v = {0x1b, 0x00, 0x00, 0x00, 0x08, 0x63, 0x6f, 0x6d,\n                                   0x70, 0x61, 0x63, 0x74, 0x00, 0x01, 0x10, 0x73,\n                                   0x63, 0x68, 0x65, 0x6d, 0x61, 0x00, 0x00, 0x00,\n                                   0x00, 0x00, 0x00\n                                  };\n\n    // deserialize it with BSON\n    json j = json::from_bson(v);\n\n    // print the deserialized JSON value\n    std::cout << std::setw(2) << j << std::endl;\n}\n

    Output:

    {\n  \"compact\": true,\n  \"schema\": 0\n}\n
    "},{"location":"api/basic_json/from_bson/#see-also","title":"See also","text":"
    • BSON specification
    • to_bson for the analogous serialization
    • from_cbor for the related CBOR format
    • from_msgpack for the related MessagePack format
    • from_ubjson for the related UBJSON format
    "},{"location":"api/basic_json/from_bson/#version-history","title":"Version history","text":"
    • Added in version 3.4.0.

    Deprecation

    • Overload (2) replaces calls to from_bson with a pointer and a length as first two parameters, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_bson(ptr, len, ...); with from_bson(ptr, ptr+len, ...);.
    • Overload (2) replaces calls to from_bson with a pair of iterators as their first parameter, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_bson({ptr, ptr+len}, ...); with from_bson(ptr, ptr+len, ...);.

    You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

    "},{"location":"api/basic_json/from_cbor/","title":"nlohmann::basic_json::from_cbor","text":"
    // (1)\ntemplate<typename InputType>\nstatic basic_json from_cbor(InputType&& i,\n                            const bool strict = true,\n                            const bool allow_exceptions = true,\n                            const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error);\n\n// (2)\ntemplate<typename IteratorType>\nstatic basic_json from_cbor(IteratorType first, IteratorType last,\n                            const bool strict = true,\n                            const bool allow_exceptions = true,\n                            const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error);\n

    Deserializes a given input to a JSON value using the CBOR (Concise Binary Object Representation) serialization format.

    1. Reads from a compatible input.
    2. Reads from an iterator range.

    The exact mapping and its limitations is described on a dedicated page.

    "},{"location":"api/basic_json/from_cbor/#template-parameters","title":"Template parameters","text":"InputType

    A compatible input, for instance:

    • an std::istream object
    • a FILE pointer
    • a C-style array of characters
    • a pointer to a null-terminated string of single byte characters
    • an object obj for which begin(obj) and end(obj) produces a valid pair of iterators.
    IteratorType a compatible iterator type"},{"location":"api/basic_json/from_cbor/#parameters","title":"Parameters","text":"i (in) an input in CBOR format convertible to an input adapter first (in) iterator to start of the input last (in) iterator to end of the input strict (in) whether to expect the input to be consumed until EOF (true by default) allow_exceptions (in) whether to throw exceptions in case of a parse error (optional, true by default) tag_handler (in) how to treat CBOR tags (optional, error by default); see cbor_tag_handler_t for more information"},{"location":"api/basic_json/from_cbor/#return-value","title":"Return value","text":"

    deserialized JSON value; in case of a parse error and allow_exceptions set to false, the return value will be value_t::discarded. The latter can be checked with is_discarded.

    "},{"location":"api/basic_json/from_cbor/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/from_cbor/#exceptions","title":"Exceptions","text":"
    • Throws parse_error.110 if the given input ends prematurely or the end of file was not reached when strict was set to true
    • Throws parse_error.112 if unsupported features from CBOR were used in the given input or if the input is not valid CBOR
    • Throws parse_error.113 if a string was expected as map key, but not found
    "},{"location":"api/basic_json/from_cbor/#complexity","title":"Complexity","text":"

    Linear in the size of the input.

    "},{"location":"api/basic_json/from_cbor/#examples","title":"Examples","text":"Example

    The example shows the deserialization of a byte vector in CBOR format to a JSON value.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create byte vector\n    std::vector<std::uint8_t> v = {0xa2, 0x67, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63,\n                                   0x74, 0xf5, 0x66, 0x73, 0x63, 0x68, 0x65, 0x6d,\n                                   0x61, 0x00\n                                  };\n\n    // deserialize it with CBOR\n    json j = json::from_cbor(v);\n\n    // print the deserialized JSON value\n    std::cout << std::setw(2) << j << std::endl;\n}\n

    Output:

    {\n  \"compact\": true,\n  \"schema\": 0\n}\n
    "},{"location":"api/basic_json/from_cbor/#version-history","title":"Version history","text":"
    • Added in version 2.0.9.
    • Parameter start_index since version 2.1.1.
    • Changed to consume input adapters, removed start_index parameter, and added strict parameter in version 3.0.0.
    • Added allow_exceptions parameter in version 3.2.0.
    • Added tag_handler parameter in version 3.9.0.

    Deprecation

    • Overload (2) replaces calls to from_cbor with a pointer and a length as first two parameters, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_cbor(ptr, len, ...); with from_cbor(ptr, ptr+len, ...);.
    • Overload (2) replaces calls to from_cbor with a pair of iterators as their first parameter, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_cbor({ptr, ptr+len}, ...); with from_cbor(ptr, ptr+len, ...);.

    You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

    "},{"location":"api/basic_json/from_msgpack/","title":"nlohmann::basic_json::from_msgpack","text":"
    // (1)\ntemplate<typename InputType>\nstatic basic_json from_msgpack(InputType&& i,\n                               const bool strict = true,\n                               const bool allow_exceptions = true);\n// (2)\ntemplate<typename IteratorType>\nstatic basic_json from_msgpack(IteratorType first, IteratorType last,\n                               const bool strict = true,\n                               const bool allow_exceptions = true);\n

    Deserializes a given input to a JSON value using the MessagePack serialization format.

    1. Reads from a compatible input.
    2. Reads from an iterator range.

    The exact mapping and its limitations is described on a dedicated page.

    "},{"location":"api/basic_json/from_msgpack/#template-parameters","title":"Template parameters","text":"InputType

    A compatible input, for instance:

    • an std::istream object
    • a FILE pointer
    • a C-style array of characters
    • a pointer to a null-terminated string of single byte characters
    • an object obj for which begin(obj) and end(obj) produces a valid pair of iterators.
    IteratorType a compatible iterator type"},{"location":"api/basic_json/from_msgpack/#parameters","title":"Parameters","text":"i (in) an input in MessagePack format convertible to an input adapter first (in) iterator to start of the input last (in) iterator to end of the input strict (in) whether to expect the input to be consumed until EOF (true by default) allow_exceptions (in) whether to throw exceptions in case of a parse error (optional, true by default)"},{"location":"api/basic_json/from_msgpack/#return-value","title":"Return value","text":"

    deserialized JSON value; in case of a parse error and allow_exceptions set to false, the return value will be value_t::discarded. The latter can be checked with is_discarded.

    "},{"location":"api/basic_json/from_msgpack/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/from_msgpack/#exceptions","title":"Exceptions","text":"
    • Throws parse_error.110 if the given input ends prematurely or the end of file was not reached when strict was set to true
    • Throws parse_error.112 if unsupported features from MessagePack were used in the given input or if the input is not valid MessagePack
    • Throws parse_error.113 if a string was expected as map key, but not found
    "},{"location":"api/basic_json/from_msgpack/#complexity","title":"Complexity","text":"

    Linear in the size of the input.

    "},{"location":"api/basic_json/from_msgpack/#examples","title":"Examples","text":"Example

    The example shows the deserialization of a byte vector in MessagePack format to a JSON value.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create byte vector\n    std::vector<std::uint8_t> v = {0x82, 0xa7, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63,\n                                   0x74, 0xc3, 0xa6, 0x73, 0x63, 0x68, 0x65, 0x6d,\n                                   0x61, 0x00\n                                  };\n\n    // deserialize it with MessagePack\n    json j = json::from_msgpack(v);\n\n    // print the deserialized JSON value\n    std::cout << std::setw(2) << j << std::endl;\n}\n

    Output:

    {\n  \"compact\": true,\n  \"schema\": 0\n}\n
    "},{"location":"api/basic_json/from_msgpack/#version-history","title":"Version history","text":"
    • Added in version 2.0.9.
    • Parameter start_index since version 2.1.1.
    • Changed to consume input adapters, removed start_index parameter, and added strict parameter in version 3.0.0.
    • Added allow_exceptions parameter in version 3.2.0.

    Deprecation

    • Overload (2) replaces calls to from_msgpack with a pointer and a length as first two parameters, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_msgpack(ptr, len, ...); with from_msgpack(ptr, ptr+len, ...);.
    • Overload (2) replaces calls to from_cbor with a pair of iterators as their first parameter, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_msgpack({ptr, ptr+len}, ...); with from_msgpack(ptr, ptr+len, ...);.

    You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

    "},{"location":"api/basic_json/from_ubjson/","title":"nlohmann::basic_json::from_ubjson","text":"
    // (1)\ntemplate<typename InputType>\nstatic basic_json from_ubjson(InputType&& i,\n                              const bool strict = true,\n                              const bool allow_exceptions = true);\n// (2)\ntemplate<typename IteratorType>\nstatic basic_json from_ubjson(IteratorType first, IteratorType last,\n                              const bool strict = true,\n                              const bool allow_exceptions = true);\n

    Deserializes a given input to a JSON value using the UBJSON (Universal Binary JSON) serialization format.

    1. Reads from a compatible input.
    2. Reads from an iterator range.

    The exact mapping and its limitations is described on a dedicated page.

    "},{"location":"api/basic_json/from_ubjson/#template-parameters","title":"Template parameters","text":"InputType

    A compatible input, for instance:

    • an std::istream object
    • a FILE pointer
    • a C-style array of characters
    • a pointer to a null-terminated string of single byte characters
    • an object obj for which begin(obj) and end(obj) produces a valid pair of iterators.
    IteratorType a compatible iterator type"},{"location":"api/basic_json/from_ubjson/#parameters","title":"Parameters","text":"i (in) an input in UBJSON format convertible to an input adapter first (in) iterator to start of the input last (in) iterator to end of the input strict (in) whether to expect the input to be consumed until EOF (true by default) allow_exceptions (in) whether to throw exceptions in case of a parse error (optional, true by default)"},{"location":"api/basic_json/from_ubjson/#return-value","title":"Return value","text":"

    deserialized JSON value; in case of a parse error and allow_exceptions set to false, the return value will be value_t::discarded. The latter can be checked with is_discarded.

    "},{"location":"api/basic_json/from_ubjson/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/from_ubjson/#exceptions","title":"Exceptions","text":"
    • Throws parse_error.110 if the given input ends prematurely or the end of file was not reached when strict was set to true
    • Throws parse_error.112 if a parse error occurs
    • Throws parse_error.113 if a string could not be parsed successfully
    "},{"location":"api/basic_json/from_ubjson/#complexity","title":"Complexity","text":"

    Linear in the size of the input.

    "},{"location":"api/basic_json/from_ubjson/#examples","title":"Examples","text":"Example

    The example shows the deserialization of a byte vector in UBJSON format to a JSON value.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create byte vector\n    std::vector<std::uint8_t> v = {0x7B, 0x69, 0x07, 0x63, 0x6F, 0x6D, 0x70, 0x61,\n                                   0x63, 0x74, 0x54, 0x69, 0x06, 0x73, 0x63, 0x68,\n                                   0x65, 0x6D, 0x61, 0x69, 0x00, 0x7D\n                                  };\n\n    // deserialize it with UBJSON\n    json j = json::from_ubjson(v);\n\n    // print the deserialized JSON value\n    std::cout << std::setw(2) << j << std::endl;\n}\n

    Output:

    {\n  \"compact\": true,\n  \"schema\": 0\n}\n
    "},{"location":"api/basic_json/from_ubjson/#version-history","title":"Version history","text":"
    • Added in version 3.1.0.
    • Added allow_exceptions parameter in version 3.2.0.

    Deprecation

    • Overload (2) replaces calls to from_ubjson with a pointer and a length as first two parameters, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_ubjson(ptr, len, ...); with from_ubjson(ptr, ptr+len, ...);.
    • Overload (2) replaces calls to from_ubjson with a pair of iterators as their first parameter, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_ubjson({ptr, ptr+len}, ...); with from_ubjson(ptr, ptr+len, ...);.

    You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

    "},{"location":"api/basic_json/front/","title":"nlohmann::basic_json::front","text":"
    reference front();\nconst_reference front() const;\n

    Returns a reference to the first element in the container. For a JSON container c, the expression c.front() is equivalent to *c.begin().

    "},{"location":"api/basic_json/front/#return-value","title":"Return value","text":"

    In case of a structured type (array or object), a reference to the first element is returned. In case of number, string, boolean, or binary values, a reference to the value is returned.

    "},{"location":"api/basic_json/front/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/front/#exceptions","title":"Exceptions","text":"

    If the JSON value is null, exception invalid_iterator.214 is thrown.

    "},{"location":"api/basic_json/front/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/front/#notes","title":"Notes","text":"

    Precondition

    The array or object must not be empty. Calling front on an empty array or object yields undefined behavior.

    "},{"location":"api/basic_json/front/#examples","title":"Examples","text":"Example

    The following code shows an example for front().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_object_empty(json::value_t::object);\n    json j_array = {1, 2, 4, 8, 16};\n    json j_array_empty(json::value_t::array);\n    json j_string = \"Hello, world\";\n\n    // call front()\n    //std::cout << j_null.front() << '\\n';          // would throw\n    std::cout << j_boolean.front() << '\\n';\n    std::cout << j_number_integer.front() << '\\n';\n    std::cout << j_number_float.front() << '\\n';\n    std::cout << j_object.front() << '\\n';\n    //std::cout << j_object_empty.front() << '\\n';  // undefined behavior\n    std::cout << j_array.front() << '\\n';\n    //std::cout << j_array_empty.front() << '\\n';   // undefined behavior\n    std::cout << j_string.front() << '\\n';\n}\n

    Output:

    true\n17\n23.42\n1\n1\n\"Hello, world\"\n
    "},{"location":"api/basic_json/front/#see-also","title":"See also","text":"
    • back to access the last element
    "},{"location":"api/basic_json/front/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Adjusted code to return reference to binary values in version 3.8.0.
    "},{"location":"api/basic_json/get/","title":"nlohmann::basic_json::get","text":"
    // (1)\ntemplate<typename ValueType>\nValueType get() const noexcept(\n    noexcept(JSONSerializer<ValueType>::from_json(\n        std::declval<const basic_json_t&>(), std::declval<ValueType&>())));\n\n// (2)\ntemplate<typename BasicJsonType>\nBasicJsonType get() const;\n\n// (3)\ntemplate<typename PointerType>\nPointerType get_ptr();\n\ntemplate<typename PointerType>\nconstexpr const PointerType get_ptr() const noexcept;\n
    1. Explicit type conversion between the JSON value and a compatible value which is CopyConstructible and DefaultConstructible. The value is converted by calling the json_serializer<ValueType> from_json() method.

      The function is equivalent to executing

      ValueType ret;\nJSONSerializer<ValueType>::from_json(*this, ret);\nreturn ret;\n

      This overload is chosen if:

      • ValueType is not basic_json,
      • json_serializer<ValueType> has a from_json() method of the form void from_json(const basic_json&, ValueType&), and
      • json_serializer<ValueType> does not have a from_json() method of the form ValueType from_json(const basic_json&)

      If the type is not CopyConstructible and not DefaultConstructible, the value is converted by calling the json_serializer<ValueType> from_json() method.

      The function is then equivalent to executing

      return JSONSerializer<ValueTypeCV>::from_json(*this);\n

      This overload is chosen if:

      • ValueType is not basic_json and
      • json_serializer<ValueType> has a from_json() method of the form ValueType from_json(const basic_json&)

      If json_serializer<ValueType> has both overloads of from_json(), the latter one is chosen.

    2. Overload for basic_json specializations. The function is equivalent to executing

      return *this;\n

    3. Explicit pointer access to the internally stored JSON value. No copies are made.

    "},{"location":"api/basic_json/get/#template-parameters","title":"Template parameters","text":"ValueType the value type to return BasicJsonType a specialization of basic_json PointerType pointer type; must be a pointer to array_t, object_t, string_t, boolean_t, number_integer_t, or number_unsigned_t, number_float_t, or binary_t. Other types will not compile."},{"location":"api/basic_json/get/#return-value","title":"Return value","text":"
    1. copy of the JSON value, converted to ValueType
    2. a copy of *this, converted into BasicJsonType
    3. pointer to the internally stored JSON value if the requested pointer type fits to the JSON value; nullptr otherwise
    "},{"location":"api/basic_json/get/#exceptions","title":"Exceptions","text":"

    Depends on what json_serializer<ValueType> from_json() method throws

    "},{"location":"api/basic_json/get/#notes","title":"Notes","text":"

    Undefined behavior

    Writing data to the pointee (overload 3) of the result yields an undefined state.

    "},{"location":"api/basic_json/get/#examples","title":"Examples","text":"Example

    The example below shows several conversions from JSON values to other types. There a few things to note: (1) Floating-point numbers can be converted to integers, (2) A JSON array can be converted to a standard std::vector<short>, (3) A JSON object can be converted to C++ associative containers such as std::unordered_map<std::string, json>.

    #include <iostream>\n#include <unordered_map>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON value with different types\n    json json_types =\n    {\n        {\"boolean\", true},\n        {\n            \"number\", {\n                {\"integer\", 42},\n                {\"floating-point\", 17.23}\n            }\n        },\n        {\"string\", \"Hello, world!\"},\n        {\"array\", {1, 2, 3, 4, 5}},\n        {\"null\", nullptr}\n    };\n\n    // use explicit conversions\n    auto v1 = json_types[\"boolean\"].template get<bool>();\n    auto v2 = json_types[\"number\"][\"integer\"].template get<int>();\n    auto v3 = json_types[\"number\"][\"integer\"].template get<short>();\n    auto v4 = json_types[\"number\"][\"floating-point\"].template get<float>();\n    auto v5 = json_types[\"number\"][\"floating-point\"].template get<int>();\n    auto v6 = json_types[\"string\"].template get<std::string>();\n    auto v7 = json_types[\"array\"].template get<std::vector<short>>();\n    auto v8 = json_types.template get<std::unordered_map<std::string, json>>();\n\n    // print the conversion results\n    std::cout << v1 << '\\n';\n    std::cout << v2 << ' ' << v3 << '\\n';\n    std::cout << v4 << ' ' << v5 << '\\n';\n    std::cout << v6 << '\\n';\n\n    for (auto i : v7)\n    {\n        std::cout << i << ' ';\n    }\n    std::cout << \"\\n\\n\";\n\n    for (auto i : v8)\n    {\n        std::cout << i.first << \": \" << i.second << '\\n';\n    }\n}\n

    Output:

    1\n42 42\n17.23 17\nHello, world!\n1 2 3 4 5 \n\nstring: \"Hello, world!\"\nnumber: {\"floating-point\":17.23,\"integer\":42}\nnull: null\nboolean: true\narray: [1,2,3,4,5]\n
    Example

    The example below shows how pointers to internal values of a JSON value can be requested. Note that no type conversions are made and a #cpp nullptr is returned if the value and the requested pointer type does not match.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON number\n    json value = 17;\n\n    // explicitly getting pointers\n    auto p1 = value.template get<const json::number_integer_t*>();\n    auto p2 = value.template get<json::number_integer_t*>();\n    auto p3 = value.template get<json::number_integer_t* const>();\n    auto p4 = value.template get<const json::number_integer_t* const>();\n    auto p5 = value.template get<json::number_float_t*>();\n\n    // print the pointees\n    std::cout << *p1 << ' ' << *p2 << ' ' << *p3 << ' ' << *p4 << '\\n';\n    std::cout << std::boolalpha << (p5 == nullptr) << '\\n';\n}\n

    Output:

    17 17 17 17\ntrue\n
    "},{"location":"api/basic_json/get/#version-history","title":"Version history","text":"
    1. Since version 2.1.0.
    2. Since version 2.1.0. Extended to work with other specializations of basic_json in version 3.2.0.
    3. Since version 1.0.0.
    "},{"location":"api/basic_json/get_allocator/","title":"nlohmann::basic_json::get_allocator","text":"
    static allocator_type get_allocator();\n

    Returns the allocator associated with the container.

    "},{"location":"api/basic_json/get_allocator/#return-value","title":"Return value","text":"

    associated allocator

    "},{"location":"api/basic_json/get_allocator/#examples","title":"Examples","text":"Example

    The example shows how get_allocator() is used to created json values.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    auto alloc = json::get_allocator();\n    using traits_t = std::allocator_traits<decltype(alloc)>;\n\n    json* j = traits_t::allocate(alloc, 1);\n    traits_t::construct(alloc, j, \"Hello, world!\");\n\n    std::cout << *j << std::endl;\n\n    traits_t::destroy(alloc, j);\n    traits_t::deallocate(alloc, j, 1);\n}\n

    Output:

    \"Hello, world!\"\n
    "},{"location":"api/basic_json/get_allocator/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/get_binary/","title":"nlohmann::basic_json::get_binary","text":"
    binary_t& get_binary();\n\nconst binary_t& get_binary() const;\n

    Returns a reference to the stored binary value.

    "},{"location":"api/basic_json/get_binary/#return-value","title":"Return value","text":"

    Reference to binary value.

    "},{"location":"api/basic_json/get_binary/#exception-safety","title":"Exception safety","text":"

    Strong exception safety: if an exception occurs, the original value stays intact.

    "},{"location":"api/basic_json/get_binary/#exceptions","title":"Exceptions","text":"

    Throws type_error.302 if the value is not binary

    "},{"location":"api/basic_json/get_binary/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/get_binary/#examples","title":"Examples","text":"Example

    The following code shows how to query a binary value.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a binary vector\n    std::vector<std::uint8_t> vec = {0xCA, 0xFE, 0xBA, 0xBE};\n\n    // create a binary JSON value with subtype 42\n    json j = json::binary(vec, 42);\n\n    // output type and subtype\n    std::cout << \"type: \" << j.type_name() << \", subtype: \" << j.get_binary().subtype() << std::endl;\n}\n

    Output:

    type: binary, subtype: 42\n
    "},{"location":"api/basic_json/get_binary/#version-history","title":"Version history","text":"
    • Added in version 3.8.0.
    "},{"location":"api/basic_json/get_ptr/","title":"nlohmann::basic_json::get_ptr","text":"
    template<typename PointerType>\nPointerType get_ptr() noexcept;\n\ntemplate<typename PointerType>\nconstexpr const PointerType get_ptr() const noexcept;\n

    Implicit pointer access to the internally stored JSON value. No copies are made.

    "},{"location":"api/basic_json/get_ptr/#template-parameters","title":"Template parameters","text":"PointerType pointer type; must be a pointer to array_t, object_t, string_t, boolean_t, number_integer_t, or number_unsigned_t, number_float_t, or binary_t. Other types will not compile."},{"location":"api/basic_json/get_ptr/#return-value","title":"Return value","text":"

    pointer to the internally stored JSON value if the requested pointer type fits to the JSON value; nullptr otherwise

    "},{"location":"api/basic_json/get_ptr/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/basic_json/get_ptr/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/get_ptr/#notes","title":"Notes","text":"

    Undefined behavior

    The pointer becomes invalid if the underlying JSON object changes.

    Consider the following example code where the pointer ptr changes after the array is resized. As a result, reading or writing to ptr after the array change would be undefined behavior. The address of the first array element changes, because the underlying std::vector is resized after adding a fifth element.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    json j = {1, 2, 3, 4};\n    auto* ptr = j[0].get_ptr<std::int64_t*>();\n    std::cout << \"value at \" << ptr << \" is \" << *ptr << std::endl;\n\n    j.push_back(5);\n\n    ptr = j[0].get_ptr<std::int64_t*>();\n    std::cout << \"value at \" << ptr << \" is \" << *ptr << std::endl;\n}\n

    Output:

    value at 0x6000012fc1c8 is 1\nvalue at 0x6000029fc088 is 1\n
    "},{"location":"api/basic_json/get_ptr/#examples","title":"Examples","text":"Example

    The example below shows how pointers to internal values of a JSON value can be requested. Note that no type conversions are made and a nullptr is returned if the value and the requested pointer type does not match.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON number\n    json value = 17;\n\n    // explicitly getting pointers\n    auto p1 = value.get_ptr<const json::number_integer_t*>();\n    auto p2 = value.get_ptr<json::number_integer_t*>();\n    auto p3 = value.get_ptr<json::number_integer_t* const>();\n    auto p4 = value.get_ptr<const json::number_integer_t* const>();\n    auto p5 = value.get_ptr<json::number_float_t*>();\n\n    // print the pointees\n    std::cout << *p1 << ' ' << *p2 << ' ' << *p3 << ' ' << *p4 << '\\n';\n    std::cout << std::boolalpha << (p5 == nullptr) << '\\n';\n}\n

    Output:

    17 17 17 17\ntrue\n
    "},{"location":"api/basic_json/get_ptr/#see-also","title":"See also","text":"
    • get_ref() get a reference value
    "},{"location":"api/basic_json/get_ptr/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Extended to binary types in version 3.8.0.
    "},{"location":"api/basic_json/get_ref/","title":"nlohmann::basic_json::get_ref","text":"
    template<typename ReferenceType>\nReferenceType get_ref();\n\ntemplate<typename ReferenceType>\nconst ReferenceType get_ref() const;\n

    Implicit reference access to the internally stored JSON value. No copies are made.

    "},{"location":"api/basic_json/get_ref/#template-parameters","title":"Template parameters","text":"ReferenceType reference type; must be a reference to array_t, object_t, string_t, boolean_t, number_integer_t, or number_unsigned_t, number_float_t, or binary_t. Enforced by a static assertion."},{"location":"api/basic_json/get_ref/#return-value","title":"Return value","text":"

    reference to the internally stored JSON value if the requested reference type fits to the JSON value; throws type_error.303 otherwise

    "},{"location":"api/basic_json/get_ref/#exception-safety","title":"Exception safety","text":"

    Strong exception safety: if an exception occurs, the original value stays intact.

    "},{"location":"api/basic_json/get_ref/#exceptions","title":"Exceptions","text":"

    Throws type_error.303 if the requested reference type does not match the stored JSON value type; example: \"incompatible ReferenceType for get_ref, actual type is binary\".

    "},{"location":"api/basic_json/get_ref/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/get_ref/#notes","title":"Notes","text":"

    Undefined behavior

    The reference becomes invalid if the underlying JSON object changes.

    "},{"location":"api/basic_json/get_ref/#examples","title":"Examples","text":"Example

    The example shows several calls to get_ref().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON number\n    json value = 17;\n\n    // explicitly getting references\n    auto r1 = value.get_ref<const json::number_integer_t&>();\n    auto r2 = value.get_ref<json::number_integer_t&>();\n\n    // print the values\n    std::cout << r1 << ' ' << r2 << '\\n';\n\n    // incompatible type throws exception\n    try\n    {\n        auto r3 = value.get_ref<json::number_float_t&>();\n    }\n    catch (const json::type_error& ex)\n    {\n        std::cout << ex.what() << '\\n';\n    }\n}\n

    Output:

    17 17\n[json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is number\n
    "},{"location":"api/basic_json/get_ref/#see-also","title":"See also","text":"
    • get_ptr() get a pointer value
    "},{"location":"api/basic_json/get_ref/#version-history","title":"Version history","text":"
    • Added in version 1.1.0.
    • Extended to binary types in version 3.8.0.
    "},{"location":"api/basic_json/get_to/","title":"nlohmann::basic_json::get_to","text":"
    template<typename ValueType>\nValueType& get_to(ValueType& v) const noexcept(\n    noexcept(JSONSerializer<ValueType>::from_json(\n        std::declval<const basic_json_t&>(), v)));\n

    Explicit type conversion between the JSON value and a compatible value. The value is filled into the input parameter by calling the json_serializer<ValueType> from_json() method.

    The function is equivalent to executing

    ValueType v;\nJSONSerializer<ValueType>::from_json(*this, v);\n

    This overload is chosen if:

    • ValueType is not basic_json,
    • json_serializer<ValueType> has a from_json() method of the form void from_json(const basic_json&, ValueType&)
    "},{"location":"api/basic_json/get_to/#template-parameters","title":"Template parameters","text":"ValueType the value type to return"},{"location":"api/basic_json/get_to/#return-value","title":"Return value","text":"

    the input parameter, allowing chaining calls

    "},{"location":"api/basic_json/get_to/#exceptions","title":"Exceptions","text":"

    Depends on what json_serializer<ValueType> from_json() method throws

    "},{"location":"api/basic_json/get_to/#examples","title":"Examples","text":"Example

    The example below shows several conversions from JSON values to other types. There a few things to note: (1) Floating-point numbers can be converted to integers, (2) A JSON array can be converted to a standard std::vector<short>, (3) A JSON object can be converted to C++ associative containers such as #cpp std::unordered_map<std::string, json>.

    #include <iostream>\n#include <unordered_map>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON value with different types\n    json json_types =\n    {\n        {\"boolean\", true},\n        {\n            \"number\", {\n                {\"integer\", 42},\n                {\"floating-point\", 17.23}\n            }\n        },\n        {\"string\", \"Hello, world!\"},\n        {\"array\", {1, 2, 3, 4, 5}},\n        {\"null\", nullptr}\n    };\n\n    bool v1;\n    int v2;\n    short v3;\n    float v4;\n    int v5;\n    std::string v6;\n    std::vector<short> v7;\n    std::unordered_map<std::string, json> v8;\n\n    // use explicit conversions\n    json_types[\"boolean\"].get_to(v1);\n    json_types[\"number\"][\"integer\"].get_to(v2);\n    json_types[\"number\"][\"integer\"].get_to(v3);\n    json_types[\"number\"][\"floating-point\"].get_to(v4);\n    json_types[\"number\"][\"floating-point\"].get_to(v5);\n    json_types[\"string\"].get_to(v6);\n    json_types[\"array\"].get_to(v7);\n    json_types.get_to(v8);\n\n    // print the conversion results\n    std::cout << v1 << '\\n';\n    std::cout << v2 << ' ' << v3 << '\\n';\n    std::cout << v4 << ' ' << v5 << '\\n';\n    std::cout << v6 << '\\n';\n\n    for (auto i : v7)\n    {\n        std::cout << i << ' ';\n    }\n    std::cout << \"\\n\\n\";\n\n    for (auto i : v8)\n    {\n        std::cout << i.first << \": \" << i.second << '\\n';\n    }\n}\n

    Output:

    1\n42 42\n17.23 17\nHello, world!\n1 2 3 4 5 \n\nstring: \"Hello, world!\"\nnumber: {\"floating-point\":17.23,\"integer\":42}\nnull: null\nboolean: true\narray: [1,2,3,4,5]\n
    "},{"location":"api/basic_json/get_to/#version-history","title":"Version history","text":"
    • Since version 3.3.0.
    "},{"location":"api/basic_json/input_format_t/","title":"nlohmann::basic_json::input_format_t","text":"
    enum class input_format_t {\n    json,\n    cbor,\n    msgpack,\n    ubjson,\n    bson,\n    bjdata\n};\n

    This enumeration is used in the sax_parse function to choose the input format to parse:

    json JSON (JavaScript Object Notation) cbor CBOR (Concise Binary Object Representation) msgpack MessagePack ubjson UBJSON (Universal Binary JSON) bson BSON (Binary JSON) bjdata BJData (Binary JData)"},{"location":"api/basic_json/input_format_t/#examples","title":"Examples","text":"Example

    The example below shows how an input_format_t enum value is passed to sax_parse to set the input format to CBOR.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // CBOR byte string\n    std::vector<std::uint8_t> vec = {{0x44, 0xcA, 0xfe, 0xba, 0xbe}};\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse CBOR\n    bool result = json::sax_parse(vec, &sec, json::input_format_t::cbor);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

    Output:

    binary(val=[...])\n\nresult: true\n
    "},{"location":"api/basic_json/input_format_t/#version-history","title":"Version history","text":"
    • Added in version 3.2.0.
    "},{"location":"api/basic_json/insert/","title":"nlohmann::basic_json::insert","text":"
    // (1)\niterator insert(const_iterator pos, const basic_json& val);\niterator insert(const_iterator pos, basic_json&& val);\n\n// (2)\niterator insert(const_iterator pos, size_type cnt, const basic_json& val);\n\n// (3)\niterator insert(const_iterator pos, const_iterator first, const_iterator last);\n\n// (4)\niterator insert(const_iterator pos, initializer_list_t ilist);\n\n// (5)\nvoid insert(const_iterator first, const_iterator last);\n
    1. Inserts element val into array before iterator pos.
    2. Inserts cnt copies of val into array before iterator pos.
    3. Inserts elements from range [first, last) into array before iterator pos.
    4. Inserts elements from initializer list ilist into array before iterator pos.
    5. Inserts elements from range [first, last) into object.
    "},{"location":"api/basic_json/insert/#iterator-invalidation","title":"Iterator invalidation","text":"

    For all cases where an element is added to an array, a reallocation can happen, in which case all iterators (including the end() iterator) and all references to the elements are invalidated. Otherwise, only the end() iterator is invalidated. Also, any iterator or reference after the insertion point will point to the same index which is now a different value.

    For ordered_json, also adding an element to an object can yield a reallocation which again invalidates all iterators and all references. Also, any iterator or reference after the insertion point will point to the same index which is now a different value.

    "},{"location":"api/basic_json/insert/#parameters","title":"Parameters","text":"pos (in) iterator before which the content will be inserted; may be the end() iterator val (in) value to insert cnt (in) number of copies of val to insert first (in) begin of the range of elements to insert last (in) end of the range of elements to insert ilist (in) initializer list to insert the values from"},{"location":"api/basic_json/insert/#return-value","title":"Return value","text":"
    1. iterator pointing to the inserted val.
    2. iterator pointing to the first element inserted, or pos if cnt==0
    3. iterator pointing to the first element inserted, or pos if first==last
    4. iterator pointing to the first element inserted, or pos if ilist is empty
    5. (none)
    "},{"location":"api/basic_json/insert/#exception-safety","title":"Exception safety","text":"

    Strong exception safety: if an exception occurs, the original value stays intact.

    "},{"location":"api/basic_json/insert/#exceptions","title":"Exceptions","text":"
    1. The function can throw the following exceptions:
      • Throws type_error.309 if called on JSON values other than arrays; example: \"cannot use insert() with string\"
      • Throws invalid_iterator.202 if called on an iterator which does not belong to the current JSON value; example: \"iterator does not fit current value\"
    2. The function can throw the following exceptions:
      • Throws type_error.309 if called on JSON values other than arrays; example: \"cannot use insert() with string\"
      • Throws invalid_iterator.202 if called on an iterator which does not belong to the current JSON value; example: \"iterator does not fit current value\"
    3. The function can throw the following exceptions:
      • Throws type_error.309 if called on JSON values other than arrays; example: \"cannot use insert() with string\"
      • Throws invalid_iterator.202 if called on an iterator which does not belong to the current JSON value; example: \"iterator does not fit current value\"
      • Throws invalid_iterator.210 if first and last do not belong to the same JSON value; example: \"iterators do not fit\"
      • Throws invalid_iterator.211 if first or last are iterators into container for which insert is called; example: \"passed iterators may not belong to container\"
    4. The function can throw the following exceptions:
      • Throws type_error.309 if called on JSON values other than arrays; example: \"cannot use insert() with string\"
      • Throws invalid_iterator.202 if called on an iterator which does not belong to the current JSON value; example: \"iterator does not fit current value\"
    5. The function can throw the following exceptions:
      • Throws type_error.309 if called on JSON values other than objects; example: \"cannot use insert() with string\"
      • Throws invalid_iterator.202 if called on an iterator which does not belong to the current JSON value; example: \"iterator does not fit current value\"
      • Throws invalid_iterator.210 if first and last do not belong to the same JSON value; example: \"iterators do not fit\"
    "},{"location":"api/basic_json/insert/#complexity","title":"Complexity","text":"
    1. Constant plus linear in the distance between pos and end of the container.
    2. Linear in cnt plus linear in the distance between pos and end of the container.
    3. Linear in std::distance(first, last) plus linear in the distance between pos and end of the container.
    4. Linear in ilist.size() plus linear in the distance between pos and end of the container.
    5. Logarithmic: O(N*log(size() + N)), where N is the number of elements to insert.
    "},{"location":"api/basic_json/insert/#examples","title":"Examples","text":"Example (1): insert element into array

    The example shows how insert() is used.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON array\n    json v = {1, 2, 3, 4};\n\n    // insert number 10 before number 3\n    auto new_pos = v.insert(v.begin() + 2, 10);\n\n    // output new array and result of insert call\n    std::cout << *new_pos << '\\n';\n    std::cout << v << '\\n';\n}\n

    Output:

    10\n[1,2,10,3,4]\n
    Example (2): insert copies of element into array

    The example shows how insert() is used.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON array\n    json v = {1, 2, 3, 4};\n\n    // insert number 7 copies of number 7 before number 3\n    auto new_pos = v.insert(v.begin() + 2, 7, 7);\n\n    // output new array and result of insert call\n    std::cout << *new_pos << '\\n';\n    std::cout << v << '\\n';\n}\n

    Output:

    7\n[1,2,7,7,7,7,7,7,7,3,4]\n
    Example (3): insert range of elements into array

    The example shows how insert() is used.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON array\n    json v = {1, 2, 3, 4};\n\n    // create a JSON array to copy values from\n    json v2 = {\"one\", \"two\", \"three\", \"four\"};\n\n    // insert range from v2 before the end of array v\n    auto new_pos = v.insert(v.end(), v2.begin(), v2.end());\n\n    // output new array and result of insert call\n    std::cout << *new_pos << '\\n';\n    std::cout << v << '\\n';\n}\n

    Output:

    \"one\"\n[1,2,3,4,\"one\",\"two\",\"three\",\"four\"]\n
    Example (4): insert elements from initializer list into array

    The example shows how insert() is used.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON array\n    json v = {1, 2, 3, 4};\n\n    // insert range from v2 before the end of array v\n    auto new_pos = v.insert(v.end(), {7, 8, 9});\n\n    // output new array and result of insert call\n    std::cout << *new_pos << '\\n';\n    std::cout << v << '\\n';\n}\n

    Output:

    7\n[1,2,3,4,7,8,9]\n
    Example (5): insert range of elements into object

    The example shows how insert() is used.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create two JSON objects\n    json j1 = {{\"one\", \"eins\"}, {\"two\", \"zwei\"}};\n    json j2 = {{\"eleven\", \"elf\"}, {\"seventeen\", \"siebzehn\"}};\n\n    // output objects\n    std::cout << j1 << '\\n';\n    std::cout << j2 << '\\n';\n\n    // insert range from j2 to j1\n    j1.insert(j2.begin(), j2.end());\n\n    // output result of insert call\n    std::cout << j1 << '\\n';\n}\n

    Output:

    {\"one\":\"eins\",\"two\":\"zwei\"}\n{\"eleven\":\"elf\",\"seventeen\":\"siebzehn\"}\n{\"eleven\":\"elf\",\"one\":\"eins\",\"seventeen\":\"siebzehn\",\"two\":\"zwei\"}\n
    "},{"location":"api/basic_json/insert/#version-history","title":"Version history","text":"
    1. Added in version 1.0.0.
    2. Added in version 1.0.0.
    3. Added in version 1.0.0.
    4. Added in version 1.0.0.
    5. Added in version 3.0.0.
    "},{"location":"api/basic_json/invalid_iterator/","title":"nlohmann::basic_json::invalid_iterator","text":"
    class invalid_iterator : public exception;\n

    This exception is thrown if iterators passed to a library function do not match the expected semantics.

    Exceptions have ids 2xx (see list of iterator errors).

    classDiagram\n  direction LR\n\n    class std_exception [\"std::exception\"] {\n        <<interface>>\n    }\n\n    class json_exception [\"basic_json::exception\"] {\n        +const int id\n        +const char* what() const\n    }\n\n    class json_parse_error [\"basic_json::parse_error\"] {\n        +const std::size_t byte\n    }\n\n    class json_invalid_iterator [\"basic_json::invalid_iterator\"]\n    class json_type_error [\"basic_json::type_error\"]\n    class json_out_of_range [\"basic_json::out_of_range\"]\n    class json_other_error [\"basic_json::other_error\"]\n\n    std_exception <|-- json_exception\n    json_exception <|-- json_parse_error\n    json_exception <|-- json_invalid_iterator\n    json_exception <|-- json_type_error\n    json_exception <|-- json_out_of_range\n    json_exception <|-- json_other_error\n\n    style json_invalid_iterator fill:#CCCCFF
    "},{"location":"api/basic_json/invalid_iterator/#member-functions","title":"Member functions","text":"
    • what - returns explanatory string
    "},{"location":"api/basic_json/invalid_iterator/#member-variables","title":"Member variables","text":"
    • id - the id of the exception
    "},{"location":"api/basic_json/invalid_iterator/#examples","title":"Examples","text":"Example

    The following code shows how a invalid_iterator exception can be caught.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    try\n    {\n        // calling iterator::key() on non-object iterator\n        json j = \"string\";\n        json::iterator it = j.begin();\n        auto k = it.key();\n    }\n    catch (const json::invalid_iterator& e)\n    {\n        // output exception information\n        std::cout << \"message: \" << e.what() << '\\n'\n                  << \"exception id: \" << e.id << std::endl;\n    }\n}\n

    Output:

    message: [json.exception.invalid_iterator.207] cannot use key() for non-object iterators\nexception id: 207\n
    "},{"location":"api/basic_json/invalid_iterator/#see-also","title":"See also","text":"
    • List of iterator errors
    • parse_error for exceptions indicating a parse error
    • type_error for exceptions indicating executing a member function with a wrong type
    • out_of_range for exceptions indicating access out of the defined range
    • other_error for exceptions indicating other library errors
    "},{"location":"api/basic_json/invalid_iterator/#version-history","title":"Version history","text":"
    • Since version 3.0.0.
    "},{"location":"api/basic_json/is_array/","title":"nlohmann::basic_json::is_array","text":"
    constexpr bool is_array() const noexcept;\n

    This function returns true if and only if the JSON value is an array.

    "},{"location":"api/basic_json/is_array/#return-value","title":"Return value","text":"

    true if type is an array, false otherwise.

    "},{"location":"api/basic_json/is_array/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/is_array/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/is_array/#examples","title":"Examples","text":"Example

    The following code exemplifies is_array() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_array()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_array() << '\\n';\n    std::cout << j_boolean.is_array() << '\\n';\n    std::cout << j_number_integer.is_array() << '\\n';\n    std::cout << j_number_unsigned_integer.is_array() << '\\n';\n    std::cout << j_number_float.is_array() << '\\n';\n    std::cout << j_object.is_array() << '\\n';\n    std::cout << j_array.is_array() << '\\n';\n    std::cout << j_string.is_array() << '\\n';\n    std::cout << j_binary.is_array() << '\\n';\n}\n

    Output:

    false\nfalse\nfalse\nfalse\nfalse\nfalse\ntrue\nfalse\nfalse\n
    "},{"location":"api/basic_json/is_array/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/is_binary/","title":"nlohmann::basic_json::is_binary","text":"
    constexpr bool is_binary() const noexcept;\n

    This function returns true if and only if the JSON value is binary array.

    "},{"location":"api/basic_json/is_binary/#return-value","title":"Return value","text":"

    true if type is binary, false otherwise.

    "},{"location":"api/basic_json/is_binary/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/is_binary/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/is_binary/#examples","title":"Examples","text":"Example

    The following code exemplifies is_binary() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_binary()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_binary() << '\\n';\n    std::cout << j_boolean.is_binary() << '\\n';\n    std::cout << j_number_integer.is_binary() << '\\n';\n    std::cout << j_number_unsigned_integer.is_binary() << '\\n';\n    std::cout << j_number_float.is_binary() << '\\n';\n    std::cout << j_object.is_binary() << '\\n';\n    std::cout << j_array.is_binary() << '\\n';\n    std::cout << j_string.is_binary() << '\\n';\n    std::cout << j_binary.is_binary() << '\\n';\n}\n

    Output:

    false\nfalse\nfalse\nfalse\nfalse\nfalse\nfalse\nfalse\ntrue\n
    "},{"location":"api/basic_json/is_binary/#version-history","title":"Version history","text":"
    • Added in version 3.8.0.
    "},{"location":"api/basic_json/is_boolean/","title":"nlohmann::basic_json::is_boolean","text":"
    constexpr bool is_boolean() const noexcept;\n

    This function returns true if and only if the JSON value is true or false.

    "},{"location":"api/basic_json/is_boolean/#return-value","title":"Return value","text":"

    true if type is boolean, false otherwise.

    "},{"location":"api/basic_json/is_boolean/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/is_boolean/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/is_boolean/#examples","title":"Examples","text":"Example

    The following code exemplifies is_boolean() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_boolean()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_boolean() << '\\n';\n    std::cout << j_boolean.is_boolean() << '\\n';\n    std::cout << j_number_integer.is_boolean() << '\\n';\n    std::cout << j_number_unsigned_integer.is_boolean() << '\\n';\n    std::cout << j_number_float.is_boolean() << '\\n';\n    std::cout << j_object.is_boolean() << '\\n';\n    std::cout << j_array.is_boolean() << '\\n';\n    std::cout << j_string.is_boolean() << '\\n';\n    std::cout << j_binary.is_boolean() << '\\n';\n}\n

    Output:

    false\ntrue\nfalse\nfalse\nfalse\nfalse\nfalse\nfalse\nfalse\n
    "},{"location":"api/basic_json/is_boolean/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/is_discarded/","title":"nlohmann::basic_json::is_discarded","text":"
    constexpr bool is_discarded() const noexcept;\n

    This function returns true for a JSON value if either:

    • the value was discarded during parsing with a callback function (see parser_callback_t), or
    • the value is the result of parsing invalid JSON with parameter allow_exceptions set to false; see parse for more information.
    "},{"location":"api/basic_json/is_discarded/#return-value","title":"Return value","text":"

    true if type is discarded, false otherwise.

    "},{"location":"api/basic_json/is_discarded/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/is_discarded/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/is_discarded/#notes","title":"Notes","text":"

    Comparisons

    Discarded values are never compared equal with operator==. That is, checking whether a JSON value j is discarded will only work via:

    j.is_discarded()\n

    because

    j == json::value_t::discarded\n

    will always be false.

    Removal during parsing with callback functions

    When a value is discarded by a callback function (see parser_callback_t) during parsing, then it is removed when it is part of a structured value. For instance, if the second value of an array is discarded, instead of [null, discarded, false], the array [null, false] is returned. Only if the top-level value is discarded, the return value of the parse call is discarded.

    This function will always be false for JSON values after parsing. That is, discarded values can only occur during parsing, but will be removed when inside a structured value or replaced by null in other cases.

    "},{"location":"api/basic_json/is_discarded/#examples","title":"Examples","text":"Example

    The following code exemplifies is_discarded() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_discarded()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_discarded() << '\\n';\n    std::cout << j_boolean.is_discarded() << '\\n';\n    std::cout << j_number_integer.is_discarded() << '\\n';\n    std::cout << j_number_unsigned_integer.is_discarded() << '\\n';\n    std::cout << j_number_float.is_discarded() << '\\n';\n    std::cout << j_object.is_discarded() << '\\n';\n    std::cout << j_array.is_discarded() << '\\n';\n    std::cout << j_string.is_discarded() << '\\n';\n    std::cout << j_binary.is_discarded() << '\\n';\n}\n

    Output:

    false\nfalse\nfalse\nfalse\nfalse\nfalse\nfalse\nfalse\nfalse\n
    "},{"location":"api/basic_json/is_discarded/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/is_null/","title":"nlohmann::basic_json::is_null","text":"
    constexpr bool is_null() const noexcept;\n

    This function returns true if and only if the JSON value is null.

    "},{"location":"api/basic_json/is_null/#return-value","title":"Return value","text":"

    true if type is null, false otherwise.

    "},{"location":"api/basic_json/is_null/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/is_null/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/is_null/#examples","title":"Examples","text":"Example

    The following code exemplifies is_null() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_null()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_null() << '\\n';\n    std::cout << j_boolean.is_null() << '\\n';\n    std::cout << j_number_integer.is_null() << '\\n';\n    std::cout << j_number_unsigned_integer.is_null() << '\\n';\n    std::cout << j_number_float.is_null() << '\\n';\n    std::cout << j_object.is_null() << '\\n';\n    std::cout << j_array.is_null() << '\\n';\n    std::cout << j_string.is_null() << '\\n';\n    std::cout << j_binary.is_null() << '\\n';\n}\n

    Output:

    true\nfalse\nfalse\nfalse\nfalse\nfalse\nfalse\nfalse\nfalse\n
    "},{"location":"api/basic_json/is_null/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/is_number/","title":"nlohmann::basic_json::is_number","text":"
    constexpr bool is_number() const noexcept;\n

    This function returns true if and only if the JSON value is a number. This includes both integer (signed and unsigned) and floating-point values.

    "},{"location":"api/basic_json/is_number/#return-value","title":"Return value","text":"

    true if type is number (regardless whether integer, unsigned integer or floating-type), false otherwise.

    "},{"location":"api/basic_json/is_number/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/is_number/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/is_number/#possible-implementation","title":"Possible implementation","text":"
    constexpr bool is_number() const noexcept\n{\n    return is_number_integer() || is_number_float();\n}\n
    "},{"location":"api/basic_json/is_number/#examples","title":"Examples","text":"Example

    The following code exemplifies is_number() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_number()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_number() << '\\n';\n    std::cout << j_boolean.is_number() << '\\n';\n    std::cout << j_number_integer.is_number() << '\\n';\n    std::cout << j_number_unsigned_integer.is_number() << '\\n';\n    std::cout << j_number_float.is_number() << '\\n';\n    std::cout << j_object.is_number() << '\\n';\n    std::cout << j_array.is_number() << '\\n';\n    std::cout << j_string.is_number() << '\\n';\n    std::cout << j_binary.is_number() << '\\n';\n}\n

    Output:

    false\nfalse\ntrue\ntrue\ntrue\nfalse\nfalse\nfalse\nfalse\n
    "},{"location":"api/basic_json/is_number/#see-also","title":"See also","text":"
    • is_number_integer() check if value is an integer or unsigned integer number
    • is_number_unsigned() check if value is an unsigned integer number
    • is_number_float() check if value is a floating-point number
    "},{"location":"api/basic_json/is_number/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Extended to also return true for unsigned integers in 2.0.0.
    "},{"location":"api/basic_json/is_number_float/","title":"nlohmann::basic_json::is_number_float","text":"
    constexpr bool is_number_float() const noexcept;\n

    This function returns true if and only if the JSON value is a floating-point number. This excludes signed and unsigned integer values.

    "},{"location":"api/basic_json/is_number_float/#return-value","title":"Return value","text":"

    true if type is a floating-point number, false otherwise.

    "},{"location":"api/basic_json/is_number_float/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/is_number_float/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/is_number_float/#examples","title":"Examples","text":"Example

    The following code exemplifies is_number_float() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_number_float()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_number_float() << '\\n';\n    std::cout << j_boolean.is_number_float() << '\\n';\n    std::cout << j_number_integer.is_number_float() << '\\n';\n    std::cout << j_number_unsigned_integer.is_number_float() << '\\n';\n    std::cout << j_number_float.is_number_float() << '\\n';\n    std::cout << j_object.is_number_float() << '\\n';\n    std::cout << j_array.is_number_float() << '\\n';\n    std::cout << j_string.is_number_float() << '\\n';\n    std::cout << j_binary.is_number_float() << '\\n';\n}\n

    Output:

    false\nfalse\nfalse\nfalse\ntrue\nfalse\nfalse\nfalse\nfalse\n
    "},{"location":"api/basic_json/is_number_float/#see-also","title":"See also","text":"
    • is_number() check if value is a number
    • is_number_integer() check if value is an integer or unsigned integer number
    • is_number_unsigned() check if value is an unsigned integer number
    "},{"location":"api/basic_json/is_number_float/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/is_number_integer/","title":"nlohmann::basic_json::is_number_integer","text":"
    constexpr bool is_number_integer() const noexcept;\n

    This function returns true if and only if the JSON value is a signed or unsigned integer number. This excludes floating-point values.

    "},{"location":"api/basic_json/is_number_integer/#return-value","title":"Return value","text":"

    true if type is an integer or unsigned integer number, false otherwise.

    "},{"location":"api/basic_json/is_number_integer/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/is_number_integer/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/is_number_integer/#examples","title":"Examples","text":"Example

    The following code exemplifies is_number_integer() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_number_integer()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_number_integer() << '\\n';\n    std::cout << j_boolean.is_number_integer() << '\\n';\n    std::cout << j_number_integer.is_number_integer() << '\\n';\n    std::cout << j_number_unsigned_integer.is_number_integer() << '\\n';\n    std::cout << j_number_float.is_number_integer() << '\\n';\n    std::cout << j_object.is_number_integer() << '\\n';\n    std::cout << j_array.is_number_integer() << '\\n';\n    std::cout << j_string.is_number_integer() << '\\n';\n    std::cout << j_binary.is_number_integer() << '\\n';\n}\n

    Output:

    false\nfalse\ntrue\ntrue\nfalse\nfalse\nfalse\nfalse\nfalse\n
    "},{"location":"api/basic_json/is_number_integer/#see-also","title":"See also","text":"
    • is_number() check if value is a number
    • is_number_unsigned() check if value is an unsigned integer number
    • is_number_float() check if value is a floating-point number
    "},{"location":"api/basic_json/is_number_integer/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Extended to also return true for unsigned integers in 2.0.0.
    "},{"location":"api/basic_json/is_number_unsigned/","title":"nlohmann::basic_json::is_number_unsigned","text":"
    constexpr bool is_number_unsigned() const noexcept;\n

    This function returns true if and only if the JSON value is an unsigned integer number. This excludes floating-point and signed integer values.

    "},{"location":"api/basic_json/is_number_unsigned/#return-value","title":"Return value","text":"

    true if type is an unsigned integer number, false otherwise.

    "},{"location":"api/basic_json/is_number_unsigned/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/is_number_unsigned/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/is_number_unsigned/#examples","title":"Examples","text":"Example

    The following code exemplifies is_number_unsigned() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_number_unsigned()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_number_unsigned() << '\\n';\n    std::cout << j_boolean.is_number_unsigned() << '\\n';\n    std::cout << j_number_integer.is_number_unsigned() << '\\n';\n    std::cout << j_number_unsigned_integer.is_number_unsigned() << '\\n';\n    std::cout << j_number_float.is_number_unsigned() << '\\n';\n    std::cout << j_object.is_number_unsigned() << '\\n';\n    std::cout << j_array.is_number_unsigned() << '\\n';\n    std::cout << j_string.is_number_unsigned() << '\\n';\n    std::cout << j_binary.is_number_unsigned() << '\\n';\n}\n

    Output:

    false\nfalse\nfalse\ntrue\nfalse\nfalse\nfalse\nfalse\nfalse\n
    "},{"location":"api/basic_json/is_number_unsigned/#see-also","title":"See also","text":"
    • is_number() check if value is a number
    • is_number_integer() check if value is an integer or unsigned integer number
    • is_number_float() check if value is a floating-point number
    "},{"location":"api/basic_json/is_number_unsigned/#version-history","title":"Version history","text":"
    • Added in version 2.0.0.
    "},{"location":"api/basic_json/is_object/","title":"nlohmann::basic_json::is_object","text":"
    constexpr bool is_object() const noexcept;\n

    This function returns true if and only if the JSON value is an object.

    "},{"location":"api/basic_json/is_object/#return-value","title":"Return value","text":"

    true if type is an object, false otherwise.

    "},{"location":"api/basic_json/is_object/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/is_object/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/is_object/#examples","title":"Examples","text":"Example

    The following code exemplifies is_object() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_float = 23.42;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_object()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_object() << '\\n';\n    std::cout << j_boolean.is_object() << '\\n';\n    std::cout << j_number_integer.is_object() << '\\n';\n    std::cout << j_number_unsigned_integer.is_object() << '\\n';\n    std::cout << j_number_float.is_object() << '\\n';\n    std::cout << j_object.is_object() << '\\n';\n    std::cout << j_array.is_object() << '\\n';\n    std::cout << j_string.is_object() << '\\n';\n    std::cout << j_binary.is_object() << '\\n';\n}\n

    Output:

    false\nfalse\nfalse\nfalse\nfalse\ntrue\nfalse\nfalse\nfalse\n
    "},{"location":"api/basic_json/is_object/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/is_primitive/","title":"nlohmann::basic_json::is_primitive","text":"
    constexpr bool is_primitive() const noexcept;\n

    This function returns true if and only if the JSON type is primitive (string, number, boolean, null, binary).

    "},{"location":"api/basic_json/is_primitive/#return-value","title":"Return value","text":"

    true if type is primitive (string, number, boolean, null, or binary), false otherwise.

    "},{"location":"api/basic_json/is_primitive/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/is_primitive/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/is_primitive/#possible-implementation","title":"Possible implementation","text":"
    constexpr bool is_primitive() const noexcept\n{\n    return is_null() || is_string() || is_boolean() || is_number() || is_binary();\n}\n
    "},{"location":"api/basic_json/is_primitive/#notes","title":"Notes","text":"

    The term primitive stems from RFC 8259:

    JSON can represent four primitive types (strings, numbers, booleans, and null) and two structured types (objects and arrays).

    This library extends primitive types to binary types, because binary types are roughly comparable to strings. Hence, is_primitive() returns true for binary values.

    "},{"location":"api/basic_json/is_primitive/#examples","title":"Examples","text":"Example

    The following code exemplifies is_primitive() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_float = 23.42;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_primitive()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_primitive() << '\\n';\n    std::cout << j_boolean.is_primitive() << '\\n';\n    std::cout << j_number_integer.is_primitive() << '\\n';\n    std::cout << j_number_unsigned_integer.is_primitive() << '\\n';\n    std::cout << j_number_float.is_primitive() << '\\n';\n    std::cout << j_object.is_primitive() << '\\n';\n    std::cout << j_array.is_primitive() << '\\n';\n    std::cout << j_string.is_primitive() << '\\n';\n    std::cout << j_binary.is_primitive() << '\\n';\n}\n

    Output:

    true\ntrue\ntrue\ntrue\ntrue\nfalse\nfalse\ntrue\ntrue\n
    "},{"location":"api/basic_json/is_primitive/#see-also","title":"See also","text":"
    • is_structured() returns whether JSON value is structured
    • is_null() returns whether JSON value is null
    • is_string() returns whether JSON value is a string
    • is_boolean() returns whether JSON value is a boolean
    • is_number() returns whether JSON value is a number
    • is_binary() returns whether JSON value is a binary array
    "},{"location":"api/basic_json/is_primitive/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Extended to return true for binary types in version 3.8.0.
    "},{"location":"api/basic_json/is_string/","title":"nlohmann::basic_json::is_string","text":"
    constexpr bool is_string() const noexcept;\n

    This function returns true if and only if the JSON value is a string.

    "},{"location":"api/basic_json/is_string/#return-value","title":"Return value","text":"

    true if type is a string, false otherwise.

    "},{"location":"api/basic_json/is_string/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/is_string/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/is_string/#examples","title":"Examples","text":"Example

    The following code exemplifies is_string() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_float = 23.42;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_string()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_string() << '\\n';\n    std::cout << j_boolean.is_string() << '\\n';\n    std::cout << j_number_integer.is_string() << '\\n';\n    std::cout << j_number_unsigned_integer.is_string() << '\\n';\n    std::cout << j_number_float.is_string() << '\\n';\n    std::cout << j_object.is_string() << '\\n';\n    std::cout << j_array.is_string() << '\\n';\n    std::cout << j_string.is_string() << '\\n';\n    std::cout << j_binary.is_string() << '\\n';\n}\n

    Output:

    false\nfalse\nfalse\nfalse\nfalse\nfalse\nfalse\ntrue\nfalse\n
    "},{"location":"api/basic_json/is_string/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/is_structured/","title":"nlohmann::basic_json::is_structured","text":"
    constexpr bool is_structured() const noexcept;\n

    This function returns true if and only if the JSON type is structured (array or object).

    "},{"location":"api/basic_json/is_structured/#return-value","title":"Return value","text":"

    true if type is structured (array or object), false otherwise.

    "},{"location":"api/basic_json/is_structured/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/is_structured/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/is_structured/#possible-implementation","title":"Possible implementation","text":"
    constexpr bool is_structured() const noexcept\n{\n    return is_array() || is_object();\n}\n
    "},{"location":"api/basic_json/is_structured/#notes","title":"Notes","text":"

    The term structured stems from RFC 8259:

    JSON can represent four primitive types (strings, numbers, booleans, and null) and two structured types (objects and arrays).

    Note that though strings are containers in C++, they are treated as primitive values in JSON.

    "},{"location":"api/basic_json/is_structured/#examples","title":"Examples","text":"Example

    The following code exemplifies is_structured() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_float = 23.42;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_structured()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_structured() << '\\n';\n    std::cout << j_boolean.is_structured() << '\\n';\n    std::cout << j_number_integer.is_structured() << '\\n';\n    std::cout << j_number_unsigned_integer.is_structured() << '\\n';\n    std::cout << j_number_float.is_structured() << '\\n';\n    std::cout << j_object.is_structured() << '\\n';\n    std::cout << j_array.is_structured() << '\\n';\n    std::cout << j_string.is_structured() << '\\n';\n    std::cout << j_binary.is_structured() << '\\n';\n}\n

    Output:

    false\nfalse\nfalse\nfalse\nfalse\ntrue\ntrue\nfalse\nfalse\n
    "},{"location":"api/basic_json/is_structured/#see-also","title":"See also","text":"
    • is_primitive() returns whether JSON value is primitive
    • is_array() returns whether value is an array
    • is_object() returns whether value is an object
    "},{"location":"api/basic_json/is_structured/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/items/","title":"nlohmann::basic_json::items","text":"
    iteration_proxy<iterator> items() noexcept;\niteration_proxy<const_iterator> items() const noexcept;\n

    This function allows accessing iterator::key() and iterator::value() during range-based for loops. In these loops, a reference to the JSON values is returned, so there is no access to the underlying iterator.

    For loop without items() function:

    for (auto it = j_object.begin(); it != j_object.end(); ++it)\n{\n    std::cout << \"key: \" << it.key() << \", value:\" << it.value() << '\\n';\n}\n

    Range-based for loop without items() function:

    for (auto it : j_object)\n{\n    // \"it\" is of type json::reference and has no key() member\n    std::cout << \"value: \" << it << '\\n';\n}\n

    Range-based for loop with items() function:

    for (auto& el : j_object.items())\n{\n    std::cout << \"key: \" << el.key() << \", value:\" << el.value() << '\\n';\n}\n

    The items() function also allows using structured bindings (C++17):

    for (auto& [key, val] : j_object.items())\n{\n    std::cout << \"key: \" << key << \", value:\" << val << '\\n';\n}\n
    "},{"location":"api/basic_json/items/#return-value","title":"Return value","text":"

    iteration proxy object wrapping the current value with an interface to use in range-based for loops

    "},{"location":"api/basic_json/items/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/items/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/items/#notes","title":"Notes","text":"

    When iterating over an array, key() will return the index of the element as string (see example). For primitive types (e.g., numbers), key() returns an empty string.

    Lifetime issues

    Using items() on temporary objects is dangerous. Make sure the object's lifetime exceeds the iteration. See #2040 for more information.

    "},{"location":"api/basic_json/items/#examples","title":"Examples","text":"Example

    The following code shows an example for items().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n\n    // example for an object\n    for (auto& x : j_object.items())\n    {\n        std::cout << \"key: \" << x.key() << \", value: \" << x.value() << '\\n';\n    }\n\n    // example for an array\n    for (auto& x : j_array.items())\n    {\n        std::cout << \"key: \" << x.key() << \", value: \" << x.value() << '\\n';\n    }\n}\n

    Output:

    key: one, value: 1\nkey: two, value: 2\nkey: 0, value: 1\nkey: 1, value: 2\nkey: 2, value: 4\nkey: 3, value: 8\nkey: 4, value: 16\n
    "},{"location":"api/basic_json/items/#version-history","title":"Version history","text":"
    • Added iterator_wrapper in version 3.0.0.
    • Added items and deprecated iterator_wrapper in version 3.1.0.
    • Added structured binding support in version 3.5.0.

    Deprecation

    This function replaces the static function iterator_wrapper which was introduced in version 1.0.0, but has been deprecated in version 3.1.0. Function iterator_wrapper will be removed in version 4.0.0. Please replace all occurrences of iterator_wrapper(j) with j.items().

    You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

    "},{"location":"api/basic_json/json_base_class_t/","title":"nlohmann::basic_json::json_base_class_t","text":"
    using json_base_class_t = detail::json_base_class<CustomBaseClass>;\n

    The base class used to inject custom functionality into each instance of basic_json. Examples of such functionality might be metadata, additional member functions (e.g., visitors), or other application-specific code.

    "},{"location":"api/basic_json/json_base_class_t/#template-parameters","title":"Template parameters","text":"CustomBaseClass the base class to be added to basic_json"},{"location":"api/basic_json/json_base_class_t/#notes","title":"Notes","text":""},{"location":"api/basic_json/json_base_class_t/#default-type","title":"Default type","text":"

    The default value for CustomBaseClass is void. In this case an empty base class is used and no additional functionality is injected.

    "},{"location":"api/basic_json/json_base_class_t/#limitations","title":"Limitations","text":"

    The type CustomBaseClass has to be a default-constructible class. basic_json only supports copy/move construction/assignment if CustomBaseClass does so as well.

    "},{"location":"api/basic_json/json_base_class_t/#examples","title":"Examples","text":"Example

    The following code shows how to inject custom data and methods for each node.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nclass visitor_adaptor_with_metadata\n{\n  public:\n    template <class Fnc>\n    void visit(const Fnc& fnc) const;\n\n    int metadata = 42;\n  private:\n    template <class Ptr, class Fnc>\n    void do_visit(const Ptr& ptr, const Fnc& fnc) const;\n};\n\nusing json = nlohmann::basic_json <\n             std::map,\n             std::vector,\n             std::string,\n             bool,\n             std::int64_t,\n             std::uint64_t,\n             double,\n             std::allocator,\n             nlohmann::adl_serializer,\n             std::vector<std::uint8_t>,\n             visitor_adaptor_with_metadata\n             >;\n\ntemplate <class Fnc>\nvoid visitor_adaptor_with_metadata::visit(const Fnc& fnc) const\n{\n    do_visit(json::json_pointer{}, fnc);\n}\n\ntemplate <class Ptr, class Fnc>\nvoid visitor_adaptor_with_metadata::do_visit(const Ptr& ptr, const Fnc& fnc) const\n{\n    using value_t = nlohmann::detail::value_t;\n    const json& j = *static_cast<const json*>(this);\n    switch (j.type())\n    {\n        case value_t::object:\n            fnc(ptr, j);\n            for (const auto& entry : j.items())\n            {\n                entry.value().do_visit(ptr / entry.key(), fnc);\n            }\n            break;\n        case value_t::array:\n            fnc(ptr, j);\n            for (std::size_t i = 0; i < j.size(); ++i)\n            {\n                j.at(i).do_visit(ptr / std::to_string(i), fnc);\n            }\n            break;\n        case value_t::null:\n        case value_t::string:\n        case value_t::boolean:\n        case value_t::number_integer:\n        case value_t::number_unsigned:\n        case value_t::number_float:\n        case value_t::binary:\n            fnc(ptr, j);\n            break;\n        case value_t::discarded:\n        default:\n            break;\n    }\n}\n\nint main()\n{\n    // create a json object\n    json j;\n    j[\"null\"];\n    j[\"object\"][\"uint\"] = 1U;\n    j[\"object\"].metadata = 21;\n\n    // visit and output\n    j.visit(\n         [&](const json::json_pointer & p,\n             const json & j)\n    {\n        std::cout << (p.empty() ? std::string{\"/\"} : p.to_string())\n                  << \" - metadata = \" << j.metadata << \" -> \" << j.dump() << '\\n';\n    });\n}\n

    Output:

    / - metadata = 42 -> {\"null\":null,\"object\":{\"uint\":1}}\n/null - metadata = 42 -> null\n/object - metadata = 21 -> {\"uint\":1}\n/object/uint - metadata = 42 -> 1\n
    "},{"location":"api/basic_json/json_base_class_t/#version-history","title":"Version history","text":"
    • Added in version 3.12.0.
    "},{"location":"api/basic_json/json_serializer/","title":"nlohmann::basic_json::json_serializer","text":"
    template<typename T, typename SFINAE>\nusing json_serializer = JSONSerializer<T, SFINAE>;\n
    "},{"location":"api/basic_json/json_serializer/#template-parameters","title":"Template parameters","text":"T type to convert; will be used in the to_json/from_json functions SFINAE type to add compile type checks via SFINAE; usually void"},{"location":"api/basic_json/json_serializer/#notes","title":"Notes","text":""},{"location":"api/basic_json/json_serializer/#default-type","title":"Default type","text":"

    The default values for json_serializer is adl_serializer.

    "},{"location":"api/basic_json/json_serializer/#examples","title":"Examples","text":"Example

    The example below shows how a conversion of a non-default-constructible type is implemented via a specialization of the adl_serializer.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nnamespace ns\n{\n// a simple struct to model a person (not default constructible)\nstruct person\n{\n    person(std::string n, std::string a, int aa)\n        : name(std::move(n)), address(std::move(a)), age(aa)\n    {}\n\n    std::string name;\n    std::string address;\n    int age;\n};\n} // namespace ns\n\nnamespace nlohmann\n{\ntemplate <>\nstruct adl_serializer<ns::person>\n{\n    static ns::person from_json(const json& j)\n    {\n        return {j.at(\"name\"), j.at(\"address\"), j.at(\"age\")};\n    }\n\n    // Here's the catch! You must provide a to_json method! Otherwise, you\n    // will not be able to convert person to json, since you fully\n    // specialized adl_serializer on that type\n    static void to_json(json& j, ns::person p)\n    {\n        j[\"name\"] = p.name;\n        j[\"address\"] = p.address;\n        j[\"age\"] = p.age;\n    }\n};\n} // namespace nlohmann\n\nint main()\n{\n    json j;\n    j[\"name\"] = \"Ned Flanders\";\n    j[\"address\"] = \"744 Evergreen Terrace\";\n    j[\"age\"] = 60;\n\n    auto p = j.template get<ns::person>();\n\n    std::cout << p.name << \" (\" << p.age << \") lives in \" << p.address << std::endl;\n}\n

    Output:

    Ned Flanders (60) lives in 744 Evergreen Terrace\n
    "},{"location":"api/basic_json/json_serializer/#version-history","title":"Version history","text":"
    • Since version 2.0.0.
    "},{"location":"api/basic_json/max_size/","title":"nlohmann::basic_json::max_size","text":"
    size_type max_size() const noexcept;\n

    Returns the maximum number of elements a JSON value is able to hold due to system or library implementation limitations, i.e. std::distance(begin(), end()) for the JSON value.

    "},{"location":"api/basic_json/max_size/#return-value","title":"Return value","text":"

    The return value depends on the different types and is defined as follows:

    Value type return value null 0 (same as size()) boolean 1 (same as size()) string 1 (same as size()) number 1 (same as size()) binary 1 (same as size()) object result of function object_t::max_size() array result of function array_t::max_size()"},{"location":"api/basic_json/max_size/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/basic_json/max_size/#complexity","title":"Complexity","text":"

    Constant, as long as array_t and object_t satisfy the Container concept; that is, their max_size() functions have constant complexity.

    "},{"location":"api/basic_json/max_size/#notes","title":"Notes","text":"

    This function does not return the maximal length of a string stored as JSON value -- it returns the maximal number of string elements the JSON value can store which is 1.

    "},{"location":"api/basic_json/max_size/#examples","title":"Examples","text":"Example

    The following code calls max_size() on the different value types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n\n    // call max_size()\n    std::cout << j_null.max_size() << '\\n';\n    std::cout << j_boolean.max_size() << '\\n';\n    std::cout << j_number_integer.max_size() << '\\n';\n    std::cout << j_number_float.max_size() << '\\n';\n    std::cout << j_object.max_size() << '\\n';\n    std::cout << j_array.max_size() << '\\n';\n    std::cout << j_string.max_size() << '\\n';\n}\n

    Output:

    0\n1\n1\n1\n115292150460684697\n576460752303423487\n1\n

    Note the output is platform-dependent.

    "},{"location":"api/basic_json/max_size/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Extended to return 1 for binary types in version 3.8.0.
    "},{"location":"api/basic_json/merge_patch/","title":"nlohmann::basic_json::merge_patch","text":"
    void merge_patch(const basic_json& apply_patch);\n

    The merge patch format is primarily intended for use with the HTTP PATCH method as a means of describing a set of modifications to a target resource's content. This function applies a merge patch to the current JSON value.

    The function implements the following algorithm from Section 2 of RFC 7396 (JSON Merge Patch):

    define MergePatch(Target, Patch):\n  if Patch is an Object:\n    if Target is not an Object:\n      Target = {} // Ignore the contents and set it to an empty Object\n    for each Name/Value pair in Patch:\n      if Value is null:\n        if Name exists in Target:\n          remove the Name/Value pair from Target\n      else:\n        Target[Name] = MergePatch(Target[Name], Value)\n    return Target\n  else:\n    return Patch\n

    Thereby, Target is the current object; that is, the patch is applied to the current value.

    "},{"location":"api/basic_json/merge_patch/#parameters","title":"Parameters","text":"apply_patch (in) the patch to apply"},{"location":"api/basic_json/merge_patch/#complexity","title":"Complexity","text":"

    Linear in the lengths of apply_patch.

    "},{"location":"api/basic_json/merge_patch/#examples","title":"Examples","text":"Example

    The following code shows how a JSON Merge Patch is applied to a JSON document.

    #include <iostream>\n#include <nlohmann/json.hpp>\n#include <iomanip> // for std::setw\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // the original document\n    json document = R\"({\n                \"title\": \"Goodbye!\",\n                \"author\": {\n                    \"givenName\": \"John\",\n                    \"familyName\": \"Doe\"\n                },\n                \"tags\": [\n                    \"example\",\n                    \"sample\"\n                ],\n                \"content\": \"This will be unchanged\"\n            })\"_json;\n\n    // the patch\n    json patch = R\"({\n                \"title\": \"Hello!\",\n                \"phoneNumber\": \"+01-123-456-7890\",\n                \"author\": {\n                    \"familyName\": null\n                },\n                \"tags\": [\n                    \"example\"\n                ]\n            })\"_json;\n\n    // apply the patch\n    document.merge_patch(patch);\n\n    // output original and patched document\n    std::cout << std::setw(4) << document << std::endl;\n}\n

    Output:

    {\n    \"author\": {\n        \"givenName\": \"John\"\n    },\n    \"content\": \"This will be unchanged\",\n    \"phoneNumber\": \"+01-123-456-7890\",\n    \"tags\": [\n        \"example\"\n    ],\n    \"title\": \"Hello!\"\n}\n
    "},{"location":"api/basic_json/merge_patch/#see-also","title":"See also","text":"
    • RFC 7396 (JSON Merge Patch)
    • patch apply a JSON patch
    "},{"location":"api/basic_json/merge_patch/#version-history","title":"Version history","text":"
    • Added in version 3.0.0.
    "},{"location":"api/basic_json/meta/","title":"nlohmann::basic_json::meta","text":"
    static basic_json meta();\n

    This function returns a JSON object with information about the library, including the version number and information on the platform and compiler.

    "},{"location":"api/basic_json/meta/#return-value","title":"Return value","text":"

    JSON object holding version information

    key description compiler Information on the used compiler. It is an object with the following keys: c++ (the used C++ standard), family (the compiler family; possible values are clang, icc, gcc, ilecpp, msvc, pgcpp, sunpro, and unknown), and version (the compiler version). copyright The copyright line for the library as string. name The name of the library as string. platform The used platform as string. Possible values are win32, linux, apple, unix, and unknown. url The URL of the project as string. version The version of the library. It is an object with the following keys: major, minor, and patch as defined by Semantic Versioning, and string (the version string)."},{"location":"api/basic_json/meta/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes to any JSON value.

    "},{"location":"api/basic_json/meta/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/meta/#examples","title":"Examples","text":"Example

    The following code shows an example output of the meta() function.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // call meta()\n    std::cout << std::setw(4) << json::meta() << '\\n';\n}\n

    Output:

    {\n    \"compiler\": {\n        \"c++\": \"201103\",\n        \"family\": \"gcc\",\n        \"version\": \"12.3.0\"\n    },\n    \"copyright\": \"(C) 2013-2022 Niels Lohmann\",\n    \"name\": \"JSON for Modern C++\",\n    \"platform\": \"apple\",\n    \"url\": \"https://github.com/nlohmann/json\",\n    \"version\": {\n        \"major\": 3,\n        \"minor\": 11,\n        \"patch\": 3,\n        \"string\": \"3.11.3\"\n    }\n}\n

    Note the output is platform-dependent.

    "},{"location":"api/basic_json/meta/#see-also","title":"See also","text":"
    • NLOHMANN_JSON_VERSION_MAJOR/NLOHMANN_JSON_VERSION_MINOR/NLOHMANN_JSON_VERSION_PATCH - library version information
    "},{"location":"api/basic_json/meta/#version-history","title":"Version history","text":"
    • Added in version 2.1.0.
    "},{"location":"api/basic_json/number_float_t/","title":"nlohmann::basic_json::number_float_t","text":"
    using number_float_t = NumberFloatType;\n

    The type used to store JSON numbers (floating-point).

    RFC 8259 describes numbers as follows:

    The representation of numbers is similar to that used in most programming languages. A number is represented in base 10 using decimal digits. It contains an integer component that may be prefixed with an optional minus sign, which may be followed by a fraction part and/or an exponent part. Leading zeros are not allowed. (...) Numeric values that cannot be represented in the grammar below (such as Infinity and NaN) are not permitted.

    This description includes both integer and floating-point numbers. However, C++ allows more precise storage if it is known whether the number is a signed integer, an unsigned integer or a floating-point number. Therefore, three different types, number_integer_t, number_unsigned_t and number_float_t are used.

    To store floating-point numbers in C++, a type is defined by the template parameter NumberFloatType which chooses the type to use.

    "},{"location":"api/basic_json/number_float_t/#notes","title":"Notes","text":""},{"location":"api/basic_json/number_float_t/#default-type","title":"Default type","text":"

    With the default values for NumberFloatType (double), the default value for number_float_t is double.

    "},{"location":"api/basic_json/number_float_t/#default-behavior","title":"Default behavior","text":"
    • The restrictions about leading zeros is not enforced in C++. Instead, leading zeros in floating-point literals will be ignored. Internally, the value will be stored as decimal number. For instance, the C++ floating-point literal 01.2 will be serialized to 1.2. During deserialization, leading zeros yield an error.
    • Not-a-number (NaN) values will be serialized to null.
    "},{"location":"api/basic_json/number_float_t/#limits","title":"Limits","text":"

    RFC 8259 states:

    This specification allows implementations to set limits on the range and precision of numbers accepted. Since software that implements IEEE 754-2008 binary64 (double precision) numbers is generally available and widely used, good interoperability can be achieved by implementations that expect no more precision or range than these provide, in the sense that implementations will approximate JSON numbers within the expected precision.

    This implementation does exactly follow this approach, as it uses double precision floating-point numbers. Note values smaller than -1.79769313486232e+308 and values greater than 1.79769313486232e+308 will be stored as NaN internally and be serialized to null.

    "},{"location":"api/basic_json/number_float_t/#storage","title":"Storage","text":"

    Floating-point number values are stored directly inside a basic_json type.

    "},{"location":"api/basic_json/number_float_t/#examples","title":"Examples","text":"Example

    The following code shows that number_float_t is by default, a typedef to double.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::boolalpha << std::is_same<double, json::number_float_t>::value << std::endl;\n}\n

    Output:

    true\n
    "},{"location":"api/basic_json/number_float_t/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/number_integer_t/","title":"nlohmann::basic_json::number_integer_t","text":"
    using number_integer_t = NumberIntegerType;\n

    The type used to store JSON numbers (integers).

    RFC 8259 describes numbers as follows:

    The representation of numbers is similar to that used in most programming languages. A number is represented in base 10 using decimal digits. It contains an integer component that may be prefixed with an optional minus sign, which may be followed by a fraction part and/or an exponent part. Leading zeros are not allowed. (...) Numeric values that cannot be represented in the grammar below (such as Infinity and NaN) are not permitted.

    This description includes both integer and floating-point numbers. However, C++ allows more precise storage if it is known whether the number is a signed integer, an unsigned integer or a floating-point number. Therefore, three different types, number_integer_t, number_unsigned_t and number_float_t are used.

    To store integer numbers in C++, a type is defined by the template parameter NumberIntegerType which chooses the type to use.

    "},{"location":"api/basic_json/number_integer_t/#notes","title":"Notes","text":""},{"location":"api/basic_json/number_integer_t/#default-type","title":"Default type","text":"

    With the default values for NumberIntegerType (std::int64_t), the default value for number_integer_t is std::int64_t.

    "},{"location":"api/basic_json/number_integer_t/#default-behavior","title":"Default behavior","text":"
    • The restrictions about leading zeros is not enforced in C++. Instead, leading zeros in integer literals lead to an interpretation as octal number. Internally, the value will be stored as decimal number. For instance, the C++ integer literal 010 will be serialized to 8. During deserialization, leading zeros yield an error.
    • Not-a-number (NaN) values will be serialized to null.
    "},{"location":"api/basic_json/number_integer_t/#limits","title":"Limits","text":"

    RFC 8259 specifies:

    An implementation may set limits on the range and precision of numbers.

    When the default type is used, the maximal integer number that can be stored is 9223372036854775807 (INT64_MAX) and the minimal integer number that can be stored is -9223372036854775808 (INT64_MIN). Integer numbers that are out of range will yield over/underflow when used in a constructor. During deserialization, too large or small integer numbers will be automatically be stored as number_unsigned_t or number_float_t.

    RFC 8259 further states:

    Note that when such software is used, numbers that are integers and are in the range [-2^{53}+1, 2^{53}-1] are interoperable in the sense that implementations will agree exactly on their numeric values.

    As this range is a subrange of the exactly supported range [INT64_MIN, INT64_MAX], this class's integer type is interoperable.

    "},{"location":"api/basic_json/number_integer_t/#storage","title":"Storage","text":"

    Integer number values are stored directly inside a basic_json type.

    "},{"location":"api/basic_json/number_integer_t/#examples","title":"Examples","text":"Example

    The following code shows that number_integer_t is by default, a typedef to std::int64_t.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::boolalpha << std::is_same<std::int64_t, json::number_integer_t>::value << std::endl;\n}\n

    Output:

    true\n
    "},{"location":"api/basic_json/number_integer_t/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/number_unsigned_t/","title":"nlohmann::basic_json::number_unsigned_t","text":"
    using number_unsigned_t = NumberUnsignedType;\n

    The type used to store JSON numbers (unsigned).

    RFC 8259 describes numbers as follows:

    The representation of numbers is similar to that used in most programming languages. A number is represented in base 10 using decimal digits. It contains an integer component that may be prefixed with an optional minus sign, which may be followed by a fraction part and/or an exponent part. Leading zeros are not allowed. (...) Numeric values that cannot be represented in the grammar below (such as Infinity and NaN) are not permitted.

    This description includes both integer and floating-point numbers. However, C++ allows more precise storage if it is known whether the number is a signed integer, an unsigned integer or a floating-point number. Therefore, three different types, number_integer_t, number_unsigned_t and number_float_t are used.

    To store unsigned integer numbers in C++, a type is defined by the template parameter NumberUnsignedType which chooses the type to use.

    "},{"location":"api/basic_json/number_unsigned_t/#notes","title":"Notes","text":""},{"location":"api/basic_json/number_unsigned_t/#default-type","title":"Default type","text":"

    With the default values for NumberUnsignedType (std::uint64_t), the default value for number_unsigned_t is std::uint64_t.

    "},{"location":"api/basic_json/number_unsigned_t/#default-behavior","title":"Default behavior","text":"
    • The restrictions about leading zeros is not enforced in C++. Instead, leading zeros in integer literals lead to an interpretation as octal number. Internally, the value will be stored as decimal number. For instance, the C++ integer literal 010 will be serialized to 8. During deserialization, leading zeros yield an error.
    • Not-a-number (NaN) values will be serialized to null.
    "},{"location":"api/basic_json/number_unsigned_t/#limits","title":"Limits","text":"

    RFC 8259 specifies:

    An implementation may set limits on the range and precision of numbers.

    When the default type is used, the maximal integer number that can be stored is 18446744073709551615 (UINT64_MAX) and the minimal integer number that can be stored is 0. Integer numbers that are out of range will yield over/underflow when used in a constructor. During deserialization, too large or small integer numbers will be automatically be stored as number_integer_t or number_float_t.

    RFC 8259 further states:

    Note that when such software is used, numbers that are integers and are in the range \\f[-2^{53}+1, 2^{53}-1]\\f are interoperable in the sense that implementations will agree exactly on their numeric values.

    As this range is a subrange (when considered in conjunction with the number_integer_t type) of the exactly supported range [0, UINT64_MAX], this class's integer type is interoperable.

    "},{"location":"api/basic_json/number_unsigned_t/#storage","title":"Storage","text":"

    Integer number values are stored directly inside a basic_json type.

    "},{"location":"api/basic_json/number_unsigned_t/#examples","title":"Examples","text":"Example

    The following code shows that number_unsigned_t is by default, a typedef to std::uint64_t.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::boolalpha << std::is_same<std::uint64_t, json::number_unsigned_t>::value << std::endl;\n}\n

    Output:

    true\n
    "},{"location":"api/basic_json/number_unsigned_t/#version-history","title":"Version history","text":"
    • Added in version 2.0.0.
    "},{"location":"api/basic_json/object/","title":"nlohmann::basic_json::object","text":"
    static basic_json object(initializer_list_t init = {});\n

    Creates a JSON object value from a given initializer list. The initializer lists elements must be pairs, and their first elements must be strings. If the initializer list is empty, the empty object {} is created.

    "},{"location":"api/basic_json/object/#parameters","title":"Parameters","text":"init (in) initializer list with JSON values to create an object from (optional)"},{"location":"api/basic_json/object/#return-value","title":"Return value","text":"

    JSON object value

    "},{"location":"api/basic_json/object/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/object/#exceptions","title":"Exceptions","text":"

    Throws type_error.301 if init is not a list of pairs whose first elements are strings. In this case, no object can be created. When such a value is passed to basic_json(initializer_list_t, bool, value_t), an array would have been created from the passed initializer list init. See example below.

    "},{"location":"api/basic_json/object/#complexity","title":"Complexity","text":"

    Linear in the size of init.

    "},{"location":"api/basic_json/object/#notes","title":"Notes","text":"

    This function is only added for symmetry reasons. In contrast to the related function array(initializer_list_t), there are no cases which can only be expressed by this function. That is, any initializer list init can also be passed to the initializer list constructor basic_json(initializer_list_t, bool, value_t).

    "},{"location":"api/basic_json/object/#examples","title":"Examples","text":"Example

    The following code shows an example for the object function.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON objects\n    json j_no_init_list = json::object();\n    json j_empty_init_list = json::object({});\n    json j_list_of_pairs = json::object({ {\"one\", 1}, {\"two\", 2} });\n\n    // serialize the JSON objects\n    std::cout << j_no_init_list << '\\n';\n    std::cout << j_empty_init_list << '\\n';\n    std::cout << j_list_of_pairs << '\\n';\n\n    // example for an exception\n    try\n    {\n        // can only create an object from a list of pairs\n        json j_invalid_object = json::object({{ \"one\", 1, 2 }});\n    }\n    catch (const json::type_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    {}\n{}\n{\"one\":1,\"two\":2}\n[json.exception.type_error.301] cannot create object from initializer list\n
    "},{"location":"api/basic_json/object/#see-also","title":"See also","text":"
    • basic_json(initializer_list_t) - create a JSON value from an initializer list
    • array - create a JSON array value from an initializer list
    "},{"location":"api/basic_json/object/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/object_comparator_t/","title":"nlohmann::basic_json::object_comparator_t","text":"
    using object_comparator_t = typename object_t::key_compare;\n// or\nusing object_comparator_t = default_object_comparator_t;\n

    The comparator used by object_t. Defined as typename object_t::key_compare if available, and default_object_comparator_t otherwise.

    "},{"location":"api/basic_json/object_comparator_t/#examples","title":"Examples","text":"Example

    The example below demonstrates the used object comparator.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::boolalpha\n              << \"json::object_comparator_t(\\\"one\\\", \\\"two\\\") = \" << json::object_comparator_t{}(\"one\", \"two\") << \"\\n\"\n              << \"json::object_comparator_t(\\\"three\\\", \\\"four\\\") = \" << json::object_comparator_t{}(\"three\", \"four\") << std::endl;\n}\n

    Output:

    json::object_comparator_t(\"one\", \"two\") = true\njson::object_comparator_t(\"three\", \"four\") = false\n
    "},{"location":"api/basic_json/object_comparator_t/#version-history","title":"Version history","text":"
    • Added in version 3.0.0.
    • Changed to be conditionally defined as typename object_t::key_compare or default_object_comparator_t in version 3.11.0.
    "},{"location":"api/basic_json/object_t/","title":"nlohmann::basic_json::object_t","text":"
    using object_t = ObjectType<StringType,\n                            basic_json,\n                            default_object_comparator_t,\n                            AllocatorType<std::pair<const StringType, basic_json>>>;\n

    The type used to store JSON objects.

    RFC 8259 describes JSON objects as follows:

    An object is an unordered collection of zero or more name/value pairs, where a name is a string and a value is a string, number, boolean, null, object, or array.

    To store objects in C++, a type is defined by the template parameters described below.

    "},{"location":"api/basic_json/object_t/#template-parameters","title":"Template parameters","text":"ObjectType the container to store objects (e.g., std::map or std::unordered_map) StringType the type of the keys or names (e.g., std::string). The comparison function std::less<StringType> is used to order elements inside the container. AllocatorType the allocator to use for objects (e.g., std::allocator)"},{"location":"api/basic_json/object_t/#notes","title":"Notes","text":""},{"location":"api/basic_json/object_t/#default-type","title":"Default type","text":"

    With the default values for ObjectType (std::map), StringType (std::string), and AllocatorType (std::allocator), the default value for object_t is:

    // until C++14\nstd::map<\n  std::string, // key_type\n  basic_json, // value_type\n  std::less<std::string>, // key_compare\n  std::allocator<std::pair<const std::string, basic_json>> // allocator_type\n>\n\n// since C++14\nstd::map<\n  std::string, // key_type\n  basic_json, // value_type\n  std::less<>, // key_compare\n  std::allocator<std::pair<const std::string, basic_json>> // allocator_type\n>\n

    See default_object_comparator_t for more information.

    "},{"location":"api/basic_json/object_t/#behavior","title":"Behavior","text":"

    The choice of object_t influences the behavior of the JSON class. With the default type, objects have the following behavior:

    • When all names are unique, objects will be interoperable in the sense that all software implementations receiving that object will agree on the name-value mappings.
    • When the names within an object are not unique, it is unspecified which one of the values for a given key will be chosen. For instance, {\"key\": 2, \"key\": 1} could be equal to either {\"key\": 1} or {\"key\": 2}.
    • Internally, name/value pairs are stored in lexicographical order of the names. Objects will also be serialized (see dump) in this order. For instance, {\"b\": 1, \"a\": 2} and {\"a\": 2, \"b\": 1} will be stored and serialized as {\"a\": 2, \"b\": 1}.
    • When comparing objects, the order of the name/value pairs is irrelevant. This makes objects interoperable in the sense that they will not be affected by these differences. For instance, {\"b\": 1, \"a\": 2} and {\"a\": 2, \"b\": 1} will be treated as equal.
    "},{"location":"api/basic_json/object_t/#limits","title":"Limits","text":"

    RFC 8259 specifies:

    An implementation may set limits on the maximum depth of nesting.

    In this class, the object's limit of nesting is not explicitly constrained. However, a maximum depth of nesting may be introduced by the compiler or runtime environment. A theoretical limit can be queried by calling the max_size function of a JSON object.

    "},{"location":"api/basic_json/object_t/#storage","title":"Storage","text":"

    Objects are stored as pointers in a basic_json type. That is, for any access to object values, a pointer of type object_t* must be dereferenced.

    "},{"location":"api/basic_json/object_t/#object-key-order","title":"Object key order","text":"

    The order name/value pairs are added to the object is not preserved by the library. Therefore, iterating an object may return name/value pairs in a different order than they were originally stored. In fact, keys will be traversed in alphabetical order as std::map with std::less is used by default. Please note this behavior conforms to RFC 8259, because any order implements the specified \"unordered\" nature of JSON objects.

    "},{"location":"api/basic_json/object_t/#examples","title":"Examples","text":"Example

    The following code shows that object_t is by default, a typedef to std::map<json::string_t, json>.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::boolalpha << std::is_same<std::map<json::string_t, json>, json::object_t>::value << std::endl;\n}\n

    Output:

    true\n
    "},{"location":"api/basic_json/object_t/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/operator%2B%3D/","title":"nlohmann::basic_json::operator+=","text":"
    // (1)\nreference operator+=(basic_json&& val);\nreference operator+=(const basic_json& val);\n\n// (2)\nreference operator+=(const typename object_t::value_type& val);\n\n// (3)\nreference operator+=(initializer_list_t init);\n
    1. Appends the given element val to the end of the JSON array. If the function is called on a JSON null value, an empty array is created before appending val.

    2. Inserts the given element val to the JSON object. If the function is called on a JSON null value, an empty object is created before inserting val.

    3. This function allows using operator+= with an initializer list. In case

      1. the current value is an object,
      2. the initializer list init contains only two elements, and
      3. the first element of init is a string,

      init is converted into an object element and added using operator+=(const typename object_t::value_type&). Otherwise, init is converted to a JSON value and added using operator+=(basic_json&&).

    "},{"location":"api/basic_json/operator%2B%3D/#iterator-invalidation","title":"Iterator invalidation","text":"

    For all cases where an element is added to an array, a reallocation can happen, in which case all iterators (including the end() iterator) and all references to the elements are invalidated. Otherwise, only the end() iterator is invalidated.

    For ordered_json, also adding an element to an object can yield a reallocation which again invalidates all iterators and all references.

    "},{"location":"api/basic_json/operator%2B%3D/#parameters","title":"Parameters","text":"val (in) the value to add to the JSON array/object init (in) an initializer list"},{"location":"api/basic_json/operator%2B%3D/#return-value","title":"Return value","text":"

    *this

    "},{"location":"api/basic_json/operator%2B%3D/#exceptions","title":"Exceptions","text":"

    All functions can throw the following exception: - Throws type_error.308 when called on a type other than JSON array or null; example: \"cannot use operator+=() with number\"

    "},{"location":"api/basic_json/operator%2B%3D/#complexity","title":"Complexity","text":"
    1. Amortized constant.
    2. Logarithmic in the size of the container, O(log(size())).
    3. Linear in the size of the initializer list init.
    "},{"location":"api/basic_json/operator%2B%3D/#notes","title":"Notes","text":"

    (3) This function is required to resolve an ambiguous overload error, because pairs like {\"key\", \"value\"} can be both interpreted as object_t::value_type or std::initializer_list<basic_json>, see #235 for more information.

    "},{"location":"api/basic_json/operator%2B%3D/#examples","title":"Examples","text":"Example: (1) add element to array

    The example shows how push_back() and += can be used to add elements to a JSON array. Note how the null value was silently converted to a JSON array.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json array = {1, 2, 3, 4, 5};\n    json null;\n\n    // print values\n    std::cout << array << '\\n';\n    std::cout << null << '\\n';\n\n    // add values\n    array.push_back(6);\n    array += 7;\n    null += \"first\";\n    null += \"second\";\n\n    // print values\n    std::cout << array << '\\n';\n    std::cout << null << '\\n';\n}\n

    Output:

    [1,2,3,4,5]\nnull\n[1,2,3,4,5,6,7]\n[\"first\",\"second\"]\n
    Example: (2) add element to object

    The example shows how push_back() and += can be used to add elements to a JSON object. Note how the null value was silently converted to a JSON object.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json object = {{\"one\", 1}, {\"two\", 2}};\n    json null;\n\n    // print values\n    std::cout << object << '\\n';\n    std::cout << null << '\\n';\n\n    // add values\n    object.push_back(json::object_t::value_type(\"three\", 3));\n    object += json::object_t::value_type(\"four\", 4);\n    null += json::object_t::value_type(\"A\", \"a\");\n    null += json::object_t::value_type(\"B\", \"b\");\n\n    // print values\n    std::cout << object << '\\n';\n    std::cout << null << '\\n';\n}\n

    Output:

    {\"one\":1,\"two\":2}\nnull\n{\"four\":4,\"one\":1,\"three\":3,\"two\":2}\n{\"A\":\"a\",\"B\":\"b\"}\n
    Example: (3) add to object from initializer list

    The example shows how initializer lists are treated as objects when possible.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json object = {{\"one\", 1}, {\"two\", 2}};\n    json null;\n\n    // print values\n    std::cout << object << '\\n';\n    std::cout << null << '\\n';\n\n    // add values:\n    object.push_back({\"three\", 3});  // object is extended\n    object += {\"four\", 4};           // object is extended\n    null.push_back({\"five\", 5});     // null is converted to array\n\n    // print values\n    std::cout << object << '\\n';\n    std::cout << null << '\\n';\n\n    // would throw:\n    //object.push_back({1, 2, 3});\n}\n

    Output:

    {\"one\":1,\"two\":2}\nnull\n{\"four\":4,\"one\":1,\"three\":3,\"two\":2}\n[[\"five\",5]]\n
    "},{"location":"api/basic_json/operator%2B%3D/#see-also","title":"See also","text":"
    • emplace_back add a value to an array
    • push_back add a value to an array/object
    "},{"location":"api/basic_json/operator%2B%3D/#version-history","title":"Version history","text":"
    1. Since version 1.0.0.
    2. Since version 1.0.0.
    3. Since version 2.0.0.
    "},{"location":"api/basic_json/operator%3D/","title":"nlohmann::basic_json::operator=","text":"
    basic_json& operator=(basic_json other) noexcept (\n    std::is_nothrow_move_constructible<value_t>::value &&\n    std::is_nothrow_move_assignable<value_t>::value &&\n    std::is_nothrow_move_constructible<json_value>::value &&\n    std::is_nothrow_move_assignable<json_value>::value\n);\n

    Copy assignment operator. Copies a JSON value via the \"copy and swap\" strategy: It is expressed in terms of the copy constructor, destructor, and the swap() member function.

    "},{"location":"api/basic_json/operator%3D/#parameters","title":"Parameters","text":"other (in) value to copy from"},{"location":"api/basic_json/operator%3D/#complexity","title":"Complexity","text":"

    Linear.

    "},{"location":"api/basic_json/operator%3D/#examples","title":"Examples","text":"Example

    The code below shows and example for the copy assignment. It creates a copy of value a which is then swapped with b. Finally, the copy of a (which is the null value after the swap) is destroyed.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json a = 23;\n    json b = 42;\n\n    // copy-assign a to b\n    b = a;\n\n    // serialize the JSON arrays\n    std::cout << a << '\\n';\n    std::cout << b << '\\n';\n}\n

    Output:

    23\n23\n
    "},{"location":"api/basic_json/operator%3D/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/operator%5B%5D/","title":"nlohmann::basic_json::operator[]","text":"
    // (1)\nreference operator[](size_type idx);\nconst_reference operator[](size_type idx) const;\n\n// (2)\nreference operator[](typename object_t::key_type key);\nconst_reference operator[](const typename object_t::key_type& key) const;\n\n// (3)\ntemplate<typename KeyType>\nreference operator[](KeyType&& key);\ntemplate<typename KeyType>\nconst_reference operator[](KeyType&& key) const;\n\n// (4)\nreference operator[](const json_pointer& ptr);\nconst_reference operator[](const json_pointer& ptr) const;\n
    1. Returns a reference to the array element at specified location idx.
    2. Returns a reference to the object element with specified key key. The non-const qualified overload takes the key by value.
    3. See 2. This overload is only available if KeyType is comparable with typename object_t::key_type and typename object_comparator_t::is_transparent denotes a type.
    4. Returns a reference to the element with specified JSON pointer ptr.
    "},{"location":"api/basic_json/operator%5B%5D/#template-parameters","title":"Template parameters","text":"KeyType A type for an object key other than json_pointer that is comparable with string_t using object_comparator_t. This can also be a string view (C++17)."},{"location":"api/basic_json/operator%5B%5D/#iterator-invalidation","title":"Iterator invalidation","text":"

    For the non-const versions 1. and 4., when passing an array index that does not exist, it is created and filled with a null value before a reference to it is returned. For this, a reallocation can happen, in which case all iterators (including the end() iterator) and all references to the elements are invalidated.

    For ordered_json, also passing an object key to the non-const versions 2., 3., and 4., a reallocation can happen which again invalidates all iterators and all references.

    "},{"location":"api/basic_json/operator%5B%5D/#parameters","title":"Parameters","text":"idx (in) index of the element to access key (in) object key of the element to access ptr (in) JSON pointer to the desired element"},{"location":"api/basic_json/operator%5B%5D/#return-value","title":"Return value","text":"
    1. (const) reference to the element at index idx
    2. (const) reference to the element at key key
    3. (const) reference to the element at key key
    4. (const) reference to the element pointed to by ptr
    "},{"location":"api/basic_json/operator%5B%5D/#exception-safety","title":"Exception safety","text":"

    Strong exception safety: if an exception occurs, the original value stays intact.

    "},{"location":"api/basic_json/operator%5B%5D/#exceptions","title":"Exceptions","text":"
    1. The function can throw the following exceptions:
      • Throws type_error.305 if the JSON value is not an array or null; in that case, using the [] operator with an index makes no sense.
    2. The function can throw the following exceptions:
      • Throws type_error.305 if the JSON value is not an object or null; in that case, using the [] operator with a key makes no sense.
    3. See 2.
    4. The function can throw the following exceptions:
      • Throws parse_error.106 if an array index in the passed JSON pointer ptr begins with '0'.
      • Throws parse_error.109 if an array index in the passed JSON pointer ptr is not a number.
      • Throws out_of_range.402 if the array index '-' is used in the passed JSON pointer ptr for the const version.
      • Throws out_of_range.404 if the JSON pointer ptr can not be resolved.
    "},{"location":"api/basic_json/operator%5B%5D/#complexity","title":"Complexity","text":"
    1. Constant if idx is in the range of the array. Otherwise, linear in idx - size().
    2. Logarithmic in the size of the container.
    3. Logarithmic in the size of the container.
    4. Logarithmic in the size of the container.
    "},{"location":"api/basic_json/operator%5B%5D/#notes","title":"Notes","text":"

    Undefined behavior and runtime assertions

    1. If the element with key idx does not exist, the behavior is undefined.
    2. If the element with key key does not exist, the behavior is undefined and is guarded by a runtime assertion!
    1. The non-const version may add values: If idx is beyond the range of the array (i.e., idx >= size()), then the array is silently filled up with null values to make idx a valid reference to the last stored element. In case the value was null before, it is converted to an array.

    2. If key is not found in the object, then it is silently added to the object and filled with a null value to make key a valid reference. In case the value was null before, it is converted to an object.

    3. See 2.

    4. null values are created in arrays and objects if necessary.

      In particular:

      • If the JSON pointer points to an object key that does not exist, it is created and filled with a null value before a reference to it is returned.
      • If the JSON pointer points to an array index that does not exist, it is created and filled with a null value before a reference to it is returned. All indices between the current maximum and the given index are also filled with null.
      • The special value - is treated as a synonym for the index past the end.
    "},{"location":"api/basic_json/operator%5B%5D/#examples","title":"Examples","text":"Example: (1) access specified array element

    The example below shows how array elements can be read and written using [] operator. Note the addition of null values.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON array\n    json array = {1, 2, 3, 4, 5};\n\n    // output element at index 3 (fourth element)\n    std::cout << array[3] << '\\n';\n\n    // change last element to 6\n    array[array.size() - 1] = 6;\n\n    // output changed array\n    std::cout << array << '\\n';\n\n    // write beyond array limit\n    array[10] = 11;\n\n    // output changed array\n    std::cout << array << '\\n';\n}\n

    Output:

    4\n[1,2,3,4,6]\n[1,2,3,4,6,null,null,null,null,null,11]\n
    Example: (1) access specified array element (const)

    The example below shows how array elements can be read using the [] operator.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON array\n    const json array = {\"first\", \"2nd\", \"third\", \"fourth\"};\n\n    // output element at index 2 (third element)\n    std::cout << array.at(2) << '\\n';\n}\n

    Output:

    \"third\"\n
    Example: (2) access specified object element

    The example below shows how object elements can be read and written using the [] operator.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object\n    json object =\n    {\n        {\"one\", 1}, {\"two\", 2}, {\"three\", 2.9}\n    };\n\n    // output element with key \"two\"\n    std::cout << object[\"two\"] << \"\\n\\n\";\n\n    // change element with key \"three\"\n    object[\"three\"] = 3;\n\n    // output changed array\n    std::cout << std::setw(4) << object << \"\\n\\n\";\n\n    // mention nonexisting key\n    object[\"four\"];\n\n    // write to nonexisting key\n    object[\"five\"][\"really\"][\"nested\"] = true;\n\n    // output changed object\n    std::cout << std::setw(4) << object << '\\n';\n}\n

    Output:

    2\n\n{\n    \"one\": 1,\n    \"three\": 3,\n    \"two\": 2\n}\n\n{\n    \"five\": {\n        \"really\": {\n            \"nested\": true\n        }\n    },\n    \"four\": null,\n    \"one\": 1,\n    \"three\": 3,\n    \"two\": 2\n}\n
    Example: (2) access specified object element (const)

    The example below shows how object elements can be read using the [] operator.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object\n    const json object =\n    {\n        {\"one\", 1}, {\"two\", 2}, {\"three\", 2.9}\n    };\n\n    // output element with key \"two\"\n    std::cout << object[\"two\"] << '\\n';\n}\n

    Output:

    2\n
    Example: (3) access specified object element using string_view

    The example below shows how object elements can be read using the [] operator.

    #include <iostream>\n#include <iomanip>\n#include <string_view>\n#include <nlohmann/json.hpp>\n\nusing namespace std::string_view_literals;\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object\n    json object =\n    {\n        {\"one\", 1}, {\"two\", 2}, {\"three\", 2.9}\n    };\n\n    // output element with key \"two\"\n    std::cout << object[\"two\"sv] << \"\\n\\n\";\n\n    // change element with key \"three\"\n    object[\"three\"sv] = 3;\n\n    // output changed array\n    std::cout << std::setw(4) << object << \"\\n\\n\";\n\n    // mention nonexisting key\n    object[\"four\"sv];\n\n    // write to nonexisting key\n    object[\"five\"sv][\"really\"sv][\"nested\"sv] = true;\n\n    // output changed object\n    std::cout << std::setw(4) << object << '\\n';\n}\n

    Output:

    2\n\n{\n    \"one\": 1,\n    \"three\": 3,\n    \"two\": 2\n}\n\n{\n    \"five\": {\n        \"really\": {\n            \"nested\": true\n        }\n    },\n    \"four\": null,\n    \"one\": 1,\n    \"three\": 3,\n    \"two\": 2\n}\n
    Example: (3) access specified object element using string_view (const)

    The example below shows how object elements can be read using the [] operator.

    #include <iostream>\n#include <string_view>\n#include <nlohmann/json.hpp>\n\nusing namespace std::string_view_literals;\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object\n    const json object =\n    {\n        {\"one\", 1}, {\"two\", 2}, {\"three\", 2.9}\n    };\n\n    // output element with key \"two\"\n    std::cout << object[\"two\"sv] << '\\n';\n}\n

    Output:

    2\n
    Example: (4) access specified element via JSON Pointer

    The example below shows how values can be read and written using JSON Pointers.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create a JSON value\n    json j =\n    {\n        {\"number\", 1}, {\"string\", \"foo\"}, {\"array\", {1, 2}}\n    };\n\n    // read-only access\n\n    // output element with JSON pointer \"/number\"\n    std::cout << j[\"/number\"_json_pointer] << '\\n';\n    // output element with JSON pointer \"/string\"\n    std::cout << j[\"/string\"_json_pointer] << '\\n';\n    // output element with JSON pointer \"/array\"\n    std::cout << j[\"/array\"_json_pointer] << '\\n';\n    // output element with JSON pointer \"/array/1\"\n    std::cout << j[\"/array/1\"_json_pointer] << '\\n';\n\n    // writing access\n\n    // change the string\n    j[\"/string\"_json_pointer] = \"bar\";\n    // output the changed string\n    std::cout << j[\"string\"] << '\\n';\n\n    // \"change\" a nonexisting object entry\n    j[\"/boolean\"_json_pointer] = true;\n    // output the changed object\n    std::cout << j << '\\n';\n\n    // change an array element\n    j[\"/array/1\"_json_pointer] = 21;\n    // \"change\" an array element with nonexisting index\n    j[\"/array/4\"_json_pointer] = 44;\n    // output the changed array\n    std::cout << j[\"array\"] << '\\n';\n\n    // \"change\" the array element past the end\n    j[\"/array/-\"_json_pointer] = 55;\n    // output the changed array\n    std::cout << j[\"array\"] << '\\n';\n}\n

    Output:

    1\n\"foo\"\n[1,2]\n2\n\"bar\"\n{\"array\":[1,2],\"boolean\":true,\"number\":1,\"string\":\"bar\"}\n[1,21,null,null,44]\n[1,21,null,null,44,55]\n
    Example: (4) access specified element via JSON Pointer (const)

    The example below shows how values can be read using JSON Pointers.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create a JSON value\n    const json j =\n    {\n        {\"number\", 1}, {\"string\", \"foo\"}, {\"array\", {1, 2}}\n    };\n\n    // read-only access\n\n    // output element with JSON pointer \"/number\"\n    std::cout << j[\"/number\"_json_pointer] << '\\n';\n    // output element with JSON pointer \"/string\"\n    std::cout << j[\"/string\"_json_pointer] << '\\n';\n    // output element with JSON pointer \"/array\"\n    std::cout << j[\"/array\"_json_pointer] << '\\n';\n    // output element with JSON pointer \"/array/1\"\n    std::cout << j[\"/array/1\"_json_pointer] << '\\n';\n}\n

    Output:

    1\n\"foo\"\n[1,2]\n2\n
    "},{"location":"api/basic_json/operator%5B%5D/#see-also","title":"See also","text":"
    • documentation on unchecked access
    • documentation on runtime assertions
    • see at for access by reference with range checking
    • see value for access with default value
    "},{"location":"api/basic_json/operator%5B%5D/#version-history","title":"Version history","text":"
    1. Added in version 1.0.0.
    2. Added in version 1.0.0. Added overloads for T* key in version 1.1.0. Removed overloads for T* key (replaced by 3) in version 3.11.0.
    3. Added in version 3.11.0.
    4. Added in version 2.0.0.
    "},{"location":"api/basic_json/operator_ValueType/","title":"nlohmann::basic_json::operator ValueType","text":"
    template<typename ValueType>\nJSON_EXPLICIT operator ValueType() const;\n

    Implicit type conversion between the JSON value and a compatible value. The call is realized by calling get(). See Notes for the meaning of JSON_EXPLICIT.

    "},{"location":"api/basic_json/operator_ValueType/#template-parameters","title":"Template parameters","text":"ValueType the value type to return"},{"location":"api/basic_json/operator_ValueType/#return-value","title":"Return value","text":"

    copy of the JSON value, converted to ValueType

    "},{"location":"api/basic_json/operator_ValueType/#exceptions","title":"Exceptions","text":"

    Depends on what json_serializer<ValueType> from_json() method throws

    "},{"location":"api/basic_json/operator_ValueType/#complexity","title":"Complexity","text":"

    Linear in the size of the JSON value.

    "},{"location":"api/basic_json/operator_ValueType/#notes","title":"Notes","text":"

    Definition of JSON_EXPLICIT

    By default JSON_EXPLICIT is defined to the empty string, so the signature is:

    template<typename ValueType>\noperator ValueType() const;\n

    If JSON_USE_IMPLICIT_CONVERSIONS is set to 0, JSON_EXPLICIT is defined to explicit:

    template<typename ValueType>\nexplicit operator ValueType() const;\n

    That is, implicit conversions can be switched off by defining JSON_USE_IMPLICIT_CONVERSIONS to 0.

    Future behavior change

    Implicit conversions will be switched off by default in the next major release of the library. That is, JSON_EXPLICIT will be set to explicit by default.

    You can prepare existing code by already defining JSON_USE_IMPLICIT_CONVERSIONS to 0 and replace any implicit conversions with calls to get.

    "},{"location":"api/basic_json/operator_ValueType/#examples","title":"Examples","text":"Example

    The example below shows several conversions from JSON values to other types. There are a few things to note: (1) Floating-point numbers can be converted to integers, (2) A JSON array can be converted to a standard std::vector<short>, (3) A JSON object can be converted to C++ associative containers such as std::unordered_map<std::string, json>.

    #include <iostream>\n#include <unordered_map>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON value with different types\n    json json_types =\n    {\n        {\"boolean\", true},\n        {\n            \"number\", {\n                {\"integer\", 42},\n                {\"floating-point\", 17.23}\n            }\n        },\n        {\"string\", \"Hello, world!\"},\n        {\"array\", {1, 2, 3, 4, 5}},\n        {\"null\", nullptr}\n    };\n\n    // use implicit conversions\n    bool v1 = json_types[\"boolean\"];\n    int v2 = json_types[\"number\"][\"integer\"];\n    short v3 = json_types[\"number\"][\"integer\"];\n    float v4 = json_types[\"number\"][\"floating-point\"];\n    int v5 = json_types[\"number\"][\"floating-point\"];\n    std::string v6 = json_types[\"string\"];\n    std::vector<short> v7 = json_types[\"array\"];\n    std::unordered_map<std::string, json> v8 = json_types;\n\n    // print the conversion results\n    std::cout << v1 << '\\n';\n    std::cout << v2 << ' ' << v3 << '\\n';\n    std::cout << v4 << ' ' << v5 << '\\n';\n    std::cout << v6 << '\\n';\n\n    for (auto i : v7)\n    {\n        std::cout << i << ' ';\n    }\n    std::cout << \"\\n\\n\";\n\n    for (auto i : v8)\n    {\n        std::cout << i.first << \": \" << i.second << '\\n';\n    }\n\n    // example for an exception\n    try\n    {\n        bool v1 = json_types[\"string\"];\n    }\n    catch (const json::type_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    1\n42 42\n17.23 17\nHello, world!\n1 2 3 4 5 \n\nstring: \"Hello, world!\"\nnumber: {\"floating-point\":17.23,\"integer\":42}\nnull: null\nboolean: true\narray: [1,2,3,4,5]\n[json.exception.type_error.302] type must be boolean, but is string\n
    "},{"location":"api/basic_json/operator_ValueType/#version-history","title":"Version history","text":"
    • Since version 1.0.0.
    • Macros JSON_EXPLICIT/JSON_USE_IMPLICIT_CONVERSIONS added in version 3.9.0.
    "},{"location":"api/basic_json/operator_eq/","title":"nlohmann::basic_json::operator==","text":"
    // until C++20\nbool operator==(const_reference lhs, const_reference rhs) noexcept;   // (1)\n\ntemplate<typename ScalarType>\nbool operator==(const_reference lhs, const ScalarType rhs) noexcept;  // (2)\n\ntemplate<typename ScalarType>\nbool operator==(ScalarType lhs, const const_reference rhs) noexcept;  // (2)\n\n// since C++20\nclass basic_json {\n    bool operator==(const_reference rhs) const noexcept;              // (1)\n\n    template<typename ScalarType>\n    bool operator==(ScalarType rhs) const noexcept;                   // (2)\n};\n
    1. Compares two JSON values for equality according to the following rules:

      • Two JSON values are equal if (1) neither value is discarded, or (2) they are of the same type and their stored values are the same according to their respective operator==.
      • Integer and floating-point numbers are automatically converted before comparison.
    2. Compares a JSON value and a scalar or a scalar and a JSON value for equality by converting the scalar to a JSON value and comparing both JSON values according to 1.

    "},{"location":"api/basic_json/operator_eq/#template-parameters","title":"Template parameters","text":"ScalarType a scalar type according to std::is_scalar<ScalarType>::value"},{"location":"api/basic_json/operator_eq/#parameters","title":"Parameters","text":"lhs (in) first value to consider rhs (in) second value to consider"},{"location":"api/basic_json/operator_eq/#return-value","title":"Return value","text":"

    whether the values lhs/*this and rhs are equal

    "},{"location":"api/basic_json/operator_eq/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/basic_json/operator_eq/#complexity","title":"Complexity","text":"

    Linear.

    "},{"location":"api/basic_json/operator_eq/#notes","title":"Notes","text":"

    Comparing special values

    • NaN values are unordered within the domain of numbers. The following comparisons all yield false:
      1. Comparing a NaN with itself.
      2. Comparing a NaN with another NaN.
      3. Comparing a NaN and any other number.
    • JSON null values are all equal.
    • Discarded values never compare equal to themselves.

    Comparing floating-point numbers

    Floating-point numbers inside JSON values numbers are compared with json::number_float_t::operator== which is double::operator== by default. To compare floating-point while respecting an epsilon, an alternative comparison function could be used, for instance

    template<typename T, typename = typename std::enable_if<std::is_floating_point<T>::value, T>::type>\ninline bool is_same(T a, T b, T epsilon = std::numeric_limits<T>::epsilon()) noexcept\n{\n    return std::abs(a - b) <= epsilon;\n}\n

    Or you can self-defined operator equal function like this:

    bool my_equal(const_reference lhs, const_reference rhs)\n{\n    const auto lhs_type lhs.type();\n    const auto rhs_type rhs.type();\n    if (lhs_type == rhs_type)\n    {\n        switch(lhs_type)\n            // self_defined case\n            case value_t::number_float:\n                return std::abs(lhs - rhs) <= std::numeric_limits<float>::epsilon();\n            // other cases remain the same with the original\n            ...\n    }\n...\n}\n

    Comparing different basic_json specializations

    Comparing different basic_json specializations can have surprising effects. For instance, the result of comparing the JSON objects

    {\n   \"version\": 1,\n   \"type\": \"integer\"\n}\n

    and

    {\n   \"type\": \"integer\",\n   \"version\": 1\n}\n

    depends on whether nlohmann::json or nlohmann::ordered_json is used:

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    nlohmann::json uj1 = {{\"version\", 1}, {\"type\", \"integer\"}};\n    nlohmann::json uj2 = {{\"type\", \"integer\"}, {\"version\", 1}};\n\n    nlohmann::ordered_json oj1 = {{\"version\", 1}, {\"type\", \"integer\"}};\n    nlohmann::ordered_json oj2 = {{\"type\", \"integer\"}, {\"version\", 1}};\n\n    std::cout << std::boolalpha << (uj1 == uj2) << '\\n' << (oj1 == oj2) << std::endl;\n}\n

    Output:

    true\nfalse\n
    "},{"location":"api/basic_json/operator_eq/#examples","title":"Examples","text":"Example

    The example demonstrates comparing several JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create several JSON values\n    json array_1 = {1, 2, 3};\n    json array_2 = {1, 2, 4};\n    json object_1 = {{\"A\", \"a\"}, {\"B\", \"b\"}};\n    json object_2 = {{\"B\", \"b\"}, {\"A\", \"a\"}};\n    json number_1 = 17;\n    json number_2 = 17.000000000000001L;\n    json string_1 = \"foo\";\n    json string_2 = \"bar\";\n\n    // output values and comparisons\n    std::cout << std::boolalpha;\n    std::cout << array_1 << \" == \" << array_2 << \" \" << (array_1 == array_2) << '\\n';\n    std::cout << object_1 << \" == \" << object_2 << \" \" << (object_1 == object_2) << '\\n';\n    std::cout << number_1 << \" == \" << number_2 << \" \" << (number_1 == number_2) << '\\n';\n    std::cout << string_1 << \" == \" << string_2 << \" \" << (string_1 == string_2) << '\\n';\n}\n

    Output:

    [1,2,3] == [1,2,4] false\n{\"A\":\"a\",\"B\":\"b\"} == {\"A\":\"a\",\"B\":\"b\"} true\n17 == 17.0 true\n\"foo\" == \"bar\" false\n
    Example

    The example demonstrates comparing several JSON types against the null pointer (JSON null).

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create several JSON values\n    json array = {1, 2, 3};\n    json object = {{\"A\", \"a\"}, {\"B\", \"b\"}};\n    json number = 17;\n    json string = \"foo\";\n    json null;\n\n    // output values and comparisons\n    std::cout << std::boolalpha;\n    std::cout << array << \" == nullptr \" << (array == nullptr) << '\\n';\n    std::cout << object << \" == nullptr \" << (object == nullptr) << '\\n';\n    std::cout << number << \" == nullptr \" << (number == nullptr) << '\\n';\n    std::cout << string << \" == nullptr \" << (string == nullptr) << '\\n';\n    std::cout << null << \" == nullptr \" << (null == nullptr) << '\\n';\n}\n

    Output:

    [1,2,3] == nullptr false\n{\"A\":\"a\",\"B\":\"b\"} == nullptr false\n17 == nullptr false\n\"foo\" == nullptr false\nnull == nullptr true\n
    "},{"location":"api/basic_json/operator_eq/#version-history","title":"Version history","text":"
    1. Added in version 1.0.0. Added C++20 member functions in version 3.11.0.
    2. Added in version 1.0.0. Added C++20 member functions in version 3.11.0.
    "},{"location":"api/basic_json/operator_ge/","title":"nlohmann::basic_json::operator>=","text":"
    // until C++20\nbool operator>=(const_reference lhs, const_reference rhs) noexcept;   // (1)\n\ntemplate<typename ScalarType>\nbool operator>=(const_reference lhs, const ScalarType rhs) noexcept;  // (2)\n\ntemplate<typename ScalarType>\nbool operator>=(ScalarType lhs, const const_reference rhs) noexcept;  // (2)\n
    1. Compares whether one JSON value lhs is greater than or equal to another JSON value rhs according to the following rules:

      • The comparison always yields false if (1) either operand is discarded, or (2) either operand is NaN and the other operand is either NaN or any other number.
      • Otherwise, returns the result of !(lhs < rhs) (see operator<).
    2. Compares whether a JSON value is greater than or equal to a scalar or a scalar is greater than or equal to a JSON value by converting the scalar to a JSON value and comparing both JSON values according to 1.

    "},{"location":"api/basic_json/operator_ge/#template-parameters","title":"Template parameters","text":"ScalarType a scalar type according to std::is_scalar<ScalarType>::value"},{"location":"api/basic_json/operator_ge/#parameters","title":"Parameters","text":"lhs (in) first value to consider rhs (in) second value to consider"},{"location":"api/basic_json/operator_ge/#return-value","title":"Return value","text":"

    whether lhs is less than or equal to rhs

    "},{"location":"api/basic_json/operator_ge/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/basic_json/operator_ge/#complexity","title":"Complexity","text":"

    Linear.

    "},{"location":"api/basic_json/operator_ge/#notes","title":"Notes","text":"

    Comparing NaN

    NaN values are unordered within the domain of numbers. The following comparisons all yield false: 1. Comparing a NaN with itself. 2. Comparing a NaN with another NaN. 3. Comparing a NaN and any other number.

    Operator overload resolution

    Since C++20 overload resolution will consider the rewritten candidate generated from operator<=>.

    "},{"location":"api/basic_json/operator_ge/#examples","title":"Examples","text":"Example

    The example demonstrates comparing several JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create several JSON values\n    json array_1 = {1, 2, 3};\n    json array_2 = {1, 2, 4};\n    json object_1 = {{\"A\", \"a\"}, {\"B\", \"b\"}};\n    json object_2 = {{\"B\", \"b\"}, {\"A\", \"a\"}};\n    json number_1 = 17;\n    json number_2 = 17.0000000000001L;\n    json string_1 = \"foo\";\n    json string_2 = \"bar\";\n\n    // output values and comparisons\n    std::cout << std::boolalpha;\n    std::cout << array_1 << \" >= \" << array_2 << \" \" << (array_1 >= array_2) << '\\n';\n    std::cout << object_1 << \" >= \" << object_2 << \" \" << (object_1 >= object_2) << '\\n';\n    std::cout << number_1 << \" >= \" << number_2 << \" \" << (number_1 >= number_2) << '\\n';\n    std::cout << string_1 << \" >= \" << string_2 << \" \" << (string_1 >= string_2) << '\\n';\n}\n

    Output:

    [1,2,3] >= [1,2,4] false\n{\"A\":\"a\",\"B\":\"b\"} >= {\"A\":\"a\",\"B\":\"b\"} true\n17 >= 17.0000000000001 false\n\"foo\" >= \"bar\" true\n
    "},{"location":"api/basic_json/operator_ge/#see-also","title":"See also","text":"
    • operator<=> comparison: 3-way
    "},{"location":"api/basic_json/operator_ge/#version-history","title":"Version history","text":"
    1. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
    2. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
    "},{"location":"api/basic_json/operator_gt/","title":"nlohmann::basic_json::operator>","text":"
    // until C++20\nbool operator>(const_reference lhs, const_reference rhs) noexcept;   // (1)\n\ntemplate<typename ScalarType>\nbool operator>(const_reference lhs, const ScalarType rhs) noexcept;  // (2)\n\ntemplate<typename ScalarType>\nbool operator>(ScalarType lhs, const const_reference rhs) noexcept;  // (2)\n
    1. Compares whether one JSON value lhs is greater than another JSON value rhs according to the following rules:

      • The comparison always yields false if (1) either operand is discarded, or (2) either operand is NaN and the other operand is either NaN or any other number.
      • Otherwise, returns the result of !(lhs <= rhs) (see operator<=).
    2. Compares whether a JSON value is greater than a scalar or a scalar is greater than a JSON value by converting the scalar to a JSON value and comparing both JSON values according to 1.

    "},{"location":"api/basic_json/operator_gt/#template-parameters","title":"Template parameters","text":"ScalarType a scalar type according to std::is_scalar<ScalarType>::value"},{"location":"api/basic_json/operator_gt/#parameters","title":"Parameters","text":"lhs (in) first value to consider rhs (in) second value to consider"},{"location":"api/basic_json/operator_gt/#return-value","title":"Return value","text":"

    whether lhs is greater than rhs

    "},{"location":"api/basic_json/operator_gt/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/basic_json/operator_gt/#complexity","title":"Complexity","text":"

    Linear.

    "},{"location":"api/basic_json/operator_gt/#notes","title":"Notes","text":"

    Comparing NaN

    NaN values are unordered within the domain of numbers. The following comparisons all yield false: 1. Comparing a NaN with itself. 2. Comparing a NaN with another NaN. 3. Comparing a NaN and any other number.

    Operator overload resolution

    Since C++20 overload resolution will consider the rewritten candidate generated from operator<=>.

    "},{"location":"api/basic_json/operator_gt/#examples","title":"Examples","text":"Example

    The example demonstrates comparing several JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create several JSON values\n    json array_1 = {1, 2, 3};\n    json array_2 = {1, 2, 4};\n    json object_1 = {{\"A\", \"a\"}, {\"B\", \"b\"}};\n    json object_2 = {{\"B\", \"b\"}, {\"A\", \"a\"}};\n    json number_1 = 17;\n    json number_2 = 17.0000000000001L;\n    json string_1 = \"foo\";\n    json string_2 = \"bar\";\n\n    // output values and comparisons\n    std::cout << std::boolalpha;\n    std::cout << array_1 << \" > \" << array_2 << \" \" << (array_1 > array_2) << '\\n';\n    std::cout << object_1 << \" > \" << object_2 << \" \" << (object_1 > object_2) << '\\n';\n    std::cout << number_1 << \" > \" << number_2 << \" \" << (number_1 > number_2) << '\\n';\n    std::cout << string_1 << \" > \" << string_2 << \" \" << (string_1 > string_2) << '\\n';\n}\n

    Output:

    [1,2,3] > [1,2,4] false\n{\"A\":\"a\",\"B\":\"b\"} > {\"A\":\"a\",\"B\":\"b\"} false\n17 > 17.0000000000001 false\n\"foo\" > \"bar\" true\n
    "},{"location":"api/basic_json/operator_gt/#see-also","title":"See also","text":"
    • operator<=> comparison: 3-way
    "},{"location":"api/basic_json/operator_gt/#version-history","title":"Version history","text":"
    1. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
    2. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
    "},{"location":"api/basic_json/operator_le/","title":"nlohmann::basic_json::operator<=","text":"
    // until C++20\nbool operator<=(const_reference lhs, const_reference rhs) noexcept;   // (1)\n\ntemplate<typename ScalarType>\nbool operator<=(const_reference lhs, const ScalarType rhs) noexcept;  // (2)\n\ntemplate<typename ScalarType>\nbool operator<=(ScalarType lhs, const const_reference rhs) noexcept;  // (2)\n
    1. Compares whether one JSON value lhs is less than or equal to another JSON value rhs according to the following rules:

      • The comparison always yields false if (1) either operand is discarded, or (2) either operand is NaN and the other operand is either NaN or any other number.
      • Otherwise, returns the result of !(rhs < lhs) (see operator<).
    2. Compares whether a JSON value is less than or equal to a scalar or a scalar is less than or equal to a JSON value by converting the scalar to a JSON value and comparing both JSON values according to 1.

    "},{"location":"api/basic_json/operator_le/#template-parameters","title":"Template parameters","text":"ScalarType a scalar type according to std::is_scalar<ScalarType>::value"},{"location":"api/basic_json/operator_le/#parameters","title":"Parameters","text":"lhs (in) first value to consider rhs (in) second value to consider"},{"location":"api/basic_json/operator_le/#return-value","title":"Return value","text":"

    whether lhs is less than or equal to rhs

    "},{"location":"api/basic_json/operator_le/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/basic_json/operator_le/#complexity","title":"Complexity","text":"

    Linear.

    "},{"location":"api/basic_json/operator_le/#notes","title":"Notes","text":"

    Comparing NaN

    NaN values are unordered within the domain of numbers. The following comparisons all yield false: 1. Comparing a NaN with itself. 2. Comparing a NaN with another NaN. 3. Comparing a NaN and any other number.

    Operator overload resolution

    Since C++20 overload resolution will consider the rewritten candidate generated from operator<=>.

    "},{"location":"api/basic_json/operator_le/#examples","title":"Examples","text":"Example

    The example demonstrates comparing several JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create several JSON values\n    json array_1 = {1, 2, 3};\n    json array_2 = {1, 2, 4};\n    json object_1 = {{\"A\", \"a\"}, {\"B\", \"b\"}};\n    json object_2 = {{\"B\", \"b\"}, {\"A\", \"a\"}};\n    json number_1 = 17;\n    json number_2 = 17.0000000000001L;\n    json string_1 = \"foo\";\n    json string_2 = \"bar\";\n\n    // output values and comparisons\n    std::cout << std::boolalpha;\n    std::cout << array_1 << \" <= \" << array_2 << \" \" << (array_1 <= array_2) << '\\n';\n    std::cout << object_1 << \" <= \" << object_2 << \" \" << (object_1 <= object_2) << '\\n';\n    std::cout << number_1 << \" <= \" << number_2 << \" \" << (number_1 <= number_2) << '\\n';\n    std::cout << string_1 << \" <= \" << string_2 << \" \" << (string_1 <= string_2) << '\\n';\n}\n

    Output:

    [1,2,3] <= [1,2,4] true\n{\"A\":\"a\",\"B\":\"b\"} <= {\"A\":\"a\",\"B\":\"b\"} true\n17 <= 17.0000000000001 true\n\"foo\" <= \"bar\" false\n
    "},{"location":"api/basic_json/operator_le/#see-also","title":"See also","text":"
    • operator<=> comparison: 3-way
    "},{"location":"api/basic_json/operator_le/#version-history","title":"Version history","text":"
    1. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
    2. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
    "},{"location":"api/basic_json/operator_lt/","title":"nlohmann::basic_json::operator<","text":"
    // until C++20\nbool operator<(const_reference lhs, const_reference rhs) noexcept;   // (1)\n\ntemplate<typename ScalarType>\nbool operator<(const_reference lhs, const ScalarType rhs) noexcept;  // (2)\n\ntemplate<typename ScalarType>\nbool operator<(ScalarType lhs, const const_reference rhs) noexcept;  // (2)\n
    1. Compares whether one JSON value lhs is less than another JSON value rhs according to the following rules:

      • If either operand is discarded, the comparison yields false.
      • If both operands have the same type, the values are compared using their respective operator<.
      • Integer and floating-point numbers are automatically converted before comparison.
      • In case lhs and rhs have different types, the values are ignored and the order of the types is considered, which is:
        1. null
        2. boolean
        3. number (all types)
        4. object
        5. array
        6. string
        7. binary For instance, any boolean value is considered less than any string.
    2. Compares whether a JSON value is less than a scalar or a scalar is less than a JSON value by converting the scalar to a JSON value and comparing both JSON values according to 1.

    "},{"location":"api/basic_json/operator_lt/#template-parameters","title":"Template parameters","text":"ScalarType a scalar type according to std::is_scalar<ScalarType>::value"},{"location":"api/basic_json/operator_lt/#parameters","title":"Parameters","text":"lhs (in) first value to consider rhs (in) second value to consider"},{"location":"api/basic_json/operator_lt/#return-value","title":"Return value","text":"

    whether lhs is less than rhs

    "},{"location":"api/basic_json/operator_lt/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/basic_json/operator_lt/#complexity","title":"Complexity","text":"

    Linear.

    "},{"location":"api/basic_json/operator_lt/#notes","title":"Notes","text":"

    Comparing NaN

    NaN values are unordered within the domain of numbers. The following comparisons all yield false: 1. Comparing a NaN with itself. 2. Comparing a NaN with another NaN. 3. Comparing a NaN and any other number.

    Operator overload resolution

    Since C++20 overload resolution will consider the rewritten candidate generated from operator<=>.

    "},{"location":"api/basic_json/operator_lt/#examples","title":"Examples","text":"Example

    The example demonstrates comparing several JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create several JSON values\n    json array_1 = {1, 2, 3};\n    json array_2 = {1, 2, 4};\n    json object_1 = {{\"A\", \"a\"}, {\"B\", \"b\"}};\n    json object_2 = {{\"B\", \"b\"}, {\"A\", \"a\"}};\n    json number_1 = 17;\n    json number_2 = 17.0000000000001L;\n    json string_1 = \"foo\";\n    json string_2 = \"bar\";\n\n    // output values and comparisons\n    std::cout << std::boolalpha;\n    std::cout << array_1 << \" == \" << array_2 << \" \" << (array_1 < array_2) << '\\n';\n    std::cout << object_1 << \" == \" << object_2 << \" \" << (object_1 < object_2) << '\\n';\n    std::cout << number_1 << \" == \" << number_2 << \" \" << (number_1 < number_2) << '\\n';\n    std::cout << string_1 << \" == \" << string_2 << \" \" << (string_1 < string_2) << '\\n';\n}\n

    Output:

    [1,2,3] == [1,2,4] true\n{\"A\":\"a\",\"B\":\"b\"} == {\"A\":\"a\",\"B\":\"b\"} false\n17 == 17.0000000000001 true\n\"foo\" == \"bar\" false\n
    "},{"location":"api/basic_json/operator_lt/#see-also","title":"See also","text":"
    • operator<=> comparison: 3-way
    "},{"location":"api/basic_json/operator_lt/#version-history","title":"Version history","text":"
    1. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
    2. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
    "},{"location":"api/basic_json/operator_ne/","title":"nlohmann::basic_json::operator!=","text":"
    // until C++20\nbool operator!=(const_reference lhs, const_reference rhs) noexcept;   // (1)\n\ntemplate<typename ScalarType>\nbool operator!=(const_reference lhs, const ScalarType rhs) noexcept;  // (2)\n\ntemplate<typename ScalarType>\nbool operator!=(ScalarType lhs, const const_reference rhs) noexcept;  // (2)\n\n// since C++20\nclass basic_json {\n    bool operator!=(const_reference rhs) const noexcept;              // (1)\n\n    template<typename ScalarType>\n    bool operator!=(ScalarType rhs) const noexcept;                   // (2)\n};\n
    1. Compares two JSON values for inequality according to the following rules:

      • The comparison always yields false if (1) either operand is discarded, or (2) either operand is NaN and the other operand is either NaN or any other number.
      • Otherwise, returns the result of !(lhs == rhs) (until C++20) or !(*this == rhs) (since C++20).
    2. Compares a JSON value and a scalar or a scalar and a JSON value for inequality by converting the scalar to a JSON value and comparing both JSON values according to 1.

    "},{"location":"api/basic_json/operator_ne/#template-parameters","title":"Template parameters","text":"ScalarType a scalar type according to std::is_scalar<ScalarType>::value"},{"location":"api/basic_json/operator_ne/#parameters","title":"Parameters","text":"lhs (in) first value to consider rhs (in) second value to consider"},{"location":"api/basic_json/operator_ne/#return-value","title":"Return value","text":"

    whether the values lhs/*this and rhs are not equal

    "},{"location":"api/basic_json/operator_ne/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/basic_json/operator_ne/#complexity","title":"Complexity","text":"

    Linear.

    "},{"location":"api/basic_json/operator_ne/#notes","title":"Notes","text":"

    Comparing NaN

    NaN values are unordered within the domain of numbers. The following comparisons all yield false: 1. Comparing a NaN with itself. 2. Comparing a NaN with another NaN. 3. Comparing a NaN and any other number.

    "},{"location":"api/basic_json/operator_ne/#examples","title":"Examples","text":"Example

    The example demonstrates comparing several JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create several JSON values\n    json array_1 = {1, 2, 3};\n    json array_2 = {1, 2, 4};\n    json object_1 = {{\"A\", \"a\"}, {\"B\", \"b\"}};\n    json object_2 = {{\"B\", \"b\"}, {\"A\", \"a\"}};\n    json number_1 = 17;\n    json number_2 = 17.000000000000001L;\n    json string_1 = \"foo\";\n    json string_2 = \"bar\";\n\n    // output values and comparisons\n    std::cout << std::boolalpha;\n    std::cout << array_1 << \" != \" << array_2 << \" \" << (array_1 != array_2) << '\\n';\n    std::cout << object_1 << \" != \" << object_2 << \" \" << (object_1 != object_2) << '\\n';\n    std::cout << number_1 << \" != \" << number_2 << \" \" << (number_1 != number_2) << '\\n';\n    std::cout << string_1 << \" != \" << string_2 << \" \" << (string_1 != string_2) << '\\n';\n}\n

    Output:

    [1,2,3] != [1,2,4] true\n{\"A\":\"a\",\"B\":\"b\"} != {\"A\":\"a\",\"B\":\"b\"} false\n17 != 17.0 false\n\"foo\" != \"bar\" true\n
    Example

    The example demonstrates comparing several JSON types against the null pointer (JSON null).

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create several JSON values\n    json array = {1, 2, 3};\n    json object = {{\"A\", \"a\"}, {\"B\", \"b\"}};\n    json number = 17;\n    json string = \"foo\";\n    json null;\n\n    // output values and comparisons\n    std::cout << std::boolalpha;\n    std::cout << array << \" != nullptr \" << (array != nullptr) << '\\n';\n    std::cout << object << \" != nullptr \" << (object != nullptr) << '\\n';\n    std::cout << number << \" != nullptr \" << (number != nullptr) << '\\n';\n    std::cout << string << \" != nullptr \" << (string != nullptr) << '\\n';\n    std::cout << null << \" != nullptr \" << (null != nullptr) << '\\n';\n}\n

    Output:

    [1,2,3] != nullptr true\n{\"A\":\"a\",\"B\":\"b\"} != nullptr true\n17 != nullptr true\n\"foo\" != nullptr true\nnull != nullptr false\n
    "},{"location":"api/basic_json/operator_ne/#version-history","title":"Version history","text":"
    1. Added in version 1.0.0. Added C++20 member functions in version 3.11.0.
    2. Added in version 1.0.0. Added C++20 member functions in version 3.11.0.
    "},{"location":"api/basic_json/operator_spaceship/","title":"nlohmann::basic_json::operator<=>","text":"
    // since C++20\nclass basic_json {\n    std::partial_ordering operator<=>(const_reference rhs) const noexcept;  // (1)\n\n    template<typename ScalarType>\n    std::partial_ordering operator<=>(const ScalarType rhs) const noexcept; // (2)\n};\n
    1. 3-way compares two JSON values producing a result of type std::partial_ordering according to the following rules:

      • Two JSON values compare with a result of std::partial_ordering::unordered if either value is discarded.
      • If both JSON values are of the same type, the result is produced by 3-way comparing their stored values using their respective operator<=>.
      • Integer and floating-point numbers are converted to their common type and then 3-way compared using their respective operator<=>. For instance, comparing an integer and a floating-point value will 3-way compare the first value converted to floating-point with the second value.
      • Otherwise, yields a result by comparing the type (see value_t).
    2. 3-way compares a JSON value and a scalar or a scalar and a JSON value by converting the scalar to a JSON value and 3-way comparing both JSON values (see 1).

    "},{"location":"api/basic_json/operator_spaceship/#template-parameters","title":"Template parameters","text":"ScalarType a scalar type according to std::is_scalar<ScalarType>::value"},{"location":"api/basic_json/operator_spaceship/#parameters","title":"Parameters","text":"rhs (in) second value to consider"},{"location":"api/basic_json/operator_spaceship/#return-value","title":"Return value","text":"

    the std::partial_ordering of the 3-way comparison of *this and rhs

    "},{"location":"api/basic_json/operator_spaceship/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/basic_json/operator_spaceship/#complexity","title":"Complexity","text":"

    Linear.

    "},{"location":"api/basic_json/operator_spaceship/#notes","title":"Notes","text":"

    Comparing NaN

    • NaN values are unordered within the domain of numbers. The following comparisons all yield std::partial_ordering::unordered:
      1. Comparing a NaN with itself.
      2. Comparing a NaN with another NaN.
      3. Comparing a NaN and any other number.
    "},{"location":"api/basic_json/operator_spaceship/#examples","title":"Examples","text":"Example: (1) comparing JSON values

    The example demonstrates comparing several JSON values.

    #include <compare>\n#include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nconst char* to_string(const std::partial_ordering& po)\n{\n    if (std::is_lt(po))\n    {\n        return \"less\";\n    }\n    else if (std::is_gt(po))\n    {\n        return \"greater\";\n    }\n    else if (std::is_eq(po))\n    {\n        return \"equivalent\";\n    }\n    return \"unordered\";\n}\n\nint main()\n{\n    // create several JSON values\n    json array_1 = {1, 2, 3};\n    json array_2 = {1, 2, 4};\n    json object_1 = {{\"A\", \"a\"}, {\"B\", \"b\"}};\n    json object_2 = {{\"B\", \"b\"}, {\"A\", \"a\"}};\n    json number = 17;\n    json string = \"foo\";\n    json discarded = json(json::value_t::discarded);\n\n    // output values and comparisons\n    std::cout << array_1 << \" <=> \" << array_2 << \" := \" << to_string(array_1 <=> array_2) << '\\n'; // *NOPAD*\n    std::cout << object_1 << \" <=> \" << object_2 << \" := \" << to_string(object_1 <=> object_2) << '\\n'; // *NOPAD*\n    std::cout << string << \" <=> \" << number << \" := \" << to_string(string <=> number) << '\\n'; // *NOPAD*\n    std::cout << string << \" <=> \" << discarded << \" := \" << to_string(string <=> discarded) << '\\n'; // *NOPAD*\n}\n

    Output:

    [1,2,3] <=> [1,2,4] := less\n{\"A\":\"a\",\"B\":\"b\"} <=> {\"A\":\"a\",\"B\":\"b\"} := equivalent\n\"foo\" <=> 17 := greater\n\"foo\" <=> <discarded> := unordered\n
    Example: (2) comparing JSON values and scalars

    The example demonstrates comparing several JSON values and scalars.

    #include <compare>\n#include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nconst char* to_string(const std::partial_ordering& po)\n{\n    if (std::is_lt(po))\n    {\n        return \"less\";\n    }\n    else if (std::is_gt(po))\n    {\n        return \"greater\";\n    }\n    else if (std::is_eq(po))\n    {\n        return \"equivalent\";\n    }\n    return \"unordered\";\n}\n\nint main()\n{\n    using float_limits = std::numeric_limits<json::number_float_t>;\n    constexpr auto nan = float_limits::quiet_NaN();\n\n    // create several JSON values\n    json boolean = false;\n    json number = 17;\n    json string = \"17\";\n\n    // output values and comparisons\n    std::cout << std::boolalpha << std::fixed;\n    std::cout << boolean << \" <=> \" << true << \" := \" << to_string(boolean <=> true) << '\\n'; // *NOPAD*\n    std::cout << number << \" <=> \" << 17.0 << \" := \" << to_string(number <=> 17.0) << '\\n'; // *NOPAD*\n    std::cout << number << \" <=> \" << nan << \" := \" << to_string(number <=> nan) << '\\n'; // *NOPAD*\n    std::cout << string << \" <=> \" << 17 << \" := \" << to_string(string <=> 17) << '\\n'; // *NOPAD*\n}\n

    Output:

    false <=> true := less\n17 <=> 17.000000 := equivalent\n17 <=> nan := unordered\n\"17\" <=> 17 := greater\n
    "},{"location":"api/basic_json/operator_spaceship/#see-also","title":"See also","text":"
    • operator== - comparison: equal
    • operator!= - comparison: not equal
    • operator< - comparison: less than
    • operator<= - comparison: less than or equal
    • operator> - comparison: greater than
    • operator>= - comparison: greater than or equal
    "},{"location":"api/basic_json/operator_spaceship/#version-history","title":"Version history","text":"
    1. Added in version 3.11.0.
    2. Added in version 3.11.0.
    "},{"location":"api/basic_json/operator_value_t/","title":"nlohmann::basic_json::operator value_t","text":"
    constexpr operator value_t() const noexcept;\n

    Return the type of the JSON value as a value from the value_t enumeration.

    "},{"location":"api/basic_json/operator_value_t/#return-value","title":"Return value","text":"

    the type of the JSON value

    Value type return value null value_t::null boolean value_t::boolean string value_t::string number (integer) value_t::number_integer number (unsigned integer) value_t::number_unsigned number (floating-point) value_t::number_float object value_t::object array value_t::array binary value_t::binary discarded value_t::discarded"},{"location":"api/basic_json/operator_value_t/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/operator_value_t/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/operator_value_t/#examples","title":"Examples","text":"Example

    The following code exemplifies operator value_t() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = -17;\n    json j_number_unsigned = 42u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n\n    // call operator value_t()\n    json::value_t t_null = j_null;\n    json::value_t t_boolean = j_boolean;\n    json::value_t t_number_integer = j_number_integer;\n    json::value_t t_number_unsigned = j_number_unsigned;\n    json::value_t t_number_float = j_number_float;\n    json::value_t t_object = j_object;\n    json::value_t t_array = j_array;\n    json::value_t t_string = j_string;\n\n    // print types\n    std::cout << std::boolalpha;\n    std::cout << (t_null == json::value_t::null) << '\\n';\n    std::cout << (t_boolean == json::value_t::boolean) << '\\n';\n    std::cout << (t_number_integer == json::value_t::number_integer) << '\\n';\n    std::cout << (t_number_unsigned == json::value_t::number_unsigned) << '\\n';\n    std::cout << (t_number_float == json::value_t::number_float) << '\\n';\n    std::cout << (t_object == json::value_t::object) << '\\n';\n    std::cout << (t_array == json::value_t::array) << '\\n';\n    std::cout << (t_string == json::value_t::string) << '\\n';\n}\n

    Output:

    true\ntrue\ntrue\ntrue\ntrue\ntrue\ntrue\ntrue\n
    "},{"location":"api/basic_json/operator_value_t/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Added unsigned integer type in version 2.0.0.
    • Added binary type in version 3.8.0.
    "},{"location":"api/basic_json/other_error/","title":"nlohmann::basic_json::other_error","text":"
    class other_error : public exception;\n

    This exception is thrown in case of errors that cannot be classified with the other exception types.

    Exceptions have ids 5xx (see list of other errors).

    classDiagram\n  direction LR\n\n    class std_exception [\"std::exception\"] {\n        <<interface>>\n    }\n\n    class json_exception [\"basic_json::exception\"] {\n        +const int id\n        +const char* what() const\n    }\n\n    class json_parse_error [\"basic_json::parse_error\"] {\n        +const std::size_t byte\n    }\n\n    class json_invalid_iterator [\"basic_json::invalid_iterator\"]\n    class json_type_error [\"basic_json::type_error\"]\n    class json_out_of_range [\"basic_json::out_of_range\"]\n    class json_other_error [\"basic_json::other_error\"]\n\n    std_exception <|-- json_exception\n    json_exception <|-- json_parse_error\n    json_exception <|-- json_invalid_iterator\n    json_exception <|-- json_type_error\n    json_exception <|-- json_out_of_range\n    json_exception <|-- json_other_error\n\n    style json_other_error fill:#CCCCFF
    "},{"location":"api/basic_json/other_error/#member-functions","title":"Member functions","text":"
    • what - returns explanatory string
    "},{"location":"api/basic_json/other_error/#member-variables","title":"Member variables","text":"
    • id - the id of the exception
    "},{"location":"api/basic_json/other_error/#examples","title":"Examples","text":"Example

    The following code shows how a other_error exception can be caught.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    try\n    {\n        // executing a failing JSON Patch operation\n        json value = R\"({\n            \"best_biscuit\": {\n                \"name\": \"Oreo\"\n            }\n        })\"_json;\n        json patch = R\"([{\n            \"op\": \"test\",\n            \"path\": \"/best_biscuit/name\",\n            \"value\": \"Choco Leibniz\"\n        }])\"_json;\n        value.patch(patch);\n    }\n    catch (const json::other_error& e)\n    {\n        // output exception information\n        std::cout << \"message: \" << e.what() << '\\n'\n                  << \"exception id: \" << e.id << std::endl;\n    }\n}\n

    Output:

    message: [json.exception.other_error.501] unsuccessful: {\"op\":\"test\",\"path\":\"/best_biscuit/name\",\"value\":\"Choco Leibniz\"}\nexception id: 501\n
    "},{"location":"api/basic_json/other_error/#see-also","title":"See also","text":"
    • List of other errors
    • parse_error for exceptions indicating a parse error
    • invalid_iterator for exceptions indicating errors with iterators
    • type_error for exceptions indicating executing a member function with a wrong type
    • out_of_range for exceptions indicating access out of the defined range
    "},{"location":"api/basic_json/other_error/#version-history","title":"Version history","text":"
    • Since version 3.0.0.
    "},{"location":"api/basic_json/out_of_range/","title":"nlohmann::basic_json::out_of_range","text":"
    class out_of_range : public exception;\n

    This exception is thrown in case a library function is called on an input parameter that exceeds the expected range, for instance in case of array indices or nonexisting object keys.

    Exceptions have ids 4xx (see list of out-of-range errors).

    classDiagram\n  direction LR\n\n    class std_exception [\"std::exception\"] {\n        <<interface>>\n    }\n\n    class json_exception [\"basic_json::exception\"] {\n        +const int id\n        +const char* what() const\n    }\n\n    class json_parse_error [\"basic_json::parse_error\"] {\n        +const std::size_t byte\n    }\n\n    class json_invalid_iterator [\"basic_json::invalid_iterator\"]\n    class json_type_error [\"basic_json::type_error\"]\n    class json_out_of_range [\"basic_json::out_of_range\"]\n    class json_other_error [\"basic_json::other_error\"]\n\n    std_exception <|-- json_exception\n    json_exception <|-- json_parse_error\n    json_exception <|-- json_invalid_iterator\n    json_exception <|-- json_type_error\n    json_exception <|-- json_out_of_range\n    json_exception <|-- json_other_error\n\n    style json_out_of_range fill:#CCCCFF
    "},{"location":"api/basic_json/out_of_range/#member-functions","title":"Member functions","text":"
    • what - returns explanatory string
    "},{"location":"api/basic_json/out_of_range/#member-variables","title":"Member variables","text":"
    • id - the id of the exception
    "},{"location":"api/basic_json/out_of_range/#examples","title":"Examples","text":"Example

    The following code shows how a out_of_range exception can be caught.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    try\n    {\n        // calling at() for an invalid index\n        json j = {1, 2, 3, 4};\n        j.at(4) = 10;\n    }\n    catch (const json::out_of_range& e)\n    {\n        // output exception information\n        std::cout << \"message: \" << e.what() << '\\n'\n                  << \"exception id: \" << e.id << std::endl;\n    }\n}\n

    Output:

    message: [json.exception.out_of_range.401] array index 4 is out of range\nexception id: 401\n
    "},{"location":"api/basic_json/out_of_range/#see-also","title":"See also","text":"
    • List of out-of-range errors
    • parse_error for exceptions indicating a parse error
    • invalid_iterator for exceptions indicating errors with iterators
    • type_error for exceptions indicating executing a member function with a wrong type
    • other_error for exceptions indicating other library errors
    "},{"location":"api/basic_json/out_of_range/#version-history","title":"Version history","text":"
    • Since version 3.0.0.
    "},{"location":"api/basic_json/parse/","title":"nlohmann::basic_json::parse","text":"
    // (1)\ntemplate<typename InputType>\nstatic basic_json parse(InputType&& i,\n                        const parser_callback_t cb = nullptr,\n                        const bool allow_exceptions = true,\n                        const bool ignore_comments = false);\n\n// (2)\ntemplate<typename IteratorType>\nstatic basic_json parse(IteratorType first, IteratorType last,\n                        const parser_callback_t cb = nullptr,\n                        const bool allow_exceptions = true,\n                        const bool ignore_comments = false);\n
    1. Deserialize from a compatible input.
    2. Deserialize from a pair of character iterators

      The value_type of the iterator must be an integral type with size of 1, 2 or 4 bytes, which will be interpreted respectively as UTF-8, UTF-16 and UTF-32.

    "},{"location":"api/basic_json/parse/#template-parameters","title":"Template parameters","text":"InputType

    A compatible input, for instance:

    • an std::istream object
    • a FILE pointer (throws if null)
    • a C-style array of characters
    • a pointer to a null-terminated string of single byte characters (throws if null)
    • a std::string
    • an object obj for which begin(obj) and end(obj) produces a valid pair of iterators.
    IteratorType

    a compatible iterator type, for instance.

    • a pair of std::string::iterator or std::vector<std::uint8_t>::iterator
    • a pair of pointers such as ptr and ptr + len
    "},{"location":"api/basic_json/parse/#parameters","title":"Parameters","text":"i (in) Input to parse from. cb (in) a parser callback function of type parser_callback_t which is used to control the deserialization by filtering unwanted values (optional) allow_exceptions (in) whether to throw exceptions in case of a parse error (optional, true by default) ignore_comments (in) whether comments should be ignored and treated like whitespace (true) or yield a parse error (false); (optional, false by default) first (in) iterator to start of character range last (in) iterator to end of character range"},{"location":"api/basic_json/parse/#return-value","title":"Return value","text":"

    Deserialized JSON value; in case of a parse error and allow_exceptions set to false, the return value will be value_t::discarded. The latter can be checked with is_discarded.

    "},{"location":"api/basic_json/parse/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/parse/#exceptions","title":"Exceptions","text":"
    • Throws parse_error.101 in case of an unexpected token, or empty input like a null FILE* or char* pointer.
    • Throws parse_error.102 if to_unicode fails or surrogate error.
    • Throws parse_error.103 if to_unicode fails.
    "},{"location":"api/basic_json/parse/#complexity","title":"Complexity","text":"

    Linear in the length of the input. The parser is a predictive LL(1) parser. The complexity can be higher if the parser callback function cb or reading from (1) the input i or (2) the iterator range [first, last] has a super-linear complexity.

    "},{"location":"api/basic_json/parse/#notes","title":"Notes","text":"

    A UTF-8 byte order mark is silently ignored.

    "},{"location":"api/basic_json/parse/#examples","title":"Examples","text":"Parsing from a character array

    The example below demonstrates the parse() function reading from an array.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // a JSON text\n    char text[] = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, 38793]\n        }\n    }\n    )\";\n\n    // parse and serialize JSON\n    json j_complete = json::parse(text);\n    std::cout << std::setw(4) << j_complete << \"\\n\\n\";\n}\n

    Output:

    {\n    \"Image\": {\n        \"Animated\": false,\n        \"Height\": 600,\n        \"IDs\": [\n            116,\n            943,\n            234,\n            38793\n        ],\n        \"Thumbnail\": {\n            \"Height\": 125,\n            \"Url\": \"http://www.example.com/image/481989943\",\n            \"Width\": 100\n        },\n        \"Title\": \"View from 15th Floor\",\n        \"Width\": 800\n    }\n}\n
    Parsing from a string

    The example below demonstrates the parse() function with and without callback function.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, 38793]\n        }\n    }\n    )\";\n\n    // parse and serialize JSON\n    json j_complete = json::parse(text);\n    std::cout << std::setw(4) << j_complete << \"\\n\\n\";\n\n    // define parser callback\n    json::parser_callback_t cb = [](int depth, json::parse_event_t event, json & parsed)\n    {\n        // skip object elements with key \"Thumbnail\"\n        if (event == json::parse_event_t::key and parsed == json(\"Thumbnail\"))\n        {\n            return false;\n        }\n        else\n        {\n            return true;\n        }\n    };\n\n    // parse (with callback) and serialize JSON\n    json j_filtered = json::parse(text, cb);\n    std::cout << std::setw(4) << j_filtered << '\\n';\n}\n

    Output:

    {\n    \"Image\": {\n        \"Animated\": false,\n        \"Height\": 600,\n        \"IDs\": [\n            116,\n            943,\n            234,\n            38793\n        ],\n        \"Thumbnail\": {\n            \"Height\": 125,\n            \"Url\": \"http://www.example.com/image/481989943\",\n            \"Width\": 100\n        },\n        \"Title\": \"View from 15th Floor\",\n        \"Width\": 800\n    }\n}\n\n{\n    \"Image\": {\n        \"Animated\": false,\n        \"Height\": 600,\n        \"IDs\": [\n            116,\n            943,\n            234,\n            38793\n        ],\n        \"Title\": \"View from 15th Floor\",\n        \"Width\": 800\n    }\n}\n
    Parsing from an input stream

    The example below demonstrates the parse() function with and without callback function.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, 38793]\n        }\n    }\n    )\";\n\n    // fill a stream with JSON text\n    std::stringstream ss;\n    ss << text;\n\n    // parse and serialize JSON\n    json j_complete = json::parse(ss);\n    std::cout << std::setw(4) << j_complete << \"\\n\\n\";\n\n    // define parser callback\n    json::parser_callback_t cb = [](int depth, json::parse_event_t event, json & parsed)\n    {\n        // skip object elements with key \"Thumbnail\"\n        if (event == json::parse_event_t::key and parsed == json(\"Thumbnail\"))\n        {\n            return false;\n        }\n        else\n        {\n            return true;\n        }\n    };\n\n    // fill a stream with JSON text\n    ss.clear();\n    ss << text;\n\n    // parse (with callback) and serialize JSON\n    json j_filtered = json::parse(ss, cb);\n    std::cout << std::setw(4) << j_filtered << '\\n';\n}\n

    Output:

    {\n    \"Image\": {\n        \"Animated\": false,\n        \"Height\": 600,\n        \"IDs\": [\n            116,\n            943,\n            234,\n            38793\n        ],\n        \"Thumbnail\": {\n            \"Height\": 125,\n            \"Url\": \"http://www.example.com/image/481989943\",\n            \"Width\": 100\n        },\n        \"Title\": \"View from 15th Floor\",\n        \"Width\": 800\n    }\n}\n\n{\n    \"Image\": {\n        \"Animated\": false,\n        \"Height\": 600,\n        \"IDs\": [\n            116,\n            943,\n            234,\n            38793\n        ],\n        \"Title\": \"View from 15th Floor\",\n        \"Width\": 800\n    }\n}\n
    Parsing from a contiguous container

    The example below demonstrates the parse() function reading from a contiguous container.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // a JSON text given as std::vector\n    std::vector<std::uint8_t> text = {'[', '1', ',', '2', ',', '3', ']', '\\0'};\n\n    // parse and serialize JSON\n    json j_complete = json::parse(text);\n    std::cout << std::setw(4) << j_complete << \"\\n\\n\";\n}\n

    Output:

    [\n    1,\n    2,\n    3\n]\n
    Parsing from a non null-terminated string

    The example below demonstrates the parse() function reading from a string that is not null-terminated.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // a JSON text given as string that is not null-terminated\n    const char* ptr = \"[1,2,3]another value\";\n\n    // parse and serialize JSON\n    json j_complete = json::parse(ptr, ptr + 7);\n    std::cout << std::setw(4) << j_complete << \"\\n\\n\";\n}\n

    Output:

    [\n    1,\n    2,\n    3\n]\n
    Parsing from an iterator pair

    The example below demonstrates the parse() function reading from an iterator pair.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // a JSON text given an input with other values\n    std::vector<std::uint8_t> input = {'[', '1', ',', '2', ',', '3', ']', 'o', 't', 'h', 'e', 'r'};\n\n    // parse and serialize JSON\n    json j_complete = json::parse(input.begin(), input.begin() + 7);\n    std::cout << std::setw(4) << j_complete << \"\\n\\n\";\n}\n

    Output:

    [\n    1,\n    2,\n    3\n]\n
    Effect of allow_exceptions parameter

    The example below demonstrates the effect of the allow_exceptions parameter in the \u00b4parse()` function.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // an invalid JSON text\n    std::string text = R\"(\n    {\n        \"key\": \"value without closing quotes\n    }\n    )\";\n\n    // parse with exceptions\n    try\n    {\n        json j = json::parse(text);\n    }\n    catch (const json::parse_error& e)\n    {\n        std::cout << e.what() << std::endl;\n    }\n\n    // parse without exceptions\n    json j = json::parse(text, nullptr, false);\n\n    if (j.is_discarded())\n    {\n        std::cout << \"the input is invalid JSON\" << std::endl;\n    }\n    else\n    {\n        std::cout << \"the input is valid JSON: \" << j << std::endl;\n    }\n}\n

    Output:

    [json.exception.parse_error.101] parse error at line 4, column 0: syntax error while parsing value - invalid string: control character U+000A (LF) must be escaped to \\u000A or \\n; last read: '\"value without closing quotes<U+000A>'\nthe input is invalid JSON\n
    "},{"location":"api/basic_json/parse/#see-also","title":"See also","text":"
    • accept - check if the input is valid JSON
    • operator>> - deserialize from stream
    "},{"location":"api/basic_json/parse/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Overload for contiguous containers (1) added in version 2.0.3.
    • Ignoring comments via ignore_comments added in version 3.9.0.
    • Changed runtime assertion in case of FILE* null pointers to exception in version 3.11.4.

    Deprecation

    Overload (2) replaces calls to parse with a pair of iterators as their first parameter which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like parse({ptr, ptr+len}, ...); with parse(ptr, ptr+len, ...);.

    You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

    "},{"location":"api/basic_json/parse_error/","title":"nlohmann::basic_json::parse_error","text":"
    class parse_error : public exception;\n

    This exception is thrown by the library when a parse error occurs. Parse errors can occur during the deserialization of JSON text, BSON, CBOR, MessagePack, UBJSON, as well as when using JSON Patch.

    Member byte holds the byte index of the last read character in the input file (see note below).

    Exceptions have ids 1xx (see list of parse errors).

    classDiagram\n  direction LR\n\n    class std_exception [\"std::exception\"] {\n        <<interface>>\n    }\n\n    class json_exception [\"basic_json::exception\"] {\n        +const int id\n        +const char* what() const\n    }\n\n    class json_parse_error [\"basic_json::parse_error\"] {\n        +const std::size_t byte\n    }\n\n    class json_invalid_iterator [\"basic_json::invalid_iterator\"]\n    class json_type_error [\"basic_json::type_error\"]\n    class json_out_of_range [\"basic_json::out_of_range\"]\n    class json_other_error [\"basic_json::other_error\"]\n\n    std_exception <|-- json_exception\n    json_exception <|-- json_parse_error\n    json_exception <|-- json_invalid_iterator\n    json_exception <|-- json_type_error\n    json_exception <|-- json_out_of_range\n    json_exception <|-- json_other_error\n\n    style json_parse_error fill:#CCCCFF
    "},{"location":"api/basic_json/parse_error/#member-functions","title":"Member functions","text":"
    • what - returns explanatory string
    "},{"location":"api/basic_json/parse_error/#member-variables","title":"Member variables","text":"
    • id - the id of the exception
    • byte - byte index of the parse error
    "},{"location":"api/basic_json/parse_error/#notes","title":"Notes","text":"

    For an input with n bytes, 1 is the index of the first character and n+1 is the index of the terminating null byte or the end of file. This also holds true when reading a byte vector for binary formats.

    "},{"location":"api/basic_json/parse_error/#examples","title":"Examples","text":"Example

    The following code shows how a parse_error exception can be caught.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    try\n    {\n        // parsing input with a syntax error\n        json::parse(\"[1,2,3,]\");\n    }\n    catch (const json::parse_error& e)\n    {\n        // output exception information\n        std::cout << \"message: \" << e.what() << '\\n'\n                  << \"exception id: \" << e.id << '\\n'\n                  << \"byte position of error: \" << e.byte << std::endl;\n    }\n}\n

    Output:

    message: [json.exception.parse_error.101] parse error at line 1, column 8: syntax error while parsing value - unexpected ']'; expected '[', '{', or a literal\nexception id: 101\nbyte position of error: 8\n
    "},{"location":"api/basic_json/parse_error/#see-also","title":"See also","text":"
    • List of parse errors
    • invalid_iterator for exceptions indicating errors with iterators
    • type_error for exceptions indicating executing a member function with a wrong type
    • out_of_range for exceptions indicating access out of the defined range
    • other_error for exceptions indicating other library errors
    "},{"location":"api/basic_json/parse_error/#version-history","title":"Version history","text":"
    • Since version 3.0.0.
    "},{"location":"api/basic_json/parse_event_t/","title":"nlohmann::basic_json::parse_event_t","text":"
    enum class parse_event_t : std::uint8_t {\n    object_start,\n    object_end,\n    array_start,\n    array_end,\n    key,\n    value\n};\n

    The parser callback distinguishes the following events:

    • object_start: the parser read { and started to process a JSON object
    • key: the parser read a key of a value in an object
    • object_end: the parser read } and finished processing a JSON object
    • array_start: the parser read [ and started to process a JSON array
    • array_end: the parser read ] and finished processing a JSON array
    • value: the parser finished reading a JSON value
    "},{"location":"api/basic_json/parse_event_t/#examples","title":"Examples","text":""},{"location":"api/basic_json/parse_event_t/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/parser_callback_t/","title":"nlohmann::basic_json::parser_callback_t","text":"
    template<typename BasicJsonType>\nusing parser_callback_t =\n    std::function<bool(int depth, parse_event_t event, BasicJsonType& parsed)>;\n

    With a parser callback function, the result of parsing a JSON text can be influenced. When passed to parse, it is called on certain events (passed as parse_event_t via parameter event) with a set recursion depth depth and context JSON value parsed. The return value of the callback function is a boolean indicating whether the element that emitted the callback shall be kept or not.

    We distinguish six scenarios (determined by the event type) in which the callback function can be called. The following table describes the values of the parameters depth, event, and parsed.

    parameter event description parameter depth parameter parsed parse_event_t::object_start the parser read { and started to process a JSON object depth of the parent of the JSON object a JSON value with type discarded parse_event_t::key the parser read a key of a value in an object depth of the currently parsed JSON object a JSON string containing the key parse_event_t::object_end the parser read } and finished processing a JSON object depth of the parent of the JSON object the parsed JSON object parse_event_t::array_start the parser read [ and started to process a JSON array depth of the parent of the JSON array a JSON value with type discarded parse_event_t::array_end the parser read ] and finished processing a JSON array depth of the parent of the JSON array the parsed JSON array parse_event_t::value the parser finished reading a JSON value depth of the value the parsed JSON value

    Discarding a value (i.e., returning false) has different effects depending on the context in which function was called:

    • Discarded values in structured types are skipped. That is, the parser will behave as if the discarded value was never read.
    • In case a value outside a structured type is skipped, it is replaced with null. This case happens if the top-level element is skipped.
    "},{"location":"api/basic_json/parser_callback_t/#parameters","title":"Parameters","text":"depth (in) the depth of the recursion during parsing event (in) an event of type parse_event_t indicating the context in the callback function has been called parsed (in, out) the current intermediate parse result; note that writing to this value has no effect for parse_event_t::key events"},{"location":"api/basic_json/parser_callback_t/#return-value","title":"Return value","text":"

    Whether the JSON value which called the function during parsing should be kept (true) or not (false). In the latter case, it is either skipped completely or replaced by an empty discarded object.

    "},{"location":"api/basic_json/parser_callback_t/#examples","title":"Examples","text":"Example

    The example below demonstrates the parse() function with and without callback function.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, 38793]\n        }\n    }\n    )\";\n\n    // parse and serialize JSON\n    json j_complete = json::parse(text);\n    std::cout << std::setw(4) << j_complete << \"\\n\\n\";\n\n    // define parser callback\n    json::parser_callback_t cb = [](int depth, json::parse_event_t event, json & parsed)\n    {\n        // skip object elements with key \"Thumbnail\"\n        if (event == json::parse_event_t::key and parsed == json(\"Thumbnail\"))\n        {\n            return false;\n        }\n        else\n        {\n            return true;\n        }\n    };\n\n    // parse (with callback) and serialize JSON\n    json j_filtered = json::parse(text, cb);\n    std::cout << std::setw(4) << j_filtered << '\\n';\n}\n

    Output:

    {\n    \"Image\": {\n        \"Animated\": false,\n        \"Height\": 600,\n        \"IDs\": [\n            116,\n            943,\n            234,\n            38793\n        ],\n        \"Thumbnail\": {\n            \"Height\": 125,\n            \"Url\": \"http://www.example.com/image/481989943\",\n            \"Width\": 100\n        },\n        \"Title\": \"View from 15th Floor\",\n        \"Width\": 800\n    }\n}\n\n{\n    \"Image\": {\n        \"Animated\": false,\n        \"Height\": 600,\n        \"IDs\": [\n            116,\n            943,\n            234,\n            38793\n        ],\n        \"Title\": \"View from 15th Floor\",\n        \"Width\": 800\n    }\n}\n
    "},{"location":"api/basic_json/parser_callback_t/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/patch/","title":"nlohmann::basic_json::patch","text":"
    basic_json patch(const basic_json& json_patch) const;\n

    JSON Patch defines a JSON document structure for expressing a sequence of operations to apply to a JSON document. With this function, a JSON Patch is applied to the current JSON value by executing all operations from the patch.

    "},{"location":"api/basic_json/patch/#parameters","title":"Parameters","text":"json_patch (in) JSON patch document"},{"location":"api/basic_json/patch/#return-value","title":"Return value","text":"

    patched document

    "},{"location":"api/basic_json/patch/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/patch/#exceptions","title":"Exceptions","text":"
    • Throws parse_error.104 if the JSON patch does not consist of an array of objects.
    • Throws parse_error.105 if the JSON patch is malformed (e.g., mandatory attributes are missing); example: \"operation add must have member path\".
    • Throws out_of_range.401 if an array index is out of range.
    • Throws out_of_range.403 if a JSON pointer inside the patch could not be resolved successfully in the current JSON value; example: \"key baz not found\".
    • Throws out_of_range.405 if JSON pointer has no parent (\"add\", \"remove\", \"move\")
    • Throws out_of_range.501 if \"test\" operation was unsuccessful.
    "},{"location":"api/basic_json/patch/#complexity","title":"Complexity","text":"

    Linear in the size of the JSON value and the length of the JSON patch. As usually only a fraction of the JSON value is affected by the patch, the complexity can usually be neglected.

    "},{"location":"api/basic_json/patch/#notes","title":"Notes","text":"

    The application of a patch is atomic: Either all operations succeed and the patched document is returned or an exception is thrown. In any case, the original value is not changed: the patch is applied to a copy of the value.

    "},{"location":"api/basic_json/patch/#examples","title":"Examples","text":"Example

    The following code shows how a JSON patch is applied to a value.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // the original document\n    json doc = R\"(\n        {\n          \"baz\": \"qux\",\n          \"foo\": \"bar\"\n        }\n    )\"_json;\n\n    // the patch\n    json patch = R\"(\n        [\n          { \"op\": \"replace\", \"path\": \"/baz\", \"value\": \"boo\" },\n          { \"op\": \"add\", \"path\": \"/hello\", \"value\": [\"world\"] },\n          { \"op\": \"remove\", \"path\": \"/foo\"}\n        ]\n    )\"_json;\n\n    // apply the patch\n    json patched_doc = doc.patch(patch);\n\n    // output original and patched document\n    std::cout << std::setw(4) << doc << \"\\n\\n\"\n              << std::setw(4) << patched_doc << std::endl;\n}\n

    Output:

    {\n    \"baz\": \"qux\",\n    \"foo\": \"bar\"\n}\n\n{\n    \"baz\": \"boo\",\n    \"hello\": [\n        \"world\"\n    ]\n}\n
    "},{"location":"api/basic_json/patch/#see-also","title":"See also","text":"
    • RFC 6902 (JSON Patch)
    • RFC 6901 (JSON Pointer)
    • patch_inplace applies a JSON Patch without creating a copy of the document
    • merge_patch applies a JSON Merge Patch
    "},{"location":"api/basic_json/patch/#version-history","title":"Version history","text":"
    • Added in version 2.0.0.
    "},{"location":"api/basic_json/patch_inplace/","title":"nlohmann::basic_json::patch_inplace","text":"
    void patch_inplace(const basic_json& json_patch) const;\n

    JSON Patch defines a JSON document structure for expressing a sequence of operations to apply to a JSON document. With this function, a JSON Patch is applied to the current JSON value by executing all operations from the patch. This function applies a JSON patch in place and returns void.

    "},{"location":"api/basic_json/patch_inplace/#parameters","title":"Parameters","text":"json_patch (in) JSON patch document"},{"location":"api/basic_json/patch_inplace/#exception-safety","title":"Exception safety","text":"

    No guarantees, value may be corrupted by an unsuccessful patch operation.

    "},{"location":"api/basic_json/patch_inplace/#exceptions","title":"Exceptions","text":"
    • Throws parse_error.104 if the JSON patch does not consist of an array of objects.
    • Throws parse_error.105 if the JSON patch is malformed (e.g., mandatory attributes are missing); example: \"operation add must have member path\".
    • Throws out_of_range.401 if an array index is out of range.
    • Throws out_of_range.403 if a JSON pointer inside the patch could not be resolved successfully in the current JSON value; example: \"key baz not found\".
    • Throws out_of_range.405 if JSON pointer has no parent (\"add\", \"remove\", \"move\")
    • Throws out_of_range.501 if \"test\" operation was unsuccessful.
    "},{"location":"api/basic_json/patch_inplace/#complexity","title":"Complexity","text":"

    Linear in the size of the JSON value and the length of the JSON patch. As usually only a fraction of the JSON value is affected by the patch, the complexity can usually be neglected.

    "},{"location":"api/basic_json/patch_inplace/#notes","title":"Notes","text":"

    Unlike patch, patch_inplace applies the operation \"in place\" and no copy of the JSON value is created. That makes it faster for large documents by avoiding the copy. However, the JSON value might be corrupted if the function throws an exception.

    "},{"location":"api/basic_json/patch_inplace/#examples","title":"Examples","text":"Example

    The following code shows how a JSON patch is applied to a value.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // the original document\n    json doc = R\"(\n        {\n          \"baz\": \"qux\",\n          \"foo\": \"bar\"\n        }\n    )\"_json;\n\n    // the patch\n    json patch = R\"(\n        [\n          { \"op\": \"replace\", \"path\": \"/baz\", \"value\": \"boo\" },\n          { \"op\": \"add\", \"path\": \"/hello\", \"value\": [\"world\"] },\n          { \"op\": \"remove\", \"path\": \"/foo\"}\n        ]\n    )\"_json;\n\n    // output original document\n    std::cout << \"Before\\n\" << std::setw(4) << doc << std::endl;\n\n    // apply the patch\n    doc.patch_inplace(patch);\n\n    // output patched document\n    std::cout << \"\\nAfter\\n\" << std::setw(4) << doc << std::endl;\n}\n

    Output:

    Before\n{\n    \"baz\": \"qux\",\n    \"foo\": \"bar\"\n}\n\nAfter\n{\n    \"baz\": \"boo\",\n    \"hello\": [\n        \"world\"\n    ]\n}\n
    "},{"location":"api/basic_json/patch_inplace/#see-also","title":"See also","text":"
    • RFC 6902 (JSON Patch)
    • RFC 6901 (JSON Pointer)
    • patch applies a JSON Merge Patch
    • merge_patch applies a JSON Merge Patch
    "},{"location":"api/basic_json/patch_inplace/#version-history","title":"Version history","text":"
    • Added in version 3.11.0.
    "},{"location":"api/basic_json/push_back/","title":"nlohmann::basic_json::push_back","text":"
    // (1)\nvoid push_back(basic_json&& val);\nvoid push_back(const basic_json& val);\n\n// (2)\nvoid push_back(const typename object_t::value_type& val);\n\n// (3)\nvoid push_back(initializer_list_t init);\n
    1. Appends the given element val to the end of the JSON array. If the function is called on a JSON null value, an empty array is created before appending val.

    2. Inserts the given element val to the JSON object. If the function is called on a JSON null value, an empty object is created before inserting val.

    3. This function allows using push_back with an initializer list. In case

      1. the current value is an object,
      2. the initializer list init contains only two elements, and
      3. the first element of init is a string,

      init is converted into an object element and added using push_back(const typename object_t::value_type&). Otherwise, init is converted to a JSON value and added using push_back(basic_json&&).

    "},{"location":"api/basic_json/push_back/#iterator-invalidation","title":"Iterator invalidation","text":"

    For all cases where an element is added to an array, a reallocation can happen, in which case all iterators (including the end() iterator) and all references to the elements are invalidated. Otherwise, only the end() iterator is invalidated.

    For ordered_json, also adding an element to an object can yield a reallocation which again invalidates all iterators and all references.

    "},{"location":"api/basic_json/push_back/#parameters","title":"Parameters","text":"val (in) the value to add to the JSON array/object init (in) an initializer list"},{"location":"api/basic_json/push_back/#exceptions","title":"Exceptions","text":"

    All functions can throw the following exception: - Throws type_error.308 when called on a type other than JSON array or null; example: \"cannot use push_back() with number\"

    "},{"location":"api/basic_json/push_back/#complexity","title":"Complexity","text":"
    1. Amortized constant.
    2. Logarithmic in the size of the container, O(log(size())).
    3. Linear in the size of the initializer list init.
    "},{"location":"api/basic_json/push_back/#notes","title":"Notes","text":"

    (3) This function is required to resolve an ambiguous overload error, because pairs like {\"key\", \"value\"} can be both interpreted as object_t::value_type or std::initializer_list<basic_json>, see #235 for more information.

    "},{"location":"api/basic_json/push_back/#examples","title":"Examples","text":"Example: (1) add element to array

    The example shows how push_back() and += can be used to add elements to a JSON array. Note how the null value was silently converted to a JSON array.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json array = {1, 2, 3, 4, 5};\n    json null;\n\n    // print values\n    std::cout << array << '\\n';\n    std::cout << null << '\\n';\n\n    // add values\n    array.push_back(6);\n    array += 7;\n    null += \"first\";\n    null += \"second\";\n\n    // print values\n    std::cout << array << '\\n';\n    std::cout << null << '\\n';\n}\n

    Output:

    [1,2,3,4,5]\nnull\n[1,2,3,4,5,6,7]\n[\"first\",\"second\"]\n
    Example: (2) add element to object

    The example shows how push_back() and += can be used to add elements to a JSON object. Note how the null value was silently converted to a JSON object.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json object = {{\"one\", 1}, {\"two\", 2}};\n    json null;\n\n    // print values\n    std::cout << object << '\\n';\n    std::cout << null << '\\n';\n\n    // add values\n    object.push_back(json::object_t::value_type(\"three\", 3));\n    object += json::object_t::value_type(\"four\", 4);\n    null += json::object_t::value_type(\"A\", \"a\");\n    null += json::object_t::value_type(\"B\", \"b\");\n\n    // print values\n    std::cout << object << '\\n';\n    std::cout << null << '\\n';\n}\n

    Output:

    {\"one\":1,\"two\":2}\nnull\n{\"four\":4,\"one\":1,\"three\":3,\"two\":2}\n{\"A\":\"a\",\"B\":\"b\"}\n
    Example: (3) add to object from initializer list

    The example shows how initializer lists are treated as objects when possible.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json object = {{\"one\", 1}, {\"two\", 2}};\n    json null;\n\n    // print values\n    std::cout << object << '\\n';\n    std::cout << null << '\\n';\n\n    // add values:\n    object.push_back({\"three\", 3});  // object is extended\n    object += {\"four\", 4};           // object is extended\n    null.push_back({\"five\", 5});     // null is converted to array\n\n    // print values\n    std::cout << object << '\\n';\n    std::cout << null << '\\n';\n\n    // would throw:\n    //object.push_back({1, 2, 3});\n}\n

    Output:

    {\"one\":1,\"two\":2}\nnull\n{\"four\":4,\"one\":1,\"three\":3,\"two\":2}\n[[\"five\",5]]\n
    "},{"location":"api/basic_json/push_back/#see-also","title":"See also","text":"
    • emplace_back add a value to an array
    • operator+= add a value to an array/object
    "},{"location":"api/basic_json/push_back/#version-history","title":"Version history","text":"
    1. Since version 1.0.0.
    2. Since version 1.0.0.
    3. Since version 2.0.0.
    "},{"location":"api/basic_json/rbegin/","title":"nlohmann::basic_json::rbegin","text":"
    reverse_iterator rbegin() noexcept;\nconst_reverse_iterator rbegin() const noexcept;\n

    Returns an iterator to the reverse-beginning; that is, the last element.

    "},{"location":"api/basic_json/rbegin/#return-value","title":"Return value","text":"

    reverse iterator to the first element

    "},{"location":"api/basic_json/rbegin/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/rbegin/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/rbegin/#examples","title":"Examples","text":"Example

    The following code shows an example for rbegin().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create an array value\n    json array = {1, 2, 3, 4, 5};\n\n    // get an iterator to the reverse-beginning\n    json::reverse_iterator it = array.rbegin();\n\n    // serialize the element that the iterator points to\n    std::cout << *it << '\\n';\n}\n

    Output:

    5\n
    "},{"location":"api/basic_json/rbegin/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/rend/","title":"nlohmann::basic_json::rend","text":"
    reverse_iterator rend() noexcept;\nconst_reverse_iterator rend() const noexcept;\n

    Returns an iterator to the reverse-end; that is, one before the first element. This element acts as a placeholder, attempting to access it results in undefined behavior.

    "},{"location":"api/basic_json/rend/#return-value","title":"Return value","text":"

    reverse iterator to the element following the last element

    "},{"location":"api/basic_json/rend/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/rend/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/rend/#examples","title":"Examples","text":"Example

    The following code shows an example for eend().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create an array value\n    json array = {1, 2, 3, 4, 5};\n\n    // get an iterator to the reverse-end\n    json::reverse_iterator it = array.rend();\n\n    // increment the iterator to point to the first element\n    --it;\n\n    // serialize the element that the iterator points to\n    std::cout << *it << '\\n';\n}\n

    Output:

    1\n
    "},{"location":"api/basic_json/rend/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/sax_parse/","title":"nlohmann::basic_json::sax_parse","text":"
    // (1)\ntemplate <typename InputType, typename SAX>\nstatic bool sax_parse(InputType&& i,\n                      SAX* sax,\n                      input_format_t format = input_format_t::json,\n                      const bool strict = true,\n                      const bool ignore_comments = false);\n\n// (2)\ntemplate<class IteratorType, class SAX>\nstatic bool sax_parse(IteratorType first, IteratorType last,\n                      SAX* sax,\n                      input_format_t format = input_format_t::json,\n                      const bool strict = true,\n                      const bool ignore_comments = false);\n

    Read from input and generate SAX events

    1. Read from a compatible input.
    2. Read from a pair of character iterators

      The value_type of the iterator must be an integral type with size of 1, 2 or 4 bytes, which will be interpreted respectively as UTF-8, UTF-16 and UTF-32.

    The SAX event lister must follow the interface of json_sax.

    "},{"location":"api/basic_json/sax_parse/#template-parameters","title":"Template parameters","text":"InputType

    A compatible input, for instance:

    • an std::istream object
    • a FILE pointer
    • a C-style array of characters
    • a pointer to a null-terminated string of single byte characters
    • an object obj for which begin(obj) and end(obj) produces a valid pair of iterators.
    IteratorType Description SAX Description"},{"location":"api/basic_json/sax_parse/#parameters","title":"Parameters","text":"i (in) Input to parse from. sax (in) SAX event listener format (in) the format to parse (JSON, CBOR, MessagePack, or UBJSON) (optional, input_format_t::json by default), see input_format_t for more information strict (in) whether the input has to be consumed completely (optional, true by default) ignore_comments (in) whether comments should be ignored and treated like whitespace (true) or yield a parse error (false); (optional, false by default) first (in) iterator to start of character range last (in) iterator to end of character range"},{"location":"api/basic_json/sax_parse/#return-value","title":"Return value","text":"

    return value of the last processed SAX event

    "},{"location":"api/basic_json/sax_parse/#exception-safety","title":"Exception safety","text":""},{"location":"api/basic_json/sax_parse/#complexity","title":"Complexity","text":"

    Linear in the length of the input. The parser is a predictive LL(1) parser. The complexity can be higher if the SAX consumer sax has a super-linear complexity.

    "},{"location":"api/basic_json/sax_parse/#notes","title":"Notes","text":"

    A UTF-8 byte order mark is silently ignored.

    "},{"location":"api/basic_json/sax_parse/#examples","title":"Examples","text":"Example

    The example below demonstrates the sax_parse() function reading from string and processing the events with a user-defined SAX event consumer.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

    Output:

    start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
    "},{"location":"api/basic_json/sax_parse/#version-history","title":"Version history","text":"
    • Added in version 3.2.0.
    • Ignoring comments via ignore_comments added in version 3.9.0.

    Deprecation

    Overload (2) replaces calls to sax_parse with a pair of iterators as their first parameter which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like sax_parse({ptr, ptr+len}); with sax_parse(ptr, ptr+len);.

    "},{"location":"api/basic_json/size/","title":"nlohmann::basic_json::size","text":"
    size_type size() const noexcept;\n

    Returns the number of elements in a JSON value.

    "},{"location":"api/basic_json/size/#return-value","title":"Return value","text":"

    The return value depends on the different types and is defined as follows:

    Value type return value null 0 boolean 1 string 1 number 1 binary 1 object result of function object_t::size() array result of function array_t::size()"},{"location":"api/basic_json/size/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/basic_json/size/#complexity","title":"Complexity","text":"

    Constant, as long as array_t and object_t satisfy the Container concept; that is, their size() functions have constant complexity.

    "},{"location":"api/basic_json/size/#notes","title":"Notes","text":"

    This function does not return the length of a string stored as JSON value -- it returns the number of elements in the JSON value which is 1 in the case of a string.

    "},{"location":"api/basic_json/size/#examples","title":"Examples","text":"Example

    The following code calls size() on the different value types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_object_empty(json::value_t::object);\n    json j_array = {1, 2, 4, 8, 16};\n    json j_array_empty(json::value_t::array);\n    json j_string = \"Hello, world\";\n\n    // call size()\n    std::cout << j_null.size() << '\\n';\n    std::cout << j_boolean.size() << '\\n';\n    std::cout << j_number_integer.size() << '\\n';\n    std::cout << j_number_float.size() << '\\n';\n    std::cout << j_object.size() << '\\n';\n    std::cout << j_object_empty.size() << '\\n';\n    std::cout << j_array.size() << '\\n';\n    std::cout << j_array_empty.size() << '\\n';\n    std::cout << j_string.size() << '\\n';\n}\n

    Output:

    0\n1\n1\n1\n2\n0\n5\n0\n1\n
    "},{"location":"api/basic_json/size/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Extended to return 1 for binary types in version 3.8.0.
    "},{"location":"api/basic_json/start_pos/","title":"nlohmann::basic_json::start_pos","text":"
    #if JSON_DIAGNOSTIC_POSITIONS\nconstexpr std::size_t start_pos() const noexcept;\n#endif\n

    Returns the position of the first character in the JSON string from which the value was parsed from.

    JSON type return value object position of the opening { array position of the opening [ string position of the opening \" number position of the first character boolean position of t for true and f for false null position of n"},{"location":"api/basic_json/start_pos/#return-value","title":"Return value","text":"

    the position of the first character of the value in the parsed JSON string, if the value was created by the parse function, or std::string::npos if the value was constructed otherwise

    "},{"location":"api/basic_json/start_pos/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/start_pos/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/start_pos/#notes","title":"Notes","text":"

    Note

    The function is only available if macro JSON_DIAGNOSTIC_POSITIONS has been defined to 1 before including the library header.

    Invalidation

    The returned positions are only valid as long as the JSON value is not changed. The positions are not updated when the JSON value is changed.

    "},{"location":"api/basic_json/start_pos/#examples","title":"Examples","text":"Example
    #include <iostream>\n\n#define JSON_DIAGNOSTIC_POSITIONS 1\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::string json_string = R\"(\n    {\n        \"address\": {\n            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\n    }\n    )\";\n    json j = json::parse(json_string);\n\n    std::cout << \"Root diagnostic positions: \\n\";\n    std::cout << \"\\tstart_pos: \" << j.start_pos() << '\\n';\n    std::cout << \"\\tend_pos:\" << j.end_pos() << \"\\n\";\n    std::cout << \"Original string: \\n\";\n    std::cout << \"{\\n        \\\"address\\\": {\\n            \\\"street\\\": \\\"Fake Street\\\",\\n            \\\"housenumber\\\": 1\\n        }\\n    }\" << \"\\n\";\n    std::cout << \"Parsed string: \\n\";\n    std::cout << json_string.substr(j.start_pos(), j.end_pos() - j.start_pos()) << \"\\n\\n\";\n\n    std::cout << \"address diagnostic positions: \\n\";\n    std::cout << \"\\tstart_pos:\" << j[\"address\"].start_pos() << '\\n';\n    std::cout << \"\\tend_pos:\" << j[\"address\"].end_pos() << \"\\n\\n\";\n    std::cout << \"Original string: \\n\";\n    std::cout << \"{            \\\"street\\\": \\\"Fake Street\\\",\\n            \\\"housenumber\\\": 1\\n        }\" << \"\\n\";\n    std::cout << \"Parsed string: \\n\";\n    std::cout << json_string.substr(j[\"address\"].start_pos(), j[\"address\"].end_pos() - j[\"address\"].start_pos()) << \"\\n\\n\";\n\n    std::cout << \"street diagnostic positions: \\n\";\n    std::cout << \"\\tstart_pos:\" << j[\"address\"][\"street\"].start_pos() << '\\n';\n    std::cout << \"\\tend_pos:\" << j[\"address\"][\"street\"].end_pos() << \"\\n\\n\";\n    std::cout << \"Original string: \\n\";\n    std::cout << \"\\\"Fake Street\\\"\" << \"\\n\";\n    std::cout << \"Parsed string: \\n\";\n    std::cout << json_string.substr(j[\"address\"][\"street\"].start_pos(), j[\"address\"][\"street\"].end_pos() - j[\"address\"][\"street\"].start_pos()) << \"\\n\\n\";\n\n    std::cout << \"housenumber diagnostic positions: \\n\";\n    std::cout << \"\\tstart_pos:\" << j[\"address\"][\"housenumber\"].start_pos() << '\\n';\n    std::cout << \"\\tend_pos:\" << j[\"address\"][\"housenumber\"].end_pos() << \"\\n\\n\";\n    std::cout << \"Original string: \\n\";\n    std::cout << \"1\" << \"\\n\";\n    std::cout << \"Parsed string: \\n\";\n    std::cout << json_string.substr(j[\"address\"][\"housenumber\"].start_pos(), j[\"address\"][\"housenumber\"].end_pos() - j[\"address\"][\"housenumber\"].start_pos()) << \"\\n\\n\";\n}\n

    Output:

    Root diagnostic positions: \n    start_pos: 5\n    end_pos:109\nOriginal string: \n{\n        \"address\": {\n            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\n    }\nParsed string: \n{\n        \"address\": {\n            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\n    }\n\naddress diagnostic positions: \n    start_pos:26\n    end_pos:103\n\nOriginal string: \n{            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\nParsed string: \n{\n            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\n\nstreet diagnostic positions: \n    start_pos:50\n    end_pos:63\n\nOriginal string: \n\"Fake Street\"\nParsed string: \n\"Fake Street\"\n\nhousenumber diagnostic positions: \n    start_pos:92\n    end_pos:93\n\nOriginal string: \n1\nParsed string: \n1\n

    The output shows the start/end positions of all the objects and fields in the JSON string.

    "},{"location":"api/basic_json/start_pos/#see-also","title":"See also","text":"
    • end_pos to access the end position
    • JSON_DIAGNOSTIC_POSITIONS for an overview of the diagnostic positions
    "},{"location":"api/basic_json/start_pos/#version-history","title":"Version history","text":"
    • Added in version 3.12.0.
    "},{"location":"api/basic_json/std_hash/","title":"std::hash<nlohmann::basic_json>","text":"
    namespace std {\n    struct hash<nlohmann::basic_json>;\n}\n

    Return a hash value for a JSON object. The hash function tries to rely on std::hash where possible. Furthermore, the type of the JSON value is taken into account to have different hash values for null, 0, 0U, and false, etc.

    "},{"location":"api/basic_json/std_hash/#examples","title":"Examples","text":"Example

    The example shows how to calculate hash values for different JSON values.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    std::cout << \"hash(null) = \" << std::hash<json> {}(json(nullptr)) << '\\n'\n              << \"hash(false) = \" << std::hash<json> {}(json(false)) << '\\n'\n              << \"hash(0) = \" << std::hash<json> {}(json(0)) << '\\n'\n              << \"hash(0U) = \" << std::hash<json> {}(json(0U)) << '\\n'\n              << \"hash(\\\"\\\") = \" << std::hash<json> {}(json(\"\")) << '\\n'\n              << \"hash({}) = \" << std::hash<json> {}(json::object()) << '\\n'\n              << \"hash([]) = \" << std::hash<json> {}(json::array()) << '\\n'\n              << \"hash({\\\"hello\\\": \\\"world\\\"}) = \" << std::hash<json> {}(\"{\\\"hello\\\": \\\"world\\\"}\"_json)\n              << std::endl;\n}\n

    Output:

    hash(null) = 2654435769\nhash(false) = 2654436030\nhash(0) = 2654436095\nhash(0U) = 2654436156\nhash(\"\") = 6142509191626859748\nhash({}) = 2654435832\nhash([]) = 2654435899\nhash({\"hello\": \"world\"}) = 4469488738203676328\n

    Note the output is platform-dependent.

    "},{"location":"api/basic_json/std_hash/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Extended for arbitrary basic_json types in version 3.10.5.
    "},{"location":"api/basic_json/std_swap/","title":"std::swap<basic_json>","text":"
    namespace std {\n    void swap(nlohmann::basic_json& j1, nlohmann::basic_json& j2);\n}\n

    Exchanges the values of two JSON objects.

    "},{"location":"api/basic_json/std_swap/#parameters","title":"Parameters","text":"j1 (in, out) value to be replaced by j2 j2 (in, out) value to be replaced by j1"},{"location":"api/basic_json/std_swap/#possible-implementation","title":"Possible implementation","text":"
    void swap(nlohmann::basic_json& j1, nlohmann::basic_json& j2)\n{\n    j1.swap(j2);\n}\n
    "},{"location":"api/basic_json/std_swap/#examples","title":"Examples","text":"Example

    The following code shows how two values are swapped with std::swap.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j1 = {{\"one\", 1}, {\"two\", 2}};\n    json j2 = {1, 2, 4, 8, 16};\n\n    std::cout << \"j1 = \" << j1 << \" | j2 = \" << j2 << '\\n';\n\n    // swap values\n    std::swap(j1, j2);\n\n    std::cout << \"j1 = \" << j1 << \" | j2 = \" << j2 << std::endl;\n}\n

    Output:

    j1 = {\"one\":1,\"two\":2} | j2 = [1,2,4,8,16]\nj1 = [1,2,4,8,16] | j2 = {\"one\":1,\"two\":2}\n
    "},{"location":"api/basic_json/std_swap/#see-also","title":"See also","text":"
    • swap
    "},{"location":"api/basic_json/std_swap/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Extended for arbitrary basic_json types in version 3.10.5.
    "},{"location":"api/basic_json/string_t/","title":"nlohmann::basic_json::string_t","text":"
    using string_t = StringType;\n

    The type used to store JSON strings.

    RFC 8259 describes JSON strings as follows:

    A string is a sequence of zero or more Unicode characters.

    To store objects in C++, a type is defined by the template parameter described below. Unicode values are split by the JSON class into byte-sized characters during deserialization.

    "},{"location":"api/basic_json/string_t/#template-parameters","title":"Template parameters","text":"StringType the container to store strings (e.g., std::string). Note this container is used for keys/names in objects, see object_t."},{"location":"api/basic_json/string_t/#notes","title":"Notes","text":""},{"location":"api/basic_json/string_t/#default-type","title":"Default type","text":"

    With the default values for StringType (std::string), the default value for string_t is std::string.

    "},{"location":"api/basic_json/string_t/#encoding","title":"Encoding","text":"

    Strings are stored in UTF-8 encoding. Therefore, functions like std::string::size() or std::string::length() return the number of bytes in the string rather than the number of characters or glyphs.

    "},{"location":"api/basic_json/string_t/#string-comparison","title":"String comparison","text":"

    RFC 8259 states:

    Software implementations are typically required to test names of object members for equality. Implementations that transform the textual representation into sequences of Unicode code units and then perform the comparison numerically, code unit by code unit, are interoperable in the sense that implementations will agree in all cases on equality or inequality of two strings. For example, implementations that compare strings with escaped characters unconverted may incorrectly find that \"a\\\\b\" and \"a\\u005Cb\" are not equal.

    This implementation is interoperable as it does compare strings code unit by code unit.

    "},{"location":"api/basic_json/string_t/#storage","title":"Storage","text":"

    String values are stored as pointers in a basic_json type. That is, for any access to string values, a pointer of type string_t* must be dereferenced.

    "},{"location":"api/basic_json/string_t/#examples","title":"Examples","text":"Example

    The following code shows that string_t is by default, a typedef to std::string.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::boolalpha << std::is_same<std::string, json::string_t>::value << std::endl;\n}\n

    Output:

    true\n
    "},{"location":"api/basic_json/string_t/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/swap/","title":"nlohmann::basic_json::swap","text":"
    // (1)\nvoid swap(reference other) noexcept;\n\n// (2)\nvoid swap(reference left, reference right) noexcept;\n\n// (3)\nvoid swap(array_t& other);\n\n// (4)\nvoid swap(object_t& other);\n\n// (5)\nvoid swap(string_t& other);\n\n// (6)\nvoid swap(binary_t& other);\n\n// (7)\nvoid swap(typename binary_t::container_type& other);\n
    1. Exchanges the contents of the JSON value with those of other. Does not invoke any move, copy, or swap operations on individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated.
    2. Exchanges the contents of the JSON value from left with those of right. Does not invoke any move, copy, or swap operations on individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated. Implemented as a friend function callable via ADL.
    3. Exchanges the contents of a JSON array with those of other. Does not invoke any move, copy, or swap operations on individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated.
    4. Exchanges the contents of a JSON object with those of other. Does not invoke any move, copy, or swap operations on individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated.
    5. Exchanges the contents of a JSON string with those of other. Does not invoke any move, copy, or swap operations on individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated.
    6. Exchanges the contents of a binary value with those of other. Does not invoke any move, copy, or swap operations on individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated.
    7. Exchanges the contents of a binary value with those of other. Does not invoke any move, copy, or swap operations on individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated. Unlike version (6), no binary subtype is involved.
    "},{"location":"api/basic_json/swap/#parameters","title":"Parameters","text":"other (in, out) value to exchange the contents with left (in, out) value to exchange the contents with right (in, out) value to exchange the contents with"},{"location":"api/basic_json/swap/#exceptions","title":"Exceptions","text":"
    1. No-throw guarantee: this function never throws exceptions.
    2. No-throw guarantee: this function never throws exceptions.
    3. Throws type_error.310 if called on JSON values other than arrays; example: \"cannot use swap() with boolean\"
    4. Throws type_error.310 if called on JSON values other than objects; example: \"cannot use swap() with boolean\"
    5. Throws type_error.310 if called on JSON values other than strings; example: \"cannot use swap() with boolean\"
    6. Throws type_error.310 if called on JSON values other than binaries; example: \"cannot use swap() with boolean\"
    7. Throws type_error.310 if called on JSON values other than binaries; example: \"cannot use swap() with boolean\"
    "},{"location":"api/basic_json/swap/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/swap/#examples","title":"Examples","text":"Example: Swap JSON value (1, 2)

    The example below shows how JSON values can be swapped with swap().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create two JSON values\n    json j1 = {1, 2, 3, 4, 5};\n    json j2 = {{\"pi\", 3.141592653589793}, {\"e\", 2.718281828459045}};\n\n    // swap the values\n    j1.swap(j2);\n\n    // output the values\n    std::cout << \"j1 = \" << j1 << '\\n';\n    std::cout << \"j2 = \" << j2 << '\\n';\n}\n

    Output:

    j1 = {\"e\":2.718281828459045,\"pi\":3.141592653589793}\nj2 = [1,2,3,4,5]\n
    Example: Swap array (3)

    The example below shows how arrays can be swapped with swap().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON value\n    json value = {{\"array\", {1, 2, 3, 4}}};\n\n    // create an array_t\n    json::array_t array = {\"Snap\", \"Crackle\", \"Pop\"};\n\n    // swap the array stored in the JSON value\n    value[\"array\"].swap(array);\n\n    // output the values\n    std::cout << \"value = \" << value << '\\n';\n    std::cout << \"array = \" << array << '\\n';\n}\n

    Output:

    value = {\"array\":[\"Snap\",\"Crackle\",\"Pop\"]}\narray = [1,2,3,4]\n
    Example: Swap object (4)

    The example below shows how objects can be swapped with swap().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON value\n    json value = { {\"translation\", {{\"one\", \"eins\"}, {\"two\", \"zwei\"}}} };\n\n    // create an object_t\n    json::object_t object = {{\"cow\", \"Kuh\"}, {\"dog\", \"Hund\"}};\n\n    // swap the object stored in the JSON value\n    value[\"translation\"].swap(object);\n\n    // output the values\n    std::cout << \"value = \" << value << '\\n';\n    std::cout << \"object = \" << object << '\\n';\n}\n

    Output:

    value = {\"translation\":{\"cow\":\"Kuh\",\"dog\":\"Hund\"}}\nobject = {\"one\":\"eins\",\"two\":\"zwei\"}\n
    Example: Swap string (5)

    The example below shows how strings can be swapped with swap().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON value\n    json value = { \"the good\", \"the bad\", \"the ugly\" };\n\n    // create string_t\n    json::string_t string = \"the fast\";\n\n    // swap the object stored in the JSON value\n    value[1].swap(string);\n\n    // output the values\n    std::cout << \"value = \" << value << '\\n';\n    std::cout << \"string = \" << string << '\\n';\n}\n

    Output:

    value = [\"the good\",\"the fast\",\"the ugly\"]\nstring = the bad\n
    Example: Swap string (6)

    The example below shows how binary values can be swapped with swap().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a binary value\n    json value = json::binary({1, 2, 3});\n\n    // create a binary_t\n    json::binary_t binary = {{4, 5, 6}};\n\n    // swap the object stored in the JSON value\n    value.swap(binary);\n\n    // output the values\n    std::cout << \"value = \" << value << '\\n';\n    std::cout << \"binary = \" << json(binary) << '\\n';\n}\n

    Output:

    value = {\"bytes\":[4,5,6],\"subtype\":null}\nbinary = {\"bytes\":[1,2,3],\"subtype\":null}\n
    "},{"location":"api/basic_json/swap/#see-also","title":"See also","text":"
    • std::swap<basic_json>
    "},{"location":"api/basic_json/swap/#version-history","title":"Version history","text":"
    1. Since version 1.0.0.
    2. Since version 1.0.0.
    3. Since version 1.0.0.
    4. Since version 1.0.0.
    5. Since version 1.0.0.
    6. Since version 3.8.0.
    7. Since version 3.8.0.
    "},{"location":"api/basic_json/to_bjdata/","title":"nlohmann::basic_json::to_bjdata","text":"
    // (1)\nstatic std::vector<std::uint8_t> to_bjdata(const basic_json& j,\n                                           const bool use_size = false,\n                                           const bool use_type = false,\n                                           const bjdata_version_t version = bjdata_version_t::draft2);\n\n// (2)\nstatic void to_bjdata(const basic_json& j, detail::output_adapter<std::uint8_t> o,\n                      const bool use_size = false, const bool use_type = false,\n                      const bjdata_version_t version = bjdata_version_t::draft2);\nstatic void to_bjdata(const basic_json& j, detail::output_adapter<char> o,\n                      const bool use_size = false, const bool use_type = false,\n                      const bjdata_version_t version = bjdata_version_t::draft2);\n

    Serializes a given JSON value j to a byte vector using the BJData (Binary JData) serialization format. BJData aims to be more compact than JSON itself, yet more efficient to parse.

    1. Returns a byte vector containing the BJData serialization.
    2. Writes the BJData serialization to an output adapter.

    The exact mapping and its limitations is described on a dedicated page.

    "},{"location":"api/basic_json/to_bjdata/#parameters","title":"Parameters","text":"j (in) JSON value to serialize o (in) output adapter to write serialization to use_size (in) whether to add size annotations to container types; optional, false by default. use_type (in) whether to add type annotations to container types (must be combined with use_size = true); optional, false by default. version (in) which version of BJData to use (see note on \"Binary values\" on BJData); optional, bjdata_version_t::draft2 by default."},{"location":"api/basic_json/to_bjdata/#return-value","title":"Return value","text":"
    1. BJData serialization as byte vector
    2. (none)
    "},{"location":"api/basic_json/to_bjdata/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/to_bjdata/#complexity","title":"Complexity","text":"

    Linear in the size of the JSON value j.

    "},{"location":"api/basic_json/to_bjdata/#examples","title":"Examples","text":"Example

    The example shows the serialization of a JSON value to a byte vector in BJData format.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\n// function to print BJData's diagnostic format\nvoid print_byte(uint8_t byte)\n{\n    if (32 < byte and byte < 128)\n    {\n        std::cout << (char)byte;\n    }\n    else\n    {\n        std::cout << (int)byte;\n    }\n}\n\nint main()\n{\n    // create a JSON value\n    json j = R\"({\"compact\": true, \"schema\": false})\"_json;\n\n    // serialize it to BJData\n    std::vector<std::uint8_t> v = json::to_bjdata(j);\n\n    // print the vector content\n    for (auto& byte : v)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n\n    // create an array of numbers\n    json array = {1, 2, 3, 4, 5, 6, 7, 8};\n\n    // serialize it to BJData using default representation\n    std::vector<std::uint8_t> v_array = json::to_bjdata(array);\n    // serialize it to BJData using size optimization\n    std::vector<std::uint8_t> v_array_size = json::to_bjdata(array, true);\n    // serialize it to BJData using type optimization\n    std::vector<std::uint8_t> v_array_size_and_type = json::to_bjdata(array, true, true);\n\n    // print the vector contents\n    for (auto& byte : v_array)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n\n    for (auto& byte : v_array_size)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n\n    for (auto& byte : v_array_size_and_type)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n}\n

    Output:

    {i7compactTi6schemaF}\n[i1i2i3i4i5i6i7i8]\n[#i8i1i2i3i4i5i6i7i8\n[$i#i812345678\n
    "},{"location":"api/basic_json/to_bjdata/#version-history","title":"Version history","text":"
    • Added in version 3.11.0.
    • BJData version parameter (for draft3 binary encoding) added in version 3.12.0.
    "},{"location":"api/basic_json/to_bson/","title":"nlohmann::basic_json::to_bson","text":"
    // (1)\nstatic std::vector<std::uint8_t> to_bson(const basic_json& j);\n\n// (2)\nstatic void to_bson(const basic_json& j, detail::output_adapter<std::uint8_t> o);\nstatic void to_bson(const basic_json& j, detail::output_adapter<char> o);\n

    BSON (Binary JSON) is a binary format in which zero or more ordered key/value pairs are stored as a single entity (a so-called document).

    1. Returns a byte vector containing the BSON serialization.
    2. Writes the BSON serialization to an output adapter.

    The exact mapping and its limitations is described on a dedicated page.

    "},{"location":"api/basic_json/to_bson/#parameters","title":"Parameters","text":"j (in) JSON value to serialize o (in) output adapter to write serialization to"},{"location":"api/basic_json/to_bson/#return-value","title":"Return value","text":"
    1. BSON serialization as byte vector
    2. (none)
    "},{"location":"api/basic_json/to_bson/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/to_bson/#complexity","title":"Complexity","text":"

    Linear in the size of the JSON value j.

    "},{"location":"api/basic_json/to_bson/#examples","title":"Examples","text":"Example

    The example shows the serialization of a JSON value to a byte vector in BSON format.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create a JSON value\n    json j = R\"({\"compact\": true, \"schema\": 0})\"_json;\n\n    // serialize it to BSON\n    std::vector<std::uint8_t> v = json::to_bson(j);\n\n    // print the vector content\n    for (auto& byte : v)\n    {\n        std::cout << \"0x\" << std::hex << std::setw(2) << std::setfill('0') << (int)byte << \" \";\n    }\n    std::cout << std::endl;\n}\n

    Output:

    0x1b 0x00 0x00 0x00 0x08 0x63 0x6f 0x6d 0x70 0x61 0x63 0x74 0x00 0x01 0x10 0x73 0x63 0x68 0x65 0x6d 0x61 0x00 0x00 0x00 0x00 0x00 0x00 \n
    "},{"location":"api/basic_json/to_bson/#version-history","title":"Version history","text":"
    • Added in version 3.4.0.
    "},{"location":"api/basic_json/to_cbor/","title":"nlohmann::basic_json::to_cbor","text":"
    // (1)\nstatic std::vector<std::uint8_t> to_cbor(const basic_json& j);\n\n// (2)\nstatic void to_cbor(const basic_json& j, detail::output_adapter<std::uint8_t> o);\nstatic void to_cbor(const basic_json& j, detail::output_adapter<char> o);\n

    Serializes a given JSON value j to a byte vector using the CBOR (Concise Binary Object Representation) serialization format. CBOR is a binary serialization format which aims to be more compact than JSON itself, yet more efficient to parse.

    1. Returns a byte vector containing the CBOR serialization.
    2. Writes the CBOR serialization to an output adapter.

    The exact mapping and its limitations is described on a dedicated page.

    "},{"location":"api/basic_json/to_cbor/#parameters","title":"Parameters","text":"j (in) JSON value to serialize o (in) output adapter to write serialization to"},{"location":"api/basic_json/to_cbor/#return-value","title":"Return value","text":"
    1. CBOR serialization as byte vector
    2. (none)
    "},{"location":"api/basic_json/to_cbor/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/to_cbor/#complexity","title":"Complexity","text":"

    Linear in the size of the JSON value j.

    "},{"location":"api/basic_json/to_cbor/#examples","title":"Examples","text":"Example

    The example shows the serialization of a JSON value to a byte vector in CBOR format.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create a JSON value\n    json j = R\"({\"compact\": true, \"schema\": 0})\"_json;\n\n    // serialize it to CBOR\n    std::vector<std::uint8_t> v = json::to_cbor(j);\n\n    // print the vector content\n    for (auto& byte : v)\n    {\n        std::cout << \"0x\" << std::hex << std::setw(2) << std::setfill('0') << (int)byte << \" \";\n    }\n    std::cout << std::endl;\n}\n

    Output:

    0xa2 0x67 0x63 0x6f 0x6d 0x70 0x61 0x63 0x74 0xf5 0x66 0x73 0x63 0x68 0x65 0x6d 0x61 0x00 \n
    "},{"location":"api/basic_json/to_cbor/#version-history","title":"Version history","text":"
    • Added in version 2.0.9.
    • Compact representation of floating-point numbers added in version 3.8.0.
    "},{"location":"api/basic_json/to_msgpack/","title":"nlohmann::basic_json::to_msgpack","text":"
    // (1)\nstatic std::vector<std::uint8_t> to_msgpack(const basic_json& j);\n\n// (2)\nstatic void to_msgpack(const basic_json& j, detail::output_adapter<std::uint8_t> o);\nstatic void to_msgpack(const basic_json& j, detail::output_adapter<char> o);\n

    Serializes a given JSON value j to a byte vector using the MessagePack serialization format. MessagePack is a binary serialization format which aims to be more compact than JSON itself, yet more efficient to parse.

    1. Returns a byte vector containing the MessagePack serialization.
    2. Writes the MessagePack serialization to an output adapter.

    The exact mapping and its limitations is described on a dedicated page.

    "},{"location":"api/basic_json/to_msgpack/#parameters","title":"Parameters","text":"j (in) JSON value to serialize o (in) output adapter to write serialization to"},{"location":"api/basic_json/to_msgpack/#return-value","title":"Return value","text":"
    1. MessagePack serialization as byte vector
    2. (none)
    "},{"location":"api/basic_json/to_msgpack/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/to_msgpack/#complexity","title":"Complexity","text":"

    Linear in the size of the JSON value j.

    "},{"location":"api/basic_json/to_msgpack/#examples","title":"Examples","text":"Example

    The example shows the serialization of a JSON value to a byte vector in MessagePack format.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create a JSON value\n    json j = R\"({\"compact\": true, \"schema\": 0})\"_json;\n\n    // serialize it to MessagePack\n    std::vector<std::uint8_t> v = json::to_msgpack(j);\n\n    // print the vector content\n    for (auto& byte : v)\n    {\n        std::cout << \"0x\" << std::hex << std::setw(2) << std::setfill('0') << (int)byte << \" \";\n    }\n    std::cout << std::endl;\n}\n

    Output:

    0x82 0xa7 0x63 0x6f 0x6d 0x70 0x61 0x63 0x74 0xc3 0xa6 0x73 0x63 0x68 0x65 0x6d 0x61 0x00 \n
    "},{"location":"api/basic_json/to_msgpack/#version-history","title":"Version history","text":"
    • Added in version 2.0.9.
    "},{"location":"api/basic_json/to_string/","title":"to_string(basic_json)","text":"
    template <typename BasicJsonType>\nstd::string to_string(const BasicJsonType& j);\n

    This function implements a user-defined to_string for JSON objects.

    "},{"location":"api/basic_json/to_string/#template-parameters","title":"Template parameters","text":"BasicJsonType a specialization of basic_json"},{"location":"api/basic_json/to_string/#return-value","title":"Return value","text":"

    string containing the serialization of the JSON value

    "},{"location":"api/basic_json/to_string/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes to any JSON value.

    "},{"location":"api/basic_json/to_string/#exceptions","title":"Exceptions","text":"

    Throws type_error.316 if a string stored inside the JSON value is not UTF-8 encoded

    "},{"location":"api/basic_json/to_string/#complexity","title":"Complexity","text":"

    Linear.

    "},{"location":"api/basic_json/to_string/#possible-implementation","title":"Possible implementation","text":"
    template <typename BasicJsonType>\nstd::string to_string(const BasicJsonType& j)\n{\n    return j.dump();\n}\n
    "},{"location":"api/basic_json/to_string/#examples","title":"Examples","text":"Example

    The following code shows how the library's to_string() function integrates with others, allowing argument-dependent lookup.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing std::to_string;\n\nint main()\n{\n    // create values\n    json j = {{\"one\", 1}, {\"two\", 2}};\n    int i = 42;\n\n    // use ADL to select best to_string function\n    auto j_str = to_string(j);  // calling nlohmann::to_string\n    auto i_str = to_string(i);  // calling std::to_string\n\n    // serialize without indentation\n    std::cout << j_str << \"\\n\\n\"\n              << i_str << std::endl;\n}\n

    Output:

    {\"one\":1,\"two\":2}\n\n42\n
    "},{"location":"api/basic_json/to_string/#see-also","title":"See also","text":"
    • dump
    "},{"location":"api/basic_json/to_string/#version-history","title":"Version history","text":"

    Added in version 3.7.0.

    "},{"location":"api/basic_json/to_ubjson/","title":"nlohmann::basic_json::to_ubjson","text":"
    // (1)\nstatic std::vector<std::uint8_t> to_ubjson(const basic_json& j,\n                                           const bool use_size = false,\n                                           const bool use_type = false);\n\n// (2)\nstatic void to_ubjson(const basic_json& j, detail::output_adapter<std::uint8_t> o,\n                      const bool use_size = false, const bool use_type = false);\nstatic void to_ubjson(const basic_json& j, detail::output_adapter<char> o,\n                      const bool use_size = false, const bool use_type = false);\n

    Serializes a given JSON value j to a byte vector using the UBJSON (Universal Binary JSON) serialization format. UBJSON aims to be more compact than JSON itself, yet more efficient to parse.

    1. Returns a byte vector containing the UBJSON serialization.
    2. Writes the UBJSON serialization to an output adapter.

    The exact mapping and its limitations is described on a dedicated page.

    "},{"location":"api/basic_json/to_ubjson/#parameters","title":"Parameters","text":"j (in) JSON value to serialize o (in) output adapter to write serialization to use_size (in) whether to add size annotations to container types; optional, false by default. use_type (in) whether to add type annotations to container types (must be combined with use_size = true); optional, false by default."},{"location":"api/basic_json/to_ubjson/#return-value","title":"Return value","text":"
    1. UBJSON serialization as byte vector
    2. (none)
    "},{"location":"api/basic_json/to_ubjson/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/to_ubjson/#complexity","title":"Complexity","text":"

    Linear in the size of the JSON value j.

    "},{"location":"api/basic_json/to_ubjson/#examples","title":"Examples","text":"Example

    The example shows the serialization of a JSON value to a byte vector in UBJSON format.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\n// function to print UBJSON's diagnostic format\nvoid print_byte(uint8_t byte)\n{\n    if (32 < byte and byte < 128)\n    {\n        std::cout << (char)byte;\n    }\n    else\n    {\n        std::cout << (int)byte;\n    }\n}\n\nint main()\n{\n    // create a JSON value\n    json j = R\"({\"compact\": true, \"schema\": false})\"_json;\n\n    // serialize it to UBJSON\n    std::vector<std::uint8_t> v = json::to_ubjson(j);\n\n    // print the vector content\n    for (auto& byte : v)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n\n    // create an array of numbers\n    json array = {1, 2, 3, 4, 5, 6, 7, 8};\n\n    // serialize it to UBJSON using default representation\n    std::vector<std::uint8_t> v_array = json::to_ubjson(array);\n    // serialize it to UBJSON using size optimization\n    std::vector<std::uint8_t> v_array_size = json::to_ubjson(array, true);\n    // serialize it to UBJSON using type optimization\n    std::vector<std::uint8_t> v_array_size_and_type = json::to_ubjson(array, true, true);\n\n    // print the vector contents\n    for (auto& byte : v_array)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n\n    for (auto& byte : v_array_size)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n\n    for (auto& byte : v_array_size_and_type)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n}\n

    Output:

    {i7compactTi6schemaF}\n[i1i2i3i4i5i6i7i8]\n[#i8i1i2i3i4i5i6i7i8\n[$i#i812345678\n
    "},{"location":"api/basic_json/to_ubjson/#version-history","title":"Version history","text":"
    • Added in version 3.1.0.
    "},{"location":"api/basic_json/type/","title":"nlohmann::basic_json::type","text":"
    constexpr value_t type() const noexcept;\n

    Return the type of the JSON value as a value from the value_t enumeration.

    "},{"location":"api/basic_json/type/#return-value","title":"Return value","text":"

    the type of the JSON value

    Value type return value null value_t::null boolean value_t::boolean string value_t::string number (integer) value_t::number_integer number (unsigned integer) value_t::number_unsigned number (floating-point) value_t::number_float object value_t::object array value_t::array binary value_t::binary discarded value_t::discarded"},{"location":"api/basic_json/type/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/type/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/type/#examples","title":"Examples","text":"Example

    The following code exemplifies type() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = -17;\n    json j_number_unsigned = 42u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n\n    // call type()\n    std::cout << std::boolalpha;\n    std::cout << (j_null.type() == json::value_t::null) << '\\n';\n    std::cout << (j_boolean.type() == json::value_t::boolean) << '\\n';\n    std::cout << (j_number_integer.type() == json::value_t::number_integer) << '\\n';\n    std::cout << (j_number_unsigned.type() == json::value_t::number_unsigned) << '\\n';\n    std::cout << (j_number_float.type() == json::value_t::number_float) << '\\n';\n    std::cout << (j_object.type() == json::value_t::object) << '\\n';\n    std::cout << (j_array.type() == json::value_t::array) << '\\n';\n    std::cout << (j_string.type() == json::value_t::string) << '\\n';\n}\n

    Output:

    true\ntrue\ntrue\ntrue\ntrue\ntrue\ntrue\ntrue\n
    "},{"location":"api/basic_json/type/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Added unsigned integer type in version 2.0.0.
    • Added binary type in version 3.8.0.
    "},{"location":"api/basic_json/type_error/","title":"nlohmann::basic_json::type_error","text":"
    class type_error : public exception;\n

    This exception is thrown in case of a type error; that is, a library function is executed on a JSON value whose type does not match the expected semantics.

    Exceptions have ids 3xx (see list of type errors).

    classDiagram\n  direction LR\n\n    class std_exception [\"std::exception\"] {\n        <<interface>>\n    }\n\n    class json_exception [\"basic_json::exception\"] {\n        +const int id\n        +const char* what() const\n    }\n\n    class json_parse_error [\"basic_json::parse_error\"] {\n        +const std::size_t byte\n    }\n\n    class json_invalid_iterator [\"basic_json::invalid_iterator\"]\n    class json_type_error [\"basic_json::type_error\"]\n    class json_out_of_range [\"basic_json::out_of_range\"]\n    class json_other_error [\"basic_json::other_error\"]\n\n    std_exception <|-- json_exception\n    json_exception <|-- json_parse_error\n    json_exception <|-- json_invalid_iterator\n    json_exception <|-- json_type_error\n    json_exception <|-- json_out_of_range\n    json_exception <|-- json_other_error\n\n    style json_type_error fill:#CCCCFF
    "},{"location":"api/basic_json/type_error/#member-functions","title":"Member functions","text":"
    • what - returns explanatory string
    "},{"location":"api/basic_json/type_error/#member-variables","title":"Member variables","text":"
    • id - the id of the exception
    "},{"location":"api/basic_json/type_error/#examples","title":"Examples","text":"Example

    The following code shows how a type_error exception can be caught.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    try\n    {\n        // calling push_back() on a string value\n        json j = \"string\";\n        j.push_back(\"another string\");\n    }\n    catch (const json::type_error& e)\n    {\n        // output exception information\n        std::cout << \"message: \" << e.what() << '\\n'\n                  << \"exception id: \" << e.id << std::endl;\n    }\n}\n

    Output:

    message: [json.exception.type_error.308] cannot use push_back() with string\nexception id: 308\n
    "},{"location":"api/basic_json/type_error/#see-also","title":"See also","text":"
    • List of type errors
    • parse_error for exceptions indicating a parse error
    • invalid_iterator for exceptions indicating errors with iterators
    • out_of_range for exceptions indicating access out of the defined range
    • other_error for exceptions indicating other library errors
    "},{"location":"api/basic_json/type_error/#version-history","title":"Version history","text":"
    • Since version 3.0.0.
    "},{"location":"api/basic_json/type_name/","title":"nlohmann::basic_json::type_name","text":"
    const char* type_name() const noexcept;\n

    Returns the type name as string to be used in error messages -- usually to indicate that a function was called on a wrong JSON type.

    "},{"location":"api/basic_json/type_name/#return-value","title":"Return value","text":"

    a string representation of the type (value_t):

    Value type return value null \"null\" boolean \"boolean\" string \"string\" number (integer, unsigned integer, floating-point) \"number\" object \"object\" array \"array\" binary \"binary\" discarded \"discarded\""},{"location":"api/basic_json/type_name/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/type_name/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/type_name/#examples","title":"Examples","text":"Example

    The following code exemplifies type_name() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = -17;\n    json j_number_unsigned = 42u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n\n    // call type_name()\n    std::cout << j_null << \" is a \" << j_null.type_name() << '\\n';\n    std::cout << j_boolean << \" is a \" << j_boolean.type_name() << '\\n';\n    std::cout << j_number_integer << \" is a \" << j_number_integer.type_name() << '\\n';\n    std::cout << j_number_unsigned << \" is a \" << j_number_unsigned.type_name() << '\\n';\n    std::cout << j_number_float << \" is a \" << j_number_float.type_name() << '\\n';\n    std::cout << j_object << \" is an \" << j_object.type_name() << '\\n';\n    std::cout << j_array << \" is an \" << j_array.type_name() << '\\n';\n    std::cout << j_string << \" is a \" << j_string.type_name() << '\\n';\n}\n

    Output:

    null is a null\ntrue is a boolean\n-17 is a number\n42 is a number\n23.42 is a number\n{\"one\":1,\"two\":2} is an object\n[1,2,4,8,16] is an array\n\"Hello, world\" is a string\n
    "},{"location":"api/basic_json/type_name/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Part of the public API version since 2.1.0.
    • Changed return value to const char* and added noexcept in version 3.0.0.
    • Added support for binary type in version 3.8.0.
    "},{"location":"api/basic_json/unflatten/","title":"nlohmann::basic_json::unflatten","text":"
    basic_json unflatten() const;\n

    The function restores the arbitrary nesting of a JSON value that has been flattened before using the flatten() function. The JSON value must meet certain constraints:

    1. The value must be an object.
    2. The keys must be JSON pointers (see RFC 6901)
    3. The mapped values must be primitive JSON types.
    "},{"location":"api/basic_json/unflatten/#return-value","title":"Return value","text":"

    the original JSON from a flattened version

    "},{"location":"api/basic_json/unflatten/#exception-safety","title":"Exception safety","text":"

    Strong exception safety: if an exception occurs, the original value stays intact.

    "},{"location":"api/basic_json/unflatten/#exceptions","title":"Exceptions","text":"

    The function can throw the following exceptions:

    • Throws type_error.314 if value is not an object
    • Throws type_error.315 if object values are not primitive
    "},{"location":"api/basic_json/unflatten/#complexity","title":"Complexity","text":"

    Linear in the size the JSON value.

    "},{"location":"api/basic_json/unflatten/#notes","title":"Notes","text":"

    Empty objects and arrays are flattened by flatten() to null values and can not unflattened to their original type. Apart from this example, for a JSON value j, the following is always true: j == j.flatten().unflatten().

    "},{"location":"api/basic_json/unflatten/#examples","title":"Examples","text":"Example

    The following code shows how a flattened JSON object is unflattened into the original nested JSON object.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON value\n    json j_flattened =\n    {\n        {\"/answer/everything\", 42},\n        {\"/happy\", true},\n        {\"/list/0\", 1},\n        {\"/list/1\", 0},\n        {\"/list/2\", 2},\n        {\"/name\", \"Niels\"},\n        {\"/nothing\", nullptr},\n        {\"/object/currency\", \"USD\"},\n        {\"/object/value\", 42.99},\n        {\"/pi\", 3.141}\n    };\n\n    // call unflatten()\n    std::cout << std::setw(4) << j_flattened.unflatten() << '\\n';\n}\n

    Output:

    {\n    \"answer\": {\n        \"everything\": 42\n    },\n    \"happy\": true,\n    \"list\": [\n        1,\n        0,\n        2\n    ],\n    \"name\": \"Niels\",\n    \"nothing\": null,\n    \"object\": {\n        \"currency\": \"USD\",\n        \"value\": 42.99\n    },\n    \"pi\": 3.141\n}\n
    "},{"location":"api/basic_json/unflatten/#see-also","title":"See also","text":"
    • flatten the reverse function
    "},{"location":"api/basic_json/unflatten/#version-history","title":"Version history","text":"
    • Added in version 2.0.0.
    "},{"location":"api/basic_json/update/","title":"nlohmann::basic_json::update","text":"
    // (1)\nvoid update(const_reference j, bool merge_objects = false);\n\n// (2)\nvoid update(const_iterator first, const_iterator last, bool merge_objects = false);\n
    1. Inserts all values from JSON object j.
    2. Inserts all values from range [first, last)

    When merge_objects is false (default), existing keys are overwritten. When merge_objects is true, recursively merges objects with common keys.

    The function is motivated by Python's dict.update function.

    "},{"location":"api/basic_json/update/#iterator-invalidation","title":"Iterator invalidation","text":"

    For ordered_json, adding a value to an object can yield a reallocation, in which case all iterators (including the end() iterator) and all references to the elements are invalidated.

    "},{"location":"api/basic_json/update/#parameters","title":"Parameters","text":"j (in) JSON object to read values from merge_objects (in) when true, existing keys are not overwritten, but contents of objects are merged recursively (default: false) first (in) begin of the range of elements to insert last (in) end of the range of elements to insert"},{"location":"api/basic_json/update/#exceptions","title":"Exceptions","text":"
    1. The function can throw the following exceptions:
      • Throws type_error.312 if called on JSON values other than objects; example: \"cannot use update() with string\"
    2. The function can throw the following exceptions:
      • Throws type_error.312 if called on JSON values other than objects; example: \"cannot use update() with string\"
      • Throws invalid_iterator.202 if called on an iterator which does not belong to the current JSON value; example: \"iterator does not fit current value\"
      • Throws invalid_iterator.210 if first and last do not belong to the same JSON value; example: \"iterators do not fit\"
    "},{"location":"api/basic_json/update/#complexity","title":"Complexity","text":"
    1. O(N*log(size() + N)), where N is the number of elements to insert.
    2. O(N*log(size() + N)), where N is the number of elements to insert.
    "},{"location":"api/basic_json/update/#examples","title":"Examples","text":"Example

    The example shows how update() is used.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create two JSON objects\n    json o1 = R\"( {\"color\": \"red\", \"price\": 17.99, \"names\": {\"de\": \"Flugzeug\"}} )\"_json;\n    json o2 = R\"( {\"color\": \"blue\", \"speed\": 100, \"names\": {\"en\": \"plane\"}} )\"_json;\n    json o3 = o1;\n\n    // add all keys from o2 to o1 (updating \"color\", replacing \"names\")\n    o1.update(o2);\n\n    // add all keys from o2 to o1 (updating \"color\", merging \"names\")\n    o3.update(o2, true);\n\n    // output updated object o1 and o3\n    std::cout << std::setw(2) << o1 << '\\n';\n    std::cout << std::setw(2) << o3 << '\\n';\n}\n

    Output:

    {\n  \"color\": \"blue\",\n  \"names\": {\n    \"en\": \"plane\"\n  },\n  \"price\": 17.99,\n  \"speed\": 100\n}\n{\n  \"color\": \"blue\",\n  \"names\": {\n    \"de\": \"Flugzeug\",\n    \"en\": \"plane\"\n  },\n  \"price\": 17.99,\n  \"speed\": 100\n}\n
    Example

    The example shows how update() is used.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create two JSON objects\n    json o1 = R\"( {\"color\": \"red\", \"price\": 17.99, \"names\": {\"de\": \"Flugzeug\"}} )\"_json;\n    json o2 = R\"( {\"color\": \"blue\", \"speed\": 100, \"names\": {\"en\": \"plane\"}} )\"_json;\n    json o3 = o1;\n\n    // add all keys from o2 to o1 (updating \"color\", replacing \"names\")\n    o1.update(o2.begin(), o2.end());\n\n    // add all keys from o2 to o1 (updating \"color\", merging \"names\")\n    o3.update(o2.begin(), o2.end(), true);\n\n    // output updated object o1 and o3\n    std::cout << std::setw(2) << o1 << '\\n';\n    std::cout << std::setw(2) << o3 << '\\n';\n}\n

    Output:

    {\n  \"color\": \"blue\",\n  \"names\": {\n    \"en\": \"plane\"\n  },\n  \"price\": 17.99,\n  \"speed\": 100\n}\n{\n  \"color\": \"blue\",\n  \"names\": {\n    \"de\": \"Flugzeug\",\n    \"en\": \"plane\"\n  },\n  \"price\": 17.99,\n  \"speed\": 100\n}\n
    Example

    One common use case for this function is the handling of user settings. Assume your application can be configured in some aspects:

    {\n    \"color\": \"red\",\n    \"active\": true,\n    \"name\": {\"de\": \"Maus\", \"en\": \"mouse\"}\n}\n

    The user may override the default settings selectively:

    {\n    \"color\": \"blue\",\n    \"name\": {\"es\": \"rat\u00f3n\"},\n}\n

    Then update manages the merging of default settings and user settings:

    auto user_settings = json::parse(\"config.json\");\nauto effective_settings = get_default_settings();\neffective_settings.update(user_settings);\n

    Now effective_settings contains the default settings, but those keys set by the user are overwritten:

    {\n    \"color\": \"blue\",\n    \"active\": true,\n    \"name\": {\"es\": \"rat\u00f3n\"}\n}\n

    Note existing keys were just overwritten. To merge objects, merge_objects setting should be set to true:

    auto user_settings = json::parse(\"config.json\");\nauto effective_settings = get_default_settings();\neffective_settings.update(user_settings, true);\n
    {\n    \"color\": \"blue\",\n    \"active\": true,\n    \"name\": {\"de\": \"Maus\", \"en\": \"mouse\", \"es\": \"rat\u00f3n\"}\n}\n
    "},{"location":"api/basic_json/update/#version-history","title":"Version history","text":"
    • Added in version 3.0.0.
    • Added merge_objects parameter in 3.10.5.
    "},{"location":"api/basic_json/value/","title":"nlohmann::basic_json::value","text":"
    // (1)\ntemplate<class ValueType>\nValueType value(const typename object_t::key_type& key,\n                ValueType&& default_value) const;\n\n// (2)\ntemplate<class ValueType, class KeyType>\nValueType value(KeyType&& key,\n                ValueType&& default_value) const;\n\n// (3)\ntemplate<class ValueType>\nValueType value(const json_pointer& ptr,\n                const ValueType& default_value) const;\n
    1. Returns either a copy of an object's element at the specified key key or a given default value if no element with key key exists.

      The function is basically equivalent to executing

      try {\n   return at(key);\n} catch(out_of_range) {\n   return default_value;\n}\n

    2. See 1. This overload is only available if KeyType is comparable with typename object_t::key_type and typename object_comparator_t::is_transparent denotes a type.

    3. Returns either a copy of an object's element at the specified JSON pointer ptr or a given default value if no value at ptr exists.

      The function is basically equivalent to executing

      try {\n   return at(ptr);\n} catch(out_of_range) {\n   return default_value;\n}\n

    Differences to at and operator[]

    • Unlike at, this function does not throw if the given key/ptr was not found.
    • Unlike operator[], this function does not implicitly add an element to the position defined by key/ptr key. This function is furthermore also applicable to const objects.
    "},{"location":"api/basic_json/value/#template-parameters","title":"Template parameters","text":"KeyType A type for an object key other than json_pointer that is comparable with string_t using object_comparator_t. This can also be a string view (C++17). ValueType type compatible to JSON values, for instance int for JSON integer numbers, bool for JSON booleans, or std::vector types for JSON arrays. Note the type of the expected value at key/ptr and the default value default_value must be compatible."},{"location":"api/basic_json/value/#parameters","title":"Parameters","text":"key (in) key of the element to access default_value (in) the value to return if key/ptr found no value ptr (in) a JSON pointer to the element to access"},{"location":"api/basic_json/value/#return-value","title":"Return value","text":"
    1. copy of the element at key key or default_value if key is not found
    2. copy of the element at key key or default_value if key is not found
    3. copy of the element at JSON Pointer ptr or default_value if no value for ptr is found
    "},{"location":"api/basic_json/value/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes to any JSON value.

    "},{"location":"api/basic_json/value/#exceptions","title":"Exceptions","text":"
    1. The function can throw the following exceptions:
      • Throws type_error.302 if default_value does not match the type of the value at key
      • Throws type_error.306 if the JSON value is not an object; in that case, using value() with a key makes no sense.
    2. See 1.
    3. The function can throw the following exceptions:
      • Throws type_error.302 if default_value does not match the type of the value at ptr
      • Throws type_error.306 if the JSON value is not an object; in that case, using value() with a key makes no sense.
    "},{"location":"api/basic_json/value/#complexity","title":"Complexity","text":"
    1. Logarithmic in the size of the container.
    2. Logarithmic in the size of the container.
    3. Logarithmic in the size of the container.
    "},{"location":"api/basic_json/value/#notes","title":"Notes","text":"

    Return type

    The value function is a template, and the return type of the function is determined by the type of the provided default value unless otherwise specified. This can have unexpected effects. In the example below, we store a 64-bit unsigned integer. We get exactly that value when using operator[]. However, when we call value and provide 0 as default value, then -1 is returned. The occurs, because 0 has type int which overflows when handling the value 18446744073709551615.

    To address this issue, either provide a correctly typed default value or use the template parameter to specify the desired return type. Note that this issue occurs even when a value is stored at the provided key, and the default value is not used as the return value.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    json j = json::parse(R\"({\"uint64\": 18446744073709551615})\");\n\n    std::cout << \"operator[]:                \" << j[\"uint64\"] << '\\n'\n              << \"default value (int):       \" << j.value(\"uint64\", 0) << '\\n'\n              << \"default value (uint64_t):  \" << j.value(\"uint64\", std::uint64_t(0)) << '\\n'\n              << \"explict return value type: \" << j.value<std::uint64_t>(\"uint64\", 0) << '\\n';\n}\n

    Output:

    operator[]:                18446744073709551615\ndefault value (int):       -1\ndefault value (uint64_t):  18446744073709551615\nexplict return value type: 18446744073709551615\n
    "},{"location":"api/basic_json/value/#examples","title":"Examples","text":"Example: (1) access specified object element with default value

    The example below shows how object elements can be queried with a default value.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object with different entry types\n    json j =\n    {\n        {\"integer\", 1},\n        {\"floating\", 42.23},\n        {\"string\", \"hello world\"},\n        {\"boolean\", true},\n        {\"object\", {{\"key1\", 1}, {\"key2\", 2}}},\n        {\"array\", {1, 2, 3}}\n    };\n\n    // access existing values\n    int v_integer = j.value(\"integer\", 0);\n    double v_floating = j.value(\"floating\", 47.11);\n\n    // access nonexisting values and rely on default value\n    std::string v_string = j.value(\"nonexisting\", \"oops\");\n    bool v_boolean = j.value(\"nonexisting\", false);\n\n    // output values\n    std::cout << std::boolalpha << v_integer << \" \" << v_floating\n              << \" \" << v_string << \" \" << v_boolean << \"\\n\";\n}\n

    Output:

    1 42.23 oops false\n
    Example: (2) access specified object element using string_view with default value

    The example below shows how object elements can be queried with a default value.

    #include <iostream>\n#include <string_view>\n#include <nlohmann/json.hpp>\n\nusing namespace std::string_view_literals;\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object with different entry types\n    json j =\n    {\n        {\"integer\", 1},\n        {\"floating\", 42.23},\n        {\"string\", \"hello world\"},\n        {\"boolean\", true},\n        {\"object\", {{\"key1\", 1}, {\"key2\", 2}}},\n        {\"array\", {1, 2, 3}}\n    };\n\n    // access existing values\n    int v_integer = j.value(\"integer\"sv, 0);\n    double v_floating = j.value(\"floating\"sv, 47.11);\n\n    // access nonexisting values and rely on default value\n    std::string v_string = j.value(\"nonexisting\"sv, \"oops\");\n    bool v_boolean = j.value(\"nonexisting\"sv, false);\n\n    // output values\n    std::cout << std::boolalpha << v_integer << \" \" << v_floating\n              << \" \" << v_string << \" \" << v_boolean << \"\\n\";\n}\n

    Output:

    1 42.23 oops false\n
    Example: (3) access specified object element via JSON Pointer with default value

    The example below shows how object elements can be queried with a default value.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create a JSON object with different entry types\n    json j =\n    {\n        {\"integer\", 1},\n        {\"floating\", 42.23},\n        {\"string\", \"hello world\"},\n        {\"boolean\", true},\n        {\"object\", {{\"key1\", 1}, {\"key2\", 2}}},\n        {\"array\", {1, 2, 3}}\n    };\n\n    // access existing values\n    int v_integer = j.value(\"/integer\"_json_pointer, 0);\n    double v_floating = j.value(\"/floating\"_json_pointer, 47.11);\n\n    // access nonexisting values and rely on default value\n    std::string v_string = j.value(\"/nonexisting\"_json_pointer, \"oops\");\n    bool v_boolean = j.value(\"/nonexisting\"_json_pointer, false);\n\n    // output values\n    std::cout << std::boolalpha << v_integer << \" \" << v_floating\n              << \" \" << v_string << \" \" << v_boolean << \"\\n\";\n}\n

    Output:

    1 42.23 oops false\n
    "},{"location":"api/basic_json/value/#see-also","title":"See also","text":"
    • see at for access by reference with range checking
    • see operator[] for unchecked access by reference
    "},{"location":"api/basic_json/value/#version-history","title":"Version history","text":"
    1. Added in version 1.0.0. Changed parameter default_value type from const ValueType& to ValueType&& in version 3.11.0.
    2. Added in version 3.11.0. Made ValueType the first template parameter in version 3.11.2.
    3. Added in version 2.0.2.
    "},{"location":"api/basic_json/value_t/","title":"nlohmann::basic_json::value_t","text":"
    enum class value_t : std::uint8_t {\n    null,\n    object,\n    array,\n    string,\n    boolean,\n    number_integer,\n    number_unsigned,\n    number_float,\n    binary,\n    discarded\n};\n

    This enumeration collects the different JSON types. It is internally used to distinguish the stored values, and the functions is_null, is_object, is_array, is_string, is_boolean, is_number (with is_number_integer, is_number_unsigned, and is_number_float), is_discarded, is_binary, is_primitive, and is_structured rely on it.

    "},{"location":"api/basic_json/value_t/#notes","title":"Notes","text":"

    Ordering

    The order of types is as follows:

    1. null
    2. boolean
    3. number_integer, number_unsigned, number_float
    4. object
    5. array
    6. string
    7. binary

    discarded is unordered.

    Types of numbers

    There are three enumerators for numbers (number_integer, number_unsigned, and number_float) to distinguish between different types of numbers:

    • number_unsigned_t for unsigned integers
    • number_integer_t for signed integers
    • number_float_t for floating-point numbers or to approximate integers which do not fit into the limits of their respective type

    Comparison operators

    operator< and operator<=> (since C++20) are overloaded and compare according to the ordering described above. Until C++20 all other relational and equality operators yield results according to the integer value of each enumerator. Since C++20 some compilers consider the rewritten candidates generated from operator<=> during overload resolution, while others do not. For predictable and portable behavior use:

    • operator< or operator<=> when wanting to compare according to the order described above
    • operator== or operator!= when wanting to compare according to each enumerators integer value
    "},{"location":"api/basic_json/value_t/#examples","title":"Examples","text":"Example

    The following code how type() queries the value_t for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = -17;\n    json j_number_unsigned = 42u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n\n    // call type()\n    std::cout << std::boolalpha;\n    std::cout << (j_null.type() == json::value_t::null) << '\\n';\n    std::cout << (j_boolean.type() == json::value_t::boolean) << '\\n';\n    std::cout << (j_number_integer.type() == json::value_t::number_integer) << '\\n';\n    std::cout << (j_number_unsigned.type() == json::value_t::number_unsigned) << '\\n';\n    std::cout << (j_number_float.type() == json::value_t::number_float) << '\\n';\n    std::cout << (j_object.type() == json::value_t::object) << '\\n';\n    std::cout << (j_array.type() == json::value_t::array) << '\\n';\n    std::cout << (j_string.type() == json::value_t::string) << '\\n';\n}\n

    Output:

    true\ntrue\ntrue\ntrue\ntrue\ntrue\ntrue\ntrue\n
    "},{"location":"api/basic_json/value_t/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Added unsigned integer type in version 2.0.0.
    • Added binary type in version 3.8.0.
    "},{"location":"api/basic_json/~basic_json/","title":"nlohmann::basic_json::~basic_json","text":"
    ~basic_json() noexcept;\n

    Destroys the JSON value and frees all allocated memory.

    "},{"location":"api/basic_json/~basic_json/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/~basic_json/#complexity","title":"Complexity","text":"

    Linear.

    "},{"location":"api/basic_json/~basic_json/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/byte_container_with_subtype/","title":"nlohmann::byte_container_with_subtype","text":"
    template<typename BinaryType>\nclass byte_container_with_subtype : public BinaryType;\n

    This type extends the template parameter BinaryType provided to basic_json with a subtype used by BSON and MessagePack. This type exists so that the user does not have to specify a type themselves with a specific naming scheme in order to override the binary type.

    "},{"location":"api/byte_container_with_subtype/#template-parameters","title":"Template parameters","text":"BinaryType container to store bytes (std::vector<std::uint8_t> by default)"},{"location":"api/byte_container_with_subtype/#member-types","title":"Member types","text":"
    • container_type - the type of the underlying container (BinaryType)
    • subtype_type - the type of the subtype (std::uint64_t)
    "},{"location":"api/byte_container_with_subtype/#member-functions","title":"Member functions","text":"
    • (constructor)
    • operator== - comparison: equal
    • operator!= - comparison: not equal
    • set_subtype - sets the binary subtype
    • subtype - return the binary subtype
    • has_subtype - return whether the value has a subtype
    • clear_subtype - clears the binary subtype
    "},{"location":"api/byte_container_with_subtype/#version-history","title":"Version history","text":"
    • Added in version 3.8.0.
    • Changed type of subtypes to std::uint64_t in 3.10.0.
    "},{"location":"api/byte_container_with_subtype/byte_container_with_subtype/","title":"nlohmann::byte_container_with_subtype::byte_container_with_subtype","text":"
    // (1)\nbyte_container_with_subtype();\n\n// (2)\nbyte_container_with_subtype(const container_type& container);\nbyte_container_with_subtype(container_type&& container);\n\n// (3)\nbyte_container_with_subtype(const container_type& container, subtype_type subtype);\nbyte_container_with_subtype(container_type&& container, subtype_type subtype);\n
    1. Create empty binary container without subtype.
    2. Create binary container without subtype.
    3. Create binary container with subtype.
    "},{"location":"api/byte_container_with_subtype/byte_container_with_subtype/#parameters","title":"Parameters","text":"container (in) binary container subtype (in) subtype"},{"location":"api/byte_container_with_subtype/byte_container_with_subtype/#examples","title":"Examples","text":"Example

    The example below demonstrates how byte containers can be created.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\n// define a byte container based on std::vector\nusing byte_container_with_subtype = nlohmann::byte_container_with_subtype<std::vector<std::uint8_t>>;\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // (1) create empty container\n    auto c1 = byte_container_with_subtype();\n\n    std::vector<std::uint8_t> bytes = {{0xca, 0xfe, 0xba, 0xbe}};\n\n    // (2) create container\n    auto c2 = byte_container_with_subtype(bytes);\n\n    // (3) create container with subtype\n    auto c3 = byte_container_with_subtype(bytes, 42);\n\n    std::cout << json(c1) << \"\\n\" << json(c2) << \"\\n\" << json(c3) << std::endl;\n}\n

    Output:

    {\"bytes\":[],\"subtype\":null}\n{\"bytes\":[202,254,186,190],\"subtype\":null}\n{\"bytes\":[202,254,186,190],\"subtype\":42}\n
    "},{"location":"api/byte_container_with_subtype/byte_container_with_subtype/#version-history","title":"Version history","text":"

    Since version 3.8.0.

    "},{"location":"api/byte_container_with_subtype/clear_subtype/","title":"nlohmann::byte_container_with_subtype::clear_subtype","text":"
    void clear_subtype() noexcept;\n

    Clears the binary subtype and flags the value as not having a subtype, which has implications for serialization; for instance MessagePack will prefer the bin family over the ext family.

    "},{"location":"api/byte_container_with_subtype/clear_subtype/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/byte_container_with_subtype/clear_subtype/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/byte_container_with_subtype/clear_subtype/#examples","title":"Examples","text":"Example

    The example below demonstrates how clear_subtype can remove subtypes.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\n// define a byte container based on std::vector\nusing byte_container_with_subtype = nlohmann::byte_container_with_subtype<std::vector<std::uint8_t>>;\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::vector<std::uint8_t> bytes = {{0xca, 0xfe, 0xba, 0xbe}};\n\n    // create container with subtype\n    auto c1 = byte_container_with_subtype(bytes, 42);\n\n    std::cout << \"before calling clear_subtype(): \" << json(c1) << '\\n';\n\n    c1.clear_subtype();\n\n    std::cout << \"after calling clear_subtype(): \" << json(c1) << '\\n';\n}\n

    Output:

    before calling clear_subtype(): {\"bytes\":[202,254,186,190],\"subtype\":42}\nafter calling clear_subtype(): {\"bytes\":[202,254,186,190],\"subtype\":null}\n
    "},{"location":"api/byte_container_with_subtype/clear_subtype/#version-history","title":"Version history","text":"

    Since version 3.8.0.

    "},{"location":"api/byte_container_with_subtype/has_subtype/","title":"nlohmann::byte_container_with_subtype::has_subtype","text":"
    constexpr bool has_subtype() const noexcept;\n

    Returns whether the value has a subtype.

    "},{"location":"api/byte_container_with_subtype/has_subtype/#return-value","title":"Return value","text":"

    whether the value has a subtype

    "},{"location":"api/byte_container_with_subtype/has_subtype/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/byte_container_with_subtype/has_subtype/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/byte_container_with_subtype/has_subtype/#examples","title":"Examples","text":"Example

    The example below demonstrates how has_subtype can check whether a subtype was set.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\n// define a byte container based on std::vector\nusing byte_container_with_subtype = nlohmann::byte_container_with_subtype<std::vector<std::uint8_t>>;\n\nint main()\n{\n    std::vector<std::uint8_t> bytes = {{0xca, 0xfe, 0xba, 0xbe}};\n\n    // create container\n    auto c1 = byte_container_with_subtype(bytes);\n\n    // create container with subtype\n    auto c2 = byte_container_with_subtype(bytes, 42);\n\n    std::cout << std::boolalpha << \"c1.has_subtype() = \" << c1.has_subtype()\n              << \"\\nc2.has_subtype() = \" << c2.has_subtype() << std::endl;\n}\n

    Output:

    c1.has_subtype() = false\nc2.has_subtype() = true\n
    "},{"location":"api/byte_container_with_subtype/has_subtype/#version-history","title":"Version history","text":"

    Since version 3.8.0.

    "},{"location":"api/byte_container_with_subtype/set_subtype/","title":"nlohmann::byte_container_with_subtype::set_subtype","text":"
    void set_subtype(subtype_type subtype) noexcept;\n

    Sets the binary subtype of the value, also flags a binary JSON value as having a subtype, which has implications for serialization.

    "},{"location":"api/byte_container_with_subtype/set_subtype/#parameters","title":"Parameters","text":"subtype (in) subtype to set"},{"location":"api/byte_container_with_subtype/set_subtype/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/byte_container_with_subtype/set_subtype/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/byte_container_with_subtype/set_subtype/#examples","title":"Examples","text":"Example

    The example below demonstrates how a subtype can be set with set_subtype.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\n// define a byte container based on std::vector\nusing byte_container_with_subtype = nlohmann::byte_container_with_subtype<std::vector<std::uint8_t>>;\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::vector<std::uint8_t> bytes = {{0xca, 0xfe, 0xba, 0xbe}};\n\n    // create container without subtype\n    auto c = byte_container_with_subtype(bytes);\n\n    std::cout << \"before calling set_subtype(42): \" << json(c) << '\\n';\n\n    // set the subtype\n    c.set_subtype(42);\n\n    std::cout << \"after calling set_subtype(42): \" << json(c) << '\\n';\n}\n

    Output:

    before calling set_subtype(42): {\"bytes\":[202,254,186,190],\"subtype\":null}\nafter calling set_subtype(42): {\"bytes\":[202,254,186,190],\"subtype\":42}\n
    "},{"location":"api/byte_container_with_subtype/set_subtype/#version-history","title":"Version history","text":"

    Since version 3.8.0.

    "},{"location":"api/byte_container_with_subtype/subtype/","title":"nlohmann::byte_container_with_subtype::subtype","text":"
    constexpr subtype_type subtype() const noexcept;\n

    Returns the numerical subtype of the value if it has a subtype. If it does not have a subtype, this function will return subtype_type(-1) as a sentinel value.

    "},{"location":"api/byte_container_with_subtype/subtype/#return-value","title":"Return value","text":"

    the numerical subtype of the binary value, or subtype_type(-1) if no subtype is set

    "},{"location":"api/byte_container_with_subtype/subtype/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/byte_container_with_subtype/subtype/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/byte_container_with_subtype/subtype/#examples","title":"Examples","text":"Example

    The example below demonstrates how the subtype can be retrieved with subtype. Note how subtype_type(-1) is returned for container c1.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\n// define a byte container based on std::vector\nusing byte_container_with_subtype = nlohmann::byte_container_with_subtype<std::vector<std::uint8_t>>;\n\nint main()\n{\n    std::vector<std::uint8_t> bytes = {{0xca, 0xfe, 0xba, 0xbe}};\n\n    // create container\n    auto c1 = byte_container_with_subtype(bytes);\n\n    // create container with subtype\n    auto c2 = byte_container_with_subtype(bytes, 42);\n\n    std::cout << \"c1.subtype() = \" << c1.subtype()\n              << \"\\nc2.subtype() = \" << c2.subtype() << std::endl;\n\n    // in case no subtype is set, return special value\n    assert(c1.subtype() == static_cast<byte_container_with_subtype::subtype_type>(-1));\n}\n

    Output:

    c1.subtype() = 18446744073709551615\nc2.subtype() = 42\n
    "},{"location":"api/byte_container_with_subtype/subtype/#version-history","title":"Version history","text":"
    • Added in version 3.8.0
    • Fixed return value to properly return subtype_type(-1) as documented in version 3.10.0.
    "},{"location":"api/json_pointer/","title":"nlohmann::json_pointer","text":"
    template<typename RefStringType>\nclass json_pointer;\n

    A JSON pointer defines a string syntax for identifying a specific value within a JSON document. It can be used with functions at and operator[]. Furthermore, JSON pointers are the base for JSON patches.

    "},{"location":"api/json_pointer/#template-parameters","title":"Template parameters","text":"RefStringType the string type used for the reference tokens making up the JSON pointer

    Deprecation

    For backwards compatibility RefStringType may also be a specialization of basic_json in which case string_t will be deduced as basic_json::string_t. This feature is deprecated and may be removed in a future major version.

    "},{"location":"api/json_pointer/#member-types","title":"Member types","text":"
    • string_t - the string type used for the reference tokens
    "},{"location":"api/json_pointer/#member-functions","title":"Member functions","text":"
    • (constructor)
    • to_string - return a string representation of the JSON pointer
    • operator string_t - return a string representation of the JSON pointer
    • operator== - compare: equal
    • operator!= - compare: not equal
    • operator/= - append to the end of the JSON pointer
    • operator/ - create JSON Pointer by appending
    • parent_pointer - returns the parent of this JSON pointer
    • pop_back - remove last reference token
    • back - return last reference token
    • push_back - append an unescaped token at the end of the pointer
    • empty - return whether pointer points to the root document
    "},{"location":"api/json_pointer/#literals","title":"Literals","text":"
    • operator\"\"_json_pointer - user-defined string literal for JSON pointers
    "},{"location":"api/json_pointer/#see-also","title":"See also","text":"
    • RFC 6901
    "},{"location":"api/json_pointer/#version-history","title":"Version history","text":"
    • Added in version 2.0.0.
    • Changed template parameter from basic_json to string type in version 3.11.0.
    "},{"location":"api/json_pointer/back/","title":"nlohmann::json_pointer::back","text":"
    const string_t& back() const;\n

    Return last reference token.

    "},{"location":"api/json_pointer/back/#return-value","title":"Return value","text":"

    Last reference token.

    "},{"location":"api/json_pointer/back/#exceptions","title":"Exceptions","text":"

    Throws out_of_range.405 if JSON pointer has no parent.

    "},{"location":"api/json_pointer/back/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/json_pointer/back/#examples","title":"Examples","text":"Example

    The example shows the usage of back.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // different JSON Pointers\n    json::json_pointer ptr1(\"/foo\");\n    json::json_pointer ptr2(\"/foo/0\");\n\n    // call empty()\n    std::cout << \"last reference token of \\\"\" << ptr1 << \"\\\" is \\\"\" << ptr1.back() << \"\\\"\\n\"\n              << \"last reference token of \\\"\" << ptr2 << \"\\\" is \\\"\" << ptr2.back() << \"\\\"\" << std::endl;\n}\n

    Output:

    last reference token of \"/foo\" is \"foo\"\nlast reference token of \"/foo/0\" is \"0\"\n
    "},{"location":"api/json_pointer/back/#version-history","title":"Version history","text":"
    • Added in version 3.6.0.
    • Changed return type to string_t in version 3.11.0.
    "},{"location":"api/json_pointer/empty/","title":"nlohmann::json_pointer::empty","text":"
    bool empty() const noexcept;\n

    Return whether pointer points to the root document.

    "},{"location":"api/json_pointer/empty/#return-value","title":"Return value","text":"

    true iff the JSON pointer points to the root document.

    "},{"location":"api/json_pointer/empty/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/json_pointer/empty/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/json_pointer/empty/#examples","title":"Examples","text":"Example

    The example shows the result of empty for different JSON Pointers.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // different JSON Pointers\n    json::json_pointer ptr0;\n    json::json_pointer ptr1(\"\");\n    json::json_pointer ptr2(\"/foo\");\n    json::json_pointer ptr3(\"/foo/0\");\n\n    // call empty()\n    std::cout << std::boolalpha\n              << \"\\\"\" << ptr0 << \"\\\": \" << ptr0.empty() << '\\n'\n              << \"\\\"\" << ptr1 << \"\\\": \" << ptr1.empty() << '\\n'\n              << \"\\\"\" << ptr2 << \"\\\": \" << ptr2.empty() << '\\n'\n              << \"\\\"\" << ptr3 << \"\\\": \" << ptr3.empty() << std::endl;\n}\n

    Output:

    \"\": true\n\"\": true\n\"/foo\": false\n\"/foo/0\": false\n
    "},{"location":"api/json_pointer/empty/#version-history","title":"Version history","text":"

    Added in version 3.6.0.

    "},{"location":"api/json_pointer/json_pointer/","title":"nlohmann::json_pointer::json_pointer","text":"
    explicit json_pointer(const string_t& s = \"\");\n

    Create a JSON pointer according to the syntax described in Section 3 of RFC6901.

    "},{"location":"api/json_pointer/json_pointer/#parameters","title":"Parameters","text":"s (in) string representing the JSON pointer; if omitted, the empty string is assumed which references the whole JSON value"},{"location":"api/json_pointer/json_pointer/#exceptions","title":"Exceptions","text":"
    • Throws parse_error.107 if the given JSON pointer s is nonempty and does not begin with a slash (/); see example below.
    • Throws parse_error.108 if a tilde (~) in the given JSON pointer s is not followed by 0 (representing ~) or 1 (representing /); see example below.
    "},{"location":"api/json_pointer/json_pointer/#examples","title":"Examples","text":"Example

    The example shows the construction several valid JSON pointers as well as the exceptional behavior.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // correct JSON pointers\n    json::json_pointer p1;\n    json::json_pointer p2(\"\");\n    json::json_pointer p3(\"/\");\n    json::json_pointer p4(\"//\");\n    json::json_pointer p5(\"/foo/bar\");\n    json::json_pointer p6(\"/foo/bar/-\");\n    json::json_pointer p7(\"/foo/~0\");\n    json::json_pointer p8(\"/foo/~1\");\n\n    // error: JSON pointer does not begin with a slash\n    try\n    {\n        json::json_pointer p9(\"foo\");\n    }\n    catch (const json::parse_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // error: JSON pointer uses escape symbol ~ not followed by 0 or 1\n    try\n    {\n        json::json_pointer p10(\"/foo/~\");\n    }\n    catch (const json::parse_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // error: JSON pointer uses escape symbol ~ not followed by 0 or 1\n    try\n    {\n        json::json_pointer p11(\"/foo/~3\");\n    }\n    catch (const json::parse_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    [json.exception.parse_error.107] parse error at byte 1: JSON pointer must be empty or begin with '/' - was: 'foo'\n[json.exception.parse_error.108] parse error: escape character '~' must be followed with '0' or '1'\n[json.exception.parse_error.108] parse error: escape character '~' must be followed with '0' or '1'\n
    "},{"location":"api/json_pointer/json_pointer/#version-history","title":"Version history","text":"
    • Added in version 2.0.0.
    • Changed type of s to string_t in version 3.11.0.
    "},{"location":"api/json_pointer/operator_eq/","title":"nlohmann::json_pointer::operator==","text":"
    // until C++20\ntemplate<typename RefStringTypeLhs, typename RefStringTypeRhs>\nbool operator==(\n    const json_pointer<RefStringTypeLhs>& lhs,\n    const json_pointer<RefStringTypeRhs>& rhs) noexcept;            // (1)\n\ntemplate<typename RefStringTypeLhs, typename StringType>\nbool operator==(\n    const json_pointer<RefStringTypeLhs>& lhs,\n    const StringType& rhs);                                         // (2)\n\ntemplate<typename RefStringTypeRhs, typename StringType>\nbool operator==(\n    const StringType& lhs,\n    const json_pointer<RefStringTypeRhs>& rhs);                     // (2)\n\n// since C++20\nclass json_pointer {\n    template<typename RefStringTypeRhs>\n    bool operator==(\n        const json_pointer<RefStringTypeRhs>& rhs) const noexcept;  // (1)\n\n    bool operator==(const string_t& rhs) const;                     // (2)\n};\n
    1. Compares two JSON pointers for equality by comparing their reference tokens.

    2. Compares a JSON pointer and a string or a string and a JSON pointer for equality by converting the string to a JSON pointer and comparing the JSON pointers according to 1.

    "},{"location":"api/json_pointer/operator_eq/#template-parameters","title":"Template parameters","text":"RefStringTypeLhs, RefStringTypeRhs the string type of the left-hand side or right-hand side JSON pointer, respectively StringType the string type derived from the json_pointer operand (json_pointer::string_t)"},{"location":"api/json_pointer/operator_eq/#parameters","title":"Parameters","text":"lhs (in) first value to consider rhs (in) second value to consider"},{"location":"api/json_pointer/operator_eq/#return-value","title":"Return value","text":"

    whether the values lhs/*this and rhs are equal

    "},{"location":"api/json_pointer/operator_eq/#exception-safety","title":"Exception safety","text":"
    1. No-throw guarantee: this function never throws exceptions.
    2. Strong exception safety: if an exception occurs, the original value stays intact.
    "},{"location":"api/json_pointer/operator_eq/#exceptions","title":"Exceptions","text":"
    1. (none)
    2. The function can throw the following exceptions:
    3. Throws parse_error.107 if the given JSON pointer s is nonempty and does not begin with a slash (/); see example below.
    4. Throws parse_error.108 if a tilde (~) in the given JSON pointer s is not followed by 0 (representing ~) or 1 (representing /); see example below.
    "},{"location":"api/json_pointer/operator_eq/#complexity","title":"Complexity","text":"

    Constant if lhs and rhs differ in the number of reference tokens, otherwise linear in the number of reference tokens.

    "},{"location":"api/json_pointer/operator_eq/#notes","title":"Notes","text":"

    Deprecation

    Overload 2 is deprecated and will be removed in a future major version release.

    "},{"location":"api/json_pointer/operator_eq/#examples","title":"Examples","text":"Example: (1) Comparing JSON pointers

    The example demonstrates comparing JSON pointers.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // different JSON pointers\n    json::json_pointer ptr0;\n    json::json_pointer ptr1(\"\");\n    json::json_pointer ptr2(\"/foo\");\n\n    // compare JSON pointers\n    std::cout << std::boolalpha\n              << \"\\\"\" << ptr0 << \"\\\" == \\\"\" << ptr0 << \"\\\": \" << (ptr0 == ptr0) << '\\n'\n              << \"\\\"\" << ptr0 << \"\\\" == \\\"\" << ptr1 << \"\\\": \" << (ptr0 == ptr1) << '\\n'\n              << \"\\\"\" << ptr1 << \"\\\" == \\\"\" << ptr2 << \"\\\": \" << (ptr1 == ptr2) << '\\n'\n              << \"\\\"\" << ptr2 << \"\\\" == \\\"\" << ptr2 << \"\\\": \" << (ptr2 == ptr2) << std::endl;\n}\n

    Output:

    \"\" == \"\": true\n\"\" == \"\": true\n\"\" == \"/foo\": false\n\"/foo\" == \"/foo\": true\n
    Example: (2) Comparing JSON pointers and strings

    The example demonstrates comparing JSON pointers and strings, and when doing so may raise an exception.

    #include <exception>\n#include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // different JSON pointers\n    json::json_pointer ptr0;\n    json::json_pointer ptr1(\"\");\n    json::json_pointer ptr2(\"/foo\");\n\n    // different strings\n    std::string str0(\"\");\n    std::string str1(\"/foo\");\n    std::string str2(\"bar\");\n\n    // compare JSON pointers and strings\n    std::cout << std::boolalpha\n              << \"\\\"\" << ptr0 << \"\\\" == \\\"\" << str0 << \"\\\": \" << (ptr0 == str0) << '\\n'\n              << \"\\\"\" << str0 << \"\\\" == \\\"\" << ptr1 << \"\\\": \" << (str0 == ptr1) << '\\n'\n              << \"\\\"\" << ptr2 << \"\\\" == \\\"\" << str1 << \"\\\": \" << (ptr2 == str1) << std::endl;\n\n    try\n    {\n        std::cout << \"\\\"\" << str2 << \"\\\" == \\\"\" << ptr2 << \"\\\": \" << (str2 == ptr2) << std::endl;\n    }\n    catch (const json::parse_error& ex)\n    {\n        std::cout << ex.what() << std::endl;\n    }\n}\n

    Output:

    \"\" == \"\": true\n\"\" == \"\": true\n\"/foo\" == \"/foo\": true\n\"bar\" == \"/foo\": [json.exception.parse_error.107] parse error at byte 1: JSON pointer must be empty or begin with '/' - was: 'bar'\n
    "},{"location":"api/json_pointer/operator_eq/#version-history","title":"Version history","text":"
    1. Added in version 2.1.0. Added C++20 member functions in version 3.11.2.
    2. Added for backward compatibility and deprecated in version 3.11.2.
    "},{"location":"api/json_pointer/operator_ne/","title":"nlohmann::json_pointer::operator!=","text":"
    // until C++20\ntemplate<typename RefStringTypeLhs, typename RefStringTypeRhs>\nbool operator!=(\n    const json_pointer<RefStringTypeLhs>& lhs,\n    const json_pointer<RefStringTypeRhs>& rhs) noexcept;  // (1)\n\ntemplate<typename RefStringTypeLhs, typename StringType>\nbool operator!=(\n    const json_pointer<RefStringTypeLhs>& lhs,\n    const StringType& rhs);                               // (2)\n\ntemplate<typename RefStringTypeRhs, typename StringType>\nbool operator!=(\n    const StringType& lhs,\n    const json_pointer<RefStringTypeRhs>& rhs);           // (2)\n
    1. Compares two JSON pointers for inequality by comparing their reference tokens.

    2. Compares a JSON pointer and a string or a string and a JSON pointer for inequality by converting the string to a JSON pointer and comparing the JSON pointers according to 1.

    "},{"location":"api/json_pointer/operator_ne/#template-parameters","title":"Template parameters","text":"RefStringTypeLhs, RefStringTypeRhs the string type of the left-hand side or right-hand side JSON pointer, respectively StringType the string type derived from the json_pointer operand (json_pointer::string_t)"},{"location":"api/json_pointer/operator_ne/#parameters","title":"Parameters","text":"lhs (in) first value to consider rhs (in) second value to consider"},{"location":"api/json_pointer/operator_ne/#return-value","title":"Return value","text":"

    whether the values lhs/*this and rhs are not equal

    "},{"location":"api/json_pointer/operator_ne/#exception-safety","title":"Exception safety","text":"
    1. No-throw guarantee: this function never throws exceptions.
    2. Strong exception safety: if an exception occurs, the original value stays intact.
    "},{"location":"api/json_pointer/operator_ne/#exceptions","title":"Exceptions","text":"
    1. (none)
    2. The function can throw the following exceptions:
    3. Throws parse_error.107 if the given JSON pointer s is nonempty and does not begin with a slash (/); see example below.
    4. Throws parse_error.108 if a tilde (~) in the given JSON pointer s is not followed by 0 (representing ~) or 1 (representing /); see example below.
    "},{"location":"api/json_pointer/operator_ne/#complexity","title":"Complexity","text":"

    Constant if lhs and rhs differ in the number of reference tokens, otherwise linear in the number of reference tokens.

    "},{"location":"api/json_pointer/operator_ne/#notes","title":"Notes","text":"

    Operator overload resolution

    Since C++20 overload resolution will consider the rewritten candidate generated from operator==.

    Deprecation

    Overload 2 is deprecated and will be removed in a future major version release.

    "},{"location":"api/json_pointer/operator_ne/#examples","title":"Examples","text":"Example: (1) Comparing JSON pointers

    The example demonstrates comparing JSON pointers.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // different JSON pointers\n    json::json_pointer ptr0;\n    json::json_pointer ptr1(\"\");\n    json::json_pointer ptr2(\"/foo\");\n\n    // compare JSON pointers\n    std::cout << std::boolalpha\n              << \"\\\"\" << ptr0 << \"\\\" != \\\"\" << ptr0 << \"\\\": \" << (ptr0 != ptr0) << '\\n'\n              << \"\\\"\" << ptr0 << \"\\\" != \\\"\" << ptr1 << \"\\\": \" << (ptr0 != ptr1) << '\\n'\n              << \"\\\"\" << ptr1 << \"\\\" != \\\"\" << ptr2 << \"\\\": \" << (ptr1 != ptr2) << '\\n'\n              << \"\\\"\" << ptr2 << \"\\\" != \\\"\" << ptr2 << \"\\\": \" << (ptr2 != ptr2) << std::endl;\n}\n

    Output:

    \"\" != \"\": false\n\"\" != \"\": false\n\"\" != \"/foo\": true\n\"/foo\" != \"/foo\": false\n
    Example: (2) Comparing JSON pointers and strings

    The example demonstrates comparing JSON pointers and strings, and when doing so may raise an exception.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // different JSON pointers\n    json::json_pointer ptr0;\n    json::json_pointer ptr1(\"\");\n    json::json_pointer ptr2(\"/foo\");\n\n    // different strings\n    std::string str0(\"\");\n    std::string str1(\"/foo\");\n    std::string str2(\"bar\");\n\n    // compare JSON pointers and strings\n    std::cout << std::boolalpha\n              << \"\\\"\" << ptr0 << \"\\\" != \\\"\" << str0 << \"\\\": \" << (ptr0 != str0) << '\\n'\n              << \"\\\"\" << str0 << \"\\\" != \\\"\" << ptr1 << \"\\\": \" << (str0 != ptr1) << '\\n'\n              << \"\\\"\" << ptr2 << \"\\\" != \\\"\" << str1 << \"\\\": \" << (ptr2 != str1) << std::endl;\n\n    try\n    {\n        std::cout << \"\\\"\" << str2 << \"\\\" != \\\"\" << ptr2 << \"\\\": \" << (str2 != ptr2) << std::endl;\n    }\n    catch (const json::parse_error& ex)\n    {\n        std::cout << ex.what() << std::endl;\n    }\n}\n

    Output:

    \"\" != \"\": false\n\"\" != \"\": false\n\"/foo\" != \"/foo\": false\n\"bar\" != \"/foo\": [json.exception.parse_error.107] parse error at byte 1: JSON pointer must be empty or begin with '/' - was: 'bar'\n
    "},{"location":"api/json_pointer/operator_ne/#version-history","title":"Version history","text":"
    1. Added in version 2.1.0.
    2. Added for backward compatibility and deprecated in version 3.11.2.
    "},{"location":"api/json_pointer/operator_slash/","title":"nlohmann::json_pointer::operator/","text":"
    // (1)\njson_pointer operator/(const json_pointer& lhs, const json_pointer& rhs);\n\n// (2)\njson_pointer operator/(const json_pointer& lhs, string_t token);\n\n// (3)\njson_pointer operator/(const json_pointer& lhs, std::size_t array_idx);\n
    1. create a new JSON pointer by appending the right JSON pointer at the end of the left JSON pointer
    2. create a new JSON pointer by appending the unescaped token at the end of the JSON pointer
    3. create a new JSON pointer by appending the array-index-token at the end of the JSON pointer
    "},{"location":"api/json_pointer/operator_slash/#parameters","title":"Parameters","text":"lhs (in) JSON pointer rhs (in) JSON pointer to append token (in) reference token to append array_idx (in) array index to append"},{"location":"api/json_pointer/operator_slash/#return-value","title":"Return value","text":"
    1. a new JSON pointer with rhs appended to lhs
    2. a new JSON pointer with unescaped token appended to lhs
    3. a new JSON pointer with array_idx appended to lhs
    "},{"location":"api/json_pointer/operator_slash/#complexity","title":"Complexity","text":"
    1. Linear in the length of lhs and rhs.
    2. Linear in the length of lhs.
    3. Linear in the length of lhs.
    "},{"location":"api/json_pointer/operator_slash/#examples","title":"Examples","text":"Example

    The example shows the usage of operator/.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON pointer\n    json::json_pointer ptr(\"/foo\");\n\n    // append a JSON Pointer\n    std::cout << \"\\\"\" << ptr / json::json_pointer(\"/bar/baz\") << \"\\\"\\n\";\n\n    // append a string\n    std::cout << \"\\\"\" << ptr / \"fob\" << \"\\\"\\n\";\n\n    // append an array index\n    std::cout << \"\\\"\" << ptr / 42 << \"\\\"\" << std::endl;\n}\n

    Output:

    \"/foo/bar/baz\"\n\"/foo/fob\"\n\"/foo/42\"\n
    "},{"location":"api/json_pointer/operator_slash/#version-history","title":"Version history","text":"
    1. Added in version 3.6.0.
    2. Added in version 3.6.0. Changed type of token to string_t in version 3.11.0.
    3. Added in version 3.6.0.
    "},{"location":"api/json_pointer/operator_slasheq/","title":"nlohmann::json_pointer::operator/=","text":"
    // (1)\njson_pointer& operator/=(const json_pointer& ptr);\n\n// (2)\njson_pointer& operator/=(string_t token);\n\n// (3)\njson_pointer& operator/=(std::size_t array_idx)\n
    1. append another JSON pointer at the end of this JSON pointer
    2. append an unescaped reference token at the end of this JSON pointer
    3. append an array index at the end of this JSON pointer
    "},{"location":"api/json_pointer/operator_slasheq/#parameters","title":"Parameters","text":"ptr (in) JSON pointer to append token (in) reference token to append array_idx (in) array index to append"},{"location":"api/json_pointer/operator_slasheq/#return-value","title":"Return value","text":"
    1. JSON pointer with ptr appended
    2. JSON pointer with token appended without escaping token
    3. JSON pointer with array_idx appended
    "},{"location":"api/json_pointer/operator_slasheq/#complexity","title":"Complexity","text":"
    1. Linear in the length of ptr.
    2. Amortized constant.
    3. Amortized constant.
    "},{"location":"api/json_pointer/operator_slasheq/#examples","title":"Examples","text":"Example

    The example shows the usage of operator/=.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON pointer\n    json::json_pointer ptr(\"/foo\");\n    std::cout << \"\\\"\" << ptr << \"\\\"\\n\";\n\n    // append a JSON Pointer\n    ptr /= json::json_pointer(\"/bar/baz\");\n    std::cout << \"\\\"\" << ptr << \"\\\"\\n\";\n\n    // append a string\n    ptr /= \"fob\";\n    std::cout << \"\\\"\" << ptr << \"\\\"\\n\";\n\n    // append an array index\n    ptr /= 42;\n    std::cout << \"\\\"\" << ptr << \"\\\"\" << std::endl;\n}\n

    Output:

    \"/foo\"\n\"/foo/bar/baz\"\n\"/foo/bar/baz/fob\"\n\"/foo/bar/baz/fob/42\"\n
    "},{"location":"api/json_pointer/operator_slasheq/#version-history","title":"Version history","text":"
    1. Added in version 3.6.0.
    2. Added in version 3.6.0. Changed type of token to string_t in version 3.11.0.
    3. Added in version 3.6.0.
    "},{"location":"api/json_pointer/operator_string_t/","title":"nlohmann::json_pointer::operator string_t","text":"
    operator string_t() const\n

    Return a string representation of the JSON pointer.

    "},{"location":"api/json_pointer/operator_string_t/#return-value","title":"Return value","text":"

    A string representation of the JSON pointer

    "},{"location":"api/json_pointer/operator_string_t/#possible-implementation","title":"Possible implementation","text":"
    operator string_t() const\n{\n    return to_string();\n}\n
    "},{"location":"api/json_pointer/operator_string_t/#notes","title":"Notes","text":"

    Deprecation

    This function is deprecated in favor of to_string and will be removed in a future major version release.

    "},{"location":"api/json_pointer/operator_string_t/#examples","title":"Examples","text":"Example

    The example shows how JSON Pointers can be implicitly converted to strings.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // different JSON Pointers\n    json::json_pointer ptr1(\"/foo/0\");\n    json::json_pointer ptr2(\"/a~1b\");\n\n    // implicit conversion to string\n    std::string s;\n    s += ptr1;\n    s += \"\\n\";\n    s += ptr2;\n\n    std::cout << s << std::endl;\n}\n

    Output:

    /foo/0\n/a~1b\n
    "},{"location":"api/json_pointer/operator_string_t/#see-also","title":"See also","text":"
    • string_t- type for strings
    "},{"location":"api/json_pointer/operator_string_t/#version-history","title":"Version history","text":"
    • Since version 2.0.0.
    • Changed type to string_t and deprecated in version 3.11.0.
    "},{"location":"api/json_pointer/parent_pointer/","title":"nlohmann::json_pointer::parent_pointer","text":"
    json_pointer parent_pointer() const;\n

    Returns the parent of this JSON pointer.

    "},{"location":"api/json_pointer/parent_pointer/#return-value","title":"Return value","text":"

    Parent of this JSON pointer; in case this JSON pointer is the root, the root itself is returned.

    "},{"location":"api/json_pointer/parent_pointer/#complexity","title":"Complexity","text":"

    Linear in the length of the JSON pointer.

    "},{"location":"api/json_pointer/parent_pointer/#examples","title":"Examples","text":"Example

    The example shows the result of parent_pointer for different JSON Pointers.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // different JSON Pointers\n    json::json_pointer ptr1(\"\");\n    json::json_pointer ptr2(\"/foo\");\n    json::json_pointer ptr3(\"/foo/0\");\n\n    // call parent_pointer()\n    std::cout << std::boolalpha\n              << \"parent of \\\"\" << ptr1 << \"\\\" is \\\"\" << ptr1.parent_pointer() << \"\\\"\\n\"\n              << \"parent of \\\"\" << ptr2 << \"\\\" is \\\"\" << ptr2.parent_pointer() << \"\\\"\\n\"\n              << \"parent of \\\"\" << ptr3 << \"\\\" is \\\"\" << ptr3.parent_pointer() << \"\\\"\" << std::endl;\n}\n

    Output:

    parent of \"\" is \"\"\nparent of \"/foo\" is \"\"\nparent of \"/foo/0\" is \"/foo\"\n
    "},{"location":"api/json_pointer/parent_pointer/#version-history","title":"Version history","text":"

    Added in version 3.6.0.

    "},{"location":"api/json_pointer/pop_back/","title":"nlohmann::json_pointer::pop_back","text":"
    void pop_back();\n

    Remove last reference token.

    "},{"location":"api/json_pointer/pop_back/#exceptions","title":"Exceptions","text":"

    Throws out_of_range.405 if JSON pointer has no parent.

    "},{"location":"api/json_pointer/pop_back/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/json_pointer/pop_back/#examples","title":"Examples","text":"Example

    The example shows the usage of pop_back.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create empty JSON Pointer\n    json::json_pointer ptr(\"/foo/bar/baz\");\n    std::cout << \"\\\"\" << ptr << \"\\\"\\n\";\n\n    // call pop_back()\n    ptr.pop_back();\n    std::cout << \"\\\"\" << ptr << \"\\\"\\n\";\n\n    ptr.pop_back();\n    std::cout << \"\\\"\" << ptr << \"\\\"\\n\";\n\n    ptr.pop_back();\n    std::cout << \"\\\"\" << ptr << \"\\\"\\n\";\n}\n

    Output:

    \"/foo/bar/baz\"\n\"/foo/bar\"\n\"/foo\"\n\"\"\n
    "},{"location":"api/json_pointer/pop_back/#version-history","title":"Version history","text":"

    Added in version 3.6.0.

    "},{"location":"api/json_pointer/push_back/","title":"nlohmann::json_pointer::push_back","text":"
    void push_back(const string_t& token);\n\nvoid push_back(string_t&& token);\n

    Append an unescaped token at the end of the reference pointer.

    "},{"location":"api/json_pointer/push_back/#parameters","title":"Parameters","text":"token (in) token to add"},{"location":"api/json_pointer/push_back/#complexity","title":"Complexity","text":"

    Amortized constant.

    "},{"location":"api/json_pointer/push_back/#examples","title":"Examples","text":"Example

    The example shows the result of push_back for different JSON Pointers.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create empty JSON Pointer\n    json::json_pointer ptr;\n    std::cout << \"\\\"\" << ptr << \"\\\"\\n\";\n\n    // call push_back()\n    ptr.push_back(\"foo\");\n    std::cout << \"\\\"\" << ptr << \"\\\"\\n\";\n\n    ptr.push_back(\"0\");\n    std::cout << \"\\\"\" << ptr << \"\\\"\\n\";\n\n    ptr.push_back(\"bar\");\n    std::cout << \"\\\"\" << ptr << \"\\\"\\n\";\n}\n

    Output:

    \"\"\n\"/foo\"\n\"/foo/0\"\n\"/foo/0/bar\"\n
    "},{"location":"api/json_pointer/push_back/#version-history","title":"Version history","text":"
    • Added in version 3.6.0.
    • Changed type of token to string_t in version 3.11.0.
    "},{"location":"api/json_pointer/string_t/","title":"nlohmann::json_pointer::string_t","text":"
    using string_t = RefStringType;\n

    The string type used for the reference tokens making up the JSON pointer.

    See basic_json::string_t for more information.

    "},{"location":"api/json_pointer/string_t/#examples","title":"Examples","text":"Example

    The example shows the type string_t and its relation to basic_json::string_t.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    json::json_pointer::string_t s = \"This is a string.\";\n\n    std::cout << s << std::endl;\n\n    std::cout << std::boolalpha << std::is_same<json::json_pointer::string_t, json::string_t>::value << std::endl;\n}\n

    Output:

    This is a string.\ntrue\n
    "},{"location":"api/json_pointer/string_t/#version-history","title":"Version history","text":"
    • Added in version 3.11.0.
    "},{"location":"api/json_pointer/to_string/","title":"nlohmann::json_pointer::to_string","text":"
    string_t to_string() const;\n

    Return a string representation of the JSON pointer.

    "},{"location":"api/json_pointer/to_string/#return-value","title":"Return value","text":"

    A string representation of the JSON pointer

    "},{"location":"api/json_pointer/to_string/#notes","title":"Notes","text":"

    For each JSON pointer ptr, it holds:

    ptr == json_pointer(ptr.to_string());\n
    "},{"location":"api/json_pointer/to_string/#examples","title":"Examples","text":"Example

    The example shows the result of to_string.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // different JSON Pointers\n    json::json_pointer ptr1(\"\");\n    json::json_pointer ptr2(\"/foo\");\n    json::json_pointer ptr3(\"/foo/0\");\n    json::json_pointer ptr4(\"/\");\n    json::json_pointer ptr5(\"/a~1b\");\n    json::json_pointer ptr6(\"/c%d\");\n    json::json_pointer ptr7(\"/e^f\");\n    json::json_pointer ptr8(\"/g|h\");\n    json::json_pointer ptr9(\"/i\\\\j\");\n    json::json_pointer ptr10(\"/k\\\"l\");\n    json::json_pointer ptr11(\"/ \");\n    json::json_pointer ptr12(\"/m~0n\");\n\n    std::cout << \"\\\"\" << ptr1.to_string() << \"\\\"\\n\"\n              << \"\\\"\" << ptr2.to_string() << \"\\\"\\n\"\n              << \"\\\"\" << ptr3.to_string() << \"\\\"\\n\"\n              << \"\\\"\" << ptr4.to_string() << \"\\\"\\n\"\n              << \"\\\"\" << ptr5.to_string() << \"\\\"\\n\"\n              << \"\\\"\" << ptr6.to_string() << \"\\\"\\n\"\n              << \"\\\"\" << ptr7.to_string() << \"\\\"\\n\"\n              << \"\\\"\" << ptr8.to_string() << \"\\\"\\n\"\n              << \"\\\"\" << ptr9.to_string() << \"\\\"\\n\"\n              << \"\\\"\" << ptr10.to_string() << \"\\\"\\n\"\n              << \"\\\"\" << ptr11.to_string() << \"\\\"\\n\"\n              << \"\\\"\" << ptr12.to_string() << \"\\\"\" << std::endl;\n}\n

    Output:

    \"\"\n\"/foo\"\n\"/foo/0\"\n\"/\"\n\"/a~1b\"\n\"/c%d\"\n\"/e^f\"\n\"/g|h\"\n\"/i\\j\"\n\"/k\"l\"\n\"/ \"\n\"/m~0n\"\n
    "},{"location":"api/json_pointer/to_string/#version-history","title":"Version history","text":"
    • Since version 2.0.0.
    • Changed return type to string_t in version 3.11.0.
    "},{"location":"api/json_sax/","title":"nlohmann::json_sax","text":"
    template<typename BasicJsonType>\nstruct json_sax;\n

    This class describes the SAX interface used by sax_parse. Each function is called in different situations while the input is parsed. The boolean return value informs the parser whether to continue processing the input.

    "},{"location":"api/json_sax/#template-parameters","title":"Template parameters","text":"BasicJsonType a specialization of basic_json"},{"location":"api/json_sax/#member-types","title":"Member types","text":"
    • number_integer_t - BasicJsonType's type for numbers (integer)
    • number_unsigned_t - BasicJsonType's type for numbers (unsigned)
    • number_float_t - BasicJsonType's type for numbers (floating-point)
    • string_t - BasicJsonType's type for strings
    • binary_t - BasicJsonType's type for binary arrays
    "},{"location":"api/json_sax/#member-functions","title":"Member functions","text":"
    • binary (virtual) - a binary value was read
    • boolean (virtual) - a boolean value was read
    • end_array (virtual) - the end of an array was read
    • end_object (virtual) - the end of an object was read
    • key (virtual) - an object key was read
    • null (virtual) - a null value was read
    • number_float (virtual) - a floating-point number was read
    • number_integer (virtual) - an integer number was read
    • number_unsigned (virtual) - an unsigned integer number was read
    • parse_error (virtual) - a parse error occurred
    • start_array (virtual) - the beginning of an array was read
    • start_object (virtual) - the beginning of an object was read
    • string (virtual) - a string value was read
    "},{"location":"api/json_sax/#version-history","title":"Version history","text":"
    • Added in version 3.2.0.
    • Support for binary values (binary_t, binary) added in version 3.8.0.
    "},{"location":"api/json_sax/binary/","title":"nlohmann::json_sax::binary","text":"
    virtual bool binary(binary_t& val) = 0;\n

    A binary value was read.

    "},{"location":"api/json_sax/binary/#parameters","title":"Parameters","text":"val (in) binary value"},{"location":"api/json_sax/binary/#return-value","title":"Return value","text":"

    Whether parsing should proceed.

    "},{"location":"api/json_sax/binary/#notes","title":"Notes","text":"

    It is safe to move the passed binary value.

    "},{"location":"api/json_sax/binary/#examples","title":"Examples","text":"Example

    The example below shows how the SAX interface is used.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // CBOR byte string\n    std::vector<std::uint8_t> vec = {{0x44, 0xcA, 0xfe, 0xba, 0xbe}};\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse CBOR\n    bool result = json::sax_parse(vec, &sec, json::input_format_t::cbor);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

    Output:

    binary(val=[...])\n\nresult: true\n
    "},{"location":"api/json_sax/binary/#version-history","title":"Version history","text":"
    • Added in version 3.8.0.
    "},{"location":"api/json_sax/boolean/","title":"nlohmann::json_sax::boolean","text":"
    virtual bool boolean(bool val) = 0;\n

    A boolean value was read.

    "},{"location":"api/json_sax/boolean/#parameters","title":"Parameters","text":"val (in) boolean value"},{"location":"api/json_sax/boolean/#return-value","title":"Return value","text":"

    Whether parsing should proceed.

    "},{"location":"api/json_sax/boolean/#examples","title":"Examples","text":"Example

    The example below shows how the SAX interface is used.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

    Output:

    start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
    "},{"location":"api/json_sax/boolean/#version-history","title":"Version history","text":"
    • Added in version 3.2.0.
    "},{"location":"api/json_sax/end_array/","title":"nlohmann::json_sax::end_array","text":"
    virtual bool end_array() = 0;\n

    The end of an array was read.

    "},{"location":"api/json_sax/end_array/#return-value","title":"Return value","text":"

    Whether parsing should proceed.

    "},{"location":"api/json_sax/end_array/#examples","title":"Examples","text":"Example

    The example below shows how the SAX interface is used.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

    Output:

    start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
    "},{"location":"api/json_sax/end_array/#version-history","title":"Version history","text":"
    • Added in version 3.2.0.
    "},{"location":"api/json_sax/end_object/","title":"nlohmann::json_sax::end_object","text":"
    virtual bool end_object() = 0;\n

    The end of an object was read.

    "},{"location":"api/json_sax/end_object/#return-value","title":"Return value","text":"

    Whether parsing should proceed.

    "},{"location":"api/json_sax/end_object/#examples","title":"Examples","text":"Example

    The example below shows how the SAX interface is used.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

    Output:

    start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
    "},{"location":"api/json_sax/end_object/#version-history","title":"Version history","text":"
    • Added in version 3.2.0.
    "},{"location":"api/json_sax/key/","title":"nlohmann::json_sax::key","text":"
    virtual bool key(string_t& val) = 0;\n

    An object key was read.

    "},{"location":"api/json_sax/key/#parameters","title":"Parameters","text":"val (in) object key"},{"location":"api/json_sax/key/#return-value","title":"Return value","text":"

    Whether parsing should proceed.

    "},{"location":"api/json_sax/key/#notes","title":"Notes","text":"

    It is safe to move the passed object key value.

    "},{"location":"api/json_sax/key/#examples","title":"Examples","text":"Example

    The example below shows how the SAX interface is used.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

    Output:

    start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
    "},{"location":"api/json_sax/key/#version-history","title":"Version history","text":"
    • Added in version 3.2.0.
    "},{"location":"api/json_sax/null/","title":"nlohmann::json_sax::null","text":"
    virtual bool null() = 0;\n

    A null value was read.

    "},{"location":"api/json_sax/null/#return-value","title":"Return value","text":"

    Whether parsing should proceed.

    "},{"location":"api/json_sax/null/#examples","title":"Examples","text":"Example

    The example below shows how the SAX interface is used.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

    Output:

    start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
    "},{"location":"api/json_sax/null/#version-history","title":"Version history","text":"
    • Added in version 3.2.0.
    "},{"location":"api/json_sax/number_float/","title":"nlohmann::json_sax::number_float","text":"
    virtual bool number_float(number_float_t val, const string_t& s) = 0;\n

    A floating-point number was read.

    "},{"location":"api/json_sax/number_float/#parameters","title":"Parameters","text":"val (in) floating-point value s (in) string representation of the original input"},{"location":"api/json_sax/number_float/#return-value","title":"Return value","text":"

    Whether parsing should proceed.

    "},{"location":"api/json_sax/number_float/#examples","title":"Examples","text":"Example

    The example below shows how the SAX interface is used.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

    Output:

    start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
    "},{"location":"api/json_sax/number_float/#version-history","title":"Version history","text":"
    • Added in version 3.2.0.
    "},{"location":"api/json_sax/number_integer/","title":"nlohmann::json_sax::number_integer","text":"
    virtual bool number_integer(number_integer_t val) = 0;\n

    An integer number was read.

    "},{"location":"api/json_sax/number_integer/#parameters","title":"Parameters","text":"val (in) integer value"},{"location":"api/json_sax/number_integer/#return-value","title":"Return value","text":"

    Whether parsing should proceed.

    "},{"location":"api/json_sax/number_integer/#examples","title":"Examples","text":"Example

    The example below shows how the SAX interface is used.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

    Output:

    start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
    "},{"location":"api/json_sax/number_integer/#version-history","title":"Version history","text":"
    • Added in version 3.2.0.
    "},{"location":"api/json_sax/number_unsigned/","title":"nlohmann::json_sax::number_unsigned","text":"
    virtual bool number_unsigned(number_unsigned_t val) = 0;\n

    An unsigned integer number was read.

    "},{"location":"api/json_sax/number_unsigned/#parameters","title":"Parameters","text":"val (in) unsigned integer value"},{"location":"api/json_sax/number_unsigned/#return-value","title":"Return value","text":"

    Whether parsing should proceed.

    "},{"location":"api/json_sax/number_unsigned/#examples","title":"Examples","text":"Example

    The example below shows how the SAX interface is used.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

    Output:

    start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
    "},{"location":"api/json_sax/number_unsigned/#version-history","title":"Version history","text":"
    • Added in version 3.2.0.
    "},{"location":"api/json_sax/parse_error/","title":"nlohmann::json_sax::parse_error","text":"
    virtual bool parse_error(std::size_t position,\n                         const std::string& last_token,\n                         const detail::exception& ex) = 0;\n

    A parse error occurred.

    "},{"location":"api/json_sax/parse_error/#parameters","title":"Parameters","text":"position (in) the position in the input where the error occurs last_token (in) the last read token ex (in) an exception object describing the error"},{"location":"api/json_sax/parse_error/#return-value","title":"Return value","text":"

    Whether parsing should proceed (must return false).

    "},{"location":"api/json_sax/parse_error/#examples","title":"Examples","text":"Example

    The example below shows how the SAX interface is used.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

    Output:

    start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
    "},{"location":"api/json_sax/parse_error/#version-history","title":"Version history","text":"
    • Added in version 3.2.0.
    "},{"location":"api/json_sax/start_array/","title":"nlohmann::json_sax::start_array","text":"
    virtual bool start_array(std::size_t elements) = 0;\n

    The beginning of an array was read.

    "},{"location":"api/json_sax/start_array/#parameters","title":"Parameters","text":"elements (in) number of object elements or -1 if unknown"},{"location":"api/json_sax/start_array/#return-value","title":"Return value","text":"

    Whether parsing should proceed.

    "},{"location":"api/json_sax/start_array/#notes","title":"Notes","text":"

    Binary formats may report the number of elements.

    "},{"location":"api/json_sax/start_array/#examples","title":"Examples","text":"Example

    The example below shows how the SAX interface is used.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

    Output:

    start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
    "},{"location":"api/json_sax/start_array/#version-history","title":"Version history","text":"
    • Added in version 3.2.0.
    "},{"location":"api/json_sax/start_object/","title":"nlohmann::json_sax::start_object","text":"
    virtual bool start_object(std::size_t elements) = 0;\n

    The beginning of an object was read.

    "},{"location":"api/json_sax/start_object/#parameters","title":"Parameters","text":"elements (in) number of object elements or -1 if unknown"},{"location":"api/json_sax/start_object/#return-value","title":"Return value","text":"

    Whether parsing should proceed.

    "},{"location":"api/json_sax/start_object/#notes","title":"Notes","text":"

    Binary formats may report the number of elements.

    "},{"location":"api/json_sax/start_object/#examples","title":"Examples","text":"Example

    The example below shows how the SAX interface is used.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

    Output:

    start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
    "},{"location":"api/json_sax/start_object/#version-history","title":"Version history","text":"
    • Added in version 3.2.0.
    "},{"location":"api/json_sax/string/","title":"nlohmann::json_sax::string","text":"
    virtual bool string(string_t& val) = 0;\n

    A string value was read.

    "},{"location":"api/json_sax/string/#parameters","title":"Parameters","text":"val (in) string value"},{"location":"api/json_sax/string/#return-value","title":"Return value","text":"

    Whether parsing should proceed.

    "},{"location":"api/json_sax/string/#notes","title":"Notes","text":"

    It is safe to move the passed string value.

    "},{"location":"api/json_sax/string/#examples","title":"Examples","text":"Example

    The example below shows how the SAX interface is used.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

    Output:

    start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
    "},{"location":"api/json_sax/string/#version-history","title":"Version history","text":"
    • Added in version 3.2.0.
    "},{"location":"api/macros/","title":"Macros","text":"

    Some aspects of the library can be configured by defining preprocessor macros before including the json.hpp header. See also the macro overview page.

    "},{"location":"api/macros/#runtime-assertions","title":"Runtime assertions","text":"
    • JSON_ASSERT(x) - control behavior of runtime assertions
    "},{"location":"api/macros/#exceptions","title":"Exceptions","text":"
    • JSON_CATCH_USER(exception)JSON_THROW_USER(exception)JSON_TRY_USER - control exceptions
    • JSON_DIAGNOSTICS - control extended diagnostics
    • JSON_DIAGNOSTIC_POSITIONS - access positions of elements
    • JSON_NOEXCEPTION - switch off exceptions
    "},{"location":"api/macros/#language-support","title":"Language support","text":"
    • JSON_HAS_CPP_11JSON_HAS_CPP_14JSON_HAS_CPP_17JSON_HAS_CPP_20 - set supported C++ standard
    • JSON_HAS_FILESYSTEMJSON_HAS_EXPERIMENTAL_FILESYSTEM - control std::filesystem support
    • JSON_HAS_RANGES - control std::ranges support
    • JSON_HAS_THREE_WAY_COMPARISON - control 3-way comparison support
    • JSON_NO_IO - switch off functions relying on certain C++ I/O headers
    • JSON_SKIP_UNSUPPORTED_COMPILER_CHECK - do not warn about unsupported compilers
    • JSON_USE_GLOBAL_UDLS - place user-defined string literals (UDLs) into the global namespace
    "},{"location":"api/macros/#library-version","title":"Library version","text":"
    • JSON_SKIP_LIBRARY_VERSION_CHECK - skip library version check
    • NLOHMANN_JSON_VERSION_MAJORNLOHMANN_JSON_VERSION_MINORNLOHMANN_JSON_VERSION_PATCH - library version information
    "},{"location":"api/macros/#library-namespace","title":"Library namespace","text":"
    • NLOHMANN_JSON_NAMESPACE - full name of the nlohmann namespace
    • NLOHMANN_JSON_NAMESPACE_BEGINNLOHMANN_JSON_NAMESPACE_END - open and close the library namespace
    • NLOHMANN_JSON_NAMESPACE_NO_VERSION - disable the version component of the inline namespace
    "},{"location":"api/macros/#type-conversions","title":"Type conversions","text":"
    • JSON_DISABLE_ENUM_SERIALIZATION - switch off default serialization/deserialization functions for enums
    • JSON_USE_IMPLICIT_CONVERSIONS - control implicit conversions
    "},{"location":"api/macros/#comparison-behavior","title":"Comparison behavior","text":"
    • JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON - control comparison of discarded values
    "},{"location":"api/macros/#serializationdeserialization-macros","title":"Serialization/deserialization macros","text":""},{"location":"api/macros/#enums","title":"Enums","text":"
    • NLOHMANN_JSON_SERIALIZE_ENUM - serialize/deserialize an enum
    "},{"location":"api/macros/#classes-and-structs","title":"Classes and structs","text":"
    • NLOHMANN_DEFINE_TYPE_INTRUSIVE - serialize/deserialize a non-derived class with private members
    • NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT - serialize/deserialize a non-derived class with private members; uses default values
    • NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE - serialize a non-derived class with private members
    • NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE - serialize/deserialize a non-derived class
    • NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT - serialize/deserialize a non-derived class; uses default values
    • NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE - serialize a non-derived class

    • NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE - serialize/deserialize a derived class with private members

    • NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT - serialize/deserialize a derived class with private members; uses default values
    • NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE - serialize a derived class with private members
    • NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE - serialize/deserialize a derived class
    • NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT - serialize/deserialize a derived class; uses default values
    • NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE - serialize a derived class
    "},{"location":"api/macros/json_assert/","title":"JSON_ASSERT","text":"
    #define JSON_ASSERT(x) /* value */\n

    This macro controls which code is executed for runtime assertions of the library.

    "},{"location":"api/macros/json_assert/#parameters","title":"Parameters","text":"x (in) expression of scalar type"},{"location":"api/macros/json_assert/#default-definition","title":"Default definition","text":"

    The default value is assert(x).

    #define JSON_ASSERT(x) assert(x)\n

    Therefore, assertions can be switched off by defining NDEBUG.

    "},{"location":"api/macros/json_assert/#notes","title":"Notes","text":"
    • The library uses numerous assertions to guarantee invariants and to abort in case of otherwise undefined behavior (e.g., when calling operator[] with a missing object key on a const object). See page runtime assertions for more information.
    • Defining the macro to code that does not call std::abort may leave the library in an undefined state.
    • The macro is undefined outside the library.
    "},{"location":"api/macros/json_assert/#examples","title":"Examples","text":"Example 1: default behavior

    The following code will trigger an assertion at runtime:

    #include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    const json j = {{\"key\", \"value\"}};\n    auto v = j[\"missing\"];\n}\n

    Output:

    Assertion failed: (m_value.object->find(key) != m_value.object->end()), function operator[], file json.hpp, line 2144.\n
    Example 2: user-defined behavior

    The assertion reporting can be changed by defining JSON_ASSERT(x) differently.

    #include <cstdio>\n#include <cstdlib>\n#define JSON_ASSERT(x) if(!(x)){fprintf(stderr, \"assertion error in %s\\n\", __FUNCTION__); std::abort();}\n\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    const json j = {{\"key\", \"value\"}};\n    auto v = j[\"missing\"];\n}\n

    Output:

    assertion error in operator[]\n
    "},{"location":"api/macros/json_assert/#see-also","title":"See also","text":"
    • Runtime Assertions - overview documentation
    "},{"location":"api/macros/json_assert/#version-history","title":"Version history","text":"
    • Added in version 3.9.0.
    "},{"location":"api/macros/json_diagnostic_positions/","title":"JSON_DIAGNOSTIC_POSITIONS","text":"
    #define JSON_DIAGNOSTIC_POSITIONS /* value */\n

    This macro enables position diagnostics for generated JSON objects.

    When enabled, two new member functions start_pos() and end_pos() are added to basic_json values. If the value was created by calling theparse function, then these functions allow to query the byte positions of the value in the input it was parsed from. In case the value was constructed by other means, std::string::npos is returned.

    start_pos() returns the position of the first character of a given value in the original JSON string, while end_pos() returns the position of the character following the last character. For objects and arrays, the first and last characters correspond to the opening or closing braces/brackets, respectively. For primitive values, the first and last character represent the opening and closing quotes (strings) or the first and last character of the field's numerical or predefined value (true, false, null), respectively.

    JSON type return value start_pos() return value end_pos() object position of the opening { position after the closing } array position of the opening [ position after the closing ] string position of the opening \" position after the closing \" number position of the first character position after the last character boolean position of t for true and f for false position after e null position of n position after l

    Given the above, end_pos()-start_pos() for a JSON value provides the length of the parsed JSON string for that value, including the opening or closing braces, brackets, or quotes.

    Note that enabling this macro increases the size of every JSON value by two std::size_t fields and adds slight runtime overhead to parsing, copying JSON value objects, and the generation of error messages for exceptions. It also causes these values to be reported in those error messages.

    "},{"location":"api/macros/json_diagnostic_positions/#default-definition","title":"Default definition","text":"

    The default value is 0 (position diagnostics are switched off).

    #define JSON_DIAGNOSTIC_POSITIONS 0\n

    When the macro is not defined, the library will define it to its default value.

    "},{"location":"api/macros/json_diagnostic_positions/#notes","title":"Notes","text":"

    CMake option

    Diagnostic positions can also be controlled with the CMake option JSON_Diagnostic_Positions (OFF by default) which defines JSON_DIAGNOSTIC_POSITIONS accordingly.

    Availability

    Diagnostic positions are only available if the value was created by the parse function. The sax_parse function or all other means to create a JSON value do not set the diagnostic positions and start_pos() and end_pos() will only return std::string::npos for these values.

    Invalidation

    The returned positions are only valid as long as the JSON value is not changed. The positions are not updated when the JSON value is changed.

    "},{"location":"api/macros/json_diagnostic_positions/#examples","title":"Examples","text":"Example: retrieving positions
    #include <iostream>\n\n#define JSON_DIAGNOSTIC_POSITIONS 1\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::string json_string = R\"(\n    {\n        \"address\": {\n            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\n    }\n    )\";\n    json j = json::parse(json_string);\n\n    std::cout << \"Root diagnostic positions: \\n\";\n    std::cout << \"\\tstart_pos: \" << j.start_pos() << '\\n';\n    std::cout << \"\\tend_pos:\" << j.end_pos() << \"\\n\";\n    std::cout << \"Original string: \\n\";\n    std::cout << \"{\\n        \\\"address\\\": {\\n            \\\"street\\\": \\\"Fake Street\\\",\\n            \\\"housenumber\\\": 1\\n        }\\n    }\" << \"\\n\";\n    std::cout << \"Parsed string: \\n\";\n    std::cout << json_string.substr(j.start_pos(), j.end_pos() - j.start_pos()) << \"\\n\\n\";\n\n    std::cout << \"address diagnostic positions: \\n\";\n    std::cout << \"\\tstart_pos:\" << j[\"address\"].start_pos() << '\\n';\n    std::cout << \"\\tend_pos:\" << j[\"address\"].end_pos() << \"\\n\\n\";\n    std::cout << \"Original string: \\n\";\n    std::cout << \"{            \\\"street\\\": \\\"Fake Street\\\",\\n            \\\"housenumber\\\": 1\\n        }\" << \"\\n\";\n    std::cout << \"Parsed string: \\n\";\n    std::cout << json_string.substr(j[\"address\"].start_pos(), j[\"address\"].end_pos() - j[\"address\"].start_pos()) << \"\\n\\n\";\n\n    std::cout << \"street diagnostic positions: \\n\";\n    std::cout << \"\\tstart_pos:\" << j[\"address\"][\"street\"].start_pos() << '\\n';\n    std::cout << \"\\tend_pos:\" << j[\"address\"][\"street\"].end_pos() << \"\\n\\n\";\n    std::cout << \"Original string: \\n\";\n    std::cout << \"\\\"Fake Street\\\"\" << \"\\n\";\n    std::cout << \"Parsed string: \\n\";\n    std::cout << json_string.substr(j[\"address\"][\"street\"].start_pos(), j[\"address\"][\"street\"].end_pos() - j[\"address\"][\"street\"].start_pos()) << \"\\n\\n\";\n\n    std::cout << \"housenumber diagnostic positions: \\n\";\n    std::cout << \"\\tstart_pos:\" << j[\"address\"][\"housenumber\"].start_pos() << '\\n';\n    std::cout << \"\\tend_pos:\" << j[\"address\"][\"housenumber\"].end_pos() << \"\\n\\n\";\n    std::cout << \"Original string: \\n\";\n    std::cout << \"1\" << \"\\n\";\n    std::cout << \"Parsed string: \\n\";\n    std::cout << json_string.substr(j[\"address\"][\"housenumber\"].start_pos(), j[\"address\"][\"housenumber\"].end_pos() - j[\"address\"][\"housenumber\"].start_pos()) << \"\\n\\n\";\n}\n

    Output:

    Root diagnostic positions: \n    start_pos: 5\n    end_pos:109\nOriginal string: \n{\n        \"address\": {\n            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\n    }\nParsed string: \n{\n        \"address\": {\n            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\n    }\n\naddress diagnostic positions: \n    start_pos:26\n    end_pos:103\n\nOriginal string: \n{            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\nParsed string: \n{\n            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\n\nstreet diagnostic positions: \n    start_pos:50\n    end_pos:63\n\nOriginal string: \n\"Fake Street\"\nParsed string: \n\"Fake Street\"\n\nhousenumber diagnostic positions: \n    start_pos:92\n    end_pos:93\n\nOriginal string: \n1\nParsed string: \n1\n

    The output shows the start/end positions of all the objects and fields in the JSON string.

    Example 2: using only diagnostic positions in exceptions
    #include <iostream>\n\n#define JSON_DIAGNOSTIC_POSITIONS 1\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n/* Demonstration of type error exception with diagnostic postions support enabled */\nint main()\n{\n    //Invalid json string - housenumber type must be int instead of string\n    const std::string json_invalid_string = R\"(\n    {\n        \"address\": {\n            \"street\": \"Fake Street\",\n            \"housenumber\": \"1\"\n        }\n    }\n    )\";\n    json j = json::parse(json_invalid_string);\n    try\n    {\n        int housenumber = j[\"address\"][\"housenumber\"];\n        std::cout << housenumber;\n    }\n    catch (const json::exception& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    [json.exception.type_error.302] (bytes 92-95) type must be number, but is string\n
    The output shows the exception with start/end positions only.\n
    Example 3: using extended diagnostics with positions enabled in exceptions
    #include <iostream>\n\n#define JSON_DIAGNOSTICS 1\n#define JSON_DIAGNOSTIC_POSITIONS 1\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n/* Demonstration of type error exception with diagnostic postions support enabled */\nint main()\n{\n    //Invalid json string - housenumber type must be int instead of string\n    const std::string json_invalid_string = R\"(\n    {\n        \"address\": {\n            \"street\": \"Fake Street\",\n            \"housenumber\": \"1\"\n        }\n    }\n    )\";\n    json j = json::parse(json_invalid_string);\n    try\n    {\n        int housenumber = j[\"address\"][\"housenumber\"];\n        std::cout << housenumber;\n    }\n    catch (const json::exception& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    [json.exception.type_error.302] (/address/housenumber) (bytes 92-95) type must be number, but is string\n
    The output shows the exception with diagnostic path info and start/end positions.\n
    "},{"location":"api/macros/json_diagnostic_positions/#see-also","title":"See also","text":"
    • JSON_Diagnostic_Positions - CMake option to control the macro
    • JSON_DIAGNOSTICS - macro to control extended diagnostics
    "},{"location":"api/macros/json_diagnostic_positions/#version-history","title":"Version history","text":"
    • Added in version 3.12.0.
    "},{"location":"api/macros/json_diagnostics/","title":"JSON_DIAGNOSTICS","text":"
    #define JSON_DIAGNOSTICS /* value */\n

    This macro enables extended diagnostics for exception messages. Possible values are 1 to enable or 0 to disable (default).

    When enabled, exception messages contain a JSON Pointer to the JSON value that triggered the exception. Note that enabling this macro increases the size of every JSON value by one pointer and adds some runtime overhead.

    "},{"location":"api/macros/json_diagnostics/#default-definition","title":"Default definition","text":"

    The default value is 0 (extended diagnostics are switched off).

    #define JSON_DIAGNOSTICS 0\n

    When the macro is not defined, the library will define it to its default value.

    "},{"location":"api/macros/json_diagnostics/#notes","title":"Notes","text":"

    ABI compatibility

    As of version 3.11.0, this macro is no longer required to be defined consistently throughout a codebase to avoid One Definition Rule (ODR) violations, as the value of this macro is encoded in the namespace, resulting in distinct symbol names.

    This allows different parts of a codebase to use different versions or configurations of this library without causing improper behavior.

    Where possible, it is still recommended that all code define this the same way for maximum interoperability.

    CMake option

    Diagnostic messages can also be controlled with the CMake option JSON_Diagnostics (OFF by default) which defines JSON_DIAGNOSTICS accordingly.

    "},{"location":"api/macros/json_diagnostics/#examples","title":"Examples","text":"Example 1: default behavior
    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    json j;\n    j[\"address\"][\"street\"] = \"Fake Street\";\n    j[\"address\"][\"housenumber\"] = \"12\";\n\n    try\n    {\n        int housenumber = j[\"address\"][\"housenumber\"];\n    }\n    catch (const json::exception& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    [json.exception.type_error.302] type must be number, but is string\n

    This exception can be hard to debug if storing the value \"12\" and accessing it is further apart.

    Example 2: extended diagnostic messages
    #include <iostream>\n\n# define JSON_DIAGNOSTICS 1\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    json j;\n    j[\"address\"][\"street\"] = \"Fake Street\";\n    j[\"address\"][\"housenumber\"] = \"12\";\n\n    try\n    {\n        int housenumber = j[\"address\"][\"housenumber\"];\n    }\n    catch (const json::exception& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    [json.exception.type_error.302] (/address/housenumber) type must be number, but is string\n

    Now the exception message contains a JSON Pointer /address/housenumber that indicates which value has the wrong type.

    Example 3: using only diagnostic positions in exceptions
    #include <iostream>\n\n#define JSON_DIAGNOSTIC_POSITIONS 1\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n/* Demonstration of type error exception with diagnostic postions support enabled */\nint main()\n{\n    //Invalid json string - housenumber type must be int instead of string\n    const std::string json_invalid_string = R\"(\n    {\n        \"address\": {\n            \"street\": \"Fake Street\",\n            \"housenumber\": \"1\"\n        }\n    }\n    )\";\n    json j = json::parse(json_invalid_string);\n    try\n    {\n        int housenumber = j[\"address\"][\"housenumber\"];\n        std::cout << housenumber;\n    }\n    catch (const json::exception& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    [json.exception.type_error.302] (bytes 92-95) type must be number, but is string\n
    The output shows the exception with start/end positions only.

    "},{"location":"api/macros/json_diagnostics/#see-also","title":"See also","text":"
    • JSON_Diagnostics - CMake option to control the macro
    • JSON_DIAGNOSTIC_POSITIONS - macro to access positions of elements
    "},{"location":"api/macros/json_diagnostics/#version-history","title":"Version history","text":"
    • Added in version 3.10.0.
    • As of version 3.11.0 the definition is allowed to vary between translation units.
    "},{"location":"api/macros/json_disable_enum_serialization/","title":"JSON_DISABLE_ENUM_SERIALIZATION","text":"
    #define JSON_DISABLE_ENUM_SERIALIZATION /* value */\n

    When defined to 1, default serialization and deserialization functions for enums are excluded and have to be provided by the user, for example, using NLOHMANN_JSON_SERIALIZE_ENUM (see arbitrary type conversions for more details).

    Parsing or serializing an enum will result in a compiler error.

    This works for both unscoped and scoped enums.

    "},{"location":"api/macros/json_disable_enum_serialization/#default-definition","title":"Default definition","text":"

    The default value is 0.

    #define JSON_DISABLE_ENUM_SERIALIZATION 0\n
    "},{"location":"api/macros/json_disable_enum_serialization/#notes","title":"Notes","text":"

    CMake option

    Enum serialization can also be controlled with the CMake option JSON_DisableEnumSerialization (OFF by default) which defines JSON_DISABLE_ENUM_SERIALIZATION accordingly.

    "},{"location":"api/macros/json_disable_enum_serialization/#examples","title":"Examples","text":"Example 1: Disabled behavior

    The code below forces the library not to create default serialization/deserialization functions from_json and to_json, meaning the code below does not compile.

    #define JSON_DISABLE_ENUM_SERIALIZATION 1\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nenum class Choice\n{\n    first,\n    second,\n};\n\nint main()\n{\n    // normally invokes to_json serialization function but with JSON_DISABLE_ENUM_SERIALIZATION defined, it does not\n    const json j = Choice::first; \n\n    // normally invokes from_json parse function but with JSON_DISABLE_ENUM_SERIALIZATION defined, it does not\n    Choice ch = j.template get<Choice>();\n}\n
    Example 2: Serialize enum macro

    The code below forces the library not to create default serialization/deserialization functions from_json and to_json, but uses NLOHMANN_JSON_SERIALIZE_ENUM to parse and serialize the enum.

    #define JSON_DISABLE_ENUM_SERIALIZATION 1\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nenum class Choice\n{\n    first,\n    second,\n};\n\nNLOHMANN_JSON_SERIALIZE_ENUM(Choice,\n{\n    { Choice::first, \"first\" },\n    { Choice::second, \"second\" },\n})\n\nint main()\n{\n    // uses user-defined to_json function defined by macro\n    const json j = Choice::first; \n\n    // uses user-defined from_json function defined by macro\n    Choice ch = j.template get<Choice>();\n}\n
    Example 3: User-defined serialization/deserialization functions

    The code below forces the library not to create default serialization/deserialization functions from_json and to_json, but uses user-defined functions to parse and serialize the enum.

    #define JSON_DISABLE_ENUM_SERIALIZATION 1\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nenum class Choice\n{\n    first,\n    second,\n};\n\nvoid from_json(const json& j, Choice& ch)\n{\n    auto value = j.template get<std::string>();\n    if (value == \"first\")\n    {\n        ch = Choice::first;\n    }\n    else if (value == \"second\")\n    {\n        ch = Choice::second;\n    }\n}\n\nvoid to_json(json& j, const Choice& ch)\n{\n    auto value = j.template get<std::string>();\n    if (value == \"first\")\n    {\n        ch = Choice::first;\n    }\n    else if (value == \"second\")\n    {\n        ch = Choice::second;\n    }\n}\n\nint main()\n{\n    // uses user-defined to_json function\n    const json j = Choice::first; \n\n    // uses user-defined from_json function\n    Choice ch = j.template get<Choice>();\n}\n
    "},{"location":"api/macros/json_disable_enum_serialization/#see-also","title":"See also","text":"
    • JSON_DisableEnumSerialization - CMake option to control the macro
    • NLOHMANN_JSON_SERIALIZE_ENUM - serialize/deserialize an enum
    "},{"location":"api/macros/json_disable_enum_serialization/#version-history","title":"Version history","text":"
    • Added in version 3.11.0.
    "},{"location":"api/macros/json_has_cpp_11/","title":"JSON_HAS_CPP_11, JSON_HAS_CPP_14, JSON_HAS_CPP_17, JSON_HAS_CPP_20","text":"
    #define JSON_HAS_CPP_11\n#define JSON_HAS_CPP_14\n#define JSON_HAS_CPP_17\n#define JSON_HAS_CPP_20\n

    The library targets C++11, but also supports some features introduced in later C++ versions (e.g., std::string_view support for C++17). For these new features, the library implements some preprocessor checks to determine the C++ standard. By defining any of these symbols, the internal check is overridden and the provided C++ version is unconditionally assumed. This can be helpful for compilers that only implement parts of the standard and would be detected incorrectly.

    "},{"location":"api/macros/json_has_cpp_11/#default-definition","title":"Default definition","text":"

    The default value is detected based on preprocessor macros such as __cplusplus, _HAS_CXX17, or _MSVC_LANG.

    "},{"location":"api/macros/json_has_cpp_11/#notes","title":"Notes","text":"
    • JSON_HAS_CPP_11 is always defined.
    • All macros are undefined outside the library.
    "},{"location":"api/macros/json_has_cpp_11/#examples","title":"Examples","text":"Example

    The code below forces the library to use the C++14 standard:

    #define JSON_HAS_CPP_14 1\n#include <nlohmann/json.hpp>\n\n...\n
    "},{"location":"api/macros/json_has_cpp_11/#version-history","title":"Version history","text":"
    • Added in version 3.10.5.
    "},{"location":"api/macros/json_has_filesystem/","title":"JSON_HAS_FILESYSTEM / JSON_HAS_EXPERIMENTAL_FILESYSTEM","text":"
    #define JSON_HAS_FILESYSTEM /* value */\n#define JSON_HAS_EXPERIMENTAL_FILESYSTEM /* value */\n

    When compiling with C++17, the library provides conversions from and to std::filesystem::path. As compiler support for filesystem is limited, the library tries to detect whether <filesystem>/std::filesystem (JSON_HAS_FILESYSTEM) or <experimental/filesystem>/std::experimental::filesystem (JSON_HAS_EXPERIMENTAL_FILESYSTEM) should be used. To override the built-in check, define JSON_HAS_FILESYSTEM or JSON_HAS_EXPERIMENTAL_FILESYSTEM to 1.

    "},{"location":"api/macros/json_has_filesystem/#default-definition","title":"Default definition","text":"

    The default value is detected based on the preprocessor macros __cpp_lib_filesystem, __cpp_lib_experimental_filesystem, __has_include(<filesystem>), or __has_include(<experimental/filesystem>).

    "},{"location":"api/macros/json_has_filesystem/#notes","title":"Notes","text":"
    • Note that older compilers or older versions of libstd++ also require the library stdc++fs to be linked to for filesystem support.
    • Both macros are undefined outside the library.
    "},{"location":"api/macros/json_has_filesystem/#examples","title":"Examples","text":"Example

    The code below forces the library to use the header <experimental/filesystem>.

    #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 1\n#include <nlohmann/json.hpp>\n\n...\n
    "},{"location":"api/macros/json_has_filesystem/#version-history","title":"Version history","text":"
    • Added in version 3.10.5.
    "},{"location":"api/macros/json_has_ranges/","title":"JSON_HAS_RANGES","text":"
    #define JSON_HAS_RANGES /* value */\n

    This macro indicates whether the standard library has any support for ranges. Implies support for concepts. Possible values are 1 when supported or 0 when unsupported.

    "},{"location":"api/macros/json_has_ranges/#default-definition","title":"Default definition","text":"

    The default value is detected based on the preprocessor macro __cpp_lib_ranges.

    When the macro is not defined, the library will define it to its default value.

    "},{"location":"api/macros/json_has_ranges/#examples","title":"Examples","text":"Example

    The code below forces the library to enable support for ranges:

    #define JSON_HAS_RANGES 1\n#include <nlohmann/json.hpp>\n\n...\n
    "},{"location":"api/macros/json_has_ranges/#version-history","title":"Version history","text":"
    • Added in version 3.11.0.
    "},{"location":"api/macros/json_has_static_rtti/","title":"JSON_HAS_STATIC_RTTI","text":"
    #define JSON_HAS_STATIC_RTTI /* value */\n

    This macro indicates whether the standard library has any support for RTTI (run time type information). Possible values are 1 when supported or 0 when unsupported.

    "},{"location":"api/macros/json_has_static_rtti/#default-definition","title":"Default definition","text":"

    The default value is detected based on the preprocessor macro _HAS_STATIC_RTTI.

    When the macro is not defined, the library will define it to its default value.

    "},{"location":"api/macros/json_has_static_rtti/#examples","title":"Examples","text":"Example

    The code below forces the library to enable support for libraries with RTTI dependence:

    #define JSON_HAS_STATIC_RTTI 1\n#include <nlohmann/json.hpp>\n\n...\n
    "},{"location":"api/macros/json_has_static_rtti/#version-history","title":"Version history","text":"
    • Added in version 3.11.3.
    "},{"location":"api/macros/json_has_three_way_comparison/","title":"JSON_HAS_THREE_WAY_COMPARISON","text":"
    #define JSON_HAS_THREE_WAY_COMPARISON /* value */\n

    This macro indicates whether the compiler and standard library support 3-way comparison. Possible values are 1 when supported or 0 when unsupported.

    "},{"location":"api/macros/json_has_three_way_comparison/#default-definition","title":"Default definition","text":"

    The default value is detected based on the preprocessor macros __cpp_impl_three_way_comparison and __cpp_lib_three_way_comparison.

    When the macro is not defined, the library will define it to its default value.

    "},{"location":"api/macros/json_has_three_way_comparison/#examples","title":"Examples","text":"Example

    The code below forces the library to use 3-way comparison:

    #define JSON_HAS_THREE_WAY_COMPARISON 1\n#include <nlohmann/json.hpp>\n\n...\n
    "},{"location":"api/macros/json_has_three_way_comparison/#version-history","title":"Version history","text":"
    • Added in version 3.11.0.
    "},{"location":"api/macros/json_no_io/","title":"JSON_NO_IO","text":"
    #define JSON_NO_IO\n

    When defined, headers <cstdio>, <ios>, <iosfwd>, <istream>, and <ostream> are not included and parse functions relying on these headers are excluded. This is relevant for environments where these I/O functions are disallowed for security reasons (e.g., Intel Software Guard Extensions (SGX)).

    "},{"location":"api/macros/json_no_io/#default-definition","title":"Default definition","text":"

    By default, JSON_NO_IO is not defined.

    #undef JSON_NO_IO\n
    "},{"location":"api/macros/json_no_io/#examples","title":"Examples","text":"Example

    The code below forces the library not to use the headers <cstdio>, <ios>, <iosfwd>, <istream>, and <ostream>.

    #define JSON_NO_IO 1\n#include <nlohmann/json.hpp>\n\n...\n
    "},{"location":"api/macros/json_no_io/#version-history","title":"Version history","text":"
    • Added in version 3.10.0.
    "},{"location":"api/macros/json_noexception/","title":"JSON_NOEXCEPTION","text":"
    #define JSON_NOEXCEPTION\n

    Exceptions can be switched off by defining the symbol JSON_NOEXCEPTION. When defining JSON_NOEXCEPTION, try is replaced by if (true), catch is replaced by if (false), and throw is replaced by std::abort().

    The same effect is achieved by setting the compiler flag -fno-exceptions.

    "},{"location":"api/macros/json_noexception/#default-definition","title":"Default definition","text":"

    By default, the macro is not defined.

    #undef JSON_NOEXCEPTION\n
    "},{"location":"api/macros/json_noexception/#notes","title":"Notes","text":"

    The explanatory what() string of exceptions is not available for MSVC if exceptions are disabled, see #2824.

    "},{"location":"api/macros/json_noexception/#examples","title":"Examples","text":"Example

    The code below switches off exceptions in the library.

    #define JSON_NOEXCEPTION 1\n#include <nlohmann/json.hpp>\n\n...\n
    "},{"location":"api/macros/json_noexception/#see-also","title":"See also","text":"
    • Switch off exceptions for more information how to switch off exceptions
    "},{"location":"api/macros/json_noexception/#version-history","title":"Version history","text":"

    Added in version 2.1.0.

    "},{"location":"api/macros/json_skip_library_version_check/","title":"JSON_SKIP_LIBRARY_VERSION_CHECK","text":"
    #define JSON_SKIP_LIBRARY_VERSION_CHECK\n

    When defined, the library will not create a compiler warning when a different version of the library was already included.

    "},{"location":"api/macros/json_skip_library_version_check/#default-definition","title":"Default definition","text":"

    By default, the macro is not defined.

    #undef JSON_SKIP_LIBRARY_VERSION_CHECK\n
    "},{"location":"api/macros/json_skip_library_version_check/#notes","title":"Notes","text":"

    ABI compatibility

    Mixing different library versions in the same code can be a problem as the different versions may not be ABI compatible.

    "},{"location":"api/macros/json_skip_library_version_check/#examples","title":"Examples","text":"

    Example

    The following warning will be shown in case a different version of the library was already included:

    Already included a different version of the library!\n
    "},{"location":"api/macros/json_skip_library_version_check/#version-history","title":"Version history","text":"

    Added in version 3.11.0.

    "},{"location":"api/macros/json_skip_unsupported_compiler_check/","title":"JSON_SKIP_UNSUPPORTED_COMPILER_CHECK","text":"
    #define JSON_SKIP_UNSUPPORTED_COMPILER_CHECK\n

    When defined, the library will not create a compile error when a known unsupported compiler is detected. This allows to use the library with compilers that do not fully support C++11 and may only work if unsupported features are not used.

    "},{"location":"api/macros/json_skip_unsupported_compiler_check/#default-definition","title":"Default definition","text":"

    By default, the macro is not defined.

    #undef JSON_SKIP_UNSUPPORTED_COMPILER_CHECK\n
    "},{"location":"api/macros/json_skip_unsupported_compiler_check/#examples","title":"Examples","text":"Example

    The code below switches off the check whether the compiler is supported.

    #define JSON_SKIP_UNSUPPORTED_COMPILER_CHECK 1\n#include <nlohmann/json.hpp>\n\n...\n
    "},{"location":"api/macros/json_skip_unsupported_compiler_check/#version-history","title":"Version history","text":"

    Added in version 3.2.0.

    "},{"location":"api/macros/json_throw_user/","title":"JSON_CATCH_USER, JSON_THROW_USER, JSON_TRY_USER","text":"
    // (1)\n#define JSON_CATCH_USER(exception) /* value */\n// (2)\n#define JSON_THROW_USER(exception) /* value */\n// (3)\n#define JSON_TRY_USER /* value */\n

    Controls how exceptions are handled by the library.

    1. This macro overrides catch calls inside the library. The argument is the type of the exception to catch. As of version 3.8.0, the library only catches std::out_of_range exceptions internally to rethrow them as json::out_of_range exceptions. The macro is always followed by a scope.
    2. This macro overrides throw calls inside the library. The argument is the exception to be thrown. Note that JSON_THROW_USER should leave the current scope (e.g., by throwing or aborting), as continuing after it may yield undefined behavior.
    3. This macro overrides try calls inside the library. It has no arguments and is always followed by a scope.
    "},{"location":"api/macros/json_throw_user/#parameters","title":"Parameters","text":"exception (in) an exception type"},{"location":"api/macros/json_throw_user/#default-definition","title":"Default definition","text":"

    By default, the macros map to their respective C++ keywords:

    #define JSON_CATCH_USER(exception) catch(exception)\n#define JSON_THROW_USER(exception) throw exception\n#define JSON_TRY_USER              try\n

    When exceptions are switched off, the try block is executed unconditionally, and throwing exceptions is replaced by calling std::abort to make reaching the throw branch abort the process.

    #define JSON_THROW_USER(exception) std::abort()\n#define JSON_TRY_USER              if (true)\n#define JSON_CATCH_USER(exception) if (false)\n
    "},{"location":"api/macros/json_throw_user/#examples","title":"Examples","text":"Example

    The code below switches off exceptions and creates a log entry with a detailed error message in case of errors.

    #include <iostream>\n\n#define JSON_TRY_USER if(true)\n#define JSON_CATCH_USER(exception) if(false)\n#define JSON_THROW_USER(exception)                           \\\n    {std::clog << \"Error in \" << __FILE__ << \":\" << __LINE__ \\\n               << \" (function \" << __FUNCTION__ << \") - \"    \\\n               << (exception).what() << std::endl;           \\\n     std::abort();}\n\n#include <nlohmann/json.hpp>\n
    "},{"location":"api/macros/json_throw_user/#see-also","title":"See also","text":"
    • Switch off exceptions for more information how to switch off exceptions
    • JSON_NOEXCEPTION - switch off exceptions
    "},{"location":"api/macros/json_throw_user/#version-history","title":"Version history","text":"
    • Added in version 3.1.0.
    "},{"location":"api/macros/json_use_global_udls/","title":"JSON_USE_GLOBAL_UDLS","text":"
    #define JSON_USE_GLOBAL_UDLS /* value */\n

    When defined to 1, the user-defined string literals (UDLs) are placed into the global namespace instead of nlohmann::literals::json_literals.

    "},{"location":"api/macros/json_use_global_udls/#default-definition","title":"Default definition","text":"

    The default value is 1.

    #define JSON_USE_GLOBAL_UDLS 1\n

    When the macro is not defined, the library will define it to its default value.

    "},{"location":"api/macros/json_use_global_udls/#notes","title":"Notes","text":"

    Future behavior change

    The user-defined string literals will be removed from the global namespace in the next major release of the library.

    To prepare existing code, define JSON_USE_GLOBAL_UDLS to 0 and bring the string literals into scope where needed. Refer to any of the string literals for details.

    CMake option

    The placement of user-defined string literals can also be controlled with the CMake option JSON_GlobalUDLs (ON by default) which defines JSON_USE_GLOBAL_UDLS accordingly.

    "},{"location":"api/macros/json_use_global_udls/#examples","title":"Examples","text":"Example 1: Default behavior

    The code below shows the default behavior using the _json UDL.

    #include <nlohmann/json.hpp>\n\n#include <iostream>\n\nint main()\n{\n    auto j = \"42\"_json;\n\n    std::cout << j << std::endl;\n}\n

    Output:

    42\n
    Example 2: Namespaced UDLs

    The code below shows how UDLs need to be brought into scope before using _json when JSON_USE_GLOBAL_UDLS is defined to 0.

    #define JSON_USE_GLOBAL_UDLS 0\n#include <nlohmann/json.hpp>\n\n#include <iostream>\n\nint main()\n{\n    // auto j = \"42\"_json; // This line would fail to compile,\n                           // because the UDLs are not in the global namespace\n\n    // Bring the UDLs into scope\n    using namespace nlohmann::json_literals;\n\n    auto j = \"42\"_json;\n\n    std::cout << j << std::endl;\n}\n

    Output:

    42\n
    "},{"location":"api/macros/json_use_global_udls/#see-also","title":"See also","text":"
    • operator\"\"_json
    • operator\"\"_json_pointer
    • JSON_GlobalUDLs - CMake option to control the macro
    "},{"location":"api/macros/json_use_global_udls/#version-history","title":"Version history","text":"
    • Added in version 3.11.0.
    "},{"location":"api/macros/json_use_implicit_conversions/","title":"JSON_USE_IMPLICIT_CONVERSIONS","text":"
    #define JSON_USE_IMPLICIT_CONVERSIONS /* value */\n

    When defined to 0, implicit conversions are switched off. By default, implicit conversions are switched on. The value directly affects operator ValueType.

    "},{"location":"api/macros/json_use_implicit_conversions/#default-definition","title":"Default definition","text":"

    By default, implicit conversions are enabled.

    #define JSON_USE_IMPLICIT_CONVERSIONS 1\n
    "},{"location":"api/macros/json_use_implicit_conversions/#notes","title":"Notes","text":"

    Future behavior change

    Implicit conversions will be switched off by default in the next major release of the library.

    You can prepare existing code by already defining JSON_USE_IMPLICIT_CONVERSIONS to 0 and replace any implicit conversions with calls to get.

    CMake option

    Implicit conversions can also be controlled with the CMake option JSON_ImplicitConversions (ON by default) which defines JSON_USE_IMPLICIT_CONVERSIONS accordingly.

    "},{"location":"api/macros/json_use_implicit_conversions/#examples","title":"Examples","text":"Example

    This is an example for an implicit conversion:

    json j = \"Hello, world!\";\nstd::string s = j;\n

    When JSON_USE_IMPLICIT_CONVERSIONS is defined to 0, the code above does no longer compile. Instead, it must be written like this:

    json j = \"Hello, world!\";\nauto s = j.template get<std::string>();\n
    "},{"location":"api/macros/json_use_implicit_conversions/#see-also","title":"See also","text":"
    • operator ValueType - get a value (implicit)
    • get - get a value (explicit)
    • JSON_ImplicitConversions - CMake option to control the macro
    "},{"location":"api/macros/json_use_implicit_conversions/#version-history","title":"Version history","text":"
    • Added in version 3.9.0.
    "},{"location":"api/macros/json_use_legacy_discarded_value_comparison/","title":"JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON","text":"
    #define JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON /* value */\n

    This macro enables the (incorrect) legacy comparison behavior of discarded JSON values. Possible values are 1 to enable or 0 to disable (default).

    When enabled, comparisons involving at least one discarded JSON value yield results as follows:

    Operator Result == false != true < false <= true >= true > false

    Otherwise, comparisons involving at least one discarded JSON value always yield false.

    "},{"location":"api/macros/json_use_legacy_discarded_value_comparison/#default-definition","title":"Default definition","text":"

    The default value is 0.

    #define JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON 0\n

    When the macro is not defined, the library will define it to its default value.

    "},{"location":"api/macros/json_use_legacy_discarded_value_comparison/#notes","title":"Notes","text":"

    Inconsistent behavior in C++20 and beyond

    When targeting C++20 or above, enabling the legacy comparison behavior is strongly discouraged.

    • The 3-way comparison operator (<=>) will always give the correct result (std::partial_ordering::unordered) regardless of the value of JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON.
    • Overloads for the equality and relational operators emulate the legacy behavior.

    Code outside your control may use either 3-way comparison or the equality and relational operators, resulting in inconsistent and unpredictable behavior.

    See operator<=> for more information on 3-way comparison.

    Deprecation

    The legacy comparison behavior is deprecated and may be removed in a future major version release.

    New code should not depend on it and existing code should try to remove or rewrite expressions relying on it.

    CMake option

    Legacy comparison can also be controlled with the CMake option JSON_LegacyDiscardedValueComparison (OFF by default) which defines JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON accordingly.

    "},{"location":"api/macros/json_use_legacy_discarded_value_comparison/#examples","title":"Examples","text":"Example

    The code below switches on the legacy discarded value comparison behavior in the library.

    #define JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON 1\n#include <nlohmann/json.hpp>\n\n...\n
    "},{"location":"api/macros/json_use_legacy_discarded_value_comparison/#see-also","title":"See also","text":"
    • JSON_LegacyDiscardedValueComparison - CMake option to control the macro
    "},{"location":"api/macros/json_use_legacy_discarded_value_comparison/#version-history","title":"Version history","text":"
    • Added in version 3.11.0.
    "},{"location":"api/macros/nlohmann_define_derived_type/","title":"NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE, NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE","text":"NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE, NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE
    // (1)\n#define NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE(type, base_type, member...)\n// (2)\n#define NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT(type, base_type, member...)\n// (3)\n#define NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE(type, base_type, member...)\n\n// (4)\n#define NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE(type, base_type, member...)\n// (5)\n#define NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT(type, base_type, member...)\n// (6)\n#define NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE(type, base_type, member...)\n

    These macros can be used to simplify the serialization/deserialization of derived types if you want to use a JSON object as serialization and want to use the member variable names as object keys in that object.

    • Macros 1, 2 and 3 are to be defined inside the class/struct to create code for. Like NLOHMANN_DEFINE_TYPE_INTRUSIVE, they can access private members.
    • Macros 4, 5 and 6 are to be defined outside the class/struct to create code for, but inside its namespace. Like NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE, they cannot access private members.

    The first parameter is the name of the derived class/struct, the second parameter is the name of the base class/struct and all remaining parameters name the members. The base type must be already serializable/deserializable.

    • Macros 1 and 4 will use at during deserialization and will throw out_of_range.403 if a key is missing in the JSON object.
    • Macros 2 and 5 will use value during deserialization and fall back to the default value for the respective type of the member variable if a key in the JSON object is missing. The generated from_json() function default constructs an object and uses its values as the defaults when calling the value function.

    Summary:

    Need access to private members Need only de-serialization Allow missing values when de-serializing macro NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE"},{"location":"api/macros/nlohmann_define_derived_type/#parameters","title":"Parameters","text":"type (in) name of the type (class, struct) to serialize/deserialize base_type (in) name of the base type (class, struct) type is derived from member (in) name of the member variable to serialize/deserialize; up to 64 members can be given as comma-separated list"},{"location":"api/macros/nlohmann_define_derived_type/#default-definition","title":"Default definition","text":"

    Macros 1 and 2 add two friend functions to the class which take care of the serialization and deserialization:

    template<typename BasicJsonType>\nfriend void to_json(BasicJsonType&, const type&);\ntemplate<typename BasicJsonType>\nfriend void from_json(const BasicJsonType&, type&);\n

    Macros 4 and 5 add two functions to the namespace which take care of the serialization and deserialization:

    template<typename BasicJsonType>\nvoid to_json(BasicJsonType&, const type&);\ntemplate<typename BasicJsonType>\nvoid from_json(const BasicJsonType&, type&);\n

    Macros 3 and 6 add one function to the namespace which take care of the serialization only:

    template<typename BasicJsonType>\nvoid to_json(BasicJsonType&, const type&);\n

    In first two cases, they call the to_json/from_json functions of the base type before serializing/deserializing the members of the derived type:

    class A { /* ... */ };\nclass B : public A { /* ... */ };\n\ntemplate<typename BasicJsonType>\nvoid to_json(BasicJsonType& j, const B& b) {\n    nlohmann::to_json(j, static_cast<const A&>(b));\n    // ...\n}\n\ntemplate<typename BasicJsonType>\nvoid from_json(const BasicJsonType& j, B& b) {\n    nlohmann::from_json(j, static_cast<A&>(b));\n    // ...\n}\n

    In the third case, only to_json will be called:

    class A { /* ... */ };\nclass B : public A { /* ... */ };\n\ntemplate<typename BasicJsonType>\nvoid to_json(BasicJsonType& j, const B& b) {\n    nlohmann::to_json(j, static_cast<const A&>(b));\n    // ...\n}\n
    "},{"location":"api/macros/nlohmann_define_derived_type/#notes","title":"Notes","text":"

    Prerequisites

    • Macros 1, 2, and 3 have the same prerequisites of NLOHMANN_DEFINE_TYPE_INTRUSIVE.
    • Macros 4, 5, and 6 have the same prerequisites of NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE.
    • Serialization/deserialization of base types must be defined.

    Implementation limits

    See Implementation limits for NLOHMANN_DEFINE_TYPE_INTRUSIVE and NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE, respectively.

    "},{"location":"api/macros/nlohmann_define_derived_type/#examples","title":"Examples","text":"NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE

    Consider the following complete example:

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing nlohmann::json;\n\nclass A\n{\n  private:\n    double Aa = 0.0;\n    double Ab = 0.0;\n\n  public:\n    A() = default;\n    A(double a, double b) : Aa(a), Ab(b) {}\n    NLOHMANN_DEFINE_TYPE_INTRUSIVE(A, Aa, Ab)\n};\n\nclass B : public A\n{\n  private:\n    int Ba = 0;\n    int Bb = 0;\n\n  public:\n    B() = default;\n    B(int a, int b, double aa, double ab) : A(aa, ab), Ba(a), Bb(b) {}\n    NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE(B, A, Ba, Bb)\n};\n\nint main()\n{\n    B example(23, 42, 3.142, 1.777);\n    json example_json = example;\n\n    std::cout << std::setw(4) << example_json << std::endl;\n}\n

    Output:

    {\n    \"Aa\": 3.142,\n    \"Ab\": 1.777,\n    \"Ba\": 23,\n    \"Bb\": 42\n}\n

    Notes:

    • A and B are default-constructible. This is a requirement for using the macro.
    • A has private members and is not a derived class. Hence, macro NLOHMANN_DEFINE_TYPE_INTRUSIVE is used.
    • As B is a derived class, NLOHMANN_DEFINE_TYPE_INTRUSIVE is not applicable, but NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE must be used.
    • The macro NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE is used inside the class use as NLOHMANN_DEFINE_TYPE_INTRUSIVE.
    "},{"location":"api/macros/nlohmann_define_derived_type/#see-also","title":"See also","text":"
    • NLOHMANN_DEFINE_TYPE_INTRUSIVE / NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT / NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE for similar macros that can be defined inside a non-derived type.
    • NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE / NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT / NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE for similar macros that can be defined outside a non-derived type.
    • Arbitrary Type Conversions for an overview.
    "},{"location":"api/macros/nlohmann_define_derived_type/#version-history","title":"Version history","text":"
    1. Added in version 3.11.x.
    2. Added in version 3.11.x.
    3. Added in version 3.11.x.
    4. Added in version 3.11.x.
    5. Added in version 3.11.x.
    6. Added in version 3.11.x.
    "},{"location":"api/macros/nlohmann_define_type_intrusive/","title":"NLOHMANN_DEFINE_TYPE_INTRUSIVE, NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE","text":"
    #define NLOHMANN_DEFINE_TYPE_INTRUSIVE(type, member...)              // (1)\n#define NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT(type, member...) // (2)\n#define NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE(type, member...) // (3)\n

    These macros can be used to simplify the serialization/deserialization of types if you want to use a JSON object as serialization and want to use the member variable names as object keys in that object. The macro is to be defined inside the class/struct to create code for. Unlike NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE, it can access private members. The first parameter is the name of the class/struct, and all remaining parameters name the members.

    1. Will use at during deserialization and will throw out_of_range.403 if a key is missing in the JSON object.
    2. Will use value during deserialization and fall back to the default value for the respective type of the member variable if a key in the JSON object is missing. The generated from_json() function default constructs an object and uses its values as the defaults when calling the value function.
    3. Only defines the serialization. Useful in cases when the type does not have a default constructor and only serialization in required.

    Summary:

    Need access to private members Need only de-serialization Allow missing values when de-serializing macro NLOHMANN_DEFINE_TYPE_INTRUSIVE NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE"},{"location":"api/macros/nlohmann_define_type_intrusive/#parameters","title":"Parameters","text":"type (in) name of the type (class, struct) to serialize/deserialize member (in) name of the member variable to serialize/deserialize; up to 64 members can be given as comma-separated list"},{"location":"api/macros/nlohmann_define_type_intrusive/#default-definition","title":"Default definition","text":"

    The macros add two friend functions to the class which take care of the serialization and deserialization:

    template<typename BasicJsonType>\nfriend void to_json(BasicJsonType&, const type&);\ntemplate<typename BasicJsonType>\nfriend void from_json(const BasicJsonType&, type&); // except (3)\n

    See examples below for the concrete generated code.

    "},{"location":"api/macros/nlohmann_define_type_intrusive/#notes","title":"Notes","text":"

    Prerequisites

    1. The type type must be default constructible (except (3)). See How can I use get() for non-default constructible/non-copyable types? for how to overcome this limitation.
    2. The macro must be used inside the type (class/struct).

    Implementation limits

    • The current implementation is limited to at most 64 member variables. If you want to serialize/deserialize types with more than 64 member variables, you need to define the to_json/from_json functions manually.
    "},{"location":"api/macros/nlohmann_define_type_intrusive/#examples","title":"Examples","text":"Example (1): NLOHMANN_DEFINE_TYPE_INTRUSIVE

    Consider the following complete example:

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nnamespace ns\n{\nclass person\n{\n  private:\n    std::string name = \"John Doe\";\n    std::string address = \"123 Fake St\";\n    int age = -1;\n\n  public:\n    person() = default;\n    person(std::string name_, std::string address_, int age_)\n        : name(std::move(name_)), address(std::move(address_)), age(age_)\n    {}\n\n    NLOHMANN_DEFINE_TYPE_INTRUSIVE(person, name, address, age)\n};\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    // serialization: person -> json\n    json j = p;\n    std::cout << \"serialization: \" << j << std::endl;\n\n    // deserialization: json -> person\n    json j2 = R\"({\"address\": \"742 Evergreen Terrace\", \"age\": 40, \"name\": \"Homer Simpson\"})\"_json;\n    auto p2 = j2.template get<ns::person>();\n\n    // incomplete deserialization:\n    json j3 = R\"({\"address\": \"742 Evergreen Terrace\", \"name\": \"Maggie Simpson\"})\"_json;\n    try\n    {\n        auto p3 = j3.template get<ns::person>();\n    }\n    catch (const json::exception& e)\n    {\n        std::cout << \"deserialization failed: \" << e.what() << std::endl;\n    }\n}\n

    Output:

    serialization: {\"address\":\"744 Evergreen Terrace\",\"age\":60,\"name\":\"Ned Flanders\"}\ndeserialization failed: [json.exception.out_of_range.403] key 'age' not found\n

    Notes:

    • ns::person is default-constructible. This is a requirement for using the macro.
    • ns::person has private member variables. This makes NLOHMANN_DEFINE_TYPE_INTRUSIVE applicable, but not NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE.
    • The macro NLOHMANN_DEFINE_TYPE_INTRUSIVE is used inside the class.
    • A missing key \"age\" in the deserialization yields an exception. To fall back to the default value, NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT can be used.

    The macro is equivalent to:

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nnamespace ns\n{\nclass person\n{\n  private:\n    std::string name = \"John Doe\";\n    std::string address = \"123 Fake St\";\n    int age = -1;\n\n  public:\n    person() = default;\n    person(std::string name_, std::string address_, int age_)\n        : name(std::move(name_)), address(std::move(address_)), age(age_)\n    {}\n\n    template<typename BasicJsonType>\n    friend void to_json(BasicJsonType& nlohmann_json_j, const person& nlohmann_json_t)\n    {\n        nlohmann_json_j[\"name\"] = nlohmann_json_t.name;\n        nlohmann_json_j[\"address\"] = nlohmann_json_t.address;\n        nlohmann_json_j[\"age\"] = nlohmann_json_t.age;\n    }\n\n    template<typename BasicJsonType>\n    friend void from_json(const BasicJsonType& nlohmann_json_j, person& nlohmann_json_t)\n    {\n        nlohmann_json_t.name = nlohmann_json_j.at(\"name\");\n        nlohmann_json_t.address = nlohmann_json_j.at(\"address\");\n        nlohmann_json_t.age = nlohmann_json_j.at(\"age\");\n    }\n};\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    // serialization: person -> json\n    json j = p;\n    std::cout << \"serialization: \" << j << std::endl;\n\n    // deserialization: json -> person\n    json j2 = R\"({\"address\": \"742 Evergreen Terrace\", \"age\": 40, \"name\": \"Homer Simpson\"})\"_json;\n    auto p2 = j2.template get<ns::person>();\n\n    // incomplete deserialization:\n    json j3 = R\"({\"address\": \"742 Evergreen Terrace\", \"name\": \"Maggie Simpson\"})\"_json;\n    try\n    {\n        auto p3 = j3.template get<ns::person>();\n    }\n    catch (const json::exception& e)\n    {\n        std::cout << \"deserialization failed: \" << e.what() << std::endl;\n    }\n}\n
    Example (2): NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT

    Consider the following complete example:

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nnamespace ns\n{\nclass person\n{\n  private:\n    std::string name = \"John Doe\";\n    std::string address = \"123 Fake St\";\n    int age = -1;\n\n  public:\n    person() = default;\n    person(std::string name_, std::string address_, int age_)\n        : name(std::move(name_)), address(std::move(address_)), age(age_)\n    {}\n\n    NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT(person, name, address, age)\n};\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    // serialization: person -> json\n    json j = p;\n    std::cout << \"serialization: \" << j << std::endl;\n\n    // deserialization: json -> person\n    json j2 = R\"({\"address\": \"742 Evergreen Terrace\", \"age\": 40, \"name\": \"Homer Simpson\"})\"_json;\n    auto p2 = j2.template get<ns::person>();\n\n    // incomplete deserialization:\n    json j3 = R\"({\"address\": \"742 Evergreen Terrace\", \"name\": \"Maggie Simpson\"})\"_json;\n    auto p3 = j3.template get<ns::person>();\n    std::cout << \"roundtrip: \" << json(p3) << std::endl;\n}\n

    Output:

    serialization: {\"address\":\"744 Evergreen Terrace\",\"age\":60,\"name\":\"Ned Flanders\"}\nroundtrip: {\"address\":\"742 Evergreen Terrace\",\"age\":-1,\"name\":\"Maggie Simpson\"}\n

    Notes:

    • ns::person is default-constructible. This is a requirement for using the macro.
    • ns::person has private member variables. This makes NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT applicable, but not NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT.
    • The macro NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT is used inside the class.
    • A missing key \"age\" in the deserialization does not yield an exception. Instead, the default value -1 is used.

    The macro is equivalent to:

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nnamespace ns\n{\nclass person\n{\n  private:\n    std::string name = \"John Doe\";\n    std::string address = \"123 Fake St\";\n    int age = -1;\n\n  public:\n    person() = default;\n    person(std::string name_, std::string address_, int age_)\n        : name(std::move(name_)), address(std::move(address_)), age(age_)\n    {}\n\n    template<typename BasicJsonType>\n    friend void to_json(BasicJsonType& nlohmann_json_j, const person& nlohmann_json_t)\n    {\n        nlohmann_json_j[\"name\"] = nlohmann_json_t.name;\n        nlohmann_json_j[\"address\"] = nlohmann_json_t.address;\n        nlohmann_json_j[\"age\"] = nlohmann_json_t.age;\n    }\n\n    template<typename BasicJsonType>\n    friend void from_json(const BasicJsonType& nlohmann_json_j, person& nlohmann_json_t)\n    {\n        person nlohmann_json_default_obj;\n        nlohmann_json_t.name = nlohmann_json_j.value(\"name\", nlohmann_json_default_obj.name);\n        nlohmann_json_t.address = nlohmann_json_j.value(\"address\", nlohmann_json_default_obj.address);\n        nlohmann_json_t.age = nlohmann_json_j.value(\"age\", nlohmann_json_default_obj.age);\n    }\n};\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    // serialization: person -> json\n    json j = p;\n    std::cout << \"serialization: \" << j << std::endl;\n\n    // deserialization: json -> person\n    json j2 = R\"({\"address\": \"742 Evergreen Terrace\", \"age\": 40, \"name\": \"Homer Simpson\"})\"_json;\n    auto p2 = j2.template get<ns::person>();\n\n    // incomplete deserialization:\n    json j3 = R\"({\"address\": \"742 Evergreen Terrace\", \"name\": \"Maggie Simpson\"})\"_json;\n    auto p3 = j3.template get<ns::person>();\n    std::cout << \"roundtrip: \" << json(p3) << std::endl;\n}\n

    Note how a default-initialized person object is used in the from_json to fill missing values.

    Example (3): NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE

    Consider the following complete example:

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nnamespace ns\n{\nclass person\n{\n  private:\n    std::string name = \"John Doe\";\n    std::string address = \"123 Fake St\";\n    int age = -1;\n\n  public:\n    // No default constructor\n    person(std::string name_, std::string address_, int age_)\n        : name(std::move(name_)), address(std::move(address_)), age(age_)\n    {}\n\n    NLOHMANN_DEFINE_TYPE_INTRUSIVE(person, name, address, age)\n};\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    // serialization: person -> json\n    json j = p;\n    std::cout << \"serialization: \" << j << std::endl;\n}\n

    Output:

    serialization: {\"address\":\"744 Evergreen Terrace\",\"age\":60,\"name\":\"Ned Flanders\"}\n

    Notes:

    • ns::person is non-default-constructible. This allows this macro to be used instead of NLOHMANN_DEFINE_TYPE_INTRUSIVE and NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT.
    • ns::person has private member variables. This makes NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE applicable, but not NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE.
    • The macro NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE is used inside the class.

    The macro is equivalent to:

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nnamespace ns\n{\nclass person\n{\n  private:\n    std::string name = \"John Doe\";\n    std::string address = \"123 Fake St\";\n    int age = -1;\n\n  public:\n    // No default constructor\n    person(std::string name_, std::string address_, int age_)\n        : name(std::move(name_)), address(std::move(address_)), age(age_)\n    {}\n\n    template<typename BasicJsonType>\n    friend void to_json(BasicJsonType& nlohmann_json_j, const person& nlohmann_json_t)\n    {\n        nlohmann_json_j[\"name\"] = nlohmann_json_t.name;\n        nlohmann_json_j[\"address\"] = nlohmann_json_t.address;\n        nlohmann_json_j[\"age\"] = nlohmann_json_t.age;\n    }\n};\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    // serialization: person -> json\n    json j = p;\n    std::cout << \"serialization: \" << j << std::endl;\n}\n
    "},{"location":"api/macros/nlohmann_define_type_intrusive/#see-also","title":"See also","text":"
    • NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE, NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE for a similar macro that can be defined outside the type.
    • NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE, NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE for similar macros for derived types
    • Arbitrary Type Conversions for an overview.
    "},{"location":"api/macros/nlohmann_define_type_intrusive/#version-history","title":"Version history","text":"
    1. Added in version 3.9.0.
    2. Added in version 3.11.0.
    3. Added in version 3.11.3.
    "},{"location":"api/macros/nlohmann_define_type_non_intrusive/","title":"NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE, NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE","text":"
    #define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(type, member...)              // (1)\n#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT(type, member...) // (2)\n#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE(type, member...) // (3)\n

    These macros can be used to simplify the serialization/deserialization of types if you want to use a JSON object as serialization and want to use the member variable names as object keys in that object. The macro is to be defined outside the class/struct to create code for, but inside its namespace. Unlike NLOHMANN_DEFINE_TYPE_INTRUSIVE, it cannot access private members. The first parameter is the name of the class/struct, and all remaining parameters name the members.

    1. Will use at during deserialization and will throw out_of_range.403 if a key is missing in the JSON object.
    2. Will use value during deserialization and fall back to the default value for the respective type of the member variable if a key in the JSON object is missing. The generated from_json() function default constructs an object and uses its values as the defaults when calling the value function.
    3. Only defines the serialization. Useful in cases when the type does not have a default constructor and only serialization in required.

    Summary:

    Need access to private members Need only de-serialization Allow missing values when de-serializing macro NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE"},{"location":"api/macros/nlohmann_define_type_non_intrusive/#parameters","title":"Parameters","text":"type (in) name of the type (class, struct) to serialize/deserialize member (in) name of the (public) member variable to serialize/deserialize; up to 64 members can be given as comma-separated list"},{"location":"api/macros/nlohmann_define_type_non_intrusive/#default-definition","title":"Default definition","text":"

    The macros add two functions to the namespace which take care of the serialization and deserialization:

    template<typename BasicJsonType>\nvoid to_json(BasicJsonType&, const type&);\ntemplate<typename BasicJsonType>\nvoid from_json(const BasicJsonType&, type&); // except (3)\n

    See examples below for the concrete generated code.

    "},{"location":"api/macros/nlohmann_define_type_non_intrusive/#notes","title":"Notes","text":"

    Prerequisites

    1. The type type must be default constructible (except (3). See How can I use get() for non-default constructible/non-copyable types? for how to overcome this limitation.
    2. The macro must be used outside the type (class/struct).
    3. The passed members must be public.

    Implementation limits

    • The current implementation is limited to at most 64 member variables. If you want to serialize/deserialize types with more than 64 member variables, you need to define the to_json/from_json functions manually.
    "},{"location":"api/macros/nlohmann_define_type_non_intrusive/#examples","title":"Examples","text":"Example (1): NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE

    Consider the following complete example:

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nnamespace ns\n{\nstruct person\n{\n    std::string name;\n    std::string address;\n    int age;\n};\n\nNLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(person, name, address, age)\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    // serialization: person -> json\n    json j = p;\n    std::cout << \"serialization: \" << j << std::endl;\n\n    // deserialization: json -> person\n    json j2 = R\"({\"address\": \"742 Evergreen Terrace\", \"age\": 40, \"name\": \"Homer Simpson\"})\"_json;\n    auto p2 = j2.template get<ns::person>();\n\n    // incomplete deserialization:\n    json j3 = R\"({\"address\": \"742 Evergreen Terrace\", \"name\": \"Maggie Simpson\"})\"_json;\n    try\n    {\n        auto p3 = j3.template get<ns::person>();\n    }\n    catch (const json::exception& e)\n    {\n        std::cout << \"deserialization failed: \" << e.what() << std::endl;\n    }\n}\n

    Output:

    serialization: {\"address\":\"744 Evergreen Terrace\",\"age\":60,\"name\":\"Ned Flanders\"}\ndeserialization failed: [json.exception.out_of_range.403] key 'age' not found\n

    Notes:

    • ns::person is default-constructible. This is a requirement for using the macro.
    • ns::person has only public member variables. This makes NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE applicable.
    • The macro NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE is used outside the class, but inside its namespace ns.
    • A missing key \"age\" in the deserialization yields an exception. To fall back to the default value, NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT can be used.

    The macro is equivalent to:

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nnamespace ns\n{\nstruct person\n{\n    std::string name;\n    std::string address;\n    int age;\n};\n\ntemplate<typename BasicJsonType>\nvoid to_json(BasicJsonType& nlohmann_json_j, const person& nlohmann_json_t)\n{\n    nlohmann_json_j[\"name\"] = nlohmann_json_t.name;\n    nlohmann_json_j[\"address\"] = nlohmann_json_t.address;\n    nlohmann_json_j[\"age\"] = nlohmann_json_t.age;\n}\n\ntemplate<typename BasicJsonType>\nvoid from_json(const BasicJsonType& nlohmann_json_j, person& nlohmann_json_t)\n{\n    nlohmann_json_t.name = nlohmann_json_j.at(\"name\");\n    nlohmann_json_t.address = nlohmann_json_j.at(\"address\");\n    nlohmann_json_t.age = nlohmann_json_j.at(\"age\");\n}\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    // serialization: person -> json\n    json j = p;\n    std::cout << \"serialization: \" << j << std::endl;\n\n    // deserialization: json -> person\n    json j2 = R\"({\"address\": \"742 Evergreen Terrace\", \"age\": 40, \"name\": \"Homer Simpson\"})\"_json;\n    auto p2 = j2.template get<ns::person>();\n\n    // incomplete deserialization:\n    json j3 = R\"({\"address\": \"742 Evergreen Terrace\", \"name\": \"Maggie Simpson\"})\"_json;\n    try\n    {\n        auto p3 = j3.template get<ns::person>();\n    }\n    catch (const json::exception& e)\n    {\n        std::cout << \"deserialization failed: \" << e.what() << std::endl;\n    }\n}\n
    Example (2): NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT

    Consider the following complete example:

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nnamespace ns\n{\nstruct person\n{\n    std::string name = \"John Doe\";\n    std::string address = \"123 Fake St\";\n    int age = -1;\n\n    person() = default;\n    person(std::string name_, std::string address_, int age_)\n        : name(std::move(name_)), address(std::move(address_)), age(age_)\n    {}\n};\n\nNLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT(person, name, address, age)\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    // serialization: person -> json\n    json j = p;\n    std::cout << \"serialization: \" << j << std::endl;\n\n    // deserialization: json -> person\n    json j2 = R\"({\"address\": \"742 Evergreen Terrace\", \"age\": 40, \"name\": \"Homer Simpson\"})\"_json;\n    auto p2 = j2.template get<ns::person>();\n\n    // incomplete deserialization:\n    json j3 = R\"({\"address\": \"742 Evergreen Terrace\", \"name\": \"Maggie Simpson\"})\"_json;\n    auto p3 = j3.template get<ns::person>();\n    std::cout << \"roundtrip: \" << json(p3) << std::endl;\n}\n

    Output:

    serialization: {\"address\":\"744 Evergreen Terrace\",\"age\":60,\"name\":\"Ned Flanders\"}\nroundtrip: {\"address\":\"742 Evergreen Terrace\",\"age\":-1,\"name\":\"Maggie Simpson\"}\n

    Notes:

    • ns::person is default-constructible. This is a requirement for using the macro.
    • ns::person has only public member variables. This makes NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT applicable.
    • The macro NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT is used outside the class, but inside its namespace ns.
    • A missing key \"age\" in the deserialization does not yield an exception. Instead, the default value -1 is used.

    The macro is equivalent to:

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nnamespace ns\n{\nstruct person\n{\n    std::string name = \"John Doe\";\n    std::string address = \"123 Fake St\";\n    int age = -1;\n\n    person() = default;\n    person(std::string name_, std::string address_, int age_)\n        : name(std::move(name_)), address(std::move(address_)), age(age_)\n    {}\n};\n\ntemplate<typename BasicJsonType>\nvoid to_json(BasicJsonType& nlohmann_json_j, const person& nlohmann_json_t)\n{\n    nlohmann_json_j[\"name\"] = nlohmann_json_t.name;\n    nlohmann_json_j[\"address\"] = nlohmann_json_t.address;\n    nlohmann_json_j[\"age\"] = nlohmann_json_t.age;\n}\n\ntemplate<typename BasicJsonType>\nvoid from_json(const BasicJsonType& nlohmann_json_j, person& nlohmann_json_t)\n{\n    person nlohmann_json_default_obj;\n    nlohmann_json_t.name = nlohmann_json_j.value(\"name\", nlohmann_json_default_obj.name);\n    nlohmann_json_t.address = nlohmann_json_j.value(\"address\", nlohmann_json_default_obj.address);\n    nlohmann_json_t.age = nlohmann_json_j.value(\"age\", nlohmann_json_default_obj.age);\n}\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    // serialization: person -> json\n    json j = p;\n    std::cout << \"serialization: \" << j << std::endl;\n\n    // deserialization: json -> person\n    json j2 = R\"({\"address\": \"742 Evergreen Terrace\", \"age\": 40, \"name\": \"Homer Simpson\"})\"_json;\n    auto p2 = j2.template get<ns::person>();\n\n    // incomplete deserialization:\n    json j3 = R\"({\"address\": \"742 Evergreen Terrace\", \"name\": \"Maggie Simpson\"})\"_json;\n    auto p3 = j3.template get<ns::person>();\n    std::cout << \"roundtrip: \" << json(p3) << std::endl;\n}\n

    Note how a default-initialized person object is used in the from_json to fill missing values.

    Example (3): NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE

    Consider the following complete example:

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nnamespace ns\n{\nstruct person\n{\n    std::string name;\n    std::string address;\n    int age;\n};\n\nNLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE(person, name, address, age)\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    // serialization: person -> json\n    json j = p;\n    std::cout << \"serialization: \" << j << std::endl;\n}\n

    Output:

    serialization: {\"address\":\"744 Evergreen Terrace\",\"age\":60,\"name\":\"Ned Flanders\"}\n

    Notes:

    • ns::person is non-default-constructible. This allows this macro to be used instead of NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE and NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT.
    • ns::person has only public member variables. This makes NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE applicable.
    • The macro NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE is used outside the class, but inside its namespace ns.

    The macro is equivalent to:

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nnamespace ns\n{\nstruct person\n{\n    std::string name;\n    std::string address;\n    int age;\n};\n\ntemplate<typename BasicJsonType>\nvoid to_json(BasicJsonType& nlohmann_json_j, const person& nlohmann_json_t)\n{\n    nlohmann_json_j[\"name\"] = nlohmann_json_t.name;\n    nlohmann_json_j[\"address\"] = nlohmann_json_t.address;\n    nlohmann_json_j[\"age\"] = nlohmann_json_t.age;\n}\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    // serialization: person -> json\n    json j = p;\n    std::cout << \"serialization: \" << j << std::endl;\n}\n
    "},{"location":"api/macros/nlohmann_define_type_non_intrusive/#see-also","title":"See also","text":"
    • NLOHMANN_DEFINE_TYPE_INTRUSIVE, NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE for a similar macro that can be defined inside the type.
    • NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE, NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE for similar macros for derived types
    • Arbitrary Type Conversions for an overview.
    "},{"location":"api/macros/nlohmann_define_type_non_intrusive/#version-history","title":"Version history","text":"
    1. Added in version 3.9.0.
    2. Added in version 3.11.0.
    3. Added in version 3.11.3.
    "},{"location":"api/macros/nlohmann_json_namespace/","title":"NLOHMANN_JSON_NAMESPACE","text":"
    #define NLOHMANN_JSON_NAMESPACE /* value */\n

    This macro evaluates to the full name of the nlohmann namespace.

    "},{"location":"api/macros/nlohmann_json_namespace/#default-definition","title":"Default definition","text":"

    The default value consists of the root namespace (nlohmann) and an inline ABI namespace. See nlohmann Namespace for details.

    When the macro is not defined, the library will define it to its default value. Overriding this value has no effect on the library.

    "},{"location":"api/macros/nlohmann_json_namespace/#examples","title":"Examples","text":"Example

    The example shows how to use NLOHMANN_JSON_NAMESPACE instead of just nlohmann, as well as how to output the value of NLOHMANN_JSON_NAMESPACE.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\n// possible use case: use NLOHMANN_JSON_NAMESPACE instead of nlohmann\nusing json = NLOHMANN_JSON_NAMESPACE::json;\n\n// macro needed to output the NLOHMANN_JSON_NAMESPACE as string literal\n#define Q(x) #x\n#define QUOTE(x) Q(x)\n\nint main()\n{\n    std::cout << QUOTE(NLOHMANN_JSON_NAMESPACE) << std::endl;\n}\n

    Output:

    nlohmann::json_abi_v3_11_3\n
    "},{"location":"api/macros/nlohmann_json_namespace/#see-also","title":"See also","text":"
    • NLOHMANN_JSON_NAMESPACE_BEGIN, NLOHMANN_JSON_NAMESPACE_END
    • NLOHMANN_JSON_NAMESPACE_NO_VERSION
    "},{"location":"api/macros/nlohmann_json_namespace/#version-history","title":"Version history","text":"
    • Added in version 3.11.0. Changed inline namespace name in version 3.11.2.
    "},{"location":"api/macros/nlohmann_json_namespace_begin/","title":"NLOHMANN_JSON_NAMESPACE_BEGIN, NLOHMANN_JSON_NAMESPACE_END","text":"
    #define NLOHMANN_JSON_NAMESPACE_BEGIN /* value */  // (1)\n#define NLOHMANN_JSON_NAMESPACE_END   /* value */  // (2)\n

    These macros can be used to open and close the nlohmann namespace. See nlohmann Namespace for details.

    1. Opens the namespace.
    2. Closes the namespace.
    "},{"location":"api/macros/nlohmann_json_namespace_begin/#default-definition","title":"Default definition","text":"

    The default definitions open and close the nlohmann namespace. The precise definition of [NLOHMANN_JSON_NAMESPACE_BEGIN] varies as described here.

    1. Default definition of NLOHMANN_JSON_NAMESPACE_BEGIN:

      namespace nlohmann\n{\ninline namespace json_abi_v3_11_2\n{\n
    2. Default definition of NLOHMANN_JSON_NAMESPACE_END:

      }  // namespace json_abi_v3_11_2\n}  // namespace nlohmann\n

    When these macros are not defined, the library will define them to their default definitions.

    "},{"location":"api/macros/nlohmann_json_namespace_begin/#examples","title":"Examples","text":"Example

    The example shows how to use NLOHMANN_JSON_NAMESPACE_BEGIN/NLOHMANN_JSON_NAMESPACE_END from the How do I convert third-party types? page.

    #include <iostream>\n#include <optional>\n#include <nlohmann/json.hpp>\n\n// partial specialization (see https://json.nlohmann.me/features/arbitrary_types/)\nNLOHMANN_JSON_NAMESPACE_BEGIN\ntemplate <typename T>\nstruct adl_serializer<std::optional<T>>\n{\n    static void to_json(json& j, const std::optional<T>& opt)\n    {\n        if (opt == std::nullopt)\n        {\n            j = nullptr;\n        }\n        else\n        {\n            j = *opt;\n        }\n    }\n};\nNLOHMANN_JSON_NAMESPACE_END\n\nint main()\n{\n    std::optional<int> o1 = 1;\n    std::optional<int> o2 = std::nullopt;\n\n    NLOHMANN_JSON_NAMESPACE::json j;\n    j.push_back(o1);\n    j.push_back(o2);\n    std::cout << j << std::endl;\n}\n

    Output:

    [1,null]\n
    "},{"location":"api/macros/nlohmann_json_namespace_begin/#see-also","title":"See also","text":"
    • nlohmann Namespace
    • NLOHMANN_JSON_NAMESPACE
    • NLOHMANN_JSON_NAMESPACE_NO_VERSION
    "},{"location":"api/macros/nlohmann_json_namespace_begin/#version-history","title":"Version history","text":"
    • Added in version 3.11.0. Changed inline namespace name in version 3.11.2.
    "},{"location":"api/macros/nlohmann_json_namespace_no_version/","title":"NLOHMANN_JSON_NAMESPACE_NO_VERSION","text":"
    #define NLOHMANN_JSON_NAMESPACE_NO_VERSION /* value */\n

    If defined to 1, the version component is omitted from the inline namespace. See nlohmann Namespace for details.

    "},{"location":"api/macros/nlohmann_json_namespace_no_version/#default-definition","title":"Default definition","text":"

    The default value is 0.

    #define NLOHMANN_JSON_NAMESPACE_NO_VERSION 0\n

    When the macro is not defined, the library will define it to its default value.

    "},{"location":"api/macros/nlohmann_json_namespace_no_version/#examples","title":"Examples","text":"Example

    The example shows how to use NLOHMANN_JSON_NAMESPACE_NO_VERSION to disable the version component of the inline namespace.

    #include <iostream>\n\n#define NLOHMANN_JSON_NAMESPACE_NO_VERSION 1\n#include <nlohmann/json.hpp>\n\n// macro needed to output the NLOHMANN_JSON_NAMESPACE as string literal\n#define Q(x) #x\n#define QUOTE(x) Q(x)\n\nint main()\n{\n    std::cout << QUOTE(NLOHMANN_JSON_NAMESPACE) << std::endl;\n}\n

    Output:

    nlohmann::json_abi\n
    "},{"location":"api/macros/nlohmann_json_namespace_no_version/#see-also","title":"See also","text":"
    • nlohmann Namespace
    • NLOHMANN_JSON_NAMESPACE
    • NLOHMANN_JSON_NAMESPACE_BEGIN, NLOHMANN_JSON_NAMESPACE_END
    "},{"location":"api/macros/nlohmann_json_namespace_no_version/#version-history","title":"Version history","text":"
    • Added in version 3.11.2.
    "},{"location":"api/macros/nlohmann_json_serialize_enum/","title":"NLOHMANN_JSON_SERIALIZE_ENUM","text":"
    #define NLOHMANN_JSON_SERIALIZE_ENUM(type, conversion...)\n

    By default, enum values are serialized to JSON as integers. In some cases this could result in undesired behavior. If an enum is modified or re-ordered after data has been serialized to JSON, the later de-serialized JSON data may be undefined or a different enum value than was originally intended.

    The NLOHMANN_JSON_SERIALIZE_ENUM allows to define a user-defined serialization for every enumerator.

    "},{"location":"api/macros/nlohmann_json_serialize_enum/#parameters","title":"Parameters","text":"type (in) name of the enum to serialize/deserialize conversion (in) a pair of an enumerator and a JSON serialization; arbitrary pairs can be given as a comma-separated list"},{"location":"api/macros/nlohmann_json_serialize_enum/#default-definition","title":"Default definition","text":"

    The macro adds two functions to the namespace which take care of the serialization and deserialization:

    template<typename BasicJsonType>\ninline void to_json(BasicJsonType& j, const type& e);\ntemplate<typename BasicJsonType>\ninline void from_json(const BasicJsonType& j, type& e);\n
    "},{"location":"api/macros/nlohmann_json_serialize_enum/#notes","title":"Notes","text":"

    Prerequisites

    The macro must be used inside the namespace of the enum.

    Important notes

    • When using template get<ENUM_TYPE>(), undefined JSON values will default to the first specified conversion. Select this default pair carefully. See example 1 below.
    • If an enum or JSON value is specified in multiple conversions, the first matching conversion from the top of the list will be returned when converting to or from JSON. See example 2 below.
    "},{"location":"api/macros/nlohmann_json_serialize_enum/#examples","title":"Examples","text":"Example 1: Basic usage

    The example shows how NLOHMANN_JSON_SERIALIZE_ENUM can be used to serialize/deserialize both classical enums and C++11 enum classes:

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nnamespace ns\n{\nenum TaskState\n{\n    TS_STOPPED,\n    TS_RUNNING,\n    TS_COMPLETED,\n    TS_INVALID = -1\n};\n\nNLOHMANN_JSON_SERIALIZE_ENUM(TaskState,\n{\n    { TS_INVALID, nullptr },\n    { TS_STOPPED, \"stopped\" },\n    { TS_RUNNING, \"running\" },\n    { TS_COMPLETED, \"completed\" }\n})\n\nenum class Color\n{\n    red, green, blue, unknown\n};\n\nNLOHMANN_JSON_SERIALIZE_ENUM(Color,\n{\n    { Color::unknown, \"unknown\" }, { Color::red, \"red\" },\n    { Color::green, \"green\" }, { Color::blue, \"blue\" }\n})\n} // namespace ns\n\nint main()\n{\n    // serialization\n    json j_stopped = ns::TS_STOPPED;\n    json j_red = ns::Color::red;\n    std::cout << \"ns::TS_STOPPED -> \" << j_stopped\n              << \", ns::Color::red -> \" << j_red << std::endl;\n\n    // deserialization\n    json j_running = \"running\";\n    json j_blue = \"blue\";\n    auto running = j_running.template get<ns::TaskState>();\n    auto blue = j_blue.template get<ns::Color>();\n    std::cout << j_running << \" -> \" << running\n              << \", \" << j_blue << \" -> \" << static_cast<int>(blue) << std::endl;\n\n    // deserializing undefined JSON value to enum\n    // (where the first map entry above is the default)\n    json j_pi = 3.14;\n    auto invalid = j_pi.template get<ns::TaskState>();\n    auto unknown = j_pi.template get<ns::Color>();\n    std::cout << j_pi << \" -> \" << invalid << \", \"\n              << j_pi << \" -> \" << static_cast<int>(unknown) << std::endl;\n}\n

    Output:

    ns::TS_STOPPED -> \"stopped\", ns::Color::red -> \"red\"\n\"running\" -> 1, \"blue\" -> 2\n3.14 -> -1, 3.14 -> 3\n
    Example 2: Multiple conversions for one enumerator

    The example shows how to use multiple conversions for a single enumerator. In the example, Color::red will always be serialized to \"red\", because the first occurring conversion. The second conversion, however, offers an alternative deserialization from \"rot\" to Color::red.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nnamespace ns\n{\nenum class Color\n{\n    red, green, blue, unknown\n};\n\nNLOHMANN_JSON_SERIALIZE_ENUM(Color,\n{\n    { Color::unknown, \"unknown\" }, { Color::red, \"red\" },\n    { Color::green, \"green\" }, { Color::blue, \"blue\" },\n    { Color::red, \"rot\" } // a second conversion for Color::red\n})\n}\n\nint main()\n{\n    // serialization\n    json j_red = ns::Color::red;\n    std::cout << static_cast<int>(ns::Color::red) << \" -> \" << j_red << std::endl;\n\n    // deserialization\n    json j_rot = \"rot\";\n    auto rot = j_rot.template get<ns::Color>();\n    auto red = j_red.template get<ns::Color>();\n    std::cout << j_rot << \" -> \" << static_cast<int>(rot) << std::endl;\n    std::cout << j_red << \" -> \" << static_cast<int>(red) << std::endl;\n}\n

    Output:

    0 -> \"red\"\n\"rot\" -> 0\n\"red\" -> 0\n
    "},{"location":"api/macros/nlohmann_json_serialize_enum/#see-also","title":"See also","text":"
    • Specializing enum conversion
    • JSON_DISABLE_ENUM_SERIALIZATION
    "},{"location":"api/macros/nlohmann_json_serialize_enum/#version-history","title":"Version history","text":"

    Added in version 3.4.0.

    "},{"location":"api/macros/nlohmann_json_version_major/","title":"NLOHMANN_JSON_VERSION_MAJOR, NLOHMANN_JSON_VERSION_MINOR, NLOHMANN_JSON_VERSION_PATCH","text":"
    #define NLOHMANN_JSON_VERSION_MAJOR /* value */\n#define NLOHMANN_JSON_VERSION_MINOR /* value */\n#define NLOHMANN_JSON_VERSION_PATCH /* value */\n

    These macros are defined by the library and contain the version numbers according to Semantic Versioning 2.0.0.

    "},{"location":"api/macros/nlohmann_json_version_major/#default-definition","title":"Default definition","text":"

    The macros are defined according to the current library version.

    "},{"location":"api/macros/nlohmann_json_version_major/#examples","title":"Examples","text":"Example

    The example below shows how NLOHMANN_JSON_VERSION_MAJOR, NLOHMANN_JSON_VERSION_MINOR, and NLOHMANN_JSON_VERSION_PATCH are defined by the library.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << \"JSON for Modern C++ version \"\n              << NLOHMANN_JSON_VERSION_MAJOR << \".\"\n              << NLOHMANN_JSON_VERSION_MINOR << \".\"\n              << NLOHMANN_JSON_VERSION_PATCH << std::endl;\n}\n

    Output:

    JSON for Modern C++ version 3.11.3\n
    "},{"location":"api/macros/nlohmann_json_version_major/#see-also","title":"See also","text":"
    • meta - returns version information on the library
    • JSON_SKIP_LIBRARY_VERSION_CHECK - skip library version check
    "},{"location":"api/macros/nlohmann_json_version_major/#version-history","title":"Version history","text":"
    • Added in version 3.1.0.
    "},{"location":"community/","title":"Community","text":"
    • Code of Conduct - the rules and norms of this project
    • Contribution Guidelines - guidelines how to contribute to this project
    • Governance - the governance model of this project
    • Quality Assurance - how quality of this project is assured
    • Security Policy - the security policy of the project
    "},{"location":"community/code_of_conduct/","title":"Contributor Covenant Code of Conduct","text":""},{"location":"community/code_of_conduct/#our-pledge","title":"Our Pledge","text":"

    We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation.

    We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.

    "},{"location":"community/code_of_conduct/#our-standards","title":"Our Standards","text":"

    Examples of behavior that contributes to a positive environment for our community include:

    • Demonstrating empathy and kindness toward other people
    • Being respectful of differing opinions, viewpoints, and experiences
    • Giving and gracefully accepting constructive feedback
    • Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience
    • Focusing on what is best not just for us as individuals, but for the overall community

    Examples of unacceptable behavior include:

    • The use of sexualized language or imagery, and sexual attention or advances of any kind
    • Trolling, insulting or derogatory comments, and personal or political attacks
    • Public or private harassment
    • Publishing others' private information, such as a physical or email address, without their explicit permission
    • Other conduct which could reasonably be considered inappropriate in a professional setting
    "},{"location":"community/code_of_conduct/#enforcement-responsibilities","title":"Enforcement Responsibilities","text":"

    Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful.

    Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate.

    "},{"location":"community/code_of_conduct/#scope","title":"Scope","text":"

    This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official email address, posting via an official social media account, or acting as an appointed representative at an online or offline event.

    "},{"location":"community/code_of_conduct/#enforcement","title":"Enforcement","text":"

    Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at mail@nlohmann.me. All complaints will be reviewed and investigated promptly and fairly.

    All community leaders are obligated to respect the privacy and security of the reporter of any incident.

    "},{"location":"community/code_of_conduct/#enforcement-guidelines","title":"Enforcement Guidelines","text":"

    Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct:

    "},{"location":"community/code_of_conduct/#1-correction","title":"1. Correction","text":"

    Community Impact: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.

    Consequence: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested.

    "},{"location":"community/code_of_conduct/#2-warning","title":"2. Warning","text":"

    Community Impact: A violation through a single incident or series of actions.

    Consequence: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban.

    "},{"location":"community/code_of_conduct/#3-temporary-ban","title":"3. Temporary Ban","text":"

    Community Impact: A serious violation of community standards, including sustained inappropriate behavior.

    Consequence: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban.

    "},{"location":"community/code_of_conduct/#4-permanent-ban","title":"4. Permanent Ban","text":"

    Community Impact: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.

    Consequence: A permanent ban from any sort of public interaction within the community.

    "},{"location":"community/code_of_conduct/#attribution","title":"Attribution","text":"

    This Code of Conduct is adapted from the Contributor Covenant, version 2.1, available at https://www.contributor-covenant.org/version/2/1/code_of_conduct.html.

    Community Impact Guidelines were inspired by Mozilla's code of conduct enforcement ladder.

    For answers to common questions about this code of conduct, see the FAQ at https://www.contributor-covenant.org/faq. Translations are available at https://www.contributor-covenant.org/translations.

    "},{"location":"community/contribution_guidelines/","title":"Contribution Guidelines","text":"

    Thank you for your interest in contributing to this project! What began as an exercise to explore the exciting features of C++11 has evolved into a widely-used JSON library. I truly appreciate all the contributions from the community, whether it's proposing features, identifying bugs, or fixing mistakes! To ensure that our collaboration is efficient and effective, please follow these guidelines.

    Feel free to discuss or suggest improvements to this document by submitting a pull request.

    "},{"location":"community/contribution_guidelines/#ways-to-contribute","title":"Ways to Contribute","text":"

    There are multiple ways to contribute.

    "},{"location":"community/contribution_guidelines/#reporting-an-issue","title":"Reporting an issue","text":"

    Please create an issue, assuming one does not already exist, and describe your concern. Note you need a GitHub account for this.

    Clearly describe the issue:

    • If it is a bug, please describe how to reproduce it. If possible, attach a complete example which demonstrates the error. Please also state what you expected to happen instead of the error.
    • If you propose a change or addition, try to give an example how the improved code could look like or how to use it.
    • If you found a compilation error, please tell us which compiler (version and operating system) you used and paste the (relevant part of) the error messages to the ticket.

    Please stick to the provided issue template bug report if possible.

    "},{"location":"community/contribution_guidelines/#reporting-a-security-vulnerability","title":"Reporting a security vulnerability","text":"

    You can report a security vulnerability according to our security policy.

    "},{"location":"community/contribution_guidelines/#discussing-a-new-feature","title":"Discussing a new feature","text":"

    For questions, feature or support requests, please open a discussion. If you find a proposed answer satisfactory, please use the \"Mark as answer\" button to make it easier for readers to see what helped and for the community to filter for open questions.

    "},{"location":"community/contribution_guidelines/#proposing-a-fix-or-an-improvement","title":"Proposing a fix or an improvement","text":"

    Join an ongoing discussion or comment on an existing issue before starting to code. This can help to avoid duplicate efforts or other frustration during the later review.

    Create a pull request against the develop branch and follow the pull request template. In particular,

    • describe the changes in detail, both the what and why,
    • reference existing issues where applicable,
    • add tests to maintain 100% test coverage,
    • update the documentation as needed, and
    • ensure the source code is amalgamated.

    We describe all points in detail below.

    All contributions (including pull requests) must agree to the Developer Certificate of Origin (DCO) version 1.1. This is exactly the same one created and used by the Linux kernel developers and posted on http://developercertificate.org/. This is a developer's certification that he or she has the right to submit the patch for inclusion into the project.

    "},{"location":"community/contribution_guidelines/#how-to","title":"How to...","text":""},{"location":"community/contribution_guidelines/#describe-your-changes","title":"Describe your changes","text":"

    This library is primarily maintained as a spare-time project. As such, I can not make any guarantee how quickly changes are merged and released. Therefore, it is very important to make the review as smooth as possible by explaining not only what you changed, but why. This rationale can be very valuable down the road when improvements or bugs are discussed years later.

    "},{"location":"community/contribution_guidelines/#reference-existing-issues","title":"Reference existing issues","text":"

    Link a pull request to an issue to clarify that a fix is forthcoming and which issue can be closed after merging. Only few cases (e.g., fixing typos) don\u2019t require prior discussions.

    "},{"location":"community/contribution_guidelines/#write-tests","title":"Write tests","text":"

    The library has an extensive test suite that currently covers 100 % of the library's code. These test are crucial to maintain API stability and give future contributors confidence that they do not accidentally break things. As Titus Winters aptly put it:

    If you liked it, you should have put a test on it.

    "},{"location":"community/contribution_guidelines/#run-the-tests","title":"Run the tests","text":"

    First, ensure the test suite runs before making any changes:

    $ cmake -S. -B build\n$ cmake --build build -j 10\n$ ctest --test-dir build -j 10\n

    The test suite should report:

    100% tests passed, 0 tests failed out of 98\n
    "},{"location":"community/contribution_guidelines/#add-tests","title":"Add tests","text":"

    The tests are located in tests/src/unit-*.cpp and contain doctest assertions like CHECK. The tests are structured along the features of the library or the nature of the tests. Usually, it should be clear from the context which existing file needs to be extended, and only very few cases require creating new test files.

    When fixing a bug, edit unit-regression2.cpp and add a section referencing the fixed issue.

    "},{"location":"community/contribution_guidelines/#exceptions","title":"Exceptions","text":"

    When you test exceptions, please use CHECK_THROWS_WITH_AS which also takes the what() argument of the thrown exception into account.

    "},{"location":"community/contribution_guidelines/#coverage","title":"Coverage","text":"

    If test coverage decreases, an automatic warning comment will be posted on the pull request. You can access a code coverage report as artifact to the \u201cUbuntu\u201d workflow.

    "},{"location":"community/contribution_guidelines/#update-the-documentation","title":"Update the documentation","text":"

    The main documentation of the library is generated from the files docs/mkdocs/docs. This folder contains dedicated pages for certain features, a list of all exceptions, and an extensive API documentation with details on every public API function.

    Build the documentation locally using:

    make install_venv -C docs/mkdocs\nmake serve -C docs/mkdocs\n

    The documentation will then available at http://127.0.0.1:8000/. See the documentation of mkdocs and Material for MkDocs for more information.

    "},{"location":"community/contribution_guidelines/#amalgamate-the-source-code","title":"Amalgamate the source code","text":"

    The single-header files single_include/nlohmann/json.hpp and single_include/nlohmann/json_fwd.hpp are generated from the source files in the include/nlohmann directory. Do not edit the files directly; instead, modify the include/nlohmann sources and regenerate the files by executing:

    make amalgamate\n
    "},{"location":"community/contribution_guidelines/#recommended-documentation","title":"Recommended documentation","text":"
    • The library\u2019s README file is an excellent starting point to understand its functionality.
    • The documentation page is the reference documentation of the library.
    • RFC 8259 is the reference for the JavaScript Object Notation (JSON) Data Interchange Format.
    "},{"location":"community/contribution_guidelines/#please-dont","title":"Please don't...","text":"

    Certain contributions are not helpful.

    "},{"location":"community/contribution_guidelines/#break-the-public-api","title":"Break the public API","text":"

    We take pride in the library being used by numerous customers across various industries. They all rely on the guarantees provided by semantic versioning. Please do not change the library such that the public API of the 3.x.y version is broken. This includes:

    • Changing function signatures (altering parameter types, return types, number of parameters) or changing the const-ness of member functions.
    • Removing functions.
    • Renaming functions or classes.
    • Changing exception handling.
    • Changing exception ids.
    • Changing access specifiers.
    • Changing default arguments.

    Although these guidelines may seem restrictive, they are essential for maintaining the library\u2019s utility.

    Breaking changes may be introduced when they are guarded with a feature macro such as JSON_USE_IMPLICIT_CONVERSIONS which allows to selectively change the behavior of the library. In next steps, the current behavior can then be deprecated. Using feature macros then allows users to test their code against the library in the next major release.

    "},{"location":"community/contribution_guidelines/#break-c11-language-conformance","title":"Break C++11 language conformance","text":"

    This library is designed to work with C++11 and later. This means that any supported C++11 compiler should compile the library without problems. Some compilers like GCC 4.7 (and earlier), Clang 3.3 (and earlier), or Microsoft Visual Studio 13.0 and earlier are known not to work due to missing or incomplete C++11 support.

    Please do not add features that do not work with the mentioned supported compilers. Please guard features from C++14 and later against the respective JSON_HAS_CPP_14 macros.

    "},{"location":"community/contribution_guidelines/#break-json-conformance","title":"Break JSON conformance","text":"

    Please refrain from proposing changes that would break JSON conformance. If you propose a conformant extension of JSON to be supported by the library, please motivate this extension.

    "},{"location":"community/contribution_guidelines/#wanted","title":"Wanted","text":"

    The following areas really need contribution and are always welcomed:

    • Extending the continuous integration toward more exotic compilers such as Android NDK, Intel's Compiler, or the bleeding-edge versions Clang.
    • Improving the efficiency of the JSON parser. The current parser is implemented as a naive recursive descent parser with hand coded string handling. More sophisticated approaches like LALR parsers would be really appreciated. That said, parser generators like Bison or ANTLR do not play nice with single-header files -- I really would like to keep the parser inside the json.hpp header, and I am not aware of approaches similar to re2c for parsing.
    • Extending and updating existing benchmarks to include (the most recent version of) this library. Though efficiency is not everything, speed and memory consumption are very important characteristics for C++ developers, so having proper comparisons would be interesting.

    We look forward to your contributions and collaboration to enhance the library!

    "},{"location":"community/governance/","title":"Governance","text":"

    The governance model for the JSON for Modern C++ project is a Benevolent Dictator for Life (BDFL) structure. As the sole maintainer, Niels Lohmann is responsible for all key aspects of the project. The project governance may evolve as the project grows, but any changes will be documented here and communicated to contributors.

    "},{"location":"community/governance/#overview","title":"Overview","text":"

    This project is led by a benevolent dictator, Niels Lohmann, and managed by the community. That is, the community actively contributes to the day-to-day maintenance of the project, but the general strategic line is drawn by the benevolent dictator. In case of disagreement, they have the last word. It is the benevolent dictator\u2019s job to resolve disputes within the community and to ensure that the project is able to progress in a coordinated way. In turn, it is the community\u2019s job to guide the decisions of the benevolent dictator through active engagement and contribution.

    "},{"location":"community/governance/#roles-and-responsibilities","title":"Roles and responsibilities","text":""},{"location":"community/governance/#benevolent-dictator-project-lead","title":"Benevolent dictator (project lead)","text":"

    Typically, the benevolent dictator, or project lead, is self-appointed. However, because the community always has the ability to fork, this person is fully answerable to the community. The project lead\u2019s role is a difficult one: they set the strategic objectives of the project and communicate these clearly to the community. They also have to understand the community as a whole and strive to satisfy as many conflicting needs as possible, while ensuring that the project survives in the long term.

    In many ways, the role of the benevolent dictator is less about dictatorship and more about diplomacy. The key is to ensure that, as the project expands, the right people are given influence over it and the community rallies behind the vision of the project lead. The lead\u2019s job is then to ensure that the committers (see below) make the right decisions on behalf of the project. Generally speaking, as long as the committers are aligned with the project\u2019s strategy, the project lead will allow them to proceed as they desire.

    "},{"location":"community/governance/#committers","title":"Committers","text":"

    Committers are contributors who have made several valuable contributions to the project and are now relied upon to both write code directly to the repository and screen the contributions of others. In many cases they are programmers but it is also possible that they contribute in a different role. Typically, a committer will focus on a specific aspect of the project, and will bring a level of expertise and understanding that earns them the respect of the community and the project lead. The role of committer is not an official one, it is simply a position that influential members of the community will find themselves in as the project lead looks to them for guidance and support.

    Committers have no authority over the overall direction of the project. However, they do have the ear of the project lead. It is a committer\u2019s job to ensure that the lead is aware of the community\u2019s needs and collective objectives, and to help develop or elicit appropriate contributions to the project. Often, committers are given informal control over their specific areas of responsibility, and are assigned rights to directly modify certain areas of the source code. That is, although committers do not have explicit decision-making authority, they will often find that their actions are synonymous with the decisions made by the lead.

    "},{"location":"community/governance/#contributors","title":"Contributors","text":"

    Contributors are community members who either have no desire to become committers, or have not yet been given the opportunity by the benevolent dictator. They make valuable contributions, such as those outlined in the list below, but generally do not have the authority to make direct changes to the project code. Contributors engage with the project through communication tools, such as email lists, and via reports and patches attached to issues in the issue tracker, as detailed in our community tools document.

    Anyone can become a contributor. There is no expectation of commitment to the project, no specific skill requirements and no selection process. To become a contributor, a community member simply has to perform one or more actions that are beneficial to the project.

    Some contributors will already be engaging with the project as users, but will also find themselves doing one or more of the following:

    • supporting new users (current users often provide the most effective new user support)
    • reporting bugs
    • identifying requirements
    • supplying graphics and web design
    • programming
    • assisting with project infrastructure
    • writing documentation
    • fixing bugs
    • adding features

    As contributors gain experience and familiarity with the project, they may find that the project lead starts relying on them more and more. When this begins to happen, they gradually adopt the role of committer, as described above.

    "},{"location":"community/governance/#users","title":"Users","text":"

    Users are community members who have a need for the project. They are the most important members of the community: without them, the project would have no purpose. Anyone can be a user; there are no specific requirements.

    Users should be encouraged to participate in the life of the project and the community as much as possible. User contributions enable the project team to ensure that they are satisfying the needs of those users. Common user activities include (but are not limited to):

    • evangelising about the project
    • informing developers of project strengths and weaknesses from a new user\u2019s perspective
    • providing moral support (a \u2018thank you\u2019 goes a long way)
    • providing financial support

    Users who continue to engage with the project and its community will often find themselves becoming more and more involved. Such users may then go on to become contributors, as described above.

    "},{"location":"community/governance/#support","title":"Support","text":"

    All participants in the community are encouraged to provide support for new users within the project management infrastructure. This support is provided as a way of growing the community. Those seeking support should recognise that all support activity within the project is voluntary and is therefore provided as and when time allows. A user requiring guaranteed response times or results should therefore seek to purchase a support contract from a vendor. (Of course, that vendor should be an active member of the community.) However, for those willing to engage with the project on its own terms, and willing to help support other users, the community support channels are ideal.

    "},{"location":"community/governance/#contribution-process","title":"Contribution Process","text":"

    Anyone can contribute to the project, regardless of their skills, as there are many ways to contribute. For instance, a contributor might be active on the project mailing list and issue tracker, or might supply patches. The various ways of contributing are described in more detail in our roles in open source document.

    The developer mailing list is the most appropriate place for a contributor to ask for help when making their first contribution.

    "},{"location":"community/governance/#decision-making-process","title":"Decision-Making Process","text":"

    The benevolent dictatorship model does not need a formal conflict resolution process, since the project lead\u2019s word is final. If the community chooses to question the wisdom of the actions of a committer, the project lead can review their decisions by checking the email archives, and either uphold or reverse them.

    Source

    The text was taken from http://oss-watch.ac.uk/resources/benevolentdictatorgovernancemodel.

    "},{"location":"community/quality_assurance/","title":"Quality assurance","text":"

    Ensuring quality is paramount for this project, particularly because numerous other projects depend on it. Each commit to the library undergoes rigorous checks against the following requirements, and any violations will result in a failed build.

    "},{"location":"community/quality_assurance/#c-language-compliance-and-compiler-compatibility","title":"C++ language compliance and compiler compatibility","text":"

    Requirement: Compiler support

    Any compiler with complete C++11 support can compile the library without warnings.

    • The library is compiled library with 50+ different C++ compilers with different operating systems and platforms, including the oldest versions known to compile the library.

      Compilers used in continuous integration Compiler Architecture Operating System CI AppleClang 14.0.0.14000029; Xcode 14.1 x86_64 macOS 13.7.2 (Ventura) GitHub AppleClang 14.0.0.14000029; Xcode 14.2 x86_64 macOS 13.7.2 (Ventura) GitHub AppleClang 14.0.3.14030022; Xcode 14.3.1 x86_64 macOS 13.7.2 (Ventura) GitHub AppleClang 15.0.0.15000040; Xcode 15.0.1 x86_64 macOS 13.7.2 (Ventura) GitHub AppleClang 15.0.0.15000100; Xcode 15.1 x86_64 macOS 13.7.2 (Ventura) GitHub AppleClang 15.0.0.15000100; Xcode 15.2 x86_64 macOS 13.7.2 (Ventura) GitHub AppleClang 15.0.0.15000309; Xcode 15.3 arm64 macOS 14.7.2 (Sonoma) GitHub AppleClang 15.0.0.15000309; Xcode 15.4 arm64 macOS 14.7.2 (Sonoma) GitHub AppleClang 16.0.0.16000026; Xcode 16 arm64 macOS 15.2 (Sequoia) GitHub AppleClang 16.0.0.16000026; Xcode 16.1 arm64 macOS 15.2 (Sequoia) GitHub AppleClang 16.0.0.16000026; Xcode 16.2 arm64 macOS 15.2 (Sequoia) GitHub Clang 3.5.2 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 3.6.2 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 3.7.1 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 3.8.1 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 3.9.1 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 4.0.1 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 5.0.2 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 6.0.1 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 7.1.0 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 8.0.1 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 9.0.1 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 10.0.1 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 11.0.0 with GNU-like command-line x86_64 Windows 10 (Build 17763) GitHub Clang 11.1.0 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 12.0.0 with GNU-like command-line x86_64 Windows 10 (Build 17763) GitHub Clang 12.0.0 with MSVC-like command-line x86_64 Windows 10 (Build 17763) GitHub Clang 12.0.1 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 13.0.0 with GNU-like command-line x86_64 Windows 10 (Build 17763) GitHub Clang 13.0.1 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 14.0.0 with GNU-like command-line x86_64 Windows 10 (Build 17763) GitHub Clang 14.0.6 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 15.0.0 with GNU-like command-line x86_64 Windows 10 (Build 17763) GitHub Clang 15.0.7 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 16.0.6 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 17.0.6 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 18.1.8 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 19.1.7 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 20.1.1 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 21.0.0 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 4.8.5 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 4.9.3 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 5.5.0 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 6.4.0 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 7.5.0 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 8.5.0 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 9.3.0 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 9.4.0 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 9.5.0 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 10.5.0 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 11.4.0 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 11.5.0 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 12.2.0 (MinGW-W64 i686-ucrt-posix-dwarf) x86_64 Windows 10 (Build 17763) GitHub GNU 12.2.0 (MinGW-W64 x86_64-ucrt-posix-seh) x86_64 Windows 10 (Build 17763) GitHub GNU 12.4.0 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 13.3.0 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 14.2.0 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 14.2.0 arm64 Linux 6.1.100 Cirrus CI MSVC 19.0.24241.7 x86 Windows 8.1 AppVeyor MSVC 19.16.27035.0 x86 Windows-10 (Build 14393) AppVeyor MSVC 19.29.30157.0 x86 Windows 10 (Build 17763) GitHub MSVC 19.29.30157.0 x86_64 Windows 10 (Build 17763) GitHub MSVC 19.29.30157.0 x86 Windows-10 (Build 17763) AppVeyor MSVC 19.42.34435.0 x86 Windows 10 (Build 20348) GitHub MSVC 19.42.34435.0 x86_64 Windows 10 (Build 20348) GitHub
    • The library is compiled with all C++ language revisions (C++11, C++14, C++17, C++20, C++23, and C++26) to detect and fix language deprecations early.

    • The library is checked for compiler warnings:
    • On Clang, -Weverything is used with 7 exceptions.

      Clang warnings
      # Ignored Clang warnings:\n# -Wno-c++98-compat               The library targets C++11.\n# -Wno-c++98-compat-pedantic      The library targets C++11.\n# -Wno-deprecated-declarations    The library contains annotations for deprecated functions.\n# -Wno-extra-semi-stmt            The library uses assert which triggers this warning.\n# -Wno-padded                     We do not care about padding warnings.\n# -Wno-covered-switch-default     All switches list all cases and a default case.\n# -Wno-unsafe-buffer-usage        Otherwise Doctest would not compile.\n\nset(CLANG_CXXFLAGS\n    -Werror\n    -Weverything\n    -Wno-c++98-compat\n    -Wno-c++98-compat-pedantic\n    -Wno-deprecated-declarations\n    -Wno-extra-semi-stmt\n    -Wno-padded\n    -Wno-covered-switch-default\n    -Wno-unsafe-buffer-usage\n)\n
    • On GCC, 300+ warnings are enabled with 8 exceptions.

      GCC warnings
      # Warning flags determined for GCC 14.2.0 with https://github.com/nlohmann/gcc_flags:\n# Ignored GCC warnings:\n# -Wno-abi-tag                    We do not care about ABI tags.\n# -Wno-aggregate-return           The library uses aggregate returns.\n# -Wno-long-long                  The library uses the long long type to interface with system functions.\n# -Wno-namespaces                 The library uses namespaces.\n# -Wno-nrvo                       Doctest triggers this warning.\n# -Wno-padded                     We do not care about padding warnings.\n# -Wno-system-headers             We do not care about warnings in system headers.\n# -Wno-templates                  The library uses templates.\n\nset(GCC_CXXFLAGS\n    -pedantic\n    -Werror\n    --all-warnings\n    --extra-warnings\n    -W\n    -WNSObject-attribute\n    -Wno-abi-tag\n    -Waddress\n    -Waddress-of-packed-member\n    -Wno-aggregate-return\n    -Waggressive-loop-optimizations\n    -Waligned-new=all\n    -Wall\n    -Walloc-size\n    -Walloc-zero\n    -Walloca\n    -Wanalyzer-allocation-size\n    -Wanalyzer-deref-before-check\n    -Wanalyzer-double-fclose\n    -Wanalyzer-double-free\n    -Wanalyzer-exposure-through-output-file\n    -Wanalyzer-exposure-through-uninit-copy\n    -Wanalyzer-fd-access-mode-mismatch\n    -Wanalyzer-fd-double-close\n    -Wanalyzer-fd-leak\n    -Wanalyzer-fd-phase-mismatch\n    -Wanalyzer-fd-type-mismatch\n    -Wanalyzer-fd-use-after-close\n    -Wanalyzer-fd-use-without-check\n    -Wanalyzer-file-leak\n    -Wanalyzer-free-of-non-heap\n    -Wanalyzer-imprecise-fp-arithmetic\n    -Wanalyzer-infinite-loop\n    -Wanalyzer-infinite-recursion\n    -Wanalyzer-jump-through-null\n    -Wanalyzer-malloc-leak\n    -Wanalyzer-mismatching-deallocation\n    -Wanalyzer-null-argument\n    -Wanalyzer-null-dereference\n    -Wanalyzer-out-of-bounds\n    -Wanalyzer-overlapping-buffers\n    -Wanalyzer-possible-null-argument\n    -Wanalyzer-possible-null-dereference\n    -Wanalyzer-putenv-of-auto-var\n    -Wanalyzer-shift-count-negative\n    -Wanalyzer-shift-count-overflow\n    -Wanalyzer-stale-setjmp-buffer\n    -Wanalyzer-symbol-too-complex\n    -Wanalyzer-tainted-allocation-size\n    -Wanalyzer-tainted-array-index\n    -Wanalyzer-tainted-assertion\n    -Wanalyzer-tainted-divisor\n    -Wanalyzer-tainted-offset\n    -Wanalyzer-tainted-size\n    -Wanalyzer-too-complex\n    -Wanalyzer-undefined-behavior-strtok\n    -Wanalyzer-unsafe-call-within-signal-handler\n    -Wanalyzer-use-after-free\n    -Wanalyzer-use-of-pointer-in-stale-stack-frame\n    -Wanalyzer-use-of-uninitialized-value\n    -Wanalyzer-va-arg-type-mismatch\n    -Wanalyzer-va-list-exhausted\n    -Wanalyzer-va-list-leak\n    -Wanalyzer-va-list-use-after-va-end\n    -Wanalyzer-write-to-const\n    -Wanalyzer-write-to-string-literal\n    -Warith-conversion\n    -Warray-bounds=2\n    -Warray-compare\n    -Warray-parameter=2\n    -Wattribute-alias=2\n    -Wattribute-warning\n    -Wattributes\n    -Wbool-compare\n    -Wbool-operation\n    -Wbuiltin-declaration-mismatch\n    -Wbuiltin-macro-redefined\n    -Wc++0x-compat\n    -Wc++11-compat\n    -Wc++11-extensions\n    -Wc++14-compat\n    -Wc++14-extensions\n    -Wc++17-compat\n    -Wc++17-extensions\n    -Wc++1z-compat\n    -Wc++20-compat\n    -Wc++20-extensions\n    -Wc++23-extensions\n    -Wc++26-extensions\n    -Wc++2a-compat\n    -Wcalloc-transposed-args\n    -Wcannot-profile\n    -Wcast-align\n    -Wcast-align=strict\n    -Wcast-function-type\n    -Wcast-qual\n    -Wcast-user-defined\n    -Wcatch-value=3\n    -Wchanges-meaning\n    -Wchar-subscripts\n    -Wclass-conversion\n    -Wclass-memaccess\n    -Wclobbered\n    -Wcomma-subscript\n    -Wcomment\n    -Wcomments\n    -Wcomplain-wrong-lang\n    -Wconditionally-supported\n    -Wconversion\n    -Wconversion-null\n    -Wcoverage-invalid-line-number\n    -Wcoverage-mismatch\n    -Wcoverage-too-many-conditions\n    -Wcpp\n    -Wctad-maybe-unsupported\n    -Wctor-dtor-privacy\n    -Wdangling-else\n    -Wdangling-pointer=2\n    -Wdangling-reference\n    -Wdate-time\n    -Wdelete-incomplete\n    -Wdelete-non-virtual-dtor\n    -Wdeprecated\n    -Wdeprecated-copy\n    -Wdeprecated-copy-dtor\n    -Wdeprecated-declarations\n    -Wdeprecated-enum-enum-conversion\n    -Wdeprecated-enum-float-conversion\n    -Wdisabled-optimization\n    -Wdiv-by-zero\n    -Wdouble-promotion\n    -Wduplicated-branches\n    -Wduplicated-cond\n    -Weffc++\n    -Welaborated-enum-base\n    -Wempty-body\n    -Wendif-labels\n    -Wenum-compare\n    -Wenum-conversion\n    -Wexceptions\n    -Wexpansion-to-defined\n    -Wextra\n    -Wextra-semi\n    -Wflex-array-member-not-at-end\n    -Wfloat-conversion\n    -Wfloat-equal\n    -Wformat -Wformat-contains-nul\n    -Wformat -Wformat-extra-args\n    -Wformat -Wformat-nonliteral\n    -Wformat -Wformat-security\n    -Wformat -Wformat-y2k\n    -Wformat -Wformat-zero-length\n    -Wformat-diag\n    -Wformat-overflow=2\n    -Wformat-signedness\n    -Wformat-truncation=2\n    -Wformat=2\n    -Wframe-address\n    -Wfree-nonheap-object\n    -Wglobal-module\n    -Whardened\n    -Whsa\n    -Wif-not-aligned\n    -Wignored-attributes\n    -Wignored-qualifiers\n    -Wimplicit-fallthrough=5\n    -Winaccessible-base\n    -Winfinite-recursion\n    -Winherited-variadic-ctor\n    -Winit-list-lifetime\n    -Winit-self\n    -Winline\n    -Wint-in-bool-context\n    -Wint-to-pointer-cast\n    -Winterference-size\n    -Winvalid-constexpr\n    -Winvalid-imported-macros\n    -Winvalid-memory-model\n    -Winvalid-offsetof\n    -Winvalid-pch\n    -Winvalid-utf8\n    -Wliteral-suffix\n    -Wlogical-not-parentheses\n    -Wlogical-op\n    -Wno-long-long\n    -Wlto-type-mismatch\n    -Wmain\n    -Wmaybe-uninitialized\n    -Wmemset-elt-size\n    -Wmemset-transposed-args\n    -Wmisleading-indentation\n    -Wmismatched-dealloc\n    -Wmismatched-new-delete\n    -Wmismatched-tags\n    -Wmissing-attributes\n    -Wmissing-braces\n    -Wmissing-declarations\n    -Wmissing-field-initializers\n    -Wmissing-include-dirs\n    -Wmissing-profile\n    -Wmissing-requires\n    -Wmissing-template-keyword\n    -Wmultichar\n    -Wmultiple-inheritance\n    -Wmultistatement-macros\n    -Wno-namespaces\n    -Wnarrowing\n    -Wnoexcept\n    -Wnoexcept-type\n    -Wnon-template-friend\n    -Wnon-virtual-dtor\n    -Wnonnull\n    -Wnonnull-compare\n    -Wnormalized=nfkc\n    -Wno-nrvo\n    -Wnull-dereference\n    -Wodr\n    -Wold-style-cast\n    -Wopenacc-parallelism\n    -Wopenmp\n    -Wopenmp-simd\n    -Woverflow\n    -Woverlength-strings\n    -Woverloaded-virtual=2\n    -Wpacked\n    -Wpacked-bitfield-compat\n    -Wpacked-not-aligned\n    -Wno-padded\n    -Wparentheses\n    -Wpedantic\n    -Wpessimizing-move\n    -Wplacement-new=2\n    -Wpmf-conversions\n    -Wpointer-arith\n    -Wpointer-compare\n    -Wpragmas\n    -Wprio-ctor-dtor\n    -Wpsabi\n    -Wrange-loop-construct\n    -Wredundant-decls\n    -Wredundant-move\n    -Wredundant-tags\n    -Wregister\n    -Wreorder\n    -Wrestrict\n    -Wreturn-local-addr\n    -Wreturn-type\n    -Wscalar-storage-order\n    -Wself-move\n    -Wsequence-point\n    -Wshadow=compatible-local\n    -Wshadow=global\n    -Wshadow=local\n    -Wshift-count-negative\n    -Wshift-count-overflow\n    -Wshift-negative-value\n    -Wshift-overflow=2\n    -Wsign-compare\n    -Wsign-conversion\n    -Wsign-promo\n    -Wsized-deallocation\n    -Wsizeof-array-argument\n    -Wsizeof-array-div\n    -Wsizeof-pointer-div\n    -Wsizeof-pointer-memaccess\n    -Wstack-protector\n    -Wstrict-aliasing=3\n    -Wstrict-null-sentinel\n    -Wstrict-overflow\n    -Wstring-compare\n    -Wstringop-overflow=4\n    -Wstringop-overread\n    -Wstringop-truncation\n    -Wsubobject-linkage\n    -Wsuggest-attribute=cold\n    -Wsuggest-attribute=const\n    -Wsuggest-attribute=format\n    -Wsuggest-attribute=malloc\n    -Wsuggest-attribute=noreturn\n    -Wsuggest-attribute=pure\n    -Wsuggest-attribute=returns_nonnull\n    -Wsuggest-final-methods\n    -Wsuggest-final-types\n    -Wsuggest-override\n    -Wswitch\n    -Wswitch-bool\n    -Wswitch-default\n    -Wswitch-enum\n    -Wswitch-outside-range\n    -Wswitch-unreachable\n    -Wsync-nand\n    -Wsynth\n    -Wno-system-headers\n    -Wtautological-compare\n    -Wno-templates\n    -Wterminate\n    -Wtrampolines\n    -Wtrigraphs\n    -Wtrivial-auto-var-init\n    -Wtsan\n    -Wtype-limits\n    -Wundef\n    -Wunicode\n    -Wuninitialized\n    -Wunknown-pragmas\n    -Wunreachable-code\n    -Wunsafe-loop-optimizations\n    -Wunused\n    -Wunused-but-set-parameter\n    -Wunused-but-set-variable\n    -Wunused-const-variable=2\n    -Wunused-function\n    -Wunused-label\n    -Wunused-local-typedefs\n    -Wunused-macros\n    -Wunused-parameter\n    -Wunused-result\n    -Wunused-value\n    -Wunused-variable\n    -Wuse-after-free=3\n    -Wuseless-cast\n    -Wvarargs\n    -Wvariadic-macros\n    -Wvector-operation-performance\n    -Wvexing-parse\n    -Wvirtual-inheritance\n    -Wvirtual-move-assign\n    -Wvla\n    -Wvla-parameter\n    -Wvolatile\n    -Wvolatile-register-var\n    -Wwrite-strings\n    -Wxor-used-as-pow\n    -Wzero-as-null-pointer-constant\n    -Wzero-length-bounds\n)\n
    "},{"location":"community/quality_assurance/#c-standard-library-compliance","title":"C++ standard library compliance","text":"

    Requirement: No prerequisites

    The library has no prerequisites other than the Standard Template Library (STL).

    • The library compiled and tested with both libc++ and libstdc++ to detect subtle differences or incompatibilities.
    • The code checked with Include What You Use (IWYU) that all required standard headers are included.
    • On Windows, the library is compiled with <Windows.h> being included to detect and avoid common bugs.
    • The library is compiled with exceptions disabled to support alternative means of error handling.
    "},{"location":"community/quality_assurance/#stable-public-api","title":"Stable public API","text":"

    Requirement: Stable public API

    Any change to the library does not break the public API.

    • All public API functions are tested with a variety of arguments.
    • The library is compiled and tested with different template arguments for number, string, array, and object types.
    • All lines of the code base are covered by unit tests.
    • Every exception of the library is thrown in the test suite and the error messages and exception ids are checked.

    Requirement: Complete documentation

    The public API is extensively documented.

    • Every public API function has a dedicated page in the API reference documentation with a self-contained code example.
    • All examples in the documentation are tested and changes in their output is treated as an error.
    "},{"location":"community/quality_assurance/#robust-input-processing","title":"Robust input processing","text":"

    Requirement: Standards compliance

    The library is compliant to JSON as defined in RFC 8259.

    • The lexer is tested with all valid Unicode code points and all prefixes of all invalid Unicode code points.
    • The parser is tested against extensive correctness suites for JSON compliance.
    • In addition, the library is continuously fuzz-tested at OSS-Fuzz where the library is checked against billions of inputs.
    "},{"location":"community/quality_assurance/#static-analysis","title":"Static analysis","text":"

    Requirement: State-of-the-art code analysis

    The code is checked with state-of-the-art static code analysis tools.

    • The code is checked with the latest Clang-Tidy.

      Clang-Tidy configuration (.clang-tidy)
      # TODO: The first three checks are only removed to get the CI going. They have to be addressed at some point.\n\nChecks: '*,\n\n         -portability-template-virtual-member-function,\n         -bugprone-use-after-move,\n         -hicpp-invalid-access-moved,\n\n         -altera-id-dependent-backward-branch,\n         -altera-struct-pack-align,\n         -altera-unroll-loops,\n         -android-cloexec-fopen,\n         -boost-use-ranges,\n         -bugprone-easily-swappable-parameters,\n         -cert-err58-cpp,\n         -clang-analyzer-webkit.NoUncountedMemberChecker,\n         -concurrency-mt-unsafe,\n         -cppcoreguidelines-avoid-const-or-ref-data-members,\n         -cppcoreguidelines-avoid-do-while,\n         -cppcoreguidelines-avoid-goto,\n         -cppcoreguidelines-avoid-magic-numbers,\n         -cppcoreguidelines-avoid-non-const-global-variables,\n         -cppcoreguidelines-macro-usage,\n         -cppcoreguidelines-pro-bounds-array-to-pointer-decay,\n         -cppcoreguidelines-pro-bounds-constant-array-index,\n         -cppcoreguidelines-pro-bounds-pointer-arithmetic,\n         -cppcoreguidelines-pro-type-reinterpret-cast,\n         -cppcoreguidelines-pro-type-union-access,\n         -cppcoreguidelines-rvalue-reference-param-not-moved,\n         -cppcoreguidelines-virtual-class-destructor,\n         -fuchsia-default-arguments-calls,\n         -fuchsia-default-arguments-declarations,\n         -fuchsia-overloaded-operator,\n         -google-explicit-constructor,\n         -google-readability-function-size,\n         -google-runtime-int,\n         -google-runtime-references,\n         -hicpp-avoid-goto,\n         -hicpp-explicit-conversions,\n         -hicpp-function-size,\n         -hicpp-no-array-decay,\n         -hicpp-no-assembler,\n         -hicpp-signed-bitwise,\n         -hicpp-uppercase-literal-suffix,\n         -llvm-header-guard,\n         -llvm-include-order,\n         -llvmlibc-*,\n         -misc-use-anonymous-namespace,\n         -misc-confusable-identifiers,\n         -misc-include-cleaner,\n         -misc-no-recursion,\n         -misc-non-private-member-variables-in-classes,\n         -modernize-concat-nested-namespaces,\n         -modernize-type-traits,\n         -modernize-use-constraints,\n         -modernize-use-designated-initializers,\n         -modernize-use-nodiscard,\n         -modernize-use-ranges,\n         -modernize-use-std-numbers,\n         -modernize-use-trailing-return-type,\n         -performance-enum-size,\n         -readability-function-cognitive-complexity,\n         -readability-function-size,\n         -readability-identifier-length,\n         -readability-magic-numbers,\n         -readability-redundant-access-specifiers,\n         -readability-simplify-boolean-expr,\n         -readability-uppercase-literal-suffix'\n\nCheckOptions:\n  - key: hicpp-special-member-functions.AllowSoleDefaultDtor\n    value: 1\n\nWarningsAsErrors: '*'\n\n#HeaderFilterRegex: '.*nlohmann.*'\nHeaderFilterRegex: '.*hpp$'\n
    • The code is checked with the latest Cppcheck with all warnings enabled.

    • The code is checked with the latest Clang Static Analyzer with 89 enabled rules.
    • The code is checked with Infer.
    • The code is checked with Codacy.
    "},{"location":"community/quality_assurance/#dynamic-analysis","title":"Dynamic analysis","text":"

    Requirement: Correctness

    The library is checked for memory correctness and absence of undefined behavior.

    • The test suite is executed with enabled runtime assertions to check invariants and preconditions of functions to detect undefined behavior.
    • The test suite is executed with Valgrind (Memcheck) to detect memory leaks.
    • The test suite is executed with Sanitizers (address sanitizer, undefined behavior sanitizer, integer overflow detection, nullability violations).
    "},{"location":"community/quality_assurance/#style-check","title":"Style check","text":"

    Requirement: Common code style

    A common code style is used throughout all code files of the library.

    • The code is formatted with Artistic Style (astyle) against a style configuration that is also enforced in the CI.

      Astyle configuration (tools/astyle/.astylerc)
      # Configuration for Artistic Style\n# see https://astyle.sourceforge.net/astyle.html\n\n#######################\n# Brace Style Options #\n#######################\n\n# use Allman style for braces\n--style=allman\n\n###############\n# Tab Options #\n###############\n\n# indent using 4 spaces\n--indent=spaces=4\n\n#######################\n# Indentation Options #\n#######################\n\n# indent access modifiers one half indent\n--indent-modifiers\n\n# indent switch cases to the switch block\n--indent-switches\n\n# indent preprocessor blocks\n--indent-preproc-block\n\n# indent preprocessor defines\n--indent-preproc-define\n\n# indent C++ comments\n--indent-col1-comments\n\n###################\n# Padding Options #\n###################\n\n# insert space padding around operators\n--pad-oper\n\n# insert space between if/for/while... and the following parentheses\n--pad-header\n\n# attach the pointer to the variable type (left)\n--align-pointer=type\n\n# attach the reference to the variable type (left)\n--align-reference=type\n\n######################\n# Formatting Options #\n######################\n\n# add braces to unbraced one line conditional statements\n--add-braces\n\n# convert tabs to spaces\n--convert-tabs\n\n# closes whitespace between the ending angle brackets of template definitions\n--close-templates\n\n#################\n# Other Options #\n#################\n\n# do not create backup files\n--suffix=none\n\n# preserve the original file date\n--preserve-date\n\n# display only the files that have been formatted\n--formatted\n\n# for the linux (LF) line end style\n--lineend=linux\n
    • The code style is checked with cpplint with 61 enabled rules.

    "},{"location":"community/quality_assurance/#simple-integration","title":"Simple integration","text":"

    Requirement: Single header

    The library can be used by adding a single header to a C++ project.

    • An amalgamation script is used to check if the source code is exposed as self-contained single-header file.
    • The test suite is checked against the amalgamated source file as well as the individual source file.

    Requirement: CMake as primary development tool

    All library functions are exposed and usable by CMake.

    • All library options are exposed as CMake options and tested.
    • The library is tested against the earliest supported CMake version.
    "},{"location":"community/security_policy/","title":"Security Policy","text":""},{"location":"community/security_policy/#reporting-a-vulnerability","title":"Reporting a Vulnerability","text":"

    We value the security of our users and appreciate your efforts to responsibly disclose vulnerabilities. If you have identified a security vulnerability in this repository, please use the GitHub Security Advisory \"Report a Vulnerability\" tab.

    Until it is published, this draft security advisory will only be visible to the maintainers of this project. Other users and teams may be added once the advisory is created.

    We will send a response indicating the next steps in handling your report. After the initial reply to your report, we will keep you informed of the progress towards a fix and full announcement and may ask for additional information or guidance.

    For vulnerabilities in third-party dependencies or modules, please report them directly to the respective maintainers.

    "},{"location":"community/security_policy/#additional-resources","title":"Additional Resources","text":"
    • Explore security-related topics and contribute to tools and projects through GitHub Security Lab.
    • Learn more about responsible disclosure and reporting vulnerabilities in GitHub at About coordinated disclosure of security vulnerabilities.

    We sincerely thank you for contributing to the security and integrity of this project!

    "},{"location":"features/arbitrary_types/","title":"Arbitrary Type Conversions","text":"

    Every type can be serialized in JSON, not just STL containers and scalar types. Usually, you would do something along those lines:

    namespace ns {\n    // a simple struct to model a person\n    struct person {\n        std::string name;\n        std::string address;\n        int age;\n    };\n} // namespace ns\n\nns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n// convert to JSON: copy each value into the JSON object\njson j;\nj[\"name\"] = p.name;\nj[\"address\"] = p.address;\nj[\"age\"] = p.age;\n\n// ...\n\n// convert from JSON: copy each value from the JSON object\nns::person p {\n    j[\"name\"].template get<std::string>(),\n    j[\"address\"].template get<std::string>(),\n    j[\"age\"].template get<int>()\n};\n

    It works, but that's quite a lot of boilerplate... Fortunately, there's a better way:

    // create a person\nns::person p {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n// conversion: person -> json\njson j = p;\n\nstd::cout << j << std::endl;\n// {\"address\":\"744 Evergreen Terrace\",\"age\":60,\"name\":\"Ned Flanders\"}\n\n// conversion: json -> person\nauto p2 = j.template get<ns::person>();\n\n// that's it\nassert(p == p2);\n
    "},{"location":"features/arbitrary_types/#basic-usage","title":"Basic usage","text":"

    To make this work with one of your types, you only need to provide two functions:

    using json = nlohmann::json;\n\nnamespace ns {\n    void to_json(json& j, const person& p) {\n        j = json{ {\"name\", p.name}, {\"address\", p.address}, {\"age\", p.age} };\n    }\n\n    void from_json(const json& j, person& p) {\n        j.at(\"name\").get_to(p.name);\n        j.at(\"address\").get_to(p.address);\n        j.at(\"age\").get_to(p.age);\n    }\n} // namespace ns\n

    That's all! When calling the json constructor with your type, your custom to_json method will be automatically called. Likewise, when calling template get<your_type>() or get_to(your_type&), the from_json method will be called.

    Some important things:

    • Those methods MUST be in your type's namespace (which can be the global namespace), or the library will not be able to locate them (in this example, they are in namespace ns, where person is defined).
    • Those methods MUST be available (e.g., proper headers must be included) everywhere you use these conversions. Look at #1108 for errors that may occur otherwise.
    • When using template get<your_type>(), your_type MUST be DefaultConstructible. (There is a way to bypass this requirement described later.)
    • In function from_json, use function at() to access the object values rather than operator[]. In case a key does not exist, at throws an exception that you can handle, whereas operator[] exhibits undefined behavior.
    • You do not need to add serializers or deserializers for STL types like std::vector: the library already implements these.
    "},{"location":"features/arbitrary_types/#simplify-your-life-with-macros","title":"Simplify your life with macros","text":"

    If you just want to serialize/deserialize some structs, the to_json/from_json functions can be a lot of boilerplate.

    There are six macros to make your life easier as long as you (1) want to use a JSON object as serialization and (2) want to use the member variable names as object keys in that object:

    • NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(name, member1, member2, ...) is to be defined inside the namespace of the class/struct to create code for. It will throw an exception in from_json() due to a missing value in the JSON object.
    • NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT(name, member1, member2, ...) is to be defined inside the namespace of the class/struct to create code for. It will not throw an exception in from_json() due to a missing value in the JSON object, but fills in values from object which is default-constructed by the type.
    • NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE(name, member1, member2, ...) is to be defined inside the namespace of the class/struct to create code for. It does not define a from_json() function which is needed in case the type does not have a default constructor.
    • NLOHMANN_DEFINE_TYPE_INTRUSIVE(name, member1, member2, ...) is to be defined inside the class/struct to create code for. This macro can also access private members. It will throw an exception in from_json() due to a missing value in the JSON object.
    • NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT(name, member1, member2, ...) is to be defined inside the class/struct to create code for. This macro can also access private members. It will not throw an exception in from_json() due to a missing value in the JSON object, but fills in values from object which is default-constructed by the type.
    • NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE(name, member1, member2, ...) is to be defined inside the class/struct to create code for. This macro can also access private members. It does not define a from_json() function which is needed in case the type does not have a default constructor.

    Furthermore, there exist versions to use in case of derived classes:

    Need access to private members Need only de-serialization Allow missing values when de-serializing macro NLOHMANN_DEFINE_TYPE_INTRUSIVE NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE

    For derived classes and structs, use the following macros

    Need access to private members Need only de-serialization Allow missing values when de-serializing macro NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE

    Implementation limits

    • The current macro implementations are limited to at most 64 member variables. If you want to serialize/deserialize types with more than 64 member variables, you need to define the to_json/from_json functions manually.
    Example

    The to_json/from_json functions for the person struct above can be created with:

    namespace ns {\n    NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(person, name, address, age)\n}\n

    Here is an example with private members, where NLOHMANN_DEFINE_TYPE_INTRUSIVE is needed:

    namespace ns {\n    class address {\n      private:\n        std::string street;\n        int housenumber;\n        int postcode;\n\n      public:\n        NLOHMANN_DEFINE_TYPE_INTRUSIVE(address, street, housenumber, postcode)\n    };\n}\n
    "},{"location":"features/arbitrary_types/#how-do-i-convert-third-party-types","title":"How do I convert third-party types?","text":"

    This requires a bit more advanced technique. But first, let's see how this conversion mechanism works:

    The library uses JSON Serializers to convert types to json. The default serializer for nlohmann::json is nlohmann::adl_serializer (ADL means Argument-Dependent Lookup).

    It is implemented like this (simplified):

    template <typename T>\nstruct adl_serializer {\n    static void to_json(json& j, const T& value) {\n        // calls the \"to_json\" method in T's namespace\n    }\n\n    static void from_json(const json& j, T& value) {\n        // same thing, but with the \"from_json\" method\n    }\n};\n

    This serializer works fine when you have control over the type's namespace. However, what about boost::optional or std::filesystem::path (C++17)? Hijacking the boost namespace is pretty bad, and it's illegal to add something other than template specializations to std...

    To solve this, you need to add a specialization of adl_serializer to the nlohmann namespace, here's an example:

    // partial specialization (full specialization works too)\nNLOHMANN_JSON_NAMESPACE_BEGIN\ntemplate <typename T>\nstruct adl_serializer<boost::optional<T>> {\n    static void to_json(json& j, const boost::optional<T>& opt) {\n        if (opt == boost::none) {\n            j = nullptr;\n        } else {\n            j = *opt; // this will call adl_serializer<T>::to_json which will\n                      // find the free function to_json in T's namespace!\n        }\n    }\n\n    static void from_json(const json& j, boost::optional<T>& opt) {\n        if (j.is_null()) {\n            opt = boost::none;\n        } else {\n            opt = j.template get<T>(); // same as above, but with\n                              // adl_serializer<T>::from_json\n        }\n    }\n};\nNLOHMANN_JSON_NAMESPACE_END\n

    ABI compatibility

    Use NLOHMANN_JSON_NAMESPACE_BEGIN and NLOHMANN_JSON_NAMESPACE_END instead of namespace nlohmann { } in code which may be linked with different versions of this library.

    "},{"location":"features/arbitrary_types/#how-can-i-use-get-for-non-default-constructiblenon-copyable-types","title":"How can I use get() for non-default constructible/non-copyable types?","text":"

    There is a way, if your type is MoveConstructible. You will need to specialize the adl_serializer as well, but with a special from_json overload:

    struct move_only_type {\n    move_only_type() = delete;\n    move_only_type(int ii): i(ii) {}\n    move_only_type(const move_only_type&) = delete;\n    move_only_type(move_only_type&&) = default;\n\n    int i;\n};\n\nnamespace nlohmann {\n    template <>\n    struct adl_serializer<move_only_type> {\n        // note: the return type is no longer 'void', and the method only takes\n        // one argument\n        static move_only_type from_json(const json& j) {\n            return {j.template get<int>()};\n        }\n\n        // Here's the catch! You must provide a to_json method! Otherwise, you\n        // will not be able to convert move_only_type to json, since you fully\n        // specialized adl_serializer on that type\n        static void to_json(json& j, move_only_type t) {\n            j = t.i;\n        }\n    };\n}\n
    "},{"location":"features/arbitrary_types/#can-i-write-my-own-serializer-advanced-use","title":"Can I write my own serializer? (Advanced use)","text":"

    Yes. You might want to take a look at unit-udt.cpp in the test suite, to see a few examples.

    If you write your own serializer, you'll need to do a few things:

    • use a different basic_json alias than nlohmann::json (the last template parameter of basic_json is the JSONSerializer)
    • use your basic_json alias (or a template parameter) in all your to_json/from_json methods
    • use nlohmann::to_json and nlohmann::from_json when you need ADL

    Here is an example, without simplifications, that only accepts types with a size <= 32, and uses ADL.

    // You should use void as a second template argument\n// if you don't need compile-time checks on T\ntemplate<typename T, typename SFINAE = typename std::enable_if<sizeof(T) <= 32>::type>\nstruct less_than_32_serializer {\n    template <typename BasicJsonType>\n    static void to_json(BasicJsonType& j, T value) {\n        // we want to use ADL, and call the correct to_json overload\n        using nlohmann::to_json; // this method is called by adl_serializer,\n                                 // this is where the magic happens\n        to_json(j, value);\n    }\n\n    template <typename BasicJsonType>\n    static void from_json(const BasicJsonType& j, T& value) {\n        // same thing here\n        using nlohmann::from_json;\n        from_json(j, value);\n    }\n};\n

    Be very careful when reimplementing your serializer, you can stack overflow if you don't pay attention:

    template <typename T, void>\nstruct bad_serializer\n{\n    template <typename BasicJsonType>\n    static void to_json(BasicJsonType& j, const T& value) {\n      // this calls BasicJsonType::json_serializer<T>::to_json(j, value);\n      // if BasicJsonType::json_serializer == bad_serializer ... oops!\n      j = value;\n    }\n\n    template <typename BasicJsonType>\n    static void from_json(const BasicJsonType& j, T& value) {\n      // this calls BasicJsonType::json_serializer<T>::from_json(j, value);\n      // if BasicJsonType::json_serializer == bad_serializer ... oops!\n      value = j.template template get<T>(); // oops!\n    }\n};\n
    "},{"location":"features/assertions/","title":"Runtime Assertions","text":"

    The code contains numerous debug assertions to ensure class invariants are valid or to detect undefined behavior. Whereas the former class invariants are nothing to be concerned of, the latter checks for undefined behavior are to detect bugs in client code.

    "},{"location":"features/assertions/#switch-off-runtime-assertions","title":"Switch off runtime assertions","text":"

    Runtime assertions can be switched off by defining the preprocessor macro NDEBUG (see the documentation of assert) which is the default for release builds.

    "},{"location":"features/assertions/#change-assertion-behavior","title":"Change assertion behavior","text":"

    The behavior of runtime assertions can be changes by defining macro JSON_ASSERT(x) before including the json.hpp header.

    "},{"location":"features/assertions/#function-with-runtime-assertions","title":"Function with runtime assertions","text":""},{"location":"features/assertions/#unchecked-object-access-to-a-const-value","title":"Unchecked object access to a const value","text":"

    Function operator[] implements unchecked access for objects. Whereas a missing key is added in case of non-const objects, accessing a const object with a missing key is undefined behavior (think of a dereferenced null pointer) and yields a runtime assertion.

    If you are not sure whether an element in an object exists, use checked access with the at function or call the contains function before.

    See also the documentation on element access.

    Example 1: Missing object key

    The following code will trigger an assertion at runtime:

    #include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    const json j = {{\"key\", \"value\"}};\n    auto v = j[\"missing\"];\n}\n

    Output:

    Assertion failed: (m_value.object->find(key) != m_value.object->end()), function operator[], file json.hpp, line 2144.\n
    "},{"location":"features/assertions/#constructing-from-an-uninitialized-iterator-range","title":"Constructing from an uninitialized iterator range","text":"

    Constructing a JSON value from an iterator range (see constructor) with an uninitialized iterator is undefined behavior and yields a runtime assertion.

    Example 2: Uninitialized iterator range

    The following code will trigger an assertion at runtime:

    #include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    json::iterator it1, it2;\n    json j(it1, it2);\n}\n

    Output:

    Assertion failed: (m_object != nullptr), function operator++, file iter_impl.hpp, line 368.\n
    "},{"location":"features/assertions/#operations-on-uninitialized-iterators","title":"Operations on uninitialized iterators","text":"

    Any operation on uninitialized iterators (i.e., iterators that are not associated with any JSON value) is undefined behavior and yields a runtime assertion.

    Example 3: Uninitialized iterator

    The following code will trigger an assertion at runtime:

    #include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n  json::iterator it;\n  ++it;\n}\n

    Output:

    Assertion failed: (m_object != nullptr), function operator++, file iter_impl.hpp, line 368.\n
    "},{"location":"features/assertions/#changes","title":"Changes","text":""},{"location":"features/assertions/#reading-from-a-null-file-or-char-pointer","title":"Reading from a null FILE or char pointer","text":"

    Reading from a null FILE or char pointer in C++ is undefined behavior. Until version 3.11.4, this library asserted that the pointer was not nullptr using a runtime assertion. If assertions were disabled, this would result in undefined behavior. Since version 3.11.4, this library checks for nullptr and throws a parse_error.101 to prevent the undefined behavior.

    Example 4: Reading from null pointer

    The following code will trigger an assertion at runtime:

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::FILE* f = std::fopen(\"nonexistent_file.json\", \"r\");\n    try {\n        json j = json::parse(f);\n    } catch (std::exception& e) {\n        std::cerr << e.what() << std::endl;\n    }\n}\n

    Output:

    [json.exception.parse_error.101] parse error: attempting to parse an empty input; check that your input string or stream contains the expected JSON\n
    "},{"location":"features/assertions/#see-also","title":"See also","text":"
    • JSON_ASSERT - control behavior of runtime assertions
    "},{"location":"features/binary_values/","title":"Binary Values","text":"

    The library implements several binary formats that encode JSON in an efficient way. Most of these formats support binary values; that is, values that have semantics define outside the library and only define a sequence of bytes to be stored.

    JSON itself does not have a binary value. As such, binary values are an extension that this library implements to store values received by a binary format. Binary values are never created by the JSON parser, and are only part of a serialized JSON text if they have been created manually or via a binary format.

    "},{"location":"features/binary_values/#api-for-binary-values","title":"API for binary values","text":"
    classDiagram\n\nclass binary_t [\"json::binary_t\"] {\n    +void set_subtype(std::uint64_t subtype)\n    +void clear_subtype()\n    +std::uint64_t subtype() const\n    +bool has_subtype() const\n}\n\nclass vector [\"std::vector<uint8_t>\"]\n\nvector <|-- binary_t

    By default, binary values are stored as std::vector<std::uint8_t>. This type can be changed by providing a template parameter to the basic_json type. To store binary subtypes, the storage type is extended and exposed as json::binary_t:

    auto binary = json::binary_t({0xCA, 0xFE, 0xBA, 0xBE});\nauto binary_with_subtype = json::binary_t({0xCA, 0xFE, 0xBA, 0xBE}, 42);\n

    There are several convenience functions to check and set the subtype:

    binary.has_subtype();                   // returns false\nbinary_with_subtype.has_subtype();      // returns true\n\nbinary_with_subtype.clear_subtype();\nbinary_with_subtype.has_subtype();      // returns true\n\nbinary_with_subtype.set_subtype(42);\nbinary.set_subtype(23);\n\nbinary.subtype();                       // returns 23\n

    As json::binary_t is subclassing std::vector<std::uint8_t>, all member functions are available:

    binary.size();  // returns 4\nbinary[1];      // returns 0xFE\n

    JSON values can be constructed from json::binary_t:

    json j = binary;\n

    Binary values are primitive values just like numbers or strings:

    j.is_binary();    // returns true\nj.is_primitive(); // returns true\n

    Given a binary JSON value, the binary_t can be accessed by reference as via get_binary():

    j.get_binary().has_subtype();  // returns true\nj.get_binary().size();         // returns 4\n

    For convenience, binary JSON values can be constructed via json::binary:

    auto j2 = json::binary({0xCA, 0xFE, 0xBA, 0xBE}, 23);\nauto j3 = json::binary({0xCA, 0xFE, 0xBA, 0xBE});\n\nj2 == j;                        // returns true\nj3.get_binary().has_subtype();  // returns false\nj3.get_binary().subtype();      // returns std::uint64_t(-1) as j3 has no subtype\n
    "},{"location":"features/binary_values/#serialization","title":"Serialization","text":"

    Binary values are serialized differently according to the formats.

    "},{"location":"features/binary_values/#json","title":"JSON","text":"

    JSON does not have a binary type, and this library does not introduce a new type as this would break conformance. Instead, binary values are serialized as an object with two keys: bytes holds an array of integers, and subtype is an integer or null.

    Example

    Code:

    // create a binary value of subtype 42\njson j;\nj[\"binary\"] = json::binary({0xCA, 0xFE, 0xBA, 0xBE}, 42);\n\n// serialize to standard output\nstd::cout << j.dump(2) << std::endl;\n

    Output:

    {\n  \"binary\": {\n    \"bytes\": [202, 254, 186, 190],\n    \"subtype\": 42\n  }\n}\n

    No roundtrip for binary values

    The JSON parser will not parse the objects generated by binary values back to binary values. This is by design to remain standards compliant. Serializing binary values to JSON is only implemented for debugging purposes.

    "},{"location":"features/binary_values/#bjdata","title":"BJData","text":"

    BJData neither supports binary values nor subtypes, and proposes to serialize binary values as array of uint8 values. This translation is implemented by the library.

    Example

    Code:

    // create a binary value of subtype 42 (will be ignored in BJData)\njson j;\nj[\"binary\"] = json::binary({0xCA, 0xFE, 0xBA, 0xBE}, 42);\n\n// convert to BJData\nauto v = json::to_bjdata(j);      \n

    v is a std::vector<std::uint8t> with the following 20 elements:

    0x7B                                             // '{'\n    0x69 0x06                                    // i 6 (length of the key)\n    0x62 0x69 0x6E 0x61 0x72 0x79                // \"binary\"\n    0x5B                                         // '['\n        0x55 0xCA 0x55 0xFE 0x55 0xBA 0x55 0xBE  // content (each byte prefixed with 'U')\n    0x5D                                         // ']'\n0x7D                                             // '}'\n

    The following code uses the type and size optimization for UBJSON:

    // convert to UBJSON using the size and type optimization\nauto v = json::to_bjdata(j, true, true);\n

    The resulting vector has 22 elements; the optimization is not effective for examples with few values:

    0x7B                                // '{'\n    0x23 0x69 0x01                  // '#' 'i' type of the array elements: unsigned integers\n    0x69 0x06                       // i 6 (length of the key)\n    0x62 0x69 0x6E 0x61 0x72 0x79   // \"binary\"\n    0x5B                            // '[' array\n        0x24 0x55                   // '$' 'U' type of the array elements: unsigned integers\n        0x23 0x69 0x04              // '#' i 4 number of array elements\n        0xCA 0xFE 0xBA 0xBE         // content\n

    Note that subtype (42) is not serialized and that UBJSON has no binary type, and deserializing v would yield the following value:

    {\n  \"binary\": [202, 254, 186, 190]\n}\n
    "},{"location":"features/binary_values/#bson","title":"BSON","text":"

    BSON supports binary values and subtypes. If a subtype is given, it is used and added as unsigned 8-bit integer. If no subtype is given, the generic binary subtype 0x00 is used.

    Example

    Code:

    // create a binary value of subtype 42\njson j;\nj[\"binary\"] = json::binary({0xCA, 0xFE, 0xBA, 0xBE}, 42);\n\n// convert to BSON\nauto v = json::to_bson(j);      \n

    v is a std::vector<std::uint8t> with the following 22 elements:

    0x16 0x00 0x00 0x00                         // number of bytes in the document\n    0x05                                    // binary value\n        0x62 0x69 0x6E 0x61 0x72 0x79 0x00  // key \"binary\" + null byte\n        0x04 0x00 0x00 0x00                 // number of bytes\n        0x2a                                // subtype\n        0xCA 0xFE 0xBA 0xBE                 // content\n0x00                                        // end of the document\n

    Note that the serialization preserves the subtype, and deserializing v would yield the following value:

    {\n  \"binary\": {\n    \"bytes\": [202, 254, 186, 190],\n    \"subtype\": 42\n  }\n}\n
    "},{"location":"features/binary_values/#cbor","title":"CBOR","text":"

    CBOR supports binary values, but no subtypes. Subtypes will be serialized as tags. Any binary value will be serialized as byte strings. The library will choose the smallest representation using the length of the byte array.

    Example

    Code:

    // create a binary value of subtype 42\njson j;\nj[\"binary\"] = json::binary({0xCA, 0xFE, 0xBA, 0xBE}, 42);\n\n// convert to CBOR\nauto v = json::to_cbor(j);      \n

    v is a std::vector<std::uint8t> with the following 15 elements:

    0xA1                                   // map(1)\n    0x66                               // text(6)\n        0x62 0x69 0x6E 0x61 0x72 0x79  // \"binary\"\n    0xD8 0x2A                          // tag(42)\n    0x44                               // bytes(4)\n        0xCA 0xFE 0xBA 0xBE            // content\n

    Note that the subtype is serialized as tag. However, parsing tagged values yield a parse error unless json::cbor_tag_handler_t::ignore or json::cbor_tag_handler_t::store is passed to json::from_cbor.

    {\n  \"binary\": {\n    \"bytes\": [202, 254, 186, 190],\n    \"subtype\": null\n  }\n}\n
    "},{"location":"features/binary_values/#messagepack","title":"MessagePack","text":"

    MessagePack supports binary values and subtypes. If a subtype is given, the ext family is used. The library will choose the smallest representation among fixext1, fixext2, fixext4, fixext8, ext8, ext16, and ext32. The subtype is then added as signed 8-bit integer.

    If no subtype is given, the bin family (bin8, bin16, bin32) is used.

    Example

    Code:

    // create a binary value of subtype 42\njson j;\nj[\"binary\"] = json::binary({0xCA, 0xFE, 0xBA, 0xBE}, 42);\n\n// convert to MessagePack\nauto v = json::to_msgpack(j);      \n

    v is a std::vector<std::uint8t> with the following 14 elements:

    0x81                                   // fixmap1\n    0xA6                               // fixstr6\n        0x62 0x69 0x6E 0x61 0x72 0x79  // \"binary\"\n    0xD6                               // fixext4\n        0x2A                           // subtype\n        0xCA 0xFE 0xBA 0xBE            // content\n

    Note that the serialization preserves the subtype, and deserializing v would yield the following value:

    {\n  \"binary\": {\n    \"bytes\": [202, 254, 186, 190],\n    \"subtype\": 42\n  }\n}\n
    "},{"location":"features/binary_values/#ubjson","title":"UBJSON","text":"

    UBJSON neither supports binary values nor subtypes, and proposes to serialize binary values as array of uint8 values. This translation is implemented by the library.

    Example

    Code:

    // create a binary value of subtype 42 (will be ignored in UBJSON)\njson j;\nj[\"binary\"] = json::binary({0xCA, 0xFE, 0xBA, 0xBE}, 42);\n\n// convert to UBJSON\nauto v = json::to_ubjson(j);      \n

    v is a std::vector<std::uint8t> with the following 20 elements:

    0x7B                                             // '{'\n    0x69 0x06                                    // i 6 (length of the key)\n    0x62 0x69 0x6E 0x61 0x72 0x79                // \"binary\"\n    0x5B                                         // '['\n        0x55 0xCA 0x55 0xFE 0x55 0xBA 0x55 0xBE  // content (each byte prefixed with 'U')\n    0x5D                                         // ']'\n0x7D                                             // '}'\n

    The following code uses the type and size optimization for UBJSON:

    // convert to UBJSON using the size and type optimization\nauto v = json::to_ubjson(j, true, true);\n

    The resulting vector has 23 elements; the optimization is not effective for examples with few values:

    0x7B                                // '{'\n    0x24                            // '$' type of the object elements\n    0x5B                            // '[' array\n    0x23 0x69 0x01                  // '#' i 1 number of object elements\n    0x69 0x06                       // i 6 (length of the key)\n    0x62 0x69 0x6E 0x61 0x72 0x79   // \"binary\"\n        0x24 0x55                   // '$' 'U' type of the array elements: unsigned integers\n        0x23 0x69 0x04              // '#' i 4 number of array elements\n        0xCA 0xFE 0xBA 0xBE         // content\n

    Note that subtype (42) is not serialized and that UBJSON has no binary type, and deserializing v would yield the following value:

    {\n  \"binary\": [202, 254, 186, 190]\n}\n
    "},{"location":"features/comments/","title":"Comments","text":"

    This library does not support comments by default. It does so for three reasons:

    1. Comments are not part of the JSON specification. You may argue that // or /* */ are allowed in JavaScript, but JSON is not JavaScript.
    2. This was not an oversight: Douglas Crockford wrote on this in May 2012:

      I removed comments from JSON because I saw people were using them to hold parsing directives, a practice which would have destroyed interoperability. I know that the lack of comments makes some people sad, but it shouldn't.

      Suppose you are using JSON to keep configuration files, which you would like to annotate. Go ahead and insert all the comments you like. Then pipe it through JSMin before handing it to your JSON parser.

    3. It is dangerous for interoperability if some libraries would add comment support while others don't. Please check The Harmful Consequences of the Robustness Principle on this.

    However, you can pass set parameter ignore_comments to true in the parse function to ignore // or /* */ comments. Comments will then be treated as whitespace.

    Example

    Consider the following JSON with comments.

    {\n    // update in 2006: removed Pluto\n    \"planets\": [\"Mercury\", \"Venus\", \"Earth\", \"Mars\",\n                \"Jupiter\", \"Uranus\", \"Neptune\" /*, \"Pluto\" */]\n}\n

    When calling parse without additional argument, a parse error exception is thrown. If ignore_comments is set to true, the comments are ignored during parsing:

    #include <iostream>\n#include \"json.hpp\"\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::string s = R\"(\n    {\n        // update in 2006: removed Pluto\n        \"planets\": [\"Mercury\", \"Venus\", \"Earth\", \"Mars\",\n                    \"Jupiter\", \"Uranus\", \"Neptune\" /*, \"Pluto\" */]\n    }\n    )\";\n\n    try\n    {\n        json j = json::parse(s);\n    }\n    catch (json::exception &e)\n    {\n        std::cout << e.what() << std::endl;\n    }\n\n    json j = json::parse(s,\n                         /* callback */ nullptr,\n                         /* allow exceptions */ true,\n                         /* ignore_comments */ true);\n    std::cout << j.dump(2) << '\\n';\n}\n

    Output:

    [json.exception.parse_error.101] parse error at line 3, column 9:\nsyntax error while parsing object key - invalid literal;\nlast read: '<U+000A>    {<U+000A>        /'; expected string literal\n
    {\n  \"planets\": [\n    \"Mercury\",\n    \"Venus\",\n    \"Earth\",\n    \"Mars\",\n    \"Jupiter\",\n    \"Uranus\",\n    \"Neptune\"\n  ]\n}\n
    "},{"location":"features/enum_conversion/","title":"Specializing enum conversion","text":"

    By default, enum values are serialized to JSON as integers. In some cases this could result in undesired behavior. If an enum is modified or re-ordered after data has been serialized to JSON, the later de-serialized JSON data may be undefined or a different enum value than was originally intended.

    It is possible to more precisely specify how a given enum is mapped to and from JSON as shown below:

    // example enum type declaration\nenum TaskState {\n    TS_STOPPED,\n    TS_RUNNING,\n    TS_COMPLETED,\n    TS_INVALID=-1,\n};\n\n// map TaskState values to JSON as strings\nNLOHMANN_JSON_SERIALIZE_ENUM( TaskState, {\n    {TS_INVALID, nullptr},\n    {TS_STOPPED, \"stopped\"},\n    {TS_RUNNING, \"running\"},\n    {TS_COMPLETED, \"completed\"},\n})\n

    The NLOHMANN_JSON_SERIALIZE_ENUM() macro declares a set of to_json() / from_json() functions for type TaskState while avoiding repetition and boilerplate serialization code.

    "},{"location":"features/enum_conversion/#usage","title":"Usage","text":"
    // enum to JSON as string\njson j = TS_STOPPED;\nassert(j == \"stopped\");\n\n// json string to enum\njson j3 = \"running\";\nassert(j3.template get<TaskState>() == TS_RUNNING);\n\n// undefined json value to enum (where the first map entry above is the default)\njson jPi = 3.14;\nassert(jPi.template get<TaskState>() == TS_INVALID );\n
    "},{"location":"features/enum_conversion/#notes","title":"Notes","text":"

    Just as in Arbitrary Type Conversions above,

    • NLOHMANN_JSON_SERIALIZE_ENUM() MUST be declared in your enum type's namespace (which can be the global namespace), or the library will not be able to locate it, and it will default to integer serialization.
    • It MUST be available (e.g., proper headers must be included) everywhere you use the conversions.

    Other Important points:

    • When using template get<ENUM_TYPE>(), undefined JSON values will default to the first pair specified in your map. Select this default pair carefully.
    • If an enum or JSON value is specified more than once in your map, the first matching occurrence from the top of the map will be returned when converting to or from JSON.
    • To disable the default serialization of enumerators as integers and force a compiler error instead, see JSON_DISABLE_ENUM_SERIALIZATION.
    "},{"location":"features/iterators/","title":"Iterators","text":""},{"location":"features/iterators/#overview","title":"Overview","text":"

    A basic_json value is a container and allows access via iterators. Depending on the value type, basic_json stores zero or more values.

    As for other containers, begin() returns an iterator to the first value and end() returns an iterator to the value following the last value. The latter iterator is a placeholder and cannot be dereferenced. In case of null values, empty arrays, or empty objects, begin() will return end().

    "},{"location":"features/iterators/#iteration-order-for-objects","title":"Iteration order for objects","text":"

    When iterating over objects, values are ordered with respect to the object_comparator_t type which defaults to std::less. See the types documentation for more information.

    Example
    // create JSON object {\"one\": 1, \"two\": 2, \"three\": 3}\njson j;\nj[\"one\"] = 1;\nj[\"two\"] = 2;\nj[\"three\"] = 3;\n\nfor (auto it = j.begin(); it != j.end(); ++it)\n{\n    std::cout << *it << std::endl;\n}\n

    Output:

    1\n3\n2\n

    The reason for the order is the lexicographic ordering of the object keys \"one\", \"three\", \"two\".

    "},{"location":"features/iterators/#access-object-key-during-iteration","title":"Access object key during iteration","text":"

    The JSON iterators have two member functions, key() and value() to access the object key and stored value, respectively. When calling key() on a non-object iterator, an invalid_iterator.207 exception is thrown.

    Example
    // create JSON object {\"one\": 1, \"two\": 2, \"three\": 3}\njson j;\nj[\"one\"] = 1;\nj[\"two\"] = 2;\nj[\"three\"] = 3;\n\nfor (auto it = j.begin(); it != j.end(); ++it)\n{\n    std::cout << it.key() << \" : \" << it.value() << std::endl;\n}\n

    Output:

    one : 1\nthree : 3\ntwo : 2\n
    "},{"location":"features/iterators/#range-based-for-loops","title":"Range-based for loops","text":"

    C++11 allows using range-based for loops to iterate over a container.

    for (auto it : j_object)\n{\n    // \"it\" is of type json::reference and has no key() member\n    std::cout << \"value: \" << it << '\\n';\n}\n

    For this reason, the items() function allows accessing iterator::key() and iterator::value() during range-based for loops. In these loops, a reference to the JSON values is returned, so there is no access to the underlying iterator.

    for (auto& el : j_object.items())\n{\n    std::cout << \"key: \" << el.key() << \", value:\" << el.value() << '\\n';\n}\n

    The items() function also allows using structured bindings (C++17):

    for (auto& [key, val] : j_object.items())\n{\n    std::cout << \"key: \" << key << \", value:\" << val << '\\n';\n}\n

    Note

    When iterating over an array, key() will return the index of the element as string. For primitive types (e.g., numbers), key() returns an empty string.

    Warning

    Using items() on temporary objects is dangerous. Make sure the object's lifetime exceeds the iteration. See #2040 for more information.

    "},{"location":"features/iterators/#reverse-iteration-order","title":"Reverse iteration order","text":"

    rbegin() and rend() return iterators in the reverse sequence.

    Example
    json j = {1, 2, 3, 4};\n\nfor (auto it = j.rbegin(); it != j.rend(); ++it)\n{\n    std::cout << *it << std::endl;\n}\n

    Output:

    4\n3\n2\n1\n
    "},{"location":"features/iterators/#iterating-strings-and-binary-values","title":"Iterating strings and binary values","text":"

    Note that \"value\" means a JSON value in this setting, not values stored in the underlying containers. That is, *begin() returns the complete string or binary array and is also safe the underlying string or binary array is empty.

    Example
    json j = \"Hello, world\";\nfor (auto it = j.begin(); it != j.end(); ++it)\n{\n    std::cout << *it << std::endl;\n}\n

    Output:

    \"Hello, world\"\n
    "},{"location":"features/iterators/#iterator-invalidation","title":"Iterator invalidation","text":"Operations invalidated iterators clear all"},{"location":"features/json_patch/","title":"JSON Patch and Diff","text":""},{"location":"features/json_patch/#patches","title":"Patches","text":"

    JSON Patch (RFC 6902) defines a JSON document structure for expressing a sequence of operations to apply to a JSON document. With the patch function, a JSON Patch is applied to the current JSON value by executing all operations from the patch.

    Example

    The following code shows how a JSON patch is applied to a value.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // the original document\n    json doc = R\"(\n        {\n          \"baz\": \"qux\",\n          \"foo\": \"bar\"\n        }\n    )\"_json;\n\n    // the patch\n    json patch = R\"(\n        [\n          { \"op\": \"replace\", \"path\": \"/baz\", \"value\": \"boo\" },\n          { \"op\": \"add\", \"path\": \"/hello\", \"value\": [\"world\"] },\n          { \"op\": \"remove\", \"path\": \"/foo\"}\n        ]\n    )\"_json;\n\n    // apply the patch\n    json patched_doc = doc.patch(patch);\n\n    // output original and patched document\n    std::cout << std::setw(4) << doc << \"\\n\\n\"\n              << std::setw(4) << patched_doc << std::endl;\n}\n

    Output:

    {\n    \"baz\": \"qux\",\n    \"foo\": \"bar\"\n}\n\n{\n    \"baz\": \"boo\",\n    \"hello\": [\n        \"world\"\n    ]\n}\n
    "},{"location":"features/json_patch/#diff","title":"Diff","text":"

    The library can also calculate a JSON patch (i.e., a diff) given two JSON values.

    Invariant

    For two JSON values source and target, the following code yields always true:

    source.patch(diff(source, target)) == target;\n
    Example

    The following code shows how a JSON patch is created as a diff for two JSON values.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // the source document\n    json source = R\"(\n        {\n            \"baz\": \"qux\",\n            \"foo\": \"bar\"\n        }\n    )\"_json;\n\n    // the target document\n    json target = R\"(\n        {\n            \"baz\": \"boo\",\n            \"hello\": [\n                \"world\"\n            ]\n        }\n    )\"_json;\n\n    // create the patch\n    json patch = json::diff(source, target);\n\n    // roundtrip\n    json patched_source = source.patch(patch);\n\n    // output patch and roundtrip result\n    std::cout << std::setw(4) << patch << \"\\n\\n\"\n              << std::setw(4) << patched_source << std::endl;\n}\n

    Output:

    [\n    {\n        \"op\": \"replace\",\n        \"path\": \"/baz\",\n        \"value\": \"boo\"\n    },\n    {\n        \"op\": \"remove\",\n        \"path\": \"/foo\"\n    },\n    {\n        \"op\": \"add\",\n        \"path\": \"/hello\",\n        \"value\": [\n            \"world\"\n        ]\n    }\n]\n\n{\n    \"baz\": \"boo\",\n    \"hello\": [\n        \"world\"\n    ]\n}\n
    "},{"location":"features/json_pointer/","title":"JSON Pointer","text":""},{"location":"features/json_pointer/#introduction","title":"Introduction","text":"

    The library supports JSON Pointer (RFC 6901) as alternative means to address structured values. A JSON Pointer is a string that identifies a specific value within a JSON document.

    Consider the following JSON document

    {\n    \"array\": [\"A\", \"B\", \"C\"],\n    \"nested\": {\n        \"one\": 1,\n        \"two\": 2,\n        \"three\": [true, false]\n    }\n}\n

    Then every value inside the JSON document can be identified as follows:

    JSON Pointer JSON value `` {\"array\":[\"A\",\"B\",\"C\"],\"nested\":{\"one\":1,\"two\":2,\"three\":[true,false]}} /array [\"A\",\"B\",\"C\"] /array/0 A /array/1 B /array/2 C /nested {\"one\":1,\"two\":2,\"three\":[true,false]} /nested/one 1 /nested/two 2 /nested/three [true,false] /nested/three/0 true /nested/three/1 false

    Note / does not identify the root (i.e., the whole document), but an object entry with empty key \"\". See RFC 6901 for more information.

    "},{"location":"features/json_pointer/#json-pointer-creation","title":"JSON Pointer creation","text":"

    JSON Pointers can be created from a string:

    json::json_pointer p = \"/nested/one\";\n

    Furthermore, a user-defined string literal can be used to achieve the same result:

    auto p = \"/nested/one\"_json_pointer;\n

    The escaping rules of RFC 6901 are implemented. See the constructor documentation for more information.

    "},{"location":"features/json_pointer/#value-access","title":"Value access","text":"

    JSON Pointers can be used in the at, operator[], and value functions just like object keys or array indices.

    // the JSON value from above\nauto j = json::parse(R\"({\n    \"array\": [\"A\", \"B\", \"C\"],\n    \"nested\": {\n        \"one\": 1,\n        \"two\": 2,\n        \"three\": [true, false]\n    }\n})\");\n\n// access values\nauto val = j[\"\"_json_pointer];                              // {\"array\":[\"A\",\"B\",\"C\"],...}\nauto val1 = j[\"/nested/one\"_json_pointer];                  // 1\nauto val2 = j.at(json::json_pointer(\"/nested/three/1\"));    // false\nauto val3 = j.value(json::json_pointer(\"/nested/four\"), 0); // 0\n
    "},{"location":"features/json_pointer/#flatten-unflatten","title":"Flatten / unflatten","text":"

    The library implements a function flatten to convert any JSON document into a JSON object where each key is a JSON Pointer and each value is a primitive JSON value (i.e., a string, boolean, number, or null).

    // the JSON value from above\nauto j = json::parse(R\"({\n    \"array\": [\"A\", \"B\", \"C\"],\n    \"nested\": {\n        \"one\": 1,\n        \"two\": 2,\n        \"three\": [true, false]\n    }\n})\");\n\n// create flattened value\nauto j_flat = j.flatten();\n

    The resulting value j_flat is:

    {\n  \"/array/0\": \"A\",\n  \"/array/1\": \"B\",\n  \"/array/2\": \"C\",\n  \"/nested/one\": 1,\n  \"/nested/two\": 2,\n  \"/nested/three/0\": true,\n  \"/nested/three/1\": false\n}\n

    The reverse function, unflatten recreates the original value.

    auto j_original = j_flat.unflatten();\n
    "},{"location":"features/json_pointer/#see-also","title":"See also","text":"
    • Class json_pointer
    • Function flatten
    • Function unflatten
    • JSON Patch
    "},{"location":"features/macros/","title":"Supported Macros","text":"

    Some aspects of the library can be configured by defining preprocessor macros before including the json.hpp header. See also the API documentation for macros for examples and more information.

    "},{"location":"features/macros/#json_assertx","title":"JSON_ASSERT(x)","text":"

    This macro controls which code is executed for runtime assertions of the library.

    See full documentation of JSON_ASSERT(x).

    "},{"location":"features/macros/#json_catch_userexception","title":"JSON_CATCH_USER(exception)","text":"

    This macro overrides catch calls inside the library.

    See full documentation of JSON_CATCH_USER(exception).

    "},{"location":"features/macros/#json_diagnostics","title":"JSON_DIAGNOSTICS","text":"

    This macro enables extended diagnostics for exception messages. Possible values are 1 to enable or 0 to disable (default).

    When enabled, exception messages contain a JSON Pointer to the JSON value that triggered the exception, see Extended diagnostic messages for an example. Note that enabling this macro increases the size of every JSON value by one pointer and adds some runtime overhead.

    The diagnostics messages can also be controlled with the CMake option JSON_Diagnostics (OFF by default) which sets JSON_DIAGNOSTICS accordingly.

    See full documentation of JSON_DIAGNOSTICS.

    "},{"location":"features/macros/#json_diagnostic_positions","title":"JSON_DIAGNOSTIC_POSITIONS","text":"

    When enabled, two new member functions start_pos() and end_pos() are added to basic_json values. If the value was created by calling theparse function, then these functions allow to query the byte positions of the value in the input it was parsed from. The byte positions are also used in exceptions to help locate errors.

    The diagnostics positions can also be controlled with the CMake option JSON_Diagnostic_Positions (OFF by default) which sets JSON_DIAGNOSTIC_POSITIONS accordingly.

    See full documentation of JSON_DIAGNOSTIC_POSITIONS

    "},{"location":"features/macros/#json_has_cpp_11-json_has_cpp_14-json_has_cpp_17-json_has_cpp_20","title":"JSON_HAS_CPP_11, JSON_HAS_CPP_14, JSON_HAS_CPP_17, JSON_HAS_CPP_20","text":"

    The library targets C++11, but also supports some features introduced in later C++ versions (e.g., std::string_view support for C++17). For these new features, the library implements some preprocessor checks to determine the C++ standard. By defining any of these symbols, the internal check is overridden and the provided C++ version is unconditionally assumed. This can be helpful for compilers that only implement parts of the standard and would be detected incorrectly.

    See full documentation of JSON_HAS_CPP_11, JSON_HAS_CPP_14, JSON_HAS_CPP_17, and JSON_HAS_CPP_20.

    "},{"location":"features/macros/#json_has_filesystem-json_has_experimental_filesystem","title":"JSON_HAS_FILESYSTEM, JSON_HAS_EXPERIMENTAL_FILESYSTEM","text":"

    When compiling with C++17, the library provides conversions from and to std::filesystem::path. As compiler support for filesystem is limited, the library tries to detect whether <filesystem>/std::filesystem (JSON_HAS_FILESYSTEM) or <experimental/filesystem>/std::experimental::filesystem (JSON_HAS_EXPERIMENTAL_FILESYSTEM) should be used. To override the built-in check, define JSON_HAS_FILESYSTEM or JSON_HAS_EXPERIMENTAL_FILESYSTEM to 1.

    See full documentation of JSON_HAS_FILESYSTEM and JSON_HAS_EXPERIMENTAL_FILESYSTEM.

    "},{"location":"features/macros/#json_noexception","title":"JSON_NOEXCEPTION","text":"

    Exceptions can be switched off by defining the symbol JSON_NOEXCEPTION.

    See full documentation of JSON_NOEXCEPTION.

    "},{"location":"features/macros/#json_disable_enum_serialization","title":"JSON_DISABLE_ENUM_SERIALIZATION","text":"

    When defined, default parse and serialize functions for enums are excluded and have to be provided by the user, for example, using NLOHMANN_JSON_SERIALIZE_ENUM.

    See full documentation of JSON_DISABLE_ENUM_SERIALIZATION.

    "},{"location":"features/macros/#json_no_io","title":"JSON_NO_IO","text":"

    When defined, headers <cstdio>, <ios>, <iosfwd>, <istream>, and <ostream> are not included and parse functions relying on these headers are excluded. This is relevant for environment where these I/O functions are disallowed for security reasons (e.g., Intel Software Guard Extensions (SGX)).

    See full documentation of JSON_NO_IO.

    "},{"location":"features/macros/#json_skip_library_version_check","title":"JSON_SKIP_LIBRARY_VERSION_CHECK","text":"

    When defined, the library will not create a compiler warning when a different version of the library was already included.

    See full documentation of JSON_SKIP_LIBRARY_VERSION_CHECK.

    "},{"location":"features/macros/#json_skip_unsupported_compiler_check","title":"JSON_SKIP_UNSUPPORTED_COMPILER_CHECK","text":"

    When defined, the library will not create a compile error when a known unsupported compiler is detected. This allows to use the library with compilers that do not fully support C++11 and may only work if unsupported features are not used.

    See full documentation of JSON_SKIP_UNSUPPORTED_COMPILER_CHECK.

    "},{"location":"features/macros/#json_throw_userexception","title":"JSON_THROW_USER(exception)","text":"

    This macro overrides throw calls inside the library. The argument is the exception to be thrown.

    See full documentation of JSON_THROW_USER(exception).

    "},{"location":"features/macros/#json_try_user","title":"JSON_TRY_USER","text":"

    This macro overrides try calls inside the library.

    See full documentation of JSON_TRY_USER.

    "},{"location":"features/macros/#json_use_implicit_conversions","title":"JSON_USE_IMPLICIT_CONVERSIONS","text":"

    When defined to 0, implicit conversions are switched off. By default, implicit conversions are switched on.

    See full documentation of JSON_USE_IMPLICIT_CONVERSIONS.

    "},{"location":"features/macros/#nlohmann_define_type_-nlohmann_define_derived_type_","title":"NLOHMANN_DEFINE_TYPE_*(...), NLOHMANN_DEFINE_DERIVED_TYPE_*(...)","text":"

    The library defines 12 macros to simplify the serialization/deserialization of types. See the page on arbitrary type conversion for a detailed discussion.

    "},{"location":"features/macros/#nlohmann_json_serialize_enumtype","title":"NLOHMANN_JSON_SERIALIZE_ENUM(type, ...)","text":"

    This macro simplifies the serialization/deserialization of enum types. See Specializing enum conversion for more information.

    See full documentation of NLOHMANN_JSON_SERIALIZE_ENUM.

    "},{"location":"features/macros/#nlohmann_json_version_major-nlohmann_json_version_minor-nlohmann_json_version_patch","title":"NLOHMANN_JSON_VERSION_MAJOR, NLOHMANN_JSON_VERSION_MINOR, NLOHMANN_JSON_VERSION_PATCH","text":"

    These macros are defined by the library and contain the version numbers according to Semantic Versioning 2.0.0.

    See full documentation of NLOHMANN_JSON_VERSION_MAJOR, NLOHMANN_JSON_VERSION_MINOR, and NLOHMANN_JSON_VERSION_PATCH.

    "},{"location":"features/merge_patch/","title":"JSON Merge Patch","text":"

    The library supports JSON Merge Patch (RFC 7386) as a patch format. The merge patch format is primarily intended for use with the HTTP PATCH method as a means of describing a set of modifications to a target resource's content. This function applies a merge patch to the current JSON value.

    Instead of using JSON Pointer to specify values to be manipulated, it describes the changes using a syntax that closely mimics the document being modified.

    Example

    The following code shows how a JSON Merge Patch is applied to a JSON document.

    #include <iostream>\n#include <nlohmann/json.hpp>\n#include <iomanip> // for std::setw\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // the original document\n    json document = R\"({\n                \"title\": \"Goodbye!\",\n                \"author\": {\n                    \"givenName\": \"John\",\n                    \"familyName\": \"Doe\"\n                },\n                \"tags\": [\n                    \"example\",\n                    \"sample\"\n                ],\n                \"content\": \"This will be unchanged\"\n            })\"_json;\n\n    // the patch\n    json patch = R\"({\n                \"title\": \"Hello!\",\n                \"phoneNumber\": \"+01-123-456-7890\",\n                \"author\": {\n                    \"familyName\": null\n                },\n                \"tags\": [\n                    \"example\"\n                ]\n            })\"_json;\n\n    // apply the patch\n    document.merge_patch(patch);\n\n    // output original and patched document\n    std::cout << std::setw(4) << document << std::endl;\n}\n

    Output:

    {\n    \"author\": {\n        \"givenName\": \"John\"\n    },\n    \"content\": \"This will be unchanged\",\n    \"phoneNumber\": \"+01-123-456-7890\",\n    \"tags\": [\n        \"example\"\n    ],\n    \"title\": \"Hello!\"\n}\n
    "},{"location":"features/namespace/","title":"nlohmann Namespace","text":"

    The 3.11.0 release introduced an inline namespace to allow different parts of a codebase to safely use different versions of the JSON library as long as they never exchange instances of library types.

    "},{"location":"features/namespace/#structure","title":"Structure","text":"

    The complete default namespace name is derived as follows:

    • The root namespace is always nlohmann.
    • The inline namespace starts with json_abi and is followed by serveral optional ABI tags according to the value of these ABI-affecting macros, in order:
      • JSON_DIAGNOSTICS defined non-zero appends _diag.
      • JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON defined non-zero appends _ldvcmp.
    • The inline namespace ends with the suffix _v followed by the 3 components of the version number separated by underscores. To omit the version component, see Disabling the version component below.

    For example, the namespace name for version 3.11.2 with JSON_DIAGNOSTICS defined to 1 is:

    nlohmann::json_abi_diag_v3_11_2\n
    "},{"location":"features/namespace/#purpose","title":"Purpose","text":"

    Several incompatibilities have been observed. Amongst the most common ones is linking code compiled with different definitions of JSON_DIAGNOSTICS. This is illustrated in the diagram below.

    graph\n    json[\"<strong>nlohmann_json (v3.10.5)</strong><br>JSON_DIAGNOSTICS=0\"]\n    json_diag[\"<strong>nlohmann_json (v3.10.5)</strong><br>JSON_DIAGNOSTICS=1\"]\n    library[\"<strong>some library</strong>\"]\n    app[\"<strong>application</strong>\"]\n\n    library --> json\n    app --> json_diag\n    app --> library

    In releases prior to 3.11.0, mixing any version of the JSON library with different JSON_DIAGNOSTICS settings would result in a crashing application. If some_library never passes instances of JSON library types to the application, this scenario became safe in version 3.11.0 and above due to the inline namespace yielding distinct symbol names.

    "},{"location":"features/namespace/#limitations","title":"Limitations","text":"

    Neither the compiler nor the linker will issue as much as a warning when translation units \u2013 intended to be linked together and that include different versions and/or configurations of the JSON library \u2013 exchange and use library types.

    There is an exception when forward declarations are used (i.e., when including json_fwd.hpp) in which case the linker may complain about undefined references.

    "},{"location":"features/namespace/#disabling-the-version-component","title":"Disabling the version component","text":"

    Different versions are not necessarily ABI-incompatible, but the project does not actively track changes in the ABI and recommends that all parts of a codebase exchanging library types be built with the same version. Users can, at their own risk, disable the version component of the linline namespace, allowing different versions \u2013 but not configurations \u2013 to be used in cases where the linker would otherwise output undefined reference errors.

    To do so, define NLOHMANN_JSON_NAMESPACE_NO_VERSION to 1.

    This applies to version 3.11.2 and above only, versions 3.11.0 and 3.11.1 can apply the technique described in the next section to emulate the effect of the NLOHMANN_JSON_NAMESPACE_NO_VERSION macro.

    Use at your own risk

    Disabling the namespace version component and mixing ABI-incompatible versions will result in crashes or incorrect behavior. You have been warned!

    "},{"location":"features/namespace/#disabling-the-inline-namespace-completely","title":"Disabling the inline namespace completely","text":"

    When interoperability with code using a pre-3.11.0 version of the library is required, users can, at their own risk restore the old namespace layout by redefining NLOHMANN_JSON_NAMESPACE_BEGIN, NLOHMANN_JSON_NAMESPACE_END as follows:

    #define NLOHMANN_JSON_NAMESPACE_BEGIN  namespace nlohmann {\n#define NLOHMANN_JSON_NAMESPACE_END    }\n

    Use at your own risk

    Overriding the namespace and mixing ABI-incompatible versions will result in crashes or incorrect behavior. You have been warned!

    "},{"location":"features/namespace/#version-history","title":"Version history","text":"
    • Introduced inline namespace (json_v3_11_0[_abi-tag]*) in version 3.11.0.
    • Changed structure of inline namespace in version 3.11.2.
    "},{"location":"features/object_order/","title":"Object Order","text":"

    The JSON standard defines objects as \"an unordered collection of zero or more name/value pairs\". As such, an implementation does not need to preserve any specific order of object keys.

    "},{"location":"features/object_order/#default-behavior-sort-keys","title":"Default behavior: sort keys","text":"

    The default type nlohmann::json uses a std::map to store JSON objects, and thus stores object keys sorted alphabetically.

    Example
    #include <iostream>\n#include \"json.hpp\"\n\nusing json = nlohmann::json;\n\nint main()\n{\n    json j;\n    j[\"one\"] = 1;\n    j[\"two\"] = 2;\n    j[\"three\"] = 3;\n\n    std::cout << j.dump(2) << '\\n';\n}\n

    Output:

    {\n  \"one\": 1,\n  \"three\": 3,\n  \"two\": 2\n}\n
    "},{"location":"features/object_order/#alternative-behavior-preserve-insertion-order","title":"Alternative behavior: preserve insertion order","text":"

    If you do want to preserve the insertion order, you can try the type nlohmann::ordered_json.

    Example
    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing ordered_json = nlohmann::ordered_json;\n\nint main()\n{\n    ordered_json j;\n    j[\"one\"] = 1;\n    j[\"two\"] = 2;\n    j[\"three\"] = 3;\n\n    std::cout << j.dump(2) << '\\n';\n}\n

    Output:

    {\n  \"one\": 1,\n  \"two\": 2,\n  \"three\": 3\n}\n

    Alternatively, you can use a more sophisticated ordered map like tsl::ordered_map (integration) or nlohmann::fifo_map (integration).

    "},{"location":"features/object_order/#notes-on-parsing","title":"Notes on parsing","text":"

    Note that you also need to call the right parse function when reading from a file. Assume file input.json contains the JSON object above:

    {\n  \"one\": 1,\n  \"two\": 2,\n  \"three\": 3\n}\n

    Right way

    The following code correctly calls the parse function from nlohmann::ordered_json:

    std::ifstream i(\"input.json\");\nauto j = nlohmann::ordered_json::parse(i);\nstd::cout << j.dump(2) << std::endl;\n

    The output will be:

    {\n  \"one\": 1,\n  \"two\": 2,\n  \"three\": 3\n}\n
    Wrong way

    The following code incorrectly calls the parse function from nlohmann::json which does not preserve the insertion order, but sorts object keys. Assigning the result to nlohmann::ordered_json compiles, but does not restore the order from the input file.

    std::ifstream i(\"input.json\");\nnlohmann::ordered_json j = nlohmann::json::parse(i);\nstd::cout << j.dump(2) << std::endl;\n

    The output will be:

    {\n  \"one\": 1,\n  \"three\": 3\n  \"two\": 2,\n}\n
    "},{"location":"features/binary_formats/","title":"Binary Formats","text":"

    Though JSON is a ubiquitous data format, it is not a very compact format suitable for data exchange, for instance over a network. Hence, the library supports

    • BJData (Binary JData),
    • BSON (Binary JSON),
    • CBOR (Concise Binary Object Representation),
    • MessagePack, and
    • UBJSON (Universal Binary JSON)

    to efficiently encode JSON values to byte vectors and to decode such vectors.

    "},{"location":"features/binary_formats/#comparison","title":"Comparison","text":""},{"location":"features/binary_formats/#completeness","title":"Completeness","text":"Format Serialization Deserialization BJData complete complete BSON incomplete: top-level value must be an object incomplete, but all JSON types are supported CBOR complete incomplete, but all JSON types are supported MessagePack complete complete UBJSON complete complete"},{"location":"features/binary_formats/#binary-values","title":"Binary values","text":"Format Binary values Binary subtypes BJData not supported not supported BSON supported supported CBOR supported supported MessagePack supported supported UBJSON not supported not supported

    See binary values for more information.

    "},{"location":"features/binary_formats/#sizes","title":"Sizes","text":"Format canada.json twitter.json citm_catalog.json jeopardy.json BJData 53.2 % 91.1 % 78.1 % 96.6 % BJData (size) 58.6 % 92.1 % 86.7 % 97.4 % BJData (size+tyoe) 58.6 % 92.1 % 86.5 % 97.4 % BSON 85.8 % 95.2 % 95.8 % 106.7 % CBOR 50.5 % 86.3 % 68.4 % 88.0 % MessagePack 50.5 % 86.0 % 68.5 % 87.9 % UBJSON 53.2 % 91.3 % 78.2 % 96.6 % UBJSON (size) 58.6 % 92.3 % 86.8 % 97.4 % UBJSON (size+type) 55.9 % 92.3 % 85.0 % 95.0 %

    Sizes compared to minified JSON value.

    "},{"location":"features/binary_formats/bjdata/","title":"BJData","text":"

    The BJData format was derived from and improved upon Universal Binary JSON(UBJSON) specification (Draft 12). Specifically, it introduces an optimized array container for efficient storage of N-dimensional packed arrays (ND-arrays); it also adds 5 new type markers - [u] - uint16, [m] - uint32, [M] - uint64, [h] - float16 and [B] - byte - to unambiguously map common binary numeric types; furthermore, it uses little-endian (LE) to store all numerics instead of big-endian (BE) as in UBJSON to avoid unnecessary conversions on commonly available platforms.

    Compared to other binary JSON-like formats such as MessagePack and CBOR, both BJData and UBJSON demonstrate a rare combination of being both binary and quasi-human-readable. This is because all semantic elements in BJData and UBJSON, including the data-type markers and name/string types are directly human-readable. Data stored in the BJData/UBJSON format are not only compact in size, fast to read/write, but also can be directly searched or read using simple processing.

    References

    • BJData Specification
    "},{"location":"features/binary_formats/bjdata/#serialization","title":"Serialization","text":"

    The library uses the following mapping from JSON values types to BJData types according to the BJData specification:

    JSON value type value/range BJData type marker null null null Z boolean true true T boolean false false F number_integer -9223372036854775808..-2147483649 int64 L number_integer -2147483648..-32769 int32 l number_integer -32768..-129 int16 I number_integer -128..127 int8 i number_integer 128..255 uint8 U number_integer 256..32767 int16 I number_integer 32768..65535 uint16 u number_integer 65536..2147483647 int32 l number_integer 2147483648..4294967295 uint32 m number_integer 4294967296..9223372036854775807 int64 L number_integer 9223372036854775808..18446744073709551615 uint64 M number_unsigned 0..127 int8 i number_unsigned 128..255 uint8 U number_unsigned 256..32767 int16 I number_unsigned 32768..65535 uint16 u number_unsigned 65536..2147483647 int32 l number_unsigned 2147483648..4294967295 uint32 m number_unsigned 4294967296..9223372036854775807 int64 L number_unsigned 9223372036854775808..18446744073709551615 uint64 M number_float any value float64 D string with shortest length indicator string S array see notes on optimized format/ND-array array [ object see notes on optimized format map { binary see notes on binary values array [$B

    Complete mapping

    The mapping is complete in the sense that any JSON value type can be converted to a BJData value.

    Any BJData output created by to_bjdata can be successfully parsed by from_bjdata.

    Size constraints

    The following values can not be converted to a BJData value:

    • strings with more than 18446744073709551615 bytes, i.e., 2^{64}-1 bytes (theoretical)

    Unused BJData markers

    The following markers are not used in the conversion:

    • Z: no-op values are not created.
    • C: single-byte strings are serialized with S markers.

    NaN/infinity handling

    If NaN or Infinity are stored inside a JSON number, they are serialized properly. This behavior differs from the dump() function which serializes NaN or Infinity to null.

    Endianness

    A breaking difference between BJData and UBJSON is the endianness of numerical values. In BJData, all numerical data types (integers UiuImlML and floating-point values hdD) are stored in the little-endian (LE) byte order as opposed to big-endian as used by UBJSON. Adopting LE to store numeric records avoids unnecessary byte swapping on most modern computers where LE is used as the default byte order.

    Optimized formats

    Optimized formats for containers are supported via two parameters of to_bjdata:

    • Parameter use_size adds size information to the beginning of a container and removes the closing marker.
    • Parameter use_type further checks whether all elements of a container have the same type and adds the type marker to the beginning of the container. The use_type parameter must only be used together with use_size = true.

    Note that use_size = true alone may result in larger representations - the benefit of this parameter is that the receiving side is immediately informed of the number of elements in the container.

    ND-array optimized format

    BJData extends UBJSON's optimized array size marker to support ND-arrays of uniform numerical data types (referred to as packed arrays). For example, the 2-D uint8 integer array [[1,2],[3,4],[5,6]], stored as nested optimized array in UBJSON [ [$U#i2 1 2 [$U#i2 3 4 [$U#i2 5 6 ], can be further compressed in BJData to [$U#[$i#i2 2 3 1 2 3 4 5 6 or [$U#[i2 i3] 1 2 3 4 5 6.

    To maintain type and size information, ND-arrays are converted to JSON objects following the annotated array format (defined in the JData specification (Draft 3)), when parsed using from_bjdata. For example, the above 2-D uint8 array can be parsed and accessed as

    {\n    \"_ArrayType_\": \"uint8\",\n    \"_ArraySize_\": [2,3],\n    \"_ArrayData_\": [1,2,3,4,5,6]\n}\n

    Likewise, when a JSON object in the above form is serialzed using to_bjdata, it is automatically converted into a compact BJData ND-array. The only exception is, that when the 1-dimensional vector stored in \"_ArraySize_\" contains a single integer or two integers with one being 1, a regular 1-D optimized array is generated.

    The current version of this library does not yet support automatic detection of and conversion from a nested JSON array input to a BJData ND-array.

    Restrictions in optimized data types for arrays and objects

    Due to diminished space saving, hampered readability, and increased security risks, in BJData, the allowed data types following the $ marker in an optimized array and object container are restricted to non-zero-fixed-length data types. Therefore, the valid optimized type markers can only be one of UiuImlMLhdDCB. This also means other variable ([{SH) or zero-length types (TFN) can not be used in an optimized array or object in BJData.

    Binary values

    BJData provides a dedicated B marker (defined in the BJData specification (Draft 3)) that is used in optimized arrays to designate binary data. This means that, unlike UBJSON, binary data can be both serialized and deserialized.

    To preserve compatibility with BJData Draft 2, the Draft 3 optimized binary array must be explicitly enabled using the version parameter of to_bjdata.

    In Draft2 mode (default), if the JSON data contains the binary type, the value stored as a list of integers, as suggested by the BJData documentation. In particular, this means that the serialization and the deserialization of JSON containing binary values into BJData and back will result in a different JSON object.

    Example
    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\n// function to print BJData's diagnostic format\nvoid print_byte(uint8_t byte)\n{\n    if (32 < byte and byte < 128)\n    {\n        std::cout << (char)byte;\n    }\n    else\n    {\n        std::cout << (int)byte;\n    }\n}\n\nint main()\n{\n    // create a JSON value\n    json j = R\"({\"compact\": true, \"schema\": false})\"_json;\n\n    // serialize it to BJData\n    std::vector<std::uint8_t> v = json::to_bjdata(j);\n\n    // print the vector content\n    for (auto& byte : v)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n\n    // create an array of numbers\n    json array = {1, 2, 3, 4, 5, 6, 7, 8};\n\n    // serialize it to BJData using default representation\n    std::vector<std::uint8_t> v_array = json::to_bjdata(array);\n    // serialize it to BJData using size optimization\n    std::vector<std::uint8_t> v_array_size = json::to_bjdata(array, true);\n    // serialize it to BJData using type optimization\n    std::vector<std::uint8_t> v_array_size_and_type = json::to_bjdata(array, true, true);\n\n    // print the vector contents\n    for (auto& byte : v_array)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n\n    for (auto& byte : v_array_size)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n\n    for (auto& byte : v_array_size_and_type)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n}\n

    Output:

    {i7compactTi6schemaF}\n[i1i2i3i4i5i6i7i8]\n[#i8i1i2i3i4i5i6i7i8\n[$i#i812345678\n
    "},{"location":"features/binary_formats/bjdata/#deserialization","title":"Deserialization","text":"

    The library maps BJData types to JSON value types as follows:

    BJData type JSON value type marker no-op no value, next value is read N null null Z false false F true true T float16 number_float h float32 number_float d float64 number_float D uint8 number_unsigned U int8 number_integer i uint16 number_unsigned u int16 number_integer I uint32 number_unsigned m int32 number_integer l uint64 number_unsigned M int64 number_integer L byte number_unsigned B string string S char string C array array (optimized values are supported) [ ND-array object (in JData annotated array format) [$.#[. object object (optimized values are supported) { binary binary (strongly-typed byte array) [$B

    Complete mapping

    The mapping is complete in the sense that any BJData value can be converted to a JSON value.

    Example
    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create byte vector\n    std::vector<std::uint8_t> v = {0x7B, 0x69, 0x07, 0x63, 0x6F, 0x6D, 0x70, 0x61,\n                                   0x63, 0x74, 0x54, 0x69, 0x06, 0x73, 0x63, 0x68,\n                                   0x65, 0x6D, 0x61, 0x69, 0x00, 0x7D\n                                  };\n\n    // deserialize it with BJData\n    json j = json::from_bjdata(v);\n\n    // print the deserialized JSON value\n    std::cout << std::setw(2) << j << std::endl;\n}\n

    Output:

    {\n  \"compact\": true,\n  \"schema\": 0\n}\n
    "},{"location":"features/binary_formats/bson/","title":"BSON","text":"

    BSON, short for Binary JSON, is a binary-encoded serialization of JSON-like documents. Like JSON, BSON supports the embedding of documents and arrays within other documents and arrays. BSON also contains extensions that allow representation of data types that are not part of the JSON spec. For example, BSON has a Date type and a BinData type.

    References

    • BSON Website - the main source on BSON
    • BSON Specification - the specification
    "},{"location":"features/binary_formats/bson/#serialization","title":"Serialization","text":"

    The library uses the following mapping from JSON values types to BSON types:

    JSON value type value/range BSON type marker null null null 0x0A boolean true, false boolean 0x08 number_integer -9223372036854775808..-2147483649 int64 0x12 number_integer -2147483648..2147483647 int32 0x10 number_integer 2147483648..9223372036854775807 int64 0x12 number_unsigned 0..2147483647 int32 0x10 number_unsigned 2147483648..9223372036854775807 int64 0x12 number_unsigned 9223372036854775808..18446744073709551615 uint64 0x11 number_float any value double 0x01 string any value string 0x02 array any value document 0x04 object any value document 0x03 binary any value binary 0x05

    Incomplete mapping

    The mapping is incomplete, since only JSON-objects (and things contained therein) can be serialized to BSON. Also, keys may not contain U+0000, since they are serialized a zero-terminated c-strings.

    Example
    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create a JSON value\n    json j = R\"({\"compact\": true, \"schema\": 0})\"_json;\n\n    // serialize it to BSON\n    std::vector<std::uint8_t> v = json::to_bson(j);\n\n    // print the vector content\n    for (auto& byte : v)\n    {\n        std::cout << \"0x\" << std::hex << std::setw(2) << std::setfill('0') << (int)byte << \" \";\n    }\n    std::cout << std::endl;\n}\n

    Output:

    0x1b 0x00 0x00 0x00 0x08 0x63 0x6f 0x6d 0x70 0x61 0x63 0x74 0x00 0x01 0x10 0x73 0x63 0x68 0x65 0x6d 0x61 0x00 0x00 0x00 0x00 0x00 0x00 \n
    "},{"location":"features/binary_formats/bson/#deserialization","title":"Deserialization","text":"

    The library maps BSON record types to JSON value types as follows:

    BSON type BSON marker byte JSON value type double 0x01 number_float string 0x02 string document 0x03 object array 0x04 array binary 0x05 binary undefined 0x06 unsupported ObjectId 0x07 unsupported boolean 0x08 boolean UTC Date-Time 0x09 unsupported null 0x0A null Regular Expr. 0x0B unsupported DB Pointer 0x0C unsupported JavaScript Code 0x0D unsupported Symbol 0x0E unsupported JavaScript Code 0x0F unsupported int32 0x10 number_integer uint64(Timestamp) 0x11 number_unsigned 128-bit decimal float 0x13 unsupported Max Key 0x7F unsupported Min Key 0xFF unsupported

    Incomplete mapping

    The mapping is incomplete. The unsupported mappings are indicated in the table above.

    Handling of BSON type 0x11

    BSON type 0x11 is used to represent uint64 numbers. This library treats these values purely as uint64 numbers and does not parse them into date-related formats.

    Example
    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create byte vector\n    std::vector<std::uint8_t> v = {0x1b, 0x00, 0x00, 0x00, 0x08, 0x63, 0x6f, 0x6d,\n                                   0x70, 0x61, 0x63, 0x74, 0x00, 0x01, 0x10, 0x73,\n                                   0x63, 0x68, 0x65, 0x6d, 0x61, 0x00, 0x00, 0x00,\n                                   0x00, 0x00, 0x00\n                                  };\n\n    // deserialize it with BSON\n    json j = json::from_bson(v);\n\n    // print the deserialized JSON value\n    std::cout << std::setw(2) << j << std::endl;\n}\n

    Output:

    {\n  \"compact\": true,\n  \"schema\": 0\n}\n
    "},{"location":"features/binary_formats/cbor/","title":"CBOR","text":"

    The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation.

    References

    • CBOR Website - the main source on CBOR
    • CBOR Playground - an interactive webpage to translate between JSON and CBOR
    • RFC 7049 - the CBOR specification
    "},{"location":"features/binary_formats/cbor/#serialization","title":"Serialization","text":"

    The library uses the following mapping from JSON values types to CBOR types according to the CBOR specification (RFC 7049):

    JSON value type value/range CBOR type first byte null null Null 0xF6 boolean true True 0xF5 boolean false False 0xF4 number_integer -9223372036854775808..-2147483649 Negative integer (8 bytes follow) 0x3B number_integer -2147483648..-32769 Negative integer (4 bytes follow) 0x3A number_integer -32768..-129 Negative integer (2 bytes follow) 0x39 number_integer -128..-25 Negative integer (1 byte follow) 0x38 number_integer -24..-1 Negative integer 0x20..0x37 number_integer 0..23 Integer 0x00..0x17 number_integer 24..255 Unsigned integer (1 byte follow) 0x18 number_integer 256..65535 Unsigned integer (2 bytes follow) 0x19 number_integer 65536..4294967295 Unsigned integer (4 bytes follow) 0x1A number_integer 4294967296..18446744073709551615 Unsigned integer (8 bytes follow) 0x1B number_unsigned 0..23 Integer 0x00..0x17 number_unsigned 24..255 Unsigned integer (1 byte follow) 0x18 number_unsigned 256..65535 Unsigned integer (2 bytes follow) 0x19 number_unsigned 65536..4294967295 Unsigned integer (4 bytes follow) 0x1A number_unsigned 4294967296..18446744073709551615 Unsigned integer (8 bytes follow) 0x1B number_float any value representable by a float Single-Precision Float 0xFA number_float any value NOT representable by a float Double-Precision Float 0xFB string length: 0..23 UTF-8 string 0x60..0x77 string length: 23..255 UTF-8 string (1 byte follow) 0x78 string length: 256..65535 UTF-8 string (2 bytes follow) 0x79 string length: 65536..4294967295 UTF-8 string (4 bytes follow) 0x7A string length: 4294967296..18446744073709551615 UTF-8 string (8 bytes follow) 0x7B array size: 0..23 array 0x80..0x97 array size: 23..255 array (1 byte follow) 0x98 array size: 256..65535 array (2 bytes follow) 0x99 array size: 65536..4294967295 array (4 bytes follow) 0x9A array size: 4294967296..18446744073709551615 array (8 bytes follow) 0x9B object size: 0..23 map 0xA0..0xB7 object size: 23..255 map (1 byte follow) 0xB8 object size: 256..65535 map (2 bytes follow) 0xB9 object size: 65536..4294967295 map (4 bytes follow) 0xBA object size: 4294967296..18446744073709551615 map (8 bytes follow) 0xBB binary size: 0..23 byte string 0x40..0x57 binary size: 23..255 byte string (1 byte follow) 0x58 binary size: 256..65535 byte string (2 bytes follow) 0x59 binary size: 65536..4294967295 byte string (4 bytes follow) 0x5A binary size: 4294967296..18446744073709551615 byte string (8 bytes follow) 0x5B

    Binary values with subtype are mapped to tagged values (0xD8..0xDB) depending on the subtype, followed by a byte string, see \"binary\" cells in the table above.

    Complete mapping

    The mapping is complete in the sense that any JSON value type can be converted to a CBOR value.

    NaN/infinity handling

    If NaN or Infinity are stored inside a JSON number, they are serialized properly. This behavior differs from the normal JSON serialization which serializes NaN or Infinity to null.

    Unused CBOR types

    The following CBOR types are not used in the conversion:

    • UTF-8 strings terminated by \"break\" (0x7F)
    • arrays terminated by \"break\" (0x9F)
    • maps terminated by \"break\" (0xBF)
    • byte strings terminated by \"break\" (0x5F)
    • date/time (0xC0..0xC1)
    • bignum (0xC2..0xC3)
    • decimal fraction (0xC4)
    • bigfloat (0xC5)
    • expected conversions (0xD5..0xD7)
    • simple values (0xE0..0xF3, 0xF8)
    • undefined (0xF7)
    • half-precision floats (0xF9)
    • break (0xFF)

    Tagged items

    Binary subtypes will be serialized as tagged items. See binary values for an example.

    Example
    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create a JSON value\n    json j = R\"({\"compact\": true, \"schema\": 0})\"_json;\n\n    // serialize it to CBOR\n    std::vector<std::uint8_t> v = json::to_cbor(j);\n\n    // print the vector content\n    for (auto& byte : v)\n    {\n        std::cout << \"0x\" << std::hex << std::setw(2) << std::setfill('0') << (int)byte << \" \";\n    }\n    std::cout << std::endl;\n}\n

    Output:

    0xa2 0x67 0x63 0x6f 0x6d 0x70 0x61 0x63 0x74 0xf5 0x66 0x73 0x63 0x68 0x65 0x6d 0x61 0x00 \n
    "},{"location":"features/binary_formats/cbor/#deserialization","title":"Deserialization","text":"

    The library maps CBOR types to JSON value types as follows:

    CBOR type JSON value type first byte Integer number_unsigned 0x00..0x17 Unsigned integer number_unsigned 0x18 Unsigned integer number_unsigned 0x19 Unsigned integer number_unsigned 0x1A Unsigned integer number_unsigned 0x1B Negative integer number_integer 0x20..0x37 Negative integer number_integer 0x38 Negative integer number_integer 0x39 Negative integer number_integer 0x3A Negative integer number_integer 0x3B Byte string binary 0x40..0x57 Byte string binary 0x58 Byte string binary 0x59 Byte string binary 0x5A Byte string binary 0x5B UTF-8 string string 0x60..0x77 UTF-8 string string 0x78 UTF-8 string string 0x79 UTF-8 string string 0x7A UTF-8 string string 0x7B UTF-8 string string 0x7F array array 0x80..0x97 array array 0x98 array array 0x99 array array 0x9A array array 0x9B array array 0x9F map object 0xA0..0xB7 map object 0xB8 map object 0xB9 map object 0xBA map object 0xBB map object 0xBF False false 0xF4 True true 0xF5 Null null 0xF6 Half-Precision Float number_float 0xF9 Single-Precision Float number_float 0xFA Double-Precision Float number_float 0xFB

    Incomplete mapping

    The mapping is incomplete in the sense that not all CBOR types can be converted to a JSON value. The following CBOR types are not supported and will yield parse errors:

    • date/time (0xC0..0xC1)
    • bignum (0xC2..0xC3)
    • decimal fraction (0xC4)
    • bigfloat (0xC5)
    • expected conversions (0xD5..0xD7)
    • simple values (0xE0..0xF3, 0xF8)
    • undefined (0xF7)

    Object keys

    CBOR allows map keys of any type, whereas JSON only allows strings as keys in object values. Therefore, CBOR maps with keys other than UTF-8 strings are rejected.

    Tagged items

    Tagged items will throw a parse error by default. They can be ignored by passing cbor_tag_handler_t::ignore to function from_cbor. They can be stored by passing cbor_tag_handler_t::store to function from_cbor.

    Example
    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create byte vector\n    std::vector<std::uint8_t> v = {0xa2, 0x67, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63,\n                                   0x74, 0xf5, 0x66, 0x73, 0x63, 0x68, 0x65, 0x6d,\n                                   0x61, 0x00\n                                  };\n\n    // deserialize it with CBOR\n    json j = json::from_cbor(v);\n\n    // print the deserialized JSON value\n    std::cout << std::setw(2) << j << std::endl;\n}\n

    Output:

    {\n  \"compact\": true,\n  \"schema\": 0\n}\n
    "},{"location":"features/binary_formats/messagepack/","title":"MessagePack","text":"

    MessagePack is an efficient binary serialization format. It lets you exchange data among multiple languages like JSON. But it's faster and smaller. Small integers are encoded into a single byte, and typical short strings require only one extra byte in addition to the strings themselves.

    References

    • MessagePack website
    • MessagePack specification
    "},{"location":"features/binary_formats/messagepack/#serialization","title":"Serialization","text":"

    The library uses the following mapping from JSON values types to MessagePack types according to the MessagePack specification:

    JSON value type value/range MessagePack type first byte null null nil 0xC0 boolean true true 0xC3 boolean false false 0xC2 number_integer -9223372036854775808..-2147483649 int64 0xD3 number_integer -2147483648..-32769 int32 0xD2 number_integer -32768..-129 int16 0xD1 number_integer -128..-33 int8 0xD0 number_integer -32..-1 negative fixint 0xE0..0xFF number_integer 0..127 positive fixint 0x00..0x7F number_integer 128..255 uint 8 0xCC number_integer 256..65535 uint 16 0xCD number_integer 65536..4294967295 uint 32 0xCE number_integer 4294967296..18446744073709551615 uint 64 0xCF number_unsigned 0..127 positive fixint 0x00..0x7F number_unsigned 128..255 uint 8 0xCC number_unsigned 256..65535 uint 16 0xCD number_unsigned 65536..4294967295 uint 32 0xCE number_unsigned 4294967296..18446744073709551615 uint 64 0xCF number_float any value representable by a float float 32 0xCA number_float any value NOT representable by a float float 64 0xCB string length: 0..31 fixstr 0xA0..0xBF string length: 32..255 str 8 0xD9 string length: 256..65535 str 16 0xDA string length: 65536..4294967295 str 32 0xDB array size: 0..15 fixarray 0x90..0x9F array size: 16..65535 array 16 0xDC array size: 65536..4294967295 array 32 0xDD object size: 0..15 fix map 0x80..0x8F object size: 16..65535 map 16 0xDE object size: 65536..4294967295 map 32 0xDF binary size: 0..255 bin 8 0xC4 binary size: 256..65535 bin 16 0xC5 binary size: 65536..4294967295 bin 32 0xC6

    Complete mapping

    The mapping is complete in the sense that any JSON value type can be converted to a MessagePack value.

    Any MessagePack output created by to_msgpack can be successfully parsed by from_msgpack.

    Size constraints

    The following values can not be converted to a MessagePack value:

    • strings with more than 4294967295 bytes
    • byte strings with more than 4294967295 bytes
    • arrays with more than 4294967295 elements
    • objects with more than 4294967295 elements

    NaN/infinity handling

    If NaN or Infinity are stored inside a JSON number, they are serialized properly in contrast to the dump function which serializes NaN or Infinity to null.

    Example
    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create a JSON value\n    json j = R\"({\"compact\": true, \"schema\": 0})\"_json;\n\n    // serialize it to MessagePack\n    std::vector<std::uint8_t> v = json::to_msgpack(j);\n\n    // print the vector content\n    for (auto& byte : v)\n    {\n        std::cout << \"0x\" << std::hex << std::setw(2) << std::setfill('0') << (int)byte << \" \";\n    }\n    std::cout << std::endl;\n}\n

    Output:

    0x82 0xa7 0x63 0x6f 0x6d 0x70 0x61 0x63 0x74 0xc3 0xa6 0x73 0x63 0x68 0x65 0x6d 0x61 0x00 \n
    "},{"location":"features/binary_formats/messagepack/#deserialization","title":"Deserialization","text":"

    The library maps MessagePack types to JSON value types as follows:

    MessagePack type JSON value type first byte positive fixint number_unsigned 0x00..0x7F fixmap object 0x80..0x8F fixarray array 0x90..0x9F fixstr string 0xA0..0xBF nil null 0xC0 false false 0xC2 true true 0xC3 float 32 number_float 0xCA float 64 number_float 0xCB uint 8 number_unsigned 0xCC uint 16 number_unsigned 0xCD uint 32 number_unsigned 0xCE uint 64 number_unsigned 0xCF int 8 number_integer 0xD0 int 16 number_integer 0xD1 int 32 number_integer 0xD2 int 64 number_integer 0xD3 str 8 string 0xD9 str 16 string 0xDA str 32 string 0xDB array 16 array 0xDC array 32 array 0xDD map 16 object 0xDE map 32 object 0xDF bin 8 binary 0xC4 bin 16 binary 0xC5 bin 32 binary 0xC6 ext 8 binary 0xC7 ext 16 binary 0xC8 ext 32 binary 0xC9 fixext 1 binary 0xD4 fixext 2 binary 0xD5 fixext 4 binary 0xD6 fixext 8 binary 0xD7 fixext 16 binary 0xD8 negative fixint number_integer 0xE0-0xFF

    Info

    Any MessagePack output created by to_msgpack can be successfully parsed by from_msgpack.

    Example
    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create byte vector\n    std::vector<std::uint8_t> v = {0x82, 0xa7, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63,\n                                   0x74, 0xc3, 0xa6, 0x73, 0x63, 0x68, 0x65, 0x6d,\n                                   0x61, 0x00\n                                  };\n\n    // deserialize it with MessagePack\n    json j = json::from_msgpack(v);\n\n    // print the deserialized JSON value\n    std::cout << std::setw(2) << j << std::endl;\n}\n

    Output:

    {\n  \"compact\": true,\n  \"schema\": 0\n}\n
    "},{"location":"features/binary_formats/ubjson/","title":"UBJSON","text":"

    Universal Binary JSON (UBJSON) is a binary form directly imitating JSON, but requiring fewer bytes of data. It aims to achieve the generality of JSON, combined with being much easier to process than JSON.

    References

    • UBJSON Website
    "},{"location":"features/binary_formats/ubjson/#serialization","title":"Serialization","text":"

    The library uses the following mapping from JSON values types to UBJSON types according to the UBJSON specification:

    JSON value type value/range UBJSON type marker null null null Z boolean true true T boolean false false F number_integer -9223372036854775808..-2147483649 int64 L number_integer -2147483648..-32769 int32 l number_integer -32768..-129 int16 I number_integer -128..127 int8 i number_integer 128..255 uint8 U number_integer 256..32767 int16 I number_integer 32768..2147483647 int32 l number_integer 2147483648..9223372036854775807 int64 L number_unsigned 0..127 int8 i number_unsigned 128..255 uint8 U number_unsigned 256..32767 int16 I number_unsigned 32768..2147483647 int32 l number_unsigned 2147483648..9223372036854775807 int64 L number_unsigned 2147483649..18446744073709551615 high-precision H number_float any value float64 D string with shortest length indicator string S array see notes on optimized format array [ object see notes on optimized format map {

    Complete mapping

    The mapping is complete in the sense that any JSON value type can be converted to a UBJSON value.

    Any UBJSON output created by to_ubjson can be successfully parsed by from_ubjson.

    Size constraints

    The following values can not be converted to a UBJSON value:

    • strings with more than 9223372036854775807 bytes (theoretical)

    Unused UBJSON markers

    The following markers are not used in the conversion:

    • Z: no-op values are not created.
    • C: single-byte strings are serialized with S markers.

    NaN/infinity handling

    If NaN or Infinity are stored inside a JSON number, they are serialized properly. This behavior differs from the dump() function which serializes NaN or Infinity to null.

    Optimized formats

    The optimized formats for containers are supported: Parameter use_size adds size information to the beginning of a container and removes the closing marker. Parameter use_type further checks whether all elements of a container have the same type and adds the type marker to the beginning of the container. The use_type parameter must only be used together with use_size = true.

    Note that use_size = true alone may result in larger representations - the benefit of this parameter is that the receiving side is immediately informed on the number of elements of the container.

    Binary values

    If the JSON data contains the binary type, the value stored is a list of integers, as suggested by the UBJSON documentation. In particular, this means that serialization and the deserialization of a JSON containing binary values into UBJSON and back will result in a different JSON object.

    Example
    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\n// function to print UBJSON's diagnostic format\nvoid print_byte(uint8_t byte)\n{\n    if (32 < byte and byte < 128)\n    {\n        std::cout << (char)byte;\n    }\n    else\n    {\n        std::cout << (int)byte;\n    }\n}\n\nint main()\n{\n    // create a JSON value\n    json j = R\"({\"compact\": true, \"schema\": false})\"_json;\n\n    // serialize it to UBJSON\n    std::vector<std::uint8_t> v = json::to_ubjson(j);\n\n    // print the vector content\n    for (auto& byte : v)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n\n    // create an array of numbers\n    json array = {1, 2, 3, 4, 5, 6, 7, 8};\n\n    // serialize it to UBJSON using default representation\n    std::vector<std::uint8_t> v_array = json::to_ubjson(array);\n    // serialize it to UBJSON using size optimization\n    std::vector<std::uint8_t> v_array_size = json::to_ubjson(array, true);\n    // serialize it to UBJSON using type optimization\n    std::vector<std::uint8_t> v_array_size_and_type = json::to_ubjson(array, true, true);\n\n    // print the vector contents\n    for (auto& byte : v_array)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n\n    for (auto& byte : v_array_size)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n\n    for (auto& byte : v_array_size_and_type)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n}\n

    Output:

    {i7compactTi6schemaF}\n[i1i2i3i4i5i6i7i8]\n[#i8i1i2i3i4i5i6i7i8\n[$i#i812345678\n
    "},{"location":"features/binary_formats/ubjson/#deserialization","title":"Deserialization","text":"

    The library maps UBJSON types to JSON value types as follows:

    UBJSON type JSON value type marker no-op no value, next value is read N null null Z false false F true true T float32 number_float d float64 number_float D uint8 number_unsigned U int8 number_integer i int16 number_integer I int32 number_integer l int64 number_integer L string string S char string C array array (optimized values are supported) [ object object (optimized values are supported) {

    Complete mapping

    The mapping is complete in the sense that any UBJSON value can be converted to a JSON value.

    Example
    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create byte vector\n    std::vector<std::uint8_t> v = {0x7B, 0x69, 0x07, 0x63, 0x6F, 0x6D, 0x70, 0x61,\n                                   0x63, 0x74, 0x54, 0x69, 0x06, 0x73, 0x63, 0x68,\n                                   0x65, 0x6D, 0x61, 0x69, 0x00, 0x7D\n                                  };\n\n    // deserialize it with UBJSON\n    json j = json::from_ubjson(v);\n\n    // print the deserialized JSON value\n    std::cout << std::setw(2) << j << std::endl;\n}\n

    Output:

    {\n  \"compact\": true,\n  \"schema\": 0\n}\n
    "},{"location":"features/element_access/","title":"Element Access","text":"

    There are many ways elements in a JSON value can be accessed:

    • unchecked access via operator[]
    • checked access via at
    • access with default value via value
    • iterators
    • JSON pointers
    "},{"location":"features/element_access/checked_access/","title":"Checked access: at","text":""},{"location":"features/element_access/checked_access/#overview","title":"Overview","text":"

    The at member function performs checked access; that is, it returns a reference to the desired value if it exists and throws a basic_json::out_of_range exception otherwise.

    Read access

    Consider the following JSON value:

    {\n    \"name\": \"Mary Smith\",\n    \"age\": 42,\n    \"hobbies\": [\"hiking\", \"reading\"]\n}\n

    Assume the value is parsed to a json variable j.

    expression value j {\"name\": \"Mary Smith\", \"age\": 42, \"hobbies\": [\"hiking\", \"reading\"]} j.at(\"name\") \"Mary Smith\" j.at(\"age\") 42 j.at(\"hobbies\") [\"hiking\", \"reading\"] j.at(\"hobbies\").at(0) \"hiking\" j.at(\"hobbies\").at(1) \"reading\"

    The return value is a reference, so it can be modified by the original value.

    Write access
    j.at(\"name\") = \"John Smith\";\n

    This code produces the following JSON value:

    {\n    \"name\": \"John Smith\",\n    \"age\": 42,\n    \"hobbies\": [\"hiking\", \"reading\"]\n}\n

    When accessing an invalid index (i.e., an index greater than or equal to the array size) or the passed object key is non-existing, an exception is thrown.

    Accessing via invalid index or missing key
    j.at(\"hobbies\").at(3) = \"cooking\";\n

    This code produces the following exception:

    [json.exception.out_of_range.401] array index 3 is out of range\n

    When you extended diagnostic messages are enabled by defining JSON_DIAGNOSTICS, the exception further gives information where the key or index is missing or out of range.

    [json.exception.out_of_range.401] (/hobbies) array index 3 is out of range\n
    "},{"location":"features/element_access/checked_access/#notes","title":"Notes","text":"

    Exceptions

    • at can only be used with objects (with a string argument) or with arrays (with a numeric argument). For other types, a basic_json::type_error is thrown.
    • basic_json::out_of_range exception exceptions are thrown if the provided key is not found in an object or the provided index is invalid.
    "},{"location":"features/element_access/checked_access/#summary","title":"Summary","text":"scenario non-const value const value access to existing object key reference to existing value is returned const reference to existing value is returned access to valid array index reference to existing value is returned const reference to existing value is returned access to non-existing object key basic_json::out_of_range exception is thrown basic_json::out_of_range exception is thrown access to invalid array index basic_json::out_of_range exception is thrown basic_json::out_of_range exception is thrown"},{"location":"features/element_access/default_value/","title":"Access with default value: value","text":""},{"location":"features/element_access/default_value/#overview","title":"Overview","text":"

    In many situations such as configuration files, missing values are not exceptional, but may be treated as if a default value was present. For this case, use value(key, default_value) which takes the key you want to access and a default value in case there is no value stored with that key.

    "},{"location":"features/element_access/default_value/#example","title":"Example","text":"Example

    Consider the following JSON value:

    {\n    \"logOutput\": \"result.log\",\n    \"append\": true\n}\n

    Assume the value is parsed to a json variable j.

    expression value j {\"logOutput\": \"result.log\", \"append\": true} j.value(\"logOutput\", \"logfile.log\") \"result.log\" j.value(\"append\", true) true j.value(\"append\", false) true j.value(\"logLevel\", \"verbose\") \"verbose\""},{"location":"features/element_access/default_value/#notes","title":"Notes","text":"

    Exceptions

    • value can only be used with objects. For other types, a basic_json::type_error is thrown.

    Return type

    The value function is a template, and the return type of the function is determined by the type of the provided default value unless otherwise specified. This can have unexpected effects. In the example below, we store a 64-bit unsigned integer. We get exactly that value when using operator[]. However, when we call value and provide 0 as default value, then -1 is returned. The occurs, because 0 has type int which overflows when handling the value 18446744073709551615.

    To address this issue, either provide a correctly typed default value or use the template parameter to specify the desired return type. Note that this issue occurs even when a value is stored at the provided key, and the default value is not used as the return value.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    json j = json::parse(R\"({\"uint64\": 18446744073709551615})\");\n\n    std::cout << \"operator[]:                \" << j[\"uint64\"] << '\\n'\n              << \"default value (int):       \" << j.value(\"uint64\", 0) << '\\n'\n              << \"default value (uint64_t):  \" << j.value(\"uint64\", std::uint64_t(0)) << '\\n'\n              << \"explict return value type: \" << j.value<std::uint64_t>(\"uint64\", 0) << '\\n';\n}\n

    Output:

    operator[]:                18446744073709551615\ndefault value (int):       -1\ndefault value (uint64_t):  18446744073709551615\nexplict return value type: 18446744073709551615\n
    "},{"location":"features/element_access/default_value/#see-also","title":"See also","text":"
    • value for access with default value
    • documentation on checked access
    "},{"location":"features/element_access/unchecked_access/","title":"Unchecked access: operator[]","text":""},{"location":"features/element_access/unchecked_access/#overview","title":"Overview","text":"

    Elements in a JSON object and a JSON array can be accessed via operator[] similar to a std::map and a std::vector, respectively.

    Read access

    Consider the following JSON value:

    {\n    \"name\": \"Mary Smith\",\n    \"age\": 42,\n    \"hobbies\": [\"hiking\", \"reading\"]\n}\n

    Assume the value is parsed to a json variable j.

    expression value j {\"name\": \"Mary Smith\", \"age\": 42, \"hobbies\": [\"hiking\", \"reading\"]} j[\"name\"] \"Mary Smith\" j[\"age\"] 42 j[\"hobbies\"] [\"hiking\", \"reading\"] j[\"hobbies\"][0] \"hiking\" j[\"hobbies\"][1] \"reading\"

    The return value is a reference, so it can modify the original value. In case the passed object key is non-existing, a null value is inserted which can be immediately be overwritten.

    Write access
    j[\"name\"] = \"John Smith\";\nj[\"maidenName\"] = \"Jones\";\n

    This code produces the following JSON value:

    {\n    \"name\": \"John Smith\",\n    \"maidenName\": \"Jones\",\n    \"age\": 42,\n    \"hobbies\": [\"hiking\", \"reading\"]\n}\n

    When accessing an invalid index (i.e., an index greater than or equal to the array size), the JSON array is resized such that the passed index is the new maximal index. Intermediate values are filled with null.

    Filling up arrays with null values
    j[\"hobbies\"][0] = \"running\";\nj[\"hobbies\"][3] = \"cooking\";\n

    This code produces the following JSON value:

    {\n    \"name\": \"John Smith\",\n    \"maidenName\": \"Jones\",\n    \"age\": 42,\n    \"hobbies\": [\"running\", \"reading\", null, \"cooking\"]\n}\n
    "},{"location":"features/element_access/unchecked_access/#notes","title":"Notes","text":"

    Design rationale

    The library behaves differently to std::vector and std::map:

    • std::vector::operator[] never inserts a new element.
    • std::map::operator[] is not available for const values.

    The type json wraps all JSON value types. It would be impossible to remove operator[] for const objects. At the same time, inserting elements for non-const objects is really convenient as it avoids awkward insert calls. To this end, we decided to have an inserting non-const behavior for both arrays and objects.

    Info

    The access is unchecked. In case the passed object key does not exist or the passed array index is invalid, no exception is thrown.

    Danger

    • It is undefined behavior to access a const object with a non-existing key.
    • It is undefined behavior to access a const array with an invalid index.
    • In debug mode, an assertion will fire in both cases. You can disable assertions by defining the preprocessor symbol NDEBUG or redefine the macro JSON_ASSERT(x). See the documentation on runtime assertions for more information.

    Exceptions

    operator[] can only be used with objects (with a string argument) or with arrays (with a numeric argument). For other types, a basic_json::type_error is thrown.

    "},{"location":"features/element_access/unchecked_access/#summary","title":"Summary","text":"scenario non-const value const value access to existing object key reference to existing value is returned const reference to existing value is returned access to valid array index reference to existing value is returned const reference to existing value is returned access to non-existing object key reference to newly inserted null value is returned undefined behavior; runtime assertion in debug mode access to invalid array index reference to newly inserted null value is returned; any index between previous maximal index and passed index are filled with null undefined behavior; runtime assertion in debug mode"},{"location":"features/parsing/","title":"Parsing","text":"

    Note

    This page is under construction.

    "},{"location":"features/parsing/#input","title":"Input","text":""},{"location":"features/parsing/#sax-vs-dom-parsing","title":"SAX vs. DOM parsing","text":""},{"location":"features/parsing/#exceptions","title":"Exceptions","text":"

    See parsing and exceptions.

    "},{"location":"features/parsing/json_lines/","title":"JSON Lines","text":"

    The JSON Lines format is a text format of newline-delimited JSON. In particular:

    1. The input must be UTF-8 encoded.
    2. Every line must be a valid JSON value.
    3. The line separator must be \\n. As \\r is silently ignored, \\r\\n is also supported.
    4. The final character may be \\n, but is not required to be one.

    JSON Text example

    {\"name\": \"Gilbert\", \"wins\": [[\"straight\", \"7\u2663\"], [\"one pair\", \"10\u2665\"]]}\n{\"name\": \"Alexa\", \"wins\": [[\"two pair\", \"4\u2660\"], [\"two pair\", \"9\u2660\"]]}\n{\"name\": \"May\", \"wins\": []}\n{\"name\": \"Deloise\", \"wins\": [[\"three of a kind\", \"5\u2663\"]]}\n

    JSON Lines input with more than one value is treated as invalid JSON by the parse or accept functions. To process it line by line, functions like std::getline can be used:

    Example: Parse JSON Text input line by line

    The example below demonstrates how JSON Lines can be processed.

    #include <sstream>\n#include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // JSON Lines (see https://jsonlines.org)\n    std::stringstream input;\n    input << R\"({\"name\": \"Gilbert\", \"wins\": [[\"straight\", \"7\u2663\"], [\"one pair\", \"10\u2665\"]]}\n{\"name\": \"Alexa\", \"wins\": [[\"two pair\", \"4\u2660\"], [\"two pair\", \"9\u2660\"]]}\n{\"name\": \"May\", \"wins\": []}\n{\"name\": \"Deloise\", \"wins\": [[\"three of a kind\", \"5\u2663\"]]}\n)\";\n\n    std::string line;\n    while (std::getline(input, line))\n    {\n        std::cout << json::parse(line) << std::endl;\n    }\n}\n

    Output:

    {\"name\":\"Gilbert\",\"wins\":[[\"straight\",\"7\u2663\"],[\"one pair\",\"10\u2665\"]]}\n{\"name\":\"Alexa\",\"wins\":[[\"two pair\",\"4\u2660\"],[\"two pair\",\"9\u2660\"]]}\n{\"name\":\"May\",\"wins\":[]}\n{\"name\":\"Deloise\",\"wins\":[[\"three of a kind\",\"5\u2663\"]]}\n

    Note

    Using operator>> like

    json j;\nwhile (input >> j)\n{\n    std::cout << j << std::endl;\n}\n

    with a JSON Lines input does not work, because the parser will try to parse one value after the last one.

    "},{"location":"features/parsing/parse_exceptions/","title":"Parsing and Exceptions","text":"

    When the input is not valid JSON, an exception of type parse_error is thrown. This exception contains the position in the input where the error occurred, together with a diagnostic message and the last read input token. The exceptions page contains a list of examples for parse error exceptions. In case you process untrusted input, always enclose your code with a try/catch block, like

    json j;\ntry\n{\n    j = json::parse(my_input);\n}\ncatch (json::parse_error& ex)\n{\n    std::cerr << \"parse error at byte \" << ex.byte << std::endl;\n}\n

    In case exceptions are undesired or not supported by the environment, there are different ways to proceed:

    "},{"location":"features/parsing/parse_exceptions/#switch-off-exceptions","title":"Switch off exceptions","text":"

    The parse() function accepts a bool parameter allow_exceptions which controls whether an exception is thrown when a parse error occurs (true, default) or whether a discarded value should be returned (false).

    json j = json::parse(my_input, nullptr, false);\nif (j.is_discarded())\n{\n    std::cerr << \"parse error\" << std::endl;\n}\n

    Note there is no diagnostic information available in this scenario.

    "},{"location":"features/parsing/parse_exceptions/#use-accept-function","title":"Use accept() function","text":"

    Alternatively, function accept() can be used which does not return a json value, but a bool indicating whether the input is valid JSON.

    if (!json::accept(my_input))\n{\n    std::cerr << \"parse error\" << std::endl;\n}\n

    Again, there is no diagnostic information available.

    "},{"location":"features/parsing/parse_exceptions/#user-defined-sax-interface","title":"User-defined SAX interface","text":"

    Finally, you can implement the SAX interface and decide what should happen in case of a parse error.

    This function has the following interface:

    bool parse_error(std::size_t position,\n                 const std::string& last_token,\n                 const json::exception& ex);\n

    The return value indicates whether the parsing should continue, so the function should usually return false.

    Example
    #include <iostream>\n#include \"json.hpp\"\n\nusing json = nlohmann::json;\n\nclass sax_no_exception : public nlohmann::detail::json_sax_dom_parser<json>\n{\n  public:\n    sax_no_exception(json& j)\n      : nlohmann::detail::json_sax_dom_parser<json>(j, false)\n    {}\n\n    bool parse_error(std::size_t position,\n                     const std::string& last_token,\n                     const json::exception& ex)\n    {\n        std::cerr << \"parse error at input byte \" << position << \"\\n\"\n                  << ex.what() << \"\\n\"\n                  << \"last read: \\\"\" << last_token << \"\\\"\"\n                  << std::endl;\n        return false;\n    }\n};\n\nint main()\n{\n    std::string myinput = \"[1,2,3,]\";\n\n    json result;\n    sax_no_exception sax(result);\n\n    bool parse_result = json::sax_parse(myinput, &sax);\n    if (!parse_result)\n    {\n        std::cerr << \"parsing unsuccessful!\" << std::endl;\n    }\n\n    std::cout << \"parsed value: \" << result << std::endl;\n}\n

    Output:

    parse error at input byte 8\n[json.exception.parse_error.101] parse error at line 1, column 8: syntax error while parsing value - unexpected ']'; expected '[', '{', or a literal\nlast read: \"3,]\"\nparsing unsuccessful!\nparsed value: [1,2,3]\n
    "},{"location":"features/parsing/parser_callbacks/","title":"Parser Callbacks","text":""},{"location":"features/parsing/parser_callbacks/#overview","title":"Overview","text":"

    With a parser callback function, the result of parsing a JSON text can be influenced. When passed to parse, it is called on certain events (passed as parse_event_t via parameter event) with a set recursion depth depth and context JSON value parsed. The return value of the callback function is a boolean indicating whether the element that emitted the callback shall be kept or not.

    The type of the callback function is:

    template<typename BasicJsonType>\nusing parser_callback_t =\n    std::function<bool(int depth, parse_event_t event, BasicJsonType& parsed)>;\n
    "},{"location":"features/parsing/parser_callbacks/#callback-event-types","title":"Callback event types","text":"

    We distinguish six scenarios (determined by the event type) in which the callback function can be called. The following table describes the values of the parameters depth, event, and parsed.

    parameter event description parameter depth parameter parsed parse_event_t::object_start the parser read { and started to process a JSON object depth of the parent of the JSON object a JSON value with type discarded parse_event_t::key the parser read a key of a value in an object depth of the currently parsed JSON object a JSON string containing the key parse_event_t::object_end the parser read } and finished processing a JSON object depth of the parent of the JSON object the parsed JSON object parse_event_t::array_start the parser read [ and started to process a JSON array depth of the parent of the JSON array a JSON value with type discarded parse_event_t::array_end the parser read ] and finished processing a JSON array depth of the parent of the JSON array the parsed JSON array parse_event_t::value the parser finished reading a JSON value depth of the value the parsed JSON value Example

    When parsing the following JSON text,

    {\n    \"name\": \"Berlin\",\n    \"location\": [\n        52.519444,\n        13.406667\n    ]\n}\n

    these calls are made to the callback function:

    event depth parsed object_start 0 discarded key 1 \"name\" value 1 \"Berlin\" key 1 \"location\" array_start 1 discarded value 2 52.519444 value 2 13.406667 array_end 1 [52.519444,13.406667] object_end 0 {\"location\":[52.519444,13.406667],\"name\":\"Berlin\"}"},{"location":"features/parsing/parser_callbacks/#return-value","title":"Return value","text":"

    Discarding a value (i.e., returning false) has different effects depending on the context in which the function was called:

    • Discarded values in structured types are skipped. That is, the parser will behave as if the discarded value was never read.
    • In case a value outside a structured type is skipped, it is replaced with null. This case happens if the top-level element is skipped.
    Example

    The example below demonstrates the parse() function with and without callback function.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, 38793]\n        }\n    }\n    )\";\n\n    // parse and serialize JSON\n    json j_complete = json::parse(text);\n    std::cout << std::setw(4) << j_complete << \"\\n\\n\";\n\n    // define parser callback\n    json::parser_callback_t cb = [](int depth, json::parse_event_t event, json & parsed)\n    {\n        // skip object elements with key \"Thumbnail\"\n        if (event == json::parse_event_t::key and parsed == json(\"Thumbnail\"))\n        {\n            return false;\n        }\n        else\n        {\n            return true;\n        }\n    };\n\n    // parse (with callback) and serialize JSON\n    json j_filtered = json::parse(text, cb);\n    std::cout << std::setw(4) << j_filtered << '\\n';\n}\n

    Output:

    {\n    \"Image\": {\n        \"Animated\": false,\n        \"Height\": 600,\n        \"IDs\": [\n            116,\n            943,\n            234,\n            38793\n        ],\n        \"Thumbnail\": {\n            \"Height\": 125,\n            \"Url\": \"http://www.example.com/image/481989943\",\n            \"Width\": 100\n        },\n        \"Title\": \"View from 15th Floor\",\n        \"Width\": 800\n    }\n}\n\n{\n    \"Image\": {\n        \"Animated\": false,\n        \"Height\": 600,\n        \"IDs\": [\n            116,\n            943,\n            234,\n            38793\n        ],\n        \"Title\": \"View from 15th Floor\",\n        \"Width\": 800\n    }\n}\n
    "},{"location":"features/parsing/sax_interface/","title":"SAX Interface","text":"

    The library uses a SAX-like interface with the following functions:

    classDiagram\n\nclass sax_t [\"json::sax_t\"] {\n    <<interface>>\n    +bool null()*\n\n    +bool boolean(bool val)*\n\n    +bool number_integer(number_integer_t val)*\n    +bool number_unsigned(number_unsigned_t val)*\n\n    +bool number_float(number_float_t val, const string_t& s)*\n\n    +bool string(string_t& val)*\n    +bool binary(binary_t& val)*\n\n    +bool start_object(std::size_t elements)*\n    +bool end_object()*\n    +bool start_array(std::size_t elements)*\n    +bool end_array()*\n    +bool key(string_t& val)*\n\n    +bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex)*\n}
    // called when null is parsed\nbool null();\n\n// called when a boolean is parsed; value is passed\nbool boolean(bool val);\n\n// called when a signed or unsigned integer number is parsed; value is passed\nbool number_integer(number_integer_t val);\nbool number_unsigned(number_unsigned_t val);\n\n// called when a floating-point number is parsed; value and original string is passed\nbool number_float(number_float_t val, const string_t& s);\n\n// called when a string is parsed; value is passed and can be safely moved away\nbool string(string_t& val);\n// called when a binary value is parsed; value is passed and can be safely moved away\nbool binary(binary_t& val);\n\n// called when an object or array begins or ends, resp. The number of elements is passed (or -1 if not known)\nbool start_object(std::size_t elements);\nbool end_object();\nbool start_array(std::size_t elements);\nbool end_array();\n// called when an object key is parsed; value is passed and can be safely moved away\nbool key(string_t& val);\n\n// called when a parse error occurs; byte position, the last token, and an exception is passed\nbool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex);\n

    The return value of each function determines whether parsing should proceed.

    To implement your own SAX handler, proceed as follows:

    1. Implement the SAX interface in a class. You can use class nlohmann::json_sax<json> as base class, but you can also use any class where the functions described above are implemented and public.
    2. Create an object of your SAX interface class, e.g. my_sax.
    3. Call bool json::sax_parse(input, &my_sax); where the first parameter can be any input like a string or an input stream and the second parameter is a pointer to your SAX interface.

    Note the sax_parse function only returns a bool indicating the result of the last executed SAX event. It does not return json value - it is up to you to decide what to do with the SAX events. Furthermore, no exceptions are thrown in case of a parse error - it is up to you what to do with the exception object passed to your parse_error implementation. Internally, the SAX interface is used for the DOM parser (class json_sax_dom_parser) as well as the acceptor (json_sax_acceptor), see file json_sax.hpp.

    "},{"location":"features/parsing/sax_interface/#see-also","title":"See also","text":"
    • json_sax - documentation of the SAX interface
    • sax_parse - SAX parser
    "},{"location":"features/types/","title":"Types","text":"

    This page gives an overview how JSON values are stored and how this can be configured.

    "},{"location":"features/types/#overview","title":"Overview","text":"

    By default, JSON values are stored as follows:

    JSON type C++ type object std::map<std::string, basic_json> array std::vector<basic_json> null std::nullptr_t string std::string boolean bool number std::int64_t, std::uint64_t, and double

    Note there are three different types for numbers - when parsing JSON text, the best fitting type is chosen.

    "},{"location":"features/types/#storage","title":"Storage","text":"
    classDiagram\n\nclass value_t {\n    <<enumeration>>\n    null\n    object\n    array\n    string\n    boolean\n    number_integer\n    number_unsigned\n    number_float\n    binary\n    discarded\n}\n\nclass json_value {\n    <<union>>\n    object_t* object\n    array_t* array\n    string_t* string\n    binary_t* binary\n    boolean_t boolean\n    number_integer_t number_integer\n    number_unsigned_t number_unsigned\n    number_float_t number_float\n}\n\nclass basic_json {\n    -value_t m_type\n    -json_value m_value\n    +typedef object_t\n    +typedef array_t\n    +typedef binary_t\n    +typedef boolean_t\n    +typedef number_integer_t\n    +typedef number_unsigned_t\n    +typedef number_float_t\n}\n\nbasic_json .. json_value\nbasic_json .. value_t
    "},{"location":"features/types/#template-arguments","title":"Template arguments","text":"

    The data types to store a JSON value are derived from the template arguments passed to class basic_json:

    template<\n    template<typename U, typename V, typename... Args> class ObjectType = std::map,\n    template<typename U, typename... Args> class ArrayType = std::vector,\n    class StringType = std::string,\n    class BooleanType = bool,\n    class NumberIntegerType = std::int64_t,\n    class NumberUnsignedType = std::uint64_t,\n    class NumberFloatType = double,\n    template<typename U> class AllocatorType = std::allocator,\n    template<typename T, typename SFINAE = void> class JSONSerializer = adl_serializer,\n    class BinaryType = std::vector<std::uint8_t>\n>\nclass basic_json;\n

    Type json is an alias for basic_json<> and uses the default types.

    From the template arguments, the following types are derived:

    using object_comparator_t = std::less<>;\nusing object_t = ObjectType<StringType, basic_json, object_comparator_t,\n                   AllocatorType<std::pair<const StringType, basic_json>>>;\n\nusing array_t = ArrayType<basic_json, AllocatorType<basic_json>>;\n\nusing string_t = StringType;\n\nusing boolean_t = BooleanType;\n\nusing number_integer_t = NumberIntegerType;\nusing number_unsigned_t = NumberUnsignedType;\nusing number_float_t = NumberFloatType;\n\nusing binary_t = nlohmann::byte_container_with_subtype<BinaryType>;\n
    "},{"location":"features/types/#objects","title":"Objects","text":"

    RFC 8259 describes JSON objects as follows:

    An object is an unordered collection of zero or more name/value pairs, where a name is a string and a value is a string, number, boolean, null, object, or array.

    "},{"location":"features/types/#default-type","title":"Default type","text":"

    With the default values for ObjectType (std::map), StringType (std::string), and AllocatorType (std::allocator), the default value for object_t is:

    std::map<\n  std::string, // key_type\n  basic_json, // value_type\n  std::less<>, // key_compare\n  std::allocator<std::pair<const std::string, basic_json>> // allocator_type\n>\n
    "},{"location":"features/types/#behavior","title":"Behavior","text":"

    The choice of object_t influences the behavior of the JSON class. With the default type, objects have the following behavior:

    • When all names are unique, objects will be interoperable in the sense that all software implementations receiving that object will agree on the name-value mappings.
    • When the names within an object are not unique, it is unspecified which one of the values for a given key will be chosen. For instance, {\"key\": 2, \"key\": 1} could be equal to either {\"key\": 1} or {\"key\": 2}.
    • Internally, name/value pairs are stored in lexicographical order of the names. Objects will also be serialized (see dump) in this order. For instance, both {\"b\": 1, \"a\": 2} and {\"a\": 2, \"b\": 1} will be stored and serialized as {\"a\": 2, \"b\": 1}.
    • When comparing objects, the order of the name/value pairs is irrelevant. This makes objects interoperable in the sense that they will not be affected by these differences. For instance, {\"b\": 1, \"a\": 2} and {\"a\": 2, \"b\": 1} will be treated as equal.
    "},{"location":"features/types/#key-order","title":"Key order","text":"

    The order name/value pairs are added to the object is not preserved by the library. Therefore, iterating an object may return name/value pairs in a different order than they were originally stored. In fact, keys will be traversed in alphabetical order as std::map with std::less is used by default. Please note this behavior conforms to RFC 8259, because any order implements the specified \"unordered\" nature of JSON objects.

    "},{"location":"features/types/#limits","title":"Limits","text":"

    RFC 8259 specifies:

    An implementation may set limits on the maximum depth of nesting.

    In this class, the object's limit of nesting is not explicitly constrained. However, a maximum depth of nesting may be introduced by the compiler or runtime environment. A theoretical limit can be queried by calling the max_size function of a JSON object.

    "},{"location":"features/types/#storage_1","title":"Storage","text":"

    Objects are stored as pointers in a basic_json type. That is, for any access to object values, a pointer of type object_t* must be dereferenced.

    "},{"location":"features/types/#arrays","title":"Arrays","text":"

    RFC 8259 describes JSON arrays as follows:

    An array is an ordered sequence of zero or more values.

    "},{"location":"features/types/#default-type_1","title":"Default type","text":"

    With the default values for ArrayType (std::vector) and AllocatorType (std::allocator), the default value for array_t is:

    std::vector<\n  basic_json, // value_type\n  std::allocator<basic_json> // allocator_type\n>\n
    "},{"location":"features/types/#limits_1","title":"Limits","text":"

    RFC 8259 specifies:

    An implementation may set limits on the maximum depth of nesting.

    In this class, the array's limit of nesting is not explicitly constrained. However, a maximum depth of nesting may be introduced by the compiler or runtime environment. A theoretical limit can be queried by calling the max_size function of a JSON array.

    "},{"location":"features/types/#storage_2","title":"Storage","text":"

    Arrays are stored as pointers in a basic_json type. That is, for any access to array values, a pointer of type array_t* must be dereferenced.

    "},{"location":"features/types/#strings","title":"Strings","text":"

    RFC 8259 describes JSON strings as follows:

    A string is a sequence of zero or more Unicode characters.

    Unicode values are split by the JSON class into byte-sized characters during deserialization.

    "},{"location":"features/types/#default-type_2","title":"Default type","text":"

    With the default values for StringType (std::string), the default value for string_t is std::string.

    "},{"location":"features/types/#encoding","title":"Encoding","text":"

    Strings are stored in UTF-8 encoding. Therefore, functions like std::string::size() or std::string::length() return the number of bytes in the string rather than the number of characters or glyphs.

    "},{"location":"features/types/#string-comparison","title":"String comparison","text":"

    RFC 8259 states:

    Software implementations are typically required to test names of object members for equality. Implementations that transform the textual representation into sequences of Unicode code units and then perform the comparison numerically, code unit by code unit, are interoperable in the sense that implementations will agree in all cases on equality or inequality of two strings. For example, implementations that compare strings with escaped characters unconverted may incorrectly find that \"a\\\\b\" and \"a\\u005Cb\" are not equal.

    This implementation is interoperable as it does compare strings code unit by code unit.

    "},{"location":"features/types/#storage_3","title":"Storage","text":"

    String values are stored as pointers in a basic_json type. That is, for any access to string values, a pointer of type string_t* must be dereferenced.

    "},{"location":"features/types/#booleans","title":"Booleans","text":"

    RFC 8259 implicitly describes a boolean as a type which differentiates the two literals true and false.

    "},{"location":"features/types/#default-type_3","title":"Default type","text":"

    With the default values for BooleanType (bool), the default value for boolean_t is bool.

    "},{"location":"features/types/#storage_4","title":"Storage","text":"

    Boolean values are stored directly inside a basic_json type.

    "},{"location":"features/types/#numbers","title":"Numbers","text":"

    See the number handling article for a detailed discussion on how numbers are handled by this library.

    RFC 8259 describes numbers as follows:

    The representation of numbers is similar to that used in most programming languages. A number is represented in base 10 using decimal digits. It contains an integer component that may be prefixed with an optional minus sign, which may be followed by a fraction part and/or an exponent part. Leading zeros are not allowed. (...) Numeric values that cannot be represented in the grammar below (such as Infinity and NaN) are not permitted.

    This description includes both integer and floating-point numbers. However, C++ allows more precise storage if it is known whether the number is a signed integer, an unsigned integer or a floating-point number. Therefore, three different types, number_integer_t, number_unsigned_t, and number_float_t are used.

    "},{"location":"features/types/#default-types","title":"Default types","text":"

    With the default values for NumberIntegerType (std::int64_t), the default value for number_integer_t is std::int64_t. With the default values for NumberUnsignedType (std::uint64_t), the default value for number_unsigned_t is std::uint64_t. With the default values for NumberFloatType (double), the default value for number_float_t is double.

    "},{"location":"features/types/#default-behavior","title":"Default behavior","text":"
    • The restrictions about leading zeros is not enforced in C++. Instead, leading zeros in integer literals lead to an interpretation as octal number. Internally, the value will be stored as decimal number. For instance, the C++ integer literal 010 will be serialized to 8. During deserialization, leading zeros yield an error.
    • Not-a-number (NaN) values will be serialized to null.
    "},{"location":"features/types/#limits_2","title":"Limits","text":"

    RFC 8259 specifies:

    An implementation may set limits on the range and precision of numbers.

    When the default type is used, the maximal integer number that can be stored is 9223372036854775807 (INT64_MAX) and the minimal integer number that can be stored is -9223372036854775808 (INT64_MIN). Integer numbers that are out of range will yield over/underflow when used in a constructor. During deserialization, too large or small integer numbers will be automatically be stored as number_unsigned_t or number_float_t.

    When the default type is used, the maximal unsigned integer number that can be stored is 18446744073709551615 (UINT64_MAX) and the minimal integer number that can be stored is 0. Integer numbers that are out of range will yield over/underflow when used in a constructor. During deserialization, too large or small integer numbers will be automatically be stored as number_integer_t or number_float_t.

    RFC 8259 further states:

    Note that when such software is used, numbers that are integers and are in the range [-2^{53}+1, 2^{53}-1] are interoperable in the sense that implementations will agree exactly on their numeric values.

    As this range is a subrange of the exactly supported range [INT64_MIN, INT64_MAX], this class's integer type is interoperable.

    RFC 8259 states:

    This specification allows implementations to set limits on the range and precision of numbers accepted. Since software that implements IEEE 754-2008 binary64 (double precision) numbers is generally available and widely used, good interoperability can be achieved by implementations that expect no more precision or range than these provide, in the sense that implementations will approximate JSON numbers within the expected precision.

    This implementation does exactly follow this approach, as it uses double precision floating-point numbers. Note values smaller than -1.79769313486232e+308 and values greater than 1.79769313486232e+308 will be stored as NaN internally and be serialized to null.

    "},{"location":"features/types/#storage_5","title":"Storage","text":"

    Integer number values, unsigned integer number values, and floating-point number values are stored directly inside a basic_json type.

    "},{"location":"features/types/number_handling/","title":"Number Handling","text":"

    This document describes how the library is handling numbers.

    "},{"location":"features/types/number_handling/#background","title":"Background","text":"

    This section briefly summarizes how the JSON specification describes how numbers should be handled.

    "},{"location":"features/types/number_handling/#json-number-syntax","title":"JSON number syntax","text":"

    JSON defines the syntax of numbers as follows:

    RFC 8259, Section 6

    The representation of numbers is similar to that used in most programming languages. A number is represented in base 10 using decimal digits. It contains an integer component that may be prefixed with an optional minus sign, which may be followed by a fraction part and/or an exponent part. Leading zeros are not allowed.

    A fraction part is a decimal point followed by one or more digits.

    An exponent part begins with the letter E in uppercase or lowercase, which may be followed by a plus or minus sign. The E and optional sign are followed by one or more digits.

    The following railroad diagram from json.org visualizes the number syntax:

    "},{"location":"features/types/number_handling/#number-interoperability","title":"Number interoperability","text":"

    On number interoperability, the following remarks are made:

    RFC 8259, Section 6

    This specification allows implementations to set limits on the range and precision of numbers accepted. Since software that implements IEEE 754 binary64 (double precision) numbers [IEEE754] is generally available and widely used, good interoperability can be achieved by implementations that expect no more precision or range than these provide, in the sense that implementations will approximate JSON numbers within the expected precision. A JSON number such as 1E400 or 3.141592653589793238462643383279 may indicate potential interoperability problems, since it suggests that the software that created it expects receiving software to have greater capabilities for numeric magnitude and precision than is widely available.

    Note that when such software is used, numbers that are integers and are in the range [-2^{53}+1, 2^{53}-1] are interoperable in the sense that implementations will agree exactly on their numeric values.

    "},{"location":"features/types/number_handling/#library-implementation","title":"Library implementation","text":"

    This section describes how the above number specification is implemented by this library.

    "},{"location":"features/types/number_handling/#number-storage","title":"Number storage","text":"

    In the default json type, numbers are stored as std::uint64_t, std::int64_t, and double, respectively. Thereby, std::uint64_t and std::int64_t are used only if they can store the number without loss of precision. If this is impossible (e.g., if the number is too large), the number is stored as double.

    Notes

    • Numbers with a decimal digit or scientific notation are always stored as double.
    • The number types can be changed, see Template number types.
    • As of version 3.9.1, the conversion is realized by std::strtoull, std::strtoll, and std::strtod, respectively.

    Examples

    • Integer -12345678912345789123456789 is smaller than INT64_MIN and will be stored as floating-point number -1.2345678912345788e+25.
    • Integer 1E3 will be stored as floating-point number 1000.0.
    "},{"location":"features/types/number_handling/#number-limits","title":"Number limits","text":"
    • Any 64-bit signed or unsigned integer can be stored without loss of precision.
    • Numbers exceeding the limits of double (i.e., numbers that after conversion via std::strtod are not satisfying std::isfinite such as 1E400) will throw exception json.exception.out_of_range.406 during parsing.
    • Floating-point numbers are rounded to the next number representable as double. For instance 3.141592653589793238462643383279 is stored as 0x400921fb54442d18. This is the same behavior as the code double x = 3.141592653589793238462643383279;.

    Interoperability

    • The library interoperable with respect to the specification, because its supported range [-2^{63}, 2^{64}-1] is larger than the described range [-2^{53}+1, 2^{53}-1].
    • All integers outside the range [-2^{63}, 2^{64}-1], as well as floating-point numbers are stored as double. This also concurs with the specification above.
    "},{"location":"features/types/number_handling/#zeros","title":"Zeros","text":"

    The JSON number grammar allows for different ways to express zero, and this library will store zeros differently:

    Literal Stored value and type Serialization 0 std::uint64_t(0) 0 -0 std::int64_t(0) 0 0.0 double(0.0) 0.0 -0.0 double(-0.0) -0.0 0E0 double(0.0) 0.0 -0E0 double(-0.0) -0.0

    That is, -0 is stored as a signed integer, but the serialization does not reproduce the -.

    "},{"location":"features/types/number_handling/#number-serialization","title":"Number serialization","text":"
    • Integer numbers are serialized as is; that is, no scientific notation is used.
    • Floating-point numbers are serialized as specified by the %g printf modifier with std::numeric_limits<double>::max_digits10 significant digits. The rationale is to use the shortest representation while still allow round-tripping.

    Notes regarding precision of floating-point numbers

    As described above, floating-point numbers are rounded to the nearest double and serialized with the shortest representation to allow round-tripping. This can yield confusing examples:

    • The serialization can have fewer decimal places than the input: 2555.5599999999999 will be serialized as 2555.56. The reverse can also be true.
    • The serialization can be in scientific notation even if the input is not: 0.0000972439793401814 will be serialized as 9.72439793401814e-05. The reverse can also be true: 12345E-5 will be serialized as 0.12345.
    • Conversions from float to double can also introduce rounding errors:
      float f = 0.3;\njson j = f;\nstd::cout << j << '\\n';\n
      yields 0.30000001192092896.

    All examples here can be reproduced by passing the original double value to

    std::printf(\"%.*g\\n\", std::numeric_limits<double>::max_digits10, double_value);\n
    "},{"location":"features/types/number_handling/#nan-handling","title":"NaN handling","text":"

    NaN (not-a-number) cannot be expressed with the number syntax described above and are in fact explicitly excluded:

    RFC 8259, Section 6

    Numeric values that cannot be represented in the grammar below (such as Infinity and NaN) are not permitted.

    That is, there is no way to parse a NaN value. However, NaN values can be stored in a JSON value by assignment.

    This library serializes NaN values as null. This corresponds to the behavior of JavaScript's JSON.stringify function.

    Example

    The following example shows how a NaN value is stored in a json value.

    int main()\n{\n    double val = std::numeric_limits<double>::quiet_NaN();\n    std::cout << \"val=\" << val << std::endl;\n    json j = val;\n    std::cout << \"j=\" << j.dump() << std::endl;\n    val = j;\n    std::cout << \"val=\" << val << std::endl;\n}\n

    output:

    val=nan\nj=null\nval=nan\n
    "},{"location":"features/types/number_handling/#number-comparison","title":"Number comparison","text":"

    Floating-point inside JSON values numbers are compared with json::number_float_t::operator== which is double::operator== by default.

    Alternative comparison functions

    To compare floating-point while respecting an epsilon, an alternative comparison function could be used, for instance

    template<typename T, typename = typename std::enable_if<std::is_floating_point<T>::value, T>::type>\ninline bool is_same(T a, T b, T epsilon = std::numeric_limits<T>::epsilon()) noexcept\n{\n    return std::abs(a - b) <= epsilon;\n}\n
    Or you can self-define an operator equal function like this:

    bool my_equal(const_reference lhs, const_reference rhs)\n{\n    const auto lhs_type lhs.type();\n    const auto rhs_type rhs.type();\n    if (lhs_type == rhs_type)\n    {\n        switch(lhs_type)\n        {\n            // self_defined case\n            case value_t::number_float:\n                return std::abs(lhs - rhs) <= std::numeric_limits<float>::epsilon();\n\n            // other cases remain the same with the original\n            ...\n        }\n    }\n    ...\n}\n

    (see #703 for more information.)

    Note

    NaN values never compare equal to themselves or to other NaN values. See #514.

    "},{"location":"features/types/number_handling/#number-conversion","title":"Number conversion","text":"

    Just like the C++ language itself, the get family of functions allows conversions between unsigned and signed integers, and between integers and floating-point values to integers. This behavior may be surprising.

    Unconditional number conversions

    double d = 42.3;                                   // non-integer double value 42.3\njson jd = d;                                       // stores double value 42.3\nstd::int64_t i = jd.template get<std::int64_t>();  // now i==42; no warning or error is produced\n

    Note the last line with throw a json.exception.type_error.302 exception if jd is not a numerical type, for instance a string.

    The rationale is twofold:

    1. JSON does not define a number type or precision (see above).
    2. C++ also allows to silently convert between number types.

    Conditional number conversion

    The code above can be solved by explicitly checking the nature of the value with members such as is_number_integer() or is_number_unsigned():

    // check if jd is really integer-valued\nif (jd.is_number_integer())\n{\n    // if so, do the conversion and use i\n    std::int64_t i = jd.template get<std::int64_t>();\n    // ...\n}\nelse\n{\n    // otherwise, take appropriate action\n    // ...\n}\n

    Note this approach also has the advantage that it can react on non-numerical JSON value types such as strings.

    (Example taken from #777.)

    "},{"location":"features/types/number_handling/#determine-number-types","title":"Determine number types","text":"

    As the example in Number conversion shows, there are different functions to determine the type of the stored number:

    • is_number() returns true for any number type
    • is_number_integer() returns true for signed and unsigned integers
    • is_number_unsigned() returns true for unsigned integers only
    • is_number_float() returns true for floating-point numbers
    • type_name() returns \"number\" for any number type
    • type() returns a different enumerator of value_t for all number types
    function unsigned integer signed integer floating-point string is_number() true true true false is_number_integer() true true false false is_number_unsigned() true false false false is_number_float() false false true false type_name() \"number\" \"number\" \"number\" \"string\" type() number_unsigned number_integer number_float string"},{"location":"features/types/number_handling/#template-number-types","title":"Template number types","text":"

    The number types can be changed with template parameters.

    position number type default type possible values 5 signed integers std::int64_t std::int32_t, std::int16_t, etc. 6 unsigned integers std::uint64_t std::uint32_t, std::uint16_t, etc. 7 floating-point double float, long double

    Constraints on number types

    • The type for signed integers must be convertible from long long. The type for floating-point numbers is used in case of overflow.
    • The type for unsigned integers must be convertible from unsigned long long. The type for floating-point numbers is used in case of overflow.
    • The types for signed and unsigned integers must be distinct, see #2573.
    • Only double, float, and long double are supported for floating-point numbers.

    Example

    A basic_json type that uses long double as floating-point type.

    using json_ld = nlohmann::basic_json<std::map, std::vector, std::string, bool,\n                                     std::int64_t, std::uint64_t, long double>;\n

    Note values should then be parsed with json_ld::parse rather than json::parse as the latter would parse floating-point values to double before then converting them to long double.

    "},{"location":"home/architecture/","title":"Architecture","text":"

    Info

    This page is still under construction. Its goal is to provide a high-level overview of the library's architecture. This should help new contributors to get an idea of the used concepts and where to make changes.

    "},{"location":"home/architecture/#overview","title":"Overview","text":"

    The main structure is class nlohmann::basic_json.

    • public API
    • container interface
    • iterators
    "},{"location":"home/architecture/#template-specializations","title":"Template specializations","text":"
    • describe template parameters of basic_json
    • json
    • ordered_json via ordered_map
    "},{"location":"home/architecture/#value-storage","title":"Value storage","text":"

    Values are stored as a tagged union of value_t and json_value.

    /// the type of the current element\nvalue_t m_type = value_t::null;\n\n/// the value of the current element\njson_value m_value = {};\n

    with

    enum class value_t : std::uint8_t\n{\n    null,             ///< null value\n    object,           ///< object (unordered set of name/value pairs)\n    array,            ///< array (ordered collection of values)\n    string,           ///< string value\n    boolean,          ///< boolean value\n    number_integer,   ///< number value (signed integer)\n    number_unsigned,  ///< number value (unsigned integer)\n    number_float,     ///< number value (floating-point)\n    binary,           ///< binary array (ordered collection of bytes)\n    discarded         ///< discarded by the parser callback function\n};\n\nunion json_value {\n  /// object (stored with pointer to save storage)\n  object_t *object;\n  /// array (stored with pointer to save storage)\n  array_t *array;\n  /// string (stored with pointer to save storage)\n  string_t *string;\n  /// binary (stored with pointer to save storage)\n  binary_t *binary;\n  /// boolean\n  boolean_t boolean;\n  /// number (integer)\n  number_integer_t number_integer;\n  /// number (unsigned integer)\n  number_unsigned_t number_unsigned;\n  /// number (floating-point)\n  number_float_t number_float;\n};\n
    "},{"location":"home/architecture/#parsing-inputs-deserialization","title":"Parsing inputs (deserialization)","text":"

    Input is read via input adapters that abstract a source with a common interface:

    /// read a single character\nstd::char_traits<char>::int_type get_character() noexcept;\n\n/// read multiple characters to a destination buffer and\n/// returns the number of characters successfully read\ntemplate<class T>\nstd::size_t get_elements(T* dest, std::size_t count = 1);\n

    List examples of input adapters.

    "},{"location":"home/architecture/#sax-interface","title":"SAX Interface","text":"

    TODO

    "},{"location":"home/architecture/#writing-outputs-serialization","title":"Writing outputs (serialization)","text":"

    Output is written via output adapters:

    template<typename T>\nvoid write_character(CharType c);\n\ntemplate<typename CharType>\nvoid write_characters(const CharType* s, std::size_t length);\n

    List examples of output adapters.

    "},{"location":"home/architecture/#value-conversion","title":"Value conversion","text":"
    template<class T>\nvoid to_json(basic_json& j, const T& t);\n\ntemplate<class T>\nvoid from_json(const basic_json& j, T& t);\n
    "},{"location":"home/architecture/#additional-features","title":"Additional features","text":"
    • JSON Pointers
    • Binary formats
    • Custom base class
    • Conversion macros
    "},{"location":"home/architecture/#details-namespace","title":"Details namespace","text":"
    • C++ feature backports
    "},{"location":"home/customers/","title":"Customers","text":"

    The library is used in multiple projects, applications, operating systems, etc. The list below is not exhaustive, but the result of an internet search. If you know further customers of the library, please let me know.

    "},{"location":"home/customers/#space-exploration","title":"Space Exploration","text":"
    • Peregrine Lunar Lander Flight 01 - The library was utilized for payload management in the Peregrine Moon Lander, developed by Astrobotic Technology and launched as part of NASA's Commercial Lunar Payload Services (CLPS) program. After six days in orbit, the spacecraft was intentionally redirected into Earth's atmosphere, where it burned up over the Pacific Ocean on January 18, 2024.
    "},{"location":"home/customers/#automotive","title":"Automotive","text":"
    • Alexa Auto SDK, a software development kit enabling the integration of Alexa into automotive systems
    • Apollo, a framework for building autonomous driving systems
    • Automotive Grade Linux (AGL): a collaborative open-source platform for automotive software development
    • Genesis Motor (infotainment), a luxury automotive brand
    • Hyundai (infotainment), a global automotive brand
    • Kia (infotainment), a global automotive brand
    • Mercedes-Benz Operating System (MB.OS), a core component of the vehicle software ecosystem from Mercedes-Benz
    • Rivian (infotainment), an electric vehicle manufacturer
    • Suzuki (infotainment), a global automotive and motorcycle manufacturer
    "},{"location":"home/customers/#gaming-and-entertainment","title":"Gaming and Entertainment","text":"
    • Assassin's Creed: Mirage: a stealth-action game set in the Middle East, focusing on the journey of a young assassin with classic parkour and stealth mechanics
    • Chasm: The Rift: a first-person shooter blending horror and adventure, where players navigate dark realms and battle monsters
    • College Football 25: a college football simulation game featuring gameplay that mimics real-life college teams and competitions
    • Concepts: a digital sketching app designed for creative professionals, offering flexible drawing tools for illustration, design, and brainstorming
    • Depthkit: a tool for creating and capturing volumetric video, enabling immersive 3D experiences and interactive content
    • immersivetech: a technology company focused on immersive experiences, providing tools and solutions for virtual and augmented reality applications
    • LOOT, a tool for optimizing the load order of game plugins, commonly used in The Elder Scrolls and Fallout series
    • Madden NFL 25: a sports simulation game capturing the excitement of American football with realistic gameplay and team management features
    • Marne, an unofficial private server platform for hosting custom Battlefield 1 game experiences
    • Minecraft, a popular sandbox video game
    • NHL 22: a hockey simulation game offering realistic gameplay, team management, and various modes to enhance the hockey experience
    • Pixelpart: a 2D animation and video compositing software that allows users to create animated graphics and visual effects with a focus on simplicity and ease of use
    • Red Dead Redemption II: an open-world action-adventure game following an outlaw's story in the late 1800s, emphasizing deep storytelling and immersive gameplay
    • Tactics Ogre: Reborn, a tactical role-playing game featuring strategic battles and deep storytelling elements
    • Throne and Liberty, an MMORPG that offers an expansive fantasy world with dynamic gameplay and immersive storytelling
    • Unity Vivox, a communication service that enables voice and text chat functionality in multiplayer games developed with Unity
    • Zool: Redimensioned: a modern reimagining of the classic platformer featuring fast-paced gameplay and vibrant environments
    "},{"location":"home/customers/#consumer-electronics","title":"Consumer Electronics","text":"
    • Audinate: a provider of networked audio solutions specializing in Dante technology, which facilitates high-quality digital audio transport over IP networks
    • Cisco Webex Desk Camera, a video camera designed for professional-quality video conferencing and remote collaboration
    • Philips Hue Personal Wireless Lighting: a smart lighting system for customizable and wireless home illumination
    • Ray-Ban Meta Smart glasses, a pair of smart glasses designed for capturing photos and videos with integrated connectivity and social features
    • Siemens SINEMA Remote Connect, a remote connectivity solution for monitoring and managing industrial networks and devices securely
    • Sony PlayStation 4, a gaming console developed by Sony that offers a wide range of games and multimedia entertainment features
    • Sony Virtual Webcam Driver for Remote Camera, a software driver that enables the use of Sony cameras as virtual webcams for video conferencing and streaming
    "},{"location":"home/customers/#operating-systems","title":"Operating Systems","text":"
    • Apple iOS and macOS, a family of operating systems developed by Apple, including iOS for mobile devices and macOS for desktop computers
    • Google Fuchsia, an open-source operating system developed by Google, designed to be secure, updatable, and adaptable across various devices
    • SerenityOS, an open-source operating system that aims to provide a simple and beautiful user experience with a focus on simplicity and elegance
    • Yocto: a Linux-based build system for creating custom operating systems and software distributions, tailored for embedded devices and IoT applications
    "},{"location":"home/customers/#development-tools-and-ides","title":"Development Tools and IDEs","text":"
    • Accentize SpectralBalance, an adaptive speech analysis tool designed to enhance audio quality by optimizing frequency balance in recordings
    • Arm Compiler for Linux, a software development toolchain for compiling and optimizing applications on Arm-based Linux systems
    • BBEdit, a professional text and code editor for macOS
    • CoderPad, a collaborative coding platform that enables real-time code interviews and assessments for developers; the library is included in every CoderPad instance and can be accessed with a simple #include \"json.hpp\"
    • Compiler Explorer, a web-based tool that allows users to write, compile, and visualize the assembly output of code in various programming languages; the library is readily available and accessible with the directive #include <nlohmann/json.hpp>.
    • GitHub CodeQL, a code analysis tool used for identifying security vulnerabilities and bugs in software through semantic queries
    • Hex-Rays: a reverse engineering toolset for analyzing and decompiling binaries, primarily used for security research and vulnerability analysis
    • ImHex, a hex editor designed for reverse engineering, providing advanced features for data analysis and manipulation
    • Intel GPA Framework, a suite of cross-platform tools for capturing, analyzing, and optimizing graphics applications across different APIs
    • Meta Yoga, a layout engine that facilitates flexible and efficient user interface design across multiple platforms
    • MKVToolNix, a set of tools for creating, editing, and inspecting MKV (Matroska) multimedia container files
    • NVIDIA Nsight Compute, a performance analysis tool for CUDA applications that provides detailed insights into GPU performance metrics
    • Notepad++, a free source code editor that supports various programming languages
    • OpenRGB, an open source RGB lighting control that doesn't depend on manufacturer software
    • OpenTelemetry C++: a library for collecting and exporting observability data in C++, enabling developers to implement distributed tracing and metrics in their application
    • Qt Creator, an IDE for developing applications using the Qt application framework
    • Scanbot SDK: a software development kit (SDK) that provides tools for integrating advanced document scanning and barcode scanning capabilities into applications
    "},{"location":"home/customers/#machine-learning-and-ai","title":"Machine Learning and AI","text":"
    • Apple Core ML Tools, a set of tools for converting and configuring machine learning models for deployment in Apple's Core ML framework
    • Avular Mobile Robotics: a platform for developing and deploying mobile robotics solutions
    • Google gemma.cpp, a lightweight C++ inference engine designed for running AI models from the Gemma family
    • llama.cpp, a C++ library designed for efficient inference of large language models (LLMs), enabling streamlined integration into applications
    • MLX, an array framework for machine learning on Apple silicon
    • Mozilla llamafile, a tool designed for distributing and executing large language models (LLMs) efficiently using a single file format
    • NVIDIA ACE, a suite of real-time AI solutions designed for the development of interactive avatars and digital human applications, enabling scalable and sophisticated user interactions
    • Peer: a platform offering personalized AI assistants for interactive learning and creative collaboration
    • stable-diffusion.cpp: a C++ implementation of the Stable Diffusion image generation model
    • TanvasTouch: a software development kit (SDK) that enables developers to create tactile experiences on touchscreens, allowing users to feel textures and physical sensations in a digital environment
    • TensorFlow, a machine learning framework that facilitates the development and training of models, supporting data serialization and efficient data exchange between components
    "},{"location":"home/customers/#scientific-research-and-analysis","title":"Scientific Research and Analysis","text":"
    • BLACK, a bounded linear temporal logic (LTL) satisfiability checker
    • CERN Atlas Athena, a software framework used in the ATLAS experiment at the Large Hadron Collider (LHC) for performance monitoring
    • KAMERA: a platform for synchronized data collection and real-time deep learning to map marine species like polar bears and seals, aiding Arctic ecosystem research
    • KiCad: a free and open-source software suite for electronic design automation
    • MeVisLab: a software framework for medical image processing and visualization.
    • OpenPMD API: a versatile programming interface for accessing and managing scientific data, designed to facilitate the efficient storage, retrieval, and sharing of simulation data across various applications and platforms
    • ParaView: an open-source tool for large-scale data visualization and analysis across various scientific domains
    • QGIS: a free and open-source geographic information system (GIS) application that allows users to create, edit, visualize, and analyze geospatial data across a variety of formats
    • VTK: a software library for 3D computer graphics, image processing, and visualization
    • VolView: a lightweight application for interactive visualization and analysis of 3D medical imaging data.
    "},{"location":"home/customers/#business-and-productivity-software","title":"Business and Productivity Software","text":"
    • ArcGIS PRO, a desktop geographic information system (GIS) application developed by Esri for mapping and spatial analysis
    • Autodesk Desktop, a software platform developed by Autodesk for creating and managing desktop applications and services
    • Check Point: a cybersecurity company specializing in threat prevention and network security solutions, offering a range of products designed to protect enterprises from cyber threats and ensure data integrity
    • Microsoft Office for Mac, a suite of productivity applications developed by Microsoft for macOS, including tools for word processing, spreadsheets, and presentations
    • Nexthink Infinity: a digital employee experience management platform for monitoring and improving IT performance
    • Sophos Connect Client: a secure VPN client from Sophos that allows remote users to connect to their corporate network, ensuring secure access to resources and data
    • Stonebranch: a cloud-based cybersecurity solution that integrates backup, disaster recovery, and cybersecurity features to protect data and ensure business continuity for organizations
    • Tablecruncher: a data analysis tool that allows users to import, analyze, and visualize spreadsheet data, offering interactive features for better insights and decision-making
    • magicplan, a mobile application for creating floor plans and interior designs using augmented reality
    "},{"location":"home/customers/#databases-and-big-data","title":"Databases and Big Data","text":"
    • ADIOS2: a data management framework designed for high-performance input and output operations
    • Cribl Stream: a real-time data processing platform that enables organizations to collect, route, and transform observability data, enhancing visibility and insights into their systems
    • DB Browser for SQLite, a visual open-source tool for creating, designing, and editing SQLite database files
    • MySQL Connector/C++, a C++ library for connecting and interacting with MySQL databases
    • MySQL NDB Cluster, a distributed database system that provides high availability and scalability for MySQL databases
    • PrestoDB, a distributed SQL query engine designed for large-scale data analytics, originally developed by Facebook
    • ROOT Data Analysis Framework, an open-source data analysis framework widely used in high-energy physics and other fields for data processing and visualization
    "},{"location":"home/customers/#simulation-and-modeling","title":"Simulation and Modeling","text":"
    • Arcturus HoloSuite, a software toolset for capturing, editing, and streaming volumetric video, featuring advanced compression technologies for high-quality 3D content creation
    • azul, a fast and efficient 3D city model viewer designed for visualizing urban environments and spatial data
    • Blender, a free and open-source 3D creation suite for modeling, animation, rendering, and more
    • cpplot, a library for creating interactive graphs and charts in C++, which can be viewed in web browsers
    • NVIDIA Omniverse, a platform for 3D content creation and collaboration that enables real-time simulations and interactive experiences across various industries
    • Pixar Renderman, a photorealistic 3D rendering software developed by Pixar, widely used in the film industry for creating high-quality visual effects and animations
    • ROS - Robot Operating System, a set of software libraries and tools that assist in developing robot applications
    • UBS, a multinational financial services and banking company
    • GAMS: a high-performance mathematical modeling system for optimization and decision support
    • M-Star: a computational fluid dynamics software for simulating and analyzing fluid flow
    • MapleSim CAD Toolbox: a software extension for MapleSim that integrates CAD models, allowing users to import, manipulate, and analyze 3D CAD data within the MapleSim environment for enhanced modeling and simulation
    • Kitware SMTK: a software toolkit for managing simulation models and workflows in scientific and engineering applications
    "},{"location":"home/customers/#enterprise-and-cloud-applications","title":"Enterprise and Cloud Applications","text":"
    • Acronis Cyber Protect Cloud: an all-in-one data protection solution that combines backup, disaster recovery, and cybersecurity to safeguard business data from threats like ransomware
    • Baereos: a backup solution that provides data protection and recovery options for various environments, including physical and virtual systems
    • Bitdefender Home Scanner, a tool from Bitdefender that scans devices for malware and security threats, providing a safeguard against potential online dangers
    • Citrix Provisioning: a solution that streamlines the delivery of virtual desktops and applications by allowing administrators to manage and provision resources efficiently across multiple environments
    • Citrix Virtual Apps and Desktops, a solution from Citrix that delivers virtual apps and desktops
    • Cyberarc: a security solution that specializes in privileged access management, enabling organizations to control and monitor access to critical systems and data, thereby enhancing overall cybersecurity posture
    • Elster: a digital platform developed by German tax authorities for secure and efficient electronic tax filing and management using secunet protect4use
    • Egnyte Desktop: a secure cloud storage solution designed for businesses, enabling file sharing, collaboration, and data management across teams while ensuring compliance and data protection
    • Ethereum Solidity, a high-level, object-oriented programming language designed for implementing smart contracts on the Ethereum platform
    • Inciga: a monitoring tool for IT infrastructure, designed to provide insights into system performance and availability through customizable dashboards and alerts
    • Intel Accelerator Management Daemon for VMware ESXi: a management tool designed for monitoring and controlling Intel hardware accelerators within VMware ESXi environments, optimizing performance and resource allocation
    • Juniper Identity Management Service
    • Microsoft Azure IoT SDK, a collection of tools and libraries to help developers connect, build, and deploy Internet of Things (IoT) solutions on the Azure cloud platform
    • Microsoft WinGet, a command-line utility included in the Windows Package Manager
    • Pointr: a platform for indoor positioning and navigation solutions, offering tools and SDKs for developers to create location-based applications
    • secunet protect4use: a secure, passwordless multi-factor authentication solution that transforms smartphones into digital keyrings, ensuring high security for online services and digital identities
    "},{"location":"home/design_goals/","title":"Design goals","text":"

    There are myriads of JSON libraries out there, and each may even have its reason to exist. Our class had these design goals:

    • Intuitive syntax. In languages such as Python, JSON feels like a first class data type. We used all the operator magic of modern C++ to achieve the same feeling in your code.

    • Trivial integration. Our whole code consists of a single header file json.hpp. That's it. No library, no subproject, no dependencies, no complex build system. The class is written in vanilla C++11. All in all, everything should require no adjustment of your compiler flags or project settings.

    • Serious testing. Our class is heavily unit-tested and covers 100% of the code, including all exceptional behavior. Furthermore, we checked with Valgrind and the Clang Sanitizers that there are no memory leaks. Google OSS-Fuzz additionally runs fuzz tests against all parsers 24/7, effectively executing billions of tests so far. To maintain high quality, the project is following the Core Infrastructure Initiative (CII) best practices.

    Other aspects were not so important to us:

    • Memory efficiency. Each JSON object has an overhead of one pointer (the maximal size of a union) and one enumeration element (1 byte). The default generalization uses the following C++ data types: std::string for strings, int64_t, uint64_t or double for numbers, std::map for objects, std::vector for arrays, and bool for Booleans. However, you can template the generalized class basic_json to your needs.

    • Speed. There are certainly faster JSON libraries out there. However, if your goal is to speed up your development by adding JSON support with a single header, then this library is the way to go. If you know how to use a std::vector or std::map, you are already set.

    See the contribution guidelines for more information.

    "},{"location":"home/exceptions/","title":"Exceptions","text":""},{"location":"home/exceptions/#overview","title":"Overview","text":""},{"location":"home/exceptions/#base-type","title":"Base type","text":"

    All exceptions inherit from class json::exception (which in turn inherits from std::exception). It is used as the base class for all exceptions thrown by the basic_json class. This class can hence be used as \"wildcard\" to catch exceptions.

    classDiagram\n  direction LR\n    class `std::exception` {\n        <<interface>>\n    }\n\n    class `json::exception` {\n        +const int id\n        +const char* what() const\n    }\n\n    class `json::parse_error` {\n        +const std::size_t byte\n    }\n\n    class `json::invalid_iterator`\n    class `json::type_error`\n    class `json::out_of_range`\n    class `json::other_error`\n\n    `std::exception` <|-- `json::exception`\n    `json::exception` <|-- `json::parse_error`\n    `json::exception` <|-- `json::invalid_iterator`\n    `json::exception` <|-- `json::type_error`\n    `json::exception` <|-- `json::out_of_range`\n    `json::exception` <|-- `json::other_error`
    "},{"location":"home/exceptions/#switch-off-exceptions","title":"Switch off exceptions","text":"

    Exceptions are used widely within the library. They can, however, be switched off with either using the compiler flag -fno-exceptions or by defining the symbol JSON_NOEXCEPTION. In this case, exceptions are replaced by abort() calls. You can further control this behavior by defining JSON_THROW_USER (overriding throw), JSON_TRY_USER (overriding try), and JSON_CATCH_USER (overriding catch).

    Note that JSON_THROW_USER should leave the current scope (e.g., by throwing or aborting), as continuing after it may yield undefined behavior.

    Example

    The code below switches off exceptions and creates a log entry with a detailed error message in case of errors.

    #include <iostream>\n\n#define JSON_TRY_USER if(true)\n#define JSON_CATCH_USER(exception) if(false)\n#define JSON_THROW_USER(exception)                           \\\n    {std::clog << \"Error in \" << __FILE__ << \":\" << __LINE__ \\\n               << \" (function \" << __FUNCTION__ << \") - \"    \\\n               << (exception).what() << std::endl;           \\\n     std::abort();}\n\n#include <nlohmann/json.hpp>\n

    Note the explanatory what() string of exceptions is not available for MSVC if exceptions are disabled, see #2824.

    See documentation of JSON_TRY_USER, JSON_CATCH_USER and JSON_THROW_USER for more information.

    "},{"location":"home/exceptions/#extended-diagnostic-messages","title":"Extended diagnostic messages","text":"

    Exceptions in the library are thrown in the local context of the JSON value they are detected. This makes detailed diagnostics messages, and hence debugging, difficult.

    Example
    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    json j;\n    j[\"address\"][\"street\"] = \"Fake Street\";\n    j[\"address\"][\"housenumber\"] = \"12\";\n\n    try\n    {\n        int housenumber = j[\"address\"][\"housenumber\"];\n    }\n    catch (const json::exception& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    [json.exception.type_error.302] type must be number, but is string\n

    This exception can be hard to debug if storing the value \"12\" and accessing it is further apart.

    To create better diagnostics messages, each JSON value needs a pointer to its parent value such that a global context (i.e., a path from the root value to the value that lead to the exception) can be created. That global context is provided as JSON Pointer.

    As this global context comes at the price of storing one additional pointer per JSON value and runtime overhead to maintain the parent relation, extended diagnostics are disabled by default. They can, however, be enabled by defining the preprocessor symbol JSON_DIAGNOSTICS to 1 before including json.hpp.

    Example
    #include <iostream>\n\n# define JSON_DIAGNOSTICS 1\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    json j;\n    j[\"address\"][\"street\"] = \"Fake Street\";\n    j[\"address\"][\"housenumber\"] = \"12\";\n\n    try\n    {\n        int housenumber = j[\"address\"][\"housenumber\"];\n    }\n    catch (const json::exception& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    [json.exception.type_error.302] (/address/housenumber) type must be number, but is string\n

    Now the exception message contains a JSON Pointer /address/housenumber that indicates which value has the wrong type.

    See documentation of JSON_DIAGNOSTICS for more information.

    "},{"location":"home/exceptions/#parse-errors","title":"Parse errors","text":"

    This exception is thrown by the library when a parse error occurs. Parse errors can occur during the deserialization of JSON text, CBOR, MessagePack, as well as when using JSON Patch.

    Exceptions have ids 1xx.

    Byte index

    Member byte holds the byte index of the last read character in the input file.

    For an input with n bytes, 1 is the index of the first character and n+1 is the index of the terminating null byte or the end of file. This also holds true when reading a byte vector (CBOR or MessagePack).

    Example

    The following code shows how a parse_error exception can be caught.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    try\n    {\n        // parsing input with a syntax error\n        json::parse(\"[1,2,3,]\");\n    }\n    catch (const json::parse_error& e)\n    {\n        // output exception information\n        std::cout << \"message: \" << e.what() << '\\n'\n                  << \"exception id: \" << e.id << '\\n'\n                  << \"byte position of error: \" << e.byte << std::endl;\n    }\n}\n

    Output:

    message: [json.exception.parse_error.101] parse error at line 1, column 8: syntax error while parsing value - unexpected ']'; expected '[', '{', or a literal\nexception id: 101\nbyte position of error: 8\n
    "},{"location":"home/exceptions/#jsonexceptionparse_error101","title":"json.exception.parse_error.101","text":"

    This error indicates a syntax error while deserializing a JSON text. The error message describes that an unexpected token (character) was encountered, and the member byte indicates the error position.

    Example message

    Input ended prematurely:

    [json.exception.parse_error.101] parse error at 2: unexpected end of input; expected string literal\n

    No input:

    [json.exception.parse_error.101] parse error at line 1, column 1: attempting to parse an empty input; check that your input string or stream contains the expected JSON\n

    Control character was not escaped:

    [json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+0009 (HT) must be escaped to \\u0009 or \\\\; last read: '\"<U+0009>'\"\n

    String was not closed:

    [json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: missing closing quote; last read: '\"'\n

    Invalid number format:

    [json.exception.parse_error.101] parse error at line 1, column 3: syntax error while parsing value - invalid number; expected '+', '-', or digit after exponent; last read: '1E'\n

    \\u was not be followed by four hex digits:

    [json.exception.parse_error.101] parse error at line 1, column 6: syntax error while parsing value - invalid string: '\\u' must be followed by 4 hex digits; last read: '\"\\u01\"'\n

    Invalid UTF-8 surrogate pair:

    [json.exception.parse_error.101] parse error at line 1, column 13: syntax error while parsing value - invalid string: surrogate U+DC00..U+DFFF must follow U+D800..U+DBFF; last read: '\"\\uD7FF\\uDC00'\"\n

    Invalid UTF-8 byte:

    [json.exception.parse_error.101] parse error at line 3, column 24: syntax error while parsing value - invalid string: ill-formed UTF-8 byte; last read: '\"vous \\352t'\n

    Tip

    • Make sure the input is correctly read. Try to write the input to standard output to check if, for instance, the input file was successfully opened.
    • Paste the input to a JSON validator like http://jsonlint.com or a tool like jq.
    "},{"location":"home/exceptions/#jsonexceptionparse_error102","title":"json.exception.parse_error.102","text":"

    JSON uses the \\uxxxx format to describe Unicode characters. Code points above 0xFFFF are split into two \\uxxxx entries (\"surrogate pairs\"). This error indicates that the surrogate pair is incomplete or contains an invalid code point.

    Example message

    parse error at 14: missing or wrong low surrogate\n

    Note

    This exception is not used any more. Instead json.exception.parse_error.101 with a more detailed description is used.

    "},{"location":"home/exceptions/#jsonexceptionparse_error103","title":"json.exception.parse_error.103","text":"

    Unicode supports code points up to 0x10FFFF. Code points above 0x10FFFF are invalid.

    Example message

    parse error: code points above 0x10FFFF are invalid\n

    Note

    This exception is not used any more. Instead json.exception.parse_error.101 with a more detailed description is used.

    "},{"location":"home/exceptions/#jsonexceptionparse_error104","title":"json.exception.parse_error.104","text":"

    RFC 6902 requires a JSON Patch document to be a JSON document that represents an array of objects.

    Example message

    [json.exception.parse_error.104] parse error: JSON patch must be an array of objects\n
    "},{"location":"home/exceptions/#jsonexceptionparse_error105","title":"json.exception.parse_error.105","text":"

    An operation of a JSON Patch document must contain exactly one \"op\" member, whose value indicates the operation to perform. Its value must be one of \"add\", \"remove\", \"replace\", \"move\", \"copy\", or \"test\"; other values are errors.

    Example message

    [json.exception.parse_error.105] parse error: operation 'add' must have member 'value'\n
    [json.exception.parse_error.105] parse error: operation 'copy' must have string member 'from'\n
    [json.exception.parse_error.105] parse error: operation value 'foo' is invalid\n

    "},{"location":"home/exceptions/#jsonexceptionparse_error106","title":"json.exception.parse_error.106","text":"

    An array index in a JSON Pointer (RFC 6901) may be 0 or any number without a leading 0.

    Example message

    [json.exception.parse_error.106] parse error: array index '01' must not begin with '0'\n
    "},{"location":"home/exceptions/#jsonexceptionparse_error107","title":"json.exception.parse_error.107","text":"

    A JSON Pointer must be a Unicode string containing a sequence of zero or more reference tokens, each prefixed by a / character.

    Example message

    [json.exception.parse_error.107] parse error at byte 1: JSON pointer must be empty or begin with '/' - was: 'foo'\n
    "},{"location":"home/exceptions/#jsonexceptionparse_error108","title":"json.exception.parse_error.108","text":"

    In a JSON Pointer, only ~0 and ~1 are valid escape sequences.

    Example message

    [json.exception.parse_error.108] parse error: escape character '~' must be followed with '0' or '1'\n
    "},{"location":"home/exceptions/#jsonexceptionparse_error109","title":"json.exception.parse_error.109","text":"

    A JSON Pointer array index must be a number.

    Example messages

    [json.exception.parse_error.109] parse error: array index 'one' is not a number\n
    [json.exception.parse_error.109] parse error: array index '+1' is not a number\n

    "},{"location":"home/exceptions/#jsonexceptionparse_error110","title":"json.exception.parse_error.110","text":"

    When parsing CBOR or MessagePack, the byte vector ends before the complete value has been read.

    Example message

    [json.exception.parse_error.110] parse error at byte 5: syntax error while parsing CBOR string: unexpected end of input\n
    [json.exception.parse_error.110] parse error at byte 2: syntax error while parsing UBJSON value: expected end of input; last byte: 0x5A\n

    "},{"location":"home/exceptions/#jsonexceptionparse_error112","title":"json.exception.parse_error.112","text":"

    An unexpected byte was read in a binary format or length information is invalid (BSON).

    Example messages

    [json.exception.parse_error.112] parse error at byte 1: syntax error while parsing CBOR value: invalid byte: 0x1C\n
    [json.exception.parse_error.112] parse error at byte 1: syntax error while parsing MessagePack value: invalid byte: 0xC1\n
    [json.exception.parse_error.112] parse error at byte 4: syntax error while parsing BJData size: expected '#' after type information; last byte: 0x02\n
    [json.exception.parse_error.112] parse error at byte 4: syntax error while parsing UBJSON size: expected '#' after type information; last byte: 0x02\n
    [json.exception.parse_error.112] parse error at byte 10: syntax error while parsing BSON string: string length must be at least 1, is -2147483648\n
    [json.exception.parse_error.112] parse error at byte 15: syntax error while parsing BSON binary: byte array length cannot be negative, is -1\n

    "},{"location":"home/exceptions/#jsonexceptionparse_error113","title":"json.exception.parse_error.113","text":"

    While parsing a map key, a value that is not a string has been read.

    Example messages

    [json.exception.parse_error.113] parse error at byte 2: syntax error while parsing CBOR string: expected length specification (0x60-0x7B) or indefinite string type (0x7F); last byte: 0xFF\n
    [json.exception.parse_error.113] parse error at byte 2: syntax error while parsing MessagePack string: expected length specification (0xA0-0xBF, 0xD9-0xDB); last byte: 0xFF\n
    [json.exception.parse_error.113] parse error at byte 2: syntax error while parsing UBJSON char: byte after 'C' must be in range 0x00..0x7F; last byte: 0x82\n

    "},{"location":"home/exceptions/#jsonexceptionparse_error114","title":"json.exception.parse_error.114","text":"

    The parsing of the corresponding BSON record type is not implemented (yet).

    Example message

    [json.exception.parse_error.114] parse error at byte 5: Unsupported BSON record type 0xFF\n
    "},{"location":"home/exceptions/#jsonexceptionparse_error115","title":"json.exception.parse_error.115","text":"

    A UBJSON high-precision number could not be parsed.

    Example message

    [json.exception.parse_error.115] parse error at byte 5: syntax error while parsing UBJSON high-precision number: invalid number text: 1A\n
    "},{"location":"home/exceptions/#iterator-errors","title":"Iterator errors","text":"

    This exception is thrown if iterators passed to a library function do not match the expected semantics.

    Exceptions have ids 2xx.

    Example

    The following code shows how an invalid_iterator exception can be caught.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    try\n    {\n        // calling iterator::key() on non-object iterator\n        json j = \"string\";\n        json::iterator it = j.begin();\n        auto k = it.key();\n    }\n    catch (const json::invalid_iterator& e)\n    {\n        // output exception information\n        std::cout << \"message: \" << e.what() << '\\n'\n                  << \"exception id: \" << e.id << std::endl;\n    }\n}\n

    Output:

    message: [json.exception.invalid_iterator.207] cannot use key() for non-object iterators\nexception id: 207\n
    "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator201","title":"json.exception.invalid_iterator.201","text":"

    The iterators passed to constructor basic_json(InputIT first, InputIT last) are not compatible, meaning they do not belong to the same container. Therefore, the range (first, last) is invalid.

    Example message

    [json.exception.invalid_iterator.201] iterators are not compatible\n
    "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator202","title":"json.exception.invalid_iterator.202","text":"

    In the erase or insert function, the passed iterator pos does not belong to the JSON value for which the function was called. It hence does not define a valid position for the deletion/insertion.

    Example messages

    [json.exception.invalid_iterator.202] iterator does not fit current value\n
    [json.exception.invalid_iterator.202] iterators first and last must point to objects\n

    "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator203","title":"json.exception.invalid_iterator.203","text":"

    Either iterator passed to function erase(IteratorType first, IteratorType last) does not belong to the JSON value from which values shall be erased. It hence does not define a valid range to delete values from.

    Example message

    [json.exception.invalid_iterator.203] iterators do not fit current value\n
    "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator204","title":"json.exception.invalid_iterator.204","text":"

    When an iterator range for a primitive type (number, boolean, or string) is passed to a constructor or an erase function, this range has to be exactly (begin(), end()), because this is the only way the single stored value is expressed. All other ranges are invalid.

    Example message

    [json.exception.invalid_iterator.204] iterators out of range\n
    "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator205","title":"json.exception.invalid_iterator.205","text":"

    When an iterator for a primitive type (number, boolean, or string) is passed to an erase function, the iterator has to be the begin() iterator, because it is the only way to address the stored value. All other iterators are invalid.

    Example message

    [json.exception.invalid_iterator.205] iterator out of range\n
    "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator206","title":"json.exception.invalid_iterator.206","text":"

    The iterators passed to constructor basic_json(InputIT first, InputIT last) belong to a JSON null value and hence to not define a valid range.

    Example message

    [json.exception.invalid_iterator.206] cannot construct with iterators from null\n
    "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator207","title":"json.exception.invalid_iterator.207","text":"

    The key() member function can only be used on iterators belonging to a JSON object, because other types do not have a concept of a key.

    Example message

    [json.exception.invalid_iterator.207] cannot use key() for non-object iterators\n
    "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator208","title":"json.exception.invalid_iterator.208","text":"

    The operator[] to specify a concrete offset cannot be used on iterators belonging to a JSON object, because JSON objects are unordered.

    Example message

    [json.exception.invalid_iterator.208] cannot use operator[] for object iterators\n
    "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator209","title":"json.exception.invalid_iterator.209","text":"

    The offset operators (+, -, +=, -=) cannot be used on iterators belonging to a JSON object, because JSON objects are unordered.

    Example message

    [json.exception.invalid_iterator.209] cannot use offsets with object iterators\n
    "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator210","title":"json.exception.invalid_iterator.210","text":"

    The iterator range passed to the insert function are not compatible, meaning they do not belong to the same container. Therefore, the range (first, last) is invalid.

    Example message

    [json.exception.invalid_iterator.210] iterators do not fit\n
    "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator211","title":"json.exception.invalid_iterator.211","text":"

    The iterator range passed to the insert function must not be a subrange of the container to insert to.

    Example message

    [json.exception.invalid_iterator.211] passed iterators may not belong to container\n
    "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator212","title":"json.exception.invalid_iterator.212","text":"

    When two iterators are compared, they must belong to the same container.

    Example message

    [json.exception.invalid_iterator.212] cannot compare iterators of different containers\n
    "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator213","title":"json.exception.invalid_iterator.213","text":"

    The order of object iterators cannot be compared, because JSON objects are unordered.

    Example message

    [json.exception.invalid_iterator.213] cannot compare order of object iterators\n
    "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator214","title":"json.exception.invalid_iterator.214","text":"

    Cannot get value for iterator: Either the iterator belongs to a null value or it is an iterator to a primitive type (number, boolean, or string), but the iterator is different to begin().

    Example message

    [json.exception.invalid_iterator.214] cannot get value\n
    "},{"location":"home/exceptions/#type-errors","title":"Type errors","text":"

    This exception is thrown in case of a type error; that is, a library function is executed on a JSON value whose type does not match the expected semantics.

    Exceptions have ids 3xx.

    Example

    The following code shows how a type_error exception can be caught.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    try\n    {\n        // calling push_back() on a string value\n        json j = \"string\";\n        j.push_back(\"another string\");\n    }\n    catch (const json::type_error& e)\n    {\n        // output exception information\n        std::cout << \"message: \" << e.what() << '\\n'\n                  << \"exception id: \" << e.id << std::endl;\n    }\n}\n

    Output:

    message: [json.exception.type_error.308] cannot use push_back() with string\nexception id: 308\n
    "},{"location":"home/exceptions/#jsonexceptiontype_error301","title":"json.exception.type_error.301","text":"

    To create an object from an initializer list, the initializer list must consist only of a list of pairs whose first element is a string. When this constraint is violated, an array is created instead.

    Example message

    [json.exception.type_error.301] cannot create object from initializer list\n
    "},{"location":"home/exceptions/#jsonexceptiontype_error302","title":"json.exception.type_error.302","text":"

    During implicit or explicit value conversion, the JSON type must be compatible to the target type. For instance, a JSON string can only be converted into string types, but not into numbers or boolean types.

    Example messages

    [json.exception.type_error.302] type must be object, but is null\n
    [json.exception.type_error.302] type must be string, but is object\n

    "},{"location":"home/exceptions/#jsonexceptiontype_error303","title":"json.exception.type_error.303","text":"

    To retrieve a reference to a value stored in a basic_json object with get_ref, the type of the reference must match the value type. For instance, for a JSON array, the ReferenceType must be array_t &.

    Example messages

    [json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is object\n
    [json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is number\"\n

    "},{"location":"home/exceptions/#jsonexceptiontype_error304","title":"json.exception.type_error.304","text":"

    The at() member functions can only be executed for certain JSON types.

    Example messages

    [json.exception.type_error.304] cannot use at() with string\n
    [json.exception.type_error.304] cannot use at() with number\n

    "},{"location":"home/exceptions/#jsonexceptiontype_error305","title":"json.exception.type_error.305","text":"

    The operator[] member functions can only be executed for certain JSON types.

    Example messages

    [json.exception.type_error.305] cannot use operator[] with a string argument with array\n
    [json.exception.type_error.305] cannot use operator[] with a numeric argument with object\n

    "},{"location":"home/exceptions/#jsonexceptiontype_error306","title":"json.exception.type_error.306","text":"

    The value() member functions can only be executed for certain JSON types.

    Example message

    [json.exception.type_error.306] cannot use value() with number\n
    "},{"location":"home/exceptions/#jsonexceptiontype_error307","title":"json.exception.type_error.307","text":"

    The erase() member functions can only be executed for certain JSON types.

    Example message

    [json.exception.type_error.307] cannot use erase() with string\n
    "},{"location":"home/exceptions/#jsonexceptiontype_error308","title":"json.exception.type_error.308","text":"

    The push_back() and operator+= member functions can only be executed for certain JSON types.

    Example message

    [json.exception.type_error.308] cannot use push_back() with string\n
    "},{"location":"home/exceptions/#jsonexceptiontype_error309","title":"json.exception.type_error.309","text":"

    The insert() member functions can only be executed for certain JSON types.

    Example messages

    [json.exception.type_error.309] cannot use insert() with array\n
    [json.exception.type_error.309] cannot use insert() with number\n

    "},{"location":"home/exceptions/#jsonexceptiontype_error310","title":"json.exception.type_error.310","text":"

    The swap() member functions can only be executed for certain JSON types.

    Example message

    [json.exception.type_error.310] cannot use swap() with number\n
    "},{"location":"home/exceptions/#jsonexceptiontype_error311","title":"json.exception.type_error.311","text":"

    The emplace() and emplace_back() member functions can only be executed for certain JSON types.

    Example messages

    [json.exception.type_error.311] cannot use emplace() with number\n
    [json.exception.type_error.311] cannot use emplace_back() with number\n

    "},{"location":"home/exceptions/#jsonexceptiontype_error312","title":"json.exception.type_error.312","text":"

    The update() member functions can only be executed for certain JSON types.

    Example message

    [json.exception.type_error.312] cannot use update() with array\n
    "},{"location":"home/exceptions/#jsonexceptiontype_error313","title":"json.exception.type_error.313","text":"

    The unflatten function converts an object whose keys are JSON Pointers back into an arbitrary nested JSON value. The JSON Pointers must not overlap, because then the resulting value would not be well-defined.

    Example message

    [json.exception.type_error.313] invalid value to unflatten\n
    "},{"location":"home/exceptions/#jsonexceptiontype_error314","title":"json.exception.type_error.314","text":"

    The unflatten function only works for an object whose keys are JSON Pointers.

    Example message

    Calling unflatten() on an array [1,2,3]:

    [json.exception.type_error.314] only objects can be unflattened\n
    "},{"location":"home/exceptions/#jsonexceptiontype_error315","title":"json.exception.type_error.315","text":"

    The unflatten() function only works for an object whose keys are JSON Pointers and whose values are primitive.

    Example message

    Calling unflatten() on an object {\"/1\", [1,2,3]}:

    [json.exception.type_error.315] values in object must be primitive\n
    "},{"location":"home/exceptions/#jsonexceptiontype_error316","title":"json.exception.type_error.316","text":"

    The dump() function only works with UTF-8 encoded strings; that is, if you assign a std::string to a JSON value, make sure it is UTF-8 encoded.

    Example message

    Calling dump() on a JSON value containing an ISO 8859-1 encoded string:

    [json.exception.type_error.316] invalid UTF-8 byte at index 15: 0x6F\n

    Tip

    • Store the source file with UTF-8 encoding.
    • Pass an error handler as last parameter to the dump() function to avoid this exception:
      • json::error_handler_t::replace will replace invalid bytes sequences with U+FFFD
      • json::error_handler_t::ignore will silently ignore invalid byte sequences
    "},{"location":"home/exceptions/#jsonexceptiontype_error317","title":"json.exception.type_error.317","text":"

    The dynamic type of the object cannot be represented in the requested serialization format (e.g. a raw true or null JSON object cannot be serialized to BSON)

    Example messages

    Serializing null to BSON:

    [json.exception.type_error.317] to serialize to BSON, top-level type must be object, but is null\n
    Serializing [1,2,3] to BSON:
    [json.exception.type_error.317] to serialize to BSON, top-level type must be object, but is array\n

    Tip

    Encapsulate the JSON value in an object. That is, instead of serializing true, serialize {\"value\": true}

    "},{"location":"home/exceptions/#out-of-range","title":"Out of range","text":"

    This exception is thrown in case a library function is called on an input parameter that exceeds the expected range, for instance in case of array indices or nonexisting object keys.

    Exceptions have ids 4xx.

    Example

    The following code shows how an out_of_range exception can be caught.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    try\n    {\n        // calling at() for an invalid index\n        json j = {1, 2, 3, 4};\n        j.at(4) = 10;\n    }\n    catch (const json::out_of_range& e)\n    {\n        // output exception information\n        std::cout << \"message: \" << e.what() << '\\n'\n                  << \"exception id: \" << e.id << std::endl;\n    }\n}\n

    Output:

    message: [json.exception.out_of_range.401] array index 4 is out of range\nexception id: 401\n
    "},{"location":"home/exceptions/#jsonexceptionout_of_range401","title":"json.exception.out_of_range.401","text":"

    The provided array index i is larger than size-1.

    Example message

    array index 3 is out of range\n
    "},{"location":"home/exceptions/#jsonexceptionout_of_range402","title":"json.exception.out_of_range.402","text":"

    The special array index - in a JSON Pointer never describes a valid element of the array, but the index past the end. That is, it can only be used to add elements at this position, but not to read it.

    Example message

    array index '-' (3) is out of range\n
    "},{"location":"home/exceptions/#jsonexceptionout_of_range403","title":"json.exception.out_of_range.403","text":"

    The provided key was not found in the JSON object.

    Example message

    key 'foo' not found\n
    "},{"location":"home/exceptions/#jsonexceptionout_of_range404","title":"json.exception.out_of_range.404","text":"

    A reference token in a JSON Pointer could not be resolved.

    Example message

    unresolved reference token 'foo'\n
    "},{"location":"home/exceptions/#jsonexceptionout_of_range405","title":"json.exception.out_of_range.405","text":"

    The JSON Patch operations 'remove' and 'add' can not be applied to the root element of the JSON value.

    Example message

    JSON pointer has no parent\n
    "},{"location":"home/exceptions/#jsonexceptionout_of_range406","title":"json.exception.out_of_range.406","text":"

    A parsed number could not be stored as without changing it to NaN or INF.

    Example message

    number overflow parsing '10E1000'\n
    "},{"location":"home/exceptions/#jsonexceptionout_of_range407","title":"json.exception.out_of_range.407","text":"

    This exception previously indicated that the UBJSON and BSON binary formats did not support integer numbers greater than 9223372036854775807 due to limitations in the implemented mapping. However, these limitations have since been resolved, and this exception no longer occurs.

    Exception cannot occur any more

    • Since version 3.9.0, integer numbers beyond int64 are serialized as high-precision UBJSON numbers.
    • Since version 3.12.0, integer numbers beyond int64 are serialized as uint64 BSON numbers.
    "},{"location":"home/exceptions/#jsonexceptionout_of_range408","title":"json.exception.out_of_range.408","text":"

    The size (following #) of an UBJSON array or object exceeds the maximal capacity.

    Example message

    excessive array size: 8658170730974374167\n
    "},{"location":"home/exceptions/#jsonexceptionout_of_range409","title":"json.exception.out_of_range.409","text":"

    Key identifiers to be serialized to BSON cannot contain code point U+0000, since the key is stored as zero-terminated c-string.

    Example message

    BSON key cannot contain code point U+0000 (at byte 2)\n
    "},{"location":"home/exceptions/#further-exceptions","title":"Further exceptions","text":"

    This exception is thrown in case of errors that cannot be classified with the other exception types.

    Exceptions have ids 5xx.

    Example

    The following code shows how an other_error exception can be caught.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    try\n    {\n        // executing a failing JSON Patch operation\n        json value = R\"({\n            \"best_biscuit\": {\n                \"name\": \"Oreo\"\n            }\n        })\"_json;\n        json patch = R\"([{\n            \"op\": \"test\",\n            \"path\": \"/best_biscuit/name\",\n            \"value\": \"Choco Leibniz\"\n        }])\"_json;\n        value.patch(patch);\n    }\n    catch (const json::other_error& e)\n    {\n        // output exception information\n        std::cout << \"message: \" << e.what() << '\\n'\n                  << \"exception id: \" << e.id << std::endl;\n    }\n}\n

    Output:

    message: [json.exception.other_error.501] unsuccessful: {\"op\":\"test\",\"path\":\"/best_biscuit/name\",\"value\":\"Choco Leibniz\"}\nexception id: 501\n
    "},{"location":"home/exceptions/#jsonexceptionother_error501","title":"json.exception.other_error.501","text":"

    A JSON Patch operation 'test' failed. The unsuccessful operation is also printed.

    Example message

    Executing {\"op\":\"test\", \"path\":\"/baz\", \"value\":\"bar\"} on {\"baz\": \"qux\"}:

    [json.exception.other_error.501] unsuccessful: {\"op\":\"test\",\"path\":\"/baz\",\"value\":\"bar\"}\n
    "},{"location":"home/faq/","title":"Frequently Asked Questions (FAQ)","text":""},{"location":"home/faq/#known-bugs","title":"Known bugs","text":""},{"location":"home/faq/#brace-initialization-yields-arrays","title":"Brace initialization yields arrays","text":"

    Question

    Why does

    json j{true};\n

    and

    json j(true);\n

    yield different results ([true] vs. true)?

    This is a known issue, and -- even worse -- the behavior differs between GCC and Clang. The \"culprit\" for this is the library's constructor overloads for initializer lists to allow syntax like

    json array = {1, 2, 3, 4};\n

    for arrays and

    json object = {{\"one\", 1}, {\"two\", 2}}; \n

    for objects.

    Tip

    To avoid any confusion and ensure portable code, do not use brace initialization with the types basic_json, json, or ordered_json unless you want to create an object or array as shown in the examples above.

    "},{"location":"home/faq/#limitations","title":"Limitations","text":""},{"location":"home/faq/#relaxed-parsing","title":"Relaxed parsing","text":"

    Question

    Can you add an option to ignore trailing commas?

    This library does not support any feature which would jeopardize interoperability.

    "},{"location":"home/faq/#parse-errors-reading-non-ascii-characters","title":"Parse errors reading non-ASCII characters","text":"

    Questions

    • Why is the parser complaining about a Chinese character?
    • Does the library support Unicode?
    • I get an exception [json.exception.parse_error.101] parse error at line 1, column 53: syntax error while parsing value - invalid string: ill-formed UTF-8 byte; last read: '\"Test\u00e9$')\"

    The library supports Unicode input as follows:

    • Only UTF-8 encoded input is supported which is the default encoding for JSON according to RFC 8259.
    • std::u16string and std::u32string can be parsed, assuming UTF-16 and UTF-32 encoding, respectively. These encodings are not supported when reading from files or other input containers.
    • Other encodings such as Latin-1 or ISO 8859-1 are not supported and will yield parse or serialization errors.
    • Unicode noncharacters will not be replaced by the library.
    • Invalid surrogates (e.g., incomplete pairs such as \\uDEAD) will yield parse errors.
    • The strings stored in the library are UTF-8 encoded. When using the default string type (std::string), note that its length/size functions return the number of stored bytes rather than the number of characters or glyphs.
    • When you store strings with different encodings in the library, calling dump() may throw an exception unless json::error_handler_t::replace or json::error_handler_t::ignore are used as error handlers.

    In most cases, the parser is right to complain, because the input is not UTF-8 encoded. This is especially true for Microsoft Windows where Latin-1 or ISO 8859-1 is often the standard encoding.

    "},{"location":"home/faq/#wide-string-handling","title":"Wide string handling","text":"

    Question

    Why are wide strings (e.g., std::wstring) dumped as arrays of numbers?

    As described above, the library assumes UTF-8 as encoding. To store a wide string, you need to change the encoding.

    Example

    #include <codecvt> // codecvt_utf8\n#include <locale>  // wstring_convert\n\n// encoding function\nstd::string to_utf8(std::wstring& wide_string)\n{\n    static std::wstring_convert<std::codecvt_utf8<wchar_t>> utf8_conv;\n    return utf8_conv.to_bytes(wide_string);\n}\n\njson j;\nstd::wstring ws = L\"\u8ecaB1234 \u3053\u3093\u306b\u3061\u306f\";\n\nj[\"original\"] = ws;\nj[\"encoded\"] = to_utf8(ws);\n\nstd::cout << j << std::endl;\n

    The result is:

    {\n  \"encoded\": \"\u8ecaB1234 \u3053\u3093\u306b\u3061\u306f\",\n  \"original\": [36554, 66, 49, 50, 51, 52, 32, 12371, 12435, 12395, 12385, 12399]\n}\n
    "},{"location":"home/faq/#exceptions","title":"Exceptions","text":""},{"location":"home/faq/#parsing-without-exceptions","title":"Parsing without exceptions","text":"

    Question

    Is it possible to indicate a parse error without throwing an exception?

    Yes, see Parsing and exceptions.

    "},{"location":"home/faq/#key-name-in-exceptions","title":"Key name in exceptions","text":"

    Question

    Can I get the key of the object item that caused an exception?

    Yes, you can. Please define the symbol JSON_DIAGNOSTICS to get extended diagnostics messages.

    "},{"location":"home/faq/#serialization-issues","title":"Serialization issues","text":""},{"location":"home/faq/#number-precision","title":"Number precision","text":"

    Question

    • It seems that precision is lost when serializing a double.
    • Can I change the precision for floating-point serialization?

    The library uses std::numeric_limits<number_float_t>::digits10 (15 for IEEE doubles) digits for serialization. This value is sufficient to guarantee roundtripping. If one uses more than this number of digits of precision, then string -> value -> string is not guaranteed to round-trip.

    cppreference.com

    The value of std::numeric_limits<T>::digits10 is the number of base-10 digits that can be represented by the type T without change, that is, any number with this many significant decimal digits can be converted to a value of type T and back to decimal form, without change due to rounding or overflow.

    Tip

    The website https://float.exposed gives a good insight into the internal storage of floating-point numbers.

    See this section on the library's number handling for more information.

    "},{"location":"home/faq/#compilation-issues","title":"Compilation issues","text":""},{"location":"home/faq/#android-sdk","title":"Android SDK","text":"

    Question

    Why does the code not compile with Android SDK?

    Android defaults to using very old compilers and C++ libraries. To fix this, add the following to your Application.mk. This will switch to the LLVM C++ library, the Clang compiler, and enable C++11 and other features disabled by default.

    APP_STL := c++_shared\nNDK_TOOLCHAIN_VERSION := clang3.6\nAPP_CPPFLAGS += -frtti -fexceptions\n

    The code compiles successfully with Android NDK, Revision 9 - 11 (and possibly later) and CrystaX's Android NDK version 10.

    "},{"location":"home/faq/#missing-stl-function","title":"Missing STL function","text":"

    Questions

    • Why do I get a compilation error 'to_string' is not a member of 'std' (or similarly, for strtod or strtof)?
    • Why does the code not compile with MinGW or Android SDK?

    This is not an issue with the code, but rather with the compiler itself. On Android, see above to build with a newer environment. For MinGW, please refer to this site and this discussion for information on how to fix this bug. For Android NDK using APP_STL := gnustl_static, please refer to this discussion.

    "},{"location":"home/license/","title":"License","text":"

    The class is licensed under the MIT License:

    Copyright \u00a9 2013-2025 Niels Lohmann

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \u201cSoftware\u201d), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED \u201cAS IS\u201d, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    The class contains the UTF-8 Decoder from Bjoern Hoehrmann which is licensed under the MIT License (see above). Copyright \u00a9 2008-2009 Bj\u00f6rn Hoehrmann bjoern@hoehrmann.de

    The class contains a slightly modified version of the Grisu2 algorithm from Florian Loitsch which is licensed under the MIT License (see above). Copyright \u00a9 2009 Florian Loitsch

    The class contains a copy of Hedley from Evan Nemerson which is licensed as CC0-1.0.

    "},{"location":"home/releases/","title":"Releases","text":""},{"location":"home/releases/#v373","title":"v3.7.3","text":"

    Files

    • include.zip (274 KB)
    • include.zip.asc (1 KB)
    • json.hpp (791 KB)
    • json.hpp.asc (1 KB)

    Release date: 2019-11-17 SHA-256: 3b5d2b8f8282b80557091514d8ab97e27f9574336c804ee666fda673a9b59926 (json.hpp), 87b5884741427220d3a33df1363ae0e8b898099fbc59f1c451113f6732891014 (include.zip)

    "},{"location":"home/releases/#summary","title":"Summary","text":"

    This release fixes a bug introduced in release 3.7.2 which could yield quadratic complexity in destructor calls. All changes are backward-compatible.

    "},{"location":"home/releases/#bug-fixes","title":"Bug Fixes","text":"
    • Removed reserve() calls from the destructor which could lead to quadratic complexity. #1837 #1838
    "},{"location":"home/releases/#deprecated-functions","title":"Deprecated functions","text":"

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    • Function iterator_wrapper are deprecated. Please use the member function items() instead.
    • Functions friend std::istream& operator<<(basic_json&, std::istream&) and friend std::ostream& operator>>(const basic_json&, std::ostream&) are deprecated. Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.
    "},{"location":"home/releases/#v372","title":"v3.7.2","text":"

    Files

    • include.zip (274 KB)
    • include.zip.asc (1 KB)
    • json.hpp (791 KB)
    • json.hpp.asc (1 KB)

    Release date: 2019-11-10 SHA-256: 0a65fcbbe1b334d3f45c9498e5ee28c3f3b2428aea98557da4a3ff12f0f14ad6 (json.hpp), 67f69c9a93b7fa0612dc1b6273119d2c560317333581845f358aaa68bff8f087 (include.zip)

    "},{"location":"home/releases/#summary_1","title":"Summary","text":"

    Project bad_json_parsers tested how JSON parser libraries react on deeply nested inputs. It turns out that this library segfaulted at a certain nesting depth. This bug was fixed with this release. Now the parsing is only bounded by the available memory. All changes are backward-compatible.

    "},{"location":"home/releases/#bug-fixes_1","title":"Bug Fixes","text":"
    • Fixed a bug that lead to stack overflow for deeply nested JSON values (objects, array) by changing the implementation of the destructor from a recursive to an iterative approach. #832, #1419, #1835
    "},{"location":"home/releases/#further-changes","title":"Further Changes","text":"
    • Added WhiteStone Bolt. #1830
    "},{"location":"home/releases/#deprecated-functions_1","title":"Deprecated functions","text":"

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    • Function iterator_wrapper are deprecated. Please use the member function items() instead.
    • Functions friend std::istream& operator<<(basic_json&, std::istream&) and friend std::ostream& operator>>(const basic_json&, std::ostream&) are deprecated. Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.
    "},{"location":"home/releases/#v371","title":"v3.7.1","text":"

    Files

    • include.zip (273 KB)
    • include.zip.asc (1 KB)
    • json.hpp (789 KB)
    • json.hpp.asc (1 KB)

    Release date: 2019-11-06 SHA-256: b5ba7228f3c22a882d379e93d08eab4349458ee16fbf45291347994eac7dc7ce (json.hpp), 77b9f54b34e7989e6f402afb516f7ff2830df551c3a36973085e2c7a6b1045fe (include.zip)

    "},{"location":"home/releases/#summary_2","title":"Summary","text":"

    This release fixes several small bugs in the library. All changes are backward-compatible.

    "},{"location":"home/releases/#bug-fixes_2","title":"Bug Fixes","text":"
    • Fixed a segmentation fault when serializing std::int64_t minimum value. #1708 #1722
    • Fixed the contains() function for JSON Pointers. #1727 #1741
    • Fixed too lax SFINAE guard for conversion from std::pair and std::tuple to json. #1805 #1806 #1825 #1826
    • Fixed some regressions detected by UBSAN. Updated CI to use Clang-Tidy 7.1.0. #1716 #1728
    • Fixed integer truncation in iteration_proxy. #1797
    • Updated Hedley to v11 to fix a E2512 error in MSVC. #1799
    • Fixed a compile error in enum deserialization of non non-default-constructible types. #1647 #1821
    • Fixed the conversion from json to std::valarray.
    "},{"location":"home/releases/#improvements","title":"Improvements","text":"
    • The items() function can now be used with a custom string type. #1765
    • Made json_pointer::back const. #1764 #1769
    • Meson is part of the release archive. #1672 #1694
    • Improved documentation on the Meson and Spack package manager. #1694 #1720
    "},{"location":"home/releases/#further-changes_1","title":"Further Changes","text":"
    • Added GitHub Workflow with ubuntu-latest/GCC 7.4.0 as CI step.
    • Added GCC 9 to Travis CI to compile with C++20 support. #1724
    • Added MSVC 2019 to the AppVeyor CI. #1780
    • Added badge to fuzzing status.
    • Fixed some cppcheck warnings. #1760
    • Fixed several typos in the documentation. #1720 #1767 #1803
    • Added documentation on the JSON_THROW_USER, JSON_TRY_USER, and JSON_CATCH_USER macros to control user-defined exception handling.
    • Used GitHub's CODEOWNERS and SECURITY feature.
    • Removed GLOB from CMake files. #1779
    • Updated to Doctest 2.3.5.
    "},{"location":"home/releases/#deprecated-functions_2","title":"Deprecated functions","text":"

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    • Function iterator_wrapper are deprecated. Please use the member function items() instead.
    • Functions friend std::istream& operator<<(basic_json&, std::istream&) and friend std::ostream& operator>>(const basic_json&, std::ostream&) are deprecated. Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.
    "},{"location":"home/releases/#v370","title":"v3.7.0","text":"

    Files

    • include.zip (143 KB)
    • include.zip.asc (1 KB)
    • json.hpp (782 KB)
    • json.hpp.asc (1 KB)

    Release date: 2019-07-28 SHA-256: a503214947952b69f0062f572cb74c17582a495767446347ce2e452963fc2ca4 (json.hpp), 541c34438fd54182e9cdc68dd20c898d766713ad6d901fb2c6e28ff1f1e7c10d (include.zip)

    "},{"location":"home/releases/#summary_3","title":"Summary","text":"

    This release introduces a few convenience functions and performs a lot of house keeping (bug fixes and small improvements). All changes are backward-compatible.

    "},{"location":"home/releases/#new-features","title":"New Features","text":"
    • Add overload of the contains function to check if a JSON pointer is valid without throwing exceptions, just like its counterpart for object keys. #1600
    • Add a function to_string to allow for generic conversion to strings. #916 #1585
    • Add return value for the emplace_back function, returning a reference to the added element just like C++17 is introducing this for std::vector. #1609
    • Add info how to use the library with the pacman package manager on MSYS2. #1670
    "},{"location":"home/releases/#bug-fixes_3","title":"Bug Fixes","text":"
    • Fix an issue where typedefs with certain names yielded a compilation error. #1642 #1643
    • Fix a conversion to std::string_view in the unit tests. #1634 #1639
    • Fix MSVC Debug build. #1536 #1570 #1608
    • Fix get_to method to clear existing content before writing. #1511 #1555
    • Fix a -Wc++17-extensions warning. nodiscard attributes are now only used with Clang when -std=c++17 is used. #1535 #1551
    "},{"location":"home/releases/#improvements_1","title":"Improvements","text":"
    • Switch from Catch to doctest for the unit tests which speeds up compilation and runtime of the 112,112,308 tests.
    • Add an explicit section to the README about the frequently addressed topics character encoding, comments in JSON, and the order of object keys.
    "},{"location":"home/releases/#further-changes_2","title":"Further Changes","text":"
    • Use GNUInstallDirs to set library install directories. #1673
    • Fix links in the README. #1620 #1621 #1622 #1623 #1625
    • Mention json type on the documentation start page. #1616
    • Complete documentation of value() function with respect to type_error.302 exception. #1601
    • Fix links in the documentation. #1598
    • Add regression tests for MSVC. #1543 #1570
    • Use CircleCI for continuous integration.
    • Use Doozer for continuous integration on Linux (CentOS, Raspbian, Fedora)
    • Add tests to check each CMake flag (JSON_BuildTests, JSON_Install, JSON_MultipleHeaders, JSON_Sanitizer, JSON_Valgrind, JSON_NoExceptions, JSON_Coverage).
    • Use Hedley to avoid re-inventing several compiler-agnostic feature macros like JSON_DEPRECATED, JSON_NODISCARD, JSON_LIKELY, JSON_UNLIKELY, JSON_HAS_CPP_14, or JSON_HAS_CPP_17. Functions taking or returning pointers are annotated accordingly when a pointer will not be null.
    • Build and run tests on AppVeyor in DEBUG and RELEASE mode.
    "},{"location":"home/releases/#deprecated-functions_3","title":"Deprecated functions","text":"

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    • Function iterator_wrapper are deprecated. Please use the member function items() instead.
    • Functions friend std::istream& operator<<(basic_json&, std::istream&) and friend std::ostream& operator>>(const basic_json&, std::ostream&) are deprecated. Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.
    "},{"location":"home/releases/#v361","title":"v3.6.1","text":"

    Files

    • include.zip (136 KB)
    • include.zip.asc (1 KB)
    • json.hpp (711 KB)
    • json.hpp.asc (1 KB)

    Release date: 2019-03-20 SHA-256: d2eeb25d2e95bffeb08ebb7704cdffd2e8fca7113eba9a0b38d60a5c391ea09a (json.hpp), 69cc88207ce91347ea530b227ff0776db82dcb8de6704e1a3d74f4841bc651cf (include.zip)

    "},{"location":"home/releases/#summary_4","title":"Summary","text":"

    This release fixes a regression and a bug introduced by the earlier 3.6.0 release. All changes are backward-compatible.

    "},{"location":"home/releases/#bug-fixes_4","title":"Bug Fixes","text":"
    • Fixed regression of #590 which could lead to compilation errors with GCC 7 and GCC 8. #1530
    • Fixed a compilation error when <Windows.h> was included. #1531
    "},{"location":"home/releases/#further-changes_3","title":"Further Changes","text":"
    • Fixed a warning for missing field initializers. #1527
    "},{"location":"home/releases/#deprecated-functions_4","title":"Deprecated functions","text":"

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    • Function iterator_wrapper are deprecated. Please use the member function items() instead.
    • Functions friend std::istream& operator<<(basic_json&, std::istream&) and friend std::ostream& operator>>(const basic_json&, std::ostream&) are deprecated. Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.
    "},{"location":"home/releases/#v360","title":"v3.6.0","text":"

    Files

    • include.zip (136 KB)
    • include.zip.asc (1 KB)
    • json.hpp (711 KB)
    • json.hpp.asc (1 KB)

    Release date: 2019-03-20 SHA-256: ce9839370f28094c71107c405affb3b08c4a098154988014cbb0800b1c44a831 (json.hpp), 237c5e66e7f8186a02804ce9dbd5f69ce89fe7424ef84adf6142e973bd9532f4 (include.zip)

    \u2139\ufe0f This release introduced a regression. Please update to version 3.6.1!

    "},{"location":"home/releases/#summary_5","title":"Summary","text":"

    This release adds some convenience functions for JSON Pointers, introduces a contains function to check if a key is present in an object, and improves the performance of integer serialization. Furthermore, a lot of small bug fixes and improvements have been made. All changes are backward-compatible.

    "},{"location":"home/releases/#new-features_1","title":"New Features","text":"
    • Overworked the public interface for JSON Pointers. The creation of JSON Pointers is simplified with operator/ and operator/=. JSON Pointers can be inspected with empty, back, and parent_pointer, and manipulated with push_back and pop_back. #1434
    • Added a boolean method contains to check whether an element exists in a JSON object with a given key. Returns false when called on non-object types. #1471 #1474
    "},{"location":"home/releases/#bug-fixes_5","title":"Bug Fixes","text":"
    • Fixed a compilation issues with libc 2.12. #1483 #1514
    • Fixed endian conversion on PPC64. #1489
    • Fixed library to compile with GCC 9. #1472 #1492
    • Fixed a compilation issue with GCC 7 on CentOS. #1496
    • Fixed an integer overflow. #1447
    • Fixed buffer flushing in serializer. #1445 #1446
    "},{"location":"home/releases/#improvements_2","title":"Improvements","text":"
    • The performance of dumping integers has been greatly improved. #1411
    • Added CMake parameter JSON_Install to control whether the library should be installed (default: on). #1330
    • Fixed a lot of compiler and linter warnings. #1400 #1435 #1502
    • Reduced required CMake version from 3.8 to 3.1. #1409 #1428 #1441 #1498
    • Added nodiscard attribute to meta(), array(), object(), from_cbor, from_msgpack, from_ubjson, from_bson, and parse. #1433
    "},{"location":"home/releases/#further-changes_4","title":"Further Changes","text":"
    • Added missing headers. #1500
    • Fixed typos and broken links in README. #1417 #1423 #1425 #1451 #1455 #1491
    • Fixed documentation of parse function. #1473
    • Suppressed warning that cannot be fixed inside the library. #1401 #1468
    • Imroved package manager suppert:
      • Updated Buckaroo instructions. #1495
      • Improved Meson support. #1463
      • Added Conda package manager documentation. #1430
      • Added NuGet package manager documentation. #1132
    • Continuous Integration
      • Removed unstable or deprecated Travis builders (Xcode 6.4 - 8.2) and added Xcode 10.1 builder.
      • Added Clang 7 to Travis CI.
      • Fixed AppVeyor x64 builds. #1374 #1414
    • Updated thirdparty libraries:
      • Catch 1.12.0 -> 1.12.2
      • Google Benchmark 1.3.0 -> 1.4.1
      • Doxygen 1.8.15 -> 1.8.16
    "},{"location":"home/releases/#deprecated-functions_5","title":"Deprecated functions","text":"

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    • Function iterator_wrapper are deprecated. Please use the member function items() instead.
    • Functions friend std::istream& operator<<(basic_json&, std::istream&) and friend std::ostream& operator>>(const basic_json&, std::ostream&) are deprecated. Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.
    "},{"location":"home/releases/#v350","title":"v3.5.0","text":"

    Files

    • include.zip (133 KB)
    • include.zip.asc (1 KB)
    • json.hpp (693 KB)
    • json.hpp.asc (1 KB)

    Release date: 2018-12-22 SHA-256: 8a6dbf3bf01156f438d0ca7e78c2971bca50eec4ca6f0cf59adf3464c43bb9d5 (json.hpp), 3564da9c5b0cf2e032f97c69baedf10ddbc98030c337d0327a215ea72259ea21 (include.zip)

    "},{"location":"home/releases/#summary_6","title":"Summary","text":"

    This release introduces the support for structured bindings and reading from FILE*. Besides, a few bugs have been fixed. All changes are backward-compatible.

    "},{"location":"home/releases/#new-features_2","title":"New Features","text":"
    • Structured bindings are now supported for JSON objects and arrays via the items() member function, so finally this code is possible:

      for (auto& [key, val] : j.items()) {\n    std::cout << key << ':' << val << '\\n';\n}\n
      #1388 #1391

    • Added support for reading from FILE* to support situations in which streams are nit available or would require too much RAM. #1370 #1392

    "},{"location":"home/releases/#bug-fixes_6","title":"Bug Fixes","text":"
    • The eofbit was not set for input streams when the end of a stream was reached while parsing. #1340 #1343
    • Fixed a bug in the SAX parser for BSON arrays.
    "},{"location":"home/releases/#improvements_3","title":"Improvements","text":"
    • Added support for Clang 5.0.1 (PS4 version). #1341 #1342
    "},{"location":"home/releases/#further-changes_5","title":"Further Changes","text":"
    • Added a warning for implicit conversions to the documentation: It is not recommended to use implicit conversions when reading from a JSON value. Details about this recommendation can be found here. #1363
    • Fixed typos in the documentation. #1329 #1380 #1382
    • Fixed a C4800 warning. #1364
    • Fixed a -Wshadow warning #1346
    • Wrapped std::snprintf calls to avoid error in MSVC. #1337
    • Added code to allow installation via Meson. #1345
    "},{"location":"home/releases/#deprecated-functions_6","title":"Deprecated functions","text":"

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    • Function iterator_wrapper are deprecated. Please use the member function items() instead.
    • Functions friend std::istream& operator<<(basic_json&, std::istream&) and friend std::ostream& operator>>(const basic_json&, std::ostream&) are deprecated. Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.
    "},{"location":"home/releases/#v340","title":"v3.4.0","text":"

    Files

    • include.zip (132 KB)
    • include.zip.asc (1 KB)
    • json.hpp (689 KB)
    • json.hpp.asc (1 KB)

    Release date: 2018-10-30 SHA-256: 63da6d1f22b2a7bb9e4ff7d6b255cf691a161ff49532dcc45d398a53e295835f (json.hpp), bfec46fc0cee01c509cf064d2254517e7fa80d1e7647fea37cf81d97c5682bdc (include.zip)

    "},{"location":"home/releases/#summary_7","title":"Summary","text":"

    This release introduces three new features:

    • BSON (Binary JSON) is next to CBOR, MessagePack, and UBJSON the fourth binary (de)serialization format supported by the library.
    • Adjustable error handlers for invalid Unicode allows to specify the behavior when invalid byte sequences are serialized.
    • Simplified enum/JSON mapping with a macro in case the default mapping to integers is not desired.

    Furthermore, some effort has been invested in improving the parse error messages. Besides, a few bugs have been fixed. All changes are backward-compatible.

    "},{"location":"home/releases/#new-features_3","title":"New Features","text":"
    • The library can read and write a subset of BSON (Binary JSON). All data types known from JSON are supported, whereas other types more tied to MongoDB such as timestamps, object ids, or binary data are currently not implemented. See the README for examples. #1244 #1320
    • The behavior when the library encounters an invalid Unicode sequence during serialization can now be controlled by defining one of three Unicode error handlers: (1) throw an exception (default behavior), (2) replace invalid sequences by the Unicode replacement character (U+FFFD), or (3) ignore/filter invalid sequences. See the documentation of the dump function for examples. #1198 #1314
    • To easily specify a user-defined enum/JSON mapping, a macro NLOHMANN_JSON_SERIALIZE_ENUM has been introduced. See the README section for more information. #1208 #1323
    "},{"location":"home/releases/#bug-fixes_7","title":"Bug Fixes","text":"
    • fixed truncation #1286 #1315
    • fixed an issue with std::pair #1299 #1301
    • fixed an issue with std::variant #1292 #1294
    • fixed a bug in the JSON Pointer parser
    "},{"location":"home/releases/#improvements_4","title":"Improvements","text":"
    • The diagnosis messages for parse errors have been improved: error messages now indicated line/column positions where possible (in addition to a byte count) and also the context in which the error occurred (e.g., \"while parsing a JSON string\"). Example: error parse error at 2: syntax error - invalid string: control character must be escaped; last read: '<U+0009>' is now reported as parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+0009 (HT) must be escaped to \\u0009 or \\t; last read: '<U+0009>'. #1280 #1288 #1303
    "},{"location":"home/releases/#further-changes_6","title":"Further Changes","text":"
    • improved Meson documentation #1305
    • fixed some more linter warnings #1280
    • fixed Clang detection for third-party Google Benchmark library #1277
    "},{"location":"home/releases/#deprecated-functions_7","title":"Deprecated functions","text":"

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    • Function iterator_wrapper are deprecated. Please use the member function items() instead.
    • Functions friend std::istream& operator<<(basic_json&, std::istream&) and friend std::ostream& operator>>(const basic_json&, std::ostream&) are deprecated. Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.
    "},{"location":"home/releases/#v330","title":"v3.3.0","text":"

    Files

    • include.zip (123 KB)
    • include.zip.asc (1 KB)
    • json.hpp (635 KB)
    • json.hpp.asc (1 KB)

    Release date: 2018-10-05 SHA-256: f1327bb60c58757a3dd2b0c9c45d49503d571337681d950ec621f8374bcc14d4 (json.hpp), 9588d63557333aaa485e92221ec38014a85a6134e7486fe3441e0541a5a89576 (include.zip)

    "},{"location":"home/releases/#summary_8","title":"Summary","text":"

    This release adds support for GCC 4.8. Furthermore, it adds a function get_to to write a JSON value to a passed reference. Another topic of this release was the CMake support which has been overworked and documented.

    Besides, a lot of bugs have been fixed and slight improvements have been made. All changes are backward-compatible.

    "},{"location":"home/releases/#new-features_4","title":"New Features","text":"
    • The library can now also built with GCC 4.8. Though this compiler does not fully support C++11, it can successfully compile and run the test suite. Note that bug 57824 in GCC 4.8 still forbids to use multiline raw strings in arguments to macros. #1257
    • Added new function get_to to write a JSON value to a passed reference. The destination type is automatically derived which allows more succinct code compared to the get function. #1227 #1231
    "},{"location":"home/releases/#bug-fixes_8","title":"Bug Fixes","text":"
    • Fixed a bug in the CMake file that made target_link_libraries to not properly include nlohmann_json. #1243 #1245 #1260
    • Fixed a warning in MSVC 2017 complaining about a constexpr if. #1204 #1268 #1272
    • Fixed a bug that prevented compilation with ICPC. #755 #1222
    • Improved the SFINAE correctness to fix a bug in the conversion operator. #1237 #1238
    • Fixed a -Wctor-dtor-privacy warning. #1224
    • Fixed a warning on a lambda in unevaluated context. #1225 #1230
    • Fixed a bug introduced in version 3.2.0 where defining JSON_CATCH_USER led to duplicate macro definition of JSON_INTERNAL_CATCH. #1213 #1214
    • Fixed a bug that prevented compilation with Clang 3.4.2 in RHEL 7. #1179 #1249
    "},{"location":"home/releases/#improvements_5","title":"Improvements","text":"
    • Added documentation on CMake integration of the library. #1270
    • Changed the CMake file to use find_package(nlohmann_json) without installing the library. #1202
    • Improved error messages in case operator[] is used with the wrong combination (json.exception.type_error.305) of JSON container type and argument type. Example: \"cannot use operator[] with a string argument\". #1220 #1221
    • Added a license and version information to the Meson build file. #1252
    • Removed static assertions to indicated missing to_json or from_json functions as such assertions do not play well with SFINAE. These assertions also led to problems with GMock. #960 #1212 #1228
    • The test suite now does not wait forever if run in a wrong directory and input files are not found. #1262
    • The test suite does not show deprecation warnings for deprecated functions which frequently led to confusion. #1271
    "},{"location":"home/releases/#further-changes_7","title":"Further Changes","text":"
    • GCC 4.8 and Xcode 10 were added to the continuous integration suite at Travis.
    • Added lgtm checks to pull requests.
    • Added tests for CMake integration. #1260
    "},{"location":"home/releases/#deprecated-functions_8","title":"Deprecated functions","text":"

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    • Function iterator_wrapper are deprecated. Please use the member function items() instead.
    • Functions friend std::istream& operator<<(basic_json&, std::istream&) and friend std::ostream& operator>>(const basic_json&, std::ostream&) are deprecated. Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.
    "},{"location":"home/releases/#v320","title":"v3.2.0","text":"

    Files

    • include.zip (124 KB)
    • include.zip.asc (1 KB)
    • json.hpp (636 KB)
    • json.hpp.asc (1 KB)

    Release date: 2018-08-20 SHA-256: ce6b5610a051ec6795fa11c33854abebb086f0fd67c311f5921c3c07f9531b44 (json.hpp), 35ee642558b90e2f9bc758995c4788c4b4d4dec54eef95fb8f38cb4d49c8fc7c (include.zip)

    "},{"location":"home/releases/#summary_9","title":"Summary","text":"

    This release introduces a SAX interface to the library. While this may be a very special feature used by only few people, it allowed to unify all functions that consumed input and created some kind of JSON value. Internally, now all existing functions like parse, accept, from_cbor, from_msgpack, and from_ubjson use the SAX interface with different event processors. This allowed to separate the input processing from the value generation. Furthermore, throwing an exception in case of a parse error is now optional and up to the event processor. Finally, the JSON parser is now non-recursive (meaning it does not use the call stack, but std::vector<bool> to track the hierarchy of structured values) which allows to process nested input more efficiently.

    Furthermore, the library finally is able to parse from wide string types. This is the first step toward opening the library from UTF-8 to UTF-16 and UTF-32.

    This release further fixes several bugs in the library. All changes are backward-compatible.

    "},{"location":"home/releases/#new-features_5","title":"New Features","text":"
    • added a parser with a SAX interface (#971, #1153)
    • support to parse from wide string types std::wstring, std::u16string, and std::u32string; the input will be converted to UTF-8 (#1031)
    • added support for std::string_view when using C++17 (#1028)
    • allow to roundtrip std::map and std::unordered_map from JSON if key type is not convertible to string; in these cases, values are serialized to arrays of pairs (#1079, #1089, #1133, #1138)
    "},{"location":"home/releases/#bug-fixes_9","title":"Bug Fixes","text":"
    • allow to create nullptr_t from JSON allowing to properly roundtrip null values (#1169)
    • allow compare user-defined string types (#1130)
    • better support for algorithms using iterators from items() (#1045, #1134)
    • added parameter to avoid compilation error with MSVC 2015 debug builds (#1114)
    • re-added accidentally skipped unit tests (#1176)
    • fixed MSVC issue with std::swap (#1168)
    "},{"location":"home/releases/#improvements_6","title":"Improvements","text":"
    • key() function for iterators returns a const reference rather than a string copy (#1098)
    • binary formats CBOR, MessagePack, and UBJSON now supports float as type for floating-point numbers (#1021)
    "},{"location":"home/releases/#further-changes_8","title":"Further Changes","text":"
    • changed issue templates
    • improved continuous integration: added builders for Xcode 9.3 and 9.4, added builders for GCC 8 and Clang 6, added builder for MinGW, added builders for MSVC targeting x86
    • required CMake version is now at least 3.8 (#1040)
    • overworked CMake file wrt. packaging (#1048)
    • added package managers: Spack (#1041) and CocoaPods (#1148)
    • fixed Meson include directory (#1142)
    • preprocessor macro JSON_SKIP_UNSUPPORTED_COMPILER_CHECK can skip the rejection of unsupported compilers - use at your own risk! (#1128)
    • preprocessor macro JSON_INTERNAL_CATCH/JSON_INTERNAL_CATCH_USER allows to control the behavior of exception handling inside the library (#1187)
    • added note on char to JSON conversion
    • added note how to send security-related issue via encrypted email
    • removed dependency to std::stringstream (#1117)
    • added SPDX-License-Identifier
    • added updated JSON Parsing Test Suite, described in Parsing JSON is a Minefield \ud83d\udca3
    • updated to Catch 1.12.0
    "},{"location":"home/releases/#deprecated-functions_9","title":"Deprecated functions","text":"

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    • Function iterator_wrapper are deprecated. Please use the member function items() instead.
    • Functions friend std::istream& operator<<(basic_json&, std::istream&) and friend std::ostream& operator>>(const basic_json&, std::ostream&) are deprecated. Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.
    "},{"location":"home/releases/#v312","title":"v3.1.2","text":"

    Files

    • include.zip (115 KB)
    • include.zip.asc (1 KB)
    • json.hpp (582 KB)
    • json.hpp.asc (1 KB)

    Release date: 2018-03-14 SHA-256: fbdfec4b4cf63b3b565d09f87e6c3c183bdd45c5be1864d3fcb338f6f02c1733 (json.hpp), 495362ee1b9d03d9526ba9ccf1b4a9c37691abe3a642ddbced13e5778c16660c (include.zip)

    "},{"location":"home/releases/#summary_10","title":"Summary","text":"

    This release fixes several bugs in the library. All changes are backward-compatible.

    "},{"location":"home/releases/#bug-fixes_10","title":"Bug Fixes","text":"
    • Fixed a memory leak occurring in the parser callback (#1001).
    • Different specializations of basic_json (e.g., using different template arguments for strings or objects) can now be used in assignments (#972, #977, #986).
    • Fixed a logical error in an iterator range check (#992).
    "},{"location":"home/releases/#improvements_7","title":"Improvements","text":"
    • The parser and the serialization now support user-defined string types (#1006, #1009).
    "},{"location":"home/releases/#further-changes_9","title":"Further Changes","text":"
    • Clang Analyzer is now used as additional static analyzer; see make clang_analyze.
    • Overworked README by adding links to the documentation (#981).
    "},{"location":"home/releases/#deprecated-functions_10","title":"Deprecated functions","text":"

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    • Function iterator_wrapper are deprecated. Please use the member function items() instead.
    • Functions friend std::istream& operator<<(basic_json&, std::istream&) and friend std::ostream& operator>>(const basic_json&, std::ostream&) are deprecated. Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.
    "},{"location":"home/releases/#v311","title":"v3.1.1","text":"

    Files

    • include.zip (114 KB)
    • include.zip.asc (1 KB)
    • json.hpp (577 KB)
    • json.hpp.asc (1 KB)

    Release date: 2018-02-13 SHA-256: e14ce5e33d6a2daf748026bd4947f3d9686ca4cfd53d10c3da46a0a9aceb7f2e (json.hpp), fde771d4b9e4f222965c00758a2bdd627d04fb7b59e09b7f3d1965abdc848505 (include.zip)

    "},{"location":"home/releases/#summary_11","title":"Summary","text":"

    This release fixes several bugs in the library. All changes are backward-compatible.

    "},{"location":"home/releases/#bug-fixes_11","title":"Bug Fixes","text":"
    • Fixed parsing of CBOR strings with indefinite length (#961). Earlier versions of this library misinterpreted the CBOR standard and rejected input with the 0x7F start byte.
    • Fixed user-defined conversion to vector type (#924, #969). A wrong SFINAE check rejected code though a user-defined conversion was provided.
    • Fixed documentation of the parser behavior for objects with duplicate keys (#963). The exact behavior is not specified by RFC 8259 and the library now also provides no guarantee which object key is stored.
    • Added check to detect memory overflow when parsing UBJSON containers (#962). The optimized UBJSON format allowed for specifying an array with billions of null elements with a few bytes and the library did not check whether this size exceeded max_size().
    "},{"location":"home/releases/#further-changes_10","title":"Further Changes","text":"
    • Code coverage is now calculated for the individual header files, allowing to find uncovered lines more quickly than by browsing through the single header version (#953, #957).
    • A Makefile target run_benchmarks was added to quickly build and run the benchmark suite.
    • The documentation was harmonized with respect to the header inclusion (#955). Now all examples and the README use #include <nlohmann/json.hpp> to allow for selecting single_include or include or whatever installation folder as include directory.
    • Added note on how to use the library with the cget package manager (#954).
    "},{"location":"home/releases/#deprecated-functions_11","title":"Deprecated functions","text":"

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    • Function iterator_wrapper are deprecated. Please use the member function items() instead.
    • Functions friend std::istream& operator<<(basic_json&, std::istream&) and friend std::ostream& operator>>(const basic_json&, std::ostream&) are deprecated. Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.
    "},{"location":"home/releases/#v310","title":"v3.1.0","text":"

    Files

    • include.zip (114 KB)
    • include.zip.asc (1 KB)
    • json.hpp (577 KB)
    • json.hpp.asc (1 KB)

    Release date: 2018-02-01 SHA-256: d40f614d10a6e4e4e80dca9463da905285f20e93116c36d97d4dc1aa63d10ba4 (json.hpp), 2b7234fca394d1e27b7e017117ed80b7518fafbb4f4c13a7c069624f6f924673 (include.zip)

    "},{"location":"home/releases/#summary_12","title":"Summary","text":"

    This release adds support for the UBJSON format and JSON Merge Patch. It also contains some minor changes and bug fixes. All changes are backward-compatible.

    "},{"location":"home/releases/#new-features_6","title":"New features","text":"
    • The library now supports UBJSON (Universal Binary JSON Specification) as binary format to read and write JSON values space-efficiently. See the documentation overview for a comparison of the different formats CBOR, MessagePack, and UBJSON.
    • JSON Merge Patch (RFC 7386) offers an intuitive means to describe patches between JSON values (#876, #877). See the documentation of merge_patch for more information.
    "},{"location":"home/releases/#improvements_8","title":"Improvements","text":"
    • The library now uses the Grisu2 algorithm for printing floating-point numbers (based on the reference implementation by Florian Loitsch) which produces a short representation which is guaranteed to round-trip (#360, #935, #936).
    • The UTF-8 handling was further simplified by using the decoder of Bj\u00f6rn Hoehrmann in more scenarios.
    "},{"location":"home/releases/#reorganization","title":"Reorganization","text":"
    • Though the library is released as a single header, its development got more and more complicated. With this release, the header is split into several files and the single-header file json.hpp can be generated from these development sources. In the repository, folder include contains the development sources and single_include contains the single json.hpp header (#700, #906, #907, #910, #911, #915, #920, #924, #925, #928, #944).
    • The split further allowed for a forward declaration header include/nlohmann/json_fwd.hpp to speed up compilation times (#314).
    "},{"location":"home/releases/#further-changes_11","title":"Further changes","text":"
    • Google Benchmark is now used for micro benchmarks (see benchmarks folder, #921).
    • The serialization (JSON and binary formats) now properly work with the libraries string template parameter, allowing for optimized string implementations to be used in constraint environments such as embedded software (#941, #950).
    • The exceptional behavior can now be overridden by defining macros JSON_THROW_USER, JSON_TRY_USER, and JSON_CATCH_USER, defining the behavior of throw, try and catch, respectively. This allows to switch off C++'s exception mechanism yet still execute user-defined code in case an error condition occurs (#938).
    • To facilitate the interplay with flex and Bison, the library does not use the variable name yytext any more as it could clash with macro definitions (#933).
    • The library now defines NLOHMANN_JSON_VERSION_MAJOR, NLOHMANN_JSON_VERSION_MINOR, and NLOHMANN_JSON_VERSION_PATCH to allow for conditional compilation based on the included library version (#943, #948).
    • A compilation error with ICC has been fixed (#947).
    • Typos and links in the documentation have been fixed (#900, #930).
    • A compiler error related to incomplete types has been fixed (#919).
    • The tests form the UTF-8 decoder stress test have been added to the test suite.
    "},{"location":"home/releases/#deprecated-functions_12","title":"Deprecated functions","text":"
    • Function iterator_wrapper has been deprecated (#874). Since its introduction, the name was up for discussion, as it was too technical. We now introduced the member function items() with the same semantics. iterator_wrapper will be removed in the next major version (i.e., 4.0.0).

    Furthermore, the following functions are deprecated since version 3.0.0 and will be removed in the next major version (i.e., 4.0.0):

    • friend std::istream& operator<<(basic_json&, std::istream&)
    • friend std::ostream& operator>>(const basic_json&, std::ostream&)

    Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.

    "},{"location":"home/releases/#v301","title":"v3.0.1","text":"

    Files

    • json.hpp (502 KB)
    • json.hpp.asc (1 KB)

    Release date: 2017-12-29 SHA-256: c9b3591f1bb94e723a0cd7be861733a3a555b234ef132be1e9027a0364118c4c

    "},{"location":"home/releases/#summary_13","title":"Summary","text":"

    This release fixes small issues in the implementation of JSON Pointer and JSON Patch. All changes are backward-compatible.

    "},{"location":"home/releases/#changes","title":"Changes","text":"
    • The \"copy\" operation of JSON Patch (RFC 6902) requests that it is an error if the target path points into a non-existing array or object (see #894 for a detailed description). This release fixes the implementation to detect such invalid target paths and throw an exception.
    • An array index in a JSON Pointer (RFC 6901) must be an integer. This release fixes the implementation to throw an exception in case invalid array indices such as 10e2 are used.
    • Added the JSON Patch tests from Byron Ruth and Mike McCabe.
    • Fixed the documentation of the at(ptr) function with JSON Pointers to list all possible exceptions (see #888).
    • Updated the container overview documentation (see #883).
    • The CMake files now respect the BUILD_TESTING option (see #846, #885)
    • Fixed some compiler warnings (see #858, #882).
    "},{"location":"home/releases/#deprecated-functions_13","title":"Deprecated functions","text":"

    To unify the interfaces and to improve similarity with the STL, the following functions are deprecated since version 3.0.0 and will be removed in the next major version (i.e., 4.0.0):

    • friend std::istream& operator<<(basic_json&, std::istream&)
    • friend std::ostream& operator>>(const basic_json&, std::ostream&)

    Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.

    "},{"location":"home/releases/#v300","title":"v3.0.0","text":"

    Files

    • json.hpp (501 KB)
    • json.hpp.asc (1 KB)

    Release date: 2017-12-17 SHA-256: 076d4a0cb890a3c3d389c68421a11c3d77c64bd788e85d50f1b77ed252f2a462

    "},{"location":"home/releases/#summary_14","title":"Summary","text":"

    After almost a year, here is finally a new release of JSON for Modern C++, and it is a major one! As we adhere to semantic versioning, this means the release includes some breaking changes, so please read the next section carefully before you update. But don't worry, we also added a few new features and put a lot of effort into fixing a lot of bugs and straighten out a few inconsistencies.

    "},{"location":"home/releases/#breaking-changes","title":"Breaking changes","text":"

    This section describes changes that change the public API of the library and may require changes in code using a previous version of the library. In section \"Moving from 2.x.x to 3.0.0\" at the end of the release notes, we describe in detail how existing code needs to be changed.

    • The library now uses user-defined exceptions instead of re-using those defined in <stdexcept> (#244). This not only allows to add more information to the exceptions (every exception now has an identifier, and parse errors contain the position of the error), but also to easily catch all library exceptions with a single catch(json::exception).
    • When strings with a different encoding as UTF-8 were stored in JSON values, their serialization could not be parsed by the library itself, as only UTF-8 is supported. To enforce this library limitation and improve consistency, non-UTF-8 encoded strings now yield a json::type_error exception during serialization (#838). The check for valid UTF-8 is realized with code from Bj\u00f6rn Hoehrmann.
    • NaN and infinity values can now be stored inside the JSON value without throwing an exception. They are, however, still serialized as null (#388).
    • The library's iterator tag was changed from RandomAccessIterator to BidirectionalIterator (#593). Supporting RandomAccessIterator was incorrect as it assumed an ordering of values in a JSON objects which are unordered by definition.
    • The library does not include the standard headers <iostream>, <ctype>, and <stdexcept> any more. You may need to add these headers to code relying on them.
    • Removed constructor explicit basic_json(std::istream& i, const parser_callback_t cb = nullptr) which was deprecated in version 2.0.0 (#480).
    "},{"location":"home/releases/#deprecated-functions_14","title":"Deprecated functions","text":"

    To unify the interfaces and to improve similarity with the STL, the following functions are now deprecated and will be removed in the next major version (i.e., 4.0.0):

    • friend std::istream& operator<<(basic_json&, std::istream&)
    • friend std::ostream& operator>>(const basic_json&, std::ostream&)

    Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.

    "},{"location":"home/releases/#new-features_7","title":"New features","text":"

    With all this breaking and deprecation out of the way, let's talk about features!

    • We improved the diagnostic information for syntax errors (#301). Now, an exception json::parse_error is thrown which contains a detailed message on the error, but also a member byte to indicate the byte offset in the input where the error occurred.
    • We added a non-throwing syntax check (#458): The new accept function returns a Boolean indicating whether the input is proper JSON. We also added a Boolean parameter allow_exceptions to the existing parse functions to return a discarded value in case a syntax error occurs instead of throwing an exception.
    • An update function was added to merge two JSON objects (#428). In case you are wondering: the name was inspired by Python.
    • The insert function now also supports an iterator range to add elements to an object.
    • The binary exchange formats CBOR and MessagePack can now be parsed from input streams and written to output streams (#477).
    • Input streams are now only read until the end of a JSON value instead of the end of the input (#367).
    • The serialization function dump now has two optional parameters ensure_ascii to escape all non-ASCII characters with \\uxxxx and an indent_char parameter to choose whether to indent with spaces or tabs (#654).
    • Added built-in type support for C arrays (#502), std::pair and std::tuple (#563, #614), enum and enum class (#545), std::vector<bool> (#494). Fixed support for std::valarray (#702), std::array (#553), and std::map<std::string, std::string> (#600, #607).
    "},{"location":"home/releases/#further-changes_12","title":"Further changes","text":"

    Furthermore, there have been a lot of changes under the hood:

    • Replaced the re2c generated scanner by a self-coded version which allows for a better modularization of the parser and better diagnostics. To test the new scanner, we added millions (8,860,608 to be exact) of unit tests to check all valid and invalid byte sequences of the Unicode standard.
    • Google's OSS-Fuzz is still constantly fuzz-testing the library and found several issues that were fixed in this release (#497, #504, #514, #516, #518, #519, #575).
    • We now also ignore UTF-8 byte order marks when parsing from an iterator range (#602).
    • Values can be now moved from initializer lists (#663).
    • Updated to Catch 1.9.7. Unfortunately, Catch2 currently has some performance issues.
    • The non-exceptional paths of the library are now annotated with __builtin_expect to optimize branch prediction as long as no error occurs.
    • MSVC now produces a stack trace in MSVC if a from_json or to_json function was not found for a user-defined type. We also added a debug visualizer nlohmann_json.natvis for better debugging in MSVC (#844).
    • Overworked the documentation and added even more examples.
    • The build workflow now relies on CMake and CTest. Special flags can be chosen with CMake, including coverage (JSON_Coverage), compilation without exceptions (JSON_NoExceptions), LLVM sanitizers (JSON_Sanitizer), or execution with Valgrind (JSON_Valgrind).
    • Added support for package managers Meson (#576), Conan (#566), Hunter (#671, #829), and vcpkg (#753).
    • Added CI builders: Xcode 8.3, 9.0, 9.1, and 9.2; GCC 7.2; Clang 3.8, 3.9, 4.0, and 5.0; Visual Studio 2017. The library is further built with C++17 settings on the latest Clang, GCC, and MSVC version to quickly detect new issues.
    "},{"location":"home/releases/#moving-from-2xx-to-300","title":"Moving from 2.x.x to 3.0.0","text":""},{"location":"home/releases/#user-defined-exceptions","title":"User-defined Exceptions","text":"

    There are five different exceptions inheriting from json::exception:

    • json::parse_error for syntax errors (including the binary formats),
    • json::invalid_iterator for errors related to iterators,
    • json::type_error for errors where functions were called with the wrong JSON type,
    • json::out_of_range for range errors, and
    • json::other_error for miscellaneous errors.

    To support these exception, the try/catch blocks of your code need to be adjusted:

    new exception previous exception parse_error.101 invalid_argument parse_error.102 invalid_argument parse_error.103 invalid_argument parse_error.104 invalid_argument parse_error.105 invalid_argument parse_error.106 domain_error parse_error.107 domain_error parse_error.108 domain_error parse_error.109 invalid_argument parse_error.110 out_of_range parse_error.111 invalid_argument parse_error.112 invalid_argument invalid_iterator.201 domain_error invalid_iterator.202 domain_error invalid_iterator.203 domain_error invalid_iterator.204 out_of_range invalid_iterator.205 out_of_range invalid_iterator.206 domain_error invalid_iterator.207 domain_error invalid_iterator.208 domain_error invalid_iterator.209 domain_error invalid_iterator.210 domain_error invalid_iterator.211 domain_error invalid_iterator.212 domain_error invalid_iterator.213 domain_error invalid_iterator.214 out_of_range type_error.301 domain_error type_error.302 domain_error type_error.303 domain_error type_error.304 domain_error type_error.305 domain_error type_error.306 domain_error type_error.307 domain_error type_error.308 domain_error type_error.309 domain_error type_error.310 domain_error type_error.311 domain_error type_error.313 domain_error type_error.314 domain_error type_error.315 domain_error out_of_range.401 out_of_range out_of_range.402 out_of_range out_of_range.403 out_of_range out_of_range.404 out_of_range out_of_range.405 domain_error other_error.501 domain_error"},{"location":"home/releases/#handling-of-nan-and-inf","title":"Handling of NaN and INF","text":"
    • If an overflow occurs during parsing a number from a JSON text, an exception json::out_of_range is thrown so that the overflow is detected early and roundtripping is guaranteed.

    • NaN and INF floating-point values can be stored in a JSON value and are not replaced by null. That is, the basic_json class behaves like double in this regard (no exception occurs). However, NaN and INF are serialized to null.

    "},{"location":"home/releases/#removal-of-deprecated-functions","title":"Removal of deprecated functions","text":"

    Function explicit basic_json(std::istream& i, const parser_callback_t cb = nullptr) should be replaced by the parse function: Let ss be a stream and cb be a parse callback function.

    Old code:

    json j(ss, cb);\n

    New code:

    json j = json::parse(ss, cb);\n

    If no callback function is used, also the following code works:

    json j;\nj << ss;\n

    or

    json j;\nss >> j;\n
    "},{"location":"home/releases/#v211","title":"v2.1.1","text":"

    Files

    • json.hpp (437 KB)
    • json.hpp.asc (1 KB)

    Release date: 2017-02-25 SHA-256: faa2321beb1aa7416d035e7417fcfa59692ac3d8c202728f9bcc302e2d558f57

    "},{"location":"home/releases/#summary_15","title":"Summary","text":"

    This release fixes a locale-related bug in the parser. To do so, the whole number handling (lexer, parser, and also the serialization) have been overworked. Furthermore, a lot of small changes added up that were added to this release. All changes are backward-compatible.

    "},{"location":"home/releases/#changes_1","title":"Changes","text":"
    • Locales that have a different character than . as decimal separator (e.g., the Norwegian locale nb_NO.UTF-8) led to truncated number parsing or parse errors. The library now has been fixed to work with any locale. Note that . is still the only valid decimal separator for JSON input.
    • Numbers like 1.0 were correctly parsed as floating-point number, but serialized as integer (1). Now, floating-point numbers correctly round trip.
    • Parsing incorrect JSON numbers with leading 0 (0123) could yield a buffer overflow. This is fixed now by detecting such errors directly by the lexer.
    • Constructing a JSON value from a pointer was incorrectly interpreted as a Boolean; such code will now yield a compiler error.
    • Comparing a JSON number with 0 led to a comparison with null. This is fixed now.
    • All throw calls are now wrapped in macros.
    • Starting during the preparation of this release (since 8 February 2017), commits and released files are cryptographically signed with this GPG key. Previous releases have also been signed.
    • The parser for MessagePack and CBOR now supports an optional start index parameter to define a byte offset for the parser.
    • Some more warnings have been fixed. With Clang, the code compiles without warnings with -Weverything (well, it needs -Wno-documentation-unknown-command and -Wno-deprecated-declarations, but you get the point).
    • The code can be compiled easier with many Android NDKs by avoiding macros like UINT8_MAX which previously required defining a preprocessor macro for compilation.
    • The unit tests now compile two times faster.
    • Cotire is used to speed up the build.
    • Fixed a lot of typos in the documentation.
    • Added a section to the README file that lists all used third-party code/tools.
    • Added a note on constructing a string value vs. parsing.
    • The test suite now contains 11202597 unit tests.
    • Improved the Doxygen documentation by shortening the template parameters of class basic_json.
    • Removed Doozer.
    • Added Codacity.
    • Upgraded Catch to version 1.7.2.
    "},{"location":"home/releases/#v210","title":"v2.1.0","text":"

    Files

    • json.hpp (426 KB)
    • json.hpp.asc (1 KB)
    • Release date: 2017-01-28
    • SHA-256: a571dee92515b685784fd527e38405cf3f5e13e96edbfe3f03d6df2e363a767b
    "},{"location":"home/releases/#summary_16","title":"Summary","text":"

    This release introduces a means to convert from/to user-defined types. The release is backwards compatible.

    "},{"location":"home/releases/#changes_2","title":"Changes","text":"
    • The library now offers an elegant way to convert from and to arbitrary value types. All you need to do is to implement two functions: to_json and from_json. Then, a conversion is as simple as putting a = between variables. See the README for more information and examples.
    • Exceptions can now be switched off. This can be done by defining the preprocessor symbol JSON_NOEXCEPTION or by passing -fno-exceptions to your compiler. In case the code would usually thrown an exception, abort() is now called.
    • Information on the library can be queried with the new (static) function meta() which returns a JSON object with information on the version, compiler, and platform. See the documentation for an example.
    • A bug in the CBOR parser was fixed which led to a buffer overflow.
    • The function type_name() is now public. It allows to query the type of a JSON value as string.
    • Added the Big List of Naughty Strings as test case.
    • Updated to Catch v1.6.0.
    • Some typos in the documentation have been fixed.
    "},{"location":"home/releases/#v2010","title":"v2.0.10","text":"

    Files

    • json.hpp (409 KB)
    • json.hpp.asc (1 KB)
    • Release date: 2017-01-02
    • SHA-256: ec27d4e74e9ce0f78066389a70724afd07f10761009322dc020656704ad5296d
    "},{"location":"home/releases/#summary_17","title":"Summary","text":"

    This release fixes several security-relevant bugs in the MessagePack and CBOR parsers. The fixes are backwards compatible.

    "},{"location":"home/releases/#changes_3","title":"Changes","text":"
    • Fixed a lot of bugs in the CBOR and MesssagePack parsers. These bugs occurred if invalid input was parsed and then could lead in buffer overflows. These bugs were found with Google's OSS-Fuzz, see #405, #407, #408, #409, #411, and #412 for more information.
    • We now also use the Doozer continuous integration platform.
    • The complete test suite is now also run with Clang's address sanitizer and undefined-behavior sanitizer.
    • Overworked fuzz testing; CBOR and MessagePack implementations are now fuzz-tested. Furthermore, all fuzz tests now include a round trip which ensures created output can again be properly parsed and yields the same JSON value.
    • Clarified documentation of find() function to always return end() when called on non-object value types.
    • Moved thirdparty test code to test/thirdparty directory.
    "},{"location":"home/releases/#v209","title":"v2.0.9","text":"

    Files

    • json.hpp (406 KB)
    • json.hpp.asc (1 KB)
    • Release date: 2016-12-16
    • SHA-256: fbf3396f13e187d6c214c297bddc742d918ea9b55e10bfb3d9f458b9bfdc22e5
    "},{"location":"home/releases/#summary_18","title":"Summary","text":"

    This release implements with CBOR and MessagePack two binary serialization/deserialization formats. It further contains some small fixes and improvements. The fixes are backwards compatible.

    "},{"location":"home/releases/#changes_4","title":"Changes","text":"
    • The library can now read and write the binary formats CBOR (Concise Binary Object Representation) and MessagePack. Both formats are aimed to produce a very compact representation of JSON which can be parsed very efficiently. See the README file for more information and examples.
    • simplified the iteration implementation allowing to remove dozens of lines of code
    • fixed an integer overflow error detected by Google's OSS-Fuzz
    • suppressed documentation warnings inside the library to facilitate compilation with -Wdocumentation
    • fixed an overflow detection error in the number parser
    • updated contribution guidelines to a list of frequentely asked features that will most likely be never added to the library
    • added a table of contents to the README file to add some structure
    • mentioned the many examples and the documentation in the README file
    • split unit tests into individual independent binaries to speed up compilation and testing
    • the test suite now contains 11201886 tests
    "},{"location":"home/releases/#v208","title":"v2.0.8","text":"

    Files

    • json.hpp (360 KB)
    • json.hpp.asc (1 KB)
    • Release date: 2016-12-02
    • SHA-256: b70db0ad34f8e0e61dc3f0cbab88099336c9674c193d8a3439d93d6aca2d7120
    "},{"location":"home/releases/#summary_19","title":"Summary","text":"

    This release combines a lot of small fixes and improvements. The fixes are backwards compatible.

    "},{"location":"home/releases/#changes_5","title":"Changes","text":"
    • fixed a bug that froze the parser if a passed file was not found (now, std::invalid_argument is thrown)
    • fixed a bug that lead to an error of a file at EOF was parsed again (now, std::invalid_argument is thrown)
    • the well known functions emplace and emplace_back have been added to JSON values and work as expected
    • improved the performance of the serialization (dump function)
    • improved the performance of the deserialization (parser)
    • some continuous integration images at Travis were added and retired; see here for the current continuous integration setup
    • the Coverity scan works again
    • the benchmarking code has been improved to produce more stable results
    • the README file has been extended and includes more frequently asked examples
    • the test suite now contains 8905518 tests
    • updated Catch to version 1.5.8
    "},{"location":"home/releases/#v207","title":"v2.0.7","text":"

    Files

    • json.hpp (355 KB)
    • json.hpp.asc (1 KB)
    • Release date: 2016-11-02
    • SHA-256: 5545c323670f8165bae90b9dc6078825e86ec310d96cc4e5b47233ea43715bbf
    "},{"location":"home/releases/#summary_20","title":"Summary","text":"

    This release fixes a few bugs in the JSON parser found in the Parsing JSON is a Minefield \ud83d\udca3 article. The fixes are backwards compatible.

    "},{"location":"home/releases/#changes_6","title":"Changes","text":"
    • The article Parsing JSON is a Minefield \ud83d\udca3 discusses a lot of pitfalls of the JSON specification. When investigating the published test cases, a few bugs in the library were found and fixed:
    • Files with less than 5 bytes can now be parsed without error.
    • The library now properly rejects any file encoding other than UTF-8. Furthermore, incorrect surrogate pairs are properly detected and rejected.
    • The library now accepts all but one \"yes\" test (y_string_utf16.json): UTF-16 is not supported.
    • The library rejects all but one \"no\" test (n_number_then_00.json): Null bytes are treated as end of file instead of an error. This allows to parse input from null-terminated strings.
    • The string length passed to a user-defined string literal is now exploited to choose a more efficient constructor.
    • A few grammar mistakes in the README file have been fixed.
    "},{"location":"home/releases/#v206","title":"v2.0.6","text":"

    Files

    • json.hpp (349 KB)
    • json.hpp.asc (1 KB)
    • Release date: 2016-10-15
    • SHA256: 459cc93d5e2f503e50c6d5876eb86bfea7daf405f5a567c5a2c9abc2383756ae
    "},{"location":"home/releases/#summary_21","title":"Summary","text":"

    This release fixes the semantics of operator[] for JSON Pointers (see below). This fix is backwards compatible.

    "},{"location":"home/releases/#changes_7","title":"Changes","text":"
    • operator[] for JSON Pointers now behaves like the other versions of operator[] and transforms null values into objects or arrays if required. This allows to created nested structures like j[\"/foo/bar/2\"] = 17 (yielding {\"foo\": \"bar\": [null, null, 17]}) without problems.
    • overworked a helper SFINAE function
    • fixed some documentation issues
    • fixed the CMake files to allow to run the test suite outside the main project directory
    • restored test coverage to 100%.
    "},{"location":"home/releases/#v205","title":"v2.0.5","text":"

    Files

    • json.hpp (347 KB)
    • json.hpp.asc (1 KB)
    • Release date: 2016-09-14
    • SHA-256: 8b7565263a44e2b7d3b89808bc73d2d639037ff0c1f379e3d56dbd77e00b98d9
    "},{"location":"home/releases/#summary_22","title":"Summary","text":"

    This release fixes a regression bug in the stream parser (function parse() and the <</>> operators). This fix is backwards compatible.

    "},{"location":"home/releases/#changes_8","title":"Changes","text":"
    • Bug fix: The end of a file stream was not detected properly which led to parse errors. This bug should have been fixed with 2.0.4, but there was still a flaw in the code.
    "},{"location":"home/releases/#v204","title":"v2.0.4","text":"

    Files

    • json.hpp (347 KB)
    • json.hpp.asc (1 KB)
    • Release date: 2016-09-11
    • SHA-256: 632ceec4c25c4e2153f71470d3a2b992c8355f6d8b4d627d05dd16095cd3aeda
    "},{"location":"home/releases/#summary_23","title":"Summary","text":"

    This release fixes a bug in the stream parser (function parse() and the <</>> operators). This fix is backwards compatible.

    "},{"location":"home/releases/#changes_9","title":"Changes","text":"
    • Bug fix: The end of a file stream was not detected properly which led to parse errors.
    • Fixed a compiler warning about an unused variable.
    "},{"location":"home/releases/#v203","title":"v2.0.3","text":"

    Files

    • json.hpp (347 KB)
    • json.hpp.asc (1 KB)
    • Release date: 2016-08-31
    • SHA-256: 535b73efe5546fde9e763c14aeadfc7b58183c0b3cd43c29741025aba6cf6bd3
    "},{"location":"home/releases/#summary_24","title":"Summary","text":"

    This release combines a lot of small fixes and improvements. The release is backwards compatible.

    "},{"location":"home/releases/#changes_10","title":"Changes","text":"
    • The parser/deserialization functions have been generalized to process any contiguous sequence of 1-byte elements (e.g., char, unsigned char, uint8_t). This includes all kind of string representations (string literals, char arrays, std::string, const char*), contiguous containers (C-style arrays, std::vector, std::array, std::valarray, std::initializer_list). User-defined containers providing random-access iterator access via std::begin and std::end can be used as well. See the documentation (1, 2, 3, 4) for more information. Note that contiguous storage cannot be checked at compile time; if any of the parse functions are called with a noncompliant container, the behavior is undefined and will most likely yield segmentation violation. The preconditions are enforced by an assertion unless the library is compiled with preprocessor symbol NDEBUG.
    • As a general remark on assertions: The library uses assertions to preclude undefined behavior. A prominent example for this is the operator[] for const JSON objects. The behavior of this const version of the operator is undefined if the given key does not exist in the JSON object, because unlike the non-const version, it cannot add a null value at the given key. Assertions can be switched of by defining the preprocessor symbol NDEBUG. See the documentation of assert for more information.
    • In the course of cleaning up the parser/deserialization functions, the constructor basic_json(std::istream&, const parser_callback_t) has been deprecated and will be deleted with the next major release 3.0.0 to unify the interface of the library. Deserialization will be done by stream operators or by calling one of the parse functions. That is, calls like json j(i); for an input stream i need to be replaced by json j = json::parse(i);. Compilers will produce a deprecation warning if client code uses this function.
    • Minor improvements:
    • Improved the performance of the serialization by avoiding the re-creation of a locale object.
    • Fixed two MSVC warnings. Compiling the test suite with /Wall now only warns about non-inlined functions (C4710) and the deprecation of the constructor from input-stream (C4996).
    • Some project internals:
    • The project has qualified for the Core Infrastructure Initiative Best Practices Badge. While most requirements where already satisfied, some led to a more explicit documentation of quality-ensuring procedures. For instance, static analysis is now executed with every commit on the build server. Furthermore, the contribution guidelines document how to communicate security issues privately.
    • The test suite has been overworked and split into several files to allow for faster compilation and analysis. The execute the test suite, simply execute make check.
    • The continuous integration with Travis was extended with Clang versions 3.6.0 to 3.8.1 and now includes 18 different compiler/OS combinations.
    • An 11-day run of American fuzzy lop checked 962 million inputs on the parser and found no issue.
    "},{"location":"home/releases/#v202","title":"v2.0.2","text":"

    Files

    • json.hpp (338 KB)
    • json.hpp.asc (1 KB)
    • Release date: 2016-07-31
    • SHA-256: 8e97b7965b4594b00998d6704465412360e1a0ed927badb51ded8b82291a8f3d
    "},{"location":"home/releases/#summary_25","title":"Summary","text":"

    This release combines a lot of small fixes and improvements. The release is backwards compatible.

    "},{"location":"home/releases/#changes_11","title":"Changes","text":"
    • The parser has been overworked, and a lot of small issues have been fixed:
    • Improved parser performance by avoiding recursion and using move semantics for the return value.
    • Unescaped control characters \\x10-\\x1f are not accepted any more.
    • Fixed a bug in the parser when reading from an input stream.
    • Improved test case coverage for UTF-8 parsing: now, all valid Unicode code points are tested both escaped and unescaped.
    • The precision of output streams is now preserved by the parser.
    • Started to check the code correctness by proving termination of important loops. Furthermore, individual assertions have been replaced by a more systematic function which checks the class invariants. Note that assertions should be switched off in production by defining the preprocessor macro NDEBUG, see the documentation of assert.
    • A lot of code cleanup: removed unused headers, fixed some compiler warnings, and fixed a build error for Windows-based Clang builds.
    • Added some compile-time checks:
    • Unsupported compilers are rejected during compilation with an #error command.
    • Static assertion prohibits code with incompatible pointer types used in get_ptr().
    • Improved the documentation, and adjusted the documentation script to choose the correct version of sed.
    • Replaced a lot of \"raw loops\" by STL functions like std::all_of, std::for_each, or std::accumulate. This facilitates reasoning about termination of loops and sometimes allowed to simplify functions to a single return statement.
    • Implemented a value() function for JSON pointers (similar to at function).
    • The Homebrew formula (see Integration) is now tested for all Xcode builds (6.1 - 8.x) with Travis.
    • Avoided output to std::cout in the test cases.
    "},{"location":"home/releases/#v201","title":"v2.0.1","text":"

    Files

    • json.hpp (321 KB)
    • json.hpp.asc (1 KB)
    • Release date: 2016-06-28
    • SHA-256: ef550fcd7df572555bf068e9ec4e9d3b9e4cdd441cecb0dcea9ea7fd313f72dd
    "},{"location":"home/releases/#summary_26","title":"Summary","text":"

    This release fixes a performance regression in the JSON serialization (function dump()). This fix is backwards compatible.

    "},{"location":"home/releases/#changes_12","title":"Changes","text":"
    • The locale of the output stream (or the internal string stream if a JSON value is serialized to a string) is now adjusted once for the whole serialization instead of for each floating-point number.
    • The locale of an output stream is now correctly reset to the previous value by the JSON library.
    "},{"location":"home/releases/#v200","title":"v2.0.0","text":"

    Files

    • json.hpp (321 KB)
    • json.hpp.asc (1 KB)
    • Release date: 2016-06-24
    • SHA-256: ac9e1fb25c2ac9ca5fc501fcd2fe3281fe04f07018a1b48820e7b1b11491bb6c
    "},{"location":"home/releases/#summary_27","title":"Summary","text":"

    This release adds several features such as JSON Pointers, JSON Patch, or support for 64 bit unsigned integers. Furthermore, several (subtle) bugs have been fixed.

    As noexcept and constexpr specifier have been added to several functions, the public API has effectively been changed in a (potential) non-backwards compatible manner. As we adhere to Semantic Versioning, this calls for a new major version, so say hello to 2\ufe0f\u20e3.0\ufe0f\u20e3.0\ufe0f\u20e3.

    "},{"location":"home/releases/#changes_13","title":"Changes","text":"
    • \ud83d\udd1f A JSON value now uses uint64_t (default value for template parameter NumberUnsignedType) as data type for unsigned integer values. This type is used automatically when an unsigned number is parsed. Furthermore, constructors, conversion operators and an is_number_unsigned() test have been added.
    • \ud83d\udc49 JSON Pointer (RFC 6901) support: A JSON Pointer is a string (similar to an XPath expression) to address a value inside a structured JSON value. JSON Pointers can be used in at() and operator[] functions. Furthermore, JSON values can be \u201cflattened\u201d to key/value pairs using flatten() where each key is a JSON Pointer. The original value can be restored by \u201cunflattening\u201d the flattened value using unflatten().
    • \ud83c\udfe5 JSON Patch (RFC 6902) support. A JSON Patch is a JSON value that describes the required edit operations (add, change, remove, \u2026) to transform a JSON value into another one. A JSON Patch can be created with function diff(const basic_json&) and applied with patch(const basic_json&). Note the created patches use a rather primitive algorithm so far and leave room for improvement.
    • \ud83c\uddea\ud83c\uddfa The code is now locale-independent: Floating-point numbers are always serialized with a period (.) as decimal separator and ignores different settings from the locale.
    • \ud83c\udf7a Homebrew support: Install the library with brew tap nlohmann/json && brew install nlohmann_json.
    • Added constructor to create a JSON value by parsing a std::istream (e.g., std::stringstream or std::ifstream).
    • Added noexcept specifier to basic_json(boolean_t), basic_json(const number_integer_t), basic_json(const int), basic_json(const number_float_t), iterator functions (begin(), end(), etc.)
    • When parsing numbers, the sign of 0.0 (vs. -0.0) is preserved.
    • Improved MSVC 2015, Android, and MinGW support. See README for more information.
    • Improved test coverage (added 2,225,386 tests).
    • Removed some misuses of std::move.
    • Fixed several compiler warnings.
    • Improved error messages from JSON parser.
    • Updated to re2c to version 0.16 to use a minimal DFAs for the lexer.
    • Updated test suite to use Catch version 1.5.6.
    • Made type getters (is_number, etc.) and const value access constexpr.
    • Functions push_back and operator+= now work with key/value pairs passed as initializer list, e.g. j_object += {\"key\", 1}.
    • Overworked CMakeLists.txt to make it easier to integrate the library into other projects.
    "},{"location":"home/releases/#notes","title":"Notes","text":"
    • Parser error messages are still very vague and contain no information on the error location.
    • The implemented diff function is rather primitive and does not create minimal diffs.
    • The name of function iteration_wrapper may change in the future and the function will be deprecated in the next release.
    • Roundtripping (i.e., parsing a JSON value from a string, serializing it, and comparing the strings) of floating-point numbers is not 100% accurate. Note that RFC 8259 defines no format to internally represent numbers and states not requirement for roundtripping. Nevertheless, benchmarks like Native JSON Benchmark treat roundtripping deviations as conformance errors.
    "},{"location":"home/releases/#v110","title":"v1.1.0","text":"

    Files

    • json.hpp (257 KB)
    • json.hpp.asc (1 KB)
    • Release date: 2016-01-24
    • SHA-256: c0cf0e3017798ca6bb18e757ebc570d21a3bdac877845e2b9e9573d183ed2f05
    "},{"location":"home/releases/#summary_28","title":"Summary","text":"

    This release fixes several small bugs and adds functionality in a backwards-compatible manner. Compared to the last version (1.0.0), the following changes have been made:

    "},{"location":"home/releases/#changes_14","title":"Changes","text":"
    • Fixed: Floating-point numbers are now serialized and deserialized properly such that rountripping works in more cases. [#185, #186, #190, #191, #194]
    • Added: The code now contains assertions to detect undefined behavior during development. As the standard function assert is used, the assertions can be switched off by defining the preprocessor symbol NDEBUG during compilation. [#168]
    • Added: It is now possible to get a reference to the stored values via the newly added function get_ref(). [#128, #184]
    • Fixed: Access to object values via keys (operator[]) now works with all kind of string representations. [#171, #189]
    • Fixed: The code now compiles again with Microsoft Visual Studio 2015. [#144, #167, #188]
    • Fixed: All required headers are now included.
    • Fixed: Typos and other small issues. [#162, #166, #175, #177, #179, #180]
    "},{"location":"home/releases/#notes_1","title":"Notes","text":"

    There are still known open issues (#178, #187) which will be fixed in version 2.0.0. However, these fixes will require a small API change and will not be entirely backwards-compatible.

    "},{"location":"home/releases/#v100","title":"v1.0.0","text":"

    Files

    • json.hpp (243 KB)
    • json.hpp.asc (1 KB)
    • Release date: 2015-12-28
    • SHA-256: 767dc2fab1819d7b9e19b6e456d61e38d21ef7182606ecf01516e3f5230446de
    "},{"location":"home/releases/#summary_29","title":"Summary","text":"

    This is the first official release. Compared to the prerelease version 1.0.0-rc1, only a few minor improvements have been made:

    "},{"location":"home/releases/#changes_15","title":"Changes","text":"
    • Changed: A UTF-8 byte order mark is silently ignored.
    • Changed: sprintf is no longer used.
    • Changed: iterator_wrapper also works for const objects; note: the name may change!
    • Changed: Error messages during deserialization have been improved.
    • Added: The parse function now also works with type std::istream&&.
    • Added: Function value(key, default_value) returns either a copy of an object's element at the specified key or a given default value if no element with the key exists.
    • Added: Public functions are tagged with the version they were introduced. This shall allow for better versioning in the future.
    • Added: All public functions and types are documented (see http://nlohmann.github.io/json/doxygen/) including executable examples.
    • Added: Allocation of all types (in particular arrays, strings, and objects) is now exception-safe.
    • Added: They descriptions of thrown exceptions have been overworked and are part of the tests suite and documentation.
    "},{"location":"home/sponsors/","title":"Sponsors","text":"

    You can sponsor this library at GitHub Sponsors.

    "},{"location":"home/sponsors/#priority-sponsor","title":"Priority Sponsor","text":"
    • Martti Laine
    • Paul Harrington
    "},{"location":"home/sponsors/#named-sponsors","title":"Named Sponsors","text":"
    • Michael Hartmann
    • Stefan Hagen
    • Steve Sperandeo
    • Robert Jefe Lindst\u00e4dt
    • Steve Wagner
    • Lion Yang

    Thanks everyone!

    "},{"location":"integration/","title":"Header only","text":"

    json.hpp is the single required file in single_include/nlohmann or released here. You need to add

    #include <nlohmann/json.hpp>\n\n// for convenience\nusing json = nlohmann::json;\n

    to the files you want to process JSON and set the necessary switches to enable C++11 (e.g., -std=c++11 for GCC and Clang).

    You can further use file single_include/nlohmann/json_fwd.hpp for forward declarations.

    "},{"location":"integration/cmake/","title":"CMake","text":""},{"location":"integration/cmake/#integration","title":"Integration","text":"

    You can use the nlohmann_json::nlohmann_json interface target in CMake. This target populates the appropriate usage requirements for INTERFACE_INCLUDE_DIRECTORIES to point to the appropriate include directories and INTERFACE_COMPILE_FEATURES for the necessary C++11 flags.

    "},{"location":"integration/cmake/#external","title":"External","text":"

    To use this library from a CMake project, you can locate it directly with find_package() and use the namespaced imported target from the generated package configuration:

    Example

    CMakeLists.txt
    cmake_minimum_required(VERSION 3.1)\nproject(ExampleProject LANGUAGES CXX)\n\nfind_package(nlohmann_json 3.11.3 REQUIRED)\n\nadd_executable(example example.cpp)\ntarget_link_libraries(example PRIVATE nlohmann_json::nlohmann_json)\n

    The package configuration file, nlohmann_jsonConfig.cmake, can be used either from an install tree or directly out of the build tree.

    "},{"location":"integration/cmake/#embedded","title":"Embedded","text":"

    To embed the library directly into an existing CMake project, place the entire source tree in a subdirectory and call add_subdirectory() in your CMakeLists.txt file.

    Example

    CMakeLists.txt
    cmake_minimum_required(VERSION 3.1)\nproject(ExampleProject LANGUAGES CXX)\n\n# If you only include this third party in PRIVATE source files, you do not need to install it\n# when your main project gets installed.\nset(JSON_Install OFF CACHE INTERNAL \"\")\n\nadd_subdirectory(nlohmann_json)\n\nadd_executable(example example.cpp)\ntarget_link_libraries(example PRIVATE nlohmann_json::nlohmann_json)\n

    Note

    Do not use include(nlohmann_json/CMakeLists.txt), since that carries with it unintended consequences that will break the build. It is generally discouraged (although not necessarily well documented as such) to use include(...) for pulling in other CMake projects anyways.

    "},{"location":"integration/cmake/#supporting-both","title":"Supporting Both","text":"

    To allow your project to support either an externally supplied or an embedded JSON library, you can use a pattern akin to the following.

    Example

    CMakeLists.txt
    project(ExampleProject LANGUAGES CXX)\n\noption(EXAMPLE_USE_EXTERNAL_JSON \"Use an external JSON library\" OFF)\n\nadd_subdirectory(thirdparty)\n\nadd_executable(example example.cpp)\n\n# Note that the namespaced target will always be available regardless of the import method\ntarget_link_libraries(example PRIVATE nlohmann_json::nlohmann_json)\n
    thirdparty/CMakeLists.txt
    if(EXAMPLE_USE_EXTERNAL_JSON)\n    find_package(nlohmann_json 3.11.3 REQUIRED)\nelse()\n    set(JSON_BuildTests OFF CACHE INTERNAL \"\")\n    add_subdirectory(nlohmann_json)\nendif()\n

    thirdparty/nlohmann_json is then a complete copy of this source tree.

    "},{"location":"integration/cmake/#fetchcontent","title":"FetchContent","text":"

    Since CMake v3.11, FetchContent can be used to automatically download a release as a dependency at configure type.

    Example

    CMakeLists.txt
    cmake_minimum_required(VERSION 3.11)\nproject(ExampleProject LANGUAGES CXX)\n\ninclude(FetchContent)\n\nFetchContent_Declare(json URL https://github.com/nlohmann/json/releases/download/v3.11.3/json.tar.xz)\nFetchContent_MakeAvailable(json)\n\nadd_executable(example example.cpp)\ntarget_link_libraries(example PRIVATE nlohmann_json::nlohmann_json)\n

    Note

    It is recommended to use the URL approach described above which is supported as of version 3.10.0. It is also possible to pass the Git repository like

    FetchContent_Declare(json\n    GIT_REPOSITORY https://github.com/nlohmann/json\n    GIT_TAG v3.11.3\n)\n

    However, the repository https://github.com/nlohmann/json download size is quite large.

    "},{"location":"integration/cmake/#cmake-options","title":"CMake Options","text":""},{"location":"integration/cmake/#json_buildtests","title":"JSON_BuildTests","text":"

    Build the unit tests when BUILD_TESTING is enabled. This option is ON by default if the library's CMake project is the top project. That is, when integrating the library as described above, the test suite is not built unless explicitly switched on with this option.

    "},{"location":"integration/cmake/#json_ci","title":"JSON_CI","text":"

    Enable CI build targets. The exact targets are used during the several CI steps and are subject to change without notice. This option is OFF by default.

    "},{"location":"integration/cmake/#json_diagnostics","title":"JSON_Diagnostics","text":"

    Enable extended diagnostic messages by defining macro JSON_DIAGNOSTICS. This option is OFF by default.

    "},{"location":"integration/cmake/#json_diagnostic_positions","title":"JSON_Diagnostic_Positions","text":"

    Enable position diagnostics by defining macro JSON_DIAGNOSTIC_POSITIONS. This option is OFF by default.

    "},{"location":"integration/cmake/#json_disableenumserialization","title":"JSON_DisableEnumSerialization","text":"

    Disable default enum serialization by defining the macro JSON_DISABLE_ENUM_SERIALIZATION. This option is OFF by default.

    "},{"location":"integration/cmake/#json_fasttests","title":"JSON_FastTests","text":"

    Skip expensive/slow test suites. This option is OFF by default. Depends on JSON_BuildTests.

    "},{"location":"integration/cmake/#json_globaludls","title":"JSON_GlobalUDLs","text":"

    Place user-defined string literals in the global namespace by defining the macro JSON_USE_GLOBAL_UDLS. This option is OFF by default.

    "},{"location":"integration/cmake/#json_implicitconversions","title":"JSON_ImplicitConversions","text":"

    Enable implicit conversions by defining macro JSON_USE_IMPLICIT_CONVERSIONS. This option is ON by default.

    "},{"location":"integration/cmake/#json_install","title":"JSON_Install","text":"

    Install CMake targets during install step. This option is ON by default if the library's CMake project is the top project.

    "},{"location":"integration/cmake/#json_legacydiscardedvaluecomparison","title":"JSON_LegacyDiscardedValueComparison","text":"

    Enable the (incorrect) legacy comparison behavior of discarded JSON values by defining macro JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON. This option is OFF by default.

    "},{"location":"integration/cmake/#json_multipleheaders","title":"JSON_MultipleHeaders","text":"

    Use non-amalgamated version of the library. This option is OFF by default.

    "},{"location":"integration/cmake/#json_systeminclude","title":"JSON_SystemInclude","text":"

    Treat the library headers like system headers (i.e., adding SYSTEM to the target_include_directories call) to checks for this library by tools like Clang-Tidy. This option is OFF by default.

    "},{"location":"integration/cmake/#json_valgrind","title":"JSON_Valgrind","text":"

    Execute test suite with Valgrind. This option is OFF by default. Depends on JSON_BuildTests.

    "},{"location":"integration/migration_guide/","title":"Migration Guide","text":"

    This page collects some guidelines on how to future-proof your code for future versions of this library.

    "},{"location":"integration/migration_guide/#replace-deprecated-functions","title":"Replace deprecated functions","text":"

    The following functions have been deprecated and will be removed in the next major version (i.e., 4.0.0). All deprecations are annotated with HEDLEY_DEPRECATED_FOR to report which function to use instead.

    "},{"location":"integration/migration_guide/#parsing","title":"Parsing","text":"
    • Function friend std::istream& operator<<(basic_json&, std::istream&) is deprecated since 3.0.0. Please use friend std::istream& operator>>(std::istream&, basic_json&) instead.

      DeprecatedFuture-proof
      nlohmann::json j;\nstd::stringstream ss(\"[1,2,3]\");\nj << ss;\n
      nlohmann::json j;\nstd::stringstream ss(\"[1,2,3]\");\nss >> j;\n
    • Passing iterator pairs or pointer/length pairs to parsing functions (parse, accept, sax_parse, from_cbor, from_msgpack, from_ubjson, and from_bson via initializer lists is deprecated since 3.8.0. Instead, pass two iterators; for instance, call from_cbor(ptr, ptr+len) instead of from_cbor({ptr, len}).

      DeprecatedFuture-proof
      const char* s = \"[1,2,3]\";\nbool ok = nlohmann::json::accept({s, s + std::strlen(s)});\n
      const char* s = \"[1,2,3]\";\nbool ok = nlohmann::json::accept(s, s + std::strlen(s));\n
    "},{"location":"integration/migration_guide/#json-pointers","title":"JSON Pointers","text":"
    • Comparing JSON Pointers with strings via operator== and operator!= is deprecated since 3.11.2. To compare a json_pointer p with a string s, convert s to a json_pointer first and use json_pointer::operator== or json_pointer::operator!=.

      DeprecatedFuture-proof
      nlohmann::json::json_pointer lhs(\"/foo/bar/1\");\nassert(lhs == \"/foo/bar/1\");\n
      nlohmann::json::json_pointer lhs(\"/foo/bar/1\");\nassert(lhs == nlohmann::json::json_pointer(\"/foo/bar/1\"));\n
    • The implicit conversion from JSON Pointers to string (json_pointer::operator string_t) is deprecated since 3.11.0. Use json_pointer::to_string instead.

      DeprecatedFuture-proof
      nlohmann::json::json_pointer ptr(\"/foo/bar/1\");\nstd::string s = ptr;\n
      nlohmann::json::json_pointer ptr(\"/foo/bar/1\");\nstd::string s = ptr.to_string();\n
    • Passing a basic_json specialization as template parameter RefStringType to json_pointer is deprecated since 3.11.0. The string type can now be directly provided.

      DeprecatedFuture-proof
      using my_json = nlohmann::basic_json<std::map, std::vector, my_string_type>;\nnlohmann::json_pointer<my_json> ptr(\"/foo/bar/1\");\n
      nlohmann::json_pointer<my_string_type> ptr(\"/foo/bar/1\");\n

      Thereby, nlohmann::my_json::json_pointer is an alias for nlohmann::json_pointer<my_string_type> and is always an alias to the json_pointer with the appropriate string type for all specializations of basic_json.

    "},{"location":"integration/migration_guide/#miscellaneous-functions","title":"Miscellaneous functions","text":"
    • The function iterator_wrapper is deprecated since 3.1.0. Please use the member function items instead.

      DeprecatedFuture-proof
      for (auto &x : nlohmann::json::iterator_wrapper(j))\n{\n    std::cout << x.key() << \":\" << x.value() << std::endl;\n}\n
      for (auto &x : j.items())\n{\n    std::cout << x.key() << \":\" << x.value() << std::endl;\n}\n
    • Function friend std::ostream& operator>>(const basic_json&, std::ostream&) is deprecated since 3.0.0. Please use friend operator<<(std::ostream&, const basic_json&) instead.

      DeprecatedFuture-proof
      j >> std::cout;\n
      std::cout << j;\n
    • The legacy comparison behavior for discarded values is deprecated since 3.11.0. It is already disabled by default and can still be enabled by defining JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON to 1.

      DeprecatedFuture-proof
      #define JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON 1\n#include <nlohmann/json.hpp>\n
      #include <nlohmann/json.hpp>\n
    "},{"location":"integration/migration_guide/#replace-implicit-conversions","title":"Replace implicit conversions","text":"

    Implicit conversions via operator ValueType will be switched off by default in the next major release of the library.

    You can prepare existing code by already defining JSON_USE_IMPLICIT_CONVERSIONS to 0 and replace any implicit conversions with calls to get, get_to, get_ref, or get_ptr.

    DeprecatedFuture-proofFuture-proof (alternative)
    nlohmann::json j = \"Hello, world!\";\nstd::string s = j;\n
    nlohmann::json j = \"Hello, world!\";\nauto s = j.template get<std::string>();\n
    nlohmann::json j = \"Hello, world!\";\nstd::string s;\nj.get_to(s);\n

    You can prepare existing code by already defining JSON_USE_IMPLICIT_CONVERSIONS to 0 and replace any implicit conversions with calls to get.

    "},{"location":"integration/migration_guide/#import-namespace-literals-for-udls","title":"Import namespace literals for UDLs","text":"

    The user-defined string literals operator\"\"_json and operator\"\"_json_pointer will be removed from the global namespace in the next major release of the library.

    DeprecatedFuture-proof
    nlohmann::json j = \"[1,2,3]\"_json;\n
    using namespace nlohmann::literals;\nnlohmann::json j = \"[1,2,3]\"_json;\n

    To prepare existing code, define JSON_USE_GLOBAL_UDLS to 0 and bring the string literals into scope where needed.

    "},{"location":"integration/migration_guide/#do-not-hard-code-the-complete-library-namespace","title":"Do not hard-code the complete library namespace","text":"

    The nlohmann namespace contains a sub-namespace to avoid problems when different versions or configurations of the library are used in the same project. Always use nlohmann as namespace or, when the exact version and configuration is relevant, use macro NLOHMANN_JSON_NAMESPACE to denote the namespace.

    DangerousFuture-proofFuture-proof (alternative)
    void to_json(nlohmann::json_abi_v3_11_2::json& j, const person& p)\n{\n    j[\"age\"] = p.age;\n}\n
    void to_json(nlohmann::json& j, const person& p)\n{\n    j[\"age\"] = p.age;\n}\n
    void to_json(NLOHMANN_JSON_NAMESPACE::json& j, const person& p)\n{\n    j[\"age\"] = p.age;\n}\n
    "},{"location":"integration/migration_guide/#do-not-use-the-details-namespace","title":"Do not use the details namespace","text":"

    The details namespace is not part of the public API of the library and can change in any version without announcement. Do not rely on any function or type in the details namespace.

    "},{"location":"integration/package_managers/","title":"Package Managers","text":"

    Homebrew nlohmann-json Meson nlohmann_json Bazel nlohmann_json Conan nlohmann_json Spack nlohmann-json Hunter nlohmann_json vcpkg nlohmann-json cget nlohmann/json Swift Package Manager nlohmann/json NuGet nlohmann.json Conda nlohmann_json MacPorts nlohmann-json CPM.cmake gh:nlohmann/json xmake nlohmann_json

    "},{"location":"integration/package_managers/#running-example","title":"Running example","text":"

    Throughout this page, we will describe how to compile the example file example.cpp below.

    #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n

    When executed, this program should create output similar to

    {\n    \"compiler\": {\n        \"c++\": \"201103\",\n        \"family\": \"gcc\",\n        \"version\": \"12.3.0\"\n    },\n    \"copyright\": \"(C) 2013-2022 Niels Lohmann\",\n    \"name\": \"JSON for Modern C++\",\n    \"platform\": \"apple\",\n    \"url\": \"https://github.com/nlohmann/json\",\n    \"version\": {\n        \"major\": 3,\n        \"minor\": 11,\n        \"patch\": 3,\n        \"string\": \"3.11.3\"\n    }\n}\n
    "},{"location":"integration/package_managers/#homebrew","title":"Homebrew","text":"

    Summary

    formula: nlohmann-json

    • Availalbe versions: current version and development version (with --HEAD parameter)
    • The formula is updated with every release.
    • Maintainer: Niels Lohmann
    • File issues at the Homebrew issue tracker
    • Homebrew website

    If you are using Homebrew, you can install the library with

    brew install nlohmann-json\n

    The header can be used directly in your code or via CMake.

    Example: Raw compilation
    1. Create the following file:

      example.cpp
      #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
    2. Install the package:

      brew install nlohmann-json\n
    3. Compile the code and pass the Homebrew prefix to the include path such that the library can be found:

      c++ example.cpp -I$(brew --prefix nlohmann-json)/include -std=c++11 -o example\n
    Example: CMake
    1. Create the following files:

      example.cpp
      #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
      CMakeLists.txt
      cmake_minimum_required(VERSION 3.15)\nproject(json_example)\n\nfind_package(nlohmann_json CONFIG REQUIRED)\n\nadd_executable(json_example example.cpp)\ntarget_link_libraries(json_example PRIVATE nlohmann_json::nlohmann_json)\n
    2. Install the package:

      brew install nlohmann-json\n
    3. Compile the code and pass the Homebrew prefix to CMake to find installed packages via find_package:

      CMAKE_PREFIX_PATH=$(brew --prefix) cmake -S . -B build\ncmake --build build\n
    "},{"location":"integration/package_managers/#meson","title":"Meson","text":"

    Summary

    wrap: nlohmann_json

    • Availalbe versions: current version and select older versions (see WrapDB)
    • The package is update automatically from file meson.build.
    • File issues at the library issue tracker
    • Meson website

    If you are using the Meson Build System, add this source tree as a meson subproject. You may also use the include.zip published in this project's Releases to reduce the size of the vendored source tree. Alternatively, you can get a wrap file by downloading it from Meson WrapDB, or use

    meson wrap install nlohmann_json\n

    Please see the Meson project for any issues regarding the packaging.

    The provided meson.build can also be used as an alternative to CMake for installing nlohmann_json system-wide in which case a pkg-config file is installed. To use it, have your build system require the nlohmann_json pkg-config dependency. In Meson, it is preferred to use the dependency() object with a subproject fallback, rather than using the subproject directly.

    Example: Wrap
    1. Create the following files:

      meson.build
      project('json_example', 'cpp',\n  version: '1.0',\n  default_options: ['cpp_std=c++11']\n)\n\ndependency_json = dependency('nlohmann_json', required: true)\n\nexecutable('json_example',\n  sources: ['example.cpp'],\n  dependencies: [dependency_json],\n  install: true\n)\n
      example.cpp
      #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
    2. Use the Meson WrapDB to fetch the nlohmann/json wrap:

      mkdir subprojects\nmeson wrap install nlohmann_json\n
    3. Build:

      meson setup build\nmeson compile -C build\n
    "},{"location":"integration/package_managers/#bazel","title":"Bazel","text":"

    Summary

    use bazel_dep, git_override, or local_path_override

    • Any version, that is available via Bazel Central Registry
    • File issues at the library issue tracker
    • Bazel website

    This repository provides a Bazel MODULE.bazel and a corresponding BUILD.bazel file. Therefore, this repository can be referenced within a MODULE.bazel by rules such as archive_override, git_override, or local_path_override. To use the library you need to depend on the target @nlohmann_json//:json (i.e., via deps attribute).

    Example
    1. Create the following files:

      BUILD
      cc_binary(\n    name = \"main\",\n    srcs = [\"example.cpp\"],\n    deps = [\"@nlohmann_json//:json\"],\n)\n
      WORKSPACE
      bazel_dep(name = \"nlohmann_json\", version = \"3.11.3.bcr.1\")\n
      example.cpp
      #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
    2. Build and run:

      bazel build //:main\nbazel run //:main\n
    "},{"location":"integration/package_managers/#conan","title":"Conan","text":"

    Summary

    recipe: nlohmann_json

    • Availalbe versions: current version and older versions (see Conan Center)
    • The package is update automatically via this recipe.
    • File issues at the Conan Center issue tracker
    • Conan website

    If you are using Conan to manage your dependencies, merely add nlohmann_json/x.y.z to your conanfile's requires, where x.y.z is the release version you want to use.

    Example
    1. Create the following files:

      Conanfile.txt
      [requires]\nnlohmann_json/3.11.3\n\n[generators]\nCMakeToolchain\nCMakeDeps\n
      CMakeLists.txt
      cmake_minimum_required(VERSION 3.15)\nproject(json_example)\n\nfind_package(nlohmann_json REQUIRED)\n\nadd_executable(json_example example.cpp)\ntarget_link_libraries(json_example PRIVATE nlohmann_json::nlohmann_json)\n
      example.cpp
      #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
    2. Call Conan:

      conan install . --output-folder=build --build=missing\n
    3. Build:

      cmake -S . -B build -DCMAKE_TOOLCHAIN_FILE=\"conan_toolchain.cmake\" -DCMAKE_BUILD_TYPE=Release\ncmake --build build\n
    "},{"location":"integration/package_managers/#spack","title":"Spack","text":"

    Summary

    package: nlohmann-json

    • Availalbe versions: current version and older versions (see Spack package)
    • The package is updated with every release.
    • Maintainer: Axel Huebl
    • File issues at the Spack issue tracker
    • Spack website

    If you are using Spack to manage your dependencies, you can use the nlohmann-json package via

    spack install nlohmann-json\n

    Please see the Spack project for any issues regarding the packaging.

    Example
    1. Create the following files:

      CMakeLists.txt
      cmake_minimum_required(VERSION 3.15)\nproject(json_example)\n\nfind_package(nlohmann_json REQUIRED)\n\nadd_executable(json_example example.cpp)\ntarget_link_libraries(json_example PRIVATE nlohmann_json::nlohmann_json)\n
      example.cpp
      #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
    2. Install the library:

      spack install nlohmann-json\n
    3. Load the environment for your Spack-installed packages:

      spack load nlohmann-json\n
    4. Build the project with CMake:

      cmake -S . -B build -DCMAKE_PREFIX_PATH=$(spack location -i nlohmann-json)\ncmake --build build\n
    "},{"location":"integration/package_managers/#hunter","title":"Hunter","text":"

    Summary

    package: nlohmann_json

    • Availalbe versions: current version and older versions (see Hunter package)
    • The package is updated with every release.
    • File issues at the Hunter issue tracker
    • Hunter website

    If you are using Hunter on your project for external dependencies, then you can use the nlohmann_json package via

    hunter_add_package(nlohmann_json)\n

    Please see the Hunter project for any issues regarding the packaging.

    Example
    1. Create the following files:

      CMakeLists.txt
      cmake_minimum_required(VERSION 3.15)\n\ninclude(\"cmake/HunterGate.cmake\")\nHunterGate(\n    URL \"https://github.com/cpp-pm/hunter/archive/v0.23.297.tar.gz\"\n    SHA1 \"3319fe6a3b08090df7df98dee75134d68e2ef5a3\"\n)\n\nproject(json_example)\n\nhunter_add_package(nlohmann_json)\nfind_package(nlohmann_json CONFIG REQUIRED)\n\nadd_executable(json_example example.cpp)\ntarget_link_libraries(json_example PRIVATE nlohmann_json::nlohmann_json)\n
      example.cpp
      #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
    2. Download required files

      mkdir cmake\nwget https://raw.githubusercontent.com/cpp-pm/gate/master/cmake/HunterGate.cmake -O cmake/HunterGate.cmake\n
    3. Build the project with CMake:

      cmake -S . -B build\ncmake --build build\n
    "},{"location":"integration/package_managers/#vcpkg","title":"vcpkg","text":"

    Summary

    package: nlohmann-json

    • Availalbe versions: current version
    • The package is updated with every release.
    • File issues at the vcpkg issue tracker
    • vcpkg website

    If you are using vcpkg on your project for external dependencies, then you can install the nlohmann-json package with

    vcpkg install nlohmann-json\n

    and follow the then displayed descriptions. Please see the vcpkg project for any issues regarding the packaging.

    Example
    1. Create the following files:

      CMakeLists.txt
      cmake_minimum_required(VERSION 3.15)\nproject(json_example)\n\nfind_package(nlohmann_json CONFIG REQUIRED)\n\nadd_executable(json_example example.cpp)\ntarget_link_libraries(json_example PRIVATE nlohmann_json::nlohmann_json)\n
      example.cpp
      #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
    2. Install package:

      vcpkg install nlohmann-json\n
    3. Build:

      cmake -S . -B build -DCMAKE_TOOLCHAIN_FILE=$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake\ncmake --build build\n
    "},{"location":"integration/package_managers/#cget","title":"cget","text":"

    Summary

    package: nlohmann/json

    • Availalbe versions: current version and older versions
    • The package is updated with every release.
    • File issues at the cget issue tracker
    • cget website

    If you are using cget, you can install the latest master version with

    cget install nlohmann/json\n

    A specific version can be installed with cget install nlohmann/json@v3.11.3. Also, the multiple header version can be installed by adding the -DJSON_MultipleHeaders=ON flag (i.e., cget install nlohmann/json -DJSON_MultipleHeaders=ON).

    Example
    1. Create the following files:

      CMakeLists.txt
      cmake_minimum_required(VERSION 3.15)\nproject(json_example)\n\nfind_package(nlohmann_json CONFIG REQUIRED)\n\nadd_executable(json_example example.cpp)\ntarget_link_libraries(json_example PRIVATE nlohmann_json::nlohmann_json)\n
      example.cpp
      #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
    2. Initialize cget

      cget init\n
    3. Install the library

      cget install nlohmann/json\n
    4. Build

      cmake -S . -B build -DCMAKE_TOOLCHAIN_FILE=cget/cget/cget.cmake\ncmake --build build\n
    "},{"location":"integration/package_managers/#swift-package-manager","title":"Swift Package Manager","text":"

    Summary

    package: nlohmann/json

    • Availalbe versions: current version and older versions
    • The package is updated with every release.
    • File issues at the library issue tracker
    • Xcode documentation
    "},{"location":"integration/package_managers/#nuget","title":"NuGet","text":"

    Summary

    package: nlohmann.json

    • Availalbe versions: current and previous versions
    • The package is updated with every release.
    • Maintainer: Hani Kaabi
    • File issues at the maintainer's issue tracker
    • NuGet website

    If you are using NuGet, you can use the package nlohmann.json with

    dotnet add package nlohmann.json\n
    Example

    Probably the easiest way to use NuGet packages is through Visual Studio graphical interface. Just right-click on a project (any C++ project would do) in \u201cSolution Explorer\u201d and select \u201cManage NuGet Packages\u2026\u201d

    Now you can click on \u201cBrowse\u201d tab and find the package you like to install.

    Most of the packages in NuGet gallery are .NET packages and would not be useful in a C++ project. Microsoft recommends adding \u201cnative\u201d and \u201cnativepackage\u201d tags to C++ NuGet packages to distinguish them, but even adding \u201cnative\u201d to search query would still show many .NET-only packages in the list.

    Nevertheless, after finding the package you want, click on \u201cInstall\u201d button and accept confirmation dialogs. After the package is successfully added to the projects, you should be able to build and execute the project without the need for making any more changes to build settings.

    Note

    A few notes:

    • NuGet packages are installed per project and not system-wide. The header and binaries for the package are only available to the project it is added to, and not other projects (obviously unless we add the package to those projects as well)
    • One of the many great things about your elegant work is that it is a header-only library, which makes deployment very straightforward. In case of libraries which need binary deployment (.lib, .dll and .pdb for debug info) the different binaries for each supported compiler version must be added to the NuGet package. Some library creators cram binary versions for all supported Visual C++ compiler versions in the same package, so a single package will support all compilers. Some others create a different package for each compiler version (and you usually see things like \u201cv140\u201d or \u201cvc141\u201d in package name to clarify which VC++ compiler this package supports).
    • Packages can have dependency to other packages, and in this case, NuGet will install all dependencies as well as the requested package recursively.

    What happens behind the scenes

    After you add a NuGet package, three changes occur in the project source directory. Of course, we could make these changes manually instead of using GUI:

    1. A packages.config file will be created (or updated to include the package name if one such file already exists). This file contains a list of the packages required by this project (name and minimum version) and must be added to the project source code repository, so if you move the source code to a new machine, MSBuild/NuGet knows which packages it has to restore (which it does automatically before each build).

      <?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"nlohmann.json\" version=\"3.5.0\" targetFramework=\"native\" />\n</packages>\n
    2. A packages folder which contains actual files in the packages (these are header and binary files required for a successful build, plus a few metadata files). In case of this library for example, it contains json.hpp:

      Note

      This directory should not be added to the project source code repository, as it will be restored before each build by MSBuild/NuGet. If you go ahead and delete this folder, then build the project again, it will magically re-appear!

    3. Project MSBuild makefile (which for Visual C++ projects has a .vcxproj extension) will be updated to include settings from the package.

      The important bit for us here is line 170, which tells MSBuild to import settings from packages\\nlohmann.json.3.5.0\\build\\native\\nlohmann.json.targets file. This is a file the package creator created and added to the package (you can see it is one of the two files I created in this repository, the other just contains package attributes like name and version number). What does it contain?

      For our header-only repository, the only setting we need is to add our include directory to the list of AdditionalIncludeDirectories:

      <?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n    <ItemDefinitionGroup>\n        <ClCompile>\n            <AdditionalIncludeDirectories>$(MSBuildThisFileDirectory)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n        </ClCompile>\n    </ItemDefinitionGroup>\n</Project>\n

      For libraries with binary files, we will need to add .lib files to linker inputs and add settings to copy .dll and other redistributable files to output directory, if needed.

      There are other changes to the makefile as well:

      • Lines 165-167 add the packages.config as one of project files (so it is shown in Solution Explorer tree view). It is added as None (no build action) and removing it wouldn\u2019t affect build.

      • Lines 172-177 check to ensure the required packages are present. This will display a build error if package directory is empty (for example when NuGet cannot restore packages because Internet connection is down). Again, if you omit this section, the only change in build would be a more cryptic error message if build fails.

      Note

      Changes to .vcxproj makefile should also be added to project source code repository.

    As you can see, the mechanism NuGet uses to modify project settings is through MSBuild makefiles, so using NuGet with other build systems and compilers (like CMake) as a dependency manager is either impossible or more problematic than useful.

    Please refer to this extensive description for more information.

    "},{"location":"integration/package_managers/#conda","title":"Conda","text":"

    Summary

    package: nlohmann_json

    • Availalbe versions: current and previous versions
    • The package is updated with every release.
    • File issues at the feedstock's issue tracker
    • Conda documentation

    If you are using conda, you can use the package nlohmann_json from conda-forge executing

    conda install -c conda-forge nlohmann_json\n
    Example
    1. Create the following file:

      example.cpp
      #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
    2. Create and activate an anvironment \"json`:

      conda create -n json\nconda activate json\n
    3. Install the package:

      conda install -c conda-forge nlohmann_json\n
    4. Build the code:

      g++ -std=c++11 -I$(conda info --base)/envs/json/include example.cpp -o example\n
    "},{"location":"integration/package_managers/#msys2","title":"MSYS2","text":"

    If you are using MSYS2, you can use the mingw-w64-nlohmann-json package, type pacman -S mingw-w64-i686-nlohmann-json or pacman -S mingw-w64-x86_64-nlohmann-json for installation. Please file issues here if you experience problems with the packages.

    The package is updated automatically.

    "},{"location":"integration/package_managers/#macports","title":"MacPorts","text":"

    Summary

    port: nlohmann-json

    • Availalbe versions: current version
    • The port is updated with every release.
    • File issues at the MacPorts issue tracker
    • MacPorts website

    If you are using MacPorts, execute

    sudo port install nlohmann-json\n

    to install the nlohmann-json package.

    Example: Raw compilation
    1. Create the following file:

      example.cpp
      #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
    2. Install the package:

      sudo port install nlohmann-json\n
    3. Compile the code and pass the Homebrew prefix to the include path such that the library can be found:

      c++ example.cpp -I/opt/local/include -std=c++11 -o example\n
    Example: CMake
    1. Create the following files:

      example.cpp
      #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
      CMakeLists.txt
      cmake_minimum_required(VERSION 3.15)\nproject(json_example)\n\nfind_package(nlohmann_json CONFIG REQUIRED)\n\nadd_executable(json_example example.cpp)\ntarget_link_libraries(json_example PRIVATE nlohmann_json::nlohmann_json)\n
    2. Install the package:

      sudo port install nlohmann-json\n
    3. Compile the code:

      cmake -S . -B build\ncmake --build build\n
    "},{"location":"integration/package_managers/#build2","title":"build2","text":"

    If you are using build2, you can use the nlohmann-json package from the public repository http://cppget.org or directly from the package's sources repository. In your project's manifest file, add depends: nlohmann-json (probably with some version constraints). If you are not familiar with using dependencies in build2, please read this introduction. Please file issues here if you experience problems with the packages.

    The package is updated automatically.

    bdep new -t exe -l c++\n
    "},{"location":"integration/package_managers/#cpmcmake","title":"CPM.cmake","text":"

    Summary

    package: gh:nlohmann/json

    • Availalbe versions: current and previous versions
    • The package is updated with every release.
    • File issues at the CPM.cmake issue tracker
    • CPM.cmake website

    If you are using CPM.cmake, add the CPM.cmake script and the following snippet to your CMake project:

    CPMAddPackage(\"gh:nlohmann/json@3.11.3\")\n
    Example
    1. Create the following files:

      example.cpp
      #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
      CMakeLists.txt
      cmake_minimum_required(VERSION 3.15)\nproject(json_example)\n\ninclude(${CMAKE_SOURCE_DIR}/cmake/CPM.cmake)\n\nCPMAddPackage(\"gh:nlohmann/json@3.11.3\")\n\nadd_executable(json_example example.cpp)\ntarget_link_libraries(json_example PRIVATE nlohmann_json::nlohmann_json)\n
    2. Download CPM.cmake

      mkdir -p cmake\nwget -O cmake/CPM.cmake https://github.com/cpm-cmake/CPM.cmake/releases/latest/download/get_cpm.cmake\n
    3. Build

      cmake -S . -B build\ncmake --build build\n
    "},{"location":"integration/package_managers/#xmake","title":"xmake","text":"

    Summary

    package: nlohmann_json

    • Availalbe versions: current and previous versions
    • The package is updated with every release.
    • File issues at the xmake issue tracker
    • xmake website
    Example
    1. Create the following files:

      example.cpp
      #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
      xmake.lua
      add_requires(\"nlohmann_json\")\n\nadd_rules(\"mode.debug\", \"mode.release\")\ntarget(\"xm\")\n    set_kind(\"binary\")\n    add_files(\"example.cpp\")\n    add_packages(\"nlohmann_json\")\n    set_languages(\"cxx11\")\n
    2. Build

      xmake\n
    3. Run

      xmake run\n
    "},{"location":"integration/package_managers/#other-package-managers","title":"Other package managers","text":"

    The library is also contained in many other package repositories:

    Package version overview

    "},{"location":"integration/package_managers/#buckaroo","title":"Buckaroo","text":"

    If you are using Buckaroo, you can install this library's module with buckaroo add github.com/buckaroo-pm/nlohmann-json. There is a demo repo here.

    Warning

    The module is outdated as the respective repository has not been updated in years.

    "},{"location":"integration/package_managers/#cocoapods","title":"CocoaPods","text":"

    If you are using CocoaPods, you can use the library by adding pod \"nlohmann_json\", '~>3.1.2' to your podfile (see an example). Please file issues here.

    Warning

    The module is outdated as the respective pod has not been updated in years.

    "},{"location":"integration/pkg-config/","title":"Pkg-config","text":"

    If you are using bare Makefiles, you can use pkg-config to generate the include flags that point to where the library is installed:

    pkg-config nlohmann_json --cflags\n

    Users of the Meson build system will also be able to use a system-wide library, which will be found by pkg-config:

    json = dependency('nlohmann_json', required: true)\n
    "}]} \ No newline at end of file +{"config":{"lang":["en"],"separator":"[\\s\\-\\.]","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"JSON for Modern C++","text":""},{"location":"api/json/","title":"nlohmann::json","text":"
    using json = basic_json<>;\n

    This type is the default specialization of the basic_json class which uses the standard template types.

    "},{"location":"api/json/#examples","title":"Examples","text":"Example

    The example below demonstrates how to use the type nlohmann::json.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object\n    json j =\n    {\n        {\"pi\", 3.141},\n        {\"happy\", true},\n        {\"name\", \"Niels\"},\n        {\"nothing\", nullptr},\n        {\n            \"answer\", {\n                {\"everything\", 42}\n            }\n        },\n        {\"list\", {1, 0, 2}},\n        {\n            \"object\", {\n                {\"currency\", \"USD\"},\n                {\"value\", 42.99}\n            }\n        }\n    };\n\n    // add new values\n    j[\"new\"][\"key\"][\"value\"] = {\"another\", \"list\"};\n\n    // count elements\n    auto s = j.size();\n    j[\"size\"] = s;\n\n    // pretty print with indent of 4 spaces\n    std::cout << std::setw(4) << j << '\\n';\n}\n

    Output:

    {\n    \"answer\": {\n        \"everything\": 42\n    },\n    \"happy\": true,\n    \"list\": [\n        1,\n        0,\n        2\n    ],\n    \"name\": \"Niels\",\n    \"new\": {\n        \"key\": {\n            \"value\": [\n                \"another\",\n                \"list\"\n            ]\n        }\n    },\n    \"nothing\": null,\n    \"object\": {\n        \"currency\": \"USD\",\n        \"value\": 42.99\n    },\n    \"pi\": 3.141,\n    \"size\": 8\n}\n
    "},{"location":"api/json/#version-history","title":"Version history","text":"

    Since version 1.0.0.

    "},{"location":"api/operator_gtgt/","title":"nlohmann::operator>>(basic_json)","text":"
    std::istream& operator>>(std::istream& i, basic_json& j);\n

    Deserializes an input stream to a JSON value.

    "},{"location":"api/operator_gtgt/#parameters","title":"Parameters","text":"i (in, out) input stream to read a serialized JSON value from j (in, out) JSON value to write the deserialized input to"},{"location":"api/operator_gtgt/#return-value","title":"Return value","text":"

    the stream i

    "},{"location":"api/operator_gtgt/#exceptions","title":"Exceptions","text":"
    • Throws parse_error.101 in case of an unexpected token.
    • Throws parse_error.102 if to_unicode fails or surrogate error.
    • Throws parse_error.103 if to_unicode fails.
    "},{"location":"api/operator_gtgt/#complexity","title":"Complexity","text":"

    Linear in the length of the input. The parser is a predictive LL(1) parser.

    "},{"location":"api/operator_gtgt/#notes","title":"Notes","text":"

    A UTF-8 byte order mark is silently ignored.

    Deprecation

    This function replaces function std::istream& operator<<(basic_json& j, std::istream& i) which has been deprecated in version 3.0.0. It will be removed in version 4.0.0. Please replace calls like j << i; with i >> j;.

    "},{"location":"api/operator_gtgt/#examples","title":"Examples","text":"Example

    The example below shows how a JSON value is constructed by reading a serialization from a stream.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create stream with serialized JSON\n    std::stringstream ss;\n    ss << R\"({\n        \"number\": 23,\n        \"string\": \"Hello, world!\",\n        \"array\": [1, 2, 3, 4, 5],\n        \"boolean\": false,\n        \"null\": null\n    })\";\n\n    // create JSON value and read the serialization from the stream\n    json j;\n    ss >> j;\n\n    // serialize JSON\n    std::cout << std::setw(2) << j << '\\n';\n}\n

    Output:

    {\n  \"array\": [\n    1,\n    2,\n    3,\n    4,\n    5\n  ],\n  \"boolean\": false,\n  \"null\": null,\n  \"number\": 23,\n  \"string\": \"Hello, world!\"\n}\n
    "},{"location":"api/operator_gtgt/#see-also","title":"See also","text":"
    • accept - check if the input is valid JSON
    • parse - deserialize from a compatible input
    "},{"location":"api/operator_gtgt/#version-history","title":"Version history","text":"
    • Added in version 1.0.0. Deprecated in version 3.0.0.
    "},{"location":"api/operator_literal_json/","title":"nlohmann::operator\"\"_json","text":"
    json operator \"\"_json(const char* s, std::size_t n);\n

    This operator implements a user-defined string literal for JSON objects. It can be used by adding _json to a string literal and returns a json object if no parse error occurred.

    It is recommended to bring the operator into scope using any of the following lines:

    using nlohmann::literals::operator \"\"_json;\nusing namespace nlohmann::literals;\nusing namespace nlohmann::json_literals;\nusing namespace nlohmann::literals::json_literals;\nusing namespace nlohmann;\n

    This is suggested to ease migration to the next major version release of the library. See JSON_USE_GLOBAL_UDLS for details.

    "},{"location":"api/operator_literal_json/#parameters","title":"Parameters","text":"s (in) a string representation of a JSON object n (in) length of string s"},{"location":"api/operator_literal_json/#return-value","title":"Return value","text":"

    json value parsed from s

    "},{"location":"api/operator_literal_json/#exceptions","title":"Exceptions","text":"

    The function can throw anything that parse(s, s+n) would throw.

    "},{"location":"api/operator_literal_json/#complexity","title":"Complexity","text":"

    Linear.

    "},{"location":"api/operator_literal_json/#examples","title":"Examples","text":"Example

    The following code shows how to create JSON values from string literals.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    json j = R\"( {\"hello\": \"world\", \"answer\": 42} )\"_json;\n\n    std::cout << std::setw(2) << j << '\\n';\n}\n

    Output:

    {\n  \"answer\": 42,\n  \"hello\": \"world\"\n}\n
    "},{"location":"api/operator_literal_json/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Moved to namespace nlohmann::literals::json_literals in 3.11.0.
    "},{"location":"api/operator_literal_json_pointer/","title":"nlohmann::operator\"\"_json_pointer","text":"
    json_pointer operator \"\"_json_pointer(const char* s, std::size_t n);\n

    This operator implements a user-defined string literal for JSON Pointers. It can be used by adding _json_pointer to a string literal and returns a json_pointer object if no parse error occurred.

    It is recommended to bring the operator into scope using any of the following lines:

    using nlohmann::literals::operator \"\"_json_pointer;\nusing namespace nlohmann::literals;\nusing namespace nlohmann::json_literals;\nusing namespace nlohmann::literals::json_literals;\nusing namespace nlohmann;\n
    This is suggested to ease migration to the next major version release of the library. See JSON_USE_GLOBAL_UDLS for details.

    "},{"location":"api/operator_literal_json_pointer/#parameters","title":"Parameters","text":"s (in) a string representation of a JSON Pointer n (in) length of string s"},{"location":"api/operator_literal_json_pointer/#return-value","title":"Return value","text":"

    json_pointer value parsed from s

    "},{"location":"api/operator_literal_json_pointer/#exceptions","title":"Exceptions","text":"

    The function can throw anything that json_pointer::json_pointer would throw.

    "},{"location":"api/operator_literal_json_pointer/#complexity","title":"Complexity","text":"

    Linear.

    "},{"location":"api/operator_literal_json_pointer/#examples","title":"Examples","text":"Example

    The following code shows how to create JSON Pointers from string literals.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    json j = R\"( {\"hello\": \"world\", \"answer\": 42} )\"_json;\n    auto val = j[\"/hello\"_json_pointer];\n\n    std::cout << std::setw(2) << val << '\\n';\n}\n

    Output:

    \"world\"\n
    "},{"location":"api/operator_literal_json_pointer/#see-also","title":"See also","text":"
    • json_pointer - type to represent JSON Pointers
    "},{"location":"api/operator_literal_json_pointer/#version-history","title":"Version history","text":"
    • Added in version 2.0.0.
    • Moved to namespace nlohmann::literals::json_literals in 3.11.0.
    "},{"location":"api/operator_ltlt/","title":"nlohmann::operator<<(basic_json), nlohmann::operator<<(json_pointer)","text":"
    std::ostream& operator<<(std::ostream& o, const basic_json& j);      // (1)\n\nstd::ostream& operator<<(std::ostream& o, const json_pointer& ptr);  // (2)\n
    1. Serialize the given JSON value j to the output stream o. The JSON value will be serialized using the dump member function.
      • The indentation of the output can be controlled with the member variable width of the output stream o. For instance, using the manipulator std::setw(4) on o sets the indentation level to 4 and the serialization result is the same as calling dump(4).
      • The indentation character can be controlled with the member variable fill of the output stream o. For instance, the manipulator std::setfill('\\\\t') sets indentation to use a tab character rather than the default space character.
    2. Write a string representation of the given JSON pointer ptr to the output stream o. The string representation is obtained using the to_string member function.
    "},{"location":"api/operator_ltlt/#parameters","title":"Parameters","text":"o (in, out) stream to write to j (in) JSON value to serialize ptr (in) JSON pointer to write"},{"location":"api/operator_ltlt/#return-value","title":"Return value","text":"

    the stream o

    "},{"location":"api/operator_ltlt/#exceptions","title":"Exceptions","text":"
    1. Throws type_error.316 if a string stored inside the JSON value is not UTF-8 encoded. Note that unlike the dump member functions, no error_handler can be set.
    2. None.
    "},{"location":"api/operator_ltlt/#complexity","title":"Complexity","text":"

    Linear.

    "},{"location":"api/operator_ltlt/#notes","title":"Notes","text":"

    Deprecation

    Function std::ostream& operator<<(std::ostream& o, const basic_json& j) replaces function std::ostream& operator>>(const basic_json& j, std::ostream& o) which has been deprecated in version 3.0.0. It will be removed in version 4.0.0. Please replace calls like j >> o; with o << j;.

    "},{"location":"api/operator_ltlt/#examples","title":"Examples","text":"Example: (1) serialize JSON value to stream

    The example below shows the serialization with different parameters to width to adjust the indentation level.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n\n    // serialize without indentation\n    std::cout << j_object << \"\\n\\n\";\n    std::cout << j_array << \"\\n\\n\";\n\n    // serialize with indentation\n    std::cout << std::setw(4) << j_object << \"\\n\\n\";\n    std::cout << std::setw(2) << j_array << \"\\n\\n\";\n    std::cout << std::setw(1) << std::setfill('\\t') << j_object << \"\\n\\n\";\n}\n

    Output:

    {\"one\":1,\"two\":2}\n\n[1,2,4,8,16]\n\n{\n    \"one\": 1,\n    \"two\": 2\n}\n\n[\n  1,\n  2,\n  4,\n  8,\n  16\n]\n\n{\n    \"one\": 1,\n    \"two\": 2\n}\n
    Example: (2) write JSON pointer to stream

    The example below shows how to write a JSON pointer to a stream.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON poiner\n    json::json_pointer ptr(\"/foo/bar/baz\");\n\n    // write string representation to stream\n    std::cout << ptr << std::endl;\n}\n

    Output:

    /foo/bar/baz\n
    "},{"location":"api/operator_ltlt/#version-history","title":"Version history","text":"
    1. Added in version 1.0.0. Added support for indentation character and deprecated std::ostream& operator>>(const basic_json& j, std::ostream& o) in version 3.0.0.
    2. Added in version 3.11.0.
    "},{"location":"api/ordered_json/","title":"nlohmann::ordered_json","text":"
    using ordered_json = basic_json<ordered_map>;\n

    This type preserves the insertion order of object keys.

    "},{"location":"api/ordered_json/#iterator-invalidation","title":"Iterator invalidation","text":"

    The type is based on ordered_map which in turn uses a std::vector to store object elements. Therefore, adding object elements can yield a reallocation in which case all iterators (including the end() iterator) and all references to the elements are invalidated. Also, any iterator or reference after the insertion point will point to the same index which is now a different value.

    "},{"location":"api/ordered_json/#examples","title":"Examples","text":"Example

    The example below demonstrates how ordered_json preserves the insertion order of object keys.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing ordered_json = nlohmann::ordered_json;\n\nint main()\n{\n    ordered_json j;\n    j[\"one\"] = 1;\n    j[\"two\"] = 2;\n    j[\"three\"] = 3;\n\n    std::cout << j.dump(2) << '\\n';\n}\n

    Output:

    {\n  \"one\": 1,\n  \"two\": 2,\n  \"three\": 3\n}\n
    "},{"location":"api/ordered_json/#see-also","title":"See also","text":"
    • ordered_map
    • Object Order
    "},{"location":"api/ordered_json/#version-history","title":"Version history","text":"

    Since version 3.9.0.

    "},{"location":"api/ordered_map/","title":"nlohmann::ordered_map","text":"
    template<class Key, class T, class IgnoredLess = std::less<Key>,\n         class Allocator = std::allocator<std::pair<const Key, T>>>\nstruct ordered_map : std::vector<std::pair<const Key, T>, Allocator>;\n

    A minimal map-like container that preserves insertion order for use within nlohmann::ordered_json (nlohmann::basic_json<ordered_map>).

    "},{"location":"api/ordered_map/#template-parameters","title":"Template parameters","text":"Key key type T mapped type IgnoredLess comparison function (ignored and only added to ensure compatibility with std::map) Allocator allocator type"},{"location":"api/ordered_map/#iterator-invalidation","title":"Iterator invalidation","text":"

    The type uses a std::vector to store object elements. Therefore, adding elements can yield a reallocation in which case all iterators (including the end() iterator) and all references to the elements are invalidated.

    "},{"location":"api/ordered_map/#member-types","title":"Member types","text":"
    • key_type - key type (Key)
    • mapped_type - mapped type (T)
    • Container - base container type (std::vector<std::pair<const Key, T>, Allocator>)
    • iterator
    • const_iterator
    • size_type
    • value_type
    • key_compare - key comparison function
      std::equal_to<Key>  // until C++14\n\nstd::equal_to<>     // since C++14\n
    "},{"location":"api/ordered_map/#member-functions","title":"Member functions","text":"
    • (constructor)
    • (destructor)
    • emplace
    • operator[]
    • at
    • erase
    • count
    • find
    • insert
    "},{"location":"api/ordered_map/#examples","title":"Examples","text":"Example

    The example shows the different behavior of std::map and nlohmann::ordered_map.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\n// simple output function\ntemplate<typename Map>\nvoid output(const char* prefix, const Map& m)\n{\n    std::cout << prefix << \" = { \";\n    for (auto& element : m)\n    {\n        std::cout << element.first << \":\" << element.second << ' ';\n    }\n    std::cout << \"}\" << std::endl;\n}\n\nint main()\n{\n    // create and fill two maps\n    nlohmann::ordered_map<std::string, std::string> m_ordered;\n    m_ordered[\"one\"] = \"eins\";\n    m_ordered[\"two\"] = \"zwei\";\n    m_ordered[\"three\"] = \"drei\";\n\n    std::map<std::string, std::string> m_std;\n    m_std[\"one\"] = \"eins\";\n    m_std[\"two\"] = \"zwei\";\n    m_std[\"three\"] = \"drei\";\n\n    // output: m_ordered is ordered by insertion order, m_std is ordered by key\n    output(\"m_ordered\", m_ordered);\n    output(\"m_std\", m_std);\n\n    // erase and re-add \"one\" key\n    m_ordered.erase(\"one\");\n    m_ordered[\"one\"] = \"eins\";\n\n    m_std.erase(\"one\");\n    m_std[\"one\"] = \"eins\";\n\n    // output: m_ordered shows newly added key at the end; m_std is again ordered by key\n    output(\"m_ordered\", m_ordered);\n    output(\"m_std\", m_std);\n}\n

    Output:

    m_ordered = { one:eins two:zwei three:drei }\nm_std = { one:eins three:drei two:zwei }\nm_ordered = { two:zwei three:drei one:eins }\nm_std = { one:eins three:drei two:zwei }\n
    "},{"location":"api/ordered_map/#see-also","title":"See also","text":"
    • ordered_json
    "},{"location":"api/ordered_map/#version-history","title":"Version history","text":"
    • Added in version 3.9.0 to implement nlohmann::ordered_json.
    • Added key_compare member in version 3.11.0.
    "},{"location":"api/adl_serializer/","title":"nlohmann::adl_serializer","text":"
    template<typename, typename>\nstruct adl_serializer;\n

    Serializer that uses ADL (Argument-Dependent Lookup) to choose to_json/from_json functions from the types' namespaces.

    It is implemented similar to

    template<typename ValueType>\nstruct adl_serializer {\n    template<typename BasicJsonType>\n    static void to_json(BasicJsonType& j, const T& value) {\n        // calls the \"to_json\" method in T's namespace\n    }\n\n    template<typename BasicJsonType>\n    static void from_json(const BasicJsonType& j, T& value) {\n        // same thing, but with the \"from_json\" method\n    }\n};\n
    "},{"location":"api/adl_serializer/#member-functions","title":"Member functions","text":"
    • from_json - convert a JSON value to any value type
    • to_json - convert any value type to a JSON value
    "},{"location":"api/adl_serializer/#version-history","title":"Version history","text":"
    • Added in version 2.1.0.
    "},{"location":"api/adl_serializer/from_json/","title":"nlohmann::adl_serializer::from_json","text":"
    // (1)\ntemplate<typename BasicJsonType, typename TargetType = ValueType>\nstatic auto from_json(BasicJsonType && j, TargetType& val) noexcept(\n    noexcept(::nlohmann::from_json(std::forward<BasicJsonType>(j), val)))\n-> decltype(::nlohmann::from_json(std::forward<BasicJsonType>(j), val), void())\n\n// (2)\ntemplate<typename BasicJsonType, typename TargetType = ValueType>\nstatic auto from_json(BasicJsonType && j) noexcept(\nnoexcept(::nlohmann::from_json(std::forward<BasicJsonType>(j), detail::identity_tag<TargetType> {})))\n-> decltype(::nlohmann::from_json(std::forward<BasicJsonType>(j), detail::identity_tag<TargetType> {}))\n

    This function is usually called by the get() function of the basic_json class (either explicitly or via the conversion operators).

    1. This function is chosen for default-constructible value types.
    2. This function is chosen for value types which are not default-constructible.
    "},{"location":"api/adl_serializer/from_json/#parameters","title":"Parameters","text":"j (in) JSON value to read from val (out) value to write to"},{"location":"api/adl_serializer/from_json/#return-value","title":"Return value","text":"

    Copy of the JSON value, converted to ValueType

    "},{"location":"api/adl_serializer/from_json/#examples","title":"Examples","text":"Example: (1) Default-constructible type

    The example below shows how a from_json function can be implemented for a user-defined type. This function is called by the adl_serializer when template get<ns::person>() is called.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nnamespace ns\n{\n// a simple struct to model a person\nstruct person\n{\n    std::string name;\n    std::string address;\n    int age;\n};\n} // namespace ns\n\nnamespace ns\n{\nvoid from_json(const json& j, person& p)\n{\n    j.at(\"name\").get_to(p.name);\n    j.at(\"address\").get_to(p.address);\n    j.at(\"age\").get_to(p.age);\n}\n} // namespace ns\n\nint main()\n{\n    json j;\n    j[\"name\"] = \"Ned Flanders\";\n    j[\"address\"] = \"744 Evergreen Terrace\";\n    j[\"age\"] = 60;\n\n    auto p = j.template get<ns::person>();\n\n    std::cout << p.name << \" (\" << p.age << \") lives in \" << p.address << std::endl;\n}\n

    Output:

    Ned Flanders (60) lives in 744 Evergreen Terrace\n
    Example: (2) Non-default-constructible type

    The example below shows how a from_json is implemented as part of a specialization of the adl_serializer to realize the conversion of a non-default-constructible type.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nnamespace ns\n{\n// a simple struct to model a person (not default constructible)\nstruct person\n{\n    person(std::string n, std::string a, int aa)\n        : name(std::move(n)), address(std::move(a)), age(aa)\n    {}\n\n    std::string name;\n    std::string address;\n    int age;\n};\n} // namespace ns\n\nnamespace nlohmann\n{\ntemplate <>\nstruct adl_serializer<ns::person>\n{\n    static ns::person from_json(const json& j)\n    {\n        return {j.at(\"name\"), j.at(\"address\"), j.at(\"age\")};\n    }\n\n    // Here's the catch! You must provide a to_json method! Otherwise, you\n    // will not be able to convert person to json, since you fully\n    // specialized adl_serializer on that type\n    static void to_json(json& j, ns::person p)\n    {\n        j[\"name\"] = p.name;\n        j[\"address\"] = p.address;\n        j[\"age\"] = p.age;\n    }\n};\n} // namespace nlohmann\n\nint main()\n{\n    json j;\n    j[\"name\"] = \"Ned Flanders\";\n    j[\"address\"] = \"744 Evergreen Terrace\";\n    j[\"age\"] = 60;\n\n    auto p = j.template get<ns::person>();\n\n    std::cout << p.name << \" (\" << p.age << \") lives in \" << p.address << std::endl;\n}\n

    Output:

    Ned Flanders (60) lives in 744 Evergreen Terrace\n
    "},{"location":"api/adl_serializer/from_json/#see-also","title":"See also","text":"
    • to_json
    "},{"location":"api/adl_serializer/from_json/#version-history","title":"Version history","text":"
    • Added in version 2.1.0.
    "},{"location":"api/adl_serializer/to_json/","title":"nlohmann::adl_serializer::to_json","text":"
    template<typename BasicJsonType, typename TargetType = ValueType>\nstatic auto to_json(BasicJsonType& j, TargetType && val) noexcept(\n    noexcept(::nlohmann::to_json(j, std::forward<TargetType>(val))))\n-> decltype(::nlohmann::to_json(j, std::forward<TargetType>(val)), void())\n

    This function is usually called by the constructors of the basic_json class.

    "},{"location":"api/adl_serializer/to_json/#parameters","title":"Parameters","text":"j (out) JSON value to write to val (in) value to read from"},{"location":"api/adl_serializer/to_json/#examples","title":"Examples","text":"Example

    The example below shows how a to_json function can be implemented for a user-defined type. This function is called by the adl_serializer when the constructor basic_json(ns::person) is called.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nnamespace ns\n{\n// a simple struct to model a person\nstruct person\n{\n    std::string name;\n    std::string address;\n    int age;\n};\n} // namespace ns\n\nnamespace ns\n{\nvoid to_json(json& j, const person& p)\n{\n    j = json{ {\"name\", p.name}, {\"address\", p.address}, {\"age\", p.age} };\n}\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    json j = p;\n\n    std::cout << j << std::endl;\n}\n

    Output:

    {\"address\":\"744 Evergreen Terrace\",\"age\":60,\"name\":\"Ned Flanders\"}\n
    "},{"location":"api/adl_serializer/to_json/#see-also","title":"See also","text":"
    • from_json
    "},{"location":"api/adl_serializer/to_json/#version-history","title":"Version history","text":"
    • Added in version 2.1.0.
    "},{"location":"api/basic_json/","title":"nlohmann::basic_json","text":"

    Defined in header <nlohmann/json.hpp>

    template<\n    template<typename U, typename V, typename... Args> class ObjectType = std::map,\n    template<typename U, typename... Args> class ArrayType = std::vector,\n    class StringType = std::string,\n    class BooleanType = bool,\n    class NumberIntegerType = std::int64_t,\n    class NumberUnsignedType = std::uint64_t,\n    class NumberFloatType = double,\n    template<typename U> class AllocatorType = std::allocator,\n    template<typename T, typename SFINAE = void> class JSONSerializer = adl_serializer,\n    class BinaryType = std::vector<std::uint8_t>,\n    class CustomBaseClass = void\n>\nclass basic_json;\n
    "},{"location":"api/basic_json/#template-parameters","title":"Template parameters","text":"Template parameter Description Derived type ObjectType type for JSON objects object_t ArrayType type for JSON arrays array_t StringType type for JSON strings and object keys string_t BooleanType type for JSON booleans boolean_t NumberIntegerType type for JSON integer numbers number_integer_t NumberUnsignedType type for JSON unsigned integer numbers number_unsigned_t NumberFloatType type for JSON floating-point numbers number_float_t AllocatorType type of the allocator to use JSONSerializer the serializer to resolve internal calls to to_json() and from_json() json_serializer BinaryType type for binary arrays binary_t CustomBaseClass extension point for user code json_base_class_t"},{"location":"api/basic_json/#specializations","title":"Specializations","text":"
    • json - default specialization
    • ordered_json - specialization that maintains the insertion order of object keys
    "},{"location":"api/basic_json/#iterator-invalidation","title":"Iterator invalidation","text":"

    All operations that add values to an array (push_back , operator+=, emplace_back, insert, and operator[] for a non-existing index) can yield a reallocation, in which case all iterators (including the end() iterator) and all references to the elements are invalidated.

    For ordered_json, also all operations that add a value to an object (push_back, operator+=, emplace, insert, update, and operator[] for a non-existing key) can yield a reallocation, in which case all iterators (including the end() iterator) and all references to the elements are invalidated.

    "},{"location":"api/basic_json/#requirements","title":"Requirements","text":"

    The class satisfies the following concept requirements:

    "},{"location":"api/basic_json/#basic","title":"Basic","text":"
    • DefaultConstructible: JSON values can be default constructed. The result will be a JSON null value.
    • MoveConstructible: A JSON value can be constructed from an rvalue argument.
    • CopyConstructible: A JSON value can be copy-constructed from an lvalue expression.
    • MoveAssignable: A JSON value can be assigned from an rvalue argument.
    • CopyAssignable: A JSON value can be copy-assigned from an lvalue expression.
    • Destructible: JSON values can be destructed.
    "},{"location":"api/basic_json/#layout","title":"Layout","text":"
    • StandardLayoutType: JSON values have standard layout: All non-static data members are private and standard layout types, the class has no virtual functions or (virtual) base classes.
    "},{"location":"api/basic_json/#library-wide","title":"Library-wide","text":"
    • EqualityComparable: JSON values can be compared with ==, see operator==.
    • LessThanComparable: JSON values can be compared with <, see operator<.
    • Swappable: Any JSON lvalue or rvalue of can be swapped with any lvalue or rvalue of other compatible types, using unqualified function swap.
    • NullablePointer: JSON values can be compared against std::nullptr_t objects which are used to model the null value.
    "},{"location":"api/basic_json/#container","title":"Container","text":"
    • Container: JSON values can be used like STL containers and provide iterator access.
    • ReversibleContainer: JSON values can be used like STL containers and provide reverse iterator access.
    "},{"location":"api/basic_json/#member-types","title":"Member types","text":"
    • adl_serializer - the default serializer
    • value_t - the JSON type enumeration
    • json_pointer - JSON Pointer implementation
    • json_serializer - type of the serializer to for conversions from/to JSON
    • error_handler_t - type to choose behavior on decoding errors
    • cbor_tag_handler_t - type to choose how to handle CBOR tags
    • initializer_list_t - type for initializer lists of basic_json values
    • input_format_t - type to choose the format to parse
    • json_sax_t - type for SAX events
    "},{"location":"api/basic_json/#exceptions","title":"Exceptions","text":"
    • exception - general exception of the basic_json class
      • parse_error - exception indicating a parse error
      • invalid_iterator - exception indicating errors with iterators
      • type_error - exception indicating executing a member function with a wrong type
      • out_of_range - exception indicating access out of the defined range
      • other_error - exception indicating other library errors
    "},{"location":"api/basic_json/#container-types","title":"Container types","text":"Type Definition value_type basic_json reference value_type& const_reference const value_type& difference_type std::ptrdiff_t size_type std::size_t allocator_type AllocatorType<basic_json> pointer std::allocator_traits<allocator_type>::pointer const_pointer std::allocator_traits<allocator_type>::const_pointer iterator LegacyBidirectionalIterator const_iterator constant LegacyBidirectionalIterator reverse_iterator reverse iterator, derived from iterator const_reverse_iterator reverse iterator, derived from const_iterator iteration_proxy helper type for items function"},{"location":"api/basic_json/#json-value-data-types","title":"JSON value data types","text":"
    • array_t - type for arrays
    • binary_t - type for binary arrays
    • boolean_t - type for booleans
    • default_object_comparator_t - default comparator for objects
    • number_float_t - type for numbers (floating-point)
    • number_integer_t - type for numbers (integer)
    • number_unsigned_t - type for numbers (unsigned)
    • object_comparator_t - comparator for objects
    • object_t - type for objects
    • string_t - type for strings
    "},{"location":"api/basic_json/#parser-callback","title":"Parser callback","text":"
    • parse_event_t - parser event types
    • parser_callback_t - per-element parser callback type
    "},{"location":"api/basic_json/#member-functions","title":"Member functions","text":"
    • (constructor)
    • (destructor)
    • operator= - copy assignment
    • array (static) - explicitly create an array
    • binary (static) - explicitly create a binary array
    • object (static) - explicitly create an object
    "},{"location":"api/basic_json/#object-inspection","title":"Object inspection","text":"

    Functions to inspect the type of a JSON value.

    • type - return the type of the JSON value
    • operator value_t - return the type of the JSON value
    • type_name - return the type as string
    • is_primitive - return whether type is primitive
    • is_structured - return whether type is structured
    • is_null - return whether value is null
    • is_boolean - return whether value is a boolean
    • is_number - return whether value is a number
    • is_number_integer - return whether value is an integer number
    • is_number_unsigned - return whether value is an unsigned integer number
    • is_number_float - return whether value is a floating-point number
    • is_object - return whether value is an object
    • is_array - return whether value is an array
    • is_string - return whether value is a string
    • is_binary - return whether value is a binary array
    • is_discarded - return whether value is discarded

    Optional functions to access the diagnostic positions.

    • start_pos - return the start position of the value
    • end_pos - return the one past the end position of the value
    "},{"location":"api/basic_json/#value-access","title":"Value access","text":"

    Direct access to the stored value of a JSON value.

    • get - get a value
    • get_to - get a value and write it to a destination
    • get_ptr - get a pointer value
    • get_ref - get a reference value
    • operator ValueType - get a value
    • get_binary - get a binary value
    "},{"location":"api/basic_json/#element-access","title":"Element access","text":"

    Access to the JSON value

    • at - access specified element with bounds checking
    • operator[] - access specified element
    • value - access specified object element with default value
    • front - access the first element
    • back - access the last element
    "},{"location":"api/basic_json/#lookup","title":"Lookup","text":"
    • find - find an element in a JSON object
    • count - returns the number of occurrences of a key in a JSON object
    • contains - check the existence of an element in a JSON object
    "},{"location":"api/basic_json/#iterators","title":"Iterators","text":"
    • begin - returns an iterator to the first element
    • cbegin - returns a const iterator to the first element
    • end - returns an iterator to one past the last element
    • cend - returns a const iterator to one past the last element
    • rbegin - returns an iterator to the reverse-beginning
    • rend - returns an iterator to the reverse-end
    • crbegin - returns a const iterator to the reverse-beginning
    • crend - returns a const iterator to the reverse-end
    • items - wrapper to access iterator member functions in range-based for
    "},{"location":"api/basic_json/#capacity","title":"Capacity","text":"
    • empty - checks whether the container is empty
    • size - returns the number of elements
    • max_size - returns the maximum possible number of elements
    "},{"location":"api/basic_json/#modifiers","title":"Modifiers","text":"
    • clear - clears the contents
    • push_back - add a value to an array/object
    • operator+= - add a value to an array/object
    • emplace_back - add a value to an array
    • emplace - add a value to an object if key does not exist
    • erase - remove elements
    • insert - inserts elements
    • update - updates a JSON object from another object, overwriting existing keys
    • swap - exchanges the values
    "},{"location":"api/basic_json/#lexicographical-comparison-operators","title":"Lexicographical comparison operators","text":"
    • operator== - comparison: equal
    • operator!= - comparison: not equal
    • operator< - comparison: less than
    • operator> - comparison: greater than
    • operator<= - comparison: less than or equal
    • operator>= - comparison: greater than or equal
    • operator<=> - comparison: 3-way
    "},{"location":"api/basic_json/#serialization-dumping","title":"Serialization / Dumping","text":"
    • dump - serialization
    "},{"location":"api/basic_json/#deserialization-parsing","title":"Deserialization / Parsing","text":"
    • parse (static) - deserialize from a compatible input
    • accept (static) - check if the input is valid JSON
    • sax_parse (static) - generate SAX events
    "},{"location":"api/basic_json/#json-pointer-functions","title":"JSON Pointer functions","text":"
    • flatten - return flattened JSON value
    • unflatten - unflatten a previously flattened JSON value
    "},{"location":"api/basic_json/#json-patch-functions","title":"JSON Patch functions","text":"
    • patch - applies a JSON patch
    • patch_inplace - applies a JSON patch in place
    • diff (static) - creates a diff as a JSON patch
    "},{"location":"api/basic_json/#json-merge-patch-functions","title":"JSON Merge Patch functions","text":"
    • merge_patch - applies a JSON Merge Patch
    "},{"location":"api/basic_json/#static-functions","title":"Static functions","text":"
    • meta - returns version information on the library
    • get_allocator - returns the allocator associated with the container
    "},{"location":"api/basic_json/#binary-formats","title":"Binary formats","text":"
    • from_bjdata (static) - create a JSON value from an input in BJData format
    • from_bson (static) - create a JSON value from an input in BSON format
    • from_cbor (static) - create a JSON value from an input in CBOR format
    • from_msgpack (static) - create a JSON value from an input in MessagePack format
    • from_ubjson (static) - create a JSON value from an input in UBJSON format
    • to_bjdata (static) - create a BJData serialization of a given JSON value
    • to_bson (static) - create a BSON serialization of a given JSON value
    • to_cbor (static) - create a CBOR serialization of a given JSON value
    • to_msgpack (static) - create a MessagePack serialization of a given JSON value
    • to_ubjson (static) - create a UBJSON serialization of a given JSON value
    "},{"location":"api/basic_json/#non-member-functions","title":"Non-member functions","text":"
    • operator<<(std::ostream&) - serialize to stream
    • operator>>(std::istream&) - deserialize from stream
    • to_string - user-defined to_string function for JSON values
    "},{"location":"api/basic_json/#literals","title":"Literals","text":"
    • operator\"\"_json - user-defined string literal for JSON values
    "},{"location":"api/basic_json/#helper-classes","title":"Helper classes","text":"
    • std::hash<basic_json> - return a hash value for a JSON object
    • std::swap<basic_json> - exchanges the values of two JSON objects
    "},{"location":"api/basic_json/#examples","title":"Examples","text":"Example

    The example shows how the library is used.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object\n    json j =\n    {\n        {\"pi\", 3.141},\n        {\"happy\", true},\n        {\"name\", \"Niels\"},\n        {\"nothing\", nullptr},\n        {\n            \"answer\", {\n                {\"everything\", 42}\n            }\n        },\n        {\"list\", {1, 0, 2}},\n        {\n            \"object\", {\n                {\"currency\", \"USD\"},\n                {\"value\", 42.99}\n            }\n        }\n    };\n\n    // add new values\n    j[\"new\"][\"key\"][\"value\"] = {\"another\", \"list\"};\n\n    // count elements\n    auto s = j.size();\n    j[\"size\"] = s;\n\n    // pretty print with indent of 4 spaces\n    std::cout << std::setw(4) << j << '\\n';\n}\n

    Output:

    {\n    \"answer\": {\n        \"everything\": 42\n    },\n    \"happy\": true,\n    \"list\": [\n        1,\n        0,\n        2\n    ],\n    \"name\": \"Niels\",\n    \"new\": {\n        \"key\": {\n            \"value\": [\n                \"another\",\n                \"list\"\n            ]\n        }\n    },\n    \"nothing\": null,\n    \"object\": {\n        \"currency\": \"USD\",\n        \"value\": 42.99\n    },\n    \"pi\": 3.141,\n    \"size\": 8\n}\n
    "},{"location":"api/basic_json/#see-also","title":"See also","text":"
    • RFC 8259: The JavaScript Object Notation (JSON) Data Interchange Format
    "},{"location":"api/basic_json/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/accept/","title":"nlohmann::basic_json::accept","text":"
    // (1)\ntemplate<typename InputType>\nstatic bool accept(InputType&& i,\n                   const bool ignore_comments = false);\n\n// (2)\ntemplate<typename IteratorType>\nstatic bool accept(IteratorType first, IteratorType last,\n                   const bool ignore_comments = false);\n

    Checks whether the input is valid JSON.

    1. Reads from a compatible input.
    2. Reads from a pair of character iterators

      The value_type of the iterator must be an integral type with size of 1, 2 or 4 bytes, which will be interpreted respectively as UTF-8, UTF-16 and UTF-32.

    Unlike the parse() function, this function neither throws an exception in case of invalid JSON input (i.e., a parse error) nor creates diagnostic information.

    "},{"location":"api/basic_json/accept/#template-parameters","title":"Template parameters","text":"InputType

    A compatible input, for instance:

    • an std::istream object
    • a FILE pointer (throws if null)
    • a C-style array of characters
    • a pointer to a null-terminated string of single byte characters (throws if null)
    • a std::string
    • an object obj for which begin(obj) and end(obj) produces a valid pair of iterators.
    IteratorType

    a compatible iterator type, for instance.

    • a pair of std::string::iterator or std::vector<std::uint8_t>::iterator
    • a pair of pointers such as ptr and ptr + len
    "},{"location":"api/basic_json/accept/#parameters","title":"Parameters","text":"i (in) Input to parse from. ignore_comments (in) whether comments should be ignored and treated like whitespace (true) or yield a parse error (false); (optional, false by default) first (in) iterator to start of character range last (in) iterator to end of character range"},{"location":"api/basic_json/accept/#return-value","title":"Return value","text":"

    Whether the input is valid JSON.

    "},{"location":"api/basic_json/accept/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/accept/#exceptions","title":"Exceptions","text":"

    Throws parse_error.101 in case of an empty input like a null FILE* or char* pointer.

    "},{"location":"api/basic_json/accept/#complexity","title":"Complexity","text":"

    Linear in the length of the input. The parser is a predictive LL(1) parser.

    "},{"location":"api/basic_json/accept/#notes","title":"Notes","text":"

    A UTF-8 byte order mark is silently ignored.

    "},{"location":"api/basic_json/accept/#examples","title":"Examples","text":"Example

    The example below demonstrates the accept() function reading from a string.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // a valid JSON text\n    auto valid_text = R\"(\n    {\n        \"numbers\": [1, 2, 3]\n    }\n    )\";\n\n    // an invalid JSON text\n    auto invalid_text = R\"(\n    {\n        \"strings\": [\"extra\", \"comma\", ]\n    }\n    )\";\n\n    std::cout << std::boolalpha\n              << json::accept(valid_text) << ' '\n              << json::accept(invalid_text) << '\\n';\n}\n

    Output:

    true false\n
    "},{"location":"api/basic_json/accept/#see-also","title":"See also","text":"
    • parse - deserialize from a compatible input
    • operator>> - deserialize from stream
    "},{"location":"api/basic_json/accept/#version-history","title":"Version history","text":"
    • Added in version 3.0.0.
    • Ignoring comments via ignore_comments added in version 3.9.0.
    • Changed runtime assertion in case of FILE* null pointers to exception in version 3.11.4.

    Deprecation

    Overload (2) replaces calls to accept with a pair of iterators as their first parameter which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like accept({ptr, ptr+len}, ...); with accept(ptr, ptr+len, ...);.

    You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

    "},{"location":"api/basic_json/array/","title":"nlohmann::basic_json::array","text":"
    static basic_json array(initializer_list_t init = {});\n

    Creates a JSON array value from a given initializer list. That is, given a list of values a, b, c, creates the JSON value [a, b, c]. If the initializer list is empty, the empty array [] is created.

    "},{"location":"api/basic_json/array/#parameters","title":"Parameters","text":"init (in) initializer list with JSON values to create an array from (optional)"},{"location":"api/basic_json/array/#return-value","title":"Return value","text":"

    JSON array value

    "},{"location":"api/basic_json/array/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/array/#complexity","title":"Complexity","text":"

    Linear in the size of init.

    "},{"location":"api/basic_json/array/#notes","title":"Notes","text":"

    This function is only needed to express two edge cases that cannot be realized with the initializer list constructor (basic_json(initializer_list_t, bool, value_t)). These cases are:

    1. creating an array whose elements are all pairs whose first element is a string -- in this case, the initializer list constructor would create an object, taking the first elements as keys
    2. creating an empty array -- passing the empty initializer list to the initializer list constructor yields an empty object
    "},{"location":"api/basic_json/array/#examples","title":"Examples","text":"Example

    The following code shows an example for the array function.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON arrays\n    json j_no_init_list = json::array();\n    json j_empty_init_list = json::array({});\n    json j_nonempty_init_list = json::array({1, 2, 3, 4});\n    json j_list_of_pairs = json::array({ {\"one\", 1}, {\"two\", 2} });\n\n    // serialize the JSON arrays\n    std::cout << j_no_init_list << '\\n';\n    std::cout << j_empty_init_list << '\\n';\n    std::cout << j_nonempty_init_list << '\\n';\n    std::cout << j_list_of_pairs << '\\n';\n}\n

    Output:

    []\n[]\n[1,2,3,4]\n[[\"one\",1],[\"two\",2]]\n
    "},{"location":"api/basic_json/array/#see-also","title":"See also","text":"
    • basic_json(initializer_list_t) - create a JSON value from an initializer list
    • object - create a JSON object value from an initializer list
    "},{"location":"api/basic_json/array/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/array_t/","title":"nlohmann::basic_json::array_t","text":"
    using array_t = ArrayType<basic_json, AllocatorType<basic_json>>;\n

    The type used to store JSON arrays.

    RFC 8259 describes JSON arrays as follows:

    An array is an ordered sequence of zero or more values.

    To store objects in C++, a type is defined by the template parameters explained below.

    "},{"location":"api/basic_json/array_t/#template-parameters","title":"Template parameters","text":"ArrayType container type to store arrays (e.g., std::vector or std::list) AllocatorType the allocator to use for objects (e.g., std::allocator)"},{"location":"api/basic_json/array_t/#notes","title":"Notes","text":""},{"location":"api/basic_json/array_t/#default-type","title":"Default type","text":"

    With the default values for ArrayType (std::vector) and AllocatorType (std::allocator), the default value for array_t is:

    std::vector<\n  basic_json, // value_type\n  std::allocator<basic_json> // allocator_type\n>\n
    "},{"location":"api/basic_json/array_t/#limits","title":"Limits","text":"

    RFC 8259 specifies:

    An implementation may set limits on the maximum depth of nesting.

    In this class, the array's limit of nesting is not explicitly constrained. However, a maximum depth of nesting may be introduced by the compiler or runtime environment. A theoretical limit can be queried by calling the max_size function of a JSON array.

    "},{"location":"api/basic_json/array_t/#storage","title":"Storage","text":"

    Arrays are stored as pointers in a basic_json type. That is, for any access to array values, a pointer of type array_t* must be dereferenced.

    "},{"location":"api/basic_json/array_t/#examples","title":"Examples","text":"Example

    The following code shows that array_t is by default, a typedef to std::vector<nlohmann::json>.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::boolalpha << std::is_same<std::vector<json>, json::array_t>::value << std::endl;\n}\n

    Output:

    true\n
    "},{"location":"api/basic_json/array_t/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/at/","title":"nlohmann::basic_json::at","text":"
    // (1)\nreference at(size_type idx);\nconst_reference at(size_type idx) const;\n\n// (2)\nreference at(const typename object_t::key_type& key);\nconst_reference at(const typename object_t::key_type& key) const;\n\n// (3)\ntemplate<typename KeyType>\nreference at(KeyType&& key);\ntemplate<typename KeyType>\nconst_reference at(KeyType&& key) const;\n\n// (4)\nreference at(const json_pointer& ptr);\nconst_reference at(const json_pointer& ptr) const;\n
    1. Returns a reference to the array element at specified location idx, with bounds checking.
    2. Returns a reference to the object element with specified key key, with bounds checking.
    3. See 2. This overload is only available if KeyType is comparable with typename object_t::key_type and typename object_comparator_t::is_transparent denotes a type.
    4. Returns a reference to the element at specified JSON pointer ptr, with bounds checking.
    "},{"location":"api/basic_json/at/#template-parameters","title":"Template parameters","text":"KeyType A type for an object key other than json_pointer that is comparable with string_t using object_comparator_t. This can also be a string view (C++17)."},{"location":"api/basic_json/at/#parameters","title":"Parameters","text":"idx (in) index of the element to access key (in) object key of the elements to access ptr (in) JSON pointer to the desired element"},{"location":"api/basic_json/at/#return-value","title":"Return value","text":"
    1. reference to the element at index idx
    2. reference to the element at key key
    3. reference to the element at key key
    4. reference to the element pointed to by ptr
    "},{"location":"api/basic_json/at/#exception-safety","title":"Exception safety","text":"

    Strong exception safety: if an exception occurs, the original value stays intact.

    "},{"location":"api/basic_json/at/#exceptions","title":"Exceptions","text":"
    1. The function can throw the following exceptions:
      • Throws type_error.304 if the JSON value is not an array; in this case, calling at with an index makes no sense. See example below.
      • Throws out_of_range.401 if the index idx is out of range of the array; that is, idx >= size(). See example below.
    2. The function can throw the following exceptions:
      • Throws type_error.304 if the JSON value is not an object; in this case, calling at with a key makes no sense. See example below.
      • Throws out_of_range.403 if the key key is not stored in the object; that is, find(key) == end(). See example below.
    3. See 2.
    4. The function can throw the following exceptions:
      • Throws parse_error.106 if an array index in the passed JSON pointer ptr begins with '0'. See example below.
      • Throws parse_error.109 if an array index in the passed JSON pointer ptr is not a number. See example below.
      • Throws out_of_range.401 if an array index in the passed JSON pointer ptr is out of range. See example below.
      • Throws out_of_range.402 if the array index '-' is used in the passed JSON pointer ptr. As at provides checked access (and no elements are implicitly inserted), the index '-' is always invalid. See example below.
      • Throws out_of_range.403 if the JSON pointer describes a key of an object which cannot be found. See example below.
      • Throws out_of_range.404 if the JSON pointer ptr can not be resolved. See example below.
    "},{"location":"api/basic_json/at/#complexity","title":"Complexity","text":"
    1. Constant.
    2. Logarithmic in the size of the container.
    3. Logarithmic in the size of the container.
    4. Logarithmic in the size of the container.
    "},{"location":"api/basic_json/at/#examples","title":"Examples","text":"Example: (1) access specified array element with bounds checking

    The example below shows how array elements can be read and written using at(). It also demonstrates the different exceptions that can be thrown.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON array\n    json array = {\"first\", \"2nd\", \"third\", \"fourth\"};\n\n    // output element at index 2 (third element)\n    std::cout << array.at(2) << '\\n';\n\n    // change element at index 1 (second element) to \"second\"\n    array.at(1) = \"second\";\n\n    // output changed array\n    std::cout << array << '\\n';\n\n    // exception type_error.304\n    try\n    {\n        // use at() on a non-array type\n        json str = \"I am a string\";\n        str.at(0) = \"Another string\";\n    }\n    catch (const json::type_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // exception out_of_range.401\n    try\n    {\n        // try to write beyond the array limit\n        array.at(5) = \"sixth\";\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    \"third\"\n[\"first\",\"second\",\"third\",\"fourth\"]\n[json.exception.type_error.304] cannot use at() with string\n[json.exception.out_of_range.401] array index 5 is out of range\n
    Example: (1) access specified array element with bounds checking

    The example below shows how array elements can be read using at(). It also demonstrates the different exceptions that can be thrown.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON array\n    const json array = {\"first\", \"2nd\", \"third\", \"fourth\"};\n\n    // output element at index 2 (third element)\n    std::cout << array.at(2) << '\\n';\n\n    // exception type_error.304\n    try\n    {\n        // use at() on a non-array type\n        const json str = \"I am a string\";\n        std::cout << str.at(0) << '\\n';\n    }\n    catch (const json::type_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // exception out_of_range.401\n    try\n    {\n        // try to read beyond the array limit\n        std::cout << array.at(5) << '\\n';\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    \"third\"\n[json.exception.type_error.304] cannot use at() with string\n[json.exception.out_of_range.401] array index 5 is out of range\n
    Example: (2) access specified object element with bounds checking

    The example below shows how object elements can be read and written using at(). It also demonstrates the different exceptions that can be thrown.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON object\n    json object =\n    {\n        {\"the good\", \"il buono\"},\n        {\"the bad\", \"il cattivo\"},\n        {\"the ugly\", \"il brutto\"}\n    };\n\n    // output element with key \"the ugly\"\n    std::cout << object.at(\"the ugly\") << '\\n';\n\n    // change element with key \"the bad\"\n    object.at(\"the bad\") = \"il cattivo\";\n\n    // output changed array\n    std::cout << object << '\\n';\n\n    // exception type_error.304\n    try\n    {\n        // use at() on a non-object type\n        json str = \"I am a string\";\n        str.at(\"the good\") = \"Another string\";\n    }\n    catch (const json::type_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // exception out_of_range.401\n    try\n    {\n        // try to write at a nonexisting key\n        object.at(\"the fast\") = \"il rapido\";\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    \"il brutto\"\n{\"the bad\":\"il cattivo\",\"the good\":\"il buono\",\"the ugly\":\"il brutto\"}\n[json.exception.type_error.304] cannot use at() with string\n[json.exception.out_of_range.403] key 'the fast' not found\n
    Example: (2) access specified object element with bounds checking

    The example below shows how object elements can be read using at(). It also demonstrates the different exceptions that can be thrown.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON object\n    const json object =\n    {\n        {\"the good\", \"il buono\"},\n        {\"the bad\", \"il cattivo\"},\n        {\"the ugly\", \"il brutto\"}\n    };\n\n    // output element with key \"the ugly\"\n    std::cout << object.at(\"the ugly\") << '\\n';\n\n    // exception type_error.304\n    try\n    {\n        // use at() on a non-object type\n        const json str = \"I am a string\";\n        std::cout << str.at(\"the good\") << '\\n';\n    }\n    catch (const json::type_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // exception out_of_range.401\n    try\n    {\n        // try to read from a nonexisting key\n        std::cout << object.at(\"the fast\") << '\\n';\n    }\n    catch (const json::out_of_range)\n    {\n        std::cout << \"out of range\" << '\\n';\n    }\n}\n

    Output:

    \"il brutto\"\n[json.exception.type_error.304] cannot use at() with string\nout of range\n
    Example: (3) access specified object element using string_view with bounds checking

    The example below shows how object elements can be read and written using at(). It also demonstrates the different exceptions that can be thrown.

    #include <iostream>\n#include <string_view>\n#include <nlohmann/json.hpp>\n\nusing namespace std::string_view_literals;\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON object\n    json object =\n    {\n        {\"the good\", \"il buono\"},\n        {\"the bad\", \"il cattivo\"},\n        {\"the ugly\", \"il brutto\"}\n    };\n\n    // output element with key \"the ugly\" using string_view\n    std::cout << object.at(\"the ugly\"sv) << '\\n';\n\n    // change element with key \"the bad\" using string_view\n    object.at(\"the bad\"sv) = \"il cattivo\";\n\n    // output changed array\n    std::cout << object << '\\n';\n\n    // exception type_error.304\n    try\n    {\n        // use at() with string_view on a non-object type\n        json str = \"I am a string\";\n        str.at(\"the good\"sv) = \"Another string\";\n    }\n    catch (const json::type_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // exception out_of_range.401\n    try\n    {\n        // try to write at a nonexisting key using string_view\n        object.at(\"the fast\"sv) = \"il rapido\";\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    \"il brutto\"\n{\"the bad\":\"il cattivo\",\"the good\":\"il buono\",\"the ugly\":\"il brutto\"}\n[json.exception.type_error.304] cannot use at() with string\n[json.exception.out_of_range.403] key 'the fast' not found\n
    Example: (3) access specified object element using string_view with bounds checking

    The example below shows how object elements can be read using at(). It also demonstrates the different exceptions that can be thrown.

    #include <iostream>\n#include <string_view>\n#include <nlohmann/json.hpp>\n\nusing namespace std::string_view_literals;\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON object\n    const json object =\n    {\n        {\"the good\", \"il buono\"},\n        {\"the bad\", \"il cattivo\"},\n        {\"the ugly\", \"il brutto\"}\n    };\n\n    // output element with key \"the ugly\" using string_view\n    std::cout << object.at(\"the ugly\"sv) << '\\n';\n\n    // exception type_error.304\n    try\n    {\n        // use at() with string_view on a non-object type\n        const json str = \"I am a string\";\n        std::cout << str.at(\"the good\"sv) << '\\n';\n    }\n    catch (const json::type_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // exception out_of_range.401\n    try\n    {\n        // try to read from a nonexisting key using string_view\n        std::cout << object.at(\"the fast\"sv) << '\\n';\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << \"out of range\" << '\\n';\n    }\n}\n

    Output:

    \"il brutto\"\n[json.exception.type_error.304] cannot use at() with string\nout of range\n
    Example: (4) access specified element via JSON Pointer

    The example below shows how object elements can be read and written using at(). It also demonstrates the different exceptions that can be thrown.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create a JSON value\n    json j =\n    {\n        {\"number\", 1}, {\"string\", \"foo\"}, {\"array\", {1, 2}}\n    };\n\n    // read-only access\n\n    // output element with JSON pointer \"/number\"\n    std::cout << j.at(\"/number\"_json_pointer) << '\\n';\n    // output element with JSON pointer \"/string\"\n    std::cout << j.at(\"/string\"_json_pointer) << '\\n';\n    // output element with JSON pointer \"/array\"\n    std::cout << j.at(\"/array\"_json_pointer) << '\\n';\n    // output element with JSON pointer \"/array/1\"\n    std::cout << j.at(\"/array/1\"_json_pointer) << '\\n';\n\n    // writing access\n\n    // change the string\n    j.at(\"/string\"_json_pointer) = \"bar\";\n    // output the changed string\n    std::cout << j[\"string\"] << '\\n';\n\n    // change an array element\n    j.at(\"/array/1\"_json_pointer) = 21;\n    // output the changed array\n    std::cout << j[\"array\"] << '\\n';\n\n    // out_of_range.106\n    try\n    {\n        // try to use an array index with leading '0'\n        json::reference ref = j.at(\"/array/01\"_json_pointer);\n    }\n    catch (const json::parse_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // out_of_range.109\n    try\n    {\n        // try to use an array index that is not a number\n        json::reference ref = j.at(\"/array/one\"_json_pointer);\n    }\n    catch (const json::parse_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // out_of_range.401\n    try\n    {\n        // try to use an invalid array index\n        json::reference ref = j.at(\"/array/4\"_json_pointer);\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // out_of_range.402\n    try\n    {\n        // try to use the array index '-'\n        json::reference ref = j.at(\"/array/-\"_json_pointer);\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // out_of_range.403\n    try\n    {\n        // try to use a JSON pointer to a nonexistent object key\n        json::const_reference ref = j.at(\"/foo\"_json_pointer);\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // out_of_range.404\n    try\n    {\n        // try to use a JSON pointer that cannot be resolved\n        json::reference ref = j.at(\"/number/foo\"_json_pointer);\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    1\n\"foo\"\n[1,2]\n2\n\"bar\"\n[1,21]\n[json.exception.parse_error.106] parse error: array index '01' must not begin with '0'\n[json.exception.parse_error.109] parse error: array index 'one' is not a number\n[json.exception.out_of_range.401] array index 4 is out of range\n[json.exception.out_of_range.402] array index '-' (2) is out of range\n[json.exception.out_of_range.403] key 'foo' not found\n[json.exception.out_of_range.404] unresolved reference token 'foo'\n
    Example: (4) access specified element via JSON Pointer

    The example below shows how object elements can be read using at(). It also demonstrates the different exceptions that can be thrown.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create a JSON value\n    const json j =\n    {\n        {\"number\", 1}, {\"string\", \"foo\"}, {\"array\", {1, 2}}\n    };\n\n    // read-only access\n\n    // output element with JSON pointer \"/number\"\n    std::cout << j.at(\"/number\"_json_pointer) << '\\n';\n    // output element with JSON pointer \"/string\"\n    std::cout << j.at(\"/string\"_json_pointer) << '\\n';\n    // output element with JSON pointer \"/array\"\n    std::cout << j.at(\"/array\"_json_pointer) << '\\n';\n    // output element with JSON pointer \"/array/1\"\n    std::cout << j.at(\"/array/1\"_json_pointer) << '\\n';\n\n    // out_of_range.109\n    try\n    {\n        // try to use an array index that is not a number\n        json::const_reference ref = j.at(\"/array/one\"_json_pointer);\n    }\n    catch (const json::parse_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // out_of_range.401\n    try\n    {\n        // try to use an invalid array index\n        json::const_reference ref = j.at(\"/array/4\"_json_pointer);\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // out_of_range.402\n    try\n    {\n        // try to use the array index '-'\n        json::const_reference ref = j.at(\"/array/-\"_json_pointer);\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // out_of_range.403\n    try\n    {\n        // try to use a JSON pointer to a nonexistent object key\n        json::const_reference ref = j.at(\"/foo\"_json_pointer);\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // out_of_range.404\n    try\n    {\n        // try to use a JSON pointer that cannot be resolved\n        json::const_reference ref = j.at(\"/number/foo\"_json_pointer);\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    1\n\"foo\"\n[1,2]\n2\n[json.exception.parse_error.109] parse error: array index 'one' is not a number\n[json.exception.out_of_range.401] array index 4 is out of range\n[json.exception.out_of_range.402] array index '-' (2) is out of range\n[json.exception.out_of_range.403] key 'foo' not found\n[json.exception.out_of_range.404] unresolved reference token 'foo'\n
    "},{"location":"api/basic_json/at/#see-also","title":"See also","text":"
    • documentation on checked access
    • operator[] for unchecked access by reference
    • value for access with default value
    "},{"location":"api/basic_json/at/#version-history","title":"Version history","text":"
    1. Added in version 1.0.0.
    2. Added in version 1.0.0.
    3. Added in version 3.11.0.
    4. Added in version 2.0.0.
    "},{"location":"api/basic_json/back/","title":"nlohmann::basic_json::back","text":"
    reference back();\n\nconst_reference back() const;\n

    Returns a reference to the last element in the container. For a JSON container c, the expression c.back() is equivalent to

    auto tmp = c.end();\n--tmp;\nreturn *tmp;\n
    "},{"location":"api/basic_json/back/#return-value","title":"Return value","text":"

    In case of a structured type (array or object), a reference to the last element is returned. In case of number, string, boolean, or binary values, a reference to the value is returned.

    "},{"location":"api/basic_json/back/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/back/#exceptions","title":"Exceptions","text":"

    If the JSON value is null, exception invalid_iterator.214 is thrown.

    "},{"location":"api/basic_json/back/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/back/#notes","title":"Notes","text":"

    Precondition

    The array or object must not be empty. Calling back on an empty array or object yields undefined behavior.

    "},{"location":"api/basic_json/back/#examples","title":"Examples","text":"Example

    The following code shows an example for back().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_object_empty(json::value_t::object);\n    json j_array = {1, 2, 4, 8, 16};\n    json j_array_empty(json::value_t::array);\n    json j_string = \"Hello, world\";\n\n    // call back()\n    std::cout << j_boolean.back() << '\\n';\n    std::cout << j_number_integer.back() << '\\n';\n    std::cout << j_number_float.back() << '\\n';\n    std::cout << j_object.back() << '\\n';\n    //std::cout << j_object_empty.back() << '\\n';  // undefined behavior\n    std::cout << j_array.back() << '\\n';\n    //std::cout << j_array_empty.back() << '\\n';   // undefined behavior\n    std::cout << j_string.back() << '\\n';\n\n    // back() called on a null value\n    try\n    {\n        json j_null;\n        j_null.back();\n    }\n    catch (const json::invalid_iterator& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    true\n17\n23.42\n2\n16\n\"Hello, world\"\n[json.exception.invalid_iterator.214] cannot get value\n
    "},{"location":"api/basic_json/back/#see-also","title":"See also","text":"
    • front to access the first element
    "},{"location":"api/basic_json/back/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Adjusted code to return reference to binary values in version 3.8.0.
    "},{"location":"api/basic_json/basic_json/","title":"nlohmann::basic_json::basic_json","text":"
    // (1)\nbasic_json(const value_t v);\n\n// (2)\nbasic_json(std::nullptr_t = nullptr) noexcept;\n\n// (3)\ntemplate<typename CompatibleType>\nbasic_json(CompatibleType&& val) noexcept(noexcept(\n           JSONSerializer<U>::to_json(std::declval<basic_json_t&>(),\n                                      std::forward<CompatibleType>(val))));\n\n// (4)\ntemplate<typename BasicJsonType>\nbasic_json(const BasicJsonType& val);\n\n// (5)\nbasic_json(initializer_list_t init,\n           bool type_deduction = true,\n           value_t manual_type = value_t::array);\n\n// (6)\nbasic_json(size_type cnt, const basic_json& val);\n\n// (7)\nbasic_json(iterator first, iterator last);\nbasic_json(const_iterator first, const_iterator last);\n\n// (8)\nbasic_json(const basic_json& other);\n\n// (9)\nbasic_json(basic_json&& other) noexcept;\n
    1. Create an empty JSON value with a given type. The value will be default initialized with an empty value which depends on the type:

      Value type initial value null null boolean false string \"\" number 0 object {} array [] binary empty array

      The postcondition of this constructor can be restored by calling clear().

    2. Create a null JSON value. It either takes a null pointer as parameter (explicitly creating null) or no parameter (implicitly creating null). The passed null pointer itself is not read -- it is only used to choose the right constructor.

    3. This is a \"catch all\" constructor for all compatible JSON types; that is, types for which a to_json() method exists. The constructor forwards the parameter val to that method (to json_serializer<U>::to_json method with U = uncvref_t<CompatibleType>, to be exact).

      Template type CompatibleType includes, but is not limited to, the following types:

      • arrays: array_t and all kinds of compatible containers such as std::vector, std::deque, std::list, std::forward_list, std::array, std::valarray, std::set, std::unordered_set, std::multiset, and std::unordered_multiset with a value_type from which a basic_json value can be constructed.
      • objects: object_t and all kinds of compatible associative containers such as std::map, std::unordered_map, std::multimap, and std::unordered_multimap with a key_type compatible to string_t and a value_type from which a basic_json value can be constructed.
      • strings: string_t, string literals, and all compatible string containers can be used.
      • numbers: number_integer_t, number_unsigned_t, number_float_t, and all convertible number types such as int, size_t, int64_t, float or double can be used.
      • boolean: boolean_t / bool can be used.
      • binary: binary_t / std::vector<uint8_t> may be used; unfortunately because string literals cannot be distinguished from binary character arrays by the C++ type system, all types compatible with const char* will be directed to the string constructor instead. This is both for backwards compatibility, and due to the fact that a binary type is not a standard JSON type.

      See the examples below.

    4. This is a constructor for existing basic_json types. It does not hijack copy/move constructors, since the parameter has different template arguments than the current ones.

      The constructor tries to convert the internal m_value of the parameter.

    5. Creates a JSON value of type array or object from the passed initializer list init. In case type_deduction is true (default), the type of the JSON value to be created is deducted from the initializer list init according to the following rules:

      1. If the list is empty, an empty JSON object value {} is created.
      2. If the list consists of pairs whose first element is a string, a JSON object value is created where the first elements of the pairs are treated as keys and the second elements are as values.
      3. In all other cases, an array is created.

      The rules aim to create the best fit between a C++ initializer list and JSON values. The rationale is as follows:

      1. The empty initializer list is written as {} which is exactly an empty JSON object.
      2. C++ has no way of describing mapped types other than to list a list of pairs. As JSON requires that keys must be of type string, rule 2 is the weakest constraint one can pose on initializer lists to interpret them as an object.
      3. In all other cases, the initializer list could not be interpreted as JSON object type, so interpreting it as JSON array type is safe.

      With the rules described above, the following JSON values cannot be expressed by an initializer list:

      • the empty array ([]): use array(initializer_list_t) with an empty initializer list in this case
      • arrays whose elements satisfy rule 2: use array(initializer_list_t) with the same initializer list in this case

      Function array() and object() force array and object creation from initializer lists, respectively.

    6. Constructs a JSON array value by creating cnt copies of a passed value. In case cnt is 0, an empty array is created.

    7. Constructs the JSON value with the contents of the range [first, last). The semantics depends on the different types a JSON value can have:

      • In case of a null type, invalid_iterator.206 is thrown.
      • In case of other primitive types (number, boolean, or string), first must be begin() and last must be end(). In this case, the value is copied. Otherwise, invalid_iterator.204 is thrown.
      • In case of structured types (array, object), the constructor behaves as similar versions for std::vector or std::map; that is, a JSON array or object is constructed from the values in the range.
    8. Creates a copy of a given JSON value.

    9. Move constructor. Constructs a JSON value with the contents of the given value other using move semantics. It \"steals\" the resources from other and leaves it as JSON null value.

    "},{"location":"api/basic_json/basic_json/#template-parameters","title":"Template parameters","text":"CompatibleType

    a type such that:

    • CompatibleType is not derived from std::istream,
    • CompatibleType is not basic_json (to avoid hijacking copy/move constructors),
    • CompatibleType is not a different basic_json type (i.e. with different template arguments)
    • CompatibleType is not a basic_json nested type (e.g., json_pointer, iterator, etc.)
    • json_serializer<U> (with U = uncvref_t<CompatibleType>) has a to_json(basic_json_t&, CompatibleType&&) method
    BasicJsonType:

    a type such that:

    • BasicJsonType is a basic_json type.
    • BasicJsonType has different template arguments than basic_json_t.
    U: uncvref_t<CompatibleType>"},{"location":"api/basic_json/basic_json/#parameters","title":"Parameters","text":"v (in) the type of the value to create val (in) the value to be forwarded to the respective constructor init (in) initializer list with JSON values type_deduction (in) internal parameter; when set to true, the type of the JSON value is deducted from the initializer list init; when set to false, the type provided via manual_type is forced. This mode is used by the functions array(initializer_list_t) and object(initializer_list_t). manual_type (in) internal parameter; when type_deduction is set to false, the created JSON value will use the provided type (only value_t::array and value_t::object are valid); when type_deduction is set to true, this parameter has no effect cnt (in) the number of JSON copies of val to create first (in) begin of the range to copy from (included) last (in) end of the range to copy from (excluded) other (in) the JSON value to copy/move"},{"location":"api/basic_json/basic_json/#exception-safety","title":"Exception safety","text":"
    1. Strong guarantee: if an exception is thrown, there are no changes to any JSON value.
    2. No-throw guarantee: this constructor never throws exceptions.
    3. Depends on the called constructor. For types directly supported by the library (i.e., all types for which no to_json() function was provided), strong guarantee holds: if an exception is thrown, there are no changes to any JSON value.
    4. Depends on the called constructor. For types directly supported by the library (i.e., all types for which no to_json() function was provided), strong guarantee holds: if an exception is thrown, there are no changes to any JSON value.
    5. Strong guarantee: if an exception is thrown, there are no changes to any JSON value.
    6. Strong guarantee: if an exception is thrown, there are no changes to any JSON value.
    7. Strong guarantee: if an exception is thrown, there are no changes to any JSON value.
    8. Strong guarantee: if an exception is thrown, there are no changes to any JSON value.
    9. No-throw guarantee: this constructor never throws exceptions.
    "},{"location":"api/basic_json/basic_json/#exceptions","title":"Exceptions","text":"
    1. (none)
    2. The function does not throw exceptions.
    3. (none)
    4. (none)
    5. The function can throw the following exceptions:
      • Throws type_error.301 if type_deduction is false, manual_type is value_t::object, but init contains an element which is not a pair whose first element is a string. In this case, the constructor could not create an object. If type_deduction would have been true, an array would have been created. See object(initializer_list_t) for an example.
    6. (none)
    7. The function can throw the following exceptions:
      • Throws invalid_iterator.201 if iterators first and last are not compatible (i.e., do not belong to the same JSON value). In this case, the range [first, last) is undefined.
      • Throws invalid_iterator.204 if iterators first and last belong to a primitive type (number, boolean, or string), but first does not point to the first element anymore. In this case, the range [first, last) is undefined. See example code below.
      • Throws invalid_iterator.206 if iterators first and last belong to a null value. In this case, the range [first, last) is undefined.
    8. (none)
    9. The function does not throw exceptions.
    "},{"location":"api/basic_json/basic_json/#complexity","title":"Complexity","text":"
    1. Constant.
    2. Constant.
    3. Usually linear in the size of the passed val, also depending on the implementation of the called to_json() method.
    4. Usually linear in the size of the passed val, also depending on the implementation of the called to_json() method.
    5. Linear in the size of the initializer list init.
    6. Linear in cnt.
    7. Linear in distance between first and last.
    8. Linear in the size of other.
    9. Constant.
    "},{"location":"api/basic_json/basic_json/#notes","title":"Notes","text":"
    • Overload 5:

      Empty initializer list

      When used without parentheses around an empty initializer list, basic_json() is called instead of this function, yielding the JSON null value.

    • Overload 7:

      Preconditions

      • Iterators first and last must be initialized. **This precondition is enforced with a runtime assertion.
      • Range [first, last) is valid. Usually, this precondition cannot be checked efficiently. Only certain edge cases are detected; see the description of the exceptions above. A violation of this precondition yields undefined behavior.

      Runtime assertion

      A precondition is enforced with a runtime assertion.

    • Overload 8:

      Postcondition

      *this == other

    • Overload 9:

      Postconditions

      • `*this has the same value as other before the call.
      • other is a JSON null value
    "},{"location":"api/basic_json/basic_json/#examples","title":"Examples","text":"Example: (1) create an empty value with a given type

    The following code shows the constructor for different value_t values.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create the different JSON values with default values\n    json j_null(json::value_t::null);\n    json j_boolean(json::value_t::boolean);\n    json j_number_integer(json::value_t::number_integer);\n    json j_number_float(json::value_t::number_float);\n    json j_object(json::value_t::object);\n    json j_array(json::value_t::array);\n    json j_string(json::value_t::string);\n\n    // serialize the JSON values\n    std::cout << j_null << '\\n';\n    std::cout << j_boolean << '\\n';\n    std::cout << j_number_integer << '\\n';\n    std::cout << j_number_float << '\\n';\n    std::cout << j_object << '\\n';\n    std::cout << j_array << '\\n';\n    std::cout << j_string << '\\n';\n}\n

    Output:

    null\nfalse\n0\n0.0\n{}\n[]\n\"\"\n
    Example: (2) create a null object

    The following code shows the constructor with and without a null pointer parameter.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // implicitly create a JSON null value\n    json j1;\n\n    // explicitly create a JSON null value\n    json j2(nullptr);\n\n    // serialize the JSON null value\n    std::cout << j1 << '\\n' << j2 << '\\n';\n}\n

    Output:

    null\nnull\n
    Example: (3) create a JSON value from compatible types

    The following code shows the constructor with several compatible types.

    #include <iostream>\n#include <deque>\n#include <list>\n#include <forward_list>\n#include <set>\n#include <unordered_map>\n#include <unordered_set>\n#include <valarray>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // ============\n    // object types\n    // ============\n\n    // create an object from an object_t value\n    json::object_t object_value = { {\"one\", 1}, {\"two\", 2} };\n    json j_object_t(object_value);\n\n    // create an object from std::map\n    std::map<std::string, int> c_map\n    {\n        {\"one\", 1}, {\"two\", 2}, {\"three\", 3}\n    };\n    json j_map(c_map);\n\n    // create an object from std::unordered_map\n    std::unordered_map<const char*, double> c_umap\n    {\n        {\"one\", 1.2}, {\"two\", 2.3}, {\"three\", 3.4}\n    };\n    json j_umap(c_umap);\n\n    // create an object from std::multimap\n    std::multimap<std::string, bool> c_mmap\n    {\n        {\"one\", true}, {\"two\", true}, {\"three\", false}, {\"three\", true}\n    };\n    json j_mmap(c_mmap); // only one entry for key \"three\" is used\n\n    // create an object from std::unordered_multimap\n    std::unordered_multimap<std::string, bool> c_ummap\n    {\n        {\"one\", true}, {\"two\", true}, {\"three\", false}, {\"three\", true}\n    };\n    json j_ummap(c_ummap); // only one entry for key \"three\" is used\n\n    // serialize the JSON objects\n    std::cout << j_object_t << '\\n';\n    std::cout << j_map << '\\n';\n    std::cout << j_umap << '\\n';\n    std::cout << j_mmap << '\\n';\n    std::cout << j_ummap << \"\\n\\n\";\n\n    // ===========\n    // array types\n    // ===========\n\n    // create an array from an array_t value\n    json::array_t array_value = {\"one\", \"two\", 3, 4.5, false};\n    json j_array_t(array_value);\n\n    // create an array from std::vector\n    std::vector<int> c_vector {1, 2, 3, 4};\n    json j_vec(c_vector);\n\n    // create an array from std::valarray\n    std::valarray<short> c_valarray {10, 9, 8, 7};\n    json j_valarray(c_valarray);\n\n    // create an array from std::deque\n    std::deque<double> c_deque {1.2, 2.3, 3.4, 5.6};\n    json j_deque(c_deque);\n\n    // create an array from std::list\n    std::list<bool> c_list {true, true, false, true};\n    json j_list(c_list);\n\n    // create an array from std::forward_list\n    std::forward_list<std::int64_t> c_flist {12345678909876, 23456789098765, 34567890987654, 45678909876543};\n    json j_flist(c_flist);\n\n    // create an array from std::array\n    std::array<unsigned long, 4> c_array {{1, 2, 3, 4}};\n    json j_array(c_array);\n\n    // create an array from std::set\n    std::set<std::string> c_set {\"one\", \"two\", \"three\", \"four\", \"one\"};\n    json j_set(c_set); // only one entry for \"one\" is used\n\n    // create an array from std::unordered_set\n    std::unordered_set<std::string> c_uset {\"one\", \"two\", \"three\", \"four\", \"one\"};\n    json j_uset(c_uset); // only one entry for \"one\" is used\n\n    // create an array from std::multiset\n    std::multiset<std::string> c_mset {\"one\", \"two\", \"one\", \"four\"};\n    json j_mset(c_mset); // both entries for \"one\" are used\n\n    // create an array from std::unordered_multiset\n    std::unordered_multiset<std::string> c_umset {\"one\", \"two\", \"one\", \"four\"};\n    json j_umset(c_umset); // both entries for \"one\" are used\n\n    // serialize the JSON arrays\n    std::cout << j_array_t << '\\n';\n    std::cout << j_vec << '\\n';\n    std::cout << j_valarray << '\\n';\n    std::cout << j_deque << '\\n';\n    std::cout << j_list << '\\n';\n    std::cout << j_flist << '\\n';\n    std::cout << j_array << '\\n';\n    std::cout << j_set << '\\n';\n    std::cout << j_uset << '\\n';\n    std::cout << j_mset << '\\n';\n    std::cout << j_umset << \"\\n\\n\";\n\n    // ============\n    // string types\n    // ============\n\n    // create string from a string_t value\n    json::string_t string_value = \"The quick brown fox jumps over the lazy dog.\";\n    json j_string_t(string_value);\n\n    // create a JSON string directly from a string literal\n    json j_string_literal(\"The quick brown fox jumps over the lazy dog.\");\n\n    // create string from std::string\n    std::string s_stdstring = \"The quick brown fox jumps over the lazy dog.\";\n    json j_stdstring(s_stdstring);\n\n    // serialize the JSON strings\n    std::cout << j_string_t << '\\n';\n    std::cout << j_string_literal << '\\n';\n    std::cout << j_stdstring << \"\\n\\n\";\n\n    // ============\n    // number types\n    // ============\n\n    // create a JSON number from number_integer_t\n    json::number_integer_t value_integer_t = -42;\n    json j_integer_t(value_integer_t);\n\n    // create a JSON number from number_unsigned_t\n    json::number_integer_t value_unsigned_t = 17;\n    json j_unsigned_t(value_unsigned_t);\n\n    // create a JSON number from an anonymous enum\n    enum { enum_value = 17 };\n    json j_enum(enum_value);\n\n    // create values of different integer types\n    short n_short = 42;\n    int n_int = -23;\n    long n_long = 1024;\n    int_least32_t n_int_least32_t = -17;\n    uint8_t n_uint8_t = 8;\n\n    // create (integer) JSON numbers\n    json j_short(n_short);\n    json j_int(n_int);\n    json j_long(n_long);\n    json j_int_least32_t(n_int_least32_t);\n    json j_uint8_t(n_uint8_t);\n\n    // create values of different floating-point types\n    json::number_float_t v_ok = 3.141592653589793;\n    json::number_float_t v_nan = NAN;\n    json::number_float_t v_infinity = INFINITY;\n\n    // create values of different floating-point types\n    float n_float = 42.23;\n    float n_float_nan = 1.0f / 0.0f;\n    double n_double = 23.42;\n\n    // create (floating point) JSON numbers\n    json j_ok(v_ok);\n    json j_nan(v_nan);\n    json j_infinity(v_infinity);\n    json j_float(n_float);\n    json j_float_nan(n_float_nan);\n    json j_double(n_double);\n\n    // serialize the JSON numbers\n    std::cout << j_integer_t << '\\n';\n    std::cout << j_unsigned_t << '\\n';\n    std::cout << j_enum << '\\n';\n    std::cout << j_short << '\\n';\n    std::cout << j_int << '\\n';\n    std::cout << j_long << '\\n';\n    std::cout << j_int_least32_t << '\\n';\n    std::cout << j_uint8_t << '\\n';\n    std::cout << j_ok << '\\n';\n    std::cout << j_nan << '\\n';\n    std::cout << j_infinity << '\\n';\n    std::cout << j_float << '\\n';\n    std::cout << j_float_nan << '\\n';\n    std::cout << j_double << \"\\n\\n\";\n\n    // =============\n    // boolean types\n    // =============\n\n    // create boolean values\n    json j_truth = true;\n    json j_falsity = false;\n\n    // serialize the JSON booleans\n    std::cout << j_truth << '\\n';\n    std::cout << j_falsity << '\\n';\n}\n

    Output:

    {\"one\":1,\"two\":2}\n{\"one\":1,\"three\":3,\"two\":2}\n{\"one\":1.2,\"three\":3.4,\"two\":2.3}\n{\"one\":true,\"three\":false,\"two\":true}\n{\"one\":true,\"three\":false,\"two\":true}\n\n[\"one\",\"two\",3,4.5,false]\n[1,2,3,4]\n[10,9,8,7]\n[1.2,2.3,3.4,5.6]\n[true,true,false,true]\n[12345678909876,23456789098765,34567890987654,45678909876543]\n[1,2,3,4]\n[\"four\",\"one\",\"three\",\"two\"]\n[\"four\",\"three\",\"two\",\"one\"]\n[\"four\",\"one\",\"one\",\"two\"]\n[\"four\",\"two\",\"one\",\"one\"]\n\n\"The quick brown fox jumps over the lazy dog.\"\n\"The quick brown fox jumps over the lazy dog.\"\n\"The quick brown fox jumps over the lazy dog.\"\n\n-42\n17\n17\n42\n-23\n1024\n-17\n8\n3.141592653589793\nnull\nnull\n42.22999954223633\nnull\n23.42\n\ntrue\nfalse\n

    Note the output is platform-dependent.

    Example: (5) create a container (array or object) from an initializer list

    The example below shows how JSON values are created from initializer lists.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_empty_init_list = json({});\n    json j_object = { {\"one\", 1}, {\"two\", 2} };\n    json j_array = {1, 2, 3, 4};\n    json j_nested_object = { {\"one\", {1}}, {\"two\", {1, 2}} };\n    json j_nested_array = { {{1}, \"one\"}, {{1, 2}, \"two\"} };\n\n    // serialize the JSON value\n    std::cout << j_empty_init_list << '\\n';\n    std::cout << j_object << '\\n';\n    std::cout << j_array << '\\n';\n    std::cout << j_nested_object << '\\n';\n    std::cout << j_nested_array << '\\n';\n}\n

    Output:

    {}\n{\"one\":1,\"two\":2}\n[1,2,3,4]\n{\"one\":[1],\"two\":[1,2]}\n[[[1],\"one\"],[[1,2],\"two\"]]\n
    Example: (6) construct an array with count copies of given value

    The following code shows examples for creating arrays with several copies of a given value.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create an array by creating copies of a JSON value\n    json value = \"Hello\";\n    json array_0 = json(0, value);\n    json array_1 = json(1, value);\n    json array_5 = json(5, value);\n\n    // serialize the JSON arrays\n    std::cout << array_0 << '\\n';\n    std::cout << array_1 << '\\n';\n    std::cout << array_5 << '\\n';\n}\n

    Output:

    []\n[\"Hello\"]\n[\"Hello\",\"Hello\",\"Hello\",\"Hello\",\"Hello\"]\n
    Example: (7) construct a JSON container given an iterator range

    The example below shows several ways to create JSON values by specifying a subrange with iterators.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_array = {\"alpha\", \"bravo\", \"charly\", \"delta\", \"easy\"};\n    json j_number = 42;\n    json j_object = {{\"one\", \"eins\"}, {\"two\", \"zwei\"}};\n\n    // create copies using iterators\n    json j_array_range(j_array.begin() + 1, j_array.end() - 2);\n    json j_number_range(j_number.begin(), j_number.end());\n    json j_object_range(j_object.begin(), j_object.find(\"two\"));\n\n    // serialize the values\n    std::cout << j_array_range << '\\n';\n    std::cout << j_number_range << '\\n';\n    std::cout << j_object_range << '\\n';\n\n    // example for an exception\n    try\n    {\n        json j_invalid(j_number.begin() + 1, j_number.end());\n    }\n    catch (const json::invalid_iterator& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    [\"bravo\",\"charly\"]\n42\n{\"one\":\"eins\"}\n[json.exception.invalid_iterator.204] iterators out of range\n
    Example: (8) copy constructor

    The following code shows an example for the copy constructor.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON array\n    json j1 = {\"one\", \"two\", 3, 4.5, false};\n\n    // create a copy\n    json j2(j1);\n\n    // serialize the JSON array\n    std::cout << j1 << \" = \" << j2 << '\\n';\n    std::cout << std::boolalpha << (j1 == j2) << '\\n';\n}\n

    Output:

    [\"one\",\"two\",3,4.5,false] = [\"one\",\"two\",3,4.5,false]\ntrue\n
    Example: (9) move constructor

    The code below shows the move constructor explicitly called via std::move.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON value\n    json a = 23;\n\n    // move contents of a to b\n    json b(std::move(a));\n\n    // serialize the JSON arrays\n    std::cout << a << '\\n';\n    std::cout << b << '\\n';\n}\n

    Output:

    null\n23\n
    "},{"location":"api/basic_json/basic_json/#version-history","title":"Version history","text":"
    1. Since version 1.0.0.
    2. Since version 1.0.0.
    3. Since version 2.1.0.
    4. Since version 3.2.0.
    5. Since version 1.0.0.
    6. Since version 1.0.0.
    7. Since version 1.0.0.
    8. Since version 1.0.0.
    9. Since version 1.0.0.
    "},{"location":"api/basic_json/begin/","title":"nlohmann::basic_json::begin","text":"
    iterator begin() noexcept;\nconst_iterator begin() const noexcept;\n

    Returns an iterator to the first element.

    "},{"location":"api/basic_json/begin/#return-value","title":"Return value","text":"

    iterator to the first element

    "},{"location":"api/basic_json/begin/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/begin/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/begin/#examples","title":"Examples","text":"Example

    The following code shows an example for begin().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create an array value\n    json array = {1, 2, 3, 4, 5};\n\n    // get an iterator to the first element\n    json::iterator it = array.begin();\n\n    // serialize the element that the iterator points to\n    std::cout << *it << '\\n';\n}\n

    Output:

    1\n
    "},{"location":"api/basic_json/begin/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/binary/","title":"nlohmann::basic_json::binary","text":"
    // (1)\nstatic basic_json binary(const typename binary_t::container_type& init);\nstatic basic_json binary(typename binary_t::container_type&& init);\n\n// (2)\nstatic basic_json binary(const typename binary_t::container_type& init,\n                         std::uint8_t subtype);\nstatic basic_json binary(typename binary_t::container_type&& init,\n                         std::uint8_t subtype);\n
    1. Creates a JSON binary array value from a given binary container.
    2. Creates a JSON binary array value from a given binary container with subtype.

    Binary values are part of various binary formats, such as CBOR, MessagePack, and BSON. This constructor is used to create a value for serialization to those formats.

    "},{"location":"api/basic_json/binary/#parameters","title":"Parameters","text":"init (in) container containing bytes to use as binary type subtype (in) subtype to use in CBOR, MessagePack, and BSON"},{"location":"api/basic_json/binary/#return-value","title":"Return value","text":"

    JSON binary array value

    "},{"location":"api/basic_json/binary/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/binary/#complexity","title":"Complexity","text":"

    Linear in the size of init; constant for typename binary_t::container_type&& init versions.

    "},{"location":"api/basic_json/binary/#notes","title":"Notes","text":"

    Note, this function exists because of the difficulty in correctly specifying the correct template overload in the standard value ctor, as both JSON arrays and JSON binary arrays are backed with some form of a std::vector. Because JSON binary arrays are a non-standard extension it was decided that it would be best to prevent automatic initialization of a binary array type, for backwards compatibility and so it does not happen on accident.

    "},{"location":"api/basic_json/binary/#examples","title":"Examples","text":"Example

    The following code shows how to create a binary value.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a binary vector\n    std::vector<std::uint8_t> vec = {0xCA, 0xFE, 0xBA, 0xBE};\n\n    // create a binary JSON value with subtype 42\n    json j = json::binary(vec, 42);\n\n    // output type and subtype\n    std::cout << \"type: \" << j.type_name() << \", subtype: \" << j.get_binary().subtype() << std::endl;\n}\n

    Output:

    type: binary, subtype: 42\n
    "},{"location":"api/basic_json/binary/#version-history","title":"Version history","text":"
    • Added in version 3.8.0.
    "},{"location":"api/basic_json/binary_t/","title":"nlohmann::basic_json::binary_t","text":"
    using binary_t = byte_container_with_subtype<BinaryType>;\n

    This type is a type designed to carry binary data that appears in various serialized formats, such as CBOR's Major Type 2, MessagePack's bin, and BSON's generic binary subtype. This type is NOT a part of standard JSON and exists solely for compatibility with these binary types. As such, it is simply defined as an ordered sequence of zero or more byte values.

    Additionally, as an implementation detail, the subtype of the binary data is carried around as a std::uint64_t, which is compatible with both of the binary data formats that use binary subtyping, (though the specific numbering is incompatible with each other, and it is up to the user to translate between them). The subtype is added to BinaryType via the helper type byte_container_with_subtype.

    CBOR's RFC 7049 describes this type as:

    Major type 2: a byte string. The string's length in bytes is represented following the rules for positive integers (major type 0).

    MessagePack's documentation on the bin type family describes this type as:

    Bin format family stores a byte array in 2, 3, or 5 bytes of extra bytes in addition to the size of the byte array.

    BSON's specifications describe several binary types; however, this type is intended to represent the generic binary type which has the description:

    Generic binary subtype - This is the most commonly used binary subtype and should be the 'default' for drivers and tools.

    None of these impose any limitations on the internal representation other than the basic unit of storage be some type of array whose parts are decomposable into bytes.

    The default representation of this binary format is a std::vector<std::uint8_t>, which is a very common way to represent a byte array in modern C++.

    "},{"location":"api/basic_json/binary_t/#template-parameters","title":"Template parameters","text":"BinaryType container type to store arrays"},{"location":"api/basic_json/binary_t/#notes","title":"Notes","text":""},{"location":"api/basic_json/binary_t/#default-type","title":"Default type","text":"

    The default values for BinaryType is std::vector<std::uint8_t>.

    "},{"location":"api/basic_json/binary_t/#storage","title":"Storage","text":"

    Binary Arrays are stored as pointers in a basic_json type. That is, for any access to array values, a pointer of the type binary_t* must be dereferenced.

    "},{"location":"api/basic_json/binary_t/#notes-on-subtypes","title":"Notes on subtypes","text":"
    • CBOR

      • Binary values are represented as byte strings. Subtypes are written as tags.
    • MessagePack

      • If a subtype is given and the binary array contains exactly 1, 2, 4, 8, or 16 elements, the fixext family (fixext1, fixext2, fixext4, fixext8) is used. For other sizes, the ext family (ext8, ext16, ext32) is used. The subtype is then added as signed 8-bit integer.
      • If no subtype is given, the bin family (bin8, bin16, bin32) is used.
    • BSON

      • If a subtype is given, it is used and added as unsigned 8-bit integer.
      • If no subtype is given, the generic binary subtype 0x00 is used.
    "},{"location":"api/basic_json/binary_t/#examples","title":"Examples","text":"Example

    The following code shows that binary_t is by default, a typedef to nlohmann::byte_container_with_subtype<std::vector<std::uint8_t>>.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::boolalpha << std::is_same<nlohmann::byte_container_with_subtype<std::vector<std::uint8_t>>, json::binary_t>::value << std::endl;\n}\n

    Output:

    true\n
    "},{"location":"api/basic_json/binary_t/#see-also","title":"See also","text":"
    • byte_container_with_subtype
    "},{"location":"api/basic_json/binary_t/#version-history","title":"Version history","text":"
    • Added in version 3.8.0. Changed type of subtype to std::uint64_t in version 3.10.0.
    "},{"location":"api/basic_json/boolean_t/","title":"nlohmann::basic_json::boolean_t","text":"
    using boolean_t = BooleanType;\n

    The type used to store JSON booleans.

    RFC 8259 implicitly describes a boolean as a type which differentiates the two literals true and false.

    To store objects in C++, a type is defined by the template parameter BooleanType which chooses the type to use.

    "},{"location":"api/basic_json/boolean_t/#notes","title":"Notes","text":""},{"location":"api/basic_json/boolean_t/#default-type","title":"Default type","text":"

    With the default values for BooleanType (bool), the default value for boolean_t is bool.

    "},{"location":"api/basic_json/boolean_t/#storage","title":"Storage","text":"

    Boolean values are stored directly inside a basic_json type.

    "},{"location":"api/basic_json/boolean_t/#examples","title":"Examples","text":"Example

    The following code shows that boolean_t is by default, a typedef to bool.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::boolalpha << std::is_same<bool, json::boolean_t>::value << std::endl;\n}\n

    Output:

    true\n
    "},{"location":"api/basic_json/boolean_t/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/cbegin/","title":"nlohmann::basic_json::cbegin","text":"
    const_iterator cbegin() const noexcept;\n

    Returns an iterator to the first element.

    "},{"location":"api/basic_json/cbegin/#return-value","title":"Return value","text":"

    iterator to the first element

    "},{"location":"api/basic_json/cbegin/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/cbegin/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/cbegin/#examples","title":"Examples","text":"Example

    The following code shows an example for cbegin().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create an array value\n    const json array = {1, 2, 3, 4, 5};\n\n    // get an iterator to the first element\n    json::const_iterator it = array.cbegin();\n\n    // serialize the element that the iterator points to\n    std::cout << *it << '\\n';\n}\n

    Output:

    1\n
    "},{"location":"api/basic_json/cbegin/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/cbor_tag_handler_t/","title":"nlohmann::basic_json::cbor_tag_handler_t","text":"
    enum class cbor_tag_handler_t\n{\n    error,\n    ignore,\n    store\n};\n

    This enumeration is used in the from_cbor function to choose how to treat tags:

    error throw a parse_error exception in case of a tag ignore ignore tags store store tagged values as binary container with subtype (for bytes 0xd8..0xdb)"},{"location":"api/basic_json/cbor_tag_handler_t/#examples","title":"Examples","text":"Example

    The example below shows how the different values of the cbor_tag_handler_t influence the behavior of from_cbor when reading a tagged byte string.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // tagged byte string\n    std::vector<std::uint8_t> vec = {{0xd8, 0x42, 0x44, 0xcA, 0xfe, 0xba, 0xbe}};\n\n    // cbor_tag_handler_t::error throws\n    try\n    {\n        auto b_throw_on_tag = json::from_cbor(vec, true, true, json::cbor_tag_handler_t::error);\n    }\n    catch (const json::parse_error& e)\n    {\n        std::cout << e.what() << std::endl;\n    }\n\n    // cbor_tag_handler_t::ignore ignores the tag\n    auto b_ignore_tag = json::from_cbor(vec, true, true, json::cbor_tag_handler_t::ignore);\n    std::cout << b_ignore_tag << std::endl;\n\n    // cbor_tag_handler_t::store stores the tag as binary subtype\n    auto b_store_tag = json::from_cbor(vec, true, true, json::cbor_tag_handler_t::store);\n    std::cout << b_store_tag << std::endl;\n}\n

    Output:

    [json.exception.parse_error.112] parse error at byte 1: syntax error while parsing CBOR value: invalid byte: 0xD8\n{\"bytes\":[202,254,186,190],\"subtype\":null}\n{\"bytes\":[202,254,186,190],\"subtype\":66}\n
    "},{"location":"api/basic_json/cbor_tag_handler_t/#version-history","title":"Version history","text":"
    • Added in version 3.9.0. Added value store in 3.10.0.
    "},{"location":"api/basic_json/cend/","title":"nlohmann::basic_json::cend","text":"
    const_iterator cend() const noexcept;\n

    Returns an iterator to one past the last element.

    "},{"location":"api/basic_json/cend/#return-value","title":"Return value","text":"

    iterator one past the last element

    "},{"location":"api/basic_json/cend/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/cend/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/cend/#examples","title":"Examples","text":"Example

    The following code shows an example for cend().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create an array value\n    json array = {1, 2, 3, 4, 5};\n\n    // get an iterator to one past the last element\n    json::const_iterator it = array.cend();\n\n    // decrement the iterator to point to the last element\n    --it;\n\n    // serialize the element that the iterator points to\n    std::cout << *it << '\\n';\n}\n

    Output:

    5\n
    "},{"location":"api/basic_json/cend/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/clear/","title":"nlohmann::basic_json::clear","text":"
    void clear() noexcept;\n

    Clears the content of a JSON value and resets it to the default value as if basic_json(value_t) would have been called with the current value type from type():

    Value type initial value null null boolean false string \"\" number 0 binary An empty byte vector object {} array []

    Has the same effect as calling

    *this = basic_json(type());\n
    "},{"location":"api/basic_json/clear/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/basic_json/clear/#complexity","title":"Complexity","text":"

    Linear in the size of the JSON value.

    "},{"location":"api/basic_json/clear/#notes","title":"Notes","text":"

    All iterators, pointers and references related to this container are invalidated.

    "},{"location":"api/basic_json/clear/#examples","title":"Examples","text":"Example

    The example below shows the effect of clear() to different JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n\n    // call clear()\n    j_null.clear();\n    j_boolean.clear();\n    j_number_integer.clear();\n    j_number_float.clear();\n    j_object.clear();\n    j_array.clear();\n    j_string.clear();\n\n    // serialize the cleared values()\n    std::cout << j_null << '\\n';\n    std::cout << j_boolean << '\\n';\n    std::cout << j_number_integer << '\\n';\n    std::cout << j_number_float << '\\n';\n    std::cout << j_object << '\\n';\n    std::cout << j_array << '\\n';\n    std::cout << j_string << '\\n';\n}\n

    Output:

    null\nfalse\n0\n0.0\n{}\n[]\n\"\"\n
    "},{"location":"api/basic_json/clear/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Added support for binary types in version 3.8.0.
    "},{"location":"api/basic_json/contains/","title":"nlohmann::basic_json::contains","text":"
    // (1)\nbool contains(const typename object_t::key_type& key) const;\n\n// (2)\ntemplate<typename KeyType>\nbool contains(KeyType&& key) const;\n\n// (3)\nbool contains(const json_pointer& ptr) const;\n
    1. Check whether an element exists in a JSON object with a key equivalent to key. If the element is not found or the JSON value is not an object, false is returned.
    2. See 1. This overload is only available if KeyType is comparable with typename object_t::key_type and typename object_comparator_t::is_transparent denotes a type.
    3. Check whether the given JSON pointer ptr can be resolved in the current JSON value.
    "},{"location":"api/basic_json/contains/#template-parameters","title":"Template parameters","text":"KeyType A type for an object key other than json_pointer that is comparable with string_t using object_comparator_t. This can also be a string view (C++17)."},{"location":"api/basic_json/contains/#parameters","title":"Parameters","text":"key (in) key value to check its existence. ptr (in) JSON pointer to check its existence."},{"location":"api/basic_json/contains/#return-value","title":"Return value","text":"
    1. true if an element with specified key exists. If no such element with such key is found or the JSON value is not an object, false is returned.
    2. See 1.
    3. true if the JSON pointer can be resolved to a stored value, false otherwise.
    "},{"location":"api/basic_json/contains/#exception-safety","title":"Exception safety","text":"

    Strong exception safety: if an exception occurs, the original value stays intact.

    "},{"location":"api/basic_json/contains/#exceptions","title":"Exceptions","text":"
    1. The function does not throw exceptions.
    2. The function does not throw exceptions.
    3. The function can throw the following exceptions:
      • Throws parse_error.106 if an array index begins with 0.
      • Throws parse_error.109 if an array index was not a number.
    "},{"location":"api/basic_json/contains/#complexity","title":"Complexity","text":"

    Logarithmic in the size of the JSON object.

    "},{"location":"api/basic_json/contains/#notes","title":"Notes","text":"
    • This method always returns false when executed on a JSON type that is not an object.
    • This method can be executed on any JSON value type.

    Postconditions

    If j.contains(x) returns true for a key or JSON pointer x, then it is safe to call j[x].

    "},{"location":"api/basic_json/contains/#examples","title":"Examples","text":"Example: (1) check with key

    The example shows how contains() is used.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create some JSON values\n    json j_object = R\"( {\"key\": \"value\"} )\"_json;\n    json j_array = R\"( [1, 2, 3] )\"_json;\n\n    // call contains\n    std::cout << std::boolalpha <<\n              \"j_object contains 'key': \" << j_object.contains(\"key\") << '\\n' <<\n              \"j_object contains 'another': \" << j_object.contains(\"another\") << '\\n' <<\n              \"j_array contains 'key': \" << j_array.contains(\"key\") << std::endl;\n}\n

    Output:

    j_object contains 'key': true\nj_object contains 'another': false\nj_array contains 'key': false\n
    Example: (2) check with key using string_view

    The example shows how contains() is used.

    #include <iostream>\n#include <string_view>\n#include <nlohmann/json.hpp>\n\nusing namespace std::string_view_literals;\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create some JSON values\n    json j_object = R\"( {\"key\": \"value\"} )\"_json;\n    json j_array = R\"( [1, 2, 3] )\"_json;\n\n    // call contains\n    std::cout << std::boolalpha <<\n              \"j_object contains 'key': \" << j_object.contains(\"key\"sv) << '\\n' <<\n              \"j_object contains 'another': \" << j_object.contains(\"another\"sv) << '\\n' <<\n              \"j_array contains 'key': \" << j_array.contains(\"key\"sv) << std::endl;\n}\n

    Output:

    j_object contains 'key': true\nj_object contains 'another': false\nj_array contains 'key': false\n
    Example: (3) check with JSON pointer

    The example shows how contains() is used.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create a JSON value\n    json j =\n    {\n        {\"number\", 1}, {\"string\", \"foo\"}, {\"array\", {1, 2}}\n    };\n\n    std::cout << std::boolalpha\n              << j.contains(\"/number\"_json_pointer) << '\\n'\n              << j.contains(\"/string\"_json_pointer) << '\\n'\n              << j.contains(\"/array\"_json_pointer) << '\\n'\n              << j.contains(\"/array/1\"_json_pointer) << '\\n'\n              << j.contains(\"/array/-\"_json_pointer) << '\\n'\n              << j.contains(\"/array/4\"_json_pointer) << '\\n'\n              << j.contains(\"/baz\"_json_pointer) << std::endl;\n\n    try\n    {\n        // try to use an array index with leading '0'\n        j.contains(\"/array/01\"_json_pointer);\n    }\n    catch (const json::parse_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    try\n    {\n        // try to use an array index that is not a number\n        j.contains(\"/array/one\"_json_pointer);\n    }\n    catch (const json::parse_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    true\ntrue\ntrue\ntrue\nfalse\nfalse\nfalse\n
    "},{"location":"api/basic_json/contains/#version-history","title":"Version history","text":"
    1. Added in version 3.11.0.
    2. Added in version 3.6.0. Extended template KeyType to support comparable types in version 3.11.0.
    3. Added in version 3.7.0.
    "},{"location":"api/basic_json/count/","title":"nlohmann::basic_json::count","text":"
    // (1)\nsize_type count(const typename object_t::key_type& key) const;\n\n// (2)\ntemplate<typename KeyType>\nsize_type count(KeyType&& key) const;\n
    1. Returns the number of elements with key key. If ObjectType is the default std::map type, the return value will always be 0 (key was not found) or 1 (key was found).
    2. See 1. This overload is only available if KeyType is comparable with typename object_t::key_type and typename object_comparator_t::is_transparent denotes a type.
    "},{"location":"api/basic_json/count/#template-parameters","title":"Template parameters","text":"KeyType A type for an object key other than json_pointer that is comparable with string_t using object_comparator_t. This can also be a string view (C++17)."},{"location":"api/basic_json/count/#parameters","title":"Parameters","text":"key (in) key value of the element to count."},{"location":"api/basic_json/count/#return-value","title":"Return value","text":"

    Number of elements with key key. If the JSON value is not an object, the return value will be 0.

    "},{"location":"api/basic_json/count/#exception-safety","title":"Exception safety","text":"

    Strong exception safety: if an exception occurs, the original value stays intact.

    "},{"location":"api/basic_json/count/#complexity","title":"Complexity","text":"

    Logarithmic in the size of the JSON object.

    "},{"location":"api/basic_json/count/#notes","title":"Notes","text":"

    This method always returns 0 when executed on a JSON type that is not an object.

    "},{"location":"api/basic_json/count/#examples","title":"Examples","text":"Example: (1) count number of elements

    The example shows how count() is used.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n\n    // call count()\n    auto count_two = j_object.count(\"two\");\n    auto count_three = j_object.count(\"three\");\n\n    // print values\n    std::cout << \"number of elements with key \\\"two\\\": \" << count_two << '\\n';\n    std::cout << \"number of elements with key \\\"three\\\": \" << count_three << '\\n';\n}\n

    Output:

    number of elements with key \"two\": 1\nnumber of elements with key \"three\": 0\n
    Example: (2) count number of elements using string_view

    The example shows how count() is used.

    #include <iostream>\n#include <string_view>\n#include <nlohmann/json.hpp>\n\nusing namespace std::string_view_literals;\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n\n    // call count()\n    auto count_two = j_object.count(\"two\"sv);\n    auto count_three = j_object.count(\"three\"sv);\n\n    // print values\n    std::cout << \"number of elements with key \\\"two\\\": \" << count_two << '\\n';\n    std::cout << \"number of elements with key \\\"three\\\": \" << count_three << '\\n';\n}\n

    Output:

    number of elements with key \"two\": 1\nnumber of elements with key \"three\": 0\n
    "},{"location":"api/basic_json/count/#version-history","title":"Version history","text":"
    1. Added in version 3.11.0.
    2. Added in version 1.0.0. Changed parameter key type to KeyType&& in version 3.11.0.
    "},{"location":"api/basic_json/crbegin/","title":"nlohmann::basic_json::crbegin","text":"
    const_reverse_iterator crbegin() const noexcept;\n

    Returns an iterator to the reverse-beginning; that is, the last element.

    "},{"location":"api/basic_json/crbegin/#return-value","title":"Return value","text":"

    reverse iterator to the first element

    "},{"location":"api/basic_json/crbegin/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/crbegin/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/crbegin/#examples","title":"Examples","text":"Example

    The following code shows an example for crbegin().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create an array value\n    json array = {1, 2, 3, 4, 5};\n\n    // get an iterator to the reverse-beginning\n    json::const_reverse_iterator it = array.crbegin();\n\n    // serialize the element that the iterator points to\n    std::cout << *it << '\\n';\n}\n

    Output:

    5\n
    "},{"location":"api/basic_json/crbegin/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/crend/","title":"nlohmann::basic_json::crend","text":"
    const_reverse_iterator crend() const noexcept;\n

    Returns an iterator to the reverse-end; that is, one before the first element. This element acts as a placeholder, attempting to access it results in undefined behavior.

    "},{"location":"api/basic_json/crend/#return-value","title":"Return value","text":"

    reverse iterator to the element following the last element

    "},{"location":"api/basic_json/crend/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/crend/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/crend/#examples","title":"Examples","text":"Example

    The following code shows an example for eend().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create an array value\n    json array = {1, 2, 3, 4, 5};\n\n    // get an iterator to the reverse-end\n    json::const_reverse_iterator it = array.crend();\n\n    // increment the iterator to point to the first element\n    --it;\n\n    // serialize the element that the iterator points to\n    std::cout << *it << '\\n';\n}\n

    Output:

    1\n
    "},{"location":"api/basic_json/crend/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/default_object_comparator_t/","title":"nlohmann::basic_json::default_object_comparator_t","text":"
    using default_object_comparator_t = std::less<StringType>;  // until C++14\n\nusing default_object_comparator_t = std::less<>;            // since C++14\n

    The default comparator used by object_t.

    Since C++14 a transparent comparator is used which prevents unnecessary string construction when looking up a key in an object.

    The actual comparator used depends on object_t and can be obtained via object_comparator_t.

    "},{"location":"api/basic_json/default_object_comparator_t/#examples","title":"Examples","text":"Example

    The example below demonstrates the default comparator.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::boolalpha\n              << \"one < two : \" << json::default_object_comparator_t{}(\"one\", \"two\") << \"\\n\"\n              << \"three < four : \" << json::default_object_comparator_t{}(\"three\", \"four\") << std::endl;\n}\n

    Output:

    one < two : true\nthree < four : false\n
    "},{"location":"api/basic_json/default_object_comparator_t/#version-history","title":"Version history","text":"
    • Added in version 3.11.0.
    "},{"location":"api/basic_json/diff/","title":"nlohmann::basic_json::diff","text":"
    static basic_json diff(const basic_json& source,\n                       const basic_json& target);\n

    Creates a JSON Patch so that value source can be changed into the value target by calling patch function.

    For two JSON values source and target, the following code yields always true:

    source.patch(diff(source, target)) == target;\n

    "},{"location":"api/basic_json/diff/#parameters","title":"Parameters","text":"source (in) JSON value to compare from target (in) JSON value to compare against"},{"location":"api/basic_json/diff/#return-value","title":"Return value","text":"

    a JSON patch to convert the source to target

    "},{"location":"api/basic_json/diff/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/diff/#complexity","title":"Complexity","text":"

    Linear in the lengths of source and target.

    "},{"location":"api/basic_json/diff/#notes","title":"Notes","text":"

    Currently, only remove, add, and replace operations are generated.

    "},{"location":"api/basic_json/diff/#examples","title":"Examples","text":"Example

    The following code shows how a JSON patch is created as a diff for two JSON values.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // the source document\n    json source = R\"(\n        {\n            \"baz\": \"qux\",\n            \"foo\": \"bar\"\n        }\n    )\"_json;\n\n    // the target document\n    json target = R\"(\n        {\n            \"baz\": \"boo\",\n            \"hello\": [\n                \"world\"\n            ]\n        }\n    )\"_json;\n\n    // create the patch\n    json patch = json::diff(source, target);\n\n    // roundtrip\n    json patched_source = source.patch(patch);\n\n    // output patch and roundtrip result\n    std::cout << std::setw(4) << patch << \"\\n\\n\"\n              << std::setw(4) << patched_source << std::endl;\n}\n

    Output:

    [\n    {\n        \"op\": \"replace\",\n        \"path\": \"/baz\",\n        \"value\": \"boo\"\n    },\n    {\n        \"op\": \"remove\",\n        \"path\": \"/foo\"\n    },\n    {\n        \"op\": \"add\",\n        \"path\": \"/hello\",\n        \"value\": [\n            \"world\"\n        ]\n    }\n]\n\n{\n    \"baz\": \"boo\",\n    \"hello\": [\n        \"world\"\n    ]\n}\n
    "},{"location":"api/basic_json/diff/#see-also","title":"See also","text":"
    • RFC 6902 (JSON Patch)
    "},{"location":"api/basic_json/diff/#version-history","title":"Version history","text":"
    • Added in version 2.0.0.
    "},{"location":"api/basic_json/dump/","title":"nlohmann::basic_json::dump","text":"
    string_t dump(const int indent = -1,\n              const char indent_char = ' ',\n              const bool ensure_ascii = false,\n              const error_handler_t error_handler = error_handler_t::strict) const;\n

    Serialization function for JSON values. The function tries to mimic Python's json.dumps() function, and currently supports its indent and ensure_ascii parameters.

    "},{"location":"api/basic_json/dump/#parameters","title":"Parameters","text":"indent (in) If indent is nonnegative, then array elements and object members will be pretty-printed with that indent level. An indent level of 0 will only insert newlines. -1 (the default) selects the most compact representation. indent_char (in) The character to use for indentation if indent is greater than 0. The default is (space). ensure_ascii (in) If ensure_ascii is true, all non-ASCII characters in the output are escaped with \\uXXXX sequences, and the result consists of ASCII characters only. error_handler (in) how to react on decoding errors; there are three possible values (see error_handler_t: strict (throws and exception in case a decoding error occurs; default), replace (replace invalid UTF-8 sequences with U+FFFD), and ignore (ignore invalid UTF-8 sequences during serialization; all bytes are copied to the output unchanged))."},{"location":"api/basic_json/dump/#return-value","title":"Return value","text":"

    string containing the serialization of the JSON value

    "},{"location":"api/basic_json/dump/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes to any JSON value.

    "},{"location":"api/basic_json/dump/#exceptions","title":"Exceptions","text":"

    Throws type_error.316 if a string stored inside the JSON value is not UTF-8 encoded and error_handler is set to strict

    "},{"location":"api/basic_json/dump/#complexity","title":"Complexity","text":"

    Linear.

    "},{"location":"api/basic_json/dump/#notes","title":"Notes","text":"

    Binary values are serialized as object containing two keys:

    • \"bytes\": an array of bytes as integers
    • \"subtype\": the subtype as integer or null if the binary has no subtype
    "},{"location":"api/basic_json/dump/#examples","title":"Examples","text":"Example

    The following example shows the effect of different indent, indent_char, and ensure_ascii parameters to the result of the serialization.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hell\u00f6 \ud83d\ude00!\";\n\n    // call dump()\n    std::cout << \"objects:\" << '\\n'\n              << j_object.dump() << \"\\n\\n\"\n              << j_object.dump(-1) << \"\\n\\n\"\n              << j_object.dump(0) << \"\\n\\n\"\n              << j_object.dump(4) << \"\\n\\n\"\n              << j_object.dump(1, '\\t') << \"\\n\\n\";\n\n    std::cout << \"arrays:\" << '\\n'\n              << j_array.dump() << \"\\n\\n\"\n              << j_array.dump(-1) << \"\\n\\n\"\n              << j_array.dump(0) << \"\\n\\n\"\n              << j_array.dump(4) << \"\\n\\n\"\n              << j_array.dump(1, '\\t') << \"\\n\\n\";\n\n    std::cout << \"strings:\" << '\\n'\n              << j_string.dump() << '\\n'\n              << j_string.dump(-1, ' ', true) << '\\n';\n\n    // create JSON value with invalid UTF-8 byte sequence\n    json j_invalid = \"\u00e4\\xA9\u00fc\";\n    try\n    {\n        std::cout << j_invalid.dump() << std::endl;\n    }\n    catch (const json::type_error& e)\n    {\n        std::cout << e.what() << std::endl;\n    }\n\n    std::cout << \"string with replaced invalid characters: \"\n              << j_invalid.dump(-1, ' ', false, json::error_handler_t::replace)\n              << \"\\nstring with ignored invalid characters: \"\n              << j_invalid.dump(-1, ' ', false, json::error_handler_t::ignore)\n              << '\\n';\n}\n

    Output:

    objects:\n{\"one\":1,\"two\":2}\n\n{\"one\":1,\"two\":2}\n\n{\n\"one\": 1,\n\"two\": 2\n}\n\n{\n    \"one\": 1,\n    \"two\": 2\n}\n\n{\n    \"one\": 1,\n    \"two\": 2\n}\n\narrays:\n[1,2,4,8,16]\n\n[1,2,4,8,16]\n\n[\n1,\n2,\n4,\n8,\n16\n]\n\n[\n    1,\n    2,\n    4,\n    8,\n    16\n]\n\n[\n    1,\n    2,\n    4,\n    8,\n    16\n]\n\nstrings:\n\"Hell\u00f6 \ud83d\ude00!\"\n\"Hell\\u00f6 \\ud83d\\ude00!\"\n[json.exception.type_error.316] invalid UTF-8 byte at index 2: 0xA9\nstring with replaced invalid characters: \"\u00e4\ufffd\u00fc\"\nstring with ignored invalid characters: \"\u00e4\u00fc\"\n
    "},{"location":"api/basic_json/dump/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Indentation character indent_char, option ensure_ascii and exceptions added in version 3.0.0.
    • Error handlers added in version 3.4.0.
    • Serialization of binary values added in version 3.8.0.
    "},{"location":"api/basic_json/emplace/","title":"nlohmann::basic_json::emplace","text":"
    template<class... Args>\nstd::pair<iterator, bool> emplace(Args&& ... args);\n

    Inserts a new element into a JSON object constructed in-place with the given args if there is no element with the key in the container. If the function is called on a JSON null value, an empty object is created before appending the value created from args.

    "},{"location":"api/basic_json/emplace/#template-parameters","title":"Template parameters","text":"Args compatible types to create a basic_json object"},{"location":"api/basic_json/emplace/#iterator-invalidation","title":"Iterator invalidation","text":"

    For ordered_json, adding a value to an object can yield a reallocation, in which case all iterators (including the end() iterator) and all references to the elements are invalidated.

    "},{"location":"api/basic_json/emplace/#parameters","title":"Parameters","text":"args (in) arguments to forward to a constructor of basic_json"},{"location":"api/basic_json/emplace/#return-value","title":"Return value","text":"

    a pair consisting of an iterator to the inserted element, or the already-existing element if no insertion happened, and a bool denoting whether the insertion took place.

    "},{"location":"api/basic_json/emplace/#exceptions","title":"Exceptions","text":"

    Throws type_error.311 when called on a type other than JSON object or null; example: \"cannot use emplace() with number\"

    "},{"location":"api/basic_json/emplace/#complexity","title":"Complexity","text":"

    Logarithmic in the size of the container, O(log(size())).

    "},{"location":"api/basic_json/emplace/#examples","title":"Examples","text":"Example

    The example shows how emplace() can be used to add elements to a JSON object. Note how the null value was silently converted to a JSON object. Further note how no value is added if there was already one value stored with the same key.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json object = {{\"one\", 1}, {\"two\", 2}};\n    json null;\n\n    // print values\n    std::cout << object << '\\n';\n    std::cout << null << '\\n';\n\n    // add values\n    auto res1 = object.emplace(\"three\", 3);\n    null.emplace(\"A\", \"a\");\n    null.emplace(\"B\", \"b\");\n\n    // the following call will not add an object, because there is already\n    // a value stored at key \"B\"\n    auto res2 = null.emplace(\"B\", \"c\");\n\n    // print values\n    std::cout << object << '\\n';\n    std::cout << *res1.first << \" \" << std::boolalpha << res1.second << '\\n';\n\n    std::cout << null << '\\n';\n    std::cout << *res2.first << \" \" << std::boolalpha << res2.second << '\\n';\n}\n

    Output:

    {\"one\":1,\"two\":2}\nnull\n{\"one\":1,\"three\":3,\"two\":2}\n3 true\n{\"A\":\"a\",\"B\":\"b\"}\n\"b\" false\n
    "},{"location":"api/basic_json/emplace/#version-history","title":"Version history","text":"
    • Since version 2.0.8.
    "},{"location":"api/basic_json/emplace_back/","title":"nlohmann::basic_json::emplace_back","text":"
    template<class... Args>\nreference emplace_back(Args&& ... args);\n

    Creates a JSON value from the passed parameters args to the end of the JSON value. If the function is called on a JSON null value, an empty array is created before appending the value created from args.

    "},{"location":"api/basic_json/emplace_back/#template-parameters","title":"Template parameters","text":"Args compatible types to create a basic_json object"},{"location":"api/basic_json/emplace_back/#iterator-invalidation","title":"Iterator invalidation","text":"

    By adding an element to the end of the array, a reallocation can happen, in which case all iterators (including the end() iterator) and all references to the elements are invalidated. Otherwise, only the end() iterator is invalidated.

    "},{"location":"api/basic_json/emplace_back/#parameters","title":"Parameters","text":"args (in) arguments to forward to a constructor of basic_json"},{"location":"api/basic_json/emplace_back/#return-value","title":"Return value","text":"

    reference to the inserted element

    "},{"location":"api/basic_json/emplace_back/#exceptions","title":"Exceptions","text":"

    Throws type_error.311 when called on a type other than JSON array or null; example: \"cannot use emplace_back() with number\"

    "},{"location":"api/basic_json/emplace_back/#complexity","title":"Complexity","text":"

    Amortized constant.

    "},{"location":"api/basic_json/emplace_back/#examples","title":"Examples","text":"Example

    The example shows how emplace_back() can be used to add elements to a JSON array. Note how the null value was silently converted to a JSON array.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json array = {1, 2, 3, 4, 5};\n    json null;\n\n    // print values\n    std::cout << array << '\\n';\n    std::cout << null << '\\n';\n\n    // add values\n    array.emplace_back(6);\n    null.emplace_back(\"first\");\n    null.emplace_back(3, \"second\");\n\n    // print values\n    std::cout << array << '\\n';\n    std::cout << null << '\\n';\n}\n

    Output:

    [1,2,3,4,5]\nnull\n[1,2,3,4,5,6]\n[\"first\",[\"second\",\"second\",\"second\"]]\n
    "},{"location":"api/basic_json/emplace_back/#see-also","title":"See also","text":"
    • operator+= add a value to an array/object
    • push_back add a value to an array/object
    "},{"location":"api/basic_json/emplace_back/#version-history","title":"Version history","text":"
    • Since version 2.0.8.
    • Returns reference since 3.7.0.
    "},{"location":"api/basic_json/empty/","title":"nlohmann::basic_json::empty","text":"
    bool empty() const noexcept;\n

    Checks if a JSON value has no elements (i.e. whether its size() is 0).

    "},{"location":"api/basic_json/empty/#return-value","title":"Return value","text":"

    The return value depends on the different types and is defined as follows:

    Value type return value null true boolean false string false number false binary false object result of function object_t::empty() array result of function array_t::empty()"},{"location":"api/basic_json/empty/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/basic_json/empty/#complexity","title":"Complexity","text":"

    Constant, as long as array_t and object_t satisfy the Container concept; that is, their empty() functions have constant complexity.

    "},{"location":"api/basic_json/empty/#possible-implementation","title":"Possible implementation","text":"
    bool empty() const noexcept\n{\n    return size() == 0;\n}\n
    "},{"location":"api/basic_json/empty/#notes","title":"Notes","text":"

    This function does not return whether a string stored as JSON value is empty -- it returns whether the JSON container itself is empty which is false in the case of a string.

    "},{"location":"api/basic_json/empty/#examples","title":"Examples","text":"Example

    The following code uses empty() to check if a JSON object contains any elements.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_object_empty(json::value_t::object);\n    json j_array = {1, 2, 4, 8, 16};\n    json j_array_empty(json::value_t::array);\n    json j_string = \"Hello, world\";\n\n    // call empty()\n    std::cout << std::boolalpha;\n    std::cout << j_null.empty() << '\\n';\n    std::cout << j_boolean.empty() << '\\n';\n    std::cout << j_number_integer.empty() << '\\n';\n    std::cout << j_number_float.empty() << '\\n';\n    std::cout << j_object.empty() << '\\n';\n    std::cout << j_object_empty.empty() << '\\n';\n    std::cout << j_array.empty() << '\\n';\n    std::cout << j_array_empty.empty() << '\\n';\n    std::cout << j_string.empty() << '\\n';\n}\n

    Output:

    true\nfalse\nfalse\nfalse\nfalse\ntrue\nfalse\ntrue\nfalse\n
    "},{"location":"api/basic_json/empty/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Extended to return false for binary types in version 3.8.0.
    "},{"location":"api/basic_json/end/","title":"nlohmann::basic_json::end","text":"
    iterator end() noexcept;\nconst_iterator end() const noexcept;\n

    Returns an iterator to one past the last element.

    "},{"location":"api/basic_json/end/#return-value","title":"Return value","text":"

    iterator one past the last element

    "},{"location":"api/basic_json/end/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/end/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/end/#examples","title":"Examples","text":"Example

    The following code shows an example for end().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create an array value\n    json array = {1, 2, 3, 4, 5};\n\n    // get an iterator to one past the last element\n    json::iterator it = array.end();\n\n    // decrement the iterator to point to the last element\n    --it;\n\n    // serialize the element that the iterator points to\n    std::cout << *it << '\\n';\n}\n

    Output:

    5\n
    "},{"location":"api/basic_json/end/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/end_pos/","title":"nlohmann::basic_json::end_pos","text":"
    #if JSON_DIAGNOSTIC_POSITIONS\nconstexpr std::size_t end_pos() const noexcept;\n#endif\n

    Returns the position immediately following the last character of the JSON string from which the value was parsed from.

    JSON type return value object position after the closing } array position after the closing ] string position after the closing \" number position after the last character boolean position after e null position after l"},{"location":"api/basic_json/end_pos/#return-value","title":"Return value","text":"

    the position of the character following the last character of the given value in the parsed JSON string, if the value was created by the parse function, or std::string::npos if the value was constructed otherwise

    "},{"location":"api/basic_json/end_pos/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/end_pos/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/end_pos/#notes","title":"Notes","text":"

    Note

    The function is only available if macro JSON_DIAGNOSTIC_POSITIONS has been defined to 1 before including the library header.

    Invalidation

    The returned positions are only valid as long as the JSON value is not changed. The positions are not updated when the JSON value is changed.

    "},{"location":"api/basic_json/end_pos/#examples","title":"Examples","text":"Example
    #include <iostream>\n\n#define JSON_DIAGNOSTIC_POSITIONS 1\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::string json_string = R\"(\n    {\n        \"address\": {\n            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\n    }\n    )\";\n    json j = json::parse(json_string);\n\n    std::cout << \"Root diagnostic positions: \\n\";\n    std::cout << \"\\tstart_pos: \" << j.start_pos() << '\\n';\n    std::cout << \"\\tend_pos:\" << j.end_pos() << \"\\n\";\n    std::cout << \"Original string: \\n\";\n    std::cout << \"{\\n        \\\"address\\\": {\\n            \\\"street\\\": \\\"Fake Street\\\",\\n            \\\"housenumber\\\": 1\\n        }\\n    }\" << \"\\n\";\n    std::cout << \"Parsed string: \\n\";\n    std::cout << json_string.substr(j.start_pos(), j.end_pos() - j.start_pos()) << \"\\n\\n\";\n\n    std::cout << \"address diagnostic positions: \\n\";\n    std::cout << \"\\tstart_pos:\" << j[\"address\"].start_pos() << '\\n';\n    std::cout << \"\\tend_pos:\" << j[\"address\"].end_pos() << \"\\n\\n\";\n    std::cout << \"Original string: \\n\";\n    std::cout << \"{            \\\"street\\\": \\\"Fake Street\\\",\\n            \\\"housenumber\\\": 1\\n        }\" << \"\\n\";\n    std::cout << \"Parsed string: \\n\";\n    std::cout << json_string.substr(j[\"address\"].start_pos(), j[\"address\"].end_pos() - j[\"address\"].start_pos()) << \"\\n\\n\";\n\n    std::cout << \"street diagnostic positions: \\n\";\n    std::cout << \"\\tstart_pos:\" << j[\"address\"][\"street\"].start_pos() << '\\n';\n    std::cout << \"\\tend_pos:\" << j[\"address\"][\"street\"].end_pos() << \"\\n\\n\";\n    std::cout << \"Original string: \\n\";\n    std::cout << \"\\\"Fake Street\\\"\" << \"\\n\";\n    std::cout << \"Parsed string: \\n\";\n    std::cout << json_string.substr(j[\"address\"][\"street\"].start_pos(), j[\"address\"][\"street\"].end_pos() - j[\"address\"][\"street\"].start_pos()) << \"\\n\\n\";\n\n    std::cout << \"housenumber diagnostic positions: \\n\";\n    std::cout << \"\\tstart_pos:\" << j[\"address\"][\"housenumber\"].start_pos() << '\\n';\n    std::cout << \"\\tend_pos:\" << j[\"address\"][\"housenumber\"].end_pos() << \"\\n\\n\";\n    std::cout << \"Original string: \\n\";\n    std::cout << \"1\" << \"\\n\";\n    std::cout << \"Parsed string: \\n\";\n    std::cout << json_string.substr(j[\"address\"][\"housenumber\"].start_pos(), j[\"address\"][\"housenumber\"].end_pos() - j[\"address\"][\"housenumber\"].start_pos()) << \"\\n\\n\";\n}\n

    Output:

    Root diagnostic positions: \n    start_pos: 5\n    end_pos:109\nOriginal string: \n{\n        \"address\": {\n            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\n    }\nParsed string: \n{\n        \"address\": {\n            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\n    }\n\naddress diagnostic positions: \n    start_pos:26\n    end_pos:103\n\nOriginal string: \n{            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\nParsed string: \n{\n            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\n\nstreet diagnostic positions: \n    start_pos:50\n    end_pos:63\n\nOriginal string: \n\"Fake Street\"\nParsed string: \n\"Fake Street\"\n\nhousenumber diagnostic positions: \n    start_pos:92\n    end_pos:93\n\nOriginal string: \n1\nParsed string: \n1\n

    The output shows the start/end positions of all the objects and fields in the JSON string.

    "},{"location":"api/basic_json/end_pos/#see-also","title":"See also","text":"
    • start_pos to access the start position
    • JSON_DIAGNOSTIC_POSITIONS for an overview of the diagnostic positions
    "},{"location":"api/basic_json/end_pos/#version-history","title":"Version history","text":"
    • Added in version 3.12.0.
    "},{"location":"api/basic_json/erase/","title":"nlohmann::basic_json::erase","text":"
    // (1)\niterator erase(iterator pos);\nconst_iterator erase(const_iterator pos);\n\n// (2)\niterator erase(iterator first, iterator last);\nconst_iterator erase(const_iterator first, const_iterator last);\n\n// (3)\nsize_type erase(const typename object_t::key_type& key);\n\n// (4)\ntemplate<typename KeyType>\nsize_type erase(KeyType&& key);\n\n// (5)\nvoid erase(const size_type idx);\n
    1. Removes an element from a JSON value specified by iterator pos. The iterator pos must be valid and dereferenceable. Thus, the end() iterator (which is valid, but is not dereferenceable) cannot be used as a value for pos.

      If called on a primitive type other than null, the resulting JSON value will be null.

    2. Remove an element range specified by [first; last) from a JSON value. The iterator first does not need to be dereferenceable if first == last: erasing an empty range is a no-op.

      If called on a primitive type other than null, the resulting JSON value will be null.

    3. Removes an element from a JSON object by key.

    4. See 3. This overload is only available if KeyType is comparable with typename object_t::key_type and typename object_comparator_t::is_transparent denotes a type.

    5. Removes an element from a JSON array by index.

    "},{"location":"api/basic_json/erase/#template-parameters","title":"Template parameters","text":"KeyType A type for an object key other than json_pointer that is comparable with string_t using object_comparator_t. This can also be a string view (C++17)."},{"location":"api/basic_json/erase/#parameters","title":"Parameters","text":"pos (in) iterator to the element to remove first (in) iterator to the beginning of the range to remove last (in) iterator past the end of the range to remove key (in) object key of the elements to remove idx (in) array index of the element to remove"},{"location":"api/basic_json/erase/#return-value","title":"Return value","text":"
    1. Iterator following the last removed element. If the iterator pos refers to the last element, the end() iterator is returned.
    2. Iterator following the last removed element. If the iterator last refers to the last element, the end() iterator is returned.
    3. Number of elements removed. If ObjectType is the default std::map type, the return value will always be 0 (key was not found) or 1 (key was found).
    4. See 3.
    5. (none)
    "},{"location":"api/basic_json/erase/#exception-safety","title":"Exception safety","text":"

    Strong exception safety: if an exception occurs, the original value stays intact.

    "},{"location":"api/basic_json/erase/#exceptions","title":"Exceptions","text":"
    1. The function can throw the following exceptions:
      • Throws type_error.307 if called on a null value; example: \"cannot use erase() with null\"
      • Throws invalid_iterator.202 if called on an iterator which does not belong to the current JSON value; example: \"iterator does not fit current value\"
      • Throws invalid_iterator.205 if called on a primitive type with invalid iterator (i.e., any iterator which is not begin()); example: \"iterator out of range\"
    2. The function can throw the following exceptions:
      • Throws type_error.307 if called on a null value; example: \"cannot use erase() with null\"
      • Throws invalid_iterator.203 if called on iterators which does not belong to the current JSON value; example: \"iterators do not fit current value\"
      • Throws invalid_iterator.204 if called on a primitive type with invalid iterators (i.e., if first != begin() and last != end()); example: \"iterators out of range\"
    3. The function can throw the following exceptions:
      • Throws type_error.307 when called on a type other than JSON object; example: \"cannot use erase() with null\"
    4. See 3.
    5. The function can throw the following exceptions:
      • Throws type_error.307 when called on a type other than JSON object; example: \"cannot use erase() with null\"
      • Throws out_of_range.401 when idx >= size(); example: \"array index 17 is out of range\"
    "},{"location":"api/basic_json/erase/#complexity","title":"Complexity","text":"
    1. The complexity depends on the type:
      • objects: amortized constant
      • arrays: linear in distance between pos and the end of the container
      • strings and binary: linear in the length of the member
      • other types: constant
    2. The complexity depends on the type:
      • objects: log(size()) + std::distance(first, last)
      • arrays: linear in the distance between first and last, plus linear in the distance between last and end of the container
      • strings and binary: linear in the length of the member
      • other types: constant
    3. log(size()) + count(key)
    4. log(size()) + count(key)
    5. Linear in distance between idx and the end of the container.
    "},{"location":"api/basic_json/erase/#notes","title":"Notes","text":"
    1. Invalidates iterators and references at or after the point of the erase, including the end() iterator.
    2. (none)
    3. References and iterators to the erased elements are invalidated. Other references and iterators are not affected.
    4. See 3.
    5. (none)
    "},{"location":"api/basic_json/erase/#examples","title":"Examples","text":"Example: (1) remove element given an iterator

    The example shows the effect of erase() for different JSON types using an iterator.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n\n    // call erase()\n    j_boolean.erase(j_boolean.begin());\n    j_number_integer.erase(j_number_integer.begin());\n    j_number_float.erase(j_number_float.begin());\n    j_object.erase(j_object.find(\"two\"));\n    j_array.erase(j_array.begin() + 2);\n    j_string.erase(j_string.begin());\n\n    // print values\n    std::cout << j_boolean << '\\n';\n    std::cout << j_number_integer << '\\n';\n    std::cout << j_number_float << '\\n';\n    std::cout << j_object << '\\n';\n    std::cout << j_array << '\\n';\n    std::cout << j_string << '\\n';\n}\n

    Output:

    null\nnull\nnull\n{\"one\":1}\n[1,2,8,16]\nnull\n
    Example: (2) remove elements given an iterator range

    The example shows the effect of erase() for different JSON types using an iterator range.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n\n    // call erase()\n    j_boolean.erase(j_boolean.begin(), j_boolean.end());\n    j_number_integer.erase(j_number_integer.begin(), j_number_integer.end());\n    j_number_float.erase(j_number_float.begin(), j_number_float.end());\n    j_object.erase(j_object.find(\"two\"), j_object.end());\n    j_array.erase(j_array.begin() + 1, j_array.begin() + 3);\n    j_string.erase(j_string.begin(), j_string.end());\n\n    // print values\n    std::cout << j_boolean << '\\n';\n    std::cout << j_number_integer << '\\n';\n    std::cout << j_number_float << '\\n';\n    std::cout << j_object << '\\n';\n    std::cout << j_array << '\\n';\n    std::cout << j_string << '\\n';\n}\n

    Output:

    null\nnull\nnull\n{\"one\":1}\n[1,8,16]\nnull\n
    Example: (3) remove element from a JSON object given a key

    The example shows the effect of erase() for different JSON types using an object key.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n\n    // call erase()\n    auto count_one = j_object.erase(\"one\");\n    auto count_three = j_object.erase(\"three\");\n\n    // print values\n    std::cout << j_object << '\\n';\n    std::cout << count_one << \" \" << count_three << '\\n';\n}\n

    Output:

    {\"two\":2}\n1 0\n
    Example: (4) remove element from a JSON object given a key using string_view

    The example shows the effect of erase() for different JSON types using an object key.

    #include <iostream>\n#include <string_view>\n#include <nlohmann/json.hpp>\n\nusing namespace std::string_view_literals;\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n\n    // call erase()\n    auto count_one = j_object.erase(\"one\"sv);\n    auto count_three = j_object.erase(\"three\"sv);\n\n    // print values\n    std::cout << j_object << '\\n';\n    std::cout << count_one << \" \" << count_three << '\\n';\n}\n

    Output:

    {\"two\":2}\n1 0\n
    Example: (5) remove element from a JSON array given an index

    The example shows the effect of erase() using an array index.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON array\n    json j_array = {0, 1, 2, 3, 4, 5};\n\n    // call erase()\n    j_array.erase(2);\n\n    // print values\n    std::cout << j_array << '\\n';\n}\n

    Output:

    [0,1,3,4,5]\n
    "},{"location":"api/basic_json/erase/#version-history","title":"Version history","text":"
    1. Added in version 1.0.0. Added support for binary types in version 3.8.0.
    2. Added in version 1.0.0. Added support for binary types in version 3.8.0.
    3. Added in version 1.0.0.
    4. Added in version 3.11.0.
    5. Added in version 1.0.0.
    "},{"location":"api/basic_json/error_handler_t/","title":"nlohmann::basic_json::error_handler_t","text":"
    enum class error_handler_t {\n    strict,\n    replace,\n    ignore\n};\n

    This enumeration is used in the dump function to choose how to treat decoding errors while serializing a basic_json value. Three values are differentiated:

    strict throw a type_error exception in case of invalid UTF-8 replace replace invalid UTF-8 sequences with U+FFFD (\ufffd REPLACEMENT CHARACTER) ignore ignore invalid UTF-8 sequences; all bytes are copied to the output unchanged"},{"location":"api/basic_json/error_handler_t/#examples","title":"Examples","text":"Example

    The example below shows how the different values of the error_handler_t influence the behavior of dump when reading serializing an invalid UTF-8 sequence.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON value with invalid UTF-8 byte sequence\n    json j_invalid = \"\u00e4\\xA9\u00fc\";\n    try\n    {\n        std::cout << j_invalid.dump() << std::endl;\n    }\n    catch (const json::type_error& e)\n    {\n        std::cout << e.what() << std::endl;\n    }\n\n    std::cout << \"string with replaced invalid characters: \"\n              << j_invalid.dump(-1, ' ', false, json::error_handler_t::replace)\n              << \"\\nstring with ignored invalid characters: \"\n              << j_invalid.dump(-1, ' ', false, json::error_handler_t::ignore)\n              << '\\n';\n}\n

    Output:

    [json.exception.type_error.316] invalid UTF-8 byte at index 2: 0xA9\nstring with replaced invalid characters: \"\u00e4\ufffd\u00fc\"\nstring with ignored invalid characters: \"\u00e4\u00fc\"\n
    "},{"location":"api/basic_json/error_handler_t/#version-history","title":"Version history","text":"
    • Added in version 3.4.0.
    "},{"location":"api/basic_json/exception/","title":"nlohmann::basic_json::exception","text":"
    class exception : public std::exception;\n

    This class is an extension of std::exception objects with a member id for exception ids. It is used as the base class for all exceptions thrown by the basic_json class. This class can hence be used as \"wildcard\" to catch exceptions, see example below.

    classDiagram\n  direction LR\n\n    class std_exception [\"std::exception\"] {\n        <<interface>>\n    }\n\n    class json_exception [\"basic_json::exception\"] {\n        +const int id\n        +const char* what() const\n    }\n\n    class json_parse_error [\"basic_json::parse_error\"] {\n        +const std::size_t byte\n    }\n\n    class json_invalid_iterator [\"basic_json::invalid_iterator\"]\n    class json_type_error [\"basic_json::type_error\"]\n    class json_out_of_range [\"basic_json::out_of_range\"]\n    class json_other_error [\"basic_json::other_error\"]\n\n    std_exception <|-- json_exception\n    json_exception <|-- json_parse_error\n    json_exception <|-- json_invalid_iterator\n    json_exception <|-- json_type_error\n    json_exception <|-- json_out_of_range\n    json_exception <|-- json_other_error\n\n    style json_exception fill:#CCCCFF

    Subclasses:

    • parse_error for exceptions indicating a parse error
    • invalid_iterator for exceptions indicating errors with iterators
    • type_error for exceptions indicating executing a member function with a wrong type
    • out_of_range for exceptions indicating access out of the defined range
    • other_error for exceptions indicating other library errors
    "},{"location":"api/basic_json/exception/#member-functions","title":"Member functions","text":"
    • what - returns explanatory string
    "},{"location":"api/basic_json/exception/#member-variables","title":"Member variables","text":"
    • id - the id of the exception
    "},{"location":"api/basic_json/exception/#notes","title":"Notes","text":"

    To have nothrow-copy-constructible exceptions, we internally use std::runtime_error which can cope with arbitrary-length error messages. Intermediate strings are built with static functions and then passed to the actual constructor.

    "},{"location":"api/basic_json/exception/#examples","title":"Examples","text":"Example

    The following code shows how arbitrary library exceptions can be caught.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    try\n    {\n        // calling at() for a non-existing key\n        json j = {{\"foo\", \"bar\"}};\n        json k = j.at(\"non-existing\");\n    }\n    catch (const json::exception& e)\n    {\n        // output exception information\n        std::cout << \"message: \" << e.what() << '\\n'\n                  << \"exception id: \" << e.id << std::endl;\n    }\n}\n

    Output:

    message: [json.exception.out_of_range.403] key 'non-existing' not found\nexception id: 403\n
    "},{"location":"api/basic_json/exception/#see-also","title":"See also","text":"

    List of exceptions

    "},{"location":"api/basic_json/exception/#version-history","title":"Version history","text":"
    • Since version 3.0.0.
    "},{"location":"api/basic_json/find/","title":"nlohmann::basic_json::find","text":"
    // (1)\niterator find(const typename object_t::key_type& key);\nconst_iterator find(const typename object_t::key_type& key) const;\n\n// (2)\ntemplate<typename KeyType>\niterator find(KeyType&& key);\ntemplate<typename KeyType>\nconst_iterator find(KeyType&& key) const;\n
    1. Finds an element in a JSON object with a key equivalent to key. If the element is not found or the JSON value is not an object, end() is returned.
    2. See 1. This overload is only available if KeyType is comparable with typename object_t::key_type and typename object_comparator_t::is_transparent denotes a type.
    "},{"location":"api/basic_json/find/#template-parameters","title":"Template parameters","text":"KeyType A type for an object key other than json_pointer that is comparable with string_t using object_comparator_t. This can also be a string view (C++17)."},{"location":"api/basic_json/find/#parameters","title":"Parameters","text":"key (in) key value of the element to search for."},{"location":"api/basic_json/find/#return-value","title":"Return value","text":"

    Iterator to an element with a key equivalent to key. If no such element is found or the JSON value is not an object, a past-the-end iterator (see end()) is returned.

    "},{"location":"api/basic_json/find/#exception-safety","title":"Exception safety","text":"

    Strong exception safety: if an exception occurs, the original value stays intact.

    "},{"location":"api/basic_json/find/#complexity","title":"Complexity","text":"

    Logarithmic in the size of the JSON object.

    "},{"location":"api/basic_json/find/#notes","title":"Notes","text":"

    This method always returns end() when executed on a JSON type that is not an object.

    "},{"location":"api/basic_json/find/#examples","title":"Examples","text":"Example: (1) find object element by key

    The example shows how find() is used.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n\n    // call find\n    auto it_two = j_object.find(\"two\");\n    auto it_three = j_object.find(\"three\");\n\n    // print values\n    std::cout << std::boolalpha;\n    std::cout << \"\\\"two\\\" was found: \" << (it_two != j_object.end()) << '\\n';\n    std::cout << \"value at key \\\"two\\\": \" << *it_two << '\\n';\n    std::cout << \"\\\"three\\\" was found: \" << (it_three != j_object.end()) << '\\n';\n}\n

    Output:

    \"two\" was found: true\nvalue at key \"two\": 2\n\"three\" was found: false\n
    Example: (2) find object element by key using string_view

    The example shows how find() is used.

    #include <iostream>\n#include <string_view>\n#include <nlohmann/json.hpp>\n\nusing namespace std::string_view_literals;\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n\n    // call find\n    auto it_two = j_object.find(\"two\"sv);\n    auto it_three = j_object.find(\"three\"sv);\n\n    // print values\n    std::cout << std::boolalpha;\n    std::cout << \"\\\"two\\\" was found: \" << (it_two != j_object.end()) << '\\n';\n    std::cout << \"value at key \\\"two\\\": \" << *it_two << '\\n';\n    std::cout << \"\\\"three\\\" was found: \" << (it_three != j_object.end()) << '\\n';\n}\n

    Output:

    \"two\" was found: true\nvalue at key \"two\": 2\n\"three\" was found: false\n
    "},{"location":"api/basic_json/find/#see-also","title":"See also","text":"
    • contains checks whether a key exists
    "},{"location":"api/basic_json/find/#version-history","title":"Version history","text":"
    1. Added in version 3.11.0.
    2. Added in version 1.0.0. Changed to support comparable types in version 3.11.0.
    "},{"location":"api/basic_json/flatten/","title":"nlohmann::basic_json::flatten","text":"
    basic_json flatten() const;\n

    The function creates a JSON object whose keys are JSON pointers (see RFC 6901) and whose values are all primitive (see is_primitive() for more information). The original JSON value can be restored using the unflatten() function.

    "},{"location":"api/basic_json/flatten/#return-value","title":"Return value","text":"

    an object that maps JSON pointers to primitive values

    "},{"location":"api/basic_json/flatten/#exception-safety","title":"Exception safety","text":"

    Strong exception safety: if an exception occurs, the original value stays intact.

    "},{"location":"api/basic_json/flatten/#complexity","title":"Complexity","text":"

    Linear in the size the JSON value.

    "},{"location":"api/basic_json/flatten/#notes","title":"Notes","text":"

    Empty objects and arrays are flattened to null and will not be reconstructed correctly by the unflatten() function.

    "},{"location":"api/basic_json/flatten/#examples","title":"Examples","text":"Example

    The following code shows how a JSON object is flattened to an object whose keys consist of JSON pointers.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON value\n    json j =\n    {\n        {\"pi\", 3.141},\n        {\"happy\", true},\n        {\"name\", \"Niels\"},\n        {\"nothing\", nullptr},\n        {\n            \"answer\", {\n                {\"everything\", 42}\n            }\n        },\n        {\"list\", {1, 0, 2}},\n        {\n            \"object\", {\n                {\"currency\", \"USD\"},\n                {\"value\", 42.99}\n            }\n        }\n    };\n\n    // call flatten()\n    std::cout << std::setw(4) << j.flatten() << '\\n';\n}\n

    Output:

    {\n    \"/answer/everything\": 42,\n    \"/happy\": true,\n    \"/list/0\": 1,\n    \"/list/1\": 0,\n    \"/list/2\": 2,\n    \"/name\": \"Niels\",\n    \"/nothing\": null,\n    \"/object/currency\": \"USD\",\n    \"/object/value\": 42.99,\n    \"/pi\": 3.141\n}\n
    "},{"location":"api/basic_json/flatten/#see-also","title":"See also","text":"
    • unflatten the reverse function
    "},{"location":"api/basic_json/flatten/#version-history","title":"Version history","text":"
    • Added in version 2.0.0.
    "},{"location":"api/basic_json/from_bjdata/","title":"nlohmann::basic_json::from_bjdata","text":"
    // (1)\ntemplate<typename InputType>\nstatic basic_json from_bjdata(InputType&& i,\n                              const bool strict = true,\n                              const bool allow_exceptions = true);\n// (2)\ntemplate<typename IteratorType>\nstatic basic_json from_bjdata(IteratorType first, IteratorType last,\n                              const bool strict = true,\n                              const bool allow_exceptions = true);\n

    Deserializes a given input to a JSON value using the BJData (Binary JData) serialization format.

    1. Reads from a compatible input.
    2. Reads from an iterator range.

    The exact mapping and its limitations is described on a dedicated page.

    "},{"location":"api/basic_json/from_bjdata/#template-parameters","title":"Template parameters","text":"InputType

    A compatible input, for instance:

    • an std::istream object
    • a FILE pointer
    • a C-style array of characters
    • a pointer to a null-terminated string of single byte characters
    • an object obj for which begin(obj) and end(obj) produces a valid pair of iterators.
    IteratorType a compatible iterator type"},{"location":"api/basic_json/from_bjdata/#parameters","title":"Parameters","text":"i (in) an input in BJData format convertible to an input adapter first (in) iterator to start of the input last (in) iterator to end of the input strict (in) whether to expect the input to be consumed until EOF (true by default) allow_exceptions (in) whether to throw exceptions in case of a parse error (optional, true by default)"},{"location":"api/basic_json/from_bjdata/#return-value","title":"Return value","text":"

    deserialized JSON value; in case of a parse error and allow_exceptions set to false, the return value will be value_t::discarded. The latter can be checked with is_discarded.

    "},{"location":"api/basic_json/from_bjdata/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/from_bjdata/#exceptions","title":"Exceptions","text":"
    • Throws parse_error.110 if the given input ends prematurely or the end of file was not reached when strict was set to true
    • Throws parse_error.112 if a parse error occurs
    • Throws parse_error.113 if a string could not be parsed successfully
    "},{"location":"api/basic_json/from_bjdata/#complexity","title":"Complexity","text":"

    Linear in the size of the input.

    "},{"location":"api/basic_json/from_bjdata/#examples","title":"Examples","text":"Example

    The example shows the deserialization of a byte vector in BJData format to a JSON value.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create byte vector\n    std::vector<std::uint8_t> v = {0x7B, 0x69, 0x07, 0x63, 0x6F, 0x6D, 0x70, 0x61,\n                                   0x63, 0x74, 0x54, 0x69, 0x06, 0x73, 0x63, 0x68,\n                                   0x65, 0x6D, 0x61, 0x69, 0x00, 0x7D\n                                  };\n\n    // deserialize it with BJData\n    json j = json::from_bjdata(v);\n\n    // print the deserialized JSON value\n    std::cout << std::setw(2) << j << std::endl;\n}\n

    Output:

    {\n  \"compact\": true,\n  \"schema\": 0\n}\n
    "},{"location":"api/basic_json/from_bjdata/#version-history","title":"Version history","text":"
    • Added in version 3.11.0.
    "},{"location":"api/basic_json/from_bson/","title":"nlohmann::basic_json::from_bson","text":"
    // (1)\ntemplate<typename InputType>\nstatic basic_json from_bson(InputType&& i,\n                            const bool strict = true,\n                            const bool allow_exceptions = true);\n// (2)\ntemplate<typename IteratorType>\nstatic basic_json from_bson(IteratorType first, IteratorType last,\n                            const bool strict = true,\n                            const bool allow_exceptions = true);\n

    Deserializes a given input to a JSON value using the BSON (Binary JSON) serialization format.

    1. Reads from a compatible input.
    2. Reads from an iterator range.

    The exact mapping and its limitations is described on a dedicated page.

    "},{"location":"api/basic_json/from_bson/#template-parameters","title":"Template parameters","text":"InputType

    A compatible input, for instance:

    • an std::istream object
    • a FILE pointer
    • a C-style array of characters
    • a pointer to a null-terminated string of single byte characters
    • an object obj for which begin(obj) and end(obj) produces a valid pair of iterators.
    IteratorType a compatible iterator type"},{"location":"api/basic_json/from_bson/#parameters","title":"Parameters","text":"i (in) an input in BSON format convertible to an input adapter first (in) iterator to start of the input last (in) iterator to end of the input strict (in) whether to expect the input to be consumed until EOF (true by default) allow_exceptions (in) whether to throw exceptions in case of a parse error (optional, true by default)"},{"location":"api/basic_json/from_bson/#return-value","title":"Return value","text":"

    deserialized JSON value; in case of a parse error and allow_exceptions set to false, the return value will be value_t::discarded. The latter can be checked with is_discarded.

    "},{"location":"api/basic_json/from_bson/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/from_bson/#exceptions","title":"Exceptions","text":"

    Throws parse_error.114 if an unsupported BSON record type is encountered.

    "},{"location":"api/basic_json/from_bson/#complexity","title":"Complexity","text":"

    Linear in the size of the input.

    "},{"location":"api/basic_json/from_bson/#examples","title":"Examples","text":"Example

    The example shows the deserialization of a byte vector in BSON format to a JSON value.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create byte vector\n    std::vector<std::uint8_t> v = {0x1b, 0x00, 0x00, 0x00, 0x08, 0x63, 0x6f, 0x6d,\n                                   0x70, 0x61, 0x63, 0x74, 0x00, 0x01, 0x10, 0x73,\n                                   0x63, 0x68, 0x65, 0x6d, 0x61, 0x00, 0x00, 0x00,\n                                   0x00, 0x00, 0x00\n                                  };\n\n    // deserialize it with BSON\n    json j = json::from_bson(v);\n\n    // print the deserialized JSON value\n    std::cout << std::setw(2) << j << std::endl;\n}\n

    Output:

    {\n  \"compact\": true,\n  \"schema\": 0\n}\n
    "},{"location":"api/basic_json/from_bson/#see-also","title":"See also","text":"
    • BSON specification
    • to_bson for the analogous serialization
    • from_cbor for the related CBOR format
    • from_msgpack for the related MessagePack format
    • from_ubjson for the related UBJSON format
    "},{"location":"api/basic_json/from_bson/#version-history","title":"Version history","text":"
    • Added in version 3.4.0.

    Deprecation

    • Overload (2) replaces calls to from_bson with a pointer and a length as first two parameters, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_bson(ptr, len, ...); with from_bson(ptr, ptr+len, ...);.
    • Overload (2) replaces calls to from_bson with a pair of iterators as their first parameter, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_bson({ptr, ptr+len}, ...); with from_bson(ptr, ptr+len, ...);.

    You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

    "},{"location":"api/basic_json/from_cbor/","title":"nlohmann::basic_json::from_cbor","text":"
    // (1)\ntemplate<typename InputType>\nstatic basic_json from_cbor(InputType&& i,\n                            const bool strict = true,\n                            const bool allow_exceptions = true,\n                            const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error);\n\n// (2)\ntemplate<typename IteratorType>\nstatic basic_json from_cbor(IteratorType first, IteratorType last,\n                            const bool strict = true,\n                            const bool allow_exceptions = true,\n                            const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error);\n

    Deserializes a given input to a JSON value using the CBOR (Concise Binary Object Representation) serialization format.

    1. Reads from a compatible input.
    2. Reads from an iterator range.

    The exact mapping and its limitations is described on a dedicated page.

    "},{"location":"api/basic_json/from_cbor/#template-parameters","title":"Template parameters","text":"InputType

    A compatible input, for instance:

    • an std::istream object
    • a FILE pointer
    • a C-style array of characters
    • a pointer to a null-terminated string of single byte characters
    • an object obj for which begin(obj) and end(obj) produces a valid pair of iterators.
    IteratorType a compatible iterator type"},{"location":"api/basic_json/from_cbor/#parameters","title":"Parameters","text":"i (in) an input in CBOR format convertible to an input adapter first (in) iterator to start of the input last (in) iterator to end of the input strict (in) whether to expect the input to be consumed until EOF (true by default) allow_exceptions (in) whether to throw exceptions in case of a parse error (optional, true by default) tag_handler (in) how to treat CBOR tags (optional, error by default); see cbor_tag_handler_t for more information"},{"location":"api/basic_json/from_cbor/#return-value","title":"Return value","text":"

    deserialized JSON value; in case of a parse error and allow_exceptions set to false, the return value will be value_t::discarded. The latter can be checked with is_discarded.

    "},{"location":"api/basic_json/from_cbor/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/from_cbor/#exceptions","title":"Exceptions","text":"
    • Throws parse_error.110 if the given input ends prematurely or the end of file was not reached when strict was set to true
    • Throws parse_error.112 if unsupported features from CBOR were used in the given input or if the input is not valid CBOR
    • Throws parse_error.113 if a string was expected as map key, but not found
    "},{"location":"api/basic_json/from_cbor/#complexity","title":"Complexity","text":"

    Linear in the size of the input.

    "},{"location":"api/basic_json/from_cbor/#examples","title":"Examples","text":"Example

    The example shows the deserialization of a byte vector in CBOR format to a JSON value.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create byte vector\n    std::vector<std::uint8_t> v = {0xa2, 0x67, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63,\n                                   0x74, 0xf5, 0x66, 0x73, 0x63, 0x68, 0x65, 0x6d,\n                                   0x61, 0x00\n                                  };\n\n    // deserialize it with CBOR\n    json j = json::from_cbor(v);\n\n    // print the deserialized JSON value\n    std::cout << std::setw(2) << j << std::endl;\n}\n

    Output:

    {\n  \"compact\": true,\n  \"schema\": 0\n}\n
    "},{"location":"api/basic_json/from_cbor/#version-history","title":"Version history","text":"
    • Added in version 2.0.9.
    • Parameter start_index since version 2.1.1.
    • Changed to consume input adapters, removed start_index parameter, and added strict parameter in version 3.0.0.
    • Added allow_exceptions parameter in version 3.2.0.
    • Added tag_handler parameter in version 3.9.0.

    Deprecation

    • Overload (2) replaces calls to from_cbor with a pointer and a length as first two parameters, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_cbor(ptr, len, ...); with from_cbor(ptr, ptr+len, ...);.
    • Overload (2) replaces calls to from_cbor with a pair of iterators as their first parameter, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_cbor({ptr, ptr+len}, ...); with from_cbor(ptr, ptr+len, ...);.

    You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

    "},{"location":"api/basic_json/from_msgpack/","title":"nlohmann::basic_json::from_msgpack","text":"
    // (1)\ntemplate<typename InputType>\nstatic basic_json from_msgpack(InputType&& i,\n                               const bool strict = true,\n                               const bool allow_exceptions = true);\n// (2)\ntemplate<typename IteratorType>\nstatic basic_json from_msgpack(IteratorType first, IteratorType last,\n                               const bool strict = true,\n                               const bool allow_exceptions = true);\n

    Deserializes a given input to a JSON value using the MessagePack serialization format.

    1. Reads from a compatible input.
    2. Reads from an iterator range.

    The exact mapping and its limitations is described on a dedicated page.

    "},{"location":"api/basic_json/from_msgpack/#template-parameters","title":"Template parameters","text":"InputType

    A compatible input, for instance:

    • an std::istream object
    • a FILE pointer
    • a C-style array of characters
    • a pointer to a null-terminated string of single byte characters
    • an object obj for which begin(obj) and end(obj) produces a valid pair of iterators.
    IteratorType a compatible iterator type"},{"location":"api/basic_json/from_msgpack/#parameters","title":"Parameters","text":"i (in) an input in MessagePack format convertible to an input adapter first (in) iterator to start of the input last (in) iterator to end of the input strict (in) whether to expect the input to be consumed until EOF (true by default) allow_exceptions (in) whether to throw exceptions in case of a parse error (optional, true by default)"},{"location":"api/basic_json/from_msgpack/#return-value","title":"Return value","text":"

    deserialized JSON value; in case of a parse error and allow_exceptions set to false, the return value will be value_t::discarded. The latter can be checked with is_discarded.

    "},{"location":"api/basic_json/from_msgpack/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/from_msgpack/#exceptions","title":"Exceptions","text":"
    • Throws parse_error.110 if the given input ends prematurely or the end of file was not reached when strict was set to true
    • Throws parse_error.112 if unsupported features from MessagePack were used in the given input or if the input is not valid MessagePack
    • Throws parse_error.113 if a string was expected as map key, but not found
    "},{"location":"api/basic_json/from_msgpack/#complexity","title":"Complexity","text":"

    Linear in the size of the input.

    "},{"location":"api/basic_json/from_msgpack/#examples","title":"Examples","text":"Example

    The example shows the deserialization of a byte vector in MessagePack format to a JSON value.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create byte vector\n    std::vector<std::uint8_t> v = {0x82, 0xa7, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63,\n                                   0x74, 0xc3, 0xa6, 0x73, 0x63, 0x68, 0x65, 0x6d,\n                                   0x61, 0x00\n                                  };\n\n    // deserialize it with MessagePack\n    json j = json::from_msgpack(v);\n\n    // print the deserialized JSON value\n    std::cout << std::setw(2) << j << std::endl;\n}\n

    Output:

    {\n  \"compact\": true,\n  \"schema\": 0\n}\n
    "},{"location":"api/basic_json/from_msgpack/#version-history","title":"Version history","text":"
    • Added in version 2.0.9.
    • Parameter start_index since version 2.1.1.
    • Changed to consume input adapters, removed start_index parameter, and added strict parameter in version 3.0.0.
    • Added allow_exceptions parameter in version 3.2.0.

    Deprecation

    • Overload (2) replaces calls to from_msgpack with a pointer and a length as first two parameters, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_msgpack(ptr, len, ...); with from_msgpack(ptr, ptr+len, ...);.
    • Overload (2) replaces calls to from_cbor with a pair of iterators as their first parameter, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_msgpack({ptr, ptr+len}, ...); with from_msgpack(ptr, ptr+len, ...);.

    You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

    "},{"location":"api/basic_json/from_ubjson/","title":"nlohmann::basic_json::from_ubjson","text":"
    // (1)\ntemplate<typename InputType>\nstatic basic_json from_ubjson(InputType&& i,\n                              const bool strict = true,\n                              const bool allow_exceptions = true);\n// (2)\ntemplate<typename IteratorType>\nstatic basic_json from_ubjson(IteratorType first, IteratorType last,\n                              const bool strict = true,\n                              const bool allow_exceptions = true);\n

    Deserializes a given input to a JSON value using the UBJSON (Universal Binary JSON) serialization format.

    1. Reads from a compatible input.
    2. Reads from an iterator range.

    The exact mapping and its limitations is described on a dedicated page.

    "},{"location":"api/basic_json/from_ubjson/#template-parameters","title":"Template parameters","text":"InputType

    A compatible input, for instance:

    • an std::istream object
    • a FILE pointer
    • a C-style array of characters
    • a pointer to a null-terminated string of single byte characters
    • an object obj for which begin(obj) and end(obj) produces a valid pair of iterators.
    IteratorType a compatible iterator type"},{"location":"api/basic_json/from_ubjson/#parameters","title":"Parameters","text":"i (in) an input in UBJSON format convertible to an input adapter first (in) iterator to start of the input last (in) iterator to end of the input strict (in) whether to expect the input to be consumed until EOF (true by default) allow_exceptions (in) whether to throw exceptions in case of a parse error (optional, true by default)"},{"location":"api/basic_json/from_ubjson/#return-value","title":"Return value","text":"

    deserialized JSON value; in case of a parse error and allow_exceptions set to false, the return value will be value_t::discarded. The latter can be checked with is_discarded.

    "},{"location":"api/basic_json/from_ubjson/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/from_ubjson/#exceptions","title":"Exceptions","text":"
    • Throws parse_error.110 if the given input ends prematurely or the end of file was not reached when strict was set to true
    • Throws parse_error.112 if a parse error occurs
    • Throws parse_error.113 if a string could not be parsed successfully
    "},{"location":"api/basic_json/from_ubjson/#complexity","title":"Complexity","text":"

    Linear in the size of the input.

    "},{"location":"api/basic_json/from_ubjson/#examples","title":"Examples","text":"Example

    The example shows the deserialization of a byte vector in UBJSON format to a JSON value.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create byte vector\n    std::vector<std::uint8_t> v = {0x7B, 0x69, 0x07, 0x63, 0x6F, 0x6D, 0x70, 0x61,\n                                   0x63, 0x74, 0x54, 0x69, 0x06, 0x73, 0x63, 0x68,\n                                   0x65, 0x6D, 0x61, 0x69, 0x00, 0x7D\n                                  };\n\n    // deserialize it with UBJSON\n    json j = json::from_ubjson(v);\n\n    // print the deserialized JSON value\n    std::cout << std::setw(2) << j << std::endl;\n}\n

    Output:

    {\n  \"compact\": true,\n  \"schema\": 0\n}\n
    "},{"location":"api/basic_json/from_ubjson/#version-history","title":"Version history","text":"
    • Added in version 3.1.0.
    • Added allow_exceptions parameter in version 3.2.0.

    Deprecation

    • Overload (2) replaces calls to from_ubjson with a pointer and a length as first two parameters, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_ubjson(ptr, len, ...); with from_ubjson(ptr, ptr+len, ...);.
    • Overload (2) replaces calls to from_ubjson with a pair of iterators as their first parameter, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_ubjson({ptr, ptr+len}, ...); with from_ubjson(ptr, ptr+len, ...);.

    You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

    "},{"location":"api/basic_json/front/","title":"nlohmann::basic_json::front","text":"
    reference front();\nconst_reference front() const;\n

    Returns a reference to the first element in the container. For a JSON container c, the expression c.front() is equivalent to *c.begin().

    "},{"location":"api/basic_json/front/#return-value","title":"Return value","text":"

    In case of a structured type (array or object), a reference to the first element is returned. In case of number, string, boolean, or binary values, a reference to the value is returned.

    "},{"location":"api/basic_json/front/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/front/#exceptions","title":"Exceptions","text":"

    If the JSON value is null, exception invalid_iterator.214 is thrown.

    "},{"location":"api/basic_json/front/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/front/#notes","title":"Notes","text":"

    Precondition

    The array or object must not be empty. Calling front on an empty array or object yields undefined behavior.

    "},{"location":"api/basic_json/front/#examples","title":"Examples","text":"Example

    The following code shows an example for front().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_object_empty(json::value_t::object);\n    json j_array = {1, 2, 4, 8, 16};\n    json j_array_empty(json::value_t::array);\n    json j_string = \"Hello, world\";\n\n    // call front()\n    //std::cout << j_null.front() << '\\n';          // would throw\n    std::cout << j_boolean.front() << '\\n';\n    std::cout << j_number_integer.front() << '\\n';\n    std::cout << j_number_float.front() << '\\n';\n    std::cout << j_object.front() << '\\n';\n    //std::cout << j_object_empty.front() << '\\n';  // undefined behavior\n    std::cout << j_array.front() << '\\n';\n    //std::cout << j_array_empty.front() << '\\n';   // undefined behavior\n    std::cout << j_string.front() << '\\n';\n}\n

    Output:

    true\n17\n23.42\n1\n1\n\"Hello, world\"\n
    "},{"location":"api/basic_json/front/#see-also","title":"See also","text":"
    • back to access the last element
    "},{"location":"api/basic_json/front/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Adjusted code to return reference to binary values in version 3.8.0.
    "},{"location":"api/basic_json/get/","title":"nlohmann::basic_json::get","text":"
    // (1)\ntemplate<typename ValueType>\nValueType get() const noexcept(\n    noexcept(JSONSerializer<ValueType>::from_json(\n        std::declval<const basic_json_t&>(), std::declval<ValueType&>())));\n\n// (2)\ntemplate<typename BasicJsonType>\nBasicJsonType get() const;\n\n// (3)\ntemplate<typename PointerType>\nPointerType get_ptr();\n\ntemplate<typename PointerType>\nconstexpr const PointerType get_ptr() const noexcept;\n
    1. Explicit type conversion between the JSON value and a compatible value which is CopyConstructible and DefaultConstructible. The value is converted by calling the json_serializer<ValueType> from_json() method.

      The function is equivalent to executing

      ValueType ret;\nJSONSerializer<ValueType>::from_json(*this, ret);\nreturn ret;\n

      This overload is chosen if:

      • ValueType is not basic_json,
      • json_serializer<ValueType> has a from_json() method of the form void from_json(const basic_json&, ValueType&), and
      • json_serializer<ValueType> does not have a from_json() method of the form ValueType from_json(const basic_json&)

      If the type is not CopyConstructible and not DefaultConstructible, the value is converted by calling the json_serializer<ValueType> from_json() method.

      The function is then equivalent to executing

      return JSONSerializer<ValueTypeCV>::from_json(*this);\n

      This overload is chosen if:

      • ValueType is not basic_json and
      • json_serializer<ValueType> has a from_json() method of the form ValueType from_json(const basic_json&)

      If json_serializer<ValueType> has both overloads of from_json(), the latter one is chosen.

    2. Overload for basic_json specializations. The function is equivalent to executing

      return *this;\n

    3. Explicit pointer access to the internally stored JSON value. No copies are made.

    "},{"location":"api/basic_json/get/#template-parameters","title":"Template parameters","text":"ValueType the value type to return BasicJsonType a specialization of basic_json PointerType pointer type; must be a pointer to array_t, object_t, string_t, boolean_t, number_integer_t, or number_unsigned_t, number_float_t, or binary_t. Other types will not compile."},{"location":"api/basic_json/get/#return-value","title":"Return value","text":"
    1. copy of the JSON value, converted to ValueType
    2. a copy of *this, converted into BasicJsonType
    3. pointer to the internally stored JSON value if the requested pointer type fits to the JSON value; nullptr otherwise
    "},{"location":"api/basic_json/get/#exceptions","title":"Exceptions","text":"

    Depends on what json_serializer<ValueType> from_json() method throws

    "},{"location":"api/basic_json/get/#notes","title":"Notes","text":"

    Undefined behavior

    Writing data to the pointee (overload 3) of the result yields an undefined state.

    "},{"location":"api/basic_json/get/#examples","title":"Examples","text":"Example

    The example below shows several conversions from JSON values to other types. There a few things to note: (1) Floating-point numbers can be converted to integers, (2) A JSON array can be converted to a standard std::vector<short>, (3) A JSON object can be converted to C++ associative containers such as std::unordered_map<std::string, json>.

    #include <iostream>\n#include <unordered_map>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON value with different types\n    json json_types =\n    {\n        {\"boolean\", true},\n        {\n            \"number\", {\n                {\"integer\", 42},\n                {\"floating-point\", 17.23}\n            }\n        },\n        {\"string\", \"Hello, world!\"},\n        {\"array\", {1, 2, 3, 4, 5}},\n        {\"null\", nullptr}\n    };\n\n    // use explicit conversions\n    auto v1 = json_types[\"boolean\"].template get<bool>();\n    auto v2 = json_types[\"number\"][\"integer\"].template get<int>();\n    auto v3 = json_types[\"number\"][\"integer\"].template get<short>();\n    auto v4 = json_types[\"number\"][\"floating-point\"].template get<float>();\n    auto v5 = json_types[\"number\"][\"floating-point\"].template get<int>();\n    auto v6 = json_types[\"string\"].template get<std::string>();\n    auto v7 = json_types[\"array\"].template get<std::vector<short>>();\n    auto v8 = json_types.template get<std::unordered_map<std::string, json>>();\n\n    // print the conversion results\n    std::cout << v1 << '\\n';\n    std::cout << v2 << ' ' << v3 << '\\n';\n    std::cout << v4 << ' ' << v5 << '\\n';\n    std::cout << v6 << '\\n';\n\n    for (auto i : v7)\n    {\n        std::cout << i << ' ';\n    }\n    std::cout << \"\\n\\n\";\n\n    for (auto i : v8)\n    {\n        std::cout << i.first << \": \" << i.second << '\\n';\n    }\n}\n

    Output:

    1\n42 42\n17.23 17\nHello, world!\n1 2 3 4 5 \n\nstring: \"Hello, world!\"\nnumber: {\"floating-point\":17.23,\"integer\":42}\nnull: null\nboolean: true\narray: [1,2,3,4,5]\n
    Example

    The example below shows how pointers to internal values of a JSON value can be requested. Note that no type conversions are made and a #cpp nullptr is returned if the value and the requested pointer type does not match.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON number\n    json value = 17;\n\n    // explicitly getting pointers\n    auto p1 = value.template get<const json::number_integer_t*>();\n    auto p2 = value.template get<json::number_integer_t*>();\n    auto p3 = value.template get<json::number_integer_t* const>();\n    auto p4 = value.template get<const json::number_integer_t* const>();\n    auto p5 = value.template get<json::number_float_t*>();\n\n    // print the pointees\n    std::cout << *p1 << ' ' << *p2 << ' ' << *p3 << ' ' << *p4 << '\\n';\n    std::cout << std::boolalpha << (p5 == nullptr) << '\\n';\n}\n

    Output:

    17 17 17 17\ntrue\n
    "},{"location":"api/basic_json/get/#version-history","title":"Version history","text":"
    1. Since version 2.1.0.
    2. Since version 2.1.0. Extended to work with other specializations of basic_json in version 3.2.0.
    3. Since version 1.0.0.
    "},{"location":"api/basic_json/get_allocator/","title":"nlohmann::basic_json::get_allocator","text":"
    static allocator_type get_allocator();\n

    Returns the allocator associated with the container.

    "},{"location":"api/basic_json/get_allocator/#return-value","title":"Return value","text":"

    associated allocator

    "},{"location":"api/basic_json/get_allocator/#examples","title":"Examples","text":"Example

    The example shows how get_allocator() is used to created json values.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    auto alloc = json::get_allocator();\n    using traits_t = std::allocator_traits<decltype(alloc)>;\n\n    json* j = traits_t::allocate(alloc, 1);\n    traits_t::construct(alloc, j, \"Hello, world!\");\n\n    std::cout << *j << std::endl;\n\n    traits_t::destroy(alloc, j);\n    traits_t::deallocate(alloc, j, 1);\n}\n

    Output:

    \"Hello, world!\"\n
    "},{"location":"api/basic_json/get_allocator/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/get_binary/","title":"nlohmann::basic_json::get_binary","text":"
    binary_t& get_binary();\n\nconst binary_t& get_binary() const;\n

    Returns a reference to the stored binary value.

    "},{"location":"api/basic_json/get_binary/#return-value","title":"Return value","text":"

    Reference to binary value.

    "},{"location":"api/basic_json/get_binary/#exception-safety","title":"Exception safety","text":"

    Strong exception safety: if an exception occurs, the original value stays intact.

    "},{"location":"api/basic_json/get_binary/#exceptions","title":"Exceptions","text":"

    Throws type_error.302 if the value is not binary

    "},{"location":"api/basic_json/get_binary/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/get_binary/#examples","title":"Examples","text":"Example

    The following code shows how to query a binary value.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a binary vector\n    std::vector<std::uint8_t> vec = {0xCA, 0xFE, 0xBA, 0xBE};\n\n    // create a binary JSON value with subtype 42\n    json j = json::binary(vec, 42);\n\n    // output type and subtype\n    std::cout << \"type: \" << j.type_name() << \", subtype: \" << j.get_binary().subtype() << std::endl;\n}\n

    Output:

    type: binary, subtype: 42\n
    "},{"location":"api/basic_json/get_binary/#version-history","title":"Version history","text":"
    • Added in version 3.8.0.
    "},{"location":"api/basic_json/get_ptr/","title":"nlohmann::basic_json::get_ptr","text":"
    template<typename PointerType>\nPointerType get_ptr() noexcept;\n\ntemplate<typename PointerType>\nconstexpr const PointerType get_ptr() const noexcept;\n

    Implicit pointer access to the internally stored JSON value. No copies are made.

    "},{"location":"api/basic_json/get_ptr/#template-parameters","title":"Template parameters","text":"PointerType pointer type; must be a pointer to array_t, object_t, string_t, boolean_t, number_integer_t, or number_unsigned_t, number_float_t, or binary_t. Other types will not compile."},{"location":"api/basic_json/get_ptr/#return-value","title":"Return value","text":"

    pointer to the internally stored JSON value if the requested pointer type fits to the JSON value; nullptr otherwise

    "},{"location":"api/basic_json/get_ptr/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/basic_json/get_ptr/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/get_ptr/#notes","title":"Notes","text":"

    Undefined behavior

    The pointer becomes invalid if the underlying JSON object changes.

    Consider the following example code where the pointer ptr changes after the array is resized. As a result, reading or writing to ptr after the array change would be undefined behavior. The address of the first array element changes, because the underlying std::vector is resized after adding a fifth element.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    json j = {1, 2, 3, 4};\n    auto* ptr = j[0].get_ptr<std::int64_t*>();\n    std::cout << \"value at \" << ptr << \" is \" << *ptr << std::endl;\n\n    j.push_back(5);\n\n    ptr = j[0].get_ptr<std::int64_t*>();\n    std::cout << \"value at \" << ptr << \" is \" << *ptr << std::endl;\n}\n

    Output:

    value at 0x6000012fc1c8 is 1\nvalue at 0x6000029fc088 is 1\n
    "},{"location":"api/basic_json/get_ptr/#examples","title":"Examples","text":"Example

    The example below shows how pointers to internal values of a JSON value can be requested. Note that no type conversions are made and a nullptr is returned if the value and the requested pointer type does not match.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON number\n    json value = 17;\n\n    // explicitly getting pointers\n    auto p1 = value.get_ptr<const json::number_integer_t*>();\n    auto p2 = value.get_ptr<json::number_integer_t*>();\n    auto p3 = value.get_ptr<json::number_integer_t* const>();\n    auto p4 = value.get_ptr<const json::number_integer_t* const>();\n    auto p5 = value.get_ptr<json::number_float_t*>();\n\n    // print the pointees\n    std::cout << *p1 << ' ' << *p2 << ' ' << *p3 << ' ' << *p4 << '\\n';\n    std::cout << std::boolalpha << (p5 == nullptr) << '\\n';\n}\n

    Output:

    17 17 17 17\ntrue\n
    "},{"location":"api/basic_json/get_ptr/#see-also","title":"See also","text":"
    • get_ref() get a reference value
    "},{"location":"api/basic_json/get_ptr/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Extended to binary types in version 3.8.0.
    "},{"location":"api/basic_json/get_ref/","title":"nlohmann::basic_json::get_ref","text":"
    template<typename ReferenceType>\nReferenceType get_ref();\n\ntemplate<typename ReferenceType>\nconst ReferenceType get_ref() const;\n

    Implicit reference access to the internally stored JSON value. No copies are made.

    "},{"location":"api/basic_json/get_ref/#template-parameters","title":"Template parameters","text":"ReferenceType reference type; must be a reference to array_t, object_t, string_t, boolean_t, number_integer_t, or number_unsigned_t, number_float_t, or binary_t. Enforced by a static assertion."},{"location":"api/basic_json/get_ref/#return-value","title":"Return value","text":"

    reference to the internally stored JSON value if the requested reference type fits to the JSON value; throws type_error.303 otherwise

    "},{"location":"api/basic_json/get_ref/#exception-safety","title":"Exception safety","text":"

    Strong exception safety: if an exception occurs, the original value stays intact.

    "},{"location":"api/basic_json/get_ref/#exceptions","title":"Exceptions","text":"

    Throws type_error.303 if the requested reference type does not match the stored JSON value type; example: \"incompatible ReferenceType for get_ref, actual type is binary\".

    "},{"location":"api/basic_json/get_ref/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/get_ref/#notes","title":"Notes","text":"

    Undefined behavior

    The reference becomes invalid if the underlying JSON object changes.

    "},{"location":"api/basic_json/get_ref/#examples","title":"Examples","text":"Example

    The example shows several calls to get_ref().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON number\n    json value = 17;\n\n    // explicitly getting references\n    auto r1 = value.get_ref<const json::number_integer_t&>();\n    auto r2 = value.get_ref<json::number_integer_t&>();\n\n    // print the values\n    std::cout << r1 << ' ' << r2 << '\\n';\n\n    // incompatible type throws exception\n    try\n    {\n        auto r3 = value.get_ref<json::number_float_t&>();\n    }\n    catch (const json::type_error& ex)\n    {\n        std::cout << ex.what() << '\\n';\n    }\n}\n

    Output:

    17 17\n[json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is number\n
    "},{"location":"api/basic_json/get_ref/#see-also","title":"See also","text":"
    • get_ptr() get a pointer value
    "},{"location":"api/basic_json/get_ref/#version-history","title":"Version history","text":"
    • Added in version 1.1.0.
    • Extended to binary types in version 3.8.0.
    "},{"location":"api/basic_json/get_to/","title":"nlohmann::basic_json::get_to","text":"
    template<typename ValueType>\nValueType& get_to(ValueType& v) const noexcept(\n    noexcept(JSONSerializer<ValueType>::from_json(\n        std::declval<const basic_json_t&>(), v)));\n

    Explicit type conversion between the JSON value and a compatible value. The value is filled into the input parameter by calling the json_serializer<ValueType> from_json() method.

    The function is equivalent to executing

    ValueType v;\nJSONSerializer<ValueType>::from_json(*this, v);\n

    This overload is chosen if:

    • ValueType is not basic_json,
    • json_serializer<ValueType> has a from_json() method of the form void from_json(const basic_json&, ValueType&)
    "},{"location":"api/basic_json/get_to/#template-parameters","title":"Template parameters","text":"ValueType the value type to return"},{"location":"api/basic_json/get_to/#return-value","title":"Return value","text":"

    the input parameter, allowing chaining calls

    "},{"location":"api/basic_json/get_to/#exceptions","title":"Exceptions","text":"

    Depends on what json_serializer<ValueType> from_json() method throws

    "},{"location":"api/basic_json/get_to/#examples","title":"Examples","text":"Example

    The example below shows several conversions from JSON values to other types. There a few things to note: (1) Floating-point numbers can be converted to integers, (2) A JSON array can be converted to a standard std::vector<short>, (3) A JSON object can be converted to C++ associative containers such as #cpp std::unordered_map<std::string, json>.

    #include <iostream>\n#include <unordered_map>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON value with different types\n    json json_types =\n    {\n        {\"boolean\", true},\n        {\n            \"number\", {\n                {\"integer\", 42},\n                {\"floating-point\", 17.23}\n            }\n        },\n        {\"string\", \"Hello, world!\"},\n        {\"array\", {1, 2, 3, 4, 5}},\n        {\"null\", nullptr}\n    };\n\n    bool v1;\n    int v2;\n    short v3;\n    float v4;\n    int v5;\n    std::string v6;\n    std::vector<short> v7;\n    std::unordered_map<std::string, json> v8;\n\n    // use explicit conversions\n    json_types[\"boolean\"].get_to(v1);\n    json_types[\"number\"][\"integer\"].get_to(v2);\n    json_types[\"number\"][\"integer\"].get_to(v3);\n    json_types[\"number\"][\"floating-point\"].get_to(v4);\n    json_types[\"number\"][\"floating-point\"].get_to(v5);\n    json_types[\"string\"].get_to(v6);\n    json_types[\"array\"].get_to(v7);\n    json_types.get_to(v8);\n\n    // print the conversion results\n    std::cout << v1 << '\\n';\n    std::cout << v2 << ' ' << v3 << '\\n';\n    std::cout << v4 << ' ' << v5 << '\\n';\n    std::cout << v6 << '\\n';\n\n    for (auto i : v7)\n    {\n        std::cout << i << ' ';\n    }\n    std::cout << \"\\n\\n\";\n\n    for (auto i : v8)\n    {\n        std::cout << i.first << \": \" << i.second << '\\n';\n    }\n}\n

    Output:

    1\n42 42\n17.23 17\nHello, world!\n1 2 3 4 5 \n\nstring: \"Hello, world!\"\nnumber: {\"floating-point\":17.23,\"integer\":42}\nnull: null\nboolean: true\narray: [1,2,3,4,5]\n
    "},{"location":"api/basic_json/get_to/#version-history","title":"Version history","text":"
    • Since version 3.3.0.
    "},{"location":"api/basic_json/input_format_t/","title":"nlohmann::basic_json::input_format_t","text":"
    enum class input_format_t {\n    json,\n    cbor,\n    msgpack,\n    ubjson,\n    bson,\n    bjdata\n};\n

    This enumeration is used in the sax_parse function to choose the input format to parse:

    json JSON (JavaScript Object Notation) cbor CBOR (Concise Binary Object Representation) msgpack MessagePack ubjson UBJSON (Universal Binary JSON) bson BSON (Binary JSON) bjdata BJData (Binary JData)"},{"location":"api/basic_json/input_format_t/#examples","title":"Examples","text":"Example

    The example below shows how an input_format_t enum value is passed to sax_parse to set the input format to CBOR.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // CBOR byte string\n    std::vector<std::uint8_t> vec = {{0x44, 0xcA, 0xfe, 0xba, 0xbe}};\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse CBOR\n    bool result = json::sax_parse(vec, &sec, json::input_format_t::cbor);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

    Output:

    binary(val=[...])\n\nresult: true\n
    "},{"location":"api/basic_json/input_format_t/#version-history","title":"Version history","text":"
    • Added in version 3.2.0.
    "},{"location":"api/basic_json/insert/","title":"nlohmann::basic_json::insert","text":"
    // (1)\niterator insert(const_iterator pos, const basic_json& val);\niterator insert(const_iterator pos, basic_json&& val);\n\n// (2)\niterator insert(const_iterator pos, size_type cnt, const basic_json& val);\n\n// (3)\niterator insert(const_iterator pos, const_iterator first, const_iterator last);\n\n// (4)\niterator insert(const_iterator pos, initializer_list_t ilist);\n\n// (5)\nvoid insert(const_iterator first, const_iterator last);\n
    1. Inserts element val into array before iterator pos.
    2. Inserts cnt copies of val into array before iterator pos.
    3. Inserts elements from range [first, last) into array before iterator pos.
    4. Inserts elements from initializer list ilist into array before iterator pos.
    5. Inserts elements from range [first, last) into object.
    "},{"location":"api/basic_json/insert/#iterator-invalidation","title":"Iterator invalidation","text":"

    For all cases where an element is added to an array, a reallocation can happen, in which case all iterators (including the end() iterator) and all references to the elements are invalidated. Otherwise, only the end() iterator is invalidated. Also, any iterator or reference after the insertion point will point to the same index which is now a different value.

    For ordered_json, also adding an element to an object can yield a reallocation which again invalidates all iterators and all references. Also, any iterator or reference after the insertion point will point to the same index which is now a different value.

    "},{"location":"api/basic_json/insert/#parameters","title":"Parameters","text":"pos (in) iterator before which the content will be inserted; may be the end() iterator val (in) value to insert cnt (in) number of copies of val to insert first (in) begin of the range of elements to insert last (in) end of the range of elements to insert ilist (in) initializer list to insert the values from"},{"location":"api/basic_json/insert/#return-value","title":"Return value","text":"
    1. iterator pointing to the inserted val.
    2. iterator pointing to the first element inserted, or pos if cnt==0
    3. iterator pointing to the first element inserted, or pos if first==last
    4. iterator pointing to the first element inserted, or pos if ilist is empty
    5. (none)
    "},{"location":"api/basic_json/insert/#exception-safety","title":"Exception safety","text":"

    Strong exception safety: if an exception occurs, the original value stays intact.

    "},{"location":"api/basic_json/insert/#exceptions","title":"Exceptions","text":"
    1. The function can throw the following exceptions:
      • Throws type_error.309 if called on JSON values other than arrays; example: \"cannot use insert() with string\"
      • Throws invalid_iterator.202 if called on an iterator which does not belong to the current JSON value; example: \"iterator does not fit current value\"
    2. The function can throw the following exceptions:
      • Throws type_error.309 if called on JSON values other than arrays; example: \"cannot use insert() with string\"
      • Throws invalid_iterator.202 if called on an iterator which does not belong to the current JSON value; example: \"iterator does not fit current value\"
    3. The function can throw the following exceptions:
      • Throws type_error.309 if called on JSON values other than arrays; example: \"cannot use insert() with string\"
      • Throws invalid_iterator.202 if called on an iterator which does not belong to the current JSON value; example: \"iterator does not fit current value\"
      • Throws invalid_iterator.210 if first and last do not belong to the same JSON value; example: \"iterators do not fit\"
      • Throws invalid_iterator.211 if first or last are iterators into container for which insert is called; example: \"passed iterators may not belong to container\"
    4. The function can throw the following exceptions:
      • Throws type_error.309 if called on JSON values other than arrays; example: \"cannot use insert() with string\"
      • Throws invalid_iterator.202 if called on an iterator which does not belong to the current JSON value; example: \"iterator does not fit current value\"
    5. The function can throw the following exceptions:
      • Throws type_error.309 if called on JSON values other than objects; example: \"cannot use insert() with string\"
      • Throws invalid_iterator.202 if called on an iterator which does not belong to the current JSON value; example: \"iterator does not fit current value\"
      • Throws invalid_iterator.210 if first and last do not belong to the same JSON value; example: \"iterators do not fit\"
    "},{"location":"api/basic_json/insert/#complexity","title":"Complexity","text":"
    1. Constant plus linear in the distance between pos and end of the container.
    2. Linear in cnt plus linear in the distance between pos and end of the container.
    3. Linear in std::distance(first, last) plus linear in the distance between pos and end of the container.
    4. Linear in ilist.size() plus linear in the distance between pos and end of the container.
    5. Logarithmic: O(N*log(size() + N)), where N is the number of elements to insert.
    "},{"location":"api/basic_json/insert/#examples","title":"Examples","text":"Example (1): insert element into array

    The example shows how insert() is used.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON array\n    json v = {1, 2, 3, 4};\n\n    // insert number 10 before number 3\n    auto new_pos = v.insert(v.begin() + 2, 10);\n\n    // output new array and result of insert call\n    std::cout << *new_pos << '\\n';\n    std::cout << v << '\\n';\n}\n

    Output:

    10\n[1,2,10,3,4]\n
    Example (2): insert copies of element into array

    The example shows how insert() is used.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON array\n    json v = {1, 2, 3, 4};\n\n    // insert number 7 copies of number 7 before number 3\n    auto new_pos = v.insert(v.begin() + 2, 7, 7);\n\n    // output new array and result of insert call\n    std::cout << *new_pos << '\\n';\n    std::cout << v << '\\n';\n}\n

    Output:

    7\n[1,2,7,7,7,7,7,7,7,3,4]\n
    Example (3): insert range of elements into array

    The example shows how insert() is used.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON array\n    json v = {1, 2, 3, 4};\n\n    // create a JSON array to copy values from\n    json v2 = {\"one\", \"two\", \"three\", \"four\"};\n\n    // insert range from v2 before the end of array v\n    auto new_pos = v.insert(v.end(), v2.begin(), v2.end());\n\n    // output new array and result of insert call\n    std::cout << *new_pos << '\\n';\n    std::cout << v << '\\n';\n}\n

    Output:

    \"one\"\n[1,2,3,4,\"one\",\"two\",\"three\",\"four\"]\n
    Example (4): insert elements from initializer list into array

    The example shows how insert() is used.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON array\n    json v = {1, 2, 3, 4};\n\n    // insert range from v2 before the end of array v\n    auto new_pos = v.insert(v.end(), {7, 8, 9});\n\n    // output new array and result of insert call\n    std::cout << *new_pos << '\\n';\n    std::cout << v << '\\n';\n}\n

    Output:

    7\n[1,2,3,4,7,8,9]\n
    Example (5): insert range of elements into object

    The example shows how insert() is used.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create two JSON objects\n    json j1 = {{\"one\", \"eins\"}, {\"two\", \"zwei\"}};\n    json j2 = {{\"eleven\", \"elf\"}, {\"seventeen\", \"siebzehn\"}};\n\n    // output objects\n    std::cout << j1 << '\\n';\n    std::cout << j2 << '\\n';\n\n    // insert range from j2 to j1\n    j1.insert(j2.begin(), j2.end());\n\n    // output result of insert call\n    std::cout << j1 << '\\n';\n}\n

    Output:

    {\"one\":\"eins\",\"two\":\"zwei\"}\n{\"eleven\":\"elf\",\"seventeen\":\"siebzehn\"}\n{\"eleven\":\"elf\",\"one\":\"eins\",\"seventeen\":\"siebzehn\",\"two\":\"zwei\"}\n
    "},{"location":"api/basic_json/insert/#version-history","title":"Version history","text":"
    1. Added in version 1.0.0.
    2. Added in version 1.0.0.
    3. Added in version 1.0.0.
    4. Added in version 1.0.0.
    5. Added in version 3.0.0.
    "},{"location":"api/basic_json/invalid_iterator/","title":"nlohmann::basic_json::invalid_iterator","text":"
    class invalid_iterator : public exception;\n

    This exception is thrown if iterators passed to a library function do not match the expected semantics.

    Exceptions have ids 2xx (see list of iterator errors).

    classDiagram\n  direction LR\n\n    class std_exception [\"std::exception\"] {\n        <<interface>>\n    }\n\n    class json_exception [\"basic_json::exception\"] {\n        +const int id\n        +const char* what() const\n    }\n\n    class json_parse_error [\"basic_json::parse_error\"] {\n        +const std::size_t byte\n    }\n\n    class json_invalid_iterator [\"basic_json::invalid_iterator\"]\n    class json_type_error [\"basic_json::type_error\"]\n    class json_out_of_range [\"basic_json::out_of_range\"]\n    class json_other_error [\"basic_json::other_error\"]\n\n    std_exception <|-- json_exception\n    json_exception <|-- json_parse_error\n    json_exception <|-- json_invalid_iterator\n    json_exception <|-- json_type_error\n    json_exception <|-- json_out_of_range\n    json_exception <|-- json_other_error\n\n    style json_invalid_iterator fill:#CCCCFF
    "},{"location":"api/basic_json/invalid_iterator/#member-functions","title":"Member functions","text":"
    • what - returns explanatory string
    "},{"location":"api/basic_json/invalid_iterator/#member-variables","title":"Member variables","text":"
    • id - the id of the exception
    "},{"location":"api/basic_json/invalid_iterator/#examples","title":"Examples","text":"Example

    The following code shows how a invalid_iterator exception can be caught.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    try\n    {\n        // calling iterator::key() on non-object iterator\n        json j = \"string\";\n        json::iterator it = j.begin();\n        auto k = it.key();\n    }\n    catch (const json::invalid_iterator& e)\n    {\n        // output exception information\n        std::cout << \"message: \" << e.what() << '\\n'\n                  << \"exception id: \" << e.id << std::endl;\n    }\n}\n

    Output:

    message: [json.exception.invalid_iterator.207] cannot use key() for non-object iterators\nexception id: 207\n
    "},{"location":"api/basic_json/invalid_iterator/#see-also","title":"See also","text":"
    • List of iterator errors
    • parse_error for exceptions indicating a parse error
    • type_error for exceptions indicating executing a member function with a wrong type
    • out_of_range for exceptions indicating access out of the defined range
    • other_error for exceptions indicating other library errors
    "},{"location":"api/basic_json/invalid_iterator/#version-history","title":"Version history","text":"
    • Since version 3.0.0.
    "},{"location":"api/basic_json/is_array/","title":"nlohmann::basic_json::is_array","text":"
    constexpr bool is_array() const noexcept;\n

    This function returns true if and only if the JSON value is an array.

    "},{"location":"api/basic_json/is_array/#return-value","title":"Return value","text":"

    true if type is an array, false otherwise.

    "},{"location":"api/basic_json/is_array/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/is_array/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/is_array/#examples","title":"Examples","text":"Example

    The following code exemplifies is_array() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_array()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_array() << '\\n';\n    std::cout << j_boolean.is_array() << '\\n';\n    std::cout << j_number_integer.is_array() << '\\n';\n    std::cout << j_number_unsigned_integer.is_array() << '\\n';\n    std::cout << j_number_float.is_array() << '\\n';\n    std::cout << j_object.is_array() << '\\n';\n    std::cout << j_array.is_array() << '\\n';\n    std::cout << j_string.is_array() << '\\n';\n    std::cout << j_binary.is_array() << '\\n';\n}\n

    Output:

    false\nfalse\nfalse\nfalse\nfalse\nfalse\ntrue\nfalse\nfalse\n
    "},{"location":"api/basic_json/is_array/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/is_binary/","title":"nlohmann::basic_json::is_binary","text":"
    constexpr bool is_binary() const noexcept;\n

    This function returns true if and only if the JSON value is binary array.

    "},{"location":"api/basic_json/is_binary/#return-value","title":"Return value","text":"

    true if type is binary, false otherwise.

    "},{"location":"api/basic_json/is_binary/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/is_binary/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/is_binary/#examples","title":"Examples","text":"Example

    The following code exemplifies is_binary() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_binary()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_binary() << '\\n';\n    std::cout << j_boolean.is_binary() << '\\n';\n    std::cout << j_number_integer.is_binary() << '\\n';\n    std::cout << j_number_unsigned_integer.is_binary() << '\\n';\n    std::cout << j_number_float.is_binary() << '\\n';\n    std::cout << j_object.is_binary() << '\\n';\n    std::cout << j_array.is_binary() << '\\n';\n    std::cout << j_string.is_binary() << '\\n';\n    std::cout << j_binary.is_binary() << '\\n';\n}\n

    Output:

    false\nfalse\nfalse\nfalse\nfalse\nfalse\nfalse\nfalse\ntrue\n
    "},{"location":"api/basic_json/is_binary/#version-history","title":"Version history","text":"
    • Added in version 3.8.0.
    "},{"location":"api/basic_json/is_boolean/","title":"nlohmann::basic_json::is_boolean","text":"
    constexpr bool is_boolean() const noexcept;\n

    This function returns true if and only if the JSON value is true or false.

    "},{"location":"api/basic_json/is_boolean/#return-value","title":"Return value","text":"

    true if type is boolean, false otherwise.

    "},{"location":"api/basic_json/is_boolean/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/is_boolean/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/is_boolean/#examples","title":"Examples","text":"Example

    The following code exemplifies is_boolean() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_boolean()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_boolean() << '\\n';\n    std::cout << j_boolean.is_boolean() << '\\n';\n    std::cout << j_number_integer.is_boolean() << '\\n';\n    std::cout << j_number_unsigned_integer.is_boolean() << '\\n';\n    std::cout << j_number_float.is_boolean() << '\\n';\n    std::cout << j_object.is_boolean() << '\\n';\n    std::cout << j_array.is_boolean() << '\\n';\n    std::cout << j_string.is_boolean() << '\\n';\n    std::cout << j_binary.is_boolean() << '\\n';\n}\n

    Output:

    false\ntrue\nfalse\nfalse\nfalse\nfalse\nfalse\nfalse\nfalse\n
    "},{"location":"api/basic_json/is_boolean/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/is_discarded/","title":"nlohmann::basic_json::is_discarded","text":"
    constexpr bool is_discarded() const noexcept;\n

    This function returns true for a JSON value if either:

    • the value was discarded during parsing with a callback function (see parser_callback_t), or
    • the value is the result of parsing invalid JSON with parameter allow_exceptions set to false; see parse for more information.
    "},{"location":"api/basic_json/is_discarded/#return-value","title":"Return value","text":"

    true if type is discarded, false otherwise.

    "},{"location":"api/basic_json/is_discarded/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/is_discarded/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/is_discarded/#notes","title":"Notes","text":"

    Comparisons

    Discarded values are never compared equal with operator==. That is, checking whether a JSON value j is discarded will only work via:

    j.is_discarded()\n

    because

    j == json::value_t::discarded\n

    will always be false.

    Removal during parsing with callback functions

    When a value is discarded by a callback function (see parser_callback_t) during parsing, then it is removed when it is part of a structured value. For instance, if the second value of an array is discarded, instead of [null, discarded, false], the array [null, false] is returned. Only if the top-level value is discarded, the return value of the parse call is discarded.

    This function will always be false for JSON values after parsing. That is, discarded values can only occur during parsing, but will be removed when inside a structured value or replaced by null in other cases.

    "},{"location":"api/basic_json/is_discarded/#examples","title":"Examples","text":"Example

    The following code exemplifies is_discarded() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_discarded()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_discarded() << '\\n';\n    std::cout << j_boolean.is_discarded() << '\\n';\n    std::cout << j_number_integer.is_discarded() << '\\n';\n    std::cout << j_number_unsigned_integer.is_discarded() << '\\n';\n    std::cout << j_number_float.is_discarded() << '\\n';\n    std::cout << j_object.is_discarded() << '\\n';\n    std::cout << j_array.is_discarded() << '\\n';\n    std::cout << j_string.is_discarded() << '\\n';\n    std::cout << j_binary.is_discarded() << '\\n';\n}\n

    Output:

    false\nfalse\nfalse\nfalse\nfalse\nfalse\nfalse\nfalse\nfalse\n
    "},{"location":"api/basic_json/is_discarded/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/is_null/","title":"nlohmann::basic_json::is_null","text":"
    constexpr bool is_null() const noexcept;\n

    This function returns true if and only if the JSON value is null.

    "},{"location":"api/basic_json/is_null/#return-value","title":"Return value","text":"

    true if type is null, false otherwise.

    "},{"location":"api/basic_json/is_null/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/is_null/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/is_null/#examples","title":"Examples","text":"Example

    The following code exemplifies is_null() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_null()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_null() << '\\n';\n    std::cout << j_boolean.is_null() << '\\n';\n    std::cout << j_number_integer.is_null() << '\\n';\n    std::cout << j_number_unsigned_integer.is_null() << '\\n';\n    std::cout << j_number_float.is_null() << '\\n';\n    std::cout << j_object.is_null() << '\\n';\n    std::cout << j_array.is_null() << '\\n';\n    std::cout << j_string.is_null() << '\\n';\n    std::cout << j_binary.is_null() << '\\n';\n}\n

    Output:

    true\nfalse\nfalse\nfalse\nfalse\nfalse\nfalse\nfalse\nfalse\n
    "},{"location":"api/basic_json/is_null/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/is_number/","title":"nlohmann::basic_json::is_number","text":"
    constexpr bool is_number() const noexcept;\n

    This function returns true if and only if the JSON value is a number. This includes both integer (signed and unsigned) and floating-point values.

    "},{"location":"api/basic_json/is_number/#return-value","title":"Return value","text":"

    true if type is number (regardless whether integer, unsigned integer or floating-type), false otherwise.

    "},{"location":"api/basic_json/is_number/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/is_number/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/is_number/#possible-implementation","title":"Possible implementation","text":"
    constexpr bool is_number() const noexcept\n{\n    return is_number_integer() || is_number_float();\n}\n
    "},{"location":"api/basic_json/is_number/#examples","title":"Examples","text":"Example

    The following code exemplifies is_number() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_number()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_number() << '\\n';\n    std::cout << j_boolean.is_number() << '\\n';\n    std::cout << j_number_integer.is_number() << '\\n';\n    std::cout << j_number_unsigned_integer.is_number() << '\\n';\n    std::cout << j_number_float.is_number() << '\\n';\n    std::cout << j_object.is_number() << '\\n';\n    std::cout << j_array.is_number() << '\\n';\n    std::cout << j_string.is_number() << '\\n';\n    std::cout << j_binary.is_number() << '\\n';\n}\n

    Output:

    false\nfalse\ntrue\ntrue\ntrue\nfalse\nfalse\nfalse\nfalse\n
    "},{"location":"api/basic_json/is_number/#see-also","title":"See also","text":"
    • is_number_integer() check if value is an integer or unsigned integer number
    • is_number_unsigned() check if value is an unsigned integer number
    • is_number_float() check if value is a floating-point number
    "},{"location":"api/basic_json/is_number/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Extended to also return true for unsigned integers in 2.0.0.
    "},{"location":"api/basic_json/is_number_float/","title":"nlohmann::basic_json::is_number_float","text":"
    constexpr bool is_number_float() const noexcept;\n

    This function returns true if and only if the JSON value is a floating-point number. This excludes signed and unsigned integer values.

    "},{"location":"api/basic_json/is_number_float/#return-value","title":"Return value","text":"

    true if type is a floating-point number, false otherwise.

    "},{"location":"api/basic_json/is_number_float/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/is_number_float/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/is_number_float/#examples","title":"Examples","text":"Example

    The following code exemplifies is_number_float() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_number_float()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_number_float() << '\\n';\n    std::cout << j_boolean.is_number_float() << '\\n';\n    std::cout << j_number_integer.is_number_float() << '\\n';\n    std::cout << j_number_unsigned_integer.is_number_float() << '\\n';\n    std::cout << j_number_float.is_number_float() << '\\n';\n    std::cout << j_object.is_number_float() << '\\n';\n    std::cout << j_array.is_number_float() << '\\n';\n    std::cout << j_string.is_number_float() << '\\n';\n    std::cout << j_binary.is_number_float() << '\\n';\n}\n

    Output:

    false\nfalse\nfalse\nfalse\ntrue\nfalse\nfalse\nfalse\nfalse\n
    "},{"location":"api/basic_json/is_number_float/#see-also","title":"See also","text":"
    • is_number() check if value is a number
    • is_number_integer() check if value is an integer or unsigned integer number
    • is_number_unsigned() check if value is an unsigned integer number
    "},{"location":"api/basic_json/is_number_float/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/is_number_integer/","title":"nlohmann::basic_json::is_number_integer","text":"
    constexpr bool is_number_integer() const noexcept;\n

    This function returns true if and only if the JSON value is a signed or unsigned integer number. This excludes floating-point values.

    "},{"location":"api/basic_json/is_number_integer/#return-value","title":"Return value","text":"

    true if type is an integer or unsigned integer number, false otherwise.

    "},{"location":"api/basic_json/is_number_integer/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/is_number_integer/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/is_number_integer/#examples","title":"Examples","text":"Example

    The following code exemplifies is_number_integer() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_number_integer()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_number_integer() << '\\n';\n    std::cout << j_boolean.is_number_integer() << '\\n';\n    std::cout << j_number_integer.is_number_integer() << '\\n';\n    std::cout << j_number_unsigned_integer.is_number_integer() << '\\n';\n    std::cout << j_number_float.is_number_integer() << '\\n';\n    std::cout << j_object.is_number_integer() << '\\n';\n    std::cout << j_array.is_number_integer() << '\\n';\n    std::cout << j_string.is_number_integer() << '\\n';\n    std::cout << j_binary.is_number_integer() << '\\n';\n}\n

    Output:

    false\nfalse\ntrue\ntrue\nfalse\nfalse\nfalse\nfalse\nfalse\n
    "},{"location":"api/basic_json/is_number_integer/#see-also","title":"See also","text":"
    • is_number() check if value is a number
    • is_number_unsigned() check if value is an unsigned integer number
    • is_number_float() check if value is a floating-point number
    "},{"location":"api/basic_json/is_number_integer/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Extended to also return true for unsigned integers in 2.0.0.
    "},{"location":"api/basic_json/is_number_unsigned/","title":"nlohmann::basic_json::is_number_unsigned","text":"
    constexpr bool is_number_unsigned() const noexcept;\n

    This function returns true if and only if the JSON value is an unsigned integer number. This excludes floating-point and signed integer values.

    "},{"location":"api/basic_json/is_number_unsigned/#return-value","title":"Return value","text":"

    true if type is an unsigned integer number, false otherwise.

    "},{"location":"api/basic_json/is_number_unsigned/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/is_number_unsigned/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/is_number_unsigned/#examples","title":"Examples","text":"Example

    The following code exemplifies is_number_unsigned() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_number_unsigned()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_number_unsigned() << '\\n';\n    std::cout << j_boolean.is_number_unsigned() << '\\n';\n    std::cout << j_number_integer.is_number_unsigned() << '\\n';\n    std::cout << j_number_unsigned_integer.is_number_unsigned() << '\\n';\n    std::cout << j_number_float.is_number_unsigned() << '\\n';\n    std::cout << j_object.is_number_unsigned() << '\\n';\n    std::cout << j_array.is_number_unsigned() << '\\n';\n    std::cout << j_string.is_number_unsigned() << '\\n';\n    std::cout << j_binary.is_number_unsigned() << '\\n';\n}\n

    Output:

    false\nfalse\nfalse\ntrue\nfalse\nfalse\nfalse\nfalse\nfalse\n
    "},{"location":"api/basic_json/is_number_unsigned/#see-also","title":"See also","text":"
    • is_number() check if value is a number
    • is_number_integer() check if value is an integer or unsigned integer number
    • is_number_float() check if value is a floating-point number
    "},{"location":"api/basic_json/is_number_unsigned/#version-history","title":"Version history","text":"
    • Added in version 2.0.0.
    "},{"location":"api/basic_json/is_object/","title":"nlohmann::basic_json::is_object","text":"
    constexpr bool is_object() const noexcept;\n

    This function returns true if and only if the JSON value is an object.

    "},{"location":"api/basic_json/is_object/#return-value","title":"Return value","text":"

    true if type is an object, false otherwise.

    "},{"location":"api/basic_json/is_object/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/is_object/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/is_object/#examples","title":"Examples","text":"Example

    The following code exemplifies is_object() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_float = 23.42;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_object()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_object() << '\\n';\n    std::cout << j_boolean.is_object() << '\\n';\n    std::cout << j_number_integer.is_object() << '\\n';\n    std::cout << j_number_unsigned_integer.is_object() << '\\n';\n    std::cout << j_number_float.is_object() << '\\n';\n    std::cout << j_object.is_object() << '\\n';\n    std::cout << j_array.is_object() << '\\n';\n    std::cout << j_string.is_object() << '\\n';\n    std::cout << j_binary.is_object() << '\\n';\n}\n

    Output:

    false\nfalse\nfalse\nfalse\nfalse\ntrue\nfalse\nfalse\nfalse\n
    "},{"location":"api/basic_json/is_object/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/is_primitive/","title":"nlohmann::basic_json::is_primitive","text":"
    constexpr bool is_primitive() const noexcept;\n

    This function returns true if and only if the JSON type is primitive (string, number, boolean, null, binary).

    "},{"location":"api/basic_json/is_primitive/#return-value","title":"Return value","text":"

    true if type is primitive (string, number, boolean, null, or binary), false otherwise.

    "},{"location":"api/basic_json/is_primitive/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/is_primitive/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/is_primitive/#possible-implementation","title":"Possible implementation","text":"
    constexpr bool is_primitive() const noexcept\n{\n    return is_null() || is_string() || is_boolean() || is_number() || is_binary();\n}\n
    "},{"location":"api/basic_json/is_primitive/#notes","title":"Notes","text":"

    The term primitive stems from RFC 8259:

    JSON can represent four primitive types (strings, numbers, booleans, and null) and two structured types (objects and arrays).

    This library extends primitive types to binary types, because binary types are roughly comparable to strings. Hence, is_primitive() returns true for binary values.

    "},{"location":"api/basic_json/is_primitive/#examples","title":"Examples","text":"Example

    The following code exemplifies is_primitive() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_float = 23.42;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_primitive()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_primitive() << '\\n';\n    std::cout << j_boolean.is_primitive() << '\\n';\n    std::cout << j_number_integer.is_primitive() << '\\n';\n    std::cout << j_number_unsigned_integer.is_primitive() << '\\n';\n    std::cout << j_number_float.is_primitive() << '\\n';\n    std::cout << j_object.is_primitive() << '\\n';\n    std::cout << j_array.is_primitive() << '\\n';\n    std::cout << j_string.is_primitive() << '\\n';\n    std::cout << j_binary.is_primitive() << '\\n';\n}\n

    Output:

    true\ntrue\ntrue\ntrue\ntrue\nfalse\nfalse\ntrue\ntrue\n
    "},{"location":"api/basic_json/is_primitive/#see-also","title":"See also","text":"
    • is_structured() returns whether JSON value is structured
    • is_null() returns whether JSON value is null
    • is_string() returns whether JSON value is a string
    • is_boolean() returns whether JSON value is a boolean
    • is_number() returns whether JSON value is a number
    • is_binary() returns whether JSON value is a binary array
    "},{"location":"api/basic_json/is_primitive/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Extended to return true for binary types in version 3.8.0.
    "},{"location":"api/basic_json/is_string/","title":"nlohmann::basic_json::is_string","text":"
    constexpr bool is_string() const noexcept;\n

    This function returns true if and only if the JSON value is a string.

    "},{"location":"api/basic_json/is_string/#return-value","title":"Return value","text":"

    true if type is a string, false otherwise.

    "},{"location":"api/basic_json/is_string/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/is_string/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/is_string/#examples","title":"Examples","text":"Example

    The following code exemplifies is_string() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_float = 23.42;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_string()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_string() << '\\n';\n    std::cout << j_boolean.is_string() << '\\n';\n    std::cout << j_number_integer.is_string() << '\\n';\n    std::cout << j_number_unsigned_integer.is_string() << '\\n';\n    std::cout << j_number_float.is_string() << '\\n';\n    std::cout << j_object.is_string() << '\\n';\n    std::cout << j_array.is_string() << '\\n';\n    std::cout << j_string.is_string() << '\\n';\n    std::cout << j_binary.is_string() << '\\n';\n}\n

    Output:

    false\nfalse\nfalse\nfalse\nfalse\nfalse\nfalse\ntrue\nfalse\n
    "},{"location":"api/basic_json/is_string/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/is_structured/","title":"nlohmann::basic_json::is_structured","text":"
    constexpr bool is_structured() const noexcept;\n

    This function returns true if and only if the JSON type is structured (array or object).

    "},{"location":"api/basic_json/is_structured/#return-value","title":"Return value","text":"

    true if type is structured (array or object), false otherwise.

    "},{"location":"api/basic_json/is_structured/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/is_structured/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/is_structured/#possible-implementation","title":"Possible implementation","text":"
    constexpr bool is_structured() const noexcept\n{\n    return is_array() || is_object();\n}\n
    "},{"location":"api/basic_json/is_structured/#notes","title":"Notes","text":"

    The term structured stems from RFC 8259:

    JSON can represent four primitive types (strings, numbers, booleans, and null) and two structured types (objects and arrays).

    Note that though strings are containers in C++, they are treated as primitive values in JSON.

    "},{"location":"api/basic_json/is_structured/#examples","title":"Examples","text":"Example

    The following code exemplifies is_structured() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_float = 23.42;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_structured()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_structured() << '\\n';\n    std::cout << j_boolean.is_structured() << '\\n';\n    std::cout << j_number_integer.is_structured() << '\\n';\n    std::cout << j_number_unsigned_integer.is_structured() << '\\n';\n    std::cout << j_number_float.is_structured() << '\\n';\n    std::cout << j_object.is_structured() << '\\n';\n    std::cout << j_array.is_structured() << '\\n';\n    std::cout << j_string.is_structured() << '\\n';\n    std::cout << j_binary.is_structured() << '\\n';\n}\n

    Output:

    false\nfalse\nfalse\nfalse\nfalse\ntrue\ntrue\nfalse\nfalse\n
    "},{"location":"api/basic_json/is_structured/#see-also","title":"See also","text":"
    • is_primitive() returns whether JSON value is primitive
    • is_array() returns whether value is an array
    • is_object() returns whether value is an object
    "},{"location":"api/basic_json/is_structured/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/items/","title":"nlohmann::basic_json::items","text":"
    iteration_proxy<iterator> items() noexcept;\niteration_proxy<const_iterator> items() const noexcept;\n

    This function allows accessing iterator::key() and iterator::value() during range-based for loops. In these loops, a reference to the JSON values is returned, so there is no access to the underlying iterator.

    For loop without items() function:

    for (auto it = j_object.begin(); it != j_object.end(); ++it)\n{\n    std::cout << \"key: \" << it.key() << \", value:\" << it.value() << '\\n';\n}\n

    Range-based for loop without items() function:

    for (auto it : j_object)\n{\n    // \"it\" is of type json::reference and has no key() member\n    std::cout << \"value: \" << it << '\\n';\n}\n

    Range-based for loop with items() function:

    for (auto& el : j_object.items())\n{\n    std::cout << \"key: \" << el.key() << \", value:\" << el.value() << '\\n';\n}\n

    The items() function also allows using structured bindings (C++17):

    for (auto& [key, val] : j_object.items())\n{\n    std::cout << \"key: \" << key << \", value:\" << val << '\\n';\n}\n
    "},{"location":"api/basic_json/items/#return-value","title":"Return value","text":"

    iteration proxy object wrapping the current value with an interface to use in range-based for loops

    "},{"location":"api/basic_json/items/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/items/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/items/#notes","title":"Notes","text":"

    When iterating over an array, key() will return the index of the element as string (see example). For primitive types (e.g., numbers), key() returns an empty string.

    Lifetime issues

    Using items() on temporary objects is dangerous. Make sure the object's lifetime exceeds the iteration. See #2040 for more information.

    "},{"location":"api/basic_json/items/#examples","title":"Examples","text":"Example

    The following code shows an example for items().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n\n    // example for an object\n    for (auto& x : j_object.items())\n    {\n        std::cout << \"key: \" << x.key() << \", value: \" << x.value() << '\\n';\n    }\n\n    // example for an array\n    for (auto& x : j_array.items())\n    {\n        std::cout << \"key: \" << x.key() << \", value: \" << x.value() << '\\n';\n    }\n}\n

    Output:

    key: one, value: 1\nkey: two, value: 2\nkey: 0, value: 1\nkey: 1, value: 2\nkey: 2, value: 4\nkey: 3, value: 8\nkey: 4, value: 16\n
    "},{"location":"api/basic_json/items/#version-history","title":"Version history","text":"
    • Added iterator_wrapper in version 3.0.0.
    • Added items and deprecated iterator_wrapper in version 3.1.0.
    • Added structured binding support in version 3.5.0.

    Deprecation

    This function replaces the static function iterator_wrapper which was introduced in version 1.0.0, but has been deprecated in version 3.1.0. Function iterator_wrapper will be removed in version 4.0.0. Please replace all occurrences of iterator_wrapper(j) with j.items().

    You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

    "},{"location":"api/basic_json/json_base_class_t/","title":"nlohmann::basic_json::json_base_class_t","text":"
    using json_base_class_t = detail::json_base_class<CustomBaseClass>;\n

    The base class used to inject custom functionality into each instance of basic_json. Examples of such functionality might be metadata, additional member functions (e.g., visitors), or other application-specific code.

    "},{"location":"api/basic_json/json_base_class_t/#template-parameters","title":"Template parameters","text":"CustomBaseClass the base class to be added to basic_json"},{"location":"api/basic_json/json_base_class_t/#notes","title":"Notes","text":""},{"location":"api/basic_json/json_base_class_t/#default-type","title":"Default type","text":"

    The default value for CustomBaseClass is void. In this case an empty base class is used and no additional functionality is injected.

    "},{"location":"api/basic_json/json_base_class_t/#limitations","title":"Limitations","text":"

    The type CustomBaseClass has to be a default-constructible class. basic_json only supports copy/move construction/assignment if CustomBaseClass does so as well.

    "},{"location":"api/basic_json/json_base_class_t/#examples","title":"Examples","text":"Example

    The following code shows how to inject custom data and methods for each node.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nclass visitor_adaptor_with_metadata\n{\n  public:\n    template <class Fnc>\n    void visit(const Fnc& fnc) const;\n\n    int metadata = 42;\n  private:\n    template <class Ptr, class Fnc>\n    void do_visit(const Ptr& ptr, const Fnc& fnc) const;\n};\n\nusing json = nlohmann::basic_json <\n             std::map,\n             std::vector,\n             std::string,\n             bool,\n             std::int64_t,\n             std::uint64_t,\n             double,\n             std::allocator,\n             nlohmann::adl_serializer,\n             std::vector<std::uint8_t>,\n             visitor_adaptor_with_metadata\n             >;\n\ntemplate <class Fnc>\nvoid visitor_adaptor_with_metadata::visit(const Fnc& fnc) const\n{\n    do_visit(json::json_pointer{}, fnc);\n}\n\ntemplate <class Ptr, class Fnc>\nvoid visitor_adaptor_with_metadata::do_visit(const Ptr& ptr, const Fnc& fnc) const\n{\n    using value_t = nlohmann::detail::value_t;\n    const json& j = *static_cast<const json*>(this);\n    switch (j.type())\n    {\n        case value_t::object:\n            fnc(ptr, j);\n            for (const auto& entry : j.items())\n            {\n                entry.value().do_visit(ptr / entry.key(), fnc);\n            }\n            break;\n        case value_t::array:\n            fnc(ptr, j);\n            for (std::size_t i = 0; i < j.size(); ++i)\n            {\n                j.at(i).do_visit(ptr / std::to_string(i), fnc);\n            }\n            break;\n        case value_t::null:\n        case value_t::string:\n        case value_t::boolean:\n        case value_t::number_integer:\n        case value_t::number_unsigned:\n        case value_t::number_float:\n        case value_t::binary:\n            fnc(ptr, j);\n            break;\n        case value_t::discarded:\n        default:\n            break;\n    }\n}\n\nint main()\n{\n    // create a json object\n    json j;\n    j[\"null\"];\n    j[\"object\"][\"uint\"] = 1U;\n    j[\"object\"].metadata = 21;\n\n    // visit and output\n    j.visit(\n         [&](const json::json_pointer & p,\n             const json & j)\n    {\n        std::cout << (p.empty() ? std::string{\"/\"} : p.to_string())\n                  << \" - metadata = \" << j.metadata << \" -> \" << j.dump() << '\\n';\n    });\n}\n

    Output:

    / - metadata = 42 -> {\"null\":null,\"object\":{\"uint\":1}}\n/null - metadata = 42 -> null\n/object - metadata = 21 -> {\"uint\":1}\n/object/uint - metadata = 42 -> 1\n
    "},{"location":"api/basic_json/json_base_class_t/#version-history","title":"Version history","text":"
    • Added in version 3.12.0.
    "},{"location":"api/basic_json/json_serializer/","title":"nlohmann::basic_json::json_serializer","text":"
    template<typename T, typename SFINAE>\nusing json_serializer = JSONSerializer<T, SFINAE>;\n
    "},{"location":"api/basic_json/json_serializer/#template-parameters","title":"Template parameters","text":"T type to convert; will be used in the to_json/from_json functions SFINAE type to add compile type checks via SFINAE; usually void"},{"location":"api/basic_json/json_serializer/#notes","title":"Notes","text":""},{"location":"api/basic_json/json_serializer/#default-type","title":"Default type","text":"

    The default values for json_serializer is adl_serializer.

    "},{"location":"api/basic_json/json_serializer/#examples","title":"Examples","text":"Example

    The example below shows how a conversion of a non-default-constructible type is implemented via a specialization of the adl_serializer.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nnamespace ns\n{\n// a simple struct to model a person (not default constructible)\nstruct person\n{\n    person(std::string n, std::string a, int aa)\n        : name(std::move(n)), address(std::move(a)), age(aa)\n    {}\n\n    std::string name;\n    std::string address;\n    int age;\n};\n} // namespace ns\n\nnamespace nlohmann\n{\ntemplate <>\nstruct adl_serializer<ns::person>\n{\n    static ns::person from_json(const json& j)\n    {\n        return {j.at(\"name\"), j.at(\"address\"), j.at(\"age\")};\n    }\n\n    // Here's the catch! You must provide a to_json method! Otherwise, you\n    // will not be able to convert person to json, since you fully\n    // specialized adl_serializer on that type\n    static void to_json(json& j, ns::person p)\n    {\n        j[\"name\"] = p.name;\n        j[\"address\"] = p.address;\n        j[\"age\"] = p.age;\n    }\n};\n} // namespace nlohmann\n\nint main()\n{\n    json j;\n    j[\"name\"] = \"Ned Flanders\";\n    j[\"address\"] = \"744 Evergreen Terrace\";\n    j[\"age\"] = 60;\n\n    auto p = j.template get<ns::person>();\n\n    std::cout << p.name << \" (\" << p.age << \") lives in \" << p.address << std::endl;\n}\n

    Output:

    Ned Flanders (60) lives in 744 Evergreen Terrace\n
    "},{"location":"api/basic_json/json_serializer/#version-history","title":"Version history","text":"
    • Since version 2.0.0.
    "},{"location":"api/basic_json/max_size/","title":"nlohmann::basic_json::max_size","text":"
    size_type max_size() const noexcept;\n

    Returns the maximum number of elements a JSON value is able to hold due to system or library implementation limitations, i.e. std::distance(begin(), end()) for the JSON value.

    "},{"location":"api/basic_json/max_size/#return-value","title":"Return value","text":"

    The return value depends on the different types and is defined as follows:

    Value type return value null 0 (same as size()) boolean 1 (same as size()) string 1 (same as size()) number 1 (same as size()) binary 1 (same as size()) object result of function object_t::max_size() array result of function array_t::max_size()"},{"location":"api/basic_json/max_size/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/basic_json/max_size/#complexity","title":"Complexity","text":"

    Constant, as long as array_t and object_t satisfy the Container concept; that is, their max_size() functions have constant complexity.

    "},{"location":"api/basic_json/max_size/#notes","title":"Notes","text":"

    This function does not return the maximal length of a string stored as JSON value -- it returns the maximal number of string elements the JSON value can store which is 1.

    "},{"location":"api/basic_json/max_size/#examples","title":"Examples","text":"Example

    The following code calls max_size() on the different value types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n\n    // call max_size()\n    std::cout << j_null.max_size() << '\\n';\n    std::cout << j_boolean.max_size() << '\\n';\n    std::cout << j_number_integer.max_size() << '\\n';\n    std::cout << j_number_float.max_size() << '\\n';\n    std::cout << j_object.max_size() << '\\n';\n    std::cout << j_array.max_size() << '\\n';\n    std::cout << j_string.max_size() << '\\n';\n}\n

    Output:

    0\n1\n1\n1\n115292150460684697\n576460752303423487\n1\n

    Note the output is platform-dependent.

    "},{"location":"api/basic_json/max_size/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Extended to return 1 for binary types in version 3.8.0.
    "},{"location":"api/basic_json/merge_patch/","title":"nlohmann::basic_json::merge_patch","text":"
    void merge_patch(const basic_json& apply_patch);\n

    The merge patch format is primarily intended for use with the HTTP PATCH method as a means of describing a set of modifications to a target resource's content. This function applies a merge patch to the current JSON value.

    The function implements the following algorithm from Section 2 of RFC 7396 (JSON Merge Patch):

    define MergePatch(Target, Patch):\n  if Patch is an Object:\n    if Target is not an Object:\n      Target = {} // Ignore the contents and set it to an empty Object\n    for each Name/Value pair in Patch:\n      if Value is null:\n        if Name exists in Target:\n          remove the Name/Value pair from Target\n      else:\n        Target[Name] = MergePatch(Target[Name], Value)\n    return Target\n  else:\n    return Patch\n

    Thereby, Target is the current object; that is, the patch is applied to the current value.

    "},{"location":"api/basic_json/merge_patch/#parameters","title":"Parameters","text":"apply_patch (in) the patch to apply"},{"location":"api/basic_json/merge_patch/#complexity","title":"Complexity","text":"

    Linear in the lengths of apply_patch.

    "},{"location":"api/basic_json/merge_patch/#examples","title":"Examples","text":"Example

    The following code shows how a JSON Merge Patch is applied to a JSON document.

    #include <iostream>\n#include <nlohmann/json.hpp>\n#include <iomanip> // for std::setw\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // the original document\n    json document = R\"({\n                \"title\": \"Goodbye!\",\n                \"author\": {\n                    \"givenName\": \"John\",\n                    \"familyName\": \"Doe\"\n                },\n                \"tags\": [\n                    \"example\",\n                    \"sample\"\n                ],\n                \"content\": \"This will be unchanged\"\n            })\"_json;\n\n    // the patch\n    json patch = R\"({\n                \"title\": \"Hello!\",\n                \"phoneNumber\": \"+01-123-456-7890\",\n                \"author\": {\n                    \"familyName\": null\n                },\n                \"tags\": [\n                    \"example\"\n                ]\n            })\"_json;\n\n    // apply the patch\n    document.merge_patch(patch);\n\n    // output original and patched document\n    std::cout << std::setw(4) << document << std::endl;\n}\n

    Output:

    {\n    \"author\": {\n        \"givenName\": \"John\"\n    },\n    \"content\": \"This will be unchanged\",\n    \"phoneNumber\": \"+01-123-456-7890\",\n    \"tags\": [\n        \"example\"\n    ],\n    \"title\": \"Hello!\"\n}\n
    "},{"location":"api/basic_json/merge_patch/#see-also","title":"See also","text":"
    • RFC 7396 (JSON Merge Patch)
    • patch apply a JSON patch
    "},{"location":"api/basic_json/merge_patch/#version-history","title":"Version history","text":"
    • Added in version 3.0.0.
    "},{"location":"api/basic_json/meta/","title":"nlohmann::basic_json::meta","text":"
    static basic_json meta();\n

    This function returns a JSON object with information about the library, including the version number and information on the platform and compiler.

    "},{"location":"api/basic_json/meta/#return-value","title":"Return value","text":"

    JSON object holding version information

    key description compiler Information on the used compiler. It is an object with the following keys: c++ (the used C++ standard), family (the compiler family; possible values are clang, icc, gcc, ilecpp, msvc, pgcpp, sunpro, and unknown), and version (the compiler version). copyright The copyright line for the library as string. name The name of the library as string. platform The used platform as string. Possible values are win32, linux, apple, unix, and unknown. url The URL of the project as string. version The version of the library. It is an object with the following keys: major, minor, and patch as defined by Semantic Versioning, and string (the version string)."},{"location":"api/basic_json/meta/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes to any JSON value.

    "},{"location":"api/basic_json/meta/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/meta/#examples","title":"Examples","text":"Example

    The following code shows an example output of the meta() function.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // call meta()\n    std::cout << std::setw(4) << json::meta() << '\\n';\n}\n

    Output:

    {\n    \"compiler\": {\n        \"c++\": \"201103\",\n        \"family\": \"gcc\",\n        \"version\": \"12.3.0\"\n    },\n    \"copyright\": \"(C) 2013-2022 Niels Lohmann\",\n    \"name\": \"JSON for Modern C++\",\n    \"platform\": \"apple\",\n    \"url\": \"https://github.com/nlohmann/json\",\n    \"version\": {\n        \"major\": 3,\n        \"minor\": 11,\n        \"patch\": 3,\n        \"string\": \"3.11.3\"\n    }\n}\n

    Note the output is platform-dependent.

    "},{"location":"api/basic_json/meta/#see-also","title":"See also","text":"
    • NLOHMANN_JSON_VERSION_MAJOR/NLOHMANN_JSON_VERSION_MINOR/NLOHMANN_JSON_VERSION_PATCH - library version information
    "},{"location":"api/basic_json/meta/#version-history","title":"Version history","text":"
    • Added in version 2.1.0.
    "},{"location":"api/basic_json/number_float_t/","title":"nlohmann::basic_json::number_float_t","text":"
    using number_float_t = NumberFloatType;\n

    The type used to store JSON numbers (floating-point).

    RFC 8259 describes numbers as follows:

    The representation of numbers is similar to that used in most programming languages. A number is represented in base 10 using decimal digits. It contains an integer component that may be prefixed with an optional minus sign, which may be followed by a fraction part and/or an exponent part. Leading zeros are not allowed. (...) Numeric values that cannot be represented in the grammar below (such as Infinity and NaN) are not permitted.

    This description includes both integer and floating-point numbers. However, C++ allows more precise storage if it is known whether the number is a signed integer, an unsigned integer or a floating-point number. Therefore, three different types, number_integer_t, number_unsigned_t and number_float_t are used.

    To store floating-point numbers in C++, a type is defined by the template parameter NumberFloatType which chooses the type to use.

    "},{"location":"api/basic_json/number_float_t/#notes","title":"Notes","text":""},{"location":"api/basic_json/number_float_t/#default-type","title":"Default type","text":"

    With the default values for NumberFloatType (double), the default value for number_float_t is double.

    "},{"location":"api/basic_json/number_float_t/#default-behavior","title":"Default behavior","text":"
    • The restrictions about leading zeros is not enforced in C++. Instead, leading zeros in floating-point literals will be ignored. Internally, the value will be stored as decimal number. For instance, the C++ floating-point literal 01.2 will be serialized to 1.2. During deserialization, leading zeros yield an error.
    • Not-a-number (NaN) values will be serialized to null.
    "},{"location":"api/basic_json/number_float_t/#limits","title":"Limits","text":"

    RFC 8259 states:

    This specification allows implementations to set limits on the range and precision of numbers accepted. Since software that implements IEEE 754-2008 binary64 (double precision) numbers is generally available and widely used, good interoperability can be achieved by implementations that expect no more precision or range than these provide, in the sense that implementations will approximate JSON numbers within the expected precision.

    This implementation does exactly follow this approach, as it uses double precision floating-point numbers. Note values smaller than -1.79769313486232e+308 and values greater than 1.79769313486232e+308 will be stored as NaN internally and be serialized to null.

    "},{"location":"api/basic_json/number_float_t/#storage","title":"Storage","text":"

    Floating-point number values are stored directly inside a basic_json type.

    "},{"location":"api/basic_json/number_float_t/#examples","title":"Examples","text":"Example

    The following code shows that number_float_t is by default, a typedef to double.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::boolalpha << std::is_same<double, json::number_float_t>::value << std::endl;\n}\n

    Output:

    true\n
    "},{"location":"api/basic_json/number_float_t/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/number_integer_t/","title":"nlohmann::basic_json::number_integer_t","text":"
    using number_integer_t = NumberIntegerType;\n

    The type used to store JSON numbers (integers).

    RFC 8259 describes numbers as follows:

    The representation of numbers is similar to that used in most programming languages. A number is represented in base 10 using decimal digits. It contains an integer component that may be prefixed with an optional minus sign, which may be followed by a fraction part and/or an exponent part. Leading zeros are not allowed. (...) Numeric values that cannot be represented in the grammar below (such as Infinity and NaN) are not permitted.

    This description includes both integer and floating-point numbers. However, C++ allows more precise storage if it is known whether the number is a signed integer, an unsigned integer or a floating-point number. Therefore, three different types, number_integer_t, number_unsigned_t and number_float_t are used.

    To store integer numbers in C++, a type is defined by the template parameter NumberIntegerType which chooses the type to use.

    "},{"location":"api/basic_json/number_integer_t/#notes","title":"Notes","text":""},{"location":"api/basic_json/number_integer_t/#default-type","title":"Default type","text":"

    With the default values for NumberIntegerType (std::int64_t), the default value for number_integer_t is std::int64_t.

    "},{"location":"api/basic_json/number_integer_t/#default-behavior","title":"Default behavior","text":"
    • The restrictions about leading zeros is not enforced in C++. Instead, leading zeros in integer literals lead to an interpretation as octal number. Internally, the value will be stored as decimal number. For instance, the C++ integer literal 010 will be serialized to 8. During deserialization, leading zeros yield an error.
    • Not-a-number (NaN) values will be serialized to null.
    "},{"location":"api/basic_json/number_integer_t/#limits","title":"Limits","text":"

    RFC 8259 specifies:

    An implementation may set limits on the range and precision of numbers.

    When the default type is used, the maximal integer number that can be stored is 9223372036854775807 (INT64_MAX) and the minimal integer number that can be stored is -9223372036854775808 (INT64_MIN). Integer numbers that are out of range will yield over/underflow when used in a constructor. During deserialization, too large or small integer numbers will be automatically be stored as number_unsigned_t or number_float_t.

    RFC 8259 further states:

    Note that when such software is used, numbers that are integers and are in the range [-2^{53}+1, 2^{53}-1] are interoperable in the sense that implementations will agree exactly on their numeric values.

    As this range is a subrange of the exactly supported range [INT64_MIN, INT64_MAX], this class's integer type is interoperable.

    "},{"location":"api/basic_json/number_integer_t/#storage","title":"Storage","text":"

    Integer number values are stored directly inside a basic_json type.

    "},{"location":"api/basic_json/number_integer_t/#examples","title":"Examples","text":"Example

    The following code shows that number_integer_t is by default, a typedef to std::int64_t.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::boolalpha << std::is_same<std::int64_t, json::number_integer_t>::value << std::endl;\n}\n

    Output:

    true\n
    "},{"location":"api/basic_json/number_integer_t/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/number_unsigned_t/","title":"nlohmann::basic_json::number_unsigned_t","text":"
    using number_unsigned_t = NumberUnsignedType;\n

    The type used to store JSON numbers (unsigned).

    RFC 8259 describes numbers as follows:

    The representation of numbers is similar to that used in most programming languages. A number is represented in base 10 using decimal digits. It contains an integer component that may be prefixed with an optional minus sign, which may be followed by a fraction part and/or an exponent part. Leading zeros are not allowed. (...) Numeric values that cannot be represented in the grammar below (such as Infinity and NaN) are not permitted.

    This description includes both integer and floating-point numbers. However, C++ allows more precise storage if it is known whether the number is a signed integer, an unsigned integer or a floating-point number. Therefore, three different types, number_integer_t, number_unsigned_t and number_float_t are used.

    To store unsigned integer numbers in C++, a type is defined by the template parameter NumberUnsignedType which chooses the type to use.

    "},{"location":"api/basic_json/number_unsigned_t/#notes","title":"Notes","text":""},{"location":"api/basic_json/number_unsigned_t/#default-type","title":"Default type","text":"

    With the default values for NumberUnsignedType (std::uint64_t), the default value for number_unsigned_t is std::uint64_t.

    "},{"location":"api/basic_json/number_unsigned_t/#default-behavior","title":"Default behavior","text":"
    • The restrictions about leading zeros is not enforced in C++. Instead, leading zeros in integer literals lead to an interpretation as octal number. Internally, the value will be stored as decimal number. For instance, the C++ integer literal 010 will be serialized to 8. During deserialization, leading zeros yield an error.
    • Not-a-number (NaN) values will be serialized to null.
    "},{"location":"api/basic_json/number_unsigned_t/#limits","title":"Limits","text":"

    RFC 8259 specifies:

    An implementation may set limits on the range and precision of numbers.

    When the default type is used, the maximal integer number that can be stored is 18446744073709551615 (UINT64_MAX) and the minimal integer number that can be stored is 0. Integer numbers that are out of range will yield over/underflow when used in a constructor. During deserialization, too large or small integer numbers will be automatically be stored as number_integer_t or number_float_t.

    RFC 8259 further states:

    Note that when such software is used, numbers that are integers and are in the range \\f[-2^{53}+1, 2^{53}-1]\\f are interoperable in the sense that implementations will agree exactly on their numeric values.

    As this range is a subrange (when considered in conjunction with the number_integer_t type) of the exactly supported range [0, UINT64_MAX], this class's integer type is interoperable.

    "},{"location":"api/basic_json/number_unsigned_t/#storage","title":"Storage","text":"

    Integer number values are stored directly inside a basic_json type.

    "},{"location":"api/basic_json/number_unsigned_t/#examples","title":"Examples","text":"Example

    The following code shows that number_unsigned_t is by default, a typedef to std::uint64_t.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::boolalpha << std::is_same<std::uint64_t, json::number_unsigned_t>::value << std::endl;\n}\n

    Output:

    true\n
    "},{"location":"api/basic_json/number_unsigned_t/#version-history","title":"Version history","text":"
    • Added in version 2.0.0.
    "},{"location":"api/basic_json/object/","title":"nlohmann::basic_json::object","text":"
    static basic_json object(initializer_list_t init = {});\n

    Creates a JSON object value from a given initializer list. The initializer lists elements must be pairs, and their first elements must be strings. If the initializer list is empty, the empty object {} is created.

    "},{"location":"api/basic_json/object/#parameters","title":"Parameters","text":"init (in) initializer list with JSON values to create an object from (optional)"},{"location":"api/basic_json/object/#return-value","title":"Return value","text":"

    JSON object value

    "},{"location":"api/basic_json/object/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/object/#exceptions","title":"Exceptions","text":"

    Throws type_error.301 if init is not a list of pairs whose first elements are strings. In this case, no object can be created. When such a value is passed to basic_json(initializer_list_t, bool, value_t), an array would have been created from the passed initializer list init. See example below.

    "},{"location":"api/basic_json/object/#complexity","title":"Complexity","text":"

    Linear in the size of init.

    "},{"location":"api/basic_json/object/#notes","title":"Notes","text":"

    This function is only added for symmetry reasons. In contrast to the related function array(initializer_list_t), there are no cases which can only be expressed by this function. That is, any initializer list init can also be passed to the initializer list constructor basic_json(initializer_list_t, bool, value_t).

    "},{"location":"api/basic_json/object/#examples","title":"Examples","text":"Example

    The following code shows an example for the object function.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON objects\n    json j_no_init_list = json::object();\n    json j_empty_init_list = json::object({});\n    json j_list_of_pairs = json::object({ {\"one\", 1}, {\"two\", 2} });\n\n    // serialize the JSON objects\n    std::cout << j_no_init_list << '\\n';\n    std::cout << j_empty_init_list << '\\n';\n    std::cout << j_list_of_pairs << '\\n';\n\n    // example for an exception\n    try\n    {\n        // can only create an object from a list of pairs\n        json j_invalid_object = json::object({{ \"one\", 1, 2 }});\n    }\n    catch (const json::type_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    {}\n{}\n{\"one\":1,\"two\":2}\n[json.exception.type_error.301] cannot create object from initializer list\n
    "},{"location":"api/basic_json/object/#see-also","title":"See also","text":"
    • basic_json(initializer_list_t) - create a JSON value from an initializer list
    • array - create a JSON array value from an initializer list
    "},{"location":"api/basic_json/object/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/object_comparator_t/","title":"nlohmann::basic_json::object_comparator_t","text":"
    using object_comparator_t = typename object_t::key_compare;\n// or\nusing object_comparator_t = default_object_comparator_t;\n

    The comparator used by object_t. Defined as typename object_t::key_compare if available, and default_object_comparator_t otherwise.

    "},{"location":"api/basic_json/object_comparator_t/#examples","title":"Examples","text":"Example

    The example below demonstrates the used object comparator.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::boolalpha\n              << \"json::object_comparator_t(\\\"one\\\", \\\"two\\\") = \" << json::object_comparator_t{}(\"one\", \"two\") << \"\\n\"\n              << \"json::object_comparator_t(\\\"three\\\", \\\"four\\\") = \" << json::object_comparator_t{}(\"three\", \"four\") << std::endl;\n}\n

    Output:

    json::object_comparator_t(\"one\", \"two\") = true\njson::object_comparator_t(\"three\", \"four\") = false\n
    "},{"location":"api/basic_json/object_comparator_t/#version-history","title":"Version history","text":"
    • Added in version 3.0.0.
    • Changed to be conditionally defined as typename object_t::key_compare or default_object_comparator_t in version 3.11.0.
    "},{"location":"api/basic_json/object_t/","title":"nlohmann::basic_json::object_t","text":"
    using object_t = ObjectType<StringType,\n                            basic_json,\n                            default_object_comparator_t,\n                            AllocatorType<std::pair<const StringType, basic_json>>>;\n

    The type used to store JSON objects.

    RFC 8259 describes JSON objects as follows:

    An object is an unordered collection of zero or more name/value pairs, where a name is a string and a value is a string, number, boolean, null, object, or array.

    To store objects in C++, a type is defined by the template parameters described below.

    "},{"location":"api/basic_json/object_t/#template-parameters","title":"Template parameters","text":"ObjectType the container to store objects (e.g., std::map or std::unordered_map) StringType the type of the keys or names (e.g., std::string). The comparison function std::less<StringType> is used to order elements inside the container. AllocatorType the allocator to use for objects (e.g., std::allocator)"},{"location":"api/basic_json/object_t/#notes","title":"Notes","text":""},{"location":"api/basic_json/object_t/#default-type","title":"Default type","text":"

    With the default values for ObjectType (std::map), StringType (std::string), and AllocatorType (std::allocator), the default value for object_t is:

    // until C++14\nstd::map<\n  std::string, // key_type\n  basic_json, // value_type\n  std::less<std::string>, // key_compare\n  std::allocator<std::pair<const std::string, basic_json>> // allocator_type\n>\n\n// since C++14\nstd::map<\n  std::string, // key_type\n  basic_json, // value_type\n  std::less<>, // key_compare\n  std::allocator<std::pair<const std::string, basic_json>> // allocator_type\n>\n

    See default_object_comparator_t for more information.

    "},{"location":"api/basic_json/object_t/#behavior","title":"Behavior","text":"

    The choice of object_t influences the behavior of the JSON class. With the default type, objects have the following behavior:

    • When all names are unique, objects will be interoperable in the sense that all software implementations receiving that object will agree on the name-value mappings.
    • When the names within an object are not unique, it is unspecified which one of the values for a given key will be chosen. For instance, {\"key\": 2, \"key\": 1} could be equal to either {\"key\": 1} or {\"key\": 2}.
    • Internally, name/value pairs are stored in lexicographical order of the names. Objects will also be serialized (see dump) in this order. For instance, {\"b\": 1, \"a\": 2} and {\"a\": 2, \"b\": 1} will be stored and serialized as {\"a\": 2, \"b\": 1}.
    • When comparing objects, the order of the name/value pairs is irrelevant. This makes objects interoperable in the sense that they will not be affected by these differences. For instance, {\"b\": 1, \"a\": 2} and {\"a\": 2, \"b\": 1} will be treated as equal.
    "},{"location":"api/basic_json/object_t/#limits","title":"Limits","text":"

    RFC 8259 specifies:

    An implementation may set limits on the maximum depth of nesting.

    In this class, the object's limit of nesting is not explicitly constrained. However, a maximum depth of nesting may be introduced by the compiler or runtime environment. A theoretical limit can be queried by calling the max_size function of a JSON object.

    "},{"location":"api/basic_json/object_t/#storage","title":"Storage","text":"

    Objects are stored as pointers in a basic_json type. That is, for any access to object values, a pointer of type object_t* must be dereferenced.

    "},{"location":"api/basic_json/object_t/#object-key-order","title":"Object key order","text":"

    The order name/value pairs are added to the object is not preserved by the library. Therefore, iterating an object may return name/value pairs in a different order than they were originally stored. In fact, keys will be traversed in alphabetical order as std::map with std::less is used by default. Please note this behavior conforms to RFC 8259, because any order implements the specified \"unordered\" nature of JSON objects.

    "},{"location":"api/basic_json/object_t/#examples","title":"Examples","text":"Example

    The following code shows that object_t is by default, a typedef to std::map<json::string_t, json>.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::boolalpha << std::is_same<std::map<json::string_t, json>, json::object_t>::value << std::endl;\n}\n

    Output:

    true\n
    "},{"location":"api/basic_json/object_t/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/operator%2B%3D/","title":"nlohmann::basic_json::operator+=","text":"
    // (1)\nreference operator+=(basic_json&& val);\nreference operator+=(const basic_json& val);\n\n// (2)\nreference operator+=(const typename object_t::value_type& val);\n\n// (3)\nreference operator+=(initializer_list_t init);\n
    1. Appends the given element val to the end of the JSON array. If the function is called on a JSON null value, an empty array is created before appending val.

    2. Inserts the given element val to the JSON object. If the function is called on a JSON null value, an empty object is created before inserting val.

    3. This function allows using operator+= with an initializer list. In case

      1. the current value is an object,
      2. the initializer list init contains only two elements, and
      3. the first element of init is a string,

      init is converted into an object element and added using operator+=(const typename object_t::value_type&). Otherwise, init is converted to a JSON value and added using operator+=(basic_json&&).

    "},{"location":"api/basic_json/operator%2B%3D/#iterator-invalidation","title":"Iterator invalidation","text":"

    For all cases where an element is added to an array, a reallocation can happen, in which case all iterators (including the end() iterator) and all references to the elements are invalidated. Otherwise, only the end() iterator is invalidated.

    For ordered_json, also adding an element to an object can yield a reallocation which again invalidates all iterators and all references.

    "},{"location":"api/basic_json/operator%2B%3D/#parameters","title":"Parameters","text":"val (in) the value to add to the JSON array/object init (in) an initializer list"},{"location":"api/basic_json/operator%2B%3D/#return-value","title":"Return value","text":"

    *this

    "},{"location":"api/basic_json/operator%2B%3D/#exceptions","title":"Exceptions","text":"

    All functions can throw the following exception: - Throws type_error.308 when called on a type other than JSON array or null; example: \"cannot use operator+=() with number\"

    "},{"location":"api/basic_json/operator%2B%3D/#complexity","title":"Complexity","text":"
    1. Amortized constant.
    2. Logarithmic in the size of the container, O(log(size())).
    3. Linear in the size of the initializer list init.
    "},{"location":"api/basic_json/operator%2B%3D/#notes","title":"Notes","text":"

    (3) This function is required to resolve an ambiguous overload error, because pairs like {\"key\", \"value\"} can be both interpreted as object_t::value_type or std::initializer_list<basic_json>, see #235 for more information.

    "},{"location":"api/basic_json/operator%2B%3D/#examples","title":"Examples","text":"Example: (1) add element to array

    The example shows how push_back() and += can be used to add elements to a JSON array. Note how the null value was silently converted to a JSON array.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json array = {1, 2, 3, 4, 5};\n    json null;\n\n    // print values\n    std::cout << array << '\\n';\n    std::cout << null << '\\n';\n\n    // add values\n    array.push_back(6);\n    array += 7;\n    null += \"first\";\n    null += \"second\";\n\n    // print values\n    std::cout << array << '\\n';\n    std::cout << null << '\\n';\n}\n

    Output:

    [1,2,3,4,5]\nnull\n[1,2,3,4,5,6,7]\n[\"first\",\"second\"]\n
    Example: (2) add element to object

    The example shows how push_back() and += can be used to add elements to a JSON object. Note how the null value was silently converted to a JSON object.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json object = {{\"one\", 1}, {\"two\", 2}};\n    json null;\n\n    // print values\n    std::cout << object << '\\n';\n    std::cout << null << '\\n';\n\n    // add values\n    object.push_back(json::object_t::value_type(\"three\", 3));\n    object += json::object_t::value_type(\"four\", 4);\n    null += json::object_t::value_type(\"A\", \"a\");\n    null += json::object_t::value_type(\"B\", \"b\");\n\n    // print values\n    std::cout << object << '\\n';\n    std::cout << null << '\\n';\n}\n

    Output:

    {\"one\":1,\"two\":2}\nnull\n{\"four\":4,\"one\":1,\"three\":3,\"two\":2}\n{\"A\":\"a\",\"B\":\"b\"}\n
    Example: (3) add to object from initializer list

    The example shows how initializer lists are treated as objects when possible.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json object = {{\"one\", 1}, {\"two\", 2}};\n    json null;\n\n    // print values\n    std::cout << object << '\\n';\n    std::cout << null << '\\n';\n\n    // add values:\n    object.push_back({\"three\", 3});  // object is extended\n    object += {\"four\", 4};           // object is extended\n    null.push_back({\"five\", 5});     // null is converted to array\n\n    // print values\n    std::cout << object << '\\n';\n    std::cout << null << '\\n';\n\n    // would throw:\n    //object.push_back({1, 2, 3});\n}\n

    Output:

    {\"one\":1,\"two\":2}\nnull\n{\"four\":4,\"one\":1,\"three\":3,\"two\":2}\n[[\"five\",5]]\n
    "},{"location":"api/basic_json/operator%2B%3D/#see-also","title":"See also","text":"
    • emplace_back add a value to an array
    • push_back add a value to an array/object
    "},{"location":"api/basic_json/operator%2B%3D/#version-history","title":"Version history","text":"
    1. Since version 1.0.0.
    2. Since version 1.0.0.
    3. Since version 2.0.0.
    "},{"location":"api/basic_json/operator%3D/","title":"nlohmann::basic_json::operator=","text":"
    basic_json& operator=(basic_json other) noexcept (\n    std::is_nothrow_move_constructible<value_t>::value &&\n    std::is_nothrow_move_assignable<value_t>::value &&\n    std::is_nothrow_move_constructible<json_value>::value &&\n    std::is_nothrow_move_assignable<json_value>::value\n);\n

    Copy assignment operator. Copies a JSON value via the \"copy and swap\" strategy: It is expressed in terms of the copy constructor, destructor, and the swap() member function.

    "},{"location":"api/basic_json/operator%3D/#parameters","title":"Parameters","text":"other (in) value to copy from"},{"location":"api/basic_json/operator%3D/#complexity","title":"Complexity","text":"

    Linear.

    "},{"location":"api/basic_json/operator%3D/#examples","title":"Examples","text":"Example

    The code below shows and example for the copy assignment. It creates a copy of value a which is then swapped with b. Finally, the copy of a (which is the null value after the swap) is destroyed.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json a = 23;\n    json b = 42;\n\n    // copy-assign a to b\n    b = a;\n\n    // serialize the JSON arrays\n    std::cout << a << '\\n';\n    std::cout << b << '\\n';\n}\n

    Output:

    23\n23\n
    "},{"location":"api/basic_json/operator%3D/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/operator%5B%5D/","title":"nlohmann::basic_json::operator[]","text":"
    // (1)\nreference operator[](size_type idx);\nconst_reference operator[](size_type idx) const;\n\n// (2)\nreference operator[](typename object_t::key_type key);\nconst_reference operator[](const typename object_t::key_type& key) const;\n\n// (3)\ntemplate<typename KeyType>\nreference operator[](KeyType&& key);\ntemplate<typename KeyType>\nconst_reference operator[](KeyType&& key) const;\n\n// (4)\nreference operator[](const json_pointer& ptr);\nconst_reference operator[](const json_pointer& ptr) const;\n
    1. Returns a reference to the array element at specified location idx.
    2. Returns a reference to the object element with specified key key. The non-const qualified overload takes the key by value.
    3. See 2. This overload is only available if KeyType is comparable with typename object_t::key_type and typename object_comparator_t::is_transparent denotes a type.
    4. Returns a reference to the element with specified JSON pointer ptr.
    "},{"location":"api/basic_json/operator%5B%5D/#template-parameters","title":"Template parameters","text":"KeyType A type for an object key other than json_pointer that is comparable with string_t using object_comparator_t. This can also be a string view (C++17)."},{"location":"api/basic_json/operator%5B%5D/#iterator-invalidation","title":"Iterator invalidation","text":"

    For the non-const versions 1. and 4., when passing an array index that does not exist, it is created and filled with a null value before a reference to it is returned. For this, a reallocation can happen, in which case all iterators (including the end() iterator) and all references to the elements are invalidated.

    For ordered_json, also passing an object key to the non-const versions 2., 3., and 4., a reallocation can happen which again invalidates all iterators and all references.

    "},{"location":"api/basic_json/operator%5B%5D/#parameters","title":"Parameters","text":"idx (in) index of the element to access key (in) object key of the element to access ptr (in) JSON pointer to the desired element"},{"location":"api/basic_json/operator%5B%5D/#return-value","title":"Return value","text":"
    1. (const) reference to the element at index idx
    2. (const) reference to the element at key key
    3. (const) reference to the element at key key
    4. (const) reference to the element pointed to by ptr
    "},{"location":"api/basic_json/operator%5B%5D/#exception-safety","title":"Exception safety","text":"

    Strong exception safety: if an exception occurs, the original value stays intact.

    "},{"location":"api/basic_json/operator%5B%5D/#exceptions","title":"Exceptions","text":"
    1. The function can throw the following exceptions:
      • Throws type_error.305 if the JSON value is not an array or null; in that case, using the [] operator with an index makes no sense.
    2. The function can throw the following exceptions:
      • Throws type_error.305 if the JSON value is not an object or null; in that case, using the [] operator with a key makes no sense.
    3. See 2.
    4. The function can throw the following exceptions:
      • Throws parse_error.106 if an array index in the passed JSON pointer ptr begins with '0'.
      • Throws parse_error.109 if an array index in the passed JSON pointer ptr is not a number.
      • Throws out_of_range.402 if the array index '-' is used in the passed JSON pointer ptr for the const version.
      • Throws out_of_range.404 if the JSON pointer ptr can not be resolved.
    "},{"location":"api/basic_json/operator%5B%5D/#complexity","title":"Complexity","text":"
    1. Constant if idx is in the range of the array. Otherwise, linear in idx - size().
    2. Logarithmic in the size of the container.
    3. Logarithmic in the size of the container.
    4. Logarithmic in the size of the container.
    "},{"location":"api/basic_json/operator%5B%5D/#notes","title":"Notes","text":"

    Undefined behavior and runtime assertions

    1. If the element with key idx does not exist, the behavior is undefined.
    2. If the element with key key does not exist, the behavior is undefined and is guarded by a runtime assertion!
    1. The non-const version may add values: If idx is beyond the range of the array (i.e., idx >= size()), then the array is silently filled up with null values to make idx a valid reference to the last stored element. In case the value was null before, it is converted to an array.

    2. If key is not found in the object, then it is silently added to the object and filled with a null value to make key a valid reference. In case the value was null before, it is converted to an object.

    3. See 2.

    4. null values are created in arrays and objects if necessary.

      In particular:

      • If the JSON pointer points to an object key that does not exist, it is created and filled with a null value before a reference to it is returned.
      • If the JSON pointer points to an array index that does not exist, it is created and filled with a null value before a reference to it is returned. All indices between the current maximum and the given index are also filled with null.
      • The special value - is treated as a synonym for the index past the end.
    "},{"location":"api/basic_json/operator%5B%5D/#examples","title":"Examples","text":"Example: (1) access specified array element

    The example below shows how array elements can be read and written using [] operator. Note the addition of null values.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON array\n    json array = {1, 2, 3, 4, 5};\n\n    // output element at index 3 (fourth element)\n    std::cout << array[3] << '\\n';\n\n    // change last element to 6\n    array[array.size() - 1] = 6;\n\n    // output changed array\n    std::cout << array << '\\n';\n\n    // write beyond array limit\n    array[10] = 11;\n\n    // output changed array\n    std::cout << array << '\\n';\n}\n

    Output:

    4\n[1,2,3,4,6]\n[1,2,3,4,6,null,null,null,null,null,11]\n
    Example: (1) access specified array element (const)

    The example below shows how array elements can be read using the [] operator.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON array\n    const json array = {\"first\", \"2nd\", \"third\", \"fourth\"};\n\n    // output element at index 2 (third element)\n    std::cout << array.at(2) << '\\n';\n}\n

    Output:

    \"third\"\n
    Example: (2) access specified object element

    The example below shows how object elements can be read and written using the [] operator.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object\n    json object =\n    {\n        {\"one\", 1}, {\"two\", 2}, {\"three\", 2.9}\n    };\n\n    // output element with key \"two\"\n    std::cout << object[\"two\"] << \"\\n\\n\";\n\n    // change element with key \"three\"\n    object[\"three\"] = 3;\n\n    // output changed array\n    std::cout << std::setw(4) << object << \"\\n\\n\";\n\n    // mention nonexisting key\n    object[\"four\"];\n\n    // write to nonexisting key\n    object[\"five\"][\"really\"][\"nested\"] = true;\n\n    // output changed object\n    std::cout << std::setw(4) << object << '\\n';\n}\n

    Output:

    2\n\n{\n    \"one\": 1,\n    \"three\": 3,\n    \"two\": 2\n}\n\n{\n    \"five\": {\n        \"really\": {\n            \"nested\": true\n        }\n    },\n    \"four\": null,\n    \"one\": 1,\n    \"three\": 3,\n    \"two\": 2\n}\n
    Example: (2) access specified object element (const)

    The example below shows how object elements can be read using the [] operator.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object\n    const json object =\n    {\n        {\"one\", 1}, {\"two\", 2}, {\"three\", 2.9}\n    };\n\n    // output element with key \"two\"\n    std::cout << object[\"two\"] << '\\n';\n}\n

    Output:

    2\n
    Example: (3) access specified object element using string_view

    The example below shows how object elements can be read using the [] operator.

    #include <iostream>\n#include <iomanip>\n#include <string_view>\n#include <nlohmann/json.hpp>\n\nusing namespace std::string_view_literals;\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object\n    json object =\n    {\n        {\"one\", 1}, {\"two\", 2}, {\"three\", 2.9}\n    };\n\n    // output element with key \"two\"\n    std::cout << object[\"two\"sv] << \"\\n\\n\";\n\n    // change element with key \"three\"\n    object[\"three\"sv] = 3;\n\n    // output changed array\n    std::cout << std::setw(4) << object << \"\\n\\n\";\n\n    // mention nonexisting key\n    object[\"four\"sv];\n\n    // write to nonexisting key\n    object[\"five\"sv][\"really\"sv][\"nested\"sv] = true;\n\n    // output changed object\n    std::cout << std::setw(4) << object << '\\n';\n}\n

    Output:

    2\n\n{\n    \"one\": 1,\n    \"three\": 3,\n    \"two\": 2\n}\n\n{\n    \"five\": {\n        \"really\": {\n            \"nested\": true\n        }\n    },\n    \"four\": null,\n    \"one\": 1,\n    \"three\": 3,\n    \"two\": 2\n}\n
    Example: (3) access specified object element using string_view (const)

    The example below shows how object elements can be read using the [] operator.

    #include <iostream>\n#include <string_view>\n#include <nlohmann/json.hpp>\n\nusing namespace std::string_view_literals;\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object\n    const json object =\n    {\n        {\"one\", 1}, {\"two\", 2}, {\"three\", 2.9}\n    };\n\n    // output element with key \"two\"\n    std::cout << object[\"two\"sv] << '\\n';\n}\n

    Output:

    2\n
    Example: (4) access specified element via JSON Pointer

    The example below shows how values can be read and written using JSON Pointers.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create a JSON value\n    json j =\n    {\n        {\"number\", 1}, {\"string\", \"foo\"}, {\"array\", {1, 2}}\n    };\n\n    // read-only access\n\n    // output element with JSON pointer \"/number\"\n    std::cout << j[\"/number\"_json_pointer] << '\\n';\n    // output element with JSON pointer \"/string\"\n    std::cout << j[\"/string\"_json_pointer] << '\\n';\n    // output element with JSON pointer \"/array\"\n    std::cout << j[\"/array\"_json_pointer] << '\\n';\n    // output element with JSON pointer \"/array/1\"\n    std::cout << j[\"/array/1\"_json_pointer] << '\\n';\n\n    // writing access\n\n    // change the string\n    j[\"/string\"_json_pointer] = \"bar\";\n    // output the changed string\n    std::cout << j[\"string\"] << '\\n';\n\n    // \"change\" a nonexisting object entry\n    j[\"/boolean\"_json_pointer] = true;\n    // output the changed object\n    std::cout << j << '\\n';\n\n    // change an array element\n    j[\"/array/1\"_json_pointer] = 21;\n    // \"change\" an array element with nonexisting index\n    j[\"/array/4\"_json_pointer] = 44;\n    // output the changed array\n    std::cout << j[\"array\"] << '\\n';\n\n    // \"change\" the array element past the end\n    j[\"/array/-\"_json_pointer] = 55;\n    // output the changed array\n    std::cout << j[\"array\"] << '\\n';\n}\n

    Output:

    1\n\"foo\"\n[1,2]\n2\n\"bar\"\n{\"array\":[1,2],\"boolean\":true,\"number\":1,\"string\":\"bar\"}\n[1,21,null,null,44]\n[1,21,null,null,44,55]\n
    Example: (4) access specified element via JSON Pointer (const)

    The example below shows how values can be read using JSON Pointers.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create a JSON value\n    const json j =\n    {\n        {\"number\", 1}, {\"string\", \"foo\"}, {\"array\", {1, 2}}\n    };\n\n    // read-only access\n\n    // output element with JSON pointer \"/number\"\n    std::cout << j[\"/number\"_json_pointer] << '\\n';\n    // output element with JSON pointer \"/string\"\n    std::cout << j[\"/string\"_json_pointer] << '\\n';\n    // output element with JSON pointer \"/array\"\n    std::cout << j[\"/array\"_json_pointer] << '\\n';\n    // output element with JSON pointer \"/array/1\"\n    std::cout << j[\"/array/1\"_json_pointer] << '\\n';\n}\n

    Output:

    1\n\"foo\"\n[1,2]\n2\n
    "},{"location":"api/basic_json/operator%5B%5D/#see-also","title":"See also","text":"
    • documentation on unchecked access
    • documentation on runtime assertions
    • see at for access by reference with range checking
    • see value for access with default value
    "},{"location":"api/basic_json/operator%5B%5D/#version-history","title":"Version history","text":"
    1. Added in version 1.0.0.
    2. Added in version 1.0.0. Added overloads for T* key in version 1.1.0. Removed overloads for T* key (replaced by 3) in version 3.11.0.
    3. Added in version 3.11.0.
    4. Added in version 2.0.0.
    "},{"location":"api/basic_json/operator_ValueType/","title":"nlohmann::basic_json::operator ValueType","text":"
    template<typename ValueType>\nJSON_EXPLICIT operator ValueType() const;\n

    Implicit type conversion between the JSON value and a compatible value. The call is realized by calling get(). See Notes for the meaning of JSON_EXPLICIT.

    "},{"location":"api/basic_json/operator_ValueType/#template-parameters","title":"Template parameters","text":"ValueType the value type to return"},{"location":"api/basic_json/operator_ValueType/#return-value","title":"Return value","text":"

    copy of the JSON value, converted to ValueType

    "},{"location":"api/basic_json/operator_ValueType/#exceptions","title":"Exceptions","text":"

    Depends on what json_serializer<ValueType> from_json() method throws

    "},{"location":"api/basic_json/operator_ValueType/#complexity","title":"Complexity","text":"

    Linear in the size of the JSON value.

    "},{"location":"api/basic_json/operator_ValueType/#notes","title":"Notes","text":"

    Definition of JSON_EXPLICIT

    By default JSON_EXPLICIT is defined to the empty string, so the signature is:

    template<typename ValueType>\noperator ValueType() const;\n

    If JSON_USE_IMPLICIT_CONVERSIONS is set to 0, JSON_EXPLICIT is defined to explicit:

    template<typename ValueType>\nexplicit operator ValueType() const;\n

    That is, implicit conversions can be switched off by defining JSON_USE_IMPLICIT_CONVERSIONS to 0.

    Future behavior change

    Implicit conversions will be switched off by default in the next major release of the library. That is, JSON_EXPLICIT will be set to explicit by default.

    You can prepare existing code by already defining JSON_USE_IMPLICIT_CONVERSIONS to 0 and replace any implicit conversions with calls to get.

    "},{"location":"api/basic_json/operator_ValueType/#examples","title":"Examples","text":"Example

    The example below shows several conversions from JSON values to other types. There are a few things to note: (1) Floating-point numbers can be converted to integers, (2) A JSON array can be converted to a standard std::vector<short>, (3) A JSON object can be converted to C++ associative containers such as std::unordered_map<std::string, json>.

    #include <iostream>\n#include <unordered_map>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON value with different types\n    json json_types =\n    {\n        {\"boolean\", true},\n        {\n            \"number\", {\n                {\"integer\", 42},\n                {\"floating-point\", 17.23}\n            }\n        },\n        {\"string\", \"Hello, world!\"},\n        {\"array\", {1, 2, 3, 4, 5}},\n        {\"null\", nullptr}\n    };\n\n    // use implicit conversions\n    bool v1 = json_types[\"boolean\"];\n    int v2 = json_types[\"number\"][\"integer\"];\n    short v3 = json_types[\"number\"][\"integer\"];\n    float v4 = json_types[\"number\"][\"floating-point\"];\n    int v5 = json_types[\"number\"][\"floating-point\"];\n    std::string v6 = json_types[\"string\"];\n    std::vector<short> v7 = json_types[\"array\"];\n    std::unordered_map<std::string, json> v8 = json_types;\n\n    // print the conversion results\n    std::cout << v1 << '\\n';\n    std::cout << v2 << ' ' << v3 << '\\n';\n    std::cout << v4 << ' ' << v5 << '\\n';\n    std::cout << v6 << '\\n';\n\n    for (auto i : v7)\n    {\n        std::cout << i << ' ';\n    }\n    std::cout << \"\\n\\n\";\n\n    for (auto i : v8)\n    {\n        std::cout << i.first << \": \" << i.second << '\\n';\n    }\n\n    // example for an exception\n    try\n    {\n        bool v1 = json_types[\"string\"];\n    }\n    catch (const json::type_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    1\n42 42\n17.23 17\nHello, world!\n1 2 3 4 5 \n\nstring: \"Hello, world!\"\nnumber: {\"floating-point\":17.23,\"integer\":42}\nnull: null\nboolean: true\narray: [1,2,3,4,5]\n[json.exception.type_error.302] type must be boolean, but is string\n
    "},{"location":"api/basic_json/operator_ValueType/#version-history","title":"Version history","text":"
    • Since version 1.0.0.
    • Macros JSON_EXPLICIT/JSON_USE_IMPLICIT_CONVERSIONS added in version 3.9.0.
    "},{"location":"api/basic_json/operator_eq/","title":"nlohmann::basic_json::operator==","text":"
    // until C++20\nbool operator==(const_reference lhs, const_reference rhs) noexcept;   // (1)\n\ntemplate<typename ScalarType>\nbool operator==(const_reference lhs, const ScalarType rhs) noexcept;  // (2)\n\ntemplate<typename ScalarType>\nbool operator==(ScalarType lhs, const const_reference rhs) noexcept;  // (2)\n\n// since C++20\nclass basic_json {\n    bool operator==(const_reference rhs) const noexcept;              // (1)\n\n    template<typename ScalarType>\n    bool operator==(ScalarType rhs) const noexcept;                   // (2)\n};\n
    1. Compares two JSON values for equality according to the following rules:

      • Two JSON values are equal if (1) neither value is discarded, or (2) they are of the same type and their stored values are the same according to their respective operator==.
      • Integer and floating-point numbers are automatically converted before comparison.
    2. Compares a JSON value and a scalar or a scalar and a JSON value for equality by converting the scalar to a JSON value and comparing both JSON values according to 1.

    "},{"location":"api/basic_json/operator_eq/#template-parameters","title":"Template parameters","text":"ScalarType a scalar type according to std::is_scalar<ScalarType>::value"},{"location":"api/basic_json/operator_eq/#parameters","title":"Parameters","text":"lhs (in) first value to consider rhs (in) second value to consider"},{"location":"api/basic_json/operator_eq/#return-value","title":"Return value","text":"

    whether the values lhs/*this and rhs are equal

    "},{"location":"api/basic_json/operator_eq/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/basic_json/operator_eq/#complexity","title":"Complexity","text":"

    Linear.

    "},{"location":"api/basic_json/operator_eq/#notes","title":"Notes","text":"

    Comparing special values

    • NaN values are unordered within the domain of numbers. The following comparisons all yield false:
      1. Comparing a NaN with itself.
      2. Comparing a NaN with another NaN.
      3. Comparing a NaN and any other number.
    • JSON null values are all equal.
    • Discarded values never compare equal to themselves.

    Comparing floating-point numbers

    Floating-point numbers inside JSON values numbers are compared with json::number_float_t::operator== which is double::operator== by default. To compare floating-point while respecting an epsilon, an alternative comparison function could be used, for instance

    template<typename T, typename = typename std::enable_if<std::is_floating_point<T>::value, T>::type>\ninline bool is_same(T a, T b, T epsilon = std::numeric_limits<T>::epsilon()) noexcept\n{\n    return std::abs(a - b) <= epsilon;\n}\n

    Or you can self-defined operator equal function like this:

    bool my_equal(const_reference lhs, const_reference rhs)\n{\n    const auto lhs_type lhs.type();\n    const auto rhs_type rhs.type();\n    if (lhs_type == rhs_type)\n    {\n        switch(lhs_type)\n            // self_defined case\n            case value_t::number_float:\n                return std::abs(lhs - rhs) <= std::numeric_limits<float>::epsilon();\n            // other cases remain the same with the original\n            ...\n    }\n...\n}\n

    Comparing different basic_json specializations

    Comparing different basic_json specializations can have surprising effects. For instance, the result of comparing the JSON objects

    {\n   \"version\": 1,\n   \"type\": \"integer\"\n}\n

    and

    {\n   \"type\": \"integer\",\n   \"version\": 1\n}\n

    depends on whether nlohmann::json or nlohmann::ordered_json is used:

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    nlohmann::json uj1 = {{\"version\", 1}, {\"type\", \"integer\"}};\n    nlohmann::json uj2 = {{\"type\", \"integer\"}, {\"version\", 1}};\n\n    nlohmann::ordered_json oj1 = {{\"version\", 1}, {\"type\", \"integer\"}};\n    nlohmann::ordered_json oj2 = {{\"type\", \"integer\"}, {\"version\", 1}};\n\n    std::cout << std::boolalpha << (uj1 == uj2) << '\\n' << (oj1 == oj2) << std::endl;\n}\n

    Output:

    true\nfalse\n
    "},{"location":"api/basic_json/operator_eq/#examples","title":"Examples","text":"Example

    The example demonstrates comparing several JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create several JSON values\n    json array_1 = {1, 2, 3};\n    json array_2 = {1, 2, 4};\n    json object_1 = {{\"A\", \"a\"}, {\"B\", \"b\"}};\n    json object_2 = {{\"B\", \"b\"}, {\"A\", \"a\"}};\n    json number_1 = 17;\n    json number_2 = 17.000000000000001L;\n    json string_1 = \"foo\";\n    json string_2 = \"bar\";\n\n    // output values and comparisons\n    std::cout << std::boolalpha;\n    std::cout << array_1 << \" == \" << array_2 << \" \" << (array_1 == array_2) << '\\n';\n    std::cout << object_1 << \" == \" << object_2 << \" \" << (object_1 == object_2) << '\\n';\n    std::cout << number_1 << \" == \" << number_2 << \" \" << (number_1 == number_2) << '\\n';\n    std::cout << string_1 << \" == \" << string_2 << \" \" << (string_1 == string_2) << '\\n';\n}\n

    Output:

    [1,2,3] == [1,2,4] false\n{\"A\":\"a\",\"B\":\"b\"} == {\"A\":\"a\",\"B\":\"b\"} true\n17 == 17.0 true\n\"foo\" == \"bar\" false\n
    Example

    The example demonstrates comparing several JSON types against the null pointer (JSON null).

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create several JSON values\n    json array = {1, 2, 3};\n    json object = {{\"A\", \"a\"}, {\"B\", \"b\"}};\n    json number = 17;\n    json string = \"foo\";\n    json null;\n\n    // output values and comparisons\n    std::cout << std::boolalpha;\n    std::cout << array << \" == nullptr \" << (array == nullptr) << '\\n';\n    std::cout << object << \" == nullptr \" << (object == nullptr) << '\\n';\n    std::cout << number << \" == nullptr \" << (number == nullptr) << '\\n';\n    std::cout << string << \" == nullptr \" << (string == nullptr) << '\\n';\n    std::cout << null << \" == nullptr \" << (null == nullptr) << '\\n';\n}\n

    Output:

    [1,2,3] == nullptr false\n{\"A\":\"a\",\"B\":\"b\"} == nullptr false\n17 == nullptr false\n\"foo\" == nullptr false\nnull == nullptr true\n
    "},{"location":"api/basic_json/operator_eq/#version-history","title":"Version history","text":"
    1. Added in version 1.0.0. Added C++20 member functions in version 3.11.0.
    2. Added in version 1.0.0. Added C++20 member functions in version 3.11.0.
    "},{"location":"api/basic_json/operator_ge/","title":"nlohmann::basic_json::operator>=","text":"
    // until C++20\nbool operator>=(const_reference lhs, const_reference rhs) noexcept;   // (1)\n\ntemplate<typename ScalarType>\nbool operator>=(const_reference lhs, const ScalarType rhs) noexcept;  // (2)\n\ntemplate<typename ScalarType>\nbool operator>=(ScalarType lhs, const const_reference rhs) noexcept;  // (2)\n
    1. Compares whether one JSON value lhs is greater than or equal to another JSON value rhs according to the following rules:

      • The comparison always yields false if (1) either operand is discarded, or (2) either operand is NaN and the other operand is either NaN or any other number.
      • Otherwise, returns the result of !(lhs < rhs) (see operator<).
    2. Compares whether a JSON value is greater than or equal to a scalar or a scalar is greater than or equal to a JSON value by converting the scalar to a JSON value and comparing both JSON values according to 1.

    "},{"location":"api/basic_json/operator_ge/#template-parameters","title":"Template parameters","text":"ScalarType a scalar type according to std::is_scalar<ScalarType>::value"},{"location":"api/basic_json/operator_ge/#parameters","title":"Parameters","text":"lhs (in) first value to consider rhs (in) second value to consider"},{"location":"api/basic_json/operator_ge/#return-value","title":"Return value","text":"

    whether lhs is less than or equal to rhs

    "},{"location":"api/basic_json/operator_ge/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/basic_json/operator_ge/#complexity","title":"Complexity","text":"

    Linear.

    "},{"location":"api/basic_json/operator_ge/#notes","title":"Notes","text":"

    Comparing NaN

    NaN values are unordered within the domain of numbers. The following comparisons all yield false: 1. Comparing a NaN with itself. 2. Comparing a NaN with another NaN. 3. Comparing a NaN and any other number.

    Operator overload resolution

    Since C++20 overload resolution will consider the rewritten candidate generated from operator<=>.

    "},{"location":"api/basic_json/operator_ge/#examples","title":"Examples","text":"Example

    The example demonstrates comparing several JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create several JSON values\n    json array_1 = {1, 2, 3};\n    json array_2 = {1, 2, 4};\n    json object_1 = {{\"A\", \"a\"}, {\"B\", \"b\"}};\n    json object_2 = {{\"B\", \"b\"}, {\"A\", \"a\"}};\n    json number_1 = 17;\n    json number_2 = 17.0000000000001L;\n    json string_1 = \"foo\";\n    json string_2 = \"bar\";\n\n    // output values and comparisons\n    std::cout << std::boolalpha;\n    std::cout << array_1 << \" >= \" << array_2 << \" \" << (array_1 >= array_2) << '\\n';\n    std::cout << object_1 << \" >= \" << object_2 << \" \" << (object_1 >= object_2) << '\\n';\n    std::cout << number_1 << \" >= \" << number_2 << \" \" << (number_1 >= number_2) << '\\n';\n    std::cout << string_1 << \" >= \" << string_2 << \" \" << (string_1 >= string_2) << '\\n';\n}\n

    Output:

    [1,2,3] >= [1,2,4] false\n{\"A\":\"a\",\"B\":\"b\"} >= {\"A\":\"a\",\"B\":\"b\"} true\n17 >= 17.0000000000001 false\n\"foo\" >= \"bar\" true\n
    "},{"location":"api/basic_json/operator_ge/#see-also","title":"See also","text":"
    • operator<=> comparison: 3-way
    "},{"location":"api/basic_json/operator_ge/#version-history","title":"Version history","text":"
    1. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
    2. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
    "},{"location":"api/basic_json/operator_gt/","title":"nlohmann::basic_json::operator>","text":"
    // until C++20\nbool operator>(const_reference lhs, const_reference rhs) noexcept;   // (1)\n\ntemplate<typename ScalarType>\nbool operator>(const_reference lhs, const ScalarType rhs) noexcept;  // (2)\n\ntemplate<typename ScalarType>\nbool operator>(ScalarType lhs, const const_reference rhs) noexcept;  // (2)\n
    1. Compares whether one JSON value lhs is greater than another JSON value rhs according to the following rules:

      • The comparison always yields false if (1) either operand is discarded, or (2) either operand is NaN and the other operand is either NaN or any other number.
      • Otherwise, returns the result of !(lhs <= rhs) (see operator<=).
    2. Compares whether a JSON value is greater than a scalar or a scalar is greater than a JSON value by converting the scalar to a JSON value and comparing both JSON values according to 1.

    "},{"location":"api/basic_json/operator_gt/#template-parameters","title":"Template parameters","text":"ScalarType a scalar type according to std::is_scalar<ScalarType>::value"},{"location":"api/basic_json/operator_gt/#parameters","title":"Parameters","text":"lhs (in) first value to consider rhs (in) second value to consider"},{"location":"api/basic_json/operator_gt/#return-value","title":"Return value","text":"

    whether lhs is greater than rhs

    "},{"location":"api/basic_json/operator_gt/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/basic_json/operator_gt/#complexity","title":"Complexity","text":"

    Linear.

    "},{"location":"api/basic_json/operator_gt/#notes","title":"Notes","text":"

    Comparing NaN

    NaN values are unordered within the domain of numbers. The following comparisons all yield false: 1. Comparing a NaN with itself. 2. Comparing a NaN with another NaN. 3. Comparing a NaN and any other number.

    Operator overload resolution

    Since C++20 overload resolution will consider the rewritten candidate generated from operator<=>.

    "},{"location":"api/basic_json/operator_gt/#examples","title":"Examples","text":"Example

    The example demonstrates comparing several JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create several JSON values\n    json array_1 = {1, 2, 3};\n    json array_2 = {1, 2, 4};\n    json object_1 = {{\"A\", \"a\"}, {\"B\", \"b\"}};\n    json object_2 = {{\"B\", \"b\"}, {\"A\", \"a\"}};\n    json number_1 = 17;\n    json number_2 = 17.0000000000001L;\n    json string_1 = \"foo\";\n    json string_2 = \"bar\";\n\n    // output values and comparisons\n    std::cout << std::boolalpha;\n    std::cout << array_1 << \" > \" << array_2 << \" \" << (array_1 > array_2) << '\\n';\n    std::cout << object_1 << \" > \" << object_2 << \" \" << (object_1 > object_2) << '\\n';\n    std::cout << number_1 << \" > \" << number_2 << \" \" << (number_1 > number_2) << '\\n';\n    std::cout << string_1 << \" > \" << string_2 << \" \" << (string_1 > string_2) << '\\n';\n}\n

    Output:

    [1,2,3] > [1,2,4] false\n{\"A\":\"a\",\"B\":\"b\"} > {\"A\":\"a\",\"B\":\"b\"} false\n17 > 17.0000000000001 false\n\"foo\" > \"bar\" true\n
    "},{"location":"api/basic_json/operator_gt/#see-also","title":"See also","text":"
    • operator<=> comparison: 3-way
    "},{"location":"api/basic_json/operator_gt/#version-history","title":"Version history","text":"
    1. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
    2. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
    "},{"location":"api/basic_json/operator_le/","title":"nlohmann::basic_json::operator<=","text":"
    // until C++20\nbool operator<=(const_reference lhs, const_reference rhs) noexcept;   // (1)\n\ntemplate<typename ScalarType>\nbool operator<=(const_reference lhs, const ScalarType rhs) noexcept;  // (2)\n\ntemplate<typename ScalarType>\nbool operator<=(ScalarType lhs, const const_reference rhs) noexcept;  // (2)\n
    1. Compares whether one JSON value lhs is less than or equal to another JSON value rhs according to the following rules:

      • The comparison always yields false if (1) either operand is discarded, or (2) either operand is NaN and the other operand is either NaN or any other number.
      • Otherwise, returns the result of !(rhs < lhs) (see operator<).
    2. Compares whether a JSON value is less than or equal to a scalar or a scalar is less than or equal to a JSON value by converting the scalar to a JSON value and comparing both JSON values according to 1.

    "},{"location":"api/basic_json/operator_le/#template-parameters","title":"Template parameters","text":"ScalarType a scalar type according to std::is_scalar<ScalarType>::value"},{"location":"api/basic_json/operator_le/#parameters","title":"Parameters","text":"lhs (in) first value to consider rhs (in) second value to consider"},{"location":"api/basic_json/operator_le/#return-value","title":"Return value","text":"

    whether lhs is less than or equal to rhs

    "},{"location":"api/basic_json/operator_le/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/basic_json/operator_le/#complexity","title":"Complexity","text":"

    Linear.

    "},{"location":"api/basic_json/operator_le/#notes","title":"Notes","text":"

    Comparing NaN

    NaN values are unordered within the domain of numbers. The following comparisons all yield false: 1. Comparing a NaN with itself. 2. Comparing a NaN with another NaN. 3. Comparing a NaN and any other number.

    Operator overload resolution

    Since C++20 overload resolution will consider the rewritten candidate generated from operator<=>.

    "},{"location":"api/basic_json/operator_le/#examples","title":"Examples","text":"Example

    The example demonstrates comparing several JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create several JSON values\n    json array_1 = {1, 2, 3};\n    json array_2 = {1, 2, 4};\n    json object_1 = {{\"A\", \"a\"}, {\"B\", \"b\"}};\n    json object_2 = {{\"B\", \"b\"}, {\"A\", \"a\"}};\n    json number_1 = 17;\n    json number_2 = 17.0000000000001L;\n    json string_1 = \"foo\";\n    json string_2 = \"bar\";\n\n    // output values and comparisons\n    std::cout << std::boolalpha;\n    std::cout << array_1 << \" <= \" << array_2 << \" \" << (array_1 <= array_2) << '\\n';\n    std::cout << object_1 << \" <= \" << object_2 << \" \" << (object_1 <= object_2) << '\\n';\n    std::cout << number_1 << \" <= \" << number_2 << \" \" << (number_1 <= number_2) << '\\n';\n    std::cout << string_1 << \" <= \" << string_2 << \" \" << (string_1 <= string_2) << '\\n';\n}\n

    Output:

    [1,2,3] <= [1,2,4] true\n{\"A\":\"a\",\"B\":\"b\"} <= {\"A\":\"a\",\"B\":\"b\"} true\n17 <= 17.0000000000001 true\n\"foo\" <= \"bar\" false\n
    "},{"location":"api/basic_json/operator_le/#see-also","title":"See also","text":"
    • operator<=> comparison: 3-way
    "},{"location":"api/basic_json/operator_le/#version-history","title":"Version history","text":"
    1. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
    2. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
    "},{"location":"api/basic_json/operator_lt/","title":"nlohmann::basic_json::operator<","text":"
    // until C++20\nbool operator<(const_reference lhs, const_reference rhs) noexcept;   // (1)\n\ntemplate<typename ScalarType>\nbool operator<(const_reference lhs, const ScalarType rhs) noexcept;  // (2)\n\ntemplate<typename ScalarType>\nbool operator<(ScalarType lhs, const const_reference rhs) noexcept;  // (2)\n
    1. Compares whether one JSON value lhs is less than another JSON value rhs according to the following rules:

      • If either operand is discarded, the comparison yields false.
      • If both operands have the same type, the values are compared using their respective operator<.
      • Integer and floating-point numbers are automatically converted before comparison.
      • In case lhs and rhs have different types, the values are ignored and the order of the types is considered, which is:
        1. null
        2. boolean
        3. number (all types)
        4. object
        5. array
        6. string
        7. binary For instance, any boolean value is considered less than any string.
    2. Compares whether a JSON value is less than a scalar or a scalar is less than a JSON value by converting the scalar to a JSON value and comparing both JSON values according to 1.

    "},{"location":"api/basic_json/operator_lt/#template-parameters","title":"Template parameters","text":"ScalarType a scalar type according to std::is_scalar<ScalarType>::value"},{"location":"api/basic_json/operator_lt/#parameters","title":"Parameters","text":"lhs (in) first value to consider rhs (in) second value to consider"},{"location":"api/basic_json/operator_lt/#return-value","title":"Return value","text":"

    whether lhs is less than rhs

    "},{"location":"api/basic_json/operator_lt/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/basic_json/operator_lt/#complexity","title":"Complexity","text":"

    Linear.

    "},{"location":"api/basic_json/operator_lt/#notes","title":"Notes","text":"

    Comparing NaN

    NaN values are unordered within the domain of numbers. The following comparisons all yield false: 1. Comparing a NaN with itself. 2. Comparing a NaN with another NaN. 3. Comparing a NaN and any other number.

    Operator overload resolution

    Since C++20 overload resolution will consider the rewritten candidate generated from operator<=>.

    "},{"location":"api/basic_json/operator_lt/#examples","title":"Examples","text":"Example

    The example demonstrates comparing several JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create several JSON values\n    json array_1 = {1, 2, 3};\n    json array_2 = {1, 2, 4};\n    json object_1 = {{\"A\", \"a\"}, {\"B\", \"b\"}};\n    json object_2 = {{\"B\", \"b\"}, {\"A\", \"a\"}};\n    json number_1 = 17;\n    json number_2 = 17.0000000000001L;\n    json string_1 = \"foo\";\n    json string_2 = \"bar\";\n\n    // output values and comparisons\n    std::cout << std::boolalpha;\n    std::cout << array_1 << \" == \" << array_2 << \" \" << (array_1 < array_2) << '\\n';\n    std::cout << object_1 << \" == \" << object_2 << \" \" << (object_1 < object_2) << '\\n';\n    std::cout << number_1 << \" == \" << number_2 << \" \" << (number_1 < number_2) << '\\n';\n    std::cout << string_1 << \" == \" << string_2 << \" \" << (string_1 < string_2) << '\\n';\n}\n

    Output:

    [1,2,3] == [1,2,4] true\n{\"A\":\"a\",\"B\":\"b\"} == {\"A\":\"a\",\"B\":\"b\"} false\n17 == 17.0000000000001 true\n\"foo\" == \"bar\" false\n
    "},{"location":"api/basic_json/operator_lt/#see-also","title":"See also","text":"
    • operator<=> comparison: 3-way
    "},{"location":"api/basic_json/operator_lt/#version-history","title":"Version history","text":"
    1. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
    2. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
    "},{"location":"api/basic_json/operator_ne/","title":"nlohmann::basic_json::operator!=","text":"
    // until C++20\nbool operator!=(const_reference lhs, const_reference rhs) noexcept;   // (1)\n\ntemplate<typename ScalarType>\nbool operator!=(const_reference lhs, const ScalarType rhs) noexcept;  // (2)\n\ntemplate<typename ScalarType>\nbool operator!=(ScalarType lhs, const const_reference rhs) noexcept;  // (2)\n\n// since C++20\nclass basic_json {\n    bool operator!=(const_reference rhs) const noexcept;              // (1)\n\n    template<typename ScalarType>\n    bool operator!=(ScalarType rhs) const noexcept;                   // (2)\n};\n
    1. Compares two JSON values for inequality according to the following rules:

      • The comparison always yields false if (1) either operand is discarded, or (2) either operand is NaN and the other operand is either NaN or any other number.
      • Otherwise, returns the result of !(lhs == rhs) (until C++20) or !(*this == rhs) (since C++20).
    2. Compares a JSON value and a scalar or a scalar and a JSON value for inequality by converting the scalar to a JSON value and comparing both JSON values according to 1.

    "},{"location":"api/basic_json/operator_ne/#template-parameters","title":"Template parameters","text":"ScalarType a scalar type according to std::is_scalar<ScalarType>::value"},{"location":"api/basic_json/operator_ne/#parameters","title":"Parameters","text":"lhs (in) first value to consider rhs (in) second value to consider"},{"location":"api/basic_json/operator_ne/#return-value","title":"Return value","text":"

    whether the values lhs/*this and rhs are not equal

    "},{"location":"api/basic_json/operator_ne/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/basic_json/operator_ne/#complexity","title":"Complexity","text":"

    Linear.

    "},{"location":"api/basic_json/operator_ne/#notes","title":"Notes","text":"

    Comparing NaN

    NaN values are unordered within the domain of numbers. The following comparisons all yield false: 1. Comparing a NaN with itself. 2. Comparing a NaN with another NaN. 3. Comparing a NaN and any other number.

    "},{"location":"api/basic_json/operator_ne/#examples","title":"Examples","text":"Example

    The example demonstrates comparing several JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create several JSON values\n    json array_1 = {1, 2, 3};\n    json array_2 = {1, 2, 4};\n    json object_1 = {{\"A\", \"a\"}, {\"B\", \"b\"}};\n    json object_2 = {{\"B\", \"b\"}, {\"A\", \"a\"}};\n    json number_1 = 17;\n    json number_2 = 17.000000000000001L;\n    json string_1 = \"foo\";\n    json string_2 = \"bar\";\n\n    // output values and comparisons\n    std::cout << std::boolalpha;\n    std::cout << array_1 << \" != \" << array_2 << \" \" << (array_1 != array_2) << '\\n';\n    std::cout << object_1 << \" != \" << object_2 << \" \" << (object_1 != object_2) << '\\n';\n    std::cout << number_1 << \" != \" << number_2 << \" \" << (number_1 != number_2) << '\\n';\n    std::cout << string_1 << \" != \" << string_2 << \" \" << (string_1 != string_2) << '\\n';\n}\n

    Output:

    [1,2,3] != [1,2,4] true\n{\"A\":\"a\",\"B\":\"b\"} != {\"A\":\"a\",\"B\":\"b\"} false\n17 != 17.0 false\n\"foo\" != \"bar\" true\n
    Example

    The example demonstrates comparing several JSON types against the null pointer (JSON null).

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create several JSON values\n    json array = {1, 2, 3};\n    json object = {{\"A\", \"a\"}, {\"B\", \"b\"}};\n    json number = 17;\n    json string = \"foo\";\n    json null;\n\n    // output values and comparisons\n    std::cout << std::boolalpha;\n    std::cout << array << \" != nullptr \" << (array != nullptr) << '\\n';\n    std::cout << object << \" != nullptr \" << (object != nullptr) << '\\n';\n    std::cout << number << \" != nullptr \" << (number != nullptr) << '\\n';\n    std::cout << string << \" != nullptr \" << (string != nullptr) << '\\n';\n    std::cout << null << \" != nullptr \" << (null != nullptr) << '\\n';\n}\n

    Output:

    [1,2,3] != nullptr true\n{\"A\":\"a\",\"B\":\"b\"} != nullptr true\n17 != nullptr true\n\"foo\" != nullptr true\nnull != nullptr false\n
    "},{"location":"api/basic_json/operator_ne/#version-history","title":"Version history","text":"
    1. Added in version 1.0.0. Added C++20 member functions in version 3.11.0.
    2. Added in version 1.0.0. Added C++20 member functions in version 3.11.0.
    "},{"location":"api/basic_json/operator_spaceship/","title":"nlohmann::basic_json::operator<=>","text":"
    // since C++20\nclass basic_json {\n    std::partial_ordering operator<=>(const_reference rhs) const noexcept;  // (1)\n\n    template<typename ScalarType>\n    std::partial_ordering operator<=>(const ScalarType rhs) const noexcept; // (2)\n};\n
    1. 3-way compares two JSON values producing a result of type std::partial_ordering according to the following rules:

      • Two JSON values compare with a result of std::partial_ordering::unordered if either value is discarded.
      • If both JSON values are of the same type, the result is produced by 3-way comparing their stored values using their respective operator<=>.
      • Integer and floating-point numbers are converted to their common type and then 3-way compared using their respective operator<=>. For instance, comparing an integer and a floating-point value will 3-way compare the first value converted to floating-point with the second value.
      • Otherwise, yields a result by comparing the type (see value_t).
    2. 3-way compares a JSON value and a scalar or a scalar and a JSON value by converting the scalar to a JSON value and 3-way comparing both JSON values (see 1).

    "},{"location":"api/basic_json/operator_spaceship/#template-parameters","title":"Template parameters","text":"ScalarType a scalar type according to std::is_scalar<ScalarType>::value"},{"location":"api/basic_json/operator_spaceship/#parameters","title":"Parameters","text":"rhs (in) second value to consider"},{"location":"api/basic_json/operator_spaceship/#return-value","title":"Return value","text":"

    the std::partial_ordering of the 3-way comparison of *this and rhs

    "},{"location":"api/basic_json/operator_spaceship/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/basic_json/operator_spaceship/#complexity","title":"Complexity","text":"

    Linear.

    "},{"location":"api/basic_json/operator_spaceship/#notes","title":"Notes","text":"

    Comparing NaN

    • NaN values are unordered within the domain of numbers. The following comparisons all yield std::partial_ordering::unordered:
      1. Comparing a NaN with itself.
      2. Comparing a NaN with another NaN.
      3. Comparing a NaN and any other number.
    "},{"location":"api/basic_json/operator_spaceship/#examples","title":"Examples","text":"Example: (1) comparing JSON values

    The example demonstrates comparing several JSON values.

    #include <compare>\n#include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nconst char* to_string(const std::partial_ordering& po)\n{\n    if (std::is_lt(po))\n    {\n        return \"less\";\n    }\n    else if (std::is_gt(po))\n    {\n        return \"greater\";\n    }\n    else if (std::is_eq(po))\n    {\n        return \"equivalent\";\n    }\n    return \"unordered\";\n}\n\nint main()\n{\n    // create several JSON values\n    json array_1 = {1, 2, 3};\n    json array_2 = {1, 2, 4};\n    json object_1 = {{\"A\", \"a\"}, {\"B\", \"b\"}};\n    json object_2 = {{\"B\", \"b\"}, {\"A\", \"a\"}};\n    json number = 17;\n    json string = \"foo\";\n    json discarded = json(json::value_t::discarded);\n\n    // output values and comparisons\n    std::cout << array_1 << \" <=> \" << array_2 << \" := \" << to_string(array_1 <=> array_2) << '\\n'; // *NOPAD*\n    std::cout << object_1 << \" <=> \" << object_2 << \" := \" << to_string(object_1 <=> object_2) << '\\n'; // *NOPAD*\n    std::cout << string << \" <=> \" << number << \" := \" << to_string(string <=> number) << '\\n'; // *NOPAD*\n    std::cout << string << \" <=> \" << discarded << \" := \" << to_string(string <=> discarded) << '\\n'; // *NOPAD*\n}\n

    Output:

    [1,2,3] <=> [1,2,4] := less\n{\"A\":\"a\",\"B\":\"b\"} <=> {\"A\":\"a\",\"B\":\"b\"} := equivalent\n\"foo\" <=> 17 := greater\n\"foo\" <=> <discarded> := unordered\n
    Example: (2) comparing JSON values and scalars

    The example demonstrates comparing several JSON values and scalars.

    #include <compare>\n#include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nconst char* to_string(const std::partial_ordering& po)\n{\n    if (std::is_lt(po))\n    {\n        return \"less\";\n    }\n    else if (std::is_gt(po))\n    {\n        return \"greater\";\n    }\n    else if (std::is_eq(po))\n    {\n        return \"equivalent\";\n    }\n    return \"unordered\";\n}\n\nint main()\n{\n    using float_limits = std::numeric_limits<json::number_float_t>;\n    constexpr auto nan = float_limits::quiet_NaN();\n\n    // create several JSON values\n    json boolean = false;\n    json number = 17;\n    json string = \"17\";\n\n    // output values and comparisons\n    std::cout << std::boolalpha << std::fixed;\n    std::cout << boolean << \" <=> \" << true << \" := \" << to_string(boolean <=> true) << '\\n'; // *NOPAD*\n    std::cout << number << \" <=> \" << 17.0 << \" := \" << to_string(number <=> 17.0) << '\\n'; // *NOPAD*\n    std::cout << number << \" <=> \" << nan << \" := \" << to_string(number <=> nan) << '\\n'; // *NOPAD*\n    std::cout << string << \" <=> \" << 17 << \" := \" << to_string(string <=> 17) << '\\n'; // *NOPAD*\n}\n

    Output:

    false <=> true := less\n17 <=> 17.000000 := equivalent\n17 <=> nan := unordered\n\"17\" <=> 17 := greater\n
    "},{"location":"api/basic_json/operator_spaceship/#see-also","title":"See also","text":"
    • operator== - comparison: equal
    • operator!= - comparison: not equal
    • operator< - comparison: less than
    • operator<= - comparison: less than or equal
    • operator> - comparison: greater than
    • operator>= - comparison: greater than or equal
    "},{"location":"api/basic_json/operator_spaceship/#version-history","title":"Version history","text":"
    1. Added in version 3.11.0.
    2. Added in version 3.11.0.
    "},{"location":"api/basic_json/operator_value_t/","title":"nlohmann::basic_json::operator value_t","text":"
    constexpr operator value_t() const noexcept;\n

    Return the type of the JSON value as a value from the value_t enumeration.

    "},{"location":"api/basic_json/operator_value_t/#return-value","title":"Return value","text":"

    the type of the JSON value

    Value type return value null value_t::null boolean value_t::boolean string value_t::string number (integer) value_t::number_integer number (unsigned integer) value_t::number_unsigned number (floating-point) value_t::number_float object value_t::object array value_t::array binary value_t::binary discarded value_t::discarded"},{"location":"api/basic_json/operator_value_t/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/operator_value_t/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/operator_value_t/#examples","title":"Examples","text":"Example

    The following code exemplifies operator value_t() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = -17;\n    json j_number_unsigned = 42u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n\n    // call operator value_t()\n    json::value_t t_null = j_null;\n    json::value_t t_boolean = j_boolean;\n    json::value_t t_number_integer = j_number_integer;\n    json::value_t t_number_unsigned = j_number_unsigned;\n    json::value_t t_number_float = j_number_float;\n    json::value_t t_object = j_object;\n    json::value_t t_array = j_array;\n    json::value_t t_string = j_string;\n\n    // print types\n    std::cout << std::boolalpha;\n    std::cout << (t_null == json::value_t::null) << '\\n';\n    std::cout << (t_boolean == json::value_t::boolean) << '\\n';\n    std::cout << (t_number_integer == json::value_t::number_integer) << '\\n';\n    std::cout << (t_number_unsigned == json::value_t::number_unsigned) << '\\n';\n    std::cout << (t_number_float == json::value_t::number_float) << '\\n';\n    std::cout << (t_object == json::value_t::object) << '\\n';\n    std::cout << (t_array == json::value_t::array) << '\\n';\n    std::cout << (t_string == json::value_t::string) << '\\n';\n}\n

    Output:

    true\ntrue\ntrue\ntrue\ntrue\ntrue\ntrue\ntrue\n
    "},{"location":"api/basic_json/operator_value_t/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Added unsigned integer type in version 2.0.0.
    • Added binary type in version 3.8.0.
    "},{"location":"api/basic_json/other_error/","title":"nlohmann::basic_json::other_error","text":"
    class other_error : public exception;\n

    This exception is thrown in case of errors that cannot be classified with the other exception types.

    Exceptions have ids 5xx (see list of other errors).

    classDiagram\n  direction LR\n\n    class std_exception [\"std::exception\"] {\n        <<interface>>\n    }\n\n    class json_exception [\"basic_json::exception\"] {\n        +const int id\n        +const char* what() const\n    }\n\n    class json_parse_error [\"basic_json::parse_error\"] {\n        +const std::size_t byte\n    }\n\n    class json_invalid_iterator [\"basic_json::invalid_iterator\"]\n    class json_type_error [\"basic_json::type_error\"]\n    class json_out_of_range [\"basic_json::out_of_range\"]\n    class json_other_error [\"basic_json::other_error\"]\n\n    std_exception <|-- json_exception\n    json_exception <|-- json_parse_error\n    json_exception <|-- json_invalid_iterator\n    json_exception <|-- json_type_error\n    json_exception <|-- json_out_of_range\n    json_exception <|-- json_other_error\n\n    style json_other_error fill:#CCCCFF
    "},{"location":"api/basic_json/other_error/#member-functions","title":"Member functions","text":"
    • what - returns explanatory string
    "},{"location":"api/basic_json/other_error/#member-variables","title":"Member variables","text":"
    • id - the id of the exception
    "},{"location":"api/basic_json/other_error/#examples","title":"Examples","text":"Example

    The following code shows how a other_error exception can be caught.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    try\n    {\n        // executing a failing JSON Patch operation\n        json value = R\"({\n            \"best_biscuit\": {\n                \"name\": \"Oreo\"\n            }\n        })\"_json;\n        json patch = R\"([{\n            \"op\": \"test\",\n            \"path\": \"/best_biscuit/name\",\n            \"value\": \"Choco Leibniz\"\n        }])\"_json;\n        value.patch(patch);\n    }\n    catch (const json::other_error& e)\n    {\n        // output exception information\n        std::cout << \"message: \" << e.what() << '\\n'\n                  << \"exception id: \" << e.id << std::endl;\n    }\n}\n

    Output:

    message: [json.exception.other_error.501] unsuccessful: {\"op\":\"test\",\"path\":\"/best_biscuit/name\",\"value\":\"Choco Leibniz\"}\nexception id: 501\n
    "},{"location":"api/basic_json/other_error/#see-also","title":"See also","text":"
    • List of other errors
    • parse_error for exceptions indicating a parse error
    • invalid_iterator for exceptions indicating errors with iterators
    • type_error for exceptions indicating executing a member function with a wrong type
    • out_of_range for exceptions indicating access out of the defined range
    "},{"location":"api/basic_json/other_error/#version-history","title":"Version history","text":"
    • Since version 3.0.0.
    "},{"location":"api/basic_json/out_of_range/","title":"nlohmann::basic_json::out_of_range","text":"
    class out_of_range : public exception;\n

    This exception is thrown in case a library function is called on an input parameter that exceeds the expected range, for instance in case of array indices or nonexisting object keys.

    Exceptions have ids 4xx (see list of out-of-range errors).

    classDiagram\n  direction LR\n\n    class std_exception [\"std::exception\"] {\n        <<interface>>\n    }\n\n    class json_exception [\"basic_json::exception\"] {\n        +const int id\n        +const char* what() const\n    }\n\n    class json_parse_error [\"basic_json::parse_error\"] {\n        +const std::size_t byte\n    }\n\n    class json_invalid_iterator [\"basic_json::invalid_iterator\"]\n    class json_type_error [\"basic_json::type_error\"]\n    class json_out_of_range [\"basic_json::out_of_range\"]\n    class json_other_error [\"basic_json::other_error\"]\n\n    std_exception <|-- json_exception\n    json_exception <|-- json_parse_error\n    json_exception <|-- json_invalid_iterator\n    json_exception <|-- json_type_error\n    json_exception <|-- json_out_of_range\n    json_exception <|-- json_other_error\n\n    style json_out_of_range fill:#CCCCFF
    "},{"location":"api/basic_json/out_of_range/#member-functions","title":"Member functions","text":"
    • what - returns explanatory string
    "},{"location":"api/basic_json/out_of_range/#member-variables","title":"Member variables","text":"
    • id - the id of the exception
    "},{"location":"api/basic_json/out_of_range/#examples","title":"Examples","text":"Example

    The following code shows how a out_of_range exception can be caught.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    try\n    {\n        // calling at() for an invalid index\n        json j = {1, 2, 3, 4};\n        j.at(4) = 10;\n    }\n    catch (const json::out_of_range& e)\n    {\n        // output exception information\n        std::cout << \"message: \" << e.what() << '\\n'\n                  << \"exception id: \" << e.id << std::endl;\n    }\n}\n

    Output:

    message: [json.exception.out_of_range.401] array index 4 is out of range\nexception id: 401\n
    "},{"location":"api/basic_json/out_of_range/#see-also","title":"See also","text":"
    • List of out-of-range errors
    • parse_error for exceptions indicating a parse error
    • invalid_iterator for exceptions indicating errors with iterators
    • type_error for exceptions indicating executing a member function with a wrong type
    • other_error for exceptions indicating other library errors
    "},{"location":"api/basic_json/out_of_range/#version-history","title":"Version history","text":"
    • Since version 3.0.0.
    "},{"location":"api/basic_json/parse/","title":"nlohmann::basic_json::parse","text":"
    // (1)\ntemplate<typename InputType>\nstatic basic_json parse(InputType&& i,\n                        const parser_callback_t cb = nullptr,\n                        const bool allow_exceptions = true,\n                        const bool ignore_comments = false);\n\n// (2)\ntemplate<typename IteratorType>\nstatic basic_json parse(IteratorType first, IteratorType last,\n                        const parser_callback_t cb = nullptr,\n                        const bool allow_exceptions = true,\n                        const bool ignore_comments = false);\n
    1. Deserialize from a compatible input.
    2. Deserialize from a pair of character iterators

      The value_type of the iterator must be an integral type with size of 1, 2 or 4 bytes, which will be interpreted respectively as UTF-8, UTF-16 and UTF-32.

    "},{"location":"api/basic_json/parse/#template-parameters","title":"Template parameters","text":"InputType

    A compatible input, for instance:

    • an std::istream object
    • a FILE pointer (throws if null)
    • a C-style array of characters
    • a pointer to a null-terminated string of single byte characters (throws if null)
    • a std::string
    • an object obj for which begin(obj) and end(obj) produces a valid pair of iterators.
    IteratorType

    a compatible iterator type, for instance.

    • a pair of std::string::iterator or std::vector<std::uint8_t>::iterator
    • a pair of pointers such as ptr and ptr + len
    "},{"location":"api/basic_json/parse/#parameters","title":"Parameters","text":"i (in) Input to parse from. cb (in) a parser callback function of type parser_callback_t which is used to control the deserialization by filtering unwanted values (optional) allow_exceptions (in) whether to throw exceptions in case of a parse error (optional, true by default) ignore_comments (in) whether comments should be ignored and treated like whitespace (true) or yield a parse error (false); (optional, false by default) first (in) iterator to start of character range last (in) iterator to end of character range"},{"location":"api/basic_json/parse/#return-value","title":"Return value","text":"

    Deserialized JSON value; in case of a parse error and allow_exceptions set to false, the return value will be value_t::discarded. The latter can be checked with is_discarded.

    "},{"location":"api/basic_json/parse/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/parse/#exceptions","title":"Exceptions","text":"
    • Throws parse_error.101 in case of an unexpected token, or empty input like a null FILE* or char* pointer.
    • Throws parse_error.102 if to_unicode fails or surrogate error.
    • Throws parse_error.103 if to_unicode fails.
    "},{"location":"api/basic_json/parse/#complexity","title":"Complexity","text":"

    Linear in the length of the input. The parser is a predictive LL(1) parser. The complexity can be higher if the parser callback function cb or reading from (1) the input i or (2) the iterator range [first, last] has a super-linear complexity.

    "},{"location":"api/basic_json/parse/#notes","title":"Notes","text":"

    A UTF-8 byte order mark is silently ignored.

    "},{"location":"api/basic_json/parse/#examples","title":"Examples","text":"Parsing from a character array

    The example below demonstrates the parse() function reading from an array.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // a JSON text\n    char text[] = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, 38793]\n        }\n    }\n    )\";\n\n    // parse and serialize JSON\n    json j_complete = json::parse(text);\n    std::cout << std::setw(4) << j_complete << \"\\n\\n\";\n}\n

    Output:

    {\n    \"Image\": {\n        \"Animated\": false,\n        \"Height\": 600,\n        \"IDs\": [\n            116,\n            943,\n            234,\n            38793\n        ],\n        \"Thumbnail\": {\n            \"Height\": 125,\n            \"Url\": \"http://www.example.com/image/481989943\",\n            \"Width\": 100\n        },\n        \"Title\": \"View from 15th Floor\",\n        \"Width\": 800\n    }\n}\n
    Parsing from a string

    The example below demonstrates the parse() function with and without callback function.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, 38793]\n        }\n    }\n    )\";\n\n    // parse and serialize JSON\n    json j_complete = json::parse(text);\n    std::cout << std::setw(4) << j_complete << \"\\n\\n\";\n\n    // define parser callback\n    json::parser_callback_t cb = [](int depth, json::parse_event_t event, json & parsed)\n    {\n        // skip object elements with key \"Thumbnail\"\n        if (event == json::parse_event_t::key and parsed == json(\"Thumbnail\"))\n        {\n            return false;\n        }\n        else\n        {\n            return true;\n        }\n    };\n\n    // parse (with callback) and serialize JSON\n    json j_filtered = json::parse(text, cb);\n    std::cout << std::setw(4) << j_filtered << '\\n';\n}\n

    Output:

    {\n    \"Image\": {\n        \"Animated\": false,\n        \"Height\": 600,\n        \"IDs\": [\n            116,\n            943,\n            234,\n            38793\n        ],\n        \"Thumbnail\": {\n            \"Height\": 125,\n            \"Url\": \"http://www.example.com/image/481989943\",\n            \"Width\": 100\n        },\n        \"Title\": \"View from 15th Floor\",\n        \"Width\": 800\n    }\n}\n\n{\n    \"Image\": {\n        \"Animated\": false,\n        \"Height\": 600,\n        \"IDs\": [\n            116,\n            943,\n            234,\n            38793\n        ],\n        \"Title\": \"View from 15th Floor\",\n        \"Width\": 800\n    }\n}\n
    Parsing from an input stream

    The example below demonstrates the parse() function with and without callback function.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, 38793]\n        }\n    }\n    )\";\n\n    // fill a stream with JSON text\n    std::stringstream ss;\n    ss << text;\n\n    // parse and serialize JSON\n    json j_complete = json::parse(ss);\n    std::cout << std::setw(4) << j_complete << \"\\n\\n\";\n\n    // define parser callback\n    json::parser_callback_t cb = [](int depth, json::parse_event_t event, json & parsed)\n    {\n        // skip object elements with key \"Thumbnail\"\n        if (event == json::parse_event_t::key and parsed == json(\"Thumbnail\"))\n        {\n            return false;\n        }\n        else\n        {\n            return true;\n        }\n    };\n\n    // fill a stream with JSON text\n    ss.clear();\n    ss << text;\n\n    // parse (with callback) and serialize JSON\n    json j_filtered = json::parse(ss, cb);\n    std::cout << std::setw(4) << j_filtered << '\\n';\n}\n

    Output:

    {\n    \"Image\": {\n        \"Animated\": false,\n        \"Height\": 600,\n        \"IDs\": [\n            116,\n            943,\n            234,\n            38793\n        ],\n        \"Thumbnail\": {\n            \"Height\": 125,\n            \"Url\": \"http://www.example.com/image/481989943\",\n            \"Width\": 100\n        },\n        \"Title\": \"View from 15th Floor\",\n        \"Width\": 800\n    }\n}\n\n{\n    \"Image\": {\n        \"Animated\": false,\n        \"Height\": 600,\n        \"IDs\": [\n            116,\n            943,\n            234,\n            38793\n        ],\n        \"Title\": \"View from 15th Floor\",\n        \"Width\": 800\n    }\n}\n
    Parsing from a contiguous container

    The example below demonstrates the parse() function reading from a contiguous container.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // a JSON text given as std::vector\n    std::vector<std::uint8_t> text = {'[', '1', ',', '2', ',', '3', ']', '\\0'};\n\n    // parse and serialize JSON\n    json j_complete = json::parse(text);\n    std::cout << std::setw(4) << j_complete << \"\\n\\n\";\n}\n

    Output:

    [\n    1,\n    2,\n    3\n]\n
    Parsing from a non null-terminated string

    The example below demonstrates the parse() function reading from a string that is not null-terminated.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // a JSON text given as string that is not null-terminated\n    const char* ptr = \"[1,2,3]another value\";\n\n    // parse and serialize JSON\n    json j_complete = json::parse(ptr, ptr + 7);\n    std::cout << std::setw(4) << j_complete << \"\\n\\n\";\n}\n

    Output:

    [\n    1,\n    2,\n    3\n]\n
    Parsing from an iterator pair

    The example below demonstrates the parse() function reading from an iterator pair.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // a JSON text given an input with other values\n    std::vector<std::uint8_t> input = {'[', '1', ',', '2', ',', '3', ']', 'o', 't', 'h', 'e', 'r'};\n\n    // parse and serialize JSON\n    json j_complete = json::parse(input.begin(), input.begin() + 7);\n    std::cout << std::setw(4) << j_complete << \"\\n\\n\";\n}\n

    Output:

    [\n    1,\n    2,\n    3\n]\n
    Effect of allow_exceptions parameter

    The example below demonstrates the effect of the allow_exceptions parameter in the \u00b4parse()` function.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // an invalid JSON text\n    std::string text = R\"(\n    {\n        \"key\": \"value without closing quotes\n    }\n    )\";\n\n    // parse with exceptions\n    try\n    {\n        json j = json::parse(text);\n    }\n    catch (const json::parse_error& e)\n    {\n        std::cout << e.what() << std::endl;\n    }\n\n    // parse without exceptions\n    json j = json::parse(text, nullptr, false);\n\n    if (j.is_discarded())\n    {\n        std::cout << \"the input is invalid JSON\" << std::endl;\n    }\n    else\n    {\n        std::cout << \"the input is valid JSON: \" << j << std::endl;\n    }\n}\n

    Output:

    [json.exception.parse_error.101] parse error at line 4, column 0: syntax error while parsing value - invalid string: control character U+000A (LF) must be escaped to \\u000A or \\n; last read: '\"value without closing quotes<U+000A>'\nthe input is invalid JSON\n
    "},{"location":"api/basic_json/parse/#see-also","title":"See also","text":"
    • accept - check if the input is valid JSON
    • operator>> - deserialize from stream
    "},{"location":"api/basic_json/parse/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Overload for contiguous containers (1) added in version 2.0.3.
    • Ignoring comments via ignore_comments added in version 3.9.0.
    • Changed runtime assertion in case of FILE* null pointers to exception in version 3.11.4.

    Deprecation

    Overload (2) replaces calls to parse with a pair of iterators as their first parameter which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like parse({ptr, ptr+len}, ...); with parse(ptr, ptr+len, ...);.

    You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

    "},{"location":"api/basic_json/parse_error/","title":"nlohmann::basic_json::parse_error","text":"
    class parse_error : public exception;\n

    This exception is thrown by the library when a parse error occurs. Parse errors can occur during the deserialization of JSON text, BSON, CBOR, MessagePack, UBJSON, as well as when using JSON Patch.

    Member byte holds the byte index of the last read character in the input file (see note below).

    Exceptions have ids 1xx (see list of parse errors).

    classDiagram\n  direction LR\n\n    class std_exception [\"std::exception\"] {\n        <<interface>>\n    }\n\n    class json_exception [\"basic_json::exception\"] {\n        +const int id\n        +const char* what() const\n    }\n\n    class json_parse_error [\"basic_json::parse_error\"] {\n        +const std::size_t byte\n    }\n\n    class json_invalid_iterator [\"basic_json::invalid_iterator\"]\n    class json_type_error [\"basic_json::type_error\"]\n    class json_out_of_range [\"basic_json::out_of_range\"]\n    class json_other_error [\"basic_json::other_error\"]\n\n    std_exception <|-- json_exception\n    json_exception <|-- json_parse_error\n    json_exception <|-- json_invalid_iterator\n    json_exception <|-- json_type_error\n    json_exception <|-- json_out_of_range\n    json_exception <|-- json_other_error\n\n    style json_parse_error fill:#CCCCFF
    "},{"location":"api/basic_json/parse_error/#member-functions","title":"Member functions","text":"
    • what - returns explanatory string
    "},{"location":"api/basic_json/parse_error/#member-variables","title":"Member variables","text":"
    • id - the id of the exception
    • byte - byte index of the parse error
    "},{"location":"api/basic_json/parse_error/#notes","title":"Notes","text":"

    For an input with n bytes, 1 is the index of the first character and n+1 is the index of the terminating null byte or the end of file. This also holds true when reading a byte vector for binary formats.

    "},{"location":"api/basic_json/parse_error/#examples","title":"Examples","text":"Example

    The following code shows how a parse_error exception can be caught.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    try\n    {\n        // parsing input with a syntax error\n        json::parse(\"[1,2,3,]\");\n    }\n    catch (const json::parse_error& e)\n    {\n        // output exception information\n        std::cout << \"message: \" << e.what() << '\\n'\n                  << \"exception id: \" << e.id << '\\n'\n                  << \"byte position of error: \" << e.byte << std::endl;\n    }\n}\n

    Output:

    message: [json.exception.parse_error.101] parse error at line 1, column 8: syntax error while parsing value - unexpected ']'; expected '[', '{', or a literal\nexception id: 101\nbyte position of error: 8\n
    "},{"location":"api/basic_json/parse_error/#see-also","title":"See also","text":"
    • List of parse errors
    • invalid_iterator for exceptions indicating errors with iterators
    • type_error for exceptions indicating executing a member function with a wrong type
    • out_of_range for exceptions indicating access out of the defined range
    • other_error for exceptions indicating other library errors
    "},{"location":"api/basic_json/parse_error/#version-history","title":"Version history","text":"
    • Since version 3.0.0.
    "},{"location":"api/basic_json/parse_event_t/","title":"nlohmann::basic_json::parse_event_t","text":"
    enum class parse_event_t : std::uint8_t {\n    object_start,\n    object_end,\n    array_start,\n    array_end,\n    key,\n    value\n};\n

    The parser callback distinguishes the following events:

    • object_start: the parser read { and started to process a JSON object
    • key: the parser read a key of a value in an object
    • object_end: the parser read } and finished processing a JSON object
    • array_start: the parser read [ and started to process a JSON array
    • array_end: the parser read ] and finished processing a JSON array
    • value: the parser finished reading a JSON value
    "},{"location":"api/basic_json/parse_event_t/#examples","title":"Examples","text":""},{"location":"api/basic_json/parse_event_t/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/parser_callback_t/","title":"nlohmann::basic_json::parser_callback_t","text":"
    template<typename BasicJsonType>\nusing parser_callback_t =\n    std::function<bool(int depth, parse_event_t event, BasicJsonType& parsed)>;\n

    With a parser callback function, the result of parsing a JSON text can be influenced. When passed to parse, it is called on certain events (passed as parse_event_t via parameter event) with a set recursion depth depth and context JSON value parsed. The return value of the callback function is a boolean indicating whether the element that emitted the callback shall be kept or not.

    We distinguish six scenarios (determined by the event type) in which the callback function can be called. The following table describes the values of the parameters depth, event, and parsed.

    parameter event description parameter depth parameter parsed parse_event_t::object_start the parser read { and started to process a JSON object depth of the parent of the JSON object a JSON value with type discarded parse_event_t::key the parser read a key of a value in an object depth of the currently parsed JSON object a JSON string containing the key parse_event_t::object_end the parser read } and finished processing a JSON object depth of the parent of the JSON object the parsed JSON object parse_event_t::array_start the parser read [ and started to process a JSON array depth of the parent of the JSON array a JSON value with type discarded parse_event_t::array_end the parser read ] and finished processing a JSON array depth of the parent of the JSON array the parsed JSON array parse_event_t::value the parser finished reading a JSON value depth of the value the parsed JSON value

    Discarding a value (i.e., returning false) has different effects depending on the context in which function was called:

    • Discarded values in structured types are skipped. That is, the parser will behave as if the discarded value was never read.
    • In case a value outside a structured type is skipped, it is replaced with null. This case happens if the top-level element is skipped.
    "},{"location":"api/basic_json/parser_callback_t/#parameters","title":"Parameters","text":"depth (in) the depth of the recursion during parsing event (in) an event of type parse_event_t indicating the context in the callback function has been called parsed (in, out) the current intermediate parse result; note that writing to this value has no effect for parse_event_t::key events"},{"location":"api/basic_json/parser_callback_t/#return-value","title":"Return value","text":"

    Whether the JSON value which called the function during parsing should be kept (true) or not (false). In the latter case, it is either skipped completely or replaced by an empty discarded object.

    "},{"location":"api/basic_json/parser_callback_t/#examples","title":"Examples","text":"Example

    The example below demonstrates the parse() function with and without callback function.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, 38793]\n        }\n    }\n    )\";\n\n    // parse and serialize JSON\n    json j_complete = json::parse(text);\n    std::cout << std::setw(4) << j_complete << \"\\n\\n\";\n\n    // define parser callback\n    json::parser_callback_t cb = [](int depth, json::parse_event_t event, json & parsed)\n    {\n        // skip object elements with key \"Thumbnail\"\n        if (event == json::parse_event_t::key and parsed == json(\"Thumbnail\"))\n        {\n            return false;\n        }\n        else\n        {\n            return true;\n        }\n    };\n\n    // parse (with callback) and serialize JSON\n    json j_filtered = json::parse(text, cb);\n    std::cout << std::setw(4) << j_filtered << '\\n';\n}\n

    Output:

    {\n    \"Image\": {\n        \"Animated\": false,\n        \"Height\": 600,\n        \"IDs\": [\n            116,\n            943,\n            234,\n            38793\n        ],\n        \"Thumbnail\": {\n            \"Height\": 125,\n            \"Url\": \"http://www.example.com/image/481989943\",\n            \"Width\": 100\n        },\n        \"Title\": \"View from 15th Floor\",\n        \"Width\": 800\n    }\n}\n\n{\n    \"Image\": {\n        \"Animated\": false,\n        \"Height\": 600,\n        \"IDs\": [\n            116,\n            943,\n            234,\n            38793\n        ],\n        \"Title\": \"View from 15th Floor\",\n        \"Width\": 800\n    }\n}\n
    "},{"location":"api/basic_json/parser_callback_t/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/patch/","title":"nlohmann::basic_json::patch","text":"
    basic_json patch(const basic_json& json_patch) const;\n

    JSON Patch defines a JSON document structure for expressing a sequence of operations to apply to a JSON document. With this function, a JSON Patch is applied to the current JSON value by executing all operations from the patch.

    "},{"location":"api/basic_json/patch/#parameters","title":"Parameters","text":"json_patch (in) JSON patch document"},{"location":"api/basic_json/patch/#return-value","title":"Return value","text":"

    patched document

    "},{"location":"api/basic_json/patch/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/patch/#exceptions","title":"Exceptions","text":"
    • Throws parse_error.104 if the JSON patch does not consist of an array of objects.
    • Throws parse_error.105 if the JSON patch is malformed (e.g., mandatory attributes are missing); example: \"operation add must have member path\".
    • Throws out_of_range.401 if an array index is out of range.
    • Throws out_of_range.403 if a JSON pointer inside the patch could not be resolved successfully in the current JSON value; example: \"key baz not found\".
    • Throws out_of_range.405 if JSON pointer has no parent (\"add\", \"remove\", \"move\")
    • Throws out_of_range.501 if \"test\" operation was unsuccessful.
    "},{"location":"api/basic_json/patch/#complexity","title":"Complexity","text":"

    Linear in the size of the JSON value and the length of the JSON patch. As usually only a fraction of the JSON value is affected by the patch, the complexity can usually be neglected.

    "},{"location":"api/basic_json/patch/#notes","title":"Notes","text":"

    The application of a patch is atomic: Either all operations succeed and the patched document is returned or an exception is thrown. In any case, the original value is not changed: the patch is applied to a copy of the value.

    "},{"location":"api/basic_json/patch/#examples","title":"Examples","text":"Example

    The following code shows how a JSON patch is applied to a value.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // the original document\n    json doc = R\"(\n        {\n          \"baz\": \"qux\",\n          \"foo\": \"bar\"\n        }\n    )\"_json;\n\n    // the patch\n    json patch = R\"(\n        [\n          { \"op\": \"replace\", \"path\": \"/baz\", \"value\": \"boo\" },\n          { \"op\": \"add\", \"path\": \"/hello\", \"value\": [\"world\"] },\n          { \"op\": \"remove\", \"path\": \"/foo\"}\n        ]\n    )\"_json;\n\n    // apply the patch\n    json patched_doc = doc.patch(patch);\n\n    // output original and patched document\n    std::cout << std::setw(4) << doc << \"\\n\\n\"\n              << std::setw(4) << patched_doc << std::endl;\n}\n

    Output:

    {\n    \"baz\": \"qux\",\n    \"foo\": \"bar\"\n}\n\n{\n    \"baz\": \"boo\",\n    \"hello\": [\n        \"world\"\n    ]\n}\n
    "},{"location":"api/basic_json/patch/#see-also","title":"See also","text":"
    • RFC 6902 (JSON Patch)
    • RFC 6901 (JSON Pointer)
    • patch_inplace applies a JSON Patch without creating a copy of the document
    • merge_patch applies a JSON Merge Patch
    "},{"location":"api/basic_json/patch/#version-history","title":"Version history","text":"
    • Added in version 2.0.0.
    "},{"location":"api/basic_json/patch_inplace/","title":"nlohmann::basic_json::patch_inplace","text":"
    void patch_inplace(const basic_json& json_patch) const;\n

    JSON Patch defines a JSON document structure for expressing a sequence of operations to apply to a JSON document. With this function, a JSON Patch is applied to the current JSON value by executing all operations from the patch. This function applies a JSON patch in place and returns void.

    "},{"location":"api/basic_json/patch_inplace/#parameters","title":"Parameters","text":"json_patch (in) JSON patch document"},{"location":"api/basic_json/patch_inplace/#exception-safety","title":"Exception safety","text":"

    No guarantees, value may be corrupted by an unsuccessful patch operation.

    "},{"location":"api/basic_json/patch_inplace/#exceptions","title":"Exceptions","text":"
    • Throws parse_error.104 if the JSON patch does not consist of an array of objects.
    • Throws parse_error.105 if the JSON patch is malformed (e.g., mandatory attributes are missing); example: \"operation add must have member path\".
    • Throws out_of_range.401 if an array index is out of range.
    • Throws out_of_range.403 if a JSON pointer inside the patch could not be resolved successfully in the current JSON value; example: \"key baz not found\".
    • Throws out_of_range.405 if JSON pointer has no parent (\"add\", \"remove\", \"move\")
    • Throws out_of_range.501 if \"test\" operation was unsuccessful.
    "},{"location":"api/basic_json/patch_inplace/#complexity","title":"Complexity","text":"

    Linear in the size of the JSON value and the length of the JSON patch. As usually only a fraction of the JSON value is affected by the patch, the complexity can usually be neglected.

    "},{"location":"api/basic_json/patch_inplace/#notes","title":"Notes","text":"

    Unlike patch, patch_inplace applies the operation \"in place\" and no copy of the JSON value is created. That makes it faster for large documents by avoiding the copy. However, the JSON value might be corrupted if the function throws an exception.

    "},{"location":"api/basic_json/patch_inplace/#examples","title":"Examples","text":"Example

    The following code shows how a JSON patch is applied to a value.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // the original document\n    json doc = R\"(\n        {\n          \"baz\": \"qux\",\n          \"foo\": \"bar\"\n        }\n    )\"_json;\n\n    // the patch\n    json patch = R\"(\n        [\n          { \"op\": \"replace\", \"path\": \"/baz\", \"value\": \"boo\" },\n          { \"op\": \"add\", \"path\": \"/hello\", \"value\": [\"world\"] },\n          { \"op\": \"remove\", \"path\": \"/foo\"}\n        ]\n    )\"_json;\n\n    // output original document\n    std::cout << \"Before\\n\" << std::setw(4) << doc << std::endl;\n\n    // apply the patch\n    doc.patch_inplace(patch);\n\n    // output patched document\n    std::cout << \"\\nAfter\\n\" << std::setw(4) << doc << std::endl;\n}\n

    Output:

    Before\n{\n    \"baz\": \"qux\",\n    \"foo\": \"bar\"\n}\n\nAfter\n{\n    \"baz\": \"boo\",\n    \"hello\": [\n        \"world\"\n    ]\n}\n
    "},{"location":"api/basic_json/patch_inplace/#see-also","title":"See also","text":"
    • RFC 6902 (JSON Patch)
    • RFC 6901 (JSON Pointer)
    • patch applies a JSON Merge Patch
    • merge_patch applies a JSON Merge Patch
    "},{"location":"api/basic_json/patch_inplace/#version-history","title":"Version history","text":"
    • Added in version 3.11.0.
    "},{"location":"api/basic_json/push_back/","title":"nlohmann::basic_json::push_back","text":"
    // (1)\nvoid push_back(basic_json&& val);\nvoid push_back(const basic_json& val);\n\n// (2)\nvoid push_back(const typename object_t::value_type& val);\n\n// (3)\nvoid push_back(initializer_list_t init);\n
    1. Appends the given element val to the end of the JSON array. If the function is called on a JSON null value, an empty array is created before appending val.

    2. Inserts the given element val to the JSON object. If the function is called on a JSON null value, an empty object is created before inserting val.

    3. This function allows using push_back with an initializer list. In case

      1. the current value is an object,
      2. the initializer list init contains only two elements, and
      3. the first element of init is a string,

      init is converted into an object element and added using push_back(const typename object_t::value_type&). Otherwise, init is converted to a JSON value and added using push_back(basic_json&&).

    "},{"location":"api/basic_json/push_back/#iterator-invalidation","title":"Iterator invalidation","text":"

    For all cases where an element is added to an array, a reallocation can happen, in which case all iterators (including the end() iterator) and all references to the elements are invalidated. Otherwise, only the end() iterator is invalidated.

    For ordered_json, also adding an element to an object can yield a reallocation which again invalidates all iterators and all references.

    "},{"location":"api/basic_json/push_back/#parameters","title":"Parameters","text":"val (in) the value to add to the JSON array/object init (in) an initializer list"},{"location":"api/basic_json/push_back/#exceptions","title":"Exceptions","text":"

    All functions can throw the following exception: - Throws type_error.308 when called on a type other than JSON array or null; example: \"cannot use push_back() with number\"

    "},{"location":"api/basic_json/push_back/#complexity","title":"Complexity","text":"
    1. Amortized constant.
    2. Logarithmic in the size of the container, O(log(size())).
    3. Linear in the size of the initializer list init.
    "},{"location":"api/basic_json/push_back/#notes","title":"Notes","text":"

    (3) This function is required to resolve an ambiguous overload error, because pairs like {\"key\", \"value\"} can be both interpreted as object_t::value_type or std::initializer_list<basic_json>, see #235 for more information.

    "},{"location":"api/basic_json/push_back/#examples","title":"Examples","text":"Example: (1) add element to array

    The example shows how push_back() and += can be used to add elements to a JSON array. Note how the null value was silently converted to a JSON array.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json array = {1, 2, 3, 4, 5};\n    json null;\n\n    // print values\n    std::cout << array << '\\n';\n    std::cout << null << '\\n';\n\n    // add values\n    array.push_back(6);\n    array += 7;\n    null += \"first\";\n    null += \"second\";\n\n    // print values\n    std::cout << array << '\\n';\n    std::cout << null << '\\n';\n}\n

    Output:

    [1,2,3,4,5]\nnull\n[1,2,3,4,5,6,7]\n[\"first\",\"second\"]\n
    Example: (2) add element to object

    The example shows how push_back() and += can be used to add elements to a JSON object. Note how the null value was silently converted to a JSON object.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json object = {{\"one\", 1}, {\"two\", 2}};\n    json null;\n\n    // print values\n    std::cout << object << '\\n';\n    std::cout << null << '\\n';\n\n    // add values\n    object.push_back(json::object_t::value_type(\"three\", 3));\n    object += json::object_t::value_type(\"four\", 4);\n    null += json::object_t::value_type(\"A\", \"a\");\n    null += json::object_t::value_type(\"B\", \"b\");\n\n    // print values\n    std::cout << object << '\\n';\n    std::cout << null << '\\n';\n}\n

    Output:

    {\"one\":1,\"two\":2}\nnull\n{\"four\":4,\"one\":1,\"three\":3,\"two\":2}\n{\"A\":\"a\",\"B\":\"b\"}\n
    Example: (3) add to object from initializer list

    The example shows how initializer lists are treated as objects when possible.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json object = {{\"one\", 1}, {\"two\", 2}};\n    json null;\n\n    // print values\n    std::cout << object << '\\n';\n    std::cout << null << '\\n';\n\n    // add values:\n    object.push_back({\"three\", 3});  // object is extended\n    object += {\"four\", 4};           // object is extended\n    null.push_back({\"five\", 5});     // null is converted to array\n\n    // print values\n    std::cout << object << '\\n';\n    std::cout << null << '\\n';\n\n    // would throw:\n    //object.push_back({1, 2, 3});\n}\n

    Output:

    {\"one\":1,\"two\":2}\nnull\n{\"four\":4,\"one\":1,\"three\":3,\"two\":2}\n[[\"five\",5]]\n
    "},{"location":"api/basic_json/push_back/#see-also","title":"See also","text":"
    • emplace_back add a value to an array
    • operator+= add a value to an array/object
    "},{"location":"api/basic_json/push_back/#version-history","title":"Version history","text":"
    1. Since version 1.0.0.
    2. Since version 1.0.0.
    3. Since version 2.0.0.
    "},{"location":"api/basic_json/rbegin/","title":"nlohmann::basic_json::rbegin","text":"
    reverse_iterator rbegin() noexcept;\nconst_reverse_iterator rbegin() const noexcept;\n

    Returns an iterator to the reverse-beginning; that is, the last element.

    "},{"location":"api/basic_json/rbegin/#return-value","title":"Return value","text":"

    reverse iterator to the first element

    "},{"location":"api/basic_json/rbegin/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/rbegin/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/rbegin/#examples","title":"Examples","text":"Example

    The following code shows an example for rbegin().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create an array value\n    json array = {1, 2, 3, 4, 5};\n\n    // get an iterator to the reverse-beginning\n    json::reverse_iterator it = array.rbegin();\n\n    // serialize the element that the iterator points to\n    std::cout << *it << '\\n';\n}\n

    Output:

    5\n
    "},{"location":"api/basic_json/rbegin/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/rend/","title":"nlohmann::basic_json::rend","text":"
    reverse_iterator rend() noexcept;\nconst_reverse_iterator rend() const noexcept;\n

    Returns an iterator to the reverse-end; that is, one before the first element. This element acts as a placeholder, attempting to access it results in undefined behavior.

    "},{"location":"api/basic_json/rend/#return-value","title":"Return value","text":"

    reverse iterator to the element following the last element

    "},{"location":"api/basic_json/rend/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/rend/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/rend/#examples","title":"Examples","text":"Example

    The following code shows an example for eend().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create an array value\n    json array = {1, 2, 3, 4, 5};\n\n    // get an iterator to the reverse-end\n    json::reverse_iterator it = array.rend();\n\n    // increment the iterator to point to the first element\n    --it;\n\n    // serialize the element that the iterator points to\n    std::cout << *it << '\\n';\n}\n

    Output:

    1\n
    "},{"location":"api/basic_json/rend/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/sax_parse/","title":"nlohmann::basic_json::sax_parse","text":"
    // (1)\ntemplate <typename InputType, typename SAX>\nstatic bool sax_parse(InputType&& i,\n                      SAX* sax,\n                      input_format_t format = input_format_t::json,\n                      const bool strict = true,\n                      const bool ignore_comments = false);\n\n// (2)\ntemplate<class IteratorType, class SAX>\nstatic bool sax_parse(IteratorType first, IteratorType last,\n                      SAX* sax,\n                      input_format_t format = input_format_t::json,\n                      const bool strict = true,\n                      const bool ignore_comments = false);\n

    Read from input and generate SAX events

    1. Read from a compatible input.
    2. Read from a pair of character iterators

      The value_type of the iterator must be an integral type with size of 1, 2 or 4 bytes, which will be interpreted respectively as UTF-8, UTF-16 and UTF-32.

    The SAX event lister must follow the interface of json_sax.

    "},{"location":"api/basic_json/sax_parse/#template-parameters","title":"Template parameters","text":"InputType

    A compatible input, for instance:

    • an std::istream object
    • a FILE pointer
    • a C-style array of characters
    • a pointer to a null-terminated string of single byte characters
    • an object obj for which begin(obj) and end(obj) produces a valid pair of iterators.
    IteratorType Description SAX Description"},{"location":"api/basic_json/sax_parse/#parameters","title":"Parameters","text":"i (in) Input to parse from. sax (in) SAX event listener format (in) the format to parse (JSON, CBOR, MessagePack, or UBJSON) (optional, input_format_t::json by default), see input_format_t for more information strict (in) whether the input has to be consumed completely (optional, true by default) ignore_comments (in) whether comments should be ignored and treated like whitespace (true) or yield a parse error (false); (optional, false by default) first (in) iterator to start of character range last (in) iterator to end of character range"},{"location":"api/basic_json/sax_parse/#return-value","title":"Return value","text":"

    return value of the last processed SAX event

    "},{"location":"api/basic_json/sax_parse/#exception-safety","title":"Exception safety","text":""},{"location":"api/basic_json/sax_parse/#complexity","title":"Complexity","text":"

    Linear in the length of the input. The parser is a predictive LL(1) parser. The complexity can be higher if the SAX consumer sax has a super-linear complexity.

    "},{"location":"api/basic_json/sax_parse/#notes","title":"Notes","text":"

    A UTF-8 byte order mark is silently ignored.

    "},{"location":"api/basic_json/sax_parse/#examples","title":"Examples","text":"Example

    The example below demonstrates the sax_parse() function reading from string and processing the events with a user-defined SAX event consumer.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

    Output:

    start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
    "},{"location":"api/basic_json/sax_parse/#version-history","title":"Version history","text":"
    • Added in version 3.2.0.
    • Ignoring comments via ignore_comments added in version 3.9.0.

    Deprecation

    Overload (2) replaces calls to sax_parse with a pair of iterators as their first parameter which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like sax_parse({ptr, ptr+len}); with sax_parse(ptr, ptr+len);.

    "},{"location":"api/basic_json/size/","title":"nlohmann::basic_json::size","text":"
    size_type size() const noexcept;\n

    Returns the number of elements in a JSON value.

    "},{"location":"api/basic_json/size/#return-value","title":"Return value","text":"

    The return value depends on the different types and is defined as follows:

    Value type return value null 0 boolean 1 string 1 number 1 binary 1 object result of function object_t::size() array result of function array_t::size()"},{"location":"api/basic_json/size/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/basic_json/size/#complexity","title":"Complexity","text":"

    Constant, as long as array_t and object_t satisfy the Container concept; that is, their size() functions have constant complexity.

    "},{"location":"api/basic_json/size/#notes","title":"Notes","text":"

    This function does not return the length of a string stored as JSON value -- it returns the number of elements in the JSON value which is 1 in the case of a string.

    "},{"location":"api/basic_json/size/#examples","title":"Examples","text":"Example

    The following code calls size() on the different value types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_object_empty(json::value_t::object);\n    json j_array = {1, 2, 4, 8, 16};\n    json j_array_empty(json::value_t::array);\n    json j_string = \"Hello, world\";\n\n    // call size()\n    std::cout << j_null.size() << '\\n';\n    std::cout << j_boolean.size() << '\\n';\n    std::cout << j_number_integer.size() << '\\n';\n    std::cout << j_number_float.size() << '\\n';\n    std::cout << j_object.size() << '\\n';\n    std::cout << j_object_empty.size() << '\\n';\n    std::cout << j_array.size() << '\\n';\n    std::cout << j_array_empty.size() << '\\n';\n    std::cout << j_string.size() << '\\n';\n}\n

    Output:

    0\n1\n1\n1\n2\n0\n5\n0\n1\n
    "},{"location":"api/basic_json/size/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Extended to return 1 for binary types in version 3.8.0.
    "},{"location":"api/basic_json/start_pos/","title":"nlohmann::basic_json::start_pos","text":"
    #if JSON_DIAGNOSTIC_POSITIONS\nconstexpr std::size_t start_pos() const noexcept;\n#endif\n

    Returns the position of the first character in the JSON string from which the value was parsed from.

    JSON type return value object position of the opening { array position of the opening [ string position of the opening \" number position of the first character boolean position of t for true and f for false null position of n"},{"location":"api/basic_json/start_pos/#return-value","title":"Return value","text":"

    the position of the first character of the value in the parsed JSON string, if the value was created by the parse function, or std::string::npos if the value was constructed otherwise

    "},{"location":"api/basic_json/start_pos/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/start_pos/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/start_pos/#notes","title":"Notes","text":"

    Note

    The function is only available if macro JSON_DIAGNOSTIC_POSITIONS has been defined to 1 before including the library header.

    Invalidation

    The returned positions are only valid as long as the JSON value is not changed. The positions are not updated when the JSON value is changed.

    "},{"location":"api/basic_json/start_pos/#examples","title":"Examples","text":"Example
    #include <iostream>\n\n#define JSON_DIAGNOSTIC_POSITIONS 1\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::string json_string = R\"(\n    {\n        \"address\": {\n            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\n    }\n    )\";\n    json j = json::parse(json_string);\n\n    std::cout << \"Root diagnostic positions: \\n\";\n    std::cout << \"\\tstart_pos: \" << j.start_pos() << '\\n';\n    std::cout << \"\\tend_pos:\" << j.end_pos() << \"\\n\";\n    std::cout << \"Original string: \\n\";\n    std::cout << \"{\\n        \\\"address\\\": {\\n            \\\"street\\\": \\\"Fake Street\\\",\\n            \\\"housenumber\\\": 1\\n        }\\n    }\" << \"\\n\";\n    std::cout << \"Parsed string: \\n\";\n    std::cout << json_string.substr(j.start_pos(), j.end_pos() - j.start_pos()) << \"\\n\\n\";\n\n    std::cout << \"address diagnostic positions: \\n\";\n    std::cout << \"\\tstart_pos:\" << j[\"address\"].start_pos() << '\\n';\n    std::cout << \"\\tend_pos:\" << j[\"address\"].end_pos() << \"\\n\\n\";\n    std::cout << \"Original string: \\n\";\n    std::cout << \"{            \\\"street\\\": \\\"Fake Street\\\",\\n            \\\"housenumber\\\": 1\\n        }\" << \"\\n\";\n    std::cout << \"Parsed string: \\n\";\n    std::cout << json_string.substr(j[\"address\"].start_pos(), j[\"address\"].end_pos() - j[\"address\"].start_pos()) << \"\\n\\n\";\n\n    std::cout << \"street diagnostic positions: \\n\";\n    std::cout << \"\\tstart_pos:\" << j[\"address\"][\"street\"].start_pos() << '\\n';\n    std::cout << \"\\tend_pos:\" << j[\"address\"][\"street\"].end_pos() << \"\\n\\n\";\n    std::cout << \"Original string: \\n\";\n    std::cout << \"\\\"Fake Street\\\"\" << \"\\n\";\n    std::cout << \"Parsed string: \\n\";\n    std::cout << json_string.substr(j[\"address\"][\"street\"].start_pos(), j[\"address\"][\"street\"].end_pos() - j[\"address\"][\"street\"].start_pos()) << \"\\n\\n\";\n\n    std::cout << \"housenumber diagnostic positions: \\n\";\n    std::cout << \"\\tstart_pos:\" << j[\"address\"][\"housenumber\"].start_pos() << '\\n';\n    std::cout << \"\\tend_pos:\" << j[\"address\"][\"housenumber\"].end_pos() << \"\\n\\n\";\n    std::cout << \"Original string: \\n\";\n    std::cout << \"1\" << \"\\n\";\n    std::cout << \"Parsed string: \\n\";\n    std::cout << json_string.substr(j[\"address\"][\"housenumber\"].start_pos(), j[\"address\"][\"housenumber\"].end_pos() - j[\"address\"][\"housenumber\"].start_pos()) << \"\\n\\n\";\n}\n

    Output:

    Root diagnostic positions: \n    start_pos: 5\n    end_pos:109\nOriginal string: \n{\n        \"address\": {\n            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\n    }\nParsed string: \n{\n        \"address\": {\n            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\n    }\n\naddress diagnostic positions: \n    start_pos:26\n    end_pos:103\n\nOriginal string: \n{            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\nParsed string: \n{\n            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\n\nstreet diagnostic positions: \n    start_pos:50\n    end_pos:63\n\nOriginal string: \n\"Fake Street\"\nParsed string: \n\"Fake Street\"\n\nhousenumber diagnostic positions: \n    start_pos:92\n    end_pos:93\n\nOriginal string: \n1\nParsed string: \n1\n

    The output shows the start/end positions of all the objects and fields in the JSON string.

    "},{"location":"api/basic_json/start_pos/#see-also","title":"See also","text":"
    • end_pos to access the end position
    • JSON_DIAGNOSTIC_POSITIONS for an overview of the diagnostic positions
    "},{"location":"api/basic_json/start_pos/#version-history","title":"Version history","text":"
    • Added in version 3.12.0.
    "},{"location":"api/basic_json/std_hash/","title":"std::hash<nlohmann::basic_json>","text":"
    namespace std {\n    struct hash<nlohmann::basic_json>;\n}\n

    Return a hash value for a JSON object. The hash function tries to rely on std::hash where possible. Furthermore, the type of the JSON value is taken into account to have different hash values for null, 0, 0U, and false, etc.

    "},{"location":"api/basic_json/std_hash/#examples","title":"Examples","text":"Example

    The example shows how to calculate hash values for different JSON values.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    std::cout << \"hash(null) = \" << std::hash<json> {}(json(nullptr)) << '\\n'\n              << \"hash(false) = \" << std::hash<json> {}(json(false)) << '\\n'\n              << \"hash(0) = \" << std::hash<json> {}(json(0)) << '\\n'\n              << \"hash(0U) = \" << std::hash<json> {}(json(0U)) << '\\n'\n              << \"hash(\\\"\\\") = \" << std::hash<json> {}(json(\"\")) << '\\n'\n              << \"hash({}) = \" << std::hash<json> {}(json::object()) << '\\n'\n              << \"hash([]) = \" << std::hash<json> {}(json::array()) << '\\n'\n              << \"hash({\\\"hello\\\": \\\"world\\\"}) = \" << std::hash<json> {}(\"{\\\"hello\\\": \\\"world\\\"}\"_json)\n              << std::endl;\n}\n

    Output:

    hash(null) = 2654435769\nhash(false) = 2654436030\nhash(0) = 2654436095\nhash(0U) = 2654436156\nhash(\"\") = 6142509191626859748\nhash({}) = 2654435832\nhash([]) = 2654435899\nhash({\"hello\": \"world\"}) = 4469488738203676328\n

    Note the output is platform-dependent.

    "},{"location":"api/basic_json/std_hash/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Extended for arbitrary basic_json types in version 3.10.5.
    "},{"location":"api/basic_json/std_swap/","title":"std::swap<basic_json>","text":"
    namespace std {\n    void swap(nlohmann::basic_json& j1, nlohmann::basic_json& j2);\n}\n

    Exchanges the values of two JSON objects.

    "},{"location":"api/basic_json/std_swap/#parameters","title":"Parameters","text":"j1 (in, out) value to be replaced by j2 j2 (in, out) value to be replaced by j1"},{"location":"api/basic_json/std_swap/#possible-implementation","title":"Possible implementation","text":"
    void swap(nlohmann::basic_json& j1, nlohmann::basic_json& j2)\n{\n    j1.swap(j2);\n}\n
    "},{"location":"api/basic_json/std_swap/#examples","title":"Examples","text":"Example

    The following code shows how two values are swapped with std::swap.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j1 = {{\"one\", 1}, {\"two\", 2}};\n    json j2 = {1, 2, 4, 8, 16};\n\n    std::cout << \"j1 = \" << j1 << \" | j2 = \" << j2 << '\\n';\n\n    // swap values\n    std::swap(j1, j2);\n\n    std::cout << \"j1 = \" << j1 << \" | j2 = \" << j2 << std::endl;\n}\n

    Output:

    j1 = {\"one\":1,\"two\":2} | j2 = [1,2,4,8,16]\nj1 = [1,2,4,8,16] | j2 = {\"one\":1,\"two\":2}\n
    "},{"location":"api/basic_json/std_swap/#see-also","title":"See also","text":"
    • swap
    "},{"location":"api/basic_json/std_swap/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Extended for arbitrary basic_json types in version 3.10.5.
    "},{"location":"api/basic_json/string_t/","title":"nlohmann::basic_json::string_t","text":"
    using string_t = StringType;\n

    The type used to store JSON strings.

    RFC 8259 describes JSON strings as follows:

    A string is a sequence of zero or more Unicode characters.

    To store objects in C++, a type is defined by the template parameter described below. Unicode values are split by the JSON class into byte-sized characters during deserialization.

    "},{"location":"api/basic_json/string_t/#template-parameters","title":"Template parameters","text":"StringType the container to store strings (e.g., std::string). Note this container is used for keys/names in objects, see object_t."},{"location":"api/basic_json/string_t/#notes","title":"Notes","text":""},{"location":"api/basic_json/string_t/#default-type","title":"Default type","text":"

    With the default values for StringType (std::string), the default value for string_t is std::string.

    "},{"location":"api/basic_json/string_t/#encoding","title":"Encoding","text":"

    Strings are stored in UTF-8 encoding. Therefore, functions like std::string::size() or std::string::length() return the number of bytes in the string rather than the number of characters or glyphs.

    "},{"location":"api/basic_json/string_t/#string-comparison","title":"String comparison","text":"

    RFC 8259 states:

    Software implementations are typically required to test names of object members for equality. Implementations that transform the textual representation into sequences of Unicode code units and then perform the comparison numerically, code unit by code unit, are interoperable in the sense that implementations will agree in all cases on equality or inequality of two strings. For example, implementations that compare strings with escaped characters unconverted may incorrectly find that \"a\\\\b\" and \"a\\u005Cb\" are not equal.

    This implementation is interoperable as it does compare strings code unit by code unit.

    "},{"location":"api/basic_json/string_t/#storage","title":"Storage","text":"

    String values are stored as pointers in a basic_json type. That is, for any access to string values, a pointer of type string_t* must be dereferenced.

    "},{"location":"api/basic_json/string_t/#examples","title":"Examples","text":"Example

    The following code shows that string_t is by default, a typedef to std::string.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::boolalpha << std::is_same<std::string, json::string_t>::value << std::endl;\n}\n

    Output:

    true\n
    "},{"location":"api/basic_json/string_t/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/swap/","title":"nlohmann::basic_json::swap","text":"
    // (1)\nvoid swap(reference other) noexcept;\n\n// (2)\nvoid swap(reference left, reference right) noexcept;\n\n// (3)\nvoid swap(array_t& other);\n\n// (4)\nvoid swap(object_t& other);\n\n// (5)\nvoid swap(string_t& other);\n\n// (6)\nvoid swap(binary_t& other);\n\n// (7)\nvoid swap(typename binary_t::container_type& other);\n
    1. Exchanges the contents of the JSON value with those of other. Does not invoke any move, copy, or swap operations on individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated.
    2. Exchanges the contents of the JSON value from left with those of right. Does not invoke any move, copy, or swap operations on individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated. Implemented as a friend function callable via ADL.
    3. Exchanges the contents of a JSON array with those of other. Does not invoke any move, copy, or swap operations on individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated.
    4. Exchanges the contents of a JSON object with those of other. Does not invoke any move, copy, or swap operations on individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated.
    5. Exchanges the contents of a JSON string with those of other. Does not invoke any move, copy, or swap operations on individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated.
    6. Exchanges the contents of a binary value with those of other. Does not invoke any move, copy, or swap operations on individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated.
    7. Exchanges the contents of a binary value with those of other. Does not invoke any move, copy, or swap operations on individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated. Unlike version (6), no binary subtype is involved.
    "},{"location":"api/basic_json/swap/#parameters","title":"Parameters","text":"other (in, out) value to exchange the contents with left (in, out) value to exchange the contents with right (in, out) value to exchange the contents with"},{"location":"api/basic_json/swap/#exceptions","title":"Exceptions","text":"
    1. No-throw guarantee: this function never throws exceptions.
    2. No-throw guarantee: this function never throws exceptions.
    3. Throws type_error.310 if called on JSON values other than arrays; example: \"cannot use swap() with boolean\"
    4. Throws type_error.310 if called on JSON values other than objects; example: \"cannot use swap() with boolean\"
    5. Throws type_error.310 if called on JSON values other than strings; example: \"cannot use swap() with boolean\"
    6. Throws type_error.310 if called on JSON values other than binaries; example: \"cannot use swap() with boolean\"
    7. Throws type_error.310 if called on JSON values other than binaries; example: \"cannot use swap() with boolean\"
    "},{"location":"api/basic_json/swap/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/swap/#examples","title":"Examples","text":"Example: Swap JSON value (1, 2)

    The example below shows how JSON values can be swapped with swap().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create two JSON values\n    json j1 = {1, 2, 3, 4, 5};\n    json j2 = {{\"pi\", 3.141592653589793}, {\"e\", 2.718281828459045}};\n\n    // swap the values\n    j1.swap(j2);\n\n    // output the values\n    std::cout << \"j1 = \" << j1 << '\\n';\n    std::cout << \"j2 = \" << j2 << '\\n';\n}\n

    Output:

    j1 = {\"e\":2.718281828459045,\"pi\":3.141592653589793}\nj2 = [1,2,3,4,5]\n
    Example: Swap array (3)

    The example below shows how arrays can be swapped with swap().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON value\n    json value = {{\"array\", {1, 2, 3, 4}}};\n\n    // create an array_t\n    json::array_t array = {\"Snap\", \"Crackle\", \"Pop\"};\n\n    // swap the array stored in the JSON value\n    value[\"array\"].swap(array);\n\n    // output the values\n    std::cout << \"value = \" << value << '\\n';\n    std::cout << \"array = \" << array << '\\n';\n}\n

    Output:

    value = {\"array\":[\"Snap\",\"Crackle\",\"Pop\"]}\narray = [1,2,3,4]\n
    Example: Swap object (4)

    The example below shows how objects can be swapped with swap().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON value\n    json value = { {\"translation\", {{\"one\", \"eins\"}, {\"two\", \"zwei\"}}} };\n\n    // create an object_t\n    json::object_t object = {{\"cow\", \"Kuh\"}, {\"dog\", \"Hund\"}};\n\n    // swap the object stored in the JSON value\n    value[\"translation\"].swap(object);\n\n    // output the values\n    std::cout << \"value = \" << value << '\\n';\n    std::cout << \"object = \" << object << '\\n';\n}\n

    Output:

    value = {\"translation\":{\"cow\":\"Kuh\",\"dog\":\"Hund\"}}\nobject = {\"one\":\"eins\",\"two\":\"zwei\"}\n
    Example: Swap string (5)

    The example below shows how strings can be swapped with swap().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON value\n    json value = { \"the good\", \"the bad\", \"the ugly\" };\n\n    // create string_t\n    json::string_t string = \"the fast\";\n\n    // swap the object stored in the JSON value\n    value[1].swap(string);\n\n    // output the values\n    std::cout << \"value = \" << value << '\\n';\n    std::cout << \"string = \" << string << '\\n';\n}\n

    Output:

    value = [\"the good\",\"the fast\",\"the ugly\"]\nstring = the bad\n
    Example: Swap string (6)

    The example below shows how binary values can be swapped with swap().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a binary value\n    json value = json::binary({1, 2, 3});\n\n    // create a binary_t\n    json::binary_t binary = {{4, 5, 6}};\n\n    // swap the object stored in the JSON value\n    value.swap(binary);\n\n    // output the values\n    std::cout << \"value = \" << value << '\\n';\n    std::cout << \"binary = \" << json(binary) << '\\n';\n}\n

    Output:

    value = {\"bytes\":[4,5,6],\"subtype\":null}\nbinary = {\"bytes\":[1,2,3],\"subtype\":null}\n
    "},{"location":"api/basic_json/swap/#see-also","title":"See also","text":"
    • std::swap<basic_json>
    "},{"location":"api/basic_json/swap/#version-history","title":"Version history","text":"
    1. Since version 1.0.0.
    2. Since version 1.0.0.
    3. Since version 1.0.0.
    4. Since version 1.0.0.
    5. Since version 1.0.0.
    6. Since version 3.8.0.
    7. Since version 3.8.0.
    "},{"location":"api/basic_json/to_bjdata/","title":"nlohmann::basic_json::to_bjdata","text":"
    // (1)\nstatic std::vector<std::uint8_t> to_bjdata(const basic_json& j,\n                                           const bool use_size = false,\n                                           const bool use_type = false,\n                                           const bjdata_version_t version = bjdata_version_t::draft2);\n\n// (2)\nstatic void to_bjdata(const basic_json& j, detail::output_adapter<std::uint8_t> o,\n                      const bool use_size = false, const bool use_type = false,\n                      const bjdata_version_t version = bjdata_version_t::draft2);\nstatic void to_bjdata(const basic_json& j, detail::output_adapter<char> o,\n                      const bool use_size = false, const bool use_type = false,\n                      const bjdata_version_t version = bjdata_version_t::draft2);\n

    Serializes a given JSON value j to a byte vector using the BJData (Binary JData) serialization format. BJData aims to be more compact than JSON itself, yet more efficient to parse.

    1. Returns a byte vector containing the BJData serialization.
    2. Writes the BJData serialization to an output adapter.

    The exact mapping and its limitations is described on a dedicated page.

    "},{"location":"api/basic_json/to_bjdata/#parameters","title":"Parameters","text":"j (in) JSON value to serialize o (in) output adapter to write serialization to use_size (in) whether to add size annotations to container types; optional, false by default. use_type (in) whether to add type annotations to container types (must be combined with use_size = true); optional, false by default. version (in) which version of BJData to use (see note on \"Binary values\" on BJData); optional, bjdata_version_t::draft2 by default."},{"location":"api/basic_json/to_bjdata/#return-value","title":"Return value","text":"
    1. BJData serialization as byte vector
    2. (none)
    "},{"location":"api/basic_json/to_bjdata/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/to_bjdata/#complexity","title":"Complexity","text":"

    Linear in the size of the JSON value j.

    "},{"location":"api/basic_json/to_bjdata/#examples","title":"Examples","text":"Example

    The example shows the serialization of a JSON value to a byte vector in BJData format.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\n// function to print BJData's diagnostic format\nvoid print_byte(uint8_t byte)\n{\n    if (32 < byte and byte < 128)\n    {\n        std::cout << (char)byte;\n    }\n    else\n    {\n        std::cout << (int)byte;\n    }\n}\n\nint main()\n{\n    // create a JSON value\n    json j = R\"({\"compact\": true, \"schema\": false})\"_json;\n\n    // serialize it to BJData\n    std::vector<std::uint8_t> v = json::to_bjdata(j);\n\n    // print the vector content\n    for (auto& byte : v)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n\n    // create an array of numbers\n    json array = {1, 2, 3, 4, 5, 6, 7, 8};\n\n    // serialize it to BJData using default representation\n    std::vector<std::uint8_t> v_array = json::to_bjdata(array);\n    // serialize it to BJData using size optimization\n    std::vector<std::uint8_t> v_array_size = json::to_bjdata(array, true);\n    // serialize it to BJData using type optimization\n    std::vector<std::uint8_t> v_array_size_and_type = json::to_bjdata(array, true, true);\n\n    // print the vector contents\n    for (auto& byte : v_array)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n\n    for (auto& byte : v_array_size)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n\n    for (auto& byte : v_array_size_and_type)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n}\n

    Output:

    {i7compactTi6schemaF}\n[i1i2i3i4i5i6i7i8]\n[#i8i1i2i3i4i5i6i7i8\n[$i#i812345678\n
    "},{"location":"api/basic_json/to_bjdata/#version-history","title":"Version history","text":"
    • Added in version 3.11.0.
    • BJData version parameter (for draft3 binary encoding) added in version 3.12.0.
    "},{"location":"api/basic_json/to_bson/","title":"nlohmann::basic_json::to_bson","text":"
    // (1)\nstatic std::vector<std::uint8_t> to_bson(const basic_json& j);\n\n// (2)\nstatic void to_bson(const basic_json& j, detail::output_adapter<std::uint8_t> o);\nstatic void to_bson(const basic_json& j, detail::output_adapter<char> o);\n

    BSON (Binary JSON) is a binary format in which zero or more ordered key/value pairs are stored as a single entity (a so-called document).

    1. Returns a byte vector containing the BSON serialization.
    2. Writes the BSON serialization to an output adapter.

    The exact mapping and its limitations is described on a dedicated page.

    "},{"location":"api/basic_json/to_bson/#parameters","title":"Parameters","text":"j (in) JSON value to serialize o (in) output adapter to write serialization to"},{"location":"api/basic_json/to_bson/#return-value","title":"Return value","text":"
    1. BSON serialization as byte vector
    2. (none)
    "},{"location":"api/basic_json/to_bson/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/to_bson/#complexity","title":"Complexity","text":"

    Linear in the size of the JSON value j.

    "},{"location":"api/basic_json/to_bson/#examples","title":"Examples","text":"Example

    The example shows the serialization of a JSON value to a byte vector in BSON format.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create a JSON value\n    json j = R\"({\"compact\": true, \"schema\": 0})\"_json;\n\n    // serialize it to BSON\n    std::vector<std::uint8_t> v = json::to_bson(j);\n\n    // print the vector content\n    for (auto& byte : v)\n    {\n        std::cout << \"0x\" << std::hex << std::setw(2) << std::setfill('0') << (int)byte << \" \";\n    }\n    std::cout << std::endl;\n}\n

    Output:

    0x1b 0x00 0x00 0x00 0x08 0x63 0x6f 0x6d 0x70 0x61 0x63 0x74 0x00 0x01 0x10 0x73 0x63 0x68 0x65 0x6d 0x61 0x00 0x00 0x00 0x00 0x00 0x00 \n
    "},{"location":"api/basic_json/to_bson/#version-history","title":"Version history","text":"
    • Added in version 3.4.0.
    "},{"location":"api/basic_json/to_cbor/","title":"nlohmann::basic_json::to_cbor","text":"
    // (1)\nstatic std::vector<std::uint8_t> to_cbor(const basic_json& j);\n\n// (2)\nstatic void to_cbor(const basic_json& j, detail::output_adapter<std::uint8_t> o);\nstatic void to_cbor(const basic_json& j, detail::output_adapter<char> o);\n

    Serializes a given JSON value j to a byte vector using the CBOR (Concise Binary Object Representation) serialization format. CBOR is a binary serialization format which aims to be more compact than JSON itself, yet more efficient to parse.

    1. Returns a byte vector containing the CBOR serialization.
    2. Writes the CBOR serialization to an output adapter.

    The exact mapping and its limitations is described on a dedicated page.

    "},{"location":"api/basic_json/to_cbor/#parameters","title":"Parameters","text":"j (in) JSON value to serialize o (in) output adapter to write serialization to"},{"location":"api/basic_json/to_cbor/#return-value","title":"Return value","text":"
    1. CBOR serialization as byte vector
    2. (none)
    "},{"location":"api/basic_json/to_cbor/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/to_cbor/#complexity","title":"Complexity","text":"

    Linear in the size of the JSON value j.

    "},{"location":"api/basic_json/to_cbor/#examples","title":"Examples","text":"Example

    The example shows the serialization of a JSON value to a byte vector in CBOR format.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create a JSON value\n    json j = R\"({\"compact\": true, \"schema\": 0})\"_json;\n\n    // serialize it to CBOR\n    std::vector<std::uint8_t> v = json::to_cbor(j);\n\n    // print the vector content\n    for (auto& byte : v)\n    {\n        std::cout << \"0x\" << std::hex << std::setw(2) << std::setfill('0') << (int)byte << \" \";\n    }\n    std::cout << std::endl;\n}\n

    Output:

    0xa2 0x67 0x63 0x6f 0x6d 0x70 0x61 0x63 0x74 0xf5 0x66 0x73 0x63 0x68 0x65 0x6d 0x61 0x00 \n
    "},{"location":"api/basic_json/to_cbor/#version-history","title":"Version history","text":"
    • Added in version 2.0.9.
    • Compact representation of floating-point numbers added in version 3.8.0.
    "},{"location":"api/basic_json/to_msgpack/","title":"nlohmann::basic_json::to_msgpack","text":"
    // (1)\nstatic std::vector<std::uint8_t> to_msgpack(const basic_json& j);\n\n// (2)\nstatic void to_msgpack(const basic_json& j, detail::output_adapter<std::uint8_t> o);\nstatic void to_msgpack(const basic_json& j, detail::output_adapter<char> o);\n

    Serializes a given JSON value j to a byte vector using the MessagePack serialization format. MessagePack is a binary serialization format which aims to be more compact than JSON itself, yet more efficient to parse.

    1. Returns a byte vector containing the MessagePack serialization.
    2. Writes the MessagePack serialization to an output adapter.

    The exact mapping and its limitations is described on a dedicated page.

    "},{"location":"api/basic_json/to_msgpack/#parameters","title":"Parameters","text":"j (in) JSON value to serialize o (in) output adapter to write serialization to"},{"location":"api/basic_json/to_msgpack/#return-value","title":"Return value","text":"
    1. MessagePack serialization as byte vector
    2. (none)
    "},{"location":"api/basic_json/to_msgpack/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/to_msgpack/#complexity","title":"Complexity","text":"

    Linear in the size of the JSON value j.

    "},{"location":"api/basic_json/to_msgpack/#examples","title":"Examples","text":"Example

    The example shows the serialization of a JSON value to a byte vector in MessagePack format.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create a JSON value\n    json j = R\"({\"compact\": true, \"schema\": 0})\"_json;\n\n    // serialize it to MessagePack\n    std::vector<std::uint8_t> v = json::to_msgpack(j);\n\n    // print the vector content\n    for (auto& byte : v)\n    {\n        std::cout << \"0x\" << std::hex << std::setw(2) << std::setfill('0') << (int)byte << \" \";\n    }\n    std::cout << std::endl;\n}\n

    Output:

    0x82 0xa7 0x63 0x6f 0x6d 0x70 0x61 0x63 0x74 0xc3 0xa6 0x73 0x63 0x68 0x65 0x6d 0x61 0x00 \n
    "},{"location":"api/basic_json/to_msgpack/#version-history","title":"Version history","text":"
    • Added in version 2.0.9.
    "},{"location":"api/basic_json/to_string/","title":"to_string(basic_json)","text":"
    template <typename BasicJsonType>\nstd::string to_string(const BasicJsonType& j);\n

    This function implements a user-defined to_string for JSON objects.

    "},{"location":"api/basic_json/to_string/#template-parameters","title":"Template parameters","text":"BasicJsonType a specialization of basic_json"},{"location":"api/basic_json/to_string/#return-value","title":"Return value","text":"

    string containing the serialization of the JSON value

    "},{"location":"api/basic_json/to_string/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes to any JSON value.

    "},{"location":"api/basic_json/to_string/#exceptions","title":"Exceptions","text":"

    Throws type_error.316 if a string stored inside the JSON value is not UTF-8 encoded

    "},{"location":"api/basic_json/to_string/#complexity","title":"Complexity","text":"

    Linear.

    "},{"location":"api/basic_json/to_string/#possible-implementation","title":"Possible implementation","text":"
    template <typename BasicJsonType>\nstd::string to_string(const BasicJsonType& j)\n{\n    return j.dump();\n}\n
    "},{"location":"api/basic_json/to_string/#examples","title":"Examples","text":"Example

    The following code shows how the library's to_string() function integrates with others, allowing argument-dependent lookup.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing std::to_string;\n\nint main()\n{\n    // create values\n    json j = {{\"one\", 1}, {\"two\", 2}};\n    int i = 42;\n\n    // use ADL to select best to_string function\n    auto j_str = to_string(j);  // calling nlohmann::to_string\n    auto i_str = to_string(i);  // calling std::to_string\n\n    // serialize without indentation\n    std::cout << j_str << \"\\n\\n\"\n              << i_str << std::endl;\n}\n

    Output:

    {\"one\":1,\"two\":2}\n\n42\n
    "},{"location":"api/basic_json/to_string/#see-also","title":"See also","text":"
    • dump
    "},{"location":"api/basic_json/to_string/#version-history","title":"Version history","text":"

    Added in version 3.7.0.

    "},{"location":"api/basic_json/to_ubjson/","title":"nlohmann::basic_json::to_ubjson","text":"
    // (1)\nstatic std::vector<std::uint8_t> to_ubjson(const basic_json& j,\n                                           const bool use_size = false,\n                                           const bool use_type = false);\n\n// (2)\nstatic void to_ubjson(const basic_json& j, detail::output_adapter<std::uint8_t> o,\n                      const bool use_size = false, const bool use_type = false);\nstatic void to_ubjson(const basic_json& j, detail::output_adapter<char> o,\n                      const bool use_size = false, const bool use_type = false);\n

    Serializes a given JSON value j to a byte vector using the UBJSON (Universal Binary JSON) serialization format. UBJSON aims to be more compact than JSON itself, yet more efficient to parse.

    1. Returns a byte vector containing the UBJSON serialization.
    2. Writes the UBJSON serialization to an output adapter.

    The exact mapping and its limitations is described on a dedicated page.

    "},{"location":"api/basic_json/to_ubjson/#parameters","title":"Parameters","text":"j (in) JSON value to serialize o (in) output adapter to write serialization to use_size (in) whether to add size annotations to container types; optional, false by default. use_type (in) whether to add type annotations to container types (must be combined with use_size = true); optional, false by default."},{"location":"api/basic_json/to_ubjson/#return-value","title":"Return value","text":"
    1. UBJSON serialization as byte vector
    2. (none)
    "},{"location":"api/basic_json/to_ubjson/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/to_ubjson/#complexity","title":"Complexity","text":"

    Linear in the size of the JSON value j.

    "},{"location":"api/basic_json/to_ubjson/#examples","title":"Examples","text":"Example

    The example shows the serialization of a JSON value to a byte vector in UBJSON format.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\n// function to print UBJSON's diagnostic format\nvoid print_byte(uint8_t byte)\n{\n    if (32 < byte and byte < 128)\n    {\n        std::cout << (char)byte;\n    }\n    else\n    {\n        std::cout << (int)byte;\n    }\n}\n\nint main()\n{\n    // create a JSON value\n    json j = R\"({\"compact\": true, \"schema\": false})\"_json;\n\n    // serialize it to UBJSON\n    std::vector<std::uint8_t> v = json::to_ubjson(j);\n\n    // print the vector content\n    for (auto& byte : v)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n\n    // create an array of numbers\n    json array = {1, 2, 3, 4, 5, 6, 7, 8};\n\n    // serialize it to UBJSON using default representation\n    std::vector<std::uint8_t> v_array = json::to_ubjson(array);\n    // serialize it to UBJSON using size optimization\n    std::vector<std::uint8_t> v_array_size = json::to_ubjson(array, true);\n    // serialize it to UBJSON using type optimization\n    std::vector<std::uint8_t> v_array_size_and_type = json::to_ubjson(array, true, true);\n\n    // print the vector contents\n    for (auto& byte : v_array)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n\n    for (auto& byte : v_array_size)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n\n    for (auto& byte : v_array_size_and_type)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n}\n

    Output:

    {i7compactTi6schemaF}\n[i1i2i3i4i5i6i7i8]\n[#i8i1i2i3i4i5i6i7i8\n[$i#i812345678\n
    "},{"location":"api/basic_json/to_ubjson/#version-history","title":"Version history","text":"
    • Added in version 3.1.0.
    "},{"location":"api/basic_json/type/","title":"nlohmann::basic_json::type","text":"
    constexpr value_t type() const noexcept;\n

    Return the type of the JSON value as a value from the value_t enumeration.

    "},{"location":"api/basic_json/type/#return-value","title":"Return value","text":"

    the type of the JSON value

    Value type return value null value_t::null boolean value_t::boolean string value_t::string number (integer) value_t::number_integer number (unsigned integer) value_t::number_unsigned number (floating-point) value_t::number_float object value_t::object array value_t::array binary value_t::binary discarded value_t::discarded"},{"location":"api/basic_json/type/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/type/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/type/#examples","title":"Examples","text":"Example

    The following code exemplifies type() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = -17;\n    json j_number_unsigned = 42u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n\n    // call type()\n    std::cout << std::boolalpha;\n    std::cout << (j_null.type() == json::value_t::null) << '\\n';\n    std::cout << (j_boolean.type() == json::value_t::boolean) << '\\n';\n    std::cout << (j_number_integer.type() == json::value_t::number_integer) << '\\n';\n    std::cout << (j_number_unsigned.type() == json::value_t::number_unsigned) << '\\n';\n    std::cout << (j_number_float.type() == json::value_t::number_float) << '\\n';\n    std::cout << (j_object.type() == json::value_t::object) << '\\n';\n    std::cout << (j_array.type() == json::value_t::array) << '\\n';\n    std::cout << (j_string.type() == json::value_t::string) << '\\n';\n}\n

    Output:

    true\ntrue\ntrue\ntrue\ntrue\ntrue\ntrue\ntrue\n
    "},{"location":"api/basic_json/type/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Added unsigned integer type in version 2.0.0.
    • Added binary type in version 3.8.0.
    "},{"location":"api/basic_json/type_error/","title":"nlohmann::basic_json::type_error","text":"
    class type_error : public exception;\n

    This exception is thrown in case of a type error; that is, a library function is executed on a JSON value whose type does not match the expected semantics.

    Exceptions have ids 3xx (see list of type errors).

    classDiagram\n  direction LR\n\n    class std_exception [\"std::exception\"] {\n        <<interface>>\n    }\n\n    class json_exception [\"basic_json::exception\"] {\n        +const int id\n        +const char* what() const\n    }\n\n    class json_parse_error [\"basic_json::parse_error\"] {\n        +const std::size_t byte\n    }\n\n    class json_invalid_iterator [\"basic_json::invalid_iterator\"]\n    class json_type_error [\"basic_json::type_error\"]\n    class json_out_of_range [\"basic_json::out_of_range\"]\n    class json_other_error [\"basic_json::other_error\"]\n\n    std_exception <|-- json_exception\n    json_exception <|-- json_parse_error\n    json_exception <|-- json_invalid_iterator\n    json_exception <|-- json_type_error\n    json_exception <|-- json_out_of_range\n    json_exception <|-- json_other_error\n\n    style json_type_error fill:#CCCCFF
    "},{"location":"api/basic_json/type_error/#member-functions","title":"Member functions","text":"
    • what - returns explanatory string
    "},{"location":"api/basic_json/type_error/#member-variables","title":"Member variables","text":"
    • id - the id of the exception
    "},{"location":"api/basic_json/type_error/#examples","title":"Examples","text":"Example

    The following code shows how a type_error exception can be caught.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    try\n    {\n        // calling push_back() on a string value\n        json j = \"string\";\n        j.push_back(\"another string\");\n    }\n    catch (const json::type_error& e)\n    {\n        // output exception information\n        std::cout << \"message: \" << e.what() << '\\n'\n                  << \"exception id: \" << e.id << std::endl;\n    }\n}\n

    Output:

    message: [json.exception.type_error.308] cannot use push_back() with string\nexception id: 308\n
    "},{"location":"api/basic_json/type_error/#see-also","title":"See also","text":"
    • List of type errors
    • parse_error for exceptions indicating a parse error
    • invalid_iterator for exceptions indicating errors with iterators
    • out_of_range for exceptions indicating access out of the defined range
    • other_error for exceptions indicating other library errors
    "},{"location":"api/basic_json/type_error/#version-history","title":"Version history","text":"
    • Since version 3.0.0.
    "},{"location":"api/basic_json/type_name/","title":"nlohmann::basic_json::type_name","text":"
    const char* type_name() const noexcept;\n

    Returns the type name as string to be used in error messages -- usually to indicate that a function was called on a wrong JSON type.

    "},{"location":"api/basic_json/type_name/#return-value","title":"Return value","text":"

    a string representation of the type (value_t):

    Value type return value null \"null\" boolean \"boolean\" string \"string\" number (integer, unsigned integer, floating-point) \"number\" object \"object\" array \"array\" binary \"binary\" discarded \"discarded\""},{"location":"api/basic_json/type_name/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/type_name/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/type_name/#examples","title":"Examples","text":"Example

    The following code exemplifies type_name() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = -17;\n    json j_number_unsigned = 42u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n\n    // call type_name()\n    std::cout << j_null << \" is a \" << j_null.type_name() << '\\n';\n    std::cout << j_boolean << \" is a \" << j_boolean.type_name() << '\\n';\n    std::cout << j_number_integer << \" is a \" << j_number_integer.type_name() << '\\n';\n    std::cout << j_number_unsigned << \" is a \" << j_number_unsigned.type_name() << '\\n';\n    std::cout << j_number_float << \" is a \" << j_number_float.type_name() << '\\n';\n    std::cout << j_object << \" is an \" << j_object.type_name() << '\\n';\n    std::cout << j_array << \" is an \" << j_array.type_name() << '\\n';\n    std::cout << j_string << \" is a \" << j_string.type_name() << '\\n';\n}\n

    Output:

    null is a null\ntrue is a boolean\n-17 is a number\n42 is a number\n23.42 is a number\n{\"one\":1,\"two\":2} is an object\n[1,2,4,8,16] is an array\n\"Hello, world\" is a string\n
    "},{"location":"api/basic_json/type_name/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Part of the public API version since 2.1.0.
    • Changed return value to const char* and added noexcept in version 3.0.0.
    • Added support for binary type in version 3.8.0.
    "},{"location":"api/basic_json/unflatten/","title":"nlohmann::basic_json::unflatten","text":"
    basic_json unflatten() const;\n

    The function restores the arbitrary nesting of a JSON value that has been flattened before using the flatten() function. The JSON value must meet certain constraints:

    1. The value must be an object.
    2. The keys must be JSON pointers (see RFC 6901)
    3. The mapped values must be primitive JSON types.
    "},{"location":"api/basic_json/unflatten/#return-value","title":"Return value","text":"

    the original JSON from a flattened version

    "},{"location":"api/basic_json/unflatten/#exception-safety","title":"Exception safety","text":"

    Strong exception safety: if an exception occurs, the original value stays intact.

    "},{"location":"api/basic_json/unflatten/#exceptions","title":"Exceptions","text":"

    The function can throw the following exceptions:

    • Throws type_error.314 if value is not an object
    • Throws type_error.315 if object values are not primitive
    "},{"location":"api/basic_json/unflatten/#complexity","title":"Complexity","text":"

    Linear in the size the JSON value.

    "},{"location":"api/basic_json/unflatten/#notes","title":"Notes","text":"

    Empty objects and arrays are flattened by flatten() to null values and can not unflattened to their original type. Apart from this example, for a JSON value j, the following is always true: j == j.flatten().unflatten().

    "},{"location":"api/basic_json/unflatten/#examples","title":"Examples","text":"Example

    The following code shows how a flattened JSON object is unflattened into the original nested JSON object.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON value\n    json j_flattened =\n    {\n        {\"/answer/everything\", 42},\n        {\"/happy\", true},\n        {\"/list/0\", 1},\n        {\"/list/1\", 0},\n        {\"/list/2\", 2},\n        {\"/name\", \"Niels\"},\n        {\"/nothing\", nullptr},\n        {\"/object/currency\", \"USD\"},\n        {\"/object/value\", 42.99},\n        {\"/pi\", 3.141}\n    };\n\n    // call unflatten()\n    std::cout << std::setw(4) << j_flattened.unflatten() << '\\n';\n}\n

    Output:

    {\n    \"answer\": {\n        \"everything\": 42\n    },\n    \"happy\": true,\n    \"list\": [\n        1,\n        0,\n        2\n    ],\n    \"name\": \"Niels\",\n    \"nothing\": null,\n    \"object\": {\n        \"currency\": \"USD\",\n        \"value\": 42.99\n    },\n    \"pi\": 3.141\n}\n
    "},{"location":"api/basic_json/unflatten/#see-also","title":"See also","text":"
    • flatten the reverse function
    "},{"location":"api/basic_json/unflatten/#version-history","title":"Version history","text":"
    • Added in version 2.0.0.
    "},{"location":"api/basic_json/update/","title":"nlohmann::basic_json::update","text":"
    // (1)\nvoid update(const_reference j, bool merge_objects = false);\n\n// (2)\nvoid update(const_iterator first, const_iterator last, bool merge_objects = false);\n
    1. Inserts all values from JSON object j.
    2. Inserts all values from range [first, last)

    When merge_objects is false (default), existing keys are overwritten. When merge_objects is true, recursively merges objects with common keys.

    The function is motivated by Python's dict.update function.

    "},{"location":"api/basic_json/update/#iterator-invalidation","title":"Iterator invalidation","text":"

    For ordered_json, adding a value to an object can yield a reallocation, in which case all iterators (including the end() iterator) and all references to the elements are invalidated.

    "},{"location":"api/basic_json/update/#parameters","title":"Parameters","text":"j (in) JSON object to read values from merge_objects (in) when true, existing keys are not overwritten, but contents of objects are merged recursively (default: false) first (in) begin of the range of elements to insert last (in) end of the range of elements to insert"},{"location":"api/basic_json/update/#exceptions","title":"Exceptions","text":"
    1. The function can throw the following exceptions:
      • Throws type_error.312 if called on JSON values other than objects; example: \"cannot use update() with string\"
    2. The function can throw the following exceptions:
      • Throws type_error.312 if called on JSON values other than objects; example: \"cannot use update() with string\"
      • Throws invalid_iterator.202 if called on an iterator which does not belong to the current JSON value; example: \"iterator does not fit current value\"
      • Throws invalid_iterator.210 if first and last do not belong to the same JSON value; example: \"iterators do not fit\"
    "},{"location":"api/basic_json/update/#complexity","title":"Complexity","text":"
    1. O(N*log(size() + N)), where N is the number of elements to insert.
    2. O(N*log(size() + N)), where N is the number of elements to insert.
    "},{"location":"api/basic_json/update/#examples","title":"Examples","text":"Example

    The example shows how update() is used.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create two JSON objects\n    json o1 = R\"( {\"color\": \"red\", \"price\": 17.99, \"names\": {\"de\": \"Flugzeug\"}} )\"_json;\n    json o2 = R\"( {\"color\": \"blue\", \"speed\": 100, \"names\": {\"en\": \"plane\"}} )\"_json;\n    json o3 = o1;\n\n    // add all keys from o2 to o1 (updating \"color\", replacing \"names\")\n    o1.update(o2);\n\n    // add all keys from o2 to o1 (updating \"color\", merging \"names\")\n    o3.update(o2, true);\n\n    // output updated object o1 and o3\n    std::cout << std::setw(2) << o1 << '\\n';\n    std::cout << std::setw(2) << o3 << '\\n';\n}\n

    Output:

    {\n  \"color\": \"blue\",\n  \"names\": {\n    \"en\": \"plane\"\n  },\n  \"price\": 17.99,\n  \"speed\": 100\n}\n{\n  \"color\": \"blue\",\n  \"names\": {\n    \"de\": \"Flugzeug\",\n    \"en\": \"plane\"\n  },\n  \"price\": 17.99,\n  \"speed\": 100\n}\n
    Example

    The example shows how update() is used.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create two JSON objects\n    json o1 = R\"( {\"color\": \"red\", \"price\": 17.99, \"names\": {\"de\": \"Flugzeug\"}} )\"_json;\n    json o2 = R\"( {\"color\": \"blue\", \"speed\": 100, \"names\": {\"en\": \"plane\"}} )\"_json;\n    json o3 = o1;\n\n    // add all keys from o2 to o1 (updating \"color\", replacing \"names\")\n    o1.update(o2.begin(), o2.end());\n\n    // add all keys from o2 to o1 (updating \"color\", merging \"names\")\n    o3.update(o2.begin(), o2.end(), true);\n\n    // output updated object o1 and o3\n    std::cout << std::setw(2) << o1 << '\\n';\n    std::cout << std::setw(2) << o3 << '\\n';\n}\n

    Output:

    {\n  \"color\": \"blue\",\n  \"names\": {\n    \"en\": \"plane\"\n  },\n  \"price\": 17.99,\n  \"speed\": 100\n}\n{\n  \"color\": \"blue\",\n  \"names\": {\n    \"de\": \"Flugzeug\",\n    \"en\": \"plane\"\n  },\n  \"price\": 17.99,\n  \"speed\": 100\n}\n
    Example

    One common use case for this function is the handling of user settings. Assume your application can be configured in some aspects:

    {\n    \"color\": \"red\",\n    \"active\": true,\n    \"name\": {\"de\": \"Maus\", \"en\": \"mouse\"}\n}\n

    The user may override the default settings selectively:

    {\n    \"color\": \"blue\",\n    \"name\": {\"es\": \"rat\u00f3n\"},\n}\n

    Then update manages the merging of default settings and user settings:

    auto user_settings = json::parse(\"config.json\");\nauto effective_settings = get_default_settings();\neffective_settings.update(user_settings);\n

    Now effective_settings contains the default settings, but those keys set by the user are overwritten:

    {\n    \"color\": \"blue\",\n    \"active\": true,\n    \"name\": {\"es\": \"rat\u00f3n\"}\n}\n

    Note existing keys were just overwritten. To merge objects, merge_objects setting should be set to true:

    auto user_settings = json::parse(\"config.json\");\nauto effective_settings = get_default_settings();\neffective_settings.update(user_settings, true);\n
    {\n    \"color\": \"blue\",\n    \"active\": true,\n    \"name\": {\"de\": \"Maus\", \"en\": \"mouse\", \"es\": \"rat\u00f3n\"}\n}\n
    "},{"location":"api/basic_json/update/#version-history","title":"Version history","text":"
    • Added in version 3.0.0.
    • Added merge_objects parameter in 3.10.5.
    "},{"location":"api/basic_json/value/","title":"nlohmann::basic_json::value","text":"
    // (1)\ntemplate<class ValueType>\nValueType value(const typename object_t::key_type& key,\n                ValueType&& default_value) const;\n\n// (2)\ntemplate<class ValueType, class KeyType>\nValueType value(KeyType&& key,\n                ValueType&& default_value) const;\n\n// (3)\ntemplate<class ValueType>\nValueType value(const json_pointer& ptr,\n                const ValueType& default_value) const;\n
    1. Returns either a copy of an object's element at the specified key key or a given default value if no element with key key exists.

      The function is basically equivalent to executing

      try {\n   return at(key);\n} catch(out_of_range) {\n   return default_value;\n}\n

    2. See 1. This overload is only available if KeyType is comparable with typename object_t::key_type and typename object_comparator_t::is_transparent denotes a type.

    3. Returns either a copy of an object's element at the specified JSON pointer ptr or a given default value if no value at ptr exists.

      The function is basically equivalent to executing

      try {\n   return at(ptr);\n} catch(out_of_range) {\n   return default_value;\n}\n

    Differences to at and operator[]

    • Unlike at, this function does not throw if the given key/ptr was not found.
    • Unlike operator[], this function does not implicitly add an element to the position defined by key/ptr key. This function is furthermore also applicable to const objects.
    "},{"location":"api/basic_json/value/#template-parameters","title":"Template parameters","text":"KeyType A type for an object key other than json_pointer that is comparable with string_t using object_comparator_t. This can also be a string view (C++17). ValueType type compatible to JSON values, for instance int for JSON integer numbers, bool for JSON booleans, or std::vector types for JSON arrays. Note the type of the expected value at key/ptr and the default value default_value must be compatible."},{"location":"api/basic_json/value/#parameters","title":"Parameters","text":"key (in) key of the element to access default_value (in) the value to return if key/ptr found no value ptr (in) a JSON pointer to the element to access"},{"location":"api/basic_json/value/#return-value","title":"Return value","text":"
    1. copy of the element at key key or default_value if key is not found
    2. copy of the element at key key or default_value if key is not found
    3. copy of the element at JSON Pointer ptr or default_value if no value for ptr is found
    "},{"location":"api/basic_json/value/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes to any JSON value.

    "},{"location":"api/basic_json/value/#exceptions","title":"Exceptions","text":"
    1. The function can throw the following exceptions:
      • Throws type_error.302 if default_value does not match the type of the value at key
      • Throws type_error.306 if the JSON value is not an object; in that case, using value() with a key makes no sense.
    2. See 1.
    3. The function can throw the following exceptions:
      • Throws type_error.302 if default_value does not match the type of the value at ptr
      • Throws type_error.306 if the JSON value is not an object; in that case, using value() with a key makes no sense.
    "},{"location":"api/basic_json/value/#complexity","title":"Complexity","text":"
    1. Logarithmic in the size of the container.
    2. Logarithmic in the size of the container.
    3. Logarithmic in the size of the container.
    "},{"location":"api/basic_json/value/#notes","title":"Notes","text":"

    Return type

    The value function is a template, and the return type of the function is determined by the type of the provided default value unless otherwise specified. This can have unexpected effects. In the example below, we store a 64-bit unsigned integer. We get exactly that value when using operator[]. However, when we call value and provide 0 as default value, then -1 is returned. The occurs, because 0 has type int which overflows when handling the value 18446744073709551615.

    To address this issue, either provide a correctly typed default value or use the template parameter to specify the desired return type. Note that this issue occurs even when a value is stored at the provided key, and the default value is not used as the return value.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    json j = json::parse(R\"({\"uint64\": 18446744073709551615})\");\n\n    std::cout << \"operator[]:                \" << j[\"uint64\"] << '\\n'\n              << \"default value (int):       \" << j.value(\"uint64\", 0) << '\\n'\n              << \"default value (uint64_t):  \" << j.value(\"uint64\", std::uint64_t(0)) << '\\n'\n              << \"explict return value type: \" << j.value<std::uint64_t>(\"uint64\", 0) << '\\n';\n}\n

    Output:

    operator[]:                18446744073709551615\ndefault value (int):       -1\ndefault value (uint64_t):  18446744073709551615\nexplict return value type: 18446744073709551615\n
    "},{"location":"api/basic_json/value/#examples","title":"Examples","text":"Example: (1) access specified object element with default value

    The example below shows how object elements can be queried with a default value.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object with different entry types\n    json j =\n    {\n        {\"integer\", 1},\n        {\"floating\", 42.23},\n        {\"string\", \"hello world\"},\n        {\"boolean\", true},\n        {\"object\", {{\"key1\", 1}, {\"key2\", 2}}},\n        {\"array\", {1, 2, 3}}\n    };\n\n    // access existing values\n    int v_integer = j.value(\"integer\", 0);\n    double v_floating = j.value(\"floating\", 47.11);\n\n    // access nonexisting values and rely on default value\n    std::string v_string = j.value(\"nonexisting\", \"oops\");\n    bool v_boolean = j.value(\"nonexisting\", false);\n\n    // output values\n    std::cout << std::boolalpha << v_integer << \" \" << v_floating\n              << \" \" << v_string << \" \" << v_boolean << \"\\n\";\n}\n

    Output:

    1 42.23 oops false\n
    Example: (2) access specified object element using string_view with default value

    The example below shows how object elements can be queried with a default value.

    #include <iostream>\n#include <string_view>\n#include <nlohmann/json.hpp>\n\nusing namespace std::string_view_literals;\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object with different entry types\n    json j =\n    {\n        {\"integer\", 1},\n        {\"floating\", 42.23},\n        {\"string\", \"hello world\"},\n        {\"boolean\", true},\n        {\"object\", {{\"key1\", 1}, {\"key2\", 2}}},\n        {\"array\", {1, 2, 3}}\n    };\n\n    // access existing values\n    int v_integer = j.value(\"integer\"sv, 0);\n    double v_floating = j.value(\"floating\"sv, 47.11);\n\n    // access nonexisting values and rely on default value\n    std::string v_string = j.value(\"nonexisting\"sv, \"oops\");\n    bool v_boolean = j.value(\"nonexisting\"sv, false);\n\n    // output values\n    std::cout << std::boolalpha << v_integer << \" \" << v_floating\n              << \" \" << v_string << \" \" << v_boolean << \"\\n\";\n}\n

    Output:

    1 42.23 oops false\n
    Example: (3) access specified object element via JSON Pointer with default value

    The example below shows how object elements can be queried with a default value.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create a JSON object with different entry types\n    json j =\n    {\n        {\"integer\", 1},\n        {\"floating\", 42.23},\n        {\"string\", \"hello world\"},\n        {\"boolean\", true},\n        {\"object\", {{\"key1\", 1}, {\"key2\", 2}}},\n        {\"array\", {1, 2, 3}}\n    };\n\n    // access existing values\n    int v_integer = j.value(\"/integer\"_json_pointer, 0);\n    double v_floating = j.value(\"/floating\"_json_pointer, 47.11);\n\n    // access nonexisting values and rely on default value\n    std::string v_string = j.value(\"/nonexisting\"_json_pointer, \"oops\");\n    bool v_boolean = j.value(\"/nonexisting\"_json_pointer, false);\n\n    // output values\n    std::cout << std::boolalpha << v_integer << \" \" << v_floating\n              << \" \" << v_string << \" \" << v_boolean << \"\\n\";\n}\n

    Output:

    1 42.23 oops false\n
    "},{"location":"api/basic_json/value/#see-also","title":"See also","text":"
    • see at for access by reference with range checking
    • see operator[] for unchecked access by reference
    "},{"location":"api/basic_json/value/#version-history","title":"Version history","text":"
    1. Added in version 1.0.0. Changed parameter default_value type from const ValueType& to ValueType&& in version 3.11.0.
    2. Added in version 3.11.0. Made ValueType the first template parameter in version 3.11.2.
    3. Added in version 2.0.2.
    "},{"location":"api/basic_json/value_t/","title":"nlohmann::basic_json::value_t","text":"
    enum class value_t : std::uint8_t {\n    null,\n    object,\n    array,\n    string,\n    boolean,\n    number_integer,\n    number_unsigned,\n    number_float,\n    binary,\n    discarded\n};\n

    This enumeration collects the different JSON types. It is internally used to distinguish the stored values, and the functions is_null, is_object, is_array, is_string, is_boolean, is_number (with is_number_integer, is_number_unsigned, and is_number_float), is_discarded, is_binary, is_primitive, and is_structured rely on it.

    "},{"location":"api/basic_json/value_t/#notes","title":"Notes","text":"

    Ordering

    The order of types is as follows:

    1. null
    2. boolean
    3. number_integer, number_unsigned, number_float
    4. object
    5. array
    6. string
    7. binary

    discarded is unordered.

    Types of numbers

    There are three enumerators for numbers (number_integer, number_unsigned, and number_float) to distinguish between different types of numbers:

    • number_unsigned_t for unsigned integers
    • number_integer_t for signed integers
    • number_float_t for floating-point numbers or to approximate integers which do not fit into the limits of their respective type

    Comparison operators

    operator< and operator<=> (since C++20) are overloaded and compare according to the ordering described above. Until C++20 all other relational and equality operators yield results according to the integer value of each enumerator. Since C++20 some compilers consider the rewritten candidates generated from operator<=> during overload resolution, while others do not. For predictable and portable behavior use:

    • operator< or operator<=> when wanting to compare according to the order described above
    • operator== or operator!= when wanting to compare according to each enumerators integer value
    "},{"location":"api/basic_json/value_t/#examples","title":"Examples","text":"Example

    The following code how type() queries the value_t for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = -17;\n    json j_number_unsigned = 42u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n\n    // call type()\n    std::cout << std::boolalpha;\n    std::cout << (j_null.type() == json::value_t::null) << '\\n';\n    std::cout << (j_boolean.type() == json::value_t::boolean) << '\\n';\n    std::cout << (j_number_integer.type() == json::value_t::number_integer) << '\\n';\n    std::cout << (j_number_unsigned.type() == json::value_t::number_unsigned) << '\\n';\n    std::cout << (j_number_float.type() == json::value_t::number_float) << '\\n';\n    std::cout << (j_object.type() == json::value_t::object) << '\\n';\n    std::cout << (j_array.type() == json::value_t::array) << '\\n';\n    std::cout << (j_string.type() == json::value_t::string) << '\\n';\n}\n

    Output:

    true\ntrue\ntrue\ntrue\ntrue\ntrue\ntrue\ntrue\n
    "},{"location":"api/basic_json/value_t/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Added unsigned integer type in version 2.0.0.
    • Added binary type in version 3.8.0.
    "},{"location":"api/basic_json/~basic_json/","title":"nlohmann::basic_json::~basic_json","text":"
    ~basic_json() noexcept;\n

    Destroys the JSON value and frees all allocated memory.

    "},{"location":"api/basic_json/~basic_json/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/~basic_json/#complexity","title":"Complexity","text":"

    Linear.

    "},{"location":"api/basic_json/~basic_json/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/byte_container_with_subtype/","title":"nlohmann::byte_container_with_subtype","text":"
    template<typename BinaryType>\nclass byte_container_with_subtype : public BinaryType;\n

    This type extends the template parameter BinaryType provided to basic_json with a subtype used by BSON and MessagePack. This type exists so that the user does not have to specify a type themselves with a specific naming scheme in order to override the binary type.

    "},{"location":"api/byte_container_with_subtype/#template-parameters","title":"Template parameters","text":"BinaryType container to store bytes (std::vector<std::uint8_t> by default)"},{"location":"api/byte_container_with_subtype/#member-types","title":"Member types","text":"
    • container_type - the type of the underlying container (BinaryType)
    • subtype_type - the type of the subtype (std::uint64_t)
    "},{"location":"api/byte_container_with_subtype/#member-functions","title":"Member functions","text":"
    • (constructor)
    • operator== - comparison: equal
    • operator!= - comparison: not equal
    • set_subtype - sets the binary subtype
    • subtype - return the binary subtype
    • has_subtype - return whether the value has a subtype
    • clear_subtype - clears the binary subtype
    "},{"location":"api/byte_container_with_subtype/#version-history","title":"Version history","text":"
    • Added in version 3.8.0.
    • Changed type of subtypes to std::uint64_t in 3.10.0.
    "},{"location":"api/byte_container_with_subtype/byte_container_with_subtype/","title":"nlohmann::byte_container_with_subtype::byte_container_with_subtype","text":"
    // (1)\nbyte_container_with_subtype();\n\n// (2)\nbyte_container_with_subtype(const container_type& container);\nbyte_container_with_subtype(container_type&& container);\n\n// (3)\nbyte_container_with_subtype(const container_type& container, subtype_type subtype);\nbyte_container_with_subtype(container_type&& container, subtype_type subtype);\n
    1. Create empty binary container without subtype.
    2. Create binary container without subtype.
    3. Create binary container with subtype.
    "},{"location":"api/byte_container_with_subtype/byte_container_with_subtype/#parameters","title":"Parameters","text":"container (in) binary container subtype (in) subtype"},{"location":"api/byte_container_with_subtype/byte_container_with_subtype/#examples","title":"Examples","text":"Example

    The example below demonstrates how byte containers can be created.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\n// define a byte container based on std::vector\nusing byte_container_with_subtype = nlohmann::byte_container_with_subtype<std::vector<std::uint8_t>>;\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // (1) create empty container\n    auto c1 = byte_container_with_subtype();\n\n    std::vector<std::uint8_t> bytes = {{0xca, 0xfe, 0xba, 0xbe}};\n\n    // (2) create container\n    auto c2 = byte_container_with_subtype(bytes);\n\n    // (3) create container with subtype\n    auto c3 = byte_container_with_subtype(bytes, 42);\n\n    std::cout << json(c1) << \"\\n\" << json(c2) << \"\\n\" << json(c3) << std::endl;\n}\n

    Output:

    {\"bytes\":[],\"subtype\":null}\n{\"bytes\":[202,254,186,190],\"subtype\":null}\n{\"bytes\":[202,254,186,190],\"subtype\":42}\n
    "},{"location":"api/byte_container_with_subtype/byte_container_with_subtype/#version-history","title":"Version history","text":"

    Since version 3.8.0.

    "},{"location":"api/byte_container_with_subtype/clear_subtype/","title":"nlohmann::byte_container_with_subtype::clear_subtype","text":"
    void clear_subtype() noexcept;\n

    Clears the binary subtype and flags the value as not having a subtype, which has implications for serialization; for instance MessagePack will prefer the bin family over the ext family.

    "},{"location":"api/byte_container_with_subtype/clear_subtype/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/byte_container_with_subtype/clear_subtype/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/byte_container_with_subtype/clear_subtype/#examples","title":"Examples","text":"Example

    The example below demonstrates how clear_subtype can remove subtypes.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\n// define a byte container based on std::vector\nusing byte_container_with_subtype = nlohmann::byte_container_with_subtype<std::vector<std::uint8_t>>;\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::vector<std::uint8_t> bytes = {{0xca, 0xfe, 0xba, 0xbe}};\n\n    // create container with subtype\n    auto c1 = byte_container_with_subtype(bytes, 42);\n\n    std::cout << \"before calling clear_subtype(): \" << json(c1) << '\\n';\n\n    c1.clear_subtype();\n\n    std::cout << \"after calling clear_subtype(): \" << json(c1) << '\\n';\n}\n

    Output:

    before calling clear_subtype(): {\"bytes\":[202,254,186,190],\"subtype\":42}\nafter calling clear_subtype(): {\"bytes\":[202,254,186,190],\"subtype\":null}\n
    "},{"location":"api/byte_container_with_subtype/clear_subtype/#version-history","title":"Version history","text":"

    Since version 3.8.0.

    "},{"location":"api/byte_container_with_subtype/has_subtype/","title":"nlohmann::byte_container_with_subtype::has_subtype","text":"
    constexpr bool has_subtype() const noexcept;\n

    Returns whether the value has a subtype.

    "},{"location":"api/byte_container_with_subtype/has_subtype/#return-value","title":"Return value","text":"

    whether the value has a subtype

    "},{"location":"api/byte_container_with_subtype/has_subtype/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/byte_container_with_subtype/has_subtype/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/byte_container_with_subtype/has_subtype/#examples","title":"Examples","text":"Example

    The example below demonstrates how has_subtype can check whether a subtype was set.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\n// define a byte container based on std::vector\nusing byte_container_with_subtype = nlohmann::byte_container_with_subtype<std::vector<std::uint8_t>>;\n\nint main()\n{\n    std::vector<std::uint8_t> bytes = {{0xca, 0xfe, 0xba, 0xbe}};\n\n    // create container\n    auto c1 = byte_container_with_subtype(bytes);\n\n    // create container with subtype\n    auto c2 = byte_container_with_subtype(bytes, 42);\n\n    std::cout << std::boolalpha << \"c1.has_subtype() = \" << c1.has_subtype()\n              << \"\\nc2.has_subtype() = \" << c2.has_subtype() << std::endl;\n}\n

    Output:

    c1.has_subtype() = false\nc2.has_subtype() = true\n
    "},{"location":"api/byte_container_with_subtype/has_subtype/#version-history","title":"Version history","text":"

    Since version 3.8.0.

    "},{"location":"api/byte_container_with_subtype/set_subtype/","title":"nlohmann::byte_container_with_subtype::set_subtype","text":"
    void set_subtype(subtype_type subtype) noexcept;\n

    Sets the binary subtype of the value, also flags a binary JSON value as having a subtype, which has implications for serialization.

    "},{"location":"api/byte_container_with_subtype/set_subtype/#parameters","title":"Parameters","text":"subtype (in) subtype to set"},{"location":"api/byte_container_with_subtype/set_subtype/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/byte_container_with_subtype/set_subtype/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/byte_container_with_subtype/set_subtype/#examples","title":"Examples","text":"Example

    The example below demonstrates how a subtype can be set with set_subtype.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\n// define a byte container based on std::vector\nusing byte_container_with_subtype = nlohmann::byte_container_with_subtype<std::vector<std::uint8_t>>;\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::vector<std::uint8_t> bytes = {{0xca, 0xfe, 0xba, 0xbe}};\n\n    // create container without subtype\n    auto c = byte_container_with_subtype(bytes);\n\n    std::cout << \"before calling set_subtype(42): \" << json(c) << '\\n';\n\n    // set the subtype\n    c.set_subtype(42);\n\n    std::cout << \"after calling set_subtype(42): \" << json(c) << '\\n';\n}\n

    Output:

    before calling set_subtype(42): {\"bytes\":[202,254,186,190],\"subtype\":null}\nafter calling set_subtype(42): {\"bytes\":[202,254,186,190],\"subtype\":42}\n
    "},{"location":"api/byte_container_with_subtype/set_subtype/#version-history","title":"Version history","text":"

    Since version 3.8.0.

    "},{"location":"api/byte_container_with_subtype/subtype/","title":"nlohmann::byte_container_with_subtype::subtype","text":"
    constexpr subtype_type subtype() const noexcept;\n

    Returns the numerical subtype of the value if it has a subtype. If it does not have a subtype, this function will return subtype_type(-1) as a sentinel value.

    "},{"location":"api/byte_container_with_subtype/subtype/#return-value","title":"Return value","text":"

    the numerical subtype of the binary value, or subtype_type(-1) if no subtype is set

    "},{"location":"api/byte_container_with_subtype/subtype/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/byte_container_with_subtype/subtype/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/byte_container_with_subtype/subtype/#examples","title":"Examples","text":"Example

    The example below demonstrates how the subtype can be retrieved with subtype. Note how subtype_type(-1) is returned for container c1.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\n// define a byte container based on std::vector\nusing byte_container_with_subtype = nlohmann::byte_container_with_subtype<std::vector<std::uint8_t>>;\n\nint main()\n{\n    std::vector<std::uint8_t> bytes = {{0xca, 0xfe, 0xba, 0xbe}};\n\n    // create container\n    auto c1 = byte_container_with_subtype(bytes);\n\n    // create container with subtype\n    auto c2 = byte_container_with_subtype(bytes, 42);\n\n    std::cout << \"c1.subtype() = \" << c1.subtype()\n              << \"\\nc2.subtype() = \" << c2.subtype() << std::endl;\n\n    // in case no subtype is set, return special value\n    assert(c1.subtype() == static_cast<byte_container_with_subtype::subtype_type>(-1));\n}\n

    Output:

    c1.subtype() = 18446744073709551615\nc2.subtype() = 42\n
    "},{"location":"api/byte_container_with_subtype/subtype/#version-history","title":"Version history","text":"
    • Added in version 3.8.0
    • Fixed return value to properly return subtype_type(-1) as documented in version 3.10.0.
    "},{"location":"api/json_pointer/","title":"nlohmann::json_pointer","text":"
    template<typename RefStringType>\nclass json_pointer;\n

    A JSON pointer defines a string syntax for identifying a specific value within a JSON document. It can be used with functions at and operator[]. Furthermore, JSON pointers are the base for JSON patches.

    "},{"location":"api/json_pointer/#template-parameters","title":"Template parameters","text":"RefStringType the string type used for the reference tokens making up the JSON pointer

    Deprecation

    For backwards compatibility RefStringType may also be a specialization of basic_json in which case string_t will be deduced as basic_json::string_t. This feature is deprecated and may be removed in a future major version.

    "},{"location":"api/json_pointer/#member-types","title":"Member types","text":"
    • string_t - the string type used for the reference tokens
    "},{"location":"api/json_pointer/#member-functions","title":"Member functions","text":"
    • (constructor)
    • to_string - return a string representation of the JSON pointer
    • operator string_t - return a string representation of the JSON pointer
    • operator== - compare: equal
    • operator!= - compare: not equal
    • operator/= - append to the end of the JSON pointer
    • operator/ - create JSON Pointer by appending
    • parent_pointer - returns the parent of this JSON pointer
    • pop_back - remove last reference token
    • back - return last reference token
    • push_back - append an unescaped token at the end of the pointer
    • empty - return whether pointer points to the root document
    "},{"location":"api/json_pointer/#literals","title":"Literals","text":"
    • operator\"\"_json_pointer - user-defined string literal for JSON pointers
    "},{"location":"api/json_pointer/#see-also","title":"See also","text":"
    • RFC 6901
    "},{"location":"api/json_pointer/#version-history","title":"Version history","text":"
    • Added in version 2.0.0.
    • Changed template parameter from basic_json to string type in version 3.11.0.
    "},{"location":"api/json_pointer/back/","title":"nlohmann::json_pointer::back","text":"
    const string_t& back() const;\n

    Return last reference token.

    "},{"location":"api/json_pointer/back/#return-value","title":"Return value","text":"

    Last reference token.

    "},{"location":"api/json_pointer/back/#exceptions","title":"Exceptions","text":"

    Throws out_of_range.405 if JSON pointer has no parent.

    "},{"location":"api/json_pointer/back/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/json_pointer/back/#examples","title":"Examples","text":"Example

    The example shows the usage of back.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // different JSON Pointers\n    json::json_pointer ptr1(\"/foo\");\n    json::json_pointer ptr2(\"/foo/0\");\n\n    // call empty()\n    std::cout << \"last reference token of \\\"\" << ptr1 << \"\\\" is \\\"\" << ptr1.back() << \"\\\"\\n\"\n              << \"last reference token of \\\"\" << ptr2 << \"\\\" is \\\"\" << ptr2.back() << \"\\\"\" << std::endl;\n}\n

    Output:

    last reference token of \"/foo\" is \"foo\"\nlast reference token of \"/foo/0\" is \"0\"\n
    "},{"location":"api/json_pointer/back/#version-history","title":"Version history","text":"
    • Added in version 3.6.0.
    • Changed return type to string_t in version 3.11.0.
    "},{"location":"api/json_pointer/empty/","title":"nlohmann::json_pointer::empty","text":"
    bool empty() const noexcept;\n

    Return whether pointer points to the root document.

    "},{"location":"api/json_pointer/empty/#return-value","title":"Return value","text":"

    true iff the JSON pointer points to the root document.

    "},{"location":"api/json_pointer/empty/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/json_pointer/empty/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/json_pointer/empty/#examples","title":"Examples","text":"Example

    The example shows the result of empty for different JSON Pointers.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // different JSON Pointers\n    json::json_pointer ptr0;\n    json::json_pointer ptr1(\"\");\n    json::json_pointer ptr2(\"/foo\");\n    json::json_pointer ptr3(\"/foo/0\");\n\n    // call empty()\n    std::cout << std::boolalpha\n              << \"\\\"\" << ptr0 << \"\\\": \" << ptr0.empty() << '\\n'\n              << \"\\\"\" << ptr1 << \"\\\": \" << ptr1.empty() << '\\n'\n              << \"\\\"\" << ptr2 << \"\\\": \" << ptr2.empty() << '\\n'\n              << \"\\\"\" << ptr3 << \"\\\": \" << ptr3.empty() << std::endl;\n}\n

    Output:

    \"\": true\n\"\": true\n\"/foo\": false\n\"/foo/0\": false\n
    "},{"location":"api/json_pointer/empty/#version-history","title":"Version history","text":"

    Added in version 3.6.0.

    "},{"location":"api/json_pointer/json_pointer/","title":"nlohmann::json_pointer::json_pointer","text":"
    explicit json_pointer(const string_t& s = \"\");\n

    Create a JSON pointer according to the syntax described in Section 3 of RFC6901.

    "},{"location":"api/json_pointer/json_pointer/#parameters","title":"Parameters","text":"s (in) string representing the JSON pointer; if omitted, the empty string is assumed which references the whole JSON value"},{"location":"api/json_pointer/json_pointer/#exceptions","title":"Exceptions","text":"
    • Throws parse_error.107 if the given JSON pointer s is nonempty and does not begin with a slash (/); see example below.
    • Throws parse_error.108 if a tilde (~) in the given JSON pointer s is not followed by 0 (representing ~) or 1 (representing /); see example below.
    "},{"location":"api/json_pointer/json_pointer/#examples","title":"Examples","text":"Example

    The example shows the construction several valid JSON pointers as well as the exceptional behavior.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // correct JSON pointers\n    json::json_pointer p1;\n    json::json_pointer p2(\"\");\n    json::json_pointer p3(\"/\");\n    json::json_pointer p4(\"//\");\n    json::json_pointer p5(\"/foo/bar\");\n    json::json_pointer p6(\"/foo/bar/-\");\n    json::json_pointer p7(\"/foo/~0\");\n    json::json_pointer p8(\"/foo/~1\");\n\n    // error: JSON pointer does not begin with a slash\n    try\n    {\n        json::json_pointer p9(\"foo\");\n    }\n    catch (const json::parse_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // error: JSON pointer uses escape symbol ~ not followed by 0 or 1\n    try\n    {\n        json::json_pointer p10(\"/foo/~\");\n    }\n    catch (const json::parse_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // error: JSON pointer uses escape symbol ~ not followed by 0 or 1\n    try\n    {\n        json::json_pointer p11(\"/foo/~3\");\n    }\n    catch (const json::parse_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    [json.exception.parse_error.107] parse error at byte 1: JSON pointer must be empty or begin with '/' - was: 'foo'\n[json.exception.parse_error.108] parse error: escape character '~' must be followed with '0' or '1'\n[json.exception.parse_error.108] parse error: escape character '~' must be followed with '0' or '1'\n
    "},{"location":"api/json_pointer/json_pointer/#version-history","title":"Version history","text":"
    • Added in version 2.0.0.
    • Changed type of s to string_t in version 3.11.0.
    "},{"location":"api/json_pointer/operator_eq/","title":"nlohmann::json_pointer::operator==","text":"
    // until C++20\ntemplate<typename RefStringTypeLhs, typename RefStringTypeRhs>\nbool operator==(\n    const json_pointer<RefStringTypeLhs>& lhs,\n    const json_pointer<RefStringTypeRhs>& rhs) noexcept;            // (1)\n\ntemplate<typename RefStringTypeLhs, typename StringType>\nbool operator==(\n    const json_pointer<RefStringTypeLhs>& lhs,\n    const StringType& rhs);                                         // (2)\n\ntemplate<typename RefStringTypeRhs, typename StringType>\nbool operator==(\n    const StringType& lhs,\n    const json_pointer<RefStringTypeRhs>& rhs);                     // (2)\n\n// since C++20\nclass json_pointer {\n    template<typename RefStringTypeRhs>\n    bool operator==(\n        const json_pointer<RefStringTypeRhs>& rhs) const noexcept;  // (1)\n\n    bool operator==(const string_t& rhs) const;                     // (2)\n};\n
    1. Compares two JSON pointers for equality by comparing their reference tokens.

    2. Compares a JSON pointer and a string or a string and a JSON pointer for equality by converting the string to a JSON pointer and comparing the JSON pointers according to 1.

    "},{"location":"api/json_pointer/operator_eq/#template-parameters","title":"Template parameters","text":"RefStringTypeLhs, RefStringTypeRhs the string type of the left-hand side or right-hand side JSON pointer, respectively StringType the string type derived from the json_pointer operand (json_pointer::string_t)"},{"location":"api/json_pointer/operator_eq/#parameters","title":"Parameters","text":"lhs (in) first value to consider rhs (in) second value to consider"},{"location":"api/json_pointer/operator_eq/#return-value","title":"Return value","text":"

    whether the values lhs/*this and rhs are equal

    "},{"location":"api/json_pointer/operator_eq/#exception-safety","title":"Exception safety","text":"
    1. No-throw guarantee: this function never throws exceptions.
    2. Strong exception safety: if an exception occurs, the original value stays intact.
    "},{"location":"api/json_pointer/operator_eq/#exceptions","title":"Exceptions","text":"
    1. (none)
    2. The function can throw the following exceptions:
    3. Throws parse_error.107 if the given JSON pointer s is nonempty and does not begin with a slash (/); see example below.
    4. Throws parse_error.108 if a tilde (~) in the given JSON pointer s is not followed by 0 (representing ~) or 1 (representing /); see example below.
    "},{"location":"api/json_pointer/operator_eq/#complexity","title":"Complexity","text":"

    Constant if lhs and rhs differ in the number of reference tokens, otherwise linear in the number of reference tokens.

    "},{"location":"api/json_pointer/operator_eq/#notes","title":"Notes","text":"

    Deprecation

    Overload 2 is deprecated and will be removed in a future major version release.

    "},{"location":"api/json_pointer/operator_eq/#examples","title":"Examples","text":"Example: (1) Comparing JSON pointers

    The example demonstrates comparing JSON pointers.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // different JSON pointers\n    json::json_pointer ptr0;\n    json::json_pointer ptr1(\"\");\n    json::json_pointer ptr2(\"/foo\");\n\n    // compare JSON pointers\n    std::cout << std::boolalpha\n              << \"\\\"\" << ptr0 << \"\\\" == \\\"\" << ptr0 << \"\\\": \" << (ptr0 == ptr0) << '\\n'\n              << \"\\\"\" << ptr0 << \"\\\" == \\\"\" << ptr1 << \"\\\": \" << (ptr0 == ptr1) << '\\n'\n              << \"\\\"\" << ptr1 << \"\\\" == \\\"\" << ptr2 << \"\\\": \" << (ptr1 == ptr2) << '\\n'\n              << \"\\\"\" << ptr2 << \"\\\" == \\\"\" << ptr2 << \"\\\": \" << (ptr2 == ptr2) << std::endl;\n}\n

    Output:

    \"\" == \"\": true\n\"\" == \"\": true\n\"\" == \"/foo\": false\n\"/foo\" == \"/foo\": true\n
    Example: (2) Comparing JSON pointers and strings

    The example demonstrates comparing JSON pointers and strings, and when doing so may raise an exception.

    #include <exception>\n#include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // different JSON pointers\n    json::json_pointer ptr0;\n    json::json_pointer ptr1(\"\");\n    json::json_pointer ptr2(\"/foo\");\n\n    // different strings\n    std::string str0(\"\");\n    std::string str1(\"/foo\");\n    std::string str2(\"bar\");\n\n    // compare JSON pointers and strings\n    std::cout << std::boolalpha\n              << \"\\\"\" << ptr0 << \"\\\" == \\\"\" << str0 << \"\\\": \" << (ptr0 == str0) << '\\n'\n              << \"\\\"\" << str0 << \"\\\" == \\\"\" << ptr1 << \"\\\": \" << (str0 == ptr1) << '\\n'\n              << \"\\\"\" << ptr2 << \"\\\" == \\\"\" << str1 << \"\\\": \" << (ptr2 == str1) << std::endl;\n\n    try\n    {\n        std::cout << \"\\\"\" << str2 << \"\\\" == \\\"\" << ptr2 << \"\\\": \" << (str2 == ptr2) << std::endl;\n    }\n    catch (const json::parse_error& ex)\n    {\n        std::cout << ex.what() << std::endl;\n    }\n}\n

    Output:

    \"\" == \"\": true\n\"\" == \"\": true\n\"/foo\" == \"/foo\": true\n\"bar\" == \"/foo\": [json.exception.parse_error.107] parse error at byte 1: JSON pointer must be empty or begin with '/' - was: 'bar'\n
    "},{"location":"api/json_pointer/operator_eq/#version-history","title":"Version history","text":"
    1. Added in version 2.1.0. Added C++20 member functions in version 3.11.2.
    2. Added for backward compatibility and deprecated in version 3.11.2.
    "},{"location":"api/json_pointer/operator_ne/","title":"nlohmann::json_pointer::operator!=","text":"
    // until C++20\ntemplate<typename RefStringTypeLhs, typename RefStringTypeRhs>\nbool operator!=(\n    const json_pointer<RefStringTypeLhs>& lhs,\n    const json_pointer<RefStringTypeRhs>& rhs) noexcept;  // (1)\n\ntemplate<typename RefStringTypeLhs, typename StringType>\nbool operator!=(\n    const json_pointer<RefStringTypeLhs>& lhs,\n    const StringType& rhs);                               // (2)\n\ntemplate<typename RefStringTypeRhs, typename StringType>\nbool operator!=(\n    const StringType& lhs,\n    const json_pointer<RefStringTypeRhs>& rhs);           // (2)\n
    1. Compares two JSON pointers for inequality by comparing their reference tokens.

    2. Compares a JSON pointer and a string or a string and a JSON pointer for inequality by converting the string to a JSON pointer and comparing the JSON pointers according to 1.

    "},{"location":"api/json_pointer/operator_ne/#template-parameters","title":"Template parameters","text":"RefStringTypeLhs, RefStringTypeRhs the string type of the left-hand side or right-hand side JSON pointer, respectively StringType the string type derived from the json_pointer operand (json_pointer::string_t)"},{"location":"api/json_pointer/operator_ne/#parameters","title":"Parameters","text":"lhs (in) first value to consider rhs (in) second value to consider"},{"location":"api/json_pointer/operator_ne/#return-value","title":"Return value","text":"

    whether the values lhs/*this and rhs are not equal

    "},{"location":"api/json_pointer/operator_ne/#exception-safety","title":"Exception safety","text":"
    1. No-throw guarantee: this function never throws exceptions.
    2. Strong exception safety: if an exception occurs, the original value stays intact.
    "},{"location":"api/json_pointer/operator_ne/#exceptions","title":"Exceptions","text":"
    1. (none)
    2. The function can throw the following exceptions:
    3. Throws parse_error.107 if the given JSON pointer s is nonempty and does not begin with a slash (/); see example below.
    4. Throws parse_error.108 if a tilde (~) in the given JSON pointer s is not followed by 0 (representing ~) or 1 (representing /); see example below.
    "},{"location":"api/json_pointer/operator_ne/#complexity","title":"Complexity","text":"

    Constant if lhs and rhs differ in the number of reference tokens, otherwise linear in the number of reference tokens.

    "},{"location":"api/json_pointer/operator_ne/#notes","title":"Notes","text":"

    Operator overload resolution

    Since C++20 overload resolution will consider the rewritten candidate generated from operator==.

    Deprecation

    Overload 2 is deprecated and will be removed in a future major version release.

    "},{"location":"api/json_pointer/operator_ne/#examples","title":"Examples","text":"Example: (1) Comparing JSON pointers

    The example demonstrates comparing JSON pointers.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // different JSON pointers\n    json::json_pointer ptr0;\n    json::json_pointer ptr1(\"\");\n    json::json_pointer ptr2(\"/foo\");\n\n    // compare JSON pointers\n    std::cout << std::boolalpha\n              << \"\\\"\" << ptr0 << \"\\\" != \\\"\" << ptr0 << \"\\\": \" << (ptr0 != ptr0) << '\\n'\n              << \"\\\"\" << ptr0 << \"\\\" != \\\"\" << ptr1 << \"\\\": \" << (ptr0 != ptr1) << '\\n'\n              << \"\\\"\" << ptr1 << \"\\\" != \\\"\" << ptr2 << \"\\\": \" << (ptr1 != ptr2) << '\\n'\n              << \"\\\"\" << ptr2 << \"\\\" != \\\"\" << ptr2 << \"\\\": \" << (ptr2 != ptr2) << std::endl;\n}\n

    Output:

    \"\" != \"\": false\n\"\" != \"\": false\n\"\" != \"/foo\": true\n\"/foo\" != \"/foo\": false\n
    Example: (2) Comparing JSON pointers and strings

    The example demonstrates comparing JSON pointers and strings, and when doing so may raise an exception.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // different JSON pointers\n    json::json_pointer ptr0;\n    json::json_pointer ptr1(\"\");\n    json::json_pointer ptr2(\"/foo\");\n\n    // different strings\n    std::string str0(\"\");\n    std::string str1(\"/foo\");\n    std::string str2(\"bar\");\n\n    // compare JSON pointers and strings\n    std::cout << std::boolalpha\n              << \"\\\"\" << ptr0 << \"\\\" != \\\"\" << str0 << \"\\\": \" << (ptr0 != str0) << '\\n'\n              << \"\\\"\" << str0 << \"\\\" != \\\"\" << ptr1 << \"\\\": \" << (str0 != ptr1) << '\\n'\n              << \"\\\"\" << ptr2 << \"\\\" != \\\"\" << str1 << \"\\\": \" << (ptr2 != str1) << std::endl;\n\n    try\n    {\n        std::cout << \"\\\"\" << str2 << \"\\\" != \\\"\" << ptr2 << \"\\\": \" << (str2 != ptr2) << std::endl;\n    }\n    catch (const json::parse_error& ex)\n    {\n        std::cout << ex.what() << std::endl;\n    }\n}\n

    Output:

    \"\" != \"\": false\n\"\" != \"\": false\n\"/foo\" != \"/foo\": false\n\"bar\" != \"/foo\": [json.exception.parse_error.107] parse error at byte 1: JSON pointer must be empty or begin with '/' - was: 'bar'\n
    "},{"location":"api/json_pointer/operator_ne/#version-history","title":"Version history","text":"
    1. Added in version 2.1.0.
    2. Added for backward compatibility and deprecated in version 3.11.2.
    "},{"location":"api/json_pointer/operator_slash/","title":"nlohmann::json_pointer::operator/","text":"
    // (1)\njson_pointer operator/(const json_pointer& lhs, const json_pointer& rhs);\n\n// (2)\njson_pointer operator/(const json_pointer& lhs, string_t token);\n\n// (3)\njson_pointer operator/(const json_pointer& lhs, std::size_t array_idx);\n
    1. create a new JSON pointer by appending the right JSON pointer at the end of the left JSON pointer
    2. create a new JSON pointer by appending the unescaped token at the end of the JSON pointer
    3. create a new JSON pointer by appending the array-index-token at the end of the JSON pointer
    "},{"location":"api/json_pointer/operator_slash/#parameters","title":"Parameters","text":"lhs (in) JSON pointer rhs (in) JSON pointer to append token (in) reference token to append array_idx (in) array index to append"},{"location":"api/json_pointer/operator_slash/#return-value","title":"Return value","text":"
    1. a new JSON pointer with rhs appended to lhs
    2. a new JSON pointer with unescaped token appended to lhs
    3. a new JSON pointer with array_idx appended to lhs
    "},{"location":"api/json_pointer/operator_slash/#complexity","title":"Complexity","text":"
    1. Linear in the length of lhs and rhs.
    2. Linear in the length of lhs.
    3. Linear in the length of lhs.
    "},{"location":"api/json_pointer/operator_slash/#examples","title":"Examples","text":"Example

    The example shows the usage of operator/.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON pointer\n    json::json_pointer ptr(\"/foo\");\n\n    // append a JSON Pointer\n    std::cout << \"\\\"\" << ptr / json::json_pointer(\"/bar/baz\") << \"\\\"\\n\";\n\n    // append a string\n    std::cout << \"\\\"\" << ptr / \"fob\" << \"\\\"\\n\";\n\n    // append an array index\n    std::cout << \"\\\"\" << ptr / 42 << \"\\\"\" << std::endl;\n}\n

    Output:

    \"/foo/bar/baz\"\n\"/foo/fob\"\n\"/foo/42\"\n
    "},{"location":"api/json_pointer/operator_slash/#version-history","title":"Version history","text":"
    1. Added in version 3.6.0.
    2. Added in version 3.6.0. Changed type of token to string_t in version 3.11.0.
    3. Added in version 3.6.0.
    "},{"location":"api/json_pointer/operator_slasheq/","title":"nlohmann::json_pointer::operator/=","text":"
    // (1)\njson_pointer& operator/=(const json_pointer& ptr);\n\n// (2)\njson_pointer& operator/=(string_t token);\n\n// (3)\njson_pointer& operator/=(std::size_t array_idx)\n
    1. append another JSON pointer at the end of this JSON pointer
    2. append an unescaped reference token at the end of this JSON pointer
    3. append an array index at the end of this JSON pointer
    "},{"location":"api/json_pointer/operator_slasheq/#parameters","title":"Parameters","text":"ptr (in) JSON pointer to append token (in) reference token to append array_idx (in) array index to append"},{"location":"api/json_pointer/operator_slasheq/#return-value","title":"Return value","text":"
    1. JSON pointer with ptr appended
    2. JSON pointer with token appended without escaping token
    3. JSON pointer with array_idx appended
    "},{"location":"api/json_pointer/operator_slasheq/#complexity","title":"Complexity","text":"
    1. Linear in the length of ptr.
    2. Amortized constant.
    3. Amortized constant.
    "},{"location":"api/json_pointer/operator_slasheq/#examples","title":"Examples","text":"Example

    The example shows the usage of operator/=.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON pointer\n    json::json_pointer ptr(\"/foo\");\n    std::cout << \"\\\"\" << ptr << \"\\\"\\n\";\n\n    // append a JSON Pointer\n    ptr /= json::json_pointer(\"/bar/baz\");\n    std::cout << \"\\\"\" << ptr << \"\\\"\\n\";\n\n    // append a string\n    ptr /= \"fob\";\n    std::cout << \"\\\"\" << ptr << \"\\\"\\n\";\n\n    // append an array index\n    ptr /= 42;\n    std::cout << \"\\\"\" << ptr << \"\\\"\" << std::endl;\n}\n

    Output:

    \"/foo\"\n\"/foo/bar/baz\"\n\"/foo/bar/baz/fob\"\n\"/foo/bar/baz/fob/42\"\n
    "},{"location":"api/json_pointer/operator_slasheq/#version-history","title":"Version history","text":"
    1. Added in version 3.6.0.
    2. Added in version 3.6.0. Changed type of token to string_t in version 3.11.0.
    3. Added in version 3.6.0.
    "},{"location":"api/json_pointer/operator_string_t/","title":"nlohmann::json_pointer::operator string_t","text":"
    operator string_t() const\n

    Return a string representation of the JSON pointer.

    "},{"location":"api/json_pointer/operator_string_t/#return-value","title":"Return value","text":"

    A string representation of the JSON pointer

    "},{"location":"api/json_pointer/operator_string_t/#possible-implementation","title":"Possible implementation","text":"
    operator string_t() const\n{\n    return to_string();\n}\n
    "},{"location":"api/json_pointer/operator_string_t/#notes","title":"Notes","text":"

    Deprecation

    This function is deprecated in favor of to_string and will be removed in a future major version release.

    "},{"location":"api/json_pointer/operator_string_t/#examples","title":"Examples","text":"Example

    The example shows how JSON Pointers can be implicitly converted to strings.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // different JSON Pointers\n    json::json_pointer ptr1(\"/foo/0\");\n    json::json_pointer ptr2(\"/a~1b\");\n\n    // implicit conversion to string\n    std::string s;\n    s += ptr1;\n    s += \"\\n\";\n    s += ptr2;\n\n    std::cout << s << std::endl;\n}\n

    Output:

    /foo/0\n/a~1b\n
    "},{"location":"api/json_pointer/operator_string_t/#see-also","title":"See also","text":"
    • string_t- type for strings
    "},{"location":"api/json_pointer/operator_string_t/#version-history","title":"Version history","text":"
    • Since version 2.0.0.
    • Changed type to string_t and deprecated in version 3.11.0.
    "},{"location":"api/json_pointer/parent_pointer/","title":"nlohmann::json_pointer::parent_pointer","text":"
    json_pointer parent_pointer() const;\n

    Returns the parent of this JSON pointer.

    "},{"location":"api/json_pointer/parent_pointer/#return-value","title":"Return value","text":"

    Parent of this JSON pointer; in case this JSON pointer is the root, the root itself is returned.

    "},{"location":"api/json_pointer/parent_pointer/#complexity","title":"Complexity","text":"

    Linear in the length of the JSON pointer.

    "},{"location":"api/json_pointer/parent_pointer/#examples","title":"Examples","text":"Example

    The example shows the result of parent_pointer for different JSON Pointers.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // different JSON Pointers\n    json::json_pointer ptr1(\"\");\n    json::json_pointer ptr2(\"/foo\");\n    json::json_pointer ptr3(\"/foo/0\");\n\n    // call parent_pointer()\n    std::cout << std::boolalpha\n              << \"parent of \\\"\" << ptr1 << \"\\\" is \\\"\" << ptr1.parent_pointer() << \"\\\"\\n\"\n              << \"parent of \\\"\" << ptr2 << \"\\\" is \\\"\" << ptr2.parent_pointer() << \"\\\"\\n\"\n              << \"parent of \\\"\" << ptr3 << \"\\\" is \\\"\" << ptr3.parent_pointer() << \"\\\"\" << std::endl;\n}\n

    Output:

    parent of \"\" is \"\"\nparent of \"/foo\" is \"\"\nparent of \"/foo/0\" is \"/foo\"\n
    "},{"location":"api/json_pointer/parent_pointer/#version-history","title":"Version history","text":"

    Added in version 3.6.0.

    "},{"location":"api/json_pointer/pop_back/","title":"nlohmann::json_pointer::pop_back","text":"
    void pop_back();\n

    Remove last reference token.

    "},{"location":"api/json_pointer/pop_back/#exceptions","title":"Exceptions","text":"

    Throws out_of_range.405 if JSON pointer has no parent.

    "},{"location":"api/json_pointer/pop_back/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/json_pointer/pop_back/#examples","title":"Examples","text":"Example

    The example shows the usage of pop_back.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create empty JSON Pointer\n    json::json_pointer ptr(\"/foo/bar/baz\");\n    std::cout << \"\\\"\" << ptr << \"\\\"\\n\";\n\n    // call pop_back()\n    ptr.pop_back();\n    std::cout << \"\\\"\" << ptr << \"\\\"\\n\";\n\n    ptr.pop_back();\n    std::cout << \"\\\"\" << ptr << \"\\\"\\n\";\n\n    ptr.pop_back();\n    std::cout << \"\\\"\" << ptr << \"\\\"\\n\";\n}\n

    Output:

    \"/foo/bar/baz\"\n\"/foo/bar\"\n\"/foo\"\n\"\"\n
    "},{"location":"api/json_pointer/pop_back/#version-history","title":"Version history","text":"

    Added in version 3.6.0.

    "},{"location":"api/json_pointer/push_back/","title":"nlohmann::json_pointer::push_back","text":"
    void push_back(const string_t& token);\n\nvoid push_back(string_t&& token);\n

    Append an unescaped token at the end of the reference pointer.

    "},{"location":"api/json_pointer/push_back/#parameters","title":"Parameters","text":"token (in) token to add"},{"location":"api/json_pointer/push_back/#complexity","title":"Complexity","text":"

    Amortized constant.

    "},{"location":"api/json_pointer/push_back/#examples","title":"Examples","text":"Example

    The example shows the result of push_back for different JSON Pointers.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create empty JSON Pointer\n    json::json_pointer ptr;\n    std::cout << \"\\\"\" << ptr << \"\\\"\\n\";\n\n    // call push_back()\n    ptr.push_back(\"foo\");\n    std::cout << \"\\\"\" << ptr << \"\\\"\\n\";\n\n    ptr.push_back(\"0\");\n    std::cout << \"\\\"\" << ptr << \"\\\"\\n\";\n\n    ptr.push_back(\"bar\");\n    std::cout << \"\\\"\" << ptr << \"\\\"\\n\";\n}\n

    Output:

    \"\"\n\"/foo\"\n\"/foo/0\"\n\"/foo/0/bar\"\n
    "},{"location":"api/json_pointer/push_back/#version-history","title":"Version history","text":"
    • Added in version 3.6.0.
    • Changed type of token to string_t in version 3.11.0.
    "},{"location":"api/json_pointer/string_t/","title":"nlohmann::json_pointer::string_t","text":"
    using string_t = RefStringType;\n

    The string type used for the reference tokens making up the JSON pointer.

    See basic_json::string_t for more information.

    "},{"location":"api/json_pointer/string_t/#examples","title":"Examples","text":"Example

    The example shows the type string_t and its relation to basic_json::string_t.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    json::json_pointer::string_t s = \"This is a string.\";\n\n    std::cout << s << std::endl;\n\n    std::cout << std::boolalpha << std::is_same<json::json_pointer::string_t, json::string_t>::value << std::endl;\n}\n

    Output:

    This is a string.\ntrue\n
    "},{"location":"api/json_pointer/string_t/#version-history","title":"Version history","text":"
    • Added in version 3.11.0.
    "},{"location":"api/json_pointer/to_string/","title":"nlohmann::json_pointer::to_string","text":"
    string_t to_string() const;\n

    Return a string representation of the JSON pointer.

    "},{"location":"api/json_pointer/to_string/#return-value","title":"Return value","text":"

    A string representation of the JSON pointer

    "},{"location":"api/json_pointer/to_string/#notes","title":"Notes","text":"

    For each JSON pointer ptr, it holds:

    ptr == json_pointer(ptr.to_string());\n
    "},{"location":"api/json_pointer/to_string/#examples","title":"Examples","text":"Example

    The example shows the result of to_string.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // different JSON Pointers\n    json::json_pointer ptr1(\"\");\n    json::json_pointer ptr2(\"/foo\");\n    json::json_pointer ptr3(\"/foo/0\");\n    json::json_pointer ptr4(\"/\");\n    json::json_pointer ptr5(\"/a~1b\");\n    json::json_pointer ptr6(\"/c%d\");\n    json::json_pointer ptr7(\"/e^f\");\n    json::json_pointer ptr8(\"/g|h\");\n    json::json_pointer ptr9(\"/i\\\\j\");\n    json::json_pointer ptr10(\"/k\\\"l\");\n    json::json_pointer ptr11(\"/ \");\n    json::json_pointer ptr12(\"/m~0n\");\n\n    std::cout << \"\\\"\" << ptr1.to_string() << \"\\\"\\n\"\n              << \"\\\"\" << ptr2.to_string() << \"\\\"\\n\"\n              << \"\\\"\" << ptr3.to_string() << \"\\\"\\n\"\n              << \"\\\"\" << ptr4.to_string() << \"\\\"\\n\"\n              << \"\\\"\" << ptr5.to_string() << \"\\\"\\n\"\n              << \"\\\"\" << ptr6.to_string() << \"\\\"\\n\"\n              << \"\\\"\" << ptr7.to_string() << \"\\\"\\n\"\n              << \"\\\"\" << ptr8.to_string() << \"\\\"\\n\"\n              << \"\\\"\" << ptr9.to_string() << \"\\\"\\n\"\n              << \"\\\"\" << ptr10.to_string() << \"\\\"\\n\"\n              << \"\\\"\" << ptr11.to_string() << \"\\\"\\n\"\n              << \"\\\"\" << ptr12.to_string() << \"\\\"\" << std::endl;\n}\n

    Output:

    \"\"\n\"/foo\"\n\"/foo/0\"\n\"/\"\n\"/a~1b\"\n\"/c%d\"\n\"/e^f\"\n\"/g|h\"\n\"/i\\j\"\n\"/k\"l\"\n\"/ \"\n\"/m~0n\"\n
    "},{"location":"api/json_pointer/to_string/#version-history","title":"Version history","text":"
    • Since version 2.0.0.
    • Changed return type to string_t in version 3.11.0.
    "},{"location":"api/json_sax/","title":"nlohmann::json_sax","text":"
    template<typename BasicJsonType>\nstruct json_sax;\n

    This class describes the SAX interface used by sax_parse. Each function is called in different situations while the input is parsed. The boolean return value informs the parser whether to continue processing the input.

    "},{"location":"api/json_sax/#template-parameters","title":"Template parameters","text":"BasicJsonType a specialization of basic_json"},{"location":"api/json_sax/#member-types","title":"Member types","text":"
    • number_integer_t - BasicJsonType's type for numbers (integer)
    • number_unsigned_t - BasicJsonType's type for numbers (unsigned)
    • number_float_t - BasicJsonType's type for numbers (floating-point)
    • string_t - BasicJsonType's type for strings
    • binary_t - BasicJsonType's type for binary arrays
    "},{"location":"api/json_sax/#member-functions","title":"Member functions","text":"
    • binary (virtual) - a binary value was read
    • boolean (virtual) - a boolean value was read
    • end_array (virtual) - the end of an array was read
    • end_object (virtual) - the end of an object was read
    • key (virtual) - an object key was read
    • null (virtual) - a null value was read
    • number_float (virtual) - a floating-point number was read
    • number_integer (virtual) - an integer number was read
    • number_unsigned (virtual) - an unsigned integer number was read
    • parse_error (virtual) - a parse error occurred
    • start_array (virtual) - the beginning of an array was read
    • start_object (virtual) - the beginning of an object was read
    • string (virtual) - a string value was read
    "},{"location":"api/json_sax/#version-history","title":"Version history","text":"
    • Added in version 3.2.0.
    • Support for binary values (binary_t, binary) added in version 3.8.0.
    "},{"location":"api/json_sax/binary/","title":"nlohmann::json_sax::binary","text":"
    virtual bool binary(binary_t& val) = 0;\n

    A binary value was read.

    "},{"location":"api/json_sax/binary/#parameters","title":"Parameters","text":"val (in) binary value"},{"location":"api/json_sax/binary/#return-value","title":"Return value","text":"

    Whether parsing should proceed.

    "},{"location":"api/json_sax/binary/#notes","title":"Notes","text":"

    It is safe to move the passed binary value.

    "},{"location":"api/json_sax/binary/#examples","title":"Examples","text":"Example

    The example below shows how the SAX interface is used.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // CBOR byte string\n    std::vector<std::uint8_t> vec = {{0x44, 0xcA, 0xfe, 0xba, 0xbe}};\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse CBOR\n    bool result = json::sax_parse(vec, &sec, json::input_format_t::cbor);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

    Output:

    binary(val=[...])\n\nresult: true\n
    "},{"location":"api/json_sax/binary/#version-history","title":"Version history","text":"
    • Added in version 3.8.0.
    "},{"location":"api/json_sax/boolean/","title":"nlohmann::json_sax::boolean","text":"
    virtual bool boolean(bool val) = 0;\n

    A boolean value was read.

    "},{"location":"api/json_sax/boolean/#parameters","title":"Parameters","text":"val (in) boolean value"},{"location":"api/json_sax/boolean/#return-value","title":"Return value","text":"

    Whether parsing should proceed.

    "},{"location":"api/json_sax/boolean/#examples","title":"Examples","text":"Example

    The example below shows how the SAX interface is used.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

    Output:

    start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
    "},{"location":"api/json_sax/boolean/#version-history","title":"Version history","text":"
    • Added in version 3.2.0.
    "},{"location":"api/json_sax/end_array/","title":"nlohmann::json_sax::end_array","text":"
    virtual bool end_array() = 0;\n

    The end of an array was read.

    "},{"location":"api/json_sax/end_array/#return-value","title":"Return value","text":"

    Whether parsing should proceed.

    "},{"location":"api/json_sax/end_array/#examples","title":"Examples","text":"Example

    The example below shows how the SAX interface is used.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

    Output:

    start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
    "},{"location":"api/json_sax/end_array/#version-history","title":"Version history","text":"
    • Added in version 3.2.0.
    "},{"location":"api/json_sax/end_object/","title":"nlohmann::json_sax::end_object","text":"
    virtual bool end_object() = 0;\n

    The end of an object was read.

    "},{"location":"api/json_sax/end_object/#return-value","title":"Return value","text":"

    Whether parsing should proceed.

    "},{"location":"api/json_sax/end_object/#examples","title":"Examples","text":"Example

    The example below shows how the SAX interface is used.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

    Output:

    start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
    "},{"location":"api/json_sax/end_object/#version-history","title":"Version history","text":"
    • Added in version 3.2.0.
    "},{"location":"api/json_sax/key/","title":"nlohmann::json_sax::key","text":"
    virtual bool key(string_t& val) = 0;\n

    An object key was read.

    "},{"location":"api/json_sax/key/#parameters","title":"Parameters","text":"val (in) object key"},{"location":"api/json_sax/key/#return-value","title":"Return value","text":"

    Whether parsing should proceed.

    "},{"location":"api/json_sax/key/#notes","title":"Notes","text":"

    It is safe to move the passed object key value.

    "},{"location":"api/json_sax/key/#examples","title":"Examples","text":"Example

    The example below shows how the SAX interface is used.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

    Output:

    start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
    "},{"location":"api/json_sax/key/#version-history","title":"Version history","text":"
    • Added in version 3.2.0.
    "},{"location":"api/json_sax/null/","title":"nlohmann::json_sax::null","text":"
    virtual bool null() = 0;\n

    A null value was read.

    "},{"location":"api/json_sax/null/#return-value","title":"Return value","text":"

    Whether parsing should proceed.

    "},{"location":"api/json_sax/null/#examples","title":"Examples","text":"Example

    The example below shows how the SAX interface is used.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

    Output:

    start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
    "},{"location":"api/json_sax/null/#version-history","title":"Version history","text":"
    • Added in version 3.2.0.
    "},{"location":"api/json_sax/number_float/","title":"nlohmann::json_sax::number_float","text":"
    virtual bool number_float(number_float_t val, const string_t& s) = 0;\n

    A floating-point number was read.

    "},{"location":"api/json_sax/number_float/#parameters","title":"Parameters","text":"val (in) floating-point value s (in) string representation of the original input"},{"location":"api/json_sax/number_float/#return-value","title":"Return value","text":"

    Whether parsing should proceed.

    "},{"location":"api/json_sax/number_float/#examples","title":"Examples","text":"Example

    The example below shows how the SAX interface is used.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

    Output:

    start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
    "},{"location":"api/json_sax/number_float/#version-history","title":"Version history","text":"
    • Added in version 3.2.0.
    "},{"location":"api/json_sax/number_integer/","title":"nlohmann::json_sax::number_integer","text":"
    virtual bool number_integer(number_integer_t val) = 0;\n

    An integer number was read.

    "},{"location":"api/json_sax/number_integer/#parameters","title":"Parameters","text":"val (in) integer value"},{"location":"api/json_sax/number_integer/#return-value","title":"Return value","text":"

    Whether parsing should proceed.

    "},{"location":"api/json_sax/number_integer/#examples","title":"Examples","text":"Example

    The example below shows how the SAX interface is used.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

    Output:

    start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
    "},{"location":"api/json_sax/number_integer/#version-history","title":"Version history","text":"
    • Added in version 3.2.0.
    "},{"location":"api/json_sax/number_unsigned/","title":"nlohmann::json_sax::number_unsigned","text":"
    virtual bool number_unsigned(number_unsigned_t val) = 0;\n

    An unsigned integer number was read.

    "},{"location":"api/json_sax/number_unsigned/#parameters","title":"Parameters","text":"val (in) unsigned integer value"},{"location":"api/json_sax/number_unsigned/#return-value","title":"Return value","text":"

    Whether parsing should proceed.

    "},{"location":"api/json_sax/number_unsigned/#examples","title":"Examples","text":"Example

    The example below shows how the SAX interface is used.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

    Output:

    start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
    "},{"location":"api/json_sax/number_unsigned/#version-history","title":"Version history","text":"
    • Added in version 3.2.0.
    "},{"location":"api/json_sax/parse_error/","title":"nlohmann::json_sax::parse_error","text":"
    virtual bool parse_error(std::size_t position,\n                         const std::string& last_token,\n                         const detail::exception& ex) = 0;\n

    A parse error occurred.

    "},{"location":"api/json_sax/parse_error/#parameters","title":"Parameters","text":"position (in) the position in the input where the error occurs last_token (in) the last read token ex (in) an exception object describing the error"},{"location":"api/json_sax/parse_error/#return-value","title":"Return value","text":"

    Whether parsing should proceed (must return false).

    "},{"location":"api/json_sax/parse_error/#examples","title":"Examples","text":"Example

    The example below shows how the SAX interface is used.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

    Output:

    start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
    "},{"location":"api/json_sax/parse_error/#version-history","title":"Version history","text":"
    • Added in version 3.2.0.
    "},{"location":"api/json_sax/start_array/","title":"nlohmann::json_sax::start_array","text":"
    virtual bool start_array(std::size_t elements) = 0;\n

    The beginning of an array was read.

    "},{"location":"api/json_sax/start_array/#parameters","title":"Parameters","text":"elements (in) number of object elements or -1 if unknown"},{"location":"api/json_sax/start_array/#return-value","title":"Return value","text":"

    Whether parsing should proceed.

    "},{"location":"api/json_sax/start_array/#notes","title":"Notes","text":"

    Binary formats may report the number of elements.

    "},{"location":"api/json_sax/start_array/#examples","title":"Examples","text":"Example

    The example below shows how the SAX interface is used.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

    Output:

    start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
    "},{"location":"api/json_sax/start_array/#version-history","title":"Version history","text":"
    • Added in version 3.2.0.
    "},{"location":"api/json_sax/start_object/","title":"nlohmann::json_sax::start_object","text":"
    virtual bool start_object(std::size_t elements) = 0;\n

    The beginning of an object was read.

    "},{"location":"api/json_sax/start_object/#parameters","title":"Parameters","text":"elements (in) number of object elements or -1 if unknown"},{"location":"api/json_sax/start_object/#return-value","title":"Return value","text":"

    Whether parsing should proceed.

    "},{"location":"api/json_sax/start_object/#notes","title":"Notes","text":"

    Binary formats may report the number of elements.

    "},{"location":"api/json_sax/start_object/#examples","title":"Examples","text":"Example

    The example below shows how the SAX interface is used.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

    Output:

    start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
    "},{"location":"api/json_sax/start_object/#version-history","title":"Version history","text":"
    • Added in version 3.2.0.
    "},{"location":"api/json_sax/string/","title":"nlohmann::json_sax::string","text":"
    virtual bool string(string_t& val) = 0;\n

    A string value was read.

    "},{"location":"api/json_sax/string/#parameters","title":"Parameters","text":"val (in) string value"},{"location":"api/json_sax/string/#return-value","title":"Return value","text":"

    Whether parsing should proceed.

    "},{"location":"api/json_sax/string/#notes","title":"Notes","text":"

    It is safe to move the passed string value.

    "},{"location":"api/json_sax/string/#examples","title":"Examples","text":"Example

    The example below shows how the SAX interface is used.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

    Output:

    start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
    "},{"location":"api/json_sax/string/#version-history","title":"Version history","text":"
    • Added in version 3.2.0.
    "},{"location":"api/macros/","title":"Macros","text":"

    Some aspects of the library can be configured by defining preprocessor macros before including the json.hpp header. See also the macro overview page.

    "},{"location":"api/macros/#runtime-assertions","title":"Runtime assertions","text":"
    • JSON_ASSERT(x) - control behavior of runtime assertions
    "},{"location":"api/macros/#exceptions","title":"Exceptions","text":"
    • JSON_CATCH_USER(exception)JSON_THROW_USER(exception)JSON_TRY_USER - control exceptions
    • JSON_DIAGNOSTICS - control extended diagnostics
    • JSON_DIAGNOSTIC_POSITIONS - access positions of elements
    • JSON_NOEXCEPTION - switch off exceptions
    "},{"location":"api/macros/#language-support","title":"Language support","text":"
    • JSON_HAS_CPP_11JSON_HAS_CPP_14JSON_HAS_CPP_17JSON_HAS_CPP_20 - set supported C++ standard
    • JSON_HAS_FILESYSTEMJSON_HAS_EXPERIMENTAL_FILESYSTEM - control std::filesystem support
    • JSON_HAS_RANGES - control std::ranges support
    • JSON_HAS_THREE_WAY_COMPARISON - control 3-way comparison support
    • JSON_NO_IO - switch off functions relying on certain C++ I/O headers
    • JSON_SKIP_UNSUPPORTED_COMPILER_CHECK - do not warn about unsupported compilers
    • JSON_USE_GLOBAL_UDLS - place user-defined string literals (UDLs) into the global namespace
    "},{"location":"api/macros/#library-version","title":"Library version","text":"
    • JSON_SKIP_LIBRARY_VERSION_CHECK - skip library version check
    • NLOHMANN_JSON_VERSION_MAJORNLOHMANN_JSON_VERSION_MINORNLOHMANN_JSON_VERSION_PATCH - library version information
    "},{"location":"api/macros/#library-namespace","title":"Library namespace","text":"
    • NLOHMANN_JSON_NAMESPACE - full name of the nlohmann namespace
    • NLOHMANN_JSON_NAMESPACE_BEGINNLOHMANN_JSON_NAMESPACE_END - open and close the library namespace
    • NLOHMANN_JSON_NAMESPACE_NO_VERSION - disable the version component of the inline namespace
    "},{"location":"api/macros/#type-conversions","title":"Type conversions","text":"
    • JSON_DISABLE_ENUM_SERIALIZATION - switch off default serialization/deserialization functions for enums
    • JSON_USE_IMPLICIT_CONVERSIONS - control implicit conversions
    "},{"location":"api/macros/#comparison-behavior","title":"Comparison behavior","text":"
    • JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON - control comparison of discarded values
    "},{"location":"api/macros/#serializationdeserialization-macros","title":"Serialization/deserialization macros","text":""},{"location":"api/macros/#enums","title":"Enums","text":"
    • NLOHMANN_JSON_SERIALIZE_ENUM - serialize/deserialize an enum
    "},{"location":"api/macros/#classes-and-structs","title":"Classes and structs","text":"
    • NLOHMANN_DEFINE_TYPE_INTRUSIVE - serialize/deserialize a non-derived class with private members
    • NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT - serialize/deserialize a non-derived class with private members; uses default values
    • NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE - serialize a non-derived class with private members
    • NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE - serialize/deserialize a non-derived class
    • NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT - serialize/deserialize a non-derived class; uses default values
    • NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE - serialize a non-derived class

    • NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE - serialize/deserialize a derived class with private members

    • NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT - serialize/deserialize a derived class with private members; uses default values
    • NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE - serialize a derived class with private members
    • NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE - serialize/deserialize a derived class
    • NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT - serialize/deserialize a derived class; uses default values
    • NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE - serialize a derived class
    "},{"location":"api/macros/json_assert/","title":"JSON_ASSERT","text":"
    #define JSON_ASSERT(x) /* value */\n

    This macro controls which code is executed for runtime assertions of the library.

    "},{"location":"api/macros/json_assert/#parameters","title":"Parameters","text":"x (in) expression of scalar type"},{"location":"api/macros/json_assert/#default-definition","title":"Default definition","text":"

    The default value is assert(x).

    #define JSON_ASSERT(x) assert(x)\n

    Therefore, assertions can be switched off by defining NDEBUG.

    "},{"location":"api/macros/json_assert/#notes","title":"Notes","text":"
    • The library uses numerous assertions to guarantee invariants and to abort in case of otherwise undefined behavior (e.g., when calling operator[] with a missing object key on a const object). See page runtime assertions for more information.
    • Defining the macro to code that does not call std::abort may leave the library in an undefined state.
    • The macro is undefined outside the library.
    "},{"location":"api/macros/json_assert/#examples","title":"Examples","text":"Example 1: default behavior

    The following code will trigger an assertion at runtime:

    #include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    const json j = {{\"key\", \"value\"}};\n    auto v = j[\"missing\"];\n}\n

    Output:

    Assertion failed: (m_value.object->find(key) != m_value.object->end()), function operator[], file json.hpp, line 2144.\n
    Example 2: user-defined behavior

    The assertion reporting can be changed by defining JSON_ASSERT(x) differently.

    #include <cstdio>\n#include <cstdlib>\n#define JSON_ASSERT(x) if(!(x)){fprintf(stderr, \"assertion error in %s\\n\", __FUNCTION__); std::abort();}\n\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    const json j = {{\"key\", \"value\"}};\n    auto v = j[\"missing\"];\n}\n

    Output:

    assertion error in operator[]\n
    "},{"location":"api/macros/json_assert/#see-also","title":"See also","text":"
    • Runtime Assertions - overview documentation
    "},{"location":"api/macros/json_assert/#version-history","title":"Version history","text":"
    • Added in version 3.9.0.
    "},{"location":"api/macros/json_diagnostic_positions/","title":"JSON_DIAGNOSTIC_POSITIONS","text":"
    #define JSON_DIAGNOSTIC_POSITIONS /* value */\n

    This macro enables position diagnostics for generated JSON objects.

    When enabled, two new member functions start_pos() and end_pos() are added to basic_json values. If the value was created by calling theparse function, then these functions allow to query the byte positions of the value in the input it was parsed from. In case the value was constructed by other means, std::string::npos is returned.

    start_pos() returns the position of the first character of a given value in the original JSON string, while end_pos() returns the position of the character following the last character. For objects and arrays, the first and last characters correspond to the opening or closing braces/brackets, respectively. For primitive values, the first and last character represent the opening and closing quotes (strings) or the first and last character of the field's numerical or predefined value (true, false, null), respectively.

    JSON type return value start_pos() return value end_pos() object position of the opening { position after the closing } array position of the opening [ position after the closing ] string position of the opening \" position after the closing \" number position of the first character position after the last character boolean position of t for true and f for false position after e null position of n position after l

    Given the above, end_pos()-start_pos() for a JSON value provides the length of the parsed JSON string for that value, including the opening or closing braces, brackets, or quotes.

    Note that enabling this macro increases the size of every JSON value by two std::size_t fields and adds slight runtime overhead to parsing, copying JSON value objects, and the generation of error messages for exceptions. It also causes these values to be reported in those error messages.

    "},{"location":"api/macros/json_diagnostic_positions/#default-definition","title":"Default definition","text":"

    The default value is 0 (position diagnostics are switched off).

    #define JSON_DIAGNOSTIC_POSITIONS 0\n

    When the macro is not defined, the library will define it to its default value.

    "},{"location":"api/macros/json_diagnostic_positions/#notes","title":"Notes","text":"

    CMake option

    Diagnostic positions can also be controlled with the CMake option JSON_Diagnostic_Positions (OFF by default) which defines JSON_DIAGNOSTIC_POSITIONS accordingly.

    Availability

    Diagnostic positions are only available if the value was created by the parse function. The sax_parse function or all other means to create a JSON value do not set the diagnostic positions and start_pos() and end_pos() will only return std::string::npos for these values.

    Invalidation

    The returned positions are only valid as long as the JSON value is not changed. The positions are not updated when the JSON value is changed.

    "},{"location":"api/macros/json_diagnostic_positions/#examples","title":"Examples","text":"Example: retrieving positions
    #include <iostream>\n\n#define JSON_DIAGNOSTIC_POSITIONS 1\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::string json_string = R\"(\n    {\n        \"address\": {\n            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\n    }\n    )\";\n    json j = json::parse(json_string);\n\n    std::cout << \"Root diagnostic positions: \\n\";\n    std::cout << \"\\tstart_pos: \" << j.start_pos() << '\\n';\n    std::cout << \"\\tend_pos:\" << j.end_pos() << \"\\n\";\n    std::cout << \"Original string: \\n\";\n    std::cout << \"{\\n        \\\"address\\\": {\\n            \\\"street\\\": \\\"Fake Street\\\",\\n            \\\"housenumber\\\": 1\\n        }\\n    }\" << \"\\n\";\n    std::cout << \"Parsed string: \\n\";\n    std::cout << json_string.substr(j.start_pos(), j.end_pos() - j.start_pos()) << \"\\n\\n\";\n\n    std::cout << \"address diagnostic positions: \\n\";\n    std::cout << \"\\tstart_pos:\" << j[\"address\"].start_pos() << '\\n';\n    std::cout << \"\\tend_pos:\" << j[\"address\"].end_pos() << \"\\n\\n\";\n    std::cout << \"Original string: \\n\";\n    std::cout << \"{            \\\"street\\\": \\\"Fake Street\\\",\\n            \\\"housenumber\\\": 1\\n        }\" << \"\\n\";\n    std::cout << \"Parsed string: \\n\";\n    std::cout << json_string.substr(j[\"address\"].start_pos(), j[\"address\"].end_pos() - j[\"address\"].start_pos()) << \"\\n\\n\";\n\n    std::cout << \"street diagnostic positions: \\n\";\n    std::cout << \"\\tstart_pos:\" << j[\"address\"][\"street\"].start_pos() << '\\n';\n    std::cout << \"\\tend_pos:\" << j[\"address\"][\"street\"].end_pos() << \"\\n\\n\";\n    std::cout << \"Original string: \\n\";\n    std::cout << \"\\\"Fake Street\\\"\" << \"\\n\";\n    std::cout << \"Parsed string: \\n\";\n    std::cout << json_string.substr(j[\"address\"][\"street\"].start_pos(), j[\"address\"][\"street\"].end_pos() - j[\"address\"][\"street\"].start_pos()) << \"\\n\\n\";\n\n    std::cout << \"housenumber diagnostic positions: \\n\";\n    std::cout << \"\\tstart_pos:\" << j[\"address\"][\"housenumber\"].start_pos() << '\\n';\n    std::cout << \"\\tend_pos:\" << j[\"address\"][\"housenumber\"].end_pos() << \"\\n\\n\";\n    std::cout << \"Original string: \\n\";\n    std::cout << \"1\" << \"\\n\";\n    std::cout << \"Parsed string: \\n\";\n    std::cout << json_string.substr(j[\"address\"][\"housenumber\"].start_pos(), j[\"address\"][\"housenumber\"].end_pos() - j[\"address\"][\"housenumber\"].start_pos()) << \"\\n\\n\";\n}\n

    Output:

    Root diagnostic positions: \n    start_pos: 5\n    end_pos:109\nOriginal string: \n{\n        \"address\": {\n            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\n    }\nParsed string: \n{\n        \"address\": {\n            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\n    }\n\naddress diagnostic positions: \n    start_pos:26\n    end_pos:103\n\nOriginal string: \n{            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\nParsed string: \n{\n            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\n\nstreet diagnostic positions: \n    start_pos:50\n    end_pos:63\n\nOriginal string: \n\"Fake Street\"\nParsed string: \n\"Fake Street\"\n\nhousenumber diagnostic positions: \n    start_pos:92\n    end_pos:93\n\nOriginal string: \n1\nParsed string: \n1\n

    The output shows the start/end positions of all the objects and fields in the JSON string.

    Example 2: using only diagnostic positions in exceptions
    #include <iostream>\n\n#define JSON_DIAGNOSTIC_POSITIONS 1\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n/* Demonstration of type error exception with diagnostic postions support enabled */\nint main()\n{\n    //Invalid json string - housenumber type must be int instead of string\n    const std::string json_invalid_string = R\"(\n    {\n        \"address\": {\n            \"street\": \"Fake Street\",\n            \"housenumber\": \"1\"\n        }\n    }\n    )\";\n    json j = json::parse(json_invalid_string);\n    try\n    {\n        int housenumber = j[\"address\"][\"housenumber\"];\n        std::cout << housenumber;\n    }\n    catch (const json::exception& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    [json.exception.type_error.302] (bytes 92-95) type must be number, but is string\n
    The output shows the exception with start/end positions only.\n
    Example 3: using extended diagnostics with positions enabled in exceptions
    #include <iostream>\n\n#define JSON_DIAGNOSTICS 1\n#define JSON_DIAGNOSTIC_POSITIONS 1\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n/* Demonstration of type error exception with diagnostic postions support enabled */\nint main()\n{\n    //Invalid json string - housenumber type must be int instead of string\n    const std::string json_invalid_string = R\"(\n    {\n        \"address\": {\n            \"street\": \"Fake Street\",\n            \"housenumber\": \"1\"\n        }\n    }\n    )\";\n    json j = json::parse(json_invalid_string);\n    try\n    {\n        int housenumber = j[\"address\"][\"housenumber\"];\n        std::cout << housenumber;\n    }\n    catch (const json::exception& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    [json.exception.type_error.302] (/address/housenumber) (bytes 92-95) type must be number, but is string\n
    The output shows the exception with diagnostic path info and start/end positions.\n
    "},{"location":"api/macros/json_diagnostic_positions/#see-also","title":"See also","text":"
    • JSON_Diagnostic_Positions - CMake option to control the macro
    • JSON_DIAGNOSTICS - macro to control extended diagnostics
    "},{"location":"api/macros/json_diagnostic_positions/#version-history","title":"Version history","text":"
    • Added in version 3.12.0.
    "},{"location":"api/macros/json_diagnostics/","title":"JSON_DIAGNOSTICS","text":"
    #define JSON_DIAGNOSTICS /* value */\n

    This macro enables extended diagnostics for exception messages. Possible values are 1 to enable or 0 to disable (default).

    When enabled, exception messages contain a JSON Pointer to the JSON value that triggered the exception. Note that enabling this macro increases the size of every JSON value by one pointer and adds some runtime overhead.

    "},{"location":"api/macros/json_diagnostics/#default-definition","title":"Default definition","text":"

    The default value is 0 (extended diagnostics are switched off).

    #define JSON_DIAGNOSTICS 0\n

    When the macro is not defined, the library will define it to its default value.

    "},{"location":"api/macros/json_diagnostics/#notes","title":"Notes","text":"

    ABI compatibility

    As of version 3.11.0, this macro is no longer required to be defined consistently throughout a codebase to avoid One Definition Rule (ODR) violations, as the value of this macro is encoded in the namespace, resulting in distinct symbol names.

    This allows different parts of a codebase to use different versions or configurations of this library without causing improper behavior.

    Where possible, it is still recommended that all code define this the same way for maximum interoperability.

    CMake option

    Diagnostic messages can also be controlled with the CMake option JSON_Diagnostics (OFF by default) which defines JSON_DIAGNOSTICS accordingly.

    "},{"location":"api/macros/json_diagnostics/#examples","title":"Examples","text":"Example 1: default behavior
    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    json j;\n    j[\"address\"][\"street\"] = \"Fake Street\";\n    j[\"address\"][\"housenumber\"] = \"12\";\n\n    try\n    {\n        int housenumber = j[\"address\"][\"housenumber\"];\n    }\n    catch (const json::exception& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    [json.exception.type_error.302] type must be number, but is string\n

    This exception can be hard to debug if storing the value \"12\" and accessing it is further apart.

    Example 2: extended diagnostic messages
    #include <iostream>\n\n# define JSON_DIAGNOSTICS 1\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    json j;\n    j[\"address\"][\"street\"] = \"Fake Street\";\n    j[\"address\"][\"housenumber\"] = \"12\";\n\n    try\n    {\n        int housenumber = j[\"address\"][\"housenumber\"];\n    }\n    catch (const json::exception& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    [json.exception.type_error.302] (/address/housenumber) type must be number, but is string\n

    Now the exception message contains a JSON Pointer /address/housenumber that indicates which value has the wrong type.

    Example 3: using only diagnostic positions in exceptions
    #include <iostream>\n\n#define JSON_DIAGNOSTIC_POSITIONS 1\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n/* Demonstration of type error exception with diagnostic postions support enabled */\nint main()\n{\n    //Invalid json string - housenumber type must be int instead of string\n    const std::string json_invalid_string = R\"(\n    {\n        \"address\": {\n            \"street\": \"Fake Street\",\n            \"housenumber\": \"1\"\n        }\n    }\n    )\";\n    json j = json::parse(json_invalid_string);\n    try\n    {\n        int housenumber = j[\"address\"][\"housenumber\"];\n        std::cout << housenumber;\n    }\n    catch (const json::exception& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    [json.exception.type_error.302] (bytes 92-95) type must be number, but is string\n
    The output shows the exception with start/end positions only.

    "},{"location":"api/macros/json_diagnostics/#see-also","title":"See also","text":"
    • JSON_Diagnostics - CMake option to control the macro
    • JSON_DIAGNOSTIC_POSITIONS - macro to access positions of elements
    "},{"location":"api/macros/json_diagnostics/#version-history","title":"Version history","text":"
    • Added in version 3.10.0.
    • As of version 3.11.0 the definition is allowed to vary between translation units.
    "},{"location":"api/macros/json_disable_enum_serialization/","title":"JSON_DISABLE_ENUM_SERIALIZATION","text":"
    #define JSON_DISABLE_ENUM_SERIALIZATION /* value */\n

    When defined to 1, default serialization and deserialization functions for enums are excluded and have to be provided by the user, for example, using NLOHMANN_JSON_SERIALIZE_ENUM (see arbitrary type conversions for more details).

    Parsing or serializing an enum will result in a compiler error.

    This works for both unscoped and scoped enums.

    "},{"location":"api/macros/json_disable_enum_serialization/#default-definition","title":"Default definition","text":"

    The default value is 0.

    #define JSON_DISABLE_ENUM_SERIALIZATION 0\n
    "},{"location":"api/macros/json_disable_enum_serialization/#notes","title":"Notes","text":"

    CMake option

    Enum serialization can also be controlled with the CMake option JSON_DisableEnumSerialization (OFF by default) which defines JSON_DISABLE_ENUM_SERIALIZATION accordingly.

    "},{"location":"api/macros/json_disable_enum_serialization/#examples","title":"Examples","text":"Example 1: Disabled behavior

    The code below forces the library not to create default serialization/deserialization functions from_json and to_json, meaning the code below does not compile.

    #define JSON_DISABLE_ENUM_SERIALIZATION 1\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nenum class Choice\n{\n    first,\n    second,\n};\n\nint main()\n{\n    // normally invokes to_json serialization function but with JSON_DISABLE_ENUM_SERIALIZATION defined, it does not\n    const json j = Choice::first; \n\n    // normally invokes from_json parse function but with JSON_DISABLE_ENUM_SERIALIZATION defined, it does not\n    Choice ch = j.template get<Choice>();\n}\n
    Example 2: Serialize enum macro

    The code below forces the library not to create default serialization/deserialization functions from_json and to_json, but uses NLOHMANN_JSON_SERIALIZE_ENUM to parse and serialize the enum.

    #define JSON_DISABLE_ENUM_SERIALIZATION 1\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nenum class Choice\n{\n    first,\n    second,\n};\n\nNLOHMANN_JSON_SERIALIZE_ENUM(Choice,\n{\n    { Choice::first, \"first\" },\n    { Choice::second, \"second\" },\n})\n\nint main()\n{\n    // uses user-defined to_json function defined by macro\n    const json j = Choice::first; \n\n    // uses user-defined from_json function defined by macro\n    Choice ch = j.template get<Choice>();\n}\n
    Example 3: User-defined serialization/deserialization functions

    The code below forces the library not to create default serialization/deserialization functions from_json and to_json, but uses user-defined functions to parse and serialize the enum.

    #define JSON_DISABLE_ENUM_SERIALIZATION 1\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nenum class Choice\n{\n    first,\n    second,\n};\n\nvoid from_json(const json& j, Choice& ch)\n{\n    auto value = j.template get<std::string>();\n    if (value == \"first\")\n    {\n        ch = Choice::first;\n    }\n    else if (value == \"second\")\n    {\n        ch = Choice::second;\n    }\n}\n\nvoid to_json(json& j, const Choice& ch)\n{\n    auto value = j.template get<std::string>();\n    if (value == \"first\")\n    {\n        ch = Choice::first;\n    }\n    else if (value == \"second\")\n    {\n        ch = Choice::second;\n    }\n}\n\nint main()\n{\n    // uses user-defined to_json function\n    const json j = Choice::first; \n\n    // uses user-defined from_json function\n    Choice ch = j.template get<Choice>();\n}\n
    "},{"location":"api/macros/json_disable_enum_serialization/#see-also","title":"See also","text":"
    • JSON_DisableEnumSerialization - CMake option to control the macro
    • NLOHMANN_JSON_SERIALIZE_ENUM - serialize/deserialize an enum
    "},{"location":"api/macros/json_disable_enum_serialization/#version-history","title":"Version history","text":"
    • Added in version 3.11.0.
    "},{"location":"api/macros/json_has_cpp_11/","title":"JSON_HAS_CPP_11, JSON_HAS_CPP_14, JSON_HAS_CPP_17, JSON_HAS_CPP_20","text":"
    #define JSON_HAS_CPP_11\n#define JSON_HAS_CPP_14\n#define JSON_HAS_CPP_17\n#define JSON_HAS_CPP_20\n

    The library targets C++11, but also supports some features introduced in later C++ versions (e.g., std::string_view support for C++17). For these new features, the library implements some preprocessor checks to determine the C++ standard. By defining any of these symbols, the internal check is overridden and the provided C++ version is unconditionally assumed. This can be helpful for compilers that only implement parts of the standard and would be detected incorrectly.

    "},{"location":"api/macros/json_has_cpp_11/#default-definition","title":"Default definition","text":"

    The default value is detected based on preprocessor macros such as __cplusplus, _HAS_CXX17, or _MSVC_LANG.

    "},{"location":"api/macros/json_has_cpp_11/#notes","title":"Notes","text":"
    • JSON_HAS_CPP_11 is always defined.
    • All macros are undefined outside the library.
    "},{"location":"api/macros/json_has_cpp_11/#examples","title":"Examples","text":"Example

    The code below forces the library to use the C++14 standard:

    #define JSON_HAS_CPP_14 1\n#include <nlohmann/json.hpp>\n\n...\n
    "},{"location":"api/macros/json_has_cpp_11/#version-history","title":"Version history","text":"
    • Added in version 3.10.5.
    "},{"location":"api/macros/json_has_filesystem/","title":"JSON_HAS_FILESYSTEM / JSON_HAS_EXPERIMENTAL_FILESYSTEM","text":"
    #define JSON_HAS_FILESYSTEM /* value */\n#define JSON_HAS_EXPERIMENTAL_FILESYSTEM /* value */\n

    When compiling with C++17, the library provides conversions from and to std::filesystem::path. As compiler support for filesystem is limited, the library tries to detect whether <filesystem>/std::filesystem (JSON_HAS_FILESYSTEM) or <experimental/filesystem>/std::experimental::filesystem (JSON_HAS_EXPERIMENTAL_FILESYSTEM) should be used. To override the built-in check, define JSON_HAS_FILESYSTEM or JSON_HAS_EXPERIMENTAL_FILESYSTEM to 1.

    "},{"location":"api/macros/json_has_filesystem/#default-definition","title":"Default definition","text":"

    The default value is detected based on the preprocessor macros __cpp_lib_filesystem, __cpp_lib_experimental_filesystem, __has_include(<filesystem>), or __has_include(<experimental/filesystem>).

    "},{"location":"api/macros/json_has_filesystem/#notes","title":"Notes","text":"
    • Note that older compilers or older versions of libstd++ also require the library stdc++fs to be linked to for filesystem support.
    • Both macros are undefined outside the library.
    "},{"location":"api/macros/json_has_filesystem/#examples","title":"Examples","text":"Example

    The code below forces the library to use the header <experimental/filesystem>.

    #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 1\n#include <nlohmann/json.hpp>\n\n...\n
    "},{"location":"api/macros/json_has_filesystem/#version-history","title":"Version history","text":"
    • Added in version 3.10.5.
    "},{"location":"api/macros/json_has_ranges/","title":"JSON_HAS_RANGES","text":"
    #define JSON_HAS_RANGES /* value */\n

    This macro indicates whether the standard library has any support for ranges. Implies support for concepts. Possible values are 1 when supported or 0 when unsupported.

    "},{"location":"api/macros/json_has_ranges/#default-definition","title":"Default definition","text":"

    The default value is detected based on the preprocessor macro __cpp_lib_ranges.

    When the macro is not defined, the library will define it to its default value.

    "},{"location":"api/macros/json_has_ranges/#examples","title":"Examples","text":"Example

    The code below forces the library to enable support for ranges:

    #define JSON_HAS_RANGES 1\n#include <nlohmann/json.hpp>\n\n...\n
    "},{"location":"api/macros/json_has_ranges/#version-history","title":"Version history","text":"
    • Added in version 3.11.0.
    "},{"location":"api/macros/json_has_static_rtti/","title":"JSON_HAS_STATIC_RTTI","text":"
    #define JSON_HAS_STATIC_RTTI /* value */\n

    This macro indicates whether the standard library has any support for RTTI (run time type information). Possible values are 1 when supported or 0 when unsupported.

    "},{"location":"api/macros/json_has_static_rtti/#default-definition","title":"Default definition","text":"

    The default value is detected based on the preprocessor macro _HAS_STATIC_RTTI.

    When the macro is not defined, the library will define it to its default value.

    "},{"location":"api/macros/json_has_static_rtti/#examples","title":"Examples","text":"Example

    The code below forces the library to enable support for libraries with RTTI dependence:

    #define JSON_HAS_STATIC_RTTI 1\n#include <nlohmann/json.hpp>\n\n...\n
    "},{"location":"api/macros/json_has_static_rtti/#version-history","title":"Version history","text":"
    • Added in version 3.11.3.
    "},{"location":"api/macros/json_has_three_way_comparison/","title":"JSON_HAS_THREE_WAY_COMPARISON","text":"
    #define JSON_HAS_THREE_WAY_COMPARISON /* value */\n

    This macro indicates whether the compiler and standard library support 3-way comparison. Possible values are 1 when supported or 0 when unsupported.

    "},{"location":"api/macros/json_has_three_way_comparison/#default-definition","title":"Default definition","text":"

    The default value is detected based on the preprocessor macros __cpp_impl_three_way_comparison and __cpp_lib_three_way_comparison.

    When the macro is not defined, the library will define it to its default value.

    "},{"location":"api/macros/json_has_three_way_comparison/#examples","title":"Examples","text":"Example

    The code below forces the library to use 3-way comparison:

    #define JSON_HAS_THREE_WAY_COMPARISON 1\n#include <nlohmann/json.hpp>\n\n...\n
    "},{"location":"api/macros/json_has_three_way_comparison/#version-history","title":"Version history","text":"
    • Added in version 3.11.0.
    "},{"location":"api/macros/json_no_io/","title":"JSON_NO_IO","text":"
    #define JSON_NO_IO\n

    When defined, headers <cstdio>, <ios>, <iosfwd>, <istream>, and <ostream> are not included and parse functions relying on these headers are excluded. This is relevant for environments where these I/O functions are disallowed for security reasons (e.g., Intel Software Guard Extensions (SGX)).

    "},{"location":"api/macros/json_no_io/#default-definition","title":"Default definition","text":"

    By default, JSON_NO_IO is not defined.

    #undef JSON_NO_IO\n
    "},{"location":"api/macros/json_no_io/#examples","title":"Examples","text":"Example

    The code below forces the library not to use the headers <cstdio>, <ios>, <iosfwd>, <istream>, and <ostream>.

    #define JSON_NO_IO 1\n#include <nlohmann/json.hpp>\n\n...\n
    "},{"location":"api/macros/json_no_io/#version-history","title":"Version history","text":"
    • Added in version 3.10.0.
    "},{"location":"api/macros/json_noexception/","title":"JSON_NOEXCEPTION","text":"
    #define JSON_NOEXCEPTION\n

    Exceptions can be switched off by defining the symbol JSON_NOEXCEPTION. When defining JSON_NOEXCEPTION, try is replaced by if (true), catch is replaced by if (false), and throw is replaced by std::abort().

    The same effect is achieved by setting the compiler flag -fno-exceptions.

    "},{"location":"api/macros/json_noexception/#default-definition","title":"Default definition","text":"

    By default, the macro is not defined.

    #undef JSON_NOEXCEPTION\n
    "},{"location":"api/macros/json_noexception/#notes","title":"Notes","text":"

    The explanatory what() string of exceptions is not available for MSVC if exceptions are disabled, see #2824.

    "},{"location":"api/macros/json_noexception/#examples","title":"Examples","text":"Example

    The code below switches off exceptions in the library.

    #define JSON_NOEXCEPTION 1\n#include <nlohmann/json.hpp>\n\n...\n
    "},{"location":"api/macros/json_noexception/#see-also","title":"See also","text":"
    • Switch off exceptions for more information how to switch off exceptions
    "},{"location":"api/macros/json_noexception/#version-history","title":"Version history","text":"

    Added in version 2.1.0.

    "},{"location":"api/macros/json_skip_library_version_check/","title":"JSON_SKIP_LIBRARY_VERSION_CHECK","text":"
    #define JSON_SKIP_LIBRARY_VERSION_CHECK\n

    When defined, the library will not create a compiler warning when a different version of the library was already included.

    "},{"location":"api/macros/json_skip_library_version_check/#default-definition","title":"Default definition","text":"

    By default, the macro is not defined.

    #undef JSON_SKIP_LIBRARY_VERSION_CHECK\n
    "},{"location":"api/macros/json_skip_library_version_check/#notes","title":"Notes","text":"

    ABI compatibility

    Mixing different library versions in the same code can be a problem as the different versions may not be ABI compatible.

    "},{"location":"api/macros/json_skip_library_version_check/#examples","title":"Examples","text":"

    Example

    The following warning will be shown in case a different version of the library was already included:

    Already included a different version of the library!\n
    "},{"location":"api/macros/json_skip_library_version_check/#version-history","title":"Version history","text":"

    Added in version 3.11.0.

    "},{"location":"api/macros/json_skip_unsupported_compiler_check/","title":"JSON_SKIP_UNSUPPORTED_COMPILER_CHECK","text":"
    #define JSON_SKIP_UNSUPPORTED_COMPILER_CHECK\n

    When defined, the library will not create a compile error when a known unsupported compiler is detected. This allows to use the library with compilers that do not fully support C++11 and may only work if unsupported features are not used.

    "},{"location":"api/macros/json_skip_unsupported_compiler_check/#default-definition","title":"Default definition","text":"

    By default, the macro is not defined.

    #undef JSON_SKIP_UNSUPPORTED_COMPILER_CHECK\n
    "},{"location":"api/macros/json_skip_unsupported_compiler_check/#examples","title":"Examples","text":"Example

    The code below switches off the check whether the compiler is supported.

    #define JSON_SKIP_UNSUPPORTED_COMPILER_CHECK 1\n#include <nlohmann/json.hpp>\n\n...\n
    "},{"location":"api/macros/json_skip_unsupported_compiler_check/#version-history","title":"Version history","text":"

    Added in version 3.2.0.

    "},{"location":"api/macros/json_throw_user/","title":"JSON_CATCH_USER, JSON_THROW_USER, JSON_TRY_USER","text":"
    // (1)\n#define JSON_CATCH_USER(exception) /* value */\n// (2)\n#define JSON_THROW_USER(exception) /* value */\n// (3)\n#define JSON_TRY_USER /* value */\n

    Controls how exceptions are handled by the library.

    1. This macro overrides catch calls inside the library. The argument is the type of the exception to catch. As of version 3.8.0, the library only catches std::out_of_range exceptions internally to rethrow them as json::out_of_range exceptions. The macro is always followed by a scope.
    2. This macro overrides throw calls inside the library. The argument is the exception to be thrown. Note that JSON_THROW_USER should leave the current scope (e.g., by throwing or aborting), as continuing after it may yield undefined behavior.
    3. This macro overrides try calls inside the library. It has no arguments and is always followed by a scope.
    "},{"location":"api/macros/json_throw_user/#parameters","title":"Parameters","text":"exception (in) an exception type"},{"location":"api/macros/json_throw_user/#default-definition","title":"Default definition","text":"

    By default, the macros map to their respective C++ keywords:

    #define JSON_CATCH_USER(exception) catch(exception)\n#define JSON_THROW_USER(exception) throw exception\n#define JSON_TRY_USER              try\n

    When exceptions are switched off, the try block is executed unconditionally, and throwing exceptions is replaced by calling std::abort to make reaching the throw branch abort the process.

    #define JSON_THROW_USER(exception) std::abort()\n#define JSON_TRY_USER              if (true)\n#define JSON_CATCH_USER(exception) if (false)\n
    "},{"location":"api/macros/json_throw_user/#examples","title":"Examples","text":"Example

    The code below switches off exceptions and creates a log entry with a detailed error message in case of errors.

    #include <iostream>\n\n#define JSON_TRY_USER if(true)\n#define JSON_CATCH_USER(exception) if(false)\n#define JSON_THROW_USER(exception)                           \\\n    {std::clog << \"Error in \" << __FILE__ << \":\" << __LINE__ \\\n               << \" (function \" << __FUNCTION__ << \") - \"    \\\n               << (exception).what() << std::endl;           \\\n     std::abort();}\n\n#include <nlohmann/json.hpp>\n
    "},{"location":"api/macros/json_throw_user/#see-also","title":"See also","text":"
    • Switch off exceptions for more information how to switch off exceptions
    • JSON_NOEXCEPTION - switch off exceptions
    "},{"location":"api/macros/json_throw_user/#version-history","title":"Version history","text":"
    • Added in version 3.1.0.
    "},{"location":"api/macros/json_use_global_udls/","title":"JSON_USE_GLOBAL_UDLS","text":"
    #define JSON_USE_GLOBAL_UDLS /* value */\n

    When defined to 1, the user-defined string literals (UDLs) are placed into the global namespace instead of nlohmann::literals::json_literals.

    "},{"location":"api/macros/json_use_global_udls/#default-definition","title":"Default definition","text":"

    The default value is 1.

    #define JSON_USE_GLOBAL_UDLS 1\n

    When the macro is not defined, the library will define it to its default value.

    "},{"location":"api/macros/json_use_global_udls/#notes","title":"Notes","text":"

    Future behavior change

    The user-defined string literals will be removed from the global namespace in the next major release of the library.

    To prepare existing code, define JSON_USE_GLOBAL_UDLS to 0 and bring the string literals into scope where needed. Refer to any of the string literals for details.

    CMake option

    The placement of user-defined string literals can also be controlled with the CMake option JSON_GlobalUDLs (ON by default) which defines JSON_USE_GLOBAL_UDLS accordingly.

    "},{"location":"api/macros/json_use_global_udls/#examples","title":"Examples","text":"Example 1: Default behavior

    The code below shows the default behavior using the _json UDL.

    #include <nlohmann/json.hpp>\n\n#include <iostream>\n\nint main()\n{\n    auto j = \"42\"_json;\n\n    std::cout << j << std::endl;\n}\n

    Output:

    42\n
    Example 2: Namespaced UDLs

    The code below shows how UDLs need to be brought into scope before using _json when JSON_USE_GLOBAL_UDLS is defined to 0.

    #define JSON_USE_GLOBAL_UDLS 0\n#include <nlohmann/json.hpp>\n\n#include <iostream>\n\nint main()\n{\n    // auto j = \"42\"_json; // This line would fail to compile,\n                           // because the UDLs are not in the global namespace\n\n    // Bring the UDLs into scope\n    using namespace nlohmann::json_literals;\n\n    auto j = \"42\"_json;\n\n    std::cout << j << std::endl;\n}\n

    Output:

    42\n
    "},{"location":"api/macros/json_use_global_udls/#see-also","title":"See also","text":"
    • operator\"\"_json
    • operator\"\"_json_pointer
    • JSON_GlobalUDLs - CMake option to control the macro
    "},{"location":"api/macros/json_use_global_udls/#version-history","title":"Version history","text":"
    • Added in version 3.11.0.
    "},{"location":"api/macros/json_use_implicit_conversions/","title":"JSON_USE_IMPLICIT_CONVERSIONS","text":"
    #define JSON_USE_IMPLICIT_CONVERSIONS /* value */\n

    When defined to 0, implicit conversions are switched off. By default, implicit conversions are switched on. The value directly affects operator ValueType.

    "},{"location":"api/macros/json_use_implicit_conversions/#default-definition","title":"Default definition","text":"

    By default, implicit conversions are enabled.

    #define JSON_USE_IMPLICIT_CONVERSIONS 1\n
    "},{"location":"api/macros/json_use_implicit_conversions/#notes","title":"Notes","text":"

    Future behavior change

    Implicit conversions will be switched off by default in the next major release of the library.

    You can prepare existing code by already defining JSON_USE_IMPLICIT_CONVERSIONS to 0 and replace any implicit conversions with calls to get.

    CMake option

    Implicit conversions can also be controlled with the CMake option JSON_ImplicitConversions (ON by default) which defines JSON_USE_IMPLICIT_CONVERSIONS accordingly.

    "},{"location":"api/macros/json_use_implicit_conversions/#examples","title":"Examples","text":"Example

    This is an example for an implicit conversion:

    json j = \"Hello, world!\";\nstd::string s = j;\n

    When JSON_USE_IMPLICIT_CONVERSIONS is defined to 0, the code above does no longer compile. Instead, it must be written like this:

    json j = \"Hello, world!\";\nauto s = j.template get<std::string>();\n
    "},{"location":"api/macros/json_use_implicit_conversions/#see-also","title":"See also","text":"
    • operator ValueType - get a value (implicit)
    • get - get a value (explicit)
    • JSON_ImplicitConversions - CMake option to control the macro
    "},{"location":"api/macros/json_use_implicit_conversions/#version-history","title":"Version history","text":"
    • Added in version 3.9.0.
    "},{"location":"api/macros/json_use_legacy_discarded_value_comparison/","title":"JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON","text":"
    #define JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON /* value */\n

    This macro enables the (incorrect) legacy comparison behavior of discarded JSON values. Possible values are 1 to enable or 0 to disable (default).

    When enabled, comparisons involving at least one discarded JSON value yield results as follows:

    Operator Result == false != true < false <= true >= true > false

    Otherwise, comparisons involving at least one discarded JSON value always yield false.

    "},{"location":"api/macros/json_use_legacy_discarded_value_comparison/#default-definition","title":"Default definition","text":"

    The default value is 0.

    #define JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON 0\n

    When the macro is not defined, the library will define it to its default value.

    "},{"location":"api/macros/json_use_legacy_discarded_value_comparison/#notes","title":"Notes","text":"

    Inconsistent behavior in C++20 and beyond

    When targeting C++20 or above, enabling the legacy comparison behavior is strongly discouraged.

    • The 3-way comparison operator (<=>) will always give the correct result (std::partial_ordering::unordered) regardless of the value of JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON.
    • Overloads for the equality and relational operators emulate the legacy behavior.

    Code outside your control may use either 3-way comparison or the equality and relational operators, resulting in inconsistent and unpredictable behavior.

    See operator<=> for more information on 3-way comparison.

    Deprecation

    The legacy comparison behavior is deprecated and may be removed in a future major version release.

    New code should not depend on it and existing code should try to remove or rewrite expressions relying on it.

    CMake option

    Legacy comparison can also be controlled with the CMake option JSON_LegacyDiscardedValueComparison (OFF by default) which defines JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON accordingly.

    "},{"location":"api/macros/json_use_legacy_discarded_value_comparison/#examples","title":"Examples","text":"Example

    The code below switches on the legacy discarded value comparison behavior in the library.

    #define JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON 1\n#include <nlohmann/json.hpp>\n\n...\n
    "},{"location":"api/macros/json_use_legacy_discarded_value_comparison/#see-also","title":"See also","text":"
    • JSON_LegacyDiscardedValueComparison - CMake option to control the macro
    "},{"location":"api/macros/json_use_legacy_discarded_value_comparison/#version-history","title":"Version history","text":"
    • Added in version 3.11.0.
    "},{"location":"api/macros/nlohmann_define_derived_type/","title":"NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE, NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE","text":"NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE, NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE
    // (1)\n#define NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE(type, base_type, member...)\n// (2)\n#define NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT(type, base_type, member...)\n// (3)\n#define NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE(type, base_type, member...)\n\n// (4)\n#define NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE(type, base_type, member...)\n// (5)\n#define NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT(type, base_type, member...)\n// (6)\n#define NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE(type, base_type, member...)\n

    These macros can be used to simplify the serialization/deserialization of derived types if you want to use a JSON object as serialization and want to use the member variable names as object keys in that object.

    • Macros 1, 2 and 3 are to be defined inside the class/struct to create code for. Like NLOHMANN_DEFINE_TYPE_INTRUSIVE, they can access private members.
    • Macros 4, 5 and 6 are to be defined outside the class/struct to create code for, but inside its namespace. Like NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE, they cannot access private members.

    The first parameter is the name of the derived class/struct, the second parameter is the name of the base class/struct and all remaining parameters name the members. The base type must be already serializable/deserializable.

    • Macros 1 and 4 will use at during deserialization and will throw out_of_range.403 if a key is missing in the JSON object.
    • Macros 2 and 5 will use value during deserialization and fall back to the default value for the respective type of the member variable if a key in the JSON object is missing. The generated from_json() function default constructs an object and uses its values as the defaults when calling the value function.

    Summary:

    Need access to private members Need only de-serialization Allow missing values when de-serializing macro NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE"},{"location":"api/macros/nlohmann_define_derived_type/#parameters","title":"Parameters","text":"type (in) name of the type (class, struct) to serialize/deserialize base_type (in) name of the base type (class, struct) type is derived from member (in) name of the member variable to serialize/deserialize; up to 64 members can be given as comma-separated list"},{"location":"api/macros/nlohmann_define_derived_type/#default-definition","title":"Default definition","text":"

    Macros 1 and 2 add two friend functions to the class which take care of the serialization and deserialization:

    template<typename BasicJsonType>\nfriend void to_json(BasicJsonType&, const type&);\ntemplate<typename BasicJsonType>\nfriend void from_json(const BasicJsonType&, type&);\n

    Macros 4 and 5 add two functions to the namespace which take care of the serialization and deserialization:

    template<typename BasicJsonType>\nvoid to_json(BasicJsonType&, const type&);\ntemplate<typename BasicJsonType>\nvoid from_json(const BasicJsonType&, type&);\n

    Macros 3 and 6 add one function to the namespace which take care of the serialization only:

    template<typename BasicJsonType>\nvoid to_json(BasicJsonType&, const type&);\n

    In first two cases, they call the to_json/from_json functions of the base type before serializing/deserializing the members of the derived type:

    class A { /* ... */ };\nclass B : public A { /* ... */ };\n\ntemplate<typename BasicJsonType>\nvoid to_json(BasicJsonType& j, const B& b) {\n    nlohmann::to_json(j, static_cast<const A&>(b));\n    // ...\n}\n\ntemplate<typename BasicJsonType>\nvoid from_json(const BasicJsonType& j, B& b) {\n    nlohmann::from_json(j, static_cast<A&>(b));\n    // ...\n}\n

    In the third case, only to_json will be called:

    class A { /* ... */ };\nclass B : public A { /* ... */ };\n\ntemplate<typename BasicJsonType>\nvoid to_json(BasicJsonType& j, const B& b) {\n    nlohmann::to_json(j, static_cast<const A&>(b));\n    // ...\n}\n
    "},{"location":"api/macros/nlohmann_define_derived_type/#notes","title":"Notes","text":"

    Prerequisites

    • Macros 1, 2, and 3 have the same prerequisites of NLOHMANN_DEFINE_TYPE_INTRUSIVE.
    • Macros 4, 5, and 6 have the same prerequisites of NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE.
    • Serialization/deserialization of base types must be defined.

    Implementation limits

    See Implementation limits for NLOHMANN_DEFINE_TYPE_INTRUSIVE and NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE, respectively.

    "},{"location":"api/macros/nlohmann_define_derived_type/#examples","title":"Examples","text":"NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE

    Consider the following complete example:

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing nlohmann::json;\n\nclass A\n{\n  private:\n    double Aa = 0.0;\n    double Ab = 0.0;\n\n  public:\n    A() = default;\n    A(double a, double b) : Aa(a), Ab(b) {}\n    NLOHMANN_DEFINE_TYPE_INTRUSIVE(A, Aa, Ab)\n};\n\nclass B : public A\n{\n  private:\n    int Ba = 0;\n    int Bb = 0;\n\n  public:\n    B() = default;\n    B(int a, int b, double aa, double ab) : A(aa, ab), Ba(a), Bb(b) {}\n    NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE(B, A, Ba, Bb)\n};\n\nint main()\n{\n    B example(23, 42, 3.142, 1.777);\n    json example_json = example;\n\n    std::cout << std::setw(4) << example_json << std::endl;\n}\n

    Output:

    {\n    \"Aa\": 3.142,\n    \"Ab\": 1.777,\n    \"Ba\": 23,\n    \"Bb\": 42\n}\n

    Notes:

    • A and B are default-constructible. This is a requirement for using the macro.
    • A has private members and is not a derived class. Hence, macro NLOHMANN_DEFINE_TYPE_INTRUSIVE is used.
    • As B is a derived class, NLOHMANN_DEFINE_TYPE_INTRUSIVE is not applicable, but NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE must be used.
    • The macro NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE is used inside the class use as NLOHMANN_DEFINE_TYPE_INTRUSIVE.
    "},{"location":"api/macros/nlohmann_define_derived_type/#see-also","title":"See also","text":"
    • NLOHMANN_DEFINE_TYPE_INTRUSIVE / NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT / NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE for similar macros that can be defined inside a non-derived type.
    • NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE / NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT / NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE for similar macros that can be defined outside a non-derived type.
    • Arbitrary Type Conversions for an overview.
    "},{"location":"api/macros/nlohmann_define_derived_type/#version-history","title":"Version history","text":"
    1. Added in version 3.11.x.
    2. Added in version 3.11.x.
    3. Added in version 3.11.x.
    4. Added in version 3.11.x.
    5. Added in version 3.11.x.
    6. Added in version 3.11.x.
    "},{"location":"api/macros/nlohmann_define_type_intrusive/","title":"NLOHMANN_DEFINE_TYPE_INTRUSIVE, NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE","text":"
    #define NLOHMANN_DEFINE_TYPE_INTRUSIVE(type, member...)              // (1)\n#define NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT(type, member...) // (2)\n#define NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE(type, member...) // (3)\n

    These macros can be used to simplify the serialization/deserialization of types if you want to use a JSON object as serialization and want to use the member variable names as object keys in that object. The macro is to be defined inside the class/struct to create code for. Unlike NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE, it can access private members. The first parameter is the name of the class/struct, and all remaining parameters name the members.

    1. Will use at during deserialization and will throw out_of_range.403 if a key is missing in the JSON object.
    2. Will use value during deserialization and fall back to the default value for the respective type of the member variable if a key in the JSON object is missing. The generated from_json() function default constructs an object and uses its values as the defaults when calling the value function.
    3. Only defines the serialization. Useful in cases when the type does not have a default constructor and only serialization in required.

    Summary:

    Need access to private members Need only de-serialization Allow missing values when de-serializing macro NLOHMANN_DEFINE_TYPE_INTRUSIVE NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE"},{"location":"api/macros/nlohmann_define_type_intrusive/#parameters","title":"Parameters","text":"type (in) name of the type (class, struct) to serialize/deserialize member (in) name of the member variable to serialize/deserialize; up to 64 members can be given as comma-separated list"},{"location":"api/macros/nlohmann_define_type_intrusive/#default-definition","title":"Default definition","text":"

    The macros add two friend functions to the class which take care of the serialization and deserialization:

    template<typename BasicJsonType>\nfriend void to_json(BasicJsonType&, const type&);\ntemplate<typename BasicJsonType>\nfriend void from_json(const BasicJsonType&, type&); // except (3)\n

    See examples below for the concrete generated code.

    "},{"location":"api/macros/nlohmann_define_type_intrusive/#notes","title":"Notes","text":"

    Prerequisites

    1. The type type must be default constructible (except (3)). See How can I use get() for non-default constructible/non-copyable types? for how to overcome this limitation.
    2. The macro must be used inside the type (class/struct).

    Implementation limits

    • The current implementation is limited to at most 64 member variables. If you want to serialize/deserialize types with more than 64 member variables, you need to define the to_json/from_json functions manually.
    "},{"location":"api/macros/nlohmann_define_type_intrusive/#examples","title":"Examples","text":"Example (1): NLOHMANN_DEFINE_TYPE_INTRUSIVE

    Consider the following complete example:

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nnamespace ns\n{\nclass person\n{\n  private:\n    std::string name = \"John Doe\";\n    std::string address = \"123 Fake St\";\n    int age = -1;\n\n  public:\n    person() = default;\n    person(std::string name_, std::string address_, int age_)\n        : name(std::move(name_)), address(std::move(address_)), age(age_)\n    {}\n\n    NLOHMANN_DEFINE_TYPE_INTRUSIVE(person, name, address, age)\n};\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    // serialization: person -> json\n    json j = p;\n    std::cout << \"serialization: \" << j << std::endl;\n\n    // deserialization: json -> person\n    json j2 = R\"({\"address\": \"742 Evergreen Terrace\", \"age\": 40, \"name\": \"Homer Simpson\"})\"_json;\n    auto p2 = j2.template get<ns::person>();\n\n    // incomplete deserialization:\n    json j3 = R\"({\"address\": \"742 Evergreen Terrace\", \"name\": \"Maggie Simpson\"})\"_json;\n    try\n    {\n        auto p3 = j3.template get<ns::person>();\n    }\n    catch (const json::exception& e)\n    {\n        std::cout << \"deserialization failed: \" << e.what() << std::endl;\n    }\n}\n

    Output:

    serialization: {\"address\":\"744 Evergreen Terrace\",\"age\":60,\"name\":\"Ned Flanders\"}\ndeserialization failed: [json.exception.out_of_range.403] key 'age' not found\n

    Notes:

    • ns::person is default-constructible. This is a requirement for using the macro.
    • ns::person has private member variables. This makes NLOHMANN_DEFINE_TYPE_INTRUSIVE applicable, but not NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE.
    • The macro NLOHMANN_DEFINE_TYPE_INTRUSIVE is used inside the class.
    • A missing key \"age\" in the deserialization yields an exception. To fall back to the default value, NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT can be used.

    The macro is equivalent to:

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nnamespace ns\n{\nclass person\n{\n  private:\n    std::string name = \"John Doe\";\n    std::string address = \"123 Fake St\";\n    int age = -1;\n\n  public:\n    person() = default;\n    person(std::string name_, std::string address_, int age_)\n        : name(std::move(name_)), address(std::move(address_)), age(age_)\n    {}\n\n    template<typename BasicJsonType>\n    friend void to_json(BasicJsonType& nlohmann_json_j, const person& nlohmann_json_t)\n    {\n        nlohmann_json_j[\"name\"] = nlohmann_json_t.name;\n        nlohmann_json_j[\"address\"] = nlohmann_json_t.address;\n        nlohmann_json_j[\"age\"] = nlohmann_json_t.age;\n    }\n\n    template<typename BasicJsonType>\n    friend void from_json(const BasicJsonType& nlohmann_json_j, person& nlohmann_json_t)\n    {\n        nlohmann_json_t.name = nlohmann_json_j.at(\"name\");\n        nlohmann_json_t.address = nlohmann_json_j.at(\"address\");\n        nlohmann_json_t.age = nlohmann_json_j.at(\"age\");\n    }\n};\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    // serialization: person -> json\n    json j = p;\n    std::cout << \"serialization: \" << j << std::endl;\n\n    // deserialization: json -> person\n    json j2 = R\"({\"address\": \"742 Evergreen Terrace\", \"age\": 40, \"name\": \"Homer Simpson\"})\"_json;\n    auto p2 = j2.template get<ns::person>();\n\n    // incomplete deserialization:\n    json j3 = R\"({\"address\": \"742 Evergreen Terrace\", \"name\": \"Maggie Simpson\"})\"_json;\n    try\n    {\n        auto p3 = j3.template get<ns::person>();\n    }\n    catch (const json::exception& e)\n    {\n        std::cout << \"deserialization failed: \" << e.what() << std::endl;\n    }\n}\n
    Example (2): NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT

    Consider the following complete example:

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nnamespace ns\n{\nclass person\n{\n  private:\n    std::string name = \"John Doe\";\n    std::string address = \"123 Fake St\";\n    int age = -1;\n\n  public:\n    person() = default;\n    person(std::string name_, std::string address_, int age_)\n        : name(std::move(name_)), address(std::move(address_)), age(age_)\n    {}\n\n    NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT(person, name, address, age)\n};\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    // serialization: person -> json\n    json j = p;\n    std::cout << \"serialization: \" << j << std::endl;\n\n    // deserialization: json -> person\n    json j2 = R\"({\"address\": \"742 Evergreen Terrace\", \"age\": 40, \"name\": \"Homer Simpson\"})\"_json;\n    auto p2 = j2.template get<ns::person>();\n\n    // incomplete deserialization:\n    json j3 = R\"({\"address\": \"742 Evergreen Terrace\", \"name\": \"Maggie Simpson\"})\"_json;\n    auto p3 = j3.template get<ns::person>();\n    std::cout << \"roundtrip: \" << json(p3) << std::endl;\n}\n

    Output:

    serialization: {\"address\":\"744 Evergreen Terrace\",\"age\":60,\"name\":\"Ned Flanders\"}\nroundtrip: {\"address\":\"742 Evergreen Terrace\",\"age\":-1,\"name\":\"Maggie Simpson\"}\n

    Notes:

    • ns::person is default-constructible. This is a requirement for using the macro.
    • ns::person has private member variables. This makes NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT applicable, but not NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT.
    • The macro NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT is used inside the class.
    • A missing key \"age\" in the deserialization does not yield an exception. Instead, the default value -1 is used.

    The macro is equivalent to:

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nnamespace ns\n{\nclass person\n{\n  private:\n    std::string name = \"John Doe\";\n    std::string address = \"123 Fake St\";\n    int age = -1;\n\n  public:\n    person() = default;\n    person(std::string name_, std::string address_, int age_)\n        : name(std::move(name_)), address(std::move(address_)), age(age_)\n    {}\n\n    template<typename BasicJsonType>\n    friend void to_json(BasicJsonType& nlohmann_json_j, const person& nlohmann_json_t)\n    {\n        nlohmann_json_j[\"name\"] = nlohmann_json_t.name;\n        nlohmann_json_j[\"address\"] = nlohmann_json_t.address;\n        nlohmann_json_j[\"age\"] = nlohmann_json_t.age;\n    }\n\n    template<typename BasicJsonType>\n    friend void from_json(const BasicJsonType& nlohmann_json_j, person& nlohmann_json_t)\n    {\n        person nlohmann_json_default_obj;\n        nlohmann_json_t.name = nlohmann_json_j.value(\"name\", nlohmann_json_default_obj.name);\n        nlohmann_json_t.address = nlohmann_json_j.value(\"address\", nlohmann_json_default_obj.address);\n        nlohmann_json_t.age = nlohmann_json_j.value(\"age\", nlohmann_json_default_obj.age);\n    }\n};\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    // serialization: person -> json\n    json j = p;\n    std::cout << \"serialization: \" << j << std::endl;\n\n    // deserialization: json -> person\n    json j2 = R\"({\"address\": \"742 Evergreen Terrace\", \"age\": 40, \"name\": \"Homer Simpson\"})\"_json;\n    auto p2 = j2.template get<ns::person>();\n\n    // incomplete deserialization:\n    json j3 = R\"({\"address\": \"742 Evergreen Terrace\", \"name\": \"Maggie Simpson\"})\"_json;\n    auto p3 = j3.template get<ns::person>();\n    std::cout << \"roundtrip: \" << json(p3) << std::endl;\n}\n

    Note how a default-initialized person object is used in the from_json to fill missing values.

    Example (3): NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE

    Consider the following complete example:

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nnamespace ns\n{\nclass person\n{\n  private:\n    std::string name = \"John Doe\";\n    std::string address = \"123 Fake St\";\n    int age = -1;\n\n  public:\n    // No default constructor\n    person(std::string name_, std::string address_, int age_)\n        : name(std::move(name_)), address(std::move(address_)), age(age_)\n    {}\n\n    NLOHMANN_DEFINE_TYPE_INTRUSIVE(person, name, address, age)\n};\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    // serialization: person -> json\n    json j = p;\n    std::cout << \"serialization: \" << j << std::endl;\n}\n

    Output:

    serialization: {\"address\":\"744 Evergreen Terrace\",\"age\":60,\"name\":\"Ned Flanders\"}\n

    Notes:

    • ns::person is non-default-constructible. This allows this macro to be used instead of NLOHMANN_DEFINE_TYPE_INTRUSIVE and NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT.
    • ns::person has private member variables. This makes NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE applicable, but not NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE.
    • The macro NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE is used inside the class.

    The macro is equivalent to:

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nnamespace ns\n{\nclass person\n{\n  private:\n    std::string name = \"John Doe\";\n    std::string address = \"123 Fake St\";\n    int age = -1;\n\n  public:\n    // No default constructor\n    person(std::string name_, std::string address_, int age_)\n        : name(std::move(name_)), address(std::move(address_)), age(age_)\n    {}\n\n    template<typename BasicJsonType>\n    friend void to_json(BasicJsonType& nlohmann_json_j, const person& nlohmann_json_t)\n    {\n        nlohmann_json_j[\"name\"] = nlohmann_json_t.name;\n        nlohmann_json_j[\"address\"] = nlohmann_json_t.address;\n        nlohmann_json_j[\"age\"] = nlohmann_json_t.age;\n    }\n};\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    // serialization: person -> json\n    json j = p;\n    std::cout << \"serialization: \" << j << std::endl;\n}\n
    "},{"location":"api/macros/nlohmann_define_type_intrusive/#see-also","title":"See also","text":"
    • NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE, NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE for a similar macro that can be defined outside the type.
    • NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE, NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE for similar macros for derived types
    • Arbitrary Type Conversions for an overview.
    "},{"location":"api/macros/nlohmann_define_type_intrusive/#version-history","title":"Version history","text":"
    1. Added in version 3.9.0.
    2. Added in version 3.11.0.
    3. Added in version 3.11.3.
    "},{"location":"api/macros/nlohmann_define_type_non_intrusive/","title":"NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE, NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE","text":"
    #define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(type, member...)              // (1)\n#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT(type, member...) // (2)\n#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE(type, member...) // (3)\n

    These macros can be used to simplify the serialization/deserialization of types if you want to use a JSON object as serialization and want to use the member variable names as object keys in that object. The macro is to be defined outside the class/struct to create code for, but inside its namespace. Unlike NLOHMANN_DEFINE_TYPE_INTRUSIVE, it cannot access private members. The first parameter is the name of the class/struct, and all remaining parameters name the members.

    1. Will use at during deserialization and will throw out_of_range.403 if a key is missing in the JSON object.
    2. Will use value during deserialization and fall back to the default value for the respective type of the member variable if a key in the JSON object is missing. The generated from_json() function default constructs an object and uses its values as the defaults when calling the value function.
    3. Only defines the serialization. Useful in cases when the type does not have a default constructor and only serialization in required.

    Summary:

    Need access to private members Need only de-serialization Allow missing values when de-serializing macro NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE"},{"location":"api/macros/nlohmann_define_type_non_intrusive/#parameters","title":"Parameters","text":"type (in) name of the type (class, struct) to serialize/deserialize member (in) name of the (public) member variable to serialize/deserialize; up to 64 members can be given as comma-separated list"},{"location":"api/macros/nlohmann_define_type_non_intrusive/#default-definition","title":"Default definition","text":"

    The macros add two functions to the namespace which take care of the serialization and deserialization:

    template<typename BasicJsonType>\nvoid to_json(BasicJsonType&, const type&);\ntemplate<typename BasicJsonType>\nvoid from_json(const BasicJsonType&, type&); // except (3)\n

    See examples below for the concrete generated code.

    "},{"location":"api/macros/nlohmann_define_type_non_intrusive/#notes","title":"Notes","text":"

    Prerequisites

    1. The type type must be default constructible (except (3). See How can I use get() for non-default constructible/non-copyable types? for how to overcome this limitation.
    2. The macro must be used outside the type (class/struct).
    3. The passed members must be public.

    Implementation limits

    • The current implementation is limited to at most 64 member variables. If you want to serialize/deserialize types with more than 64 member variables, you need to define the to_json/from_json functions manually.
    "},{"location":"api/macros/nlohmann_define_type_non_intrusive/#examples","title":"Examples","text":"Example (1): NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE

    Consider the following complete example:

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nnamespace ns\n{\nstruct person\n{\n    std::string name;\n    std::string address;\n    int age;\n};\n\nNLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(person, name, address, age)\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    // serialization: person -> json\n    json j = p;\n    std::cout << \"serialization: \" << j << std::endl;\n\n    // deserialization: json -> person\n    json j2 = R\"({\"address\": \"742 Evergreen Terrace\", \"age\": 40, \"name\": \"Homer Simpson\"})\"_json;\n    auto p2 = j2.template get<ns::person>();\n\n    // incomplete deserialization:\n    json j3 = R\"({\"address\": \"742 Evergreen Terrace\", \"name\": \"Maggie Simpson\"})\"_json;\n    try\n    {\n        auto p3 = j3.template get<ns::person>();\n    }\n    catch (const json::exception& e)\n    {\n        std::cout << \"deserialization failed: \" << e.what() << std::endl;\n    }\n}\n

    Output:

    serialization: {\"address\":\"744 Evergreen Terrace\",\"age\":60,\"name\":\"Ned Flanders\"}\ndeserialization failed: [json.exception.out_of_range.403] key 'age' not found\n

    Notes:

    • ns::person is default-constructible. This is a requirement for using the macro.
    • ns::person has only public member variables. This makes NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE applicable.
    • The macro NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE is used outside the class, but inside its namespace ns.
    • A missing key \"age\" in the deserialization yields an exception. To fall back to the default value, NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT can be used.

    The macro is equivalent to:

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nnamespace ns\n{\nstruct person\n{\n    std::string name;\n    std::string address;\n    int age;\n};\n\ntemplate<typename BasicJsonType>\nvoid to_json(BasicJsonType& nlohmann_json_j, const person& nlohmann_json_t)\n{\n    nlohmann_json_j[\"name\"] = nlohmann_json_t.name;\n    nlohmann_json_j[\"address\"] = nlohmann_json_t.address;\n    nlohmann_json_j[\"age\"] = nlohmann_json_t.age;\n}\n\ntemplate<typename BasicJsonType>\nvoid from_json(const BasicJsonType& nlohmann_json_j, person& nlohmann_json_t)\n{\n    nlohmann_json_t.name = nlohmann_json_j.at(\"name\");\n    nlohmann_json_t.address = nlohmann_json_j.at(\"address\");\n    nlohmann_json_t.age = nlohmann_json_j.at(\"age\");\n}\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    // serialization: person -> json\n    json j = p;\n    std::cout << \"serialization: \" << j << std::endl;\n\n    // deserialization: json -> person\n    json j2 = R\"({\"address\": \"742 Evergreen Terrace\", \"age\": 40, \"name\": \"Homer Simpson\"})\"_json;\n    auto p2 = j2.template get<ns::person>();\n\n    // incomplete deserialization:\n    json j3 = R\"({\"address\": \"742 Evergreen Terrace\", \"name\": \"Maggie Simpson\"})\"_json;\n    try\n    {\n        auto p3 = j3.template get<ns::person>();\n    }\n    catch (const json::exception& e)\n    {\n        std::cout << \"deserialization failed: \" << e.what() << std::endl;\n    }\n}\n
    Example (2): NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT

    Consider the following complete example:

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nnamespace ns\n{\nstruct person\n{\n    std::string name = \"John Doe\";\n    std::string address = \"123 Fake St\";\n    int age = -1;\n\n    person() = default;\n    person(std::string name_, std::string address_, int age_)\n        : name(std::move(name_)), address(std::move(address_)), age(age_)\n    {}\n};\n\nNLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT(person, name, address, age)\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    // serialization: person -> json\n    json j = p;\n    std::cout << \"serialization: \" << j << std::endl;\n\n    // deserialization: json -> person\n    json j2 = R\"({\"address\": \"742 Evergreen Terrace\", \"age\": 40, \"name\": \"Homer Simpson\"})\"_json;\n    auto p2 = j2.template get<ns::person>();\n\n    // incomplete deserialization:\n    json j3 = R\"({\"address\": \"742 Evergreen Terrace\", \"name\": \"Maggie Simpson\"})\"_json;\n    auto p3 = j3.template get<ns::person>();\n    std::cout << \"roundtrip: \" << json(p3) << std::endl;\n}\n

    Output:

    serialization: {\"address\":\"744 Evergreen Terrace\",\"age\":60,\"name\":\"Ned Flanders\"}\nroundtrip: {\"address\":\"742 Evergreen Terrace\",\"age\":-1,\"name\":\"Maggie Simpson\"}\n

    Notes:

    • ns::person is default-constructible. This is a requirement for using the macro.
    • ns::person has only public member variables. This makes NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT applicable.
    • The macro NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT is used outside the class, but inside its namespace ns.
    • A missing key \"age\" in the deserialization does not yield an exception. Instead, the default value -1 is used.

    The macro is equivalent to:

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nnamespace ns\n{\nstruct person\n{\n    std::string name = \"John Doe\";\n    std::string address = \"123 Fake St\";\n    int age = -1;\n\n    person() = default;\n    person(std::string name_, std::string address_, int age_)\n        : name(std::move(name_)), address(std::move(address_)), age(age_)\n    {}\n};\n\ntemplate<typename BasicJsonType>\nvoid to_json(BasicJsonType& nlohmann_json_j, const person& nlohmann_json_t)\n{\n    nlohmann_json_j[\"name\"] = nlohmann_json_t.name;\n    nlohmann_json_j[\"address\"] = nlohmann_json_t.address;\n    nlohmann_json_j[\"age\"] = nlohmann_json_t.age;\n}\n\ntemplate<typename BasicJsonType>\nvoid from_json(const BasicJsonType& nlohmann_json_j, person& nlohmann_json_t)\n{\n    person nlohmann_json_default_obj;\n    nlohmann_json_t.name = nlohmann_json_j.value(\"name\", nlohmann_json_default_obj.name);\n    nlohmann_json_t.address = nlohmann_json_j.value(\"address\", nlohmann_json_default_obj.address);\n    nlohmann_json_t.age = nlohmann_json_j.value(\"age\", nlohmann_json_default_obj.age);\n}\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    // serialization: person -> json\n    json j = p;\n    std::cout << \"serialization: \" << j << std::endl;\n\n    // deserialization: json -> person\n    json j2 = R\"({\"address\": \"742 Evergreen Terrace\", \"age\": 40, \"name\": \"Homer Simpson\"})\"_json;\n    auto p2 = j2.template get<ns::person>();\n\n    // incomplete deserialization:\n    json j3 = R\"({\"address\": \"742 Evergreen Terrace\", \"name\": \"Maggie Simpson\"})\"_json;\n    auto p3 = j3.template get<ns::person>();\n    std::cout << \"roundtrip: \" << json(p3) << std::endl;\n}\n

    Note how a default-initialized person object is used in the from_json to fill missing values.

    Example (3): NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE

    Consider the following complete example:

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nnamespace ns\n{\nstruct person\n{\n    std::string name;\n    std::string address;\n    int age;\n};\n\nNLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE(person, name, address, age)\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    // serialization: person -> json\n    json j = p;\n    std::cout << \"serialization: \" << j << std::endl;\n}\n

    Output:

    serialization: {\"address\":\"744 Evergreen Terrace\",\"age\":60,\"name\":\"Ned Flanders\"}\n

    Notes:

    • ns::person is non-default-constructible. This allows this macro to be used instead of NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE and NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT.
    • ns::person has only public member variables. This makes NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE applicable.
    • The macro NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE is used outside the class, but inside its namespace ns.

    The macro is equivalent to:

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nnamespace ns\n{\nstruct person\n{\n    std::string name;\n    std::string address;\n    int age;\n};\n\ntemplate<typename BasicJsonType>\nvoid to_json(BasicJsonType& nlohmann_json_j, const person& nlohmann_json_t)\n{\n    nlohmann_json_j[\"name\"] = nlohmann_json_t.name;\n    nlohmann_json_j[\"address\"] = nlohmann_json_t.address;\n    nlohmann_json_j[\"age\"] = nlohmann_json_t.age;\n}\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    // serialization: person -> json\n    json j = p;\n    std::cout << \"serialization: \" << j << std::endl;\n}\n
    "},{"location":"api/macros/nlohmann_define_type_non_intrusive/#see-also","title":"See also","text":"
    • NLOHMANN_DEFINE_TYPE_INTRUSIVE, NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE for a similar macro that can be defined inside the type.
    • NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE, NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE for similar macros for derived types
    • Arbitrary Type Conversions for an overview.
    "},{"location":"api/macros/nlohmann_define_type_non_intrusive/#version-history","title":"Version history","text":"
    1. Added in version 3.9.0.
    2. Added in version 3.11.0.
    3. Added in version 3.11.3.
    "},{"location":"api/macros/nlohmann_json_namespace/","title":"NLOHMANN_JSON_NAMESPACE","text":"
    #define NLOHMANN_JSON_NAMESPACE /* value */\n

    This macro evaluates to the full name of the nlohmann namespace.

    "},{"location":"api/macros/nlohmann_json_namespace/#default-definition","title":"Default definition","text":"

    The default value consists of the root namespace (nlohmann) and an inline ABI namespace. See nlohmann Namespace for details.

    When the macro is not defined, the library will define it to its default value. Overriding this value has no effect on the library.

    "},{"location":"api/macros/nlohmann_json_namespace/#examples","title":"Examples","text":"Example

    The example shows how to use NLOHMANN_JSON_NAMESPACE instead of just nlohmann, as well as how to output the value of NLOHMANN_JSON_NAMESPACE.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\n// possible use case: use NLOHMANN_JSON_NAMESPACE instead of nlohmann\nusing json = NLOHMANN_JSON_NAMESPACE::json;\n\n// macro needed to output the NLOHMANN_JSON_NAMESPACE as string literal\n#define Q(x) #x\n#define QUOTE(x) Q(x)\n\nint main()\n{\n    std::cout << QUOTE(NLOHMANN_JSON_NAMESPACE) << std::endl;\n}\n

    Output:

    nlohmann::json_abi_v3_11_3\n
    "},{"location":"api/macros/nlohmann_json_namespace/#see-also","title":"See also","text":"
    • NLOHMANN_JSON_NAMESPACE_BEGIN, NLOHMANN_JSON_NAMESPACE_END
    • NLOHMANN_JSON_NAMESPACE_NO_VERSION
    "},{"location":"api/macros/nlohmann_json_namespace/#version-history","title":"Version history","text":"
    • Added in version 3.11.0. Changed inline namespace name in version 3.11.2.
    "},{"location":"api/macros/nlohmann_json_namespace_begin/","title":"NLOHMANN_JSON_NAMESPACE_BEGIN, NLOHMANN_JSON_NAMESPACE_END","text":"
    #define NLOHMANN_JSON_NAMESPACE_BEGIN /* value */  // (1)\n#define NLOHMANN_JSON_NAMESPACE_END   /* value */  // (2)\n

    These macros can be used to open and close the nlohmann namespace. See nlohmann Namespace for details.

    1. Opens the namespace.
    2. Closes the namespace.
    "},{"location":"api/macros/nlohmann_json_namespace_begin/#default-definition","title":"Default definition","text":"

    The default definitions open and close the nlohmann namespace. The precise definition of [NLOHMANN_JSON_NAMESPACE_BEGIN] varies as described here.

    1. Default definition of NLOHMANN_JSON_NAMESPACE_BEGIN:

      namespace nlohmann\n{\ninline namespace json_abi_v3_11_2\n{\n
    2. Default definition of NLOHMANN_JSON_NAMESPACE_END:

      }  // namespace json_abi_v3_11_2\n}  // namespace nlohmann\n

    When these macros are not defined, the library will define them to their default definitions.

    "},{"location":"api/macros/nlohmann_json_namespace_begin/#examples","title":"Examples","text":"Example

    The example shows how to use NLOHMANN_JSON_NAMESPACE_BEGIN/NLOHMANN_JSON_NAMESPACE_END from the How do I convert third-party types? page.

    #include <iostream>\n#include <optional>\n#include <nlohmann/json.hpp>\n\n// partial specialization (see https://json.nlohmann.me/features/arbitrary_types/)\nNLOHMANN_JSON_NAMESPACE_BEGIN\ntemplate <typename T>\nstruct adl_serializer<std::optional<T>>\n{\n    static void to_json(json& j, const std::optional<T>& opt)\n    {\n        if (opt == std::nullopt)\n        {\n            j = nullptr;\n        }\n        else\n        {\n            j = *opt;\n        }\n    }\n};\nNLOHMANN_JSON_NAMESPACE_END\n\nint main()\n{\n    std::optional<int> o1 = 1;\n    std::optional<int> o2 = std::nullopt;\n\n    NLOHMANN_JSON_NAMESPACE::json j;\n    j.push_back(o1);\n    j.push_back(o2);\n    std::cout << j << std::endl;\n}\n

    Output:

    [1,null]\n
    "},{"location":"api/macros/nlohmann_json_namespace_begin/#see-also","title":"See also","text":"
    • nlohmann Namespace
    • NLOHMANN_JSON_NAMESPACE
    • NLOHMANN_JSON_NAMESPACE_NO_VERSION
    "},{"location":"api/macros/nlohmann_json_namespace_begin/#version-history","title":"Version history","text":"
    • Added in version 3.11.0. Changed inline namespace name in version 3.11.2.
    "},{"location":"api/macros/nlohmann_json_namespace_no_version/","title":"NLOHMANN_JSON_NAMESPACE_NO_VERSION","text":"
    #define NLOHMANN_JSON_NAMESPACE_NO_VERSION /* value */\n

    If defined to 1, the version component is omitted from the inline namespace. See nlohmann Namespace for details.

    "},{"location":"api/macros/nlohmann_json_namespace_no_version/#default-definition","title":"Default definition","text":"

    The default value is 0.

    #define NLOHMANN_JSON_NAMESPACE_NO_VERSION 0\n

    When the macro is not defined, the library will define it to its default value.

    "},{"location":"api/macros/nlohmann_json_namespace_no_version/#examples","title":"Examples","text":"Example

    The example shows how to use NLOHMANN_JSON_NAMESPACE_NO_VERSION to disable the version component of the inline namespace.

    #include <iostream>\n\n#define NLOHMANN_JSON_NAMESPACE_NO_VERSION 1\n#include <nlohmann/json.hpp>\n\n// macro needed to output the NLOHMANN_JSON_NAMESPACE as string literal\n#define Q(x) #x\n#define QUOTE(x) Q(x)\n\nint main()\n{\n    std::cout << QUOTE(NLOHMANN_JSON_NAMESPACE) << std::endl;\n}\n

    Output:

    nlohmann::json_abi\n
    "},{"location":"api/macros/nlohmann_json_namespace_no_version/#see-also","title":"See also","text":"
    • nlohmann Namespace
    • NLOHMANN_JSON_NAMESPACE
    • NLOHMANN_JSON_NAMESPACE_BEGIN, NLOHMANN_JSON_NAMESPACE_END
    "},{"location":"api/macros/nlohmann_json_namespace_no_version/#version-history","title":"Version history","text":"
    • Added in version 3.11.2.
    "},{"location":"api/macros/nlohmann_json_serialize_enum/","title":"NLOHMANN_JSON_SERIALIZE_ENUM","text":"
    #define NLOHMANN_JSON_SERIALIZE_ENUM(type, conversion...)\n

    By default, enum values are serialized to JSON as integers. In some cases this could result in undesired behavior. If an enum is modified or re-ordered after data has been serialized to JSON, the later de-serialized JSON data may be undefined or a different enum value than was originally intended.

    The NLOHMANN_JSON_SERIALIZE_ENUM allows to define a user-defined serialization for every enumerator.

    "},{"location":"api/macros/nlohmann_json_serialize_enum/#parameters","title":"Parameters","text":"type (in) name of the enum to serialize/deserialize conversion (in) a pair of an enumerator and a JSON serialization; arbitrary pairs can be given as a comma-separated list"},{"location":"api/macros/nlohmann_json_serialize_enum/#default-definition","title":"Default definition","text":"

    The macro adds two functions to the namespace which take care of the serialization and deserialization:

    template<typename BasicJsonType>\ninline void to_json(BasicJsonType& j, const type& e);\ntemplate<typename BasicJsonType>\ninline void from_json(const BasicJsonType& j, type& e);\n
    "},{"location":"api/macros/nlohmann_json_serialize_enum/#notes","title":"Notes","text":"

    Prerequisites

    The macro must be used inside the namespace of the enum.

    Important notes

    • When using template get<ENUM_TYPE>(), undefined JSON values will default to the first specified conversion. Select this default pair carefully. See example 1 below.
    • If an enum or JSON value is specified in multiple conversions, the first matching conversion from the top of the list will be returned when converting to or from JSON. See example 2 below.
    "},{"location":"api/macros/nlohmann_json_serialize_enum/#examples","title":"Examples","text":"Example 1: Basic usage

    The example shows how NLOHMANN_JSON_SERIALIZE_ENUM can be used to serialize/deserialize both classical enums and C++11 enum classes:

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nnamespace ns\n{\nenum TaskState\n{\n    TS_STOPPED,\n    TS_RUNNING,\n    TS_COMPLETED,\n    TS_INVALID = -1\n};\n\nNLOHMANN_JSON_SERIALIZE_ENUM(TaskState,\n{\n    { TS_INVALID, nullptr },\n    { TS_STOPPED, \"stopped\" },\n    { TS_RUNNING, \"running\" },\n    { TS_COMPLETED, \"completed\" }\n})\n\nenum class Color\n{\n    red, green, blue, unknown\n};\n\nNLOHMANN_JSON_SERIALIZE_ENUM(Color,\n{\n    { Color::unknown, \"unknown\" }, { Color::red, \"red\" },\n    { Color::green, \"green\" }, { Color::blue, \"blue\" }\n})\n} // namespace ns\n\nint main()\n{\n    // serialization\n    json j_stopped = ns::TS_STOPPED;\n    json j_red = ns::Color::red;\n    std::cout << \"ns::TS_STOPPED -> \" << j_stopped\n              << \", ns::Color::red -> \" << j_red << std::endl;\n\n    // deserialization\n    json j_running = \"running\";\n    json j_blue = \"blue\";\n    auto running = j_running.template get<ns::TaskState>();\n    auto blue = j_blue.template get<ns::Color>();\n    std::cout << j_running << \" -> \" << running\n              << \", \" << j_blue << \" -> \" << static_cast<int>(blue) << std::endl;\n\n    // deserializing undefined JSON value to enum\n    // (where the first map entry above is the default)\n    json j_pi = 3.14;\n    auto invalid = j_pi.template get<ns::TaskState>();\n    auto unknown = j_pi.template get<ns::Color>();\n    std::cout << j_pi << \" -> \" << invalid << \", \"\n              << j_pi << \" -> \" << static_cast<int>(unknown) << std::endl;\n}\n

    Output:

    ns::TS_STOPPED -> \"stopped\", ns::Color::red -> \"red\"\n\"running\" -> 1, \"blue\" -> 2\n3.14 -> -1, 3.14 -> 3\n
    Example 2: Multiple conversions for one enumerator

    The example shows how to use multiple conversions for a single enumerator. In the example, Color::red will always be serialized to \"red\", because the first occurring conversion. The second conversion, however, offers an alternative deserialization from \"rot\" to Color::red.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nnamespace ns\n{\nenum class Color\n{\n    red, green, blue, unknown\n};\n\nNLOHMANN_JSON_SERIALIZE_ENUM(Color,\n{\n    { Color::unknown, \"unknown\" }, { Color::red, \"red\" },\n    { Color::green, \"green\" }, { Color::blue, \"blue\" },\n    { Color::red, \"rot\" } // a second conversion for Color::red\n})\n}\n\nint main()\n{\n    // serialization\n    json j_red = ns::Color::red;\n    std::cout << static_cast<int>(ns::Color::red) << \" -> \" << j_red << std::endl;\n\n    // deserialization\n    json j_rot = \"rot\";\n    auto rot = j_rot.template get<ns::Color>();\n    auto red = j_red.template get<ns::Color>();\n    std::cout << j_rot << \" -> \" << static_cast<int>(rot) << std::endl;\n    std::cout << j_red << \" -> \" << static_cast<int>(red) << std::endl;\n}\n

    Output:

    0 -> \"red\"\n\"rot\" -> 0\n\"red\" -> 0\n
    "},{"location":"api/macros/nlohmann_json_serialize_enum/#see-also","title":"See also","text":"
    • Specializing enum conversion
    • JSON_DISABLE_ENUM_SERIALIZATION
    "},{"location":"api/macros/nlohmann_json_serialize_enum/#version-history","title":"Version history","text":"

    Added in version 3.4.0.

    "},{"location":"api/macros/nlohmann_json_version_major/","title":"NLOHMANN_JSON_VERSION_MAJOR, NLOHMANN_JSON_VERSION_MINOR, NLOHMANN_JSON_VERSION_PATCH","text":"
    #define NLOHMANN_JSON_VERSION_MAJOR /* value */\n#define NLOHMANN_JSON_VERSION_MINOR /* value */\n#define NLOHMANN_JSON_VERSION_PATCH /* value */\n

    These macros are defined by the library and contain the version numbers according to Semantic Versioning 2.0.0.

    "},{"location":"api/macros/nlohmann_json_version_major/#default-definition","title":"Default definition","text":"

    The macros are defined according to the current library version.

    "},{"location":"api/macros/nlohmann_json_version_major/#examples","title":"Examples","text":"Example

    The example below shows how NLOHMANN_JSON_VERSION_MAJOR, NLOHMANN_JSON_VERSION_MINOR, and NLOHMANN_JSON_VERSION_PATCH are defined by the library.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << \"JSON for Modern C++ version \"\n              << NLOHMANN_JSON_VERSION_MAJOR << \".\"\n              << NLOHMANN_JSON_VERSION_MINOR << \".\"\n              << NLOHMANN_JSON_VERSION_PATCH << std::endl;\n}\n

    Output:

    JSON for Modern C++ version 3.11.3\n
    "},{"location":"api/macros/nlohmann_json_version_major/#see-also","title":"See also","text":"
    • meta - returns version information on the library
    • JSON_SKIP_LIBRARY_VERSION_CHECK - skip library version check
    "},{"location":"api/macros/nlohmann_json_version_major/#version-history","title":"Version history","text":"
    • Added in version 3.1.0.
    "},{"location":"community/","title":"Community","text":"
    • Code of Conduct - the rules and norms of this project
    • Contribution Guidelines - guidelines how to contribute to this project
    • Governance - the governance model of this project
    • Quality Assurance - how quality of this project is assured
    • Security Policy - the security policy of the project
    "},{"location":"community/code_of_conduct/","title":"Contributor Covenant Code of Conduct","text":""},{"location":"community/code_of_conduct/#our-pledge","title":"Our Pledge","text":"

    We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation.

    We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.

    "},{"location":"community/code_of_conduct/#our-standards","title":"Our Standards","text":"

    Examples of behavior that contributes to a positive environment for our community include:

    • Demonstrating empathy and kindness toward other people
    • Being respectful of differing opinions, viewpoints, and experiences
    • Giving and gracefully accepting constructive feedback
    • Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience
    • Focusing on what is best not just for us as individuals, but for the overall community

    Examples of unacceptable behavior include:

    • The use of sexualized language or imagery, and sexual attention or advances of any kind
    • Trolling, insulting or derogatory comments, and personal or political attacks
    • Public or private harassment
    • Publishing others' private information, such as a physical or email address, without their explicit permission
    • Other conduct which could reasonably be considered inappropriate in a professional setting
    "},{"location":"community/code_of_conduct/#enforcement-responsibilities","title":"Enforcement Responsibilities","text":"

    Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful.

    Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate.

    "},{"location":"community/code_of_conduct/#scope","title":"Scope","text":"

    This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official email address, posting via an official social media account, or acting as an appointed representative at an online or offline event.

    "},{"location":"community/code_of_conduct/#enforcement","title":"Enforcement","text":"

    Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at mail@nlohmann.me. All complaints will be reviewed and investigated promptly and fairly.

    All community leaders are obligated to respect the privacy and security of the reporter of any incident.

    "},{"location":"community/code_of_conduct/#enforcement-guidelines","title":"Enforcement Guidelines","text":"

    Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct:

    "},{"location":"community/code_of_conduct/#1-correction","title":"1. Correction","text":"

    Community Impact: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.

    Consequence: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested.

    "},{"location":"community/code_of_conduct/#2-warning","title":"2. Warning","text":"

    Community Impact: A violation through a single incident or series of actions.

    Consequence: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban.

    "},{"location":"community/code_of_conduct/#3-temporary-ban","title":"3. Temporary Ban","text":"

    Community Impact: A serious violation of community standards, including sustained inappropriate behavior.

    Consequence: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban.

    "},{"location":"community/code_of_conduct/#4-permanent-ban","title":"4. Permanent Ban","text":"

    Community Impact: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.

    Consequence: A permanent ban from any sort of public interaction within the community.

    "},{"location":"community/code_of_conduct/#attribution","title":"Attribution","text":"

    This Code of Conduct is adapted from the Contributor Covenant, version 2.1, available at https://www.contributor-covenant.org/version/2/1/code_of_conduct.html.

    Community Impact Guidelines were inspired by Mozilla's code of conduct enforcement ladder.

    For answers to common questions about this code of conduct, see the FAQ at https://www.contributor-covenant.org/faq. Translations are available at https://www.contributor-covenant.org/translations.

    "},{"location":"community/contribution_guidelines/","title":"Contribution Guidelines","text":"

    Thank you for your interest in contributing to this project! What began as an exercise to explore the exciting features of C++11 has evolved into a widely-used JSON library. I truly appreciate all the contributions from the community, whether it's proposing features, identifying bugs, or fixing mistakes! To ensure that our collaboration is efficient and effective, please follow these guidelines.

    Feel free to discuss or suggest improvements to this document by submitting a pull request.

    "},{"location":"community/contribution_guidelines/#ways-to-contribute","title":"Ways to Contribute","text":"

    There are multiple ways to contribute.

    "},{"location":"community/contribution_guidelines/#reporting-an-issue","title":"Reporting an issue","text":"

    Please create an issue, assuming one does not already exist, and describe your concern. Note you need a GitHub account for this.

    Clearly describe the issue:

    • If it is a bug, please describe how to reproduce it. If possible, attach a complete example which demonstrates the error. Please also state what you expected to happen instead of the error.
    • If you propose a change or addition, try to give an example how the improved code could look like or how to use it.
    • If you found a compilation error, please tell us which compiler (version and operating system) you used and paste the (relevant part of) the error messages to the ticket.

    Please stick to the provided issue template bug report if possible.

    "},{"location":"community/contribution_guidelines/#reporting-a-security-vulnerability","title":"Reporting a security vulnerability","text":"

    You can report a security vulnerability according to our security policy.

    "},{"location":"community/contribution_guidelines/#discussing-a-new-feature","title":"Discussing a new feature","text":"

    For questions, feature or support requests, please open a discussion. If you find a proposed answer satisfactory, please use the \"Mark as answer\" button to make it easier for readers to see what helped and for the community to filter for open questions.

    "},{"location":"community/contribution_guidelines/#proposing-a-fix-or-an-improvement","title":"Proposing a fix or an improvement","text":"

    Join an ongoing discussion or comment on an existing issue before starting to code. This can help to avoid duplicate efforts or other frustration during the later review.

    Create a pull request against the develop branch and follow the pull request template. In particular,

    • describe the changes in detail, both the what and why,
    • reference existing issues where applicable,
    • add tests to maintain 100% test coverage,
    • update the documentation as needed, and
    • ensure the source code is amalgamated.

    We describe all points in detail below.

    All contributions (including pull requests) must agree to the Developer Certificate of Origin (DCO) version 1.1. This is exactly the same one created and used by the Linux kernel developers and posted on http://developercertificate.org/. This is a developer's certification that he or she has the right to submit the patch for inclusion into the project.

    "},{"location":"community/contribution_guidelines/#how-to","title":"How to...","text":""},{"location":"community/contribution_guidelines/#describe-your-changes","title":"Describe your changes","text":"

    This library is primarily maintained as a spare-time project. As such, I can not make any guarantee how quickly changes are merged and released. Therefore, it is very important to make the review as smooth as possible by explaining not only what you changed, but why. This rationale can be very valuable down the road when improvements or bugs are discussed years later.

    "},{"location":"community/contribution_guidelines/#reference-existing-issues","title":"Reference existing issues","text":"

    Link a pull request to an issue to clarify that a fix is forthcoming and which issue can be closed after merging. Only few cases (e.g., fixing typos) don\u2019t require prior discussions.

    "},{"location":"community/contribution_guidelines/#write-tests","title":"Write tests","text":"

    The library has an extensive test suite that currently covers 100 % of the library's code. These test are crucial to maintain API stability and give future contributors confidence that they do not accidentally break things. As Titus Winters aptly put it:

    If you liked it, you should have put a test on it.

    "},{"location":"community/contribution_guidelines/#run-the-tests","title":"Run the tests","text":"

    First, ensure the test suite runs before making any changes:

    $ cmake -S. -B build\n$ cmake --build build -j 10\n$ ctest --test-dir build -j 10\n

    The test suite should report:

    100% tests passed, 0 tests failed out of 98\n
    "},{"location":"community/contribution_guidelines/#add-tests","title":"Add tests","text":"

    The tests are located in tests/src/unit-*.cpp and contain doctest assertions like CHECK. The tests are structured along the features of the library or the nature of the tests. Usually, it should be clear from the context which existing file needs to be extended, and only very few cases require creating new test files.

    When fixing a bug, edit unit-regression2.cpp and add a section referencing the fixed issue.

    "},{"location":"community/contribution_guidelines/#exceptions","title":"Exceptions","text":"

    When you test exceptions, please use CHECK_THROWS_WITH_AS which also takes the what() argument of the thrown exception into account.

    "},{"location":"community/contribution_guidelines/#coverage","title":"Coverage","text":"

    If test coverage decreases, an automatic warning comment will be posted on the pull request. You can access a code coverage report as artifact to the \u201cUbuntu\u201d workflow.

    "},{"location":"community/contribution_guidelines/#update-the-documentation","title":"Update the documentation","text":"

    The main documentation of the library is generated from the files docs/mkdocs/docs. This folder contains dedicated pages for certain features, a list of all exceptions, and an extensive API documentation with details on every public API function.

    Build the documentation locally using:

    make install_venv -C docs/mkdocs\nmake serve -C docs/mkdocs\n

    The documentation will then available at http://127.0.0.1:8000/. See the documentation of mkdocs and Material for MkDocs for more information.

    "},{"location":"community/contribution_guidelines/#amalgamate-the-source-code","title":"Amalgamate the source code","text":"

    The single-header files single_include/nlohmann/json.hpp and single_include/nlohmann/json_fwd.hpp are generated from the source files in the include/nlohmann directory. Do not edit the files directly; instead, modify the include/nlohmann sources and regenerate the files by executing:

    make amalgamate\n
    "},{"location":"community/contribution_guidelines/#recommended-documentation","title":"Recommended documentation","text":"
    • The library\u2019s README file is an excellent starting point to understand its functionality.
    • The documentation page is the reference documentation of the library.
    • RFC 8259 is the reference for the JavaScript Object Notation (JSON) Data Interchange Format.
    "},{"location":"community/contribution_guidelines/#please-dont","title":"Please don't...","text":"

    Certain contributions are not helpful.

    "},{"location":"community/contribution_guidelines/#break-the-public-api","title":"Break the public API","text":"

    We take pride in the library being used by numerous customers across various industries. They all rely on the guarantees provided by semantic versioning. Please do not change the library such that the public API of the 3.x.y version is broken. This includes:

    • Changing function signatures (altering parameter types, return types, number of parameters) or changing the const-ness of member functions.
    • Removing functions.
    • Renaming functions or classes.
    • Changing exception handling.
    • Changing exception ids.
    • Changing access specifiers.
    • Changing default arguments.

    Although these guidelines may seem restrictive, they are essential for maintaining the library\u2019s utility.

    Breaking changes may be introduced when they are guarded with a feature macro such as JSON_USE_IMPLICIT_CONVERSIONS which allows to selectively change the behavior of the library. In next steps, the current behavior can then be deprecated. Using feature macros then allows users to test their code against the library in the next major release.

    "},{"location":"community/contribution_guidelines/#break-c11-language-conformance","title":"Break C++11 language conformance","text":"

    This library is designed to work with C++11 and later. This means that any supported C++11 compiler should compile the library without problems. Some compilers like GCC 4.7 (and earlier), Clang 3.3 (and earlier), or Microsoft Visual Studio 13.0 and earlier are known not to work due to missing or incomplete C++11 support.

    Please do not add features that do not work with the mentioned supported compilers. Please guard features from C++14 and later against the respective JSON_HAS_CPP_14 macros.

    "},{"location":"community/contribution_guidelines/#break-json-conformance","title":"Break JSON conformance","text":"

    Please refrain from proposing changes that would break JSON conformance. If you propose a conformant extension of JSON to be supported by the library, please motivate this extension.

    "},{"location":"community/contribution_guidelines/#wanted","title":"Wanted","text":"

    The following areas really need contribution and are always welcomed:

    • Extending the continuous integration toward more exotic compilers such as Android NDK, Intel's Compiler, or the bleeding-edge versions Clang.
    • Improving the efficiency of the JSON parser. The current parser is implemented as a naive recursive descent parser with hand coded string handling. More sophisticated approaches like LALR parsers would be really appreciated. That said, parser generators like Bison or ANTLR do not play nice with single-header files -- I really would like to keep the parser inside the json.hpp header, and I am not aware of approaches similar to re2c for parsing.
    • Extending and updating existing benchmarks to include (the most recent version of) this library. Though efficiency is not everything, speed and memory consumption are very important characteristics for C++ developers, so having proper comparisons would be interesting.

    We look forward to your contributions and collaboration to enhance the library!

    "},{"location":"community/governance/","title":"Governance","text":"

    The governance model for the JSON for Modern C++ project is a Benevolent Dictator for Life (BDFL) structure. As the sole maintainer, Niels Lohmann is responsible for all key aspects of the project. The project governance may evolve as the project grows, but any changes will be documented here and communicated to contributors.

    "},{"location":"community/governance/#overview","title":"Overview","text":"

    This project is led by a benevolent dictator, Niels Lohmann, and managed by the community. That is, the community actively contributes to the day-to-day maintenance of the project, but the general strategic line is drawn by the benevolent dictator. In case of disagreement, they have the last word. It is the benevolent dictator\u2019s job to resolve disputes within the community and to ensure that the project is able to progress in a coordinated way. In turn, it is the community\u2019s job to guide the decisions of the benevolent dictator through active engagement and contribution.

    "},{"location":"community/governance/#roles-and-responsibilities","title":"Roles and responsibilities","text":""},{"location":"community/governance/#benevolent-dictator-project-lead","title":"Benevolent dictator (project lead)","text":"

    Typically, the benevolent dictator, or project lead, is self-appointed. However, because the community always has the ability to fork, this person is fully answerable to the community. The project lead\u2019s role is a difficult one: they set the strategic objectives of the project and communicate these clearly to the community. They also have to understand the community as a whole and strive to satisfy as many conflicting needs as possible, while ensuring that the project survives in the long term.

    In many ways, the role of the benevolent dictator is less about dictatorship and more about diplomacy. The key is to ensure that, as the project expands, the right people are given influence over it and the community rallies behind the vision of the project lead. The lead\u2019s job is then to ensure that the committers (see below) make the right decisions on behalf of the project. Generally speaking, as long as the committers are aligned with the project\u2019s strategy, the project lead will allow them to proceed as they desire.

    "},{"location":"community/governance/#committers","title":"Committers","text":"

    Committers are contributors who have made several valuable contributions to the project and are now relied upon to both write code directly to the repository and screen the contributions of others. In many cases they are programmers but it is also possible that they contribute in a different role. Typically, a committer will focus on a specific aspect of the project, and will bring a level of expertise and understanding that earns them the respect of the community and the project lead. The role of committer is not an official one, it is simply a position that influential members of the community will find themselves in as the project lead looks to them for guidance and support.

    Committers have no authority over the overall direction of the project. However, they do have the ear of the project lead. It is a committer\u2019s job to ensure that the lead is aware of the community\u2019s needs and collective objectives, and to help develop or elicit appropriate contributions to the project. Often, committers are given informal control over their specific areas of responsibility, and are assigned rights to directly modify certain areas of the source code. That is, although committers do not have explicit decision-making authority, they will often find that their actions are synonymous with the decisions made by the lead.

    "},{"location":"community/governance/#contributors","title":"Contributors","text":"

    Contributors are community members who either have no desire to become committers, or have not yet been given the opportunity by the benevolent dictator. They make valuable contributions, such as those outlined in the list below, but generally do not have the authority to make direct changes to the project code. Contributors engage with the project through communication tools, such as email lists, and via reports and patches attached to issues in the issue tracker, as detailed in our community tools document.

    Anyone can become a contributor. There is no expectation of commitment to the project, no specific skill requirements and no selection process. To become a contributor, a community member simply has to perform one or more actions that are beneficial to the project.

    Some contributors will already be engaging with the project as users, but will also find themselves doing one or more of the following:

    • supporting new users (current users often provide the most effective new user support)
    • reporting bugs
    • identifying requirements
    • supplying graphics and web design
    • programming
    • assisting with project infrastructure
    • writing documentation
    • fixing bugs
    • adding features

    As contributors gain experience and familiarity with the project, they may find that the project lead starts relying on them more and more. When this begins to happen, they gradually adopt the role of committer, as described above.

    "},{"location":"community/governance/#users","title":"Users","text":"

    Users are community members who have a need for the project. They are the most important members of the community: without them, the project would have no purpose. Anyone can be a user; there are no specific requirements.

    Users should be encouraged to participate in the life of the project and the community as much as possible. User contributions enable the project team to ensure that they are satisfying the needs of those users. Common user activities include (but are not limited to):

    • evangelising about the project
    • informing developers of project strengths and weaknesses from a new user\u2019s perspective
    • providing moral support (a \u2018thank you\u2019 goes a long way)
    • providing financial support

    Users who continue to engage with the project and its community will often find themselves becoming more and more involved. Such users may then go on to become contributors, as described above.

    "},{"location":"community/governance/#support","title":"Support","text":"

    All participants in the community are encouraged to provide support for new users within the project management infrastructure. This support is provided as a way of growing the community. Those seeking support should recognise that all support activity within the project is voluntary and is therefore provided as and when time allows. A user requiring guaranteed response times or results should therefore seek to purchase a support contract from a vendor. (Of course, that vendor should be an active member of the community.) However, for those willing to engage with the project on its own terms, and willing to help support other users, the community support channels are ideal.

    "},{"location":"community/governance/#contribution-process","title":"Contribution Process","text":"

    Anyone can contribute to the project, regardless of their skills, as there are many ways to contribute. For instance, a contributor might be active on the project mailing list and issue tracker, or might supply patches. The various ways of contributing are described in more detail in our roles in open source document.

    The developer mailing list is the most appropriate place for a contributor to ask for help when making their first contribution.

    "},{"location":"community/governance/#decision-making-process","title":"Decision-Making Process","text":"

    The benevolent dictatorship model does not need a formal conflict resolution process, since the project lead\u2019s word is final. If the community chooses to question the wisdom of the actions of a committer, the project lead can review their decisions by checking the email archives, and either uphold or reverse them.

    Source

    The text was taken from http://oss-watch.ac.uk/resources/benevolentdictatorgovernancemodel.

    "},{"location":"community/quality_assurance/","title":"Quality assurance","text":"

    Ensuring quality is paramount for this project, particularly because numerous other projects depend on it. Each commit to the library undergoes rigorous checks against the following requirements, and any violations will result in a failed build.

    "},{"location":"community/quality_assurance/#c-language-compliance-and-compiler-compatibility","title":"C++ language compliance and compiler compatibility","text":"

    Requirement: Compiler support

    Any compiler with complete C++11 support can compile the library without warnings.

    • The library is compiled library with 50+ different C++ compilers with different operating systems and platforms, including the oldest versions known to compile the library.

      Compilers used in continuous integration Compiler Architecture Operating System CI AppleClang 14.0.0.14000029; Xcode 14.1 x86_64 macOS 13.7.2 (Ventura) GitHub AppleClang 14.0.0.14000029; Xcode 14.2 x86_64 macOS 13.7.2 (Ventura) GitHub AppleClang 14.0.3.14030022; Xcode 14.3.1 x86_64 macOS 13.7.2 (Ventura) GitHub AppleClang 15.0.0.15000040; Xcode 15.0.1 x86_64 macOS 13.7.2 (Ventura) GitHub AppleClang 15.0.0.15000100; Xcode 15.1 x86_64 macOS 13.7.2 (Ventura) GitHub AppleClang 15.0.0.15000100; Xcode 15.2 x86_64 macOS 13.7.2 (Ventura) GitHub AppleClang 15.0.0.15000309; Xcode 15.3 arm64 macOS 14.7.2 (Sonoma) GitHub AppleClang 15.0.0.15000309; Xcode 15.4 arm64 macOS 14.7.2 (Sonoma) GitHub AppleClang 16.0.0.16000026; Xcode 16 arm64 macOS 15.2 (Sequoia) GitHub AppleClang 16.0.0.16000026; Xcode 16.1 arm64 macOS 15.2 (Sequoia) GitHub AppleClang 16.0.0.16000026; Xcode 16.2 arm64 macOS 15.2 (Sequoia) GitHub Clang 3.5.2 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 3.6.2 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 3.7.1 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 3.8.1 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 3.9.1 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 4.0.1 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 5.0.2 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 6.0.1 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 7.1.0 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 8.0.1 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 9.0.1 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 10.0.1 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 11.0.0 with GNU-like command-line x86_64 Windows 10 (Build 17763) GitHub Clang 11.1.0 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 12.0.0 with GNU-like command-line x86_64 Windows 10 (Build 17763) GitHub Clang 12.0.0 with MSVC-like command-line x86_64 Windows 10 (Build 17763) GitHub Clang 12.0.1 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 13.0.0 with GNU-like command-line x86_64 Windows 10 (Build 17763) GitHub Clang 13.0.1 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 14.0.0 with GNU-like command-line x86_64 Windows 10 (Build 17763) GitHub Clang 14.0.6 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 15.0.0 with GNU-like command-line x86_64 Windows 10 (Build 17763) GitHub Clang 15.0.7 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 16.0.6 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 17.0.6 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 18.1.8 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 19.1.7 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 20.1.1 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 21.0.0 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 4.8.5 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 4.9.3 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 5.5.0 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 6.4.0 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 7.5.0 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 8.5.0 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 9.3.0 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 9.4.0 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 9.5.0 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 10.5.0 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 11.4.0 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 11.5.0 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 12.2.0 (MinGW-W64 i686-ucrt-posix-dwarf) x86_64 Windows 10 (Build 17763) GitHub GNU 12.2.0 (MinGW-W64 x86_64-ucrt-posix-seh) x86_64 Windows 10 (Build 17763) GitHub GNU 12.4.0 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 13.3.0 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 14.2.0 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 14.2.0 arm64 Linux 6.1.100 Cirrus CI MSVC 19.0.24241.7 x86 Windows 8.1 AppVeyor MSVC 19.16.27035.0 x86 Windows-10 (Build 14393) AppVeyor MSVC 19.29.30157.0 x86 Windows 10 (Build 17763) GitHub MSVC 19.29.30157.0 x86_64 Windows 10 (Build 17763) GitHub MSVC 19.29.30157.0 x86 Windows-10 (Build 17763) AppVeyor MSVC 19.42.34435.0 x86 Windows 10 (Build 20348) GitHub MSVC 19.42.34435.0 x86_64 Windows 10 (Build 20348) GitHub
    • The library is compiled with all C++ language revisions (C++11, C++14, C++17, C++20, C++23, and C++26) to detect and fix language deprecations early.

    • The library is checked for compiler warnings:
    • On Clang, -Weverything is used with 7 exceptions.

      Clang warnings
      # Ignored Clang warnings:\n# -Wno-c++98-compat               The library targets C++11.\n# -Wno-c++98-compat-pedantic      The library targets C++11.\n# -Wno-deprecated-declarations    The library contains annotations for deprecated functions.\n# -Wno-extra-semi-stmt            The library uses assert which triggers this warning.\n# -Wno-padded                     We do not care about padding warnings.\n# -Wno-covered-switch-default     All switches list all cases and a default case.\n# -Wno-unsafe-buffer-usage        Otherwise Doctest would not compile.\n\nset(CLANG_CXXFLAGS\n    -Werror\n    -Weverything\n    -Wno-c++98-compat\n    -Wno-c++98-compat-pedantic\n    -Wno-deprecated-declarations\n    -Wno-extra-semi-stmt\n    -Wno-padded\n    -Wno-covered-switch-default\n    -Wno-unsafe-buffer-usage\n)\n
    • On GCC, 300+ warnings are enabled with 8 exceptions.

      GCC warnings
      # Warning flags determined for GCC 14.2.0 with https://github.com/nlohmann/gcc_flags:\n# Ignored GCC warnings:\n# -Wno-abi-tag                    We do not care about ABI tags.\n# -Wno-aggregate-return           The library uses aggregate returns.\n# -Wno-long-long                  The library uses the long long type to interface with system functions.\n# -Wno-namespaces                 The library uses namespaces.\n# -Wno-nrvo                       Doctest triggers this warning.\n# -Wno-padded                     We do not care about padding warnings.\n# -Wno-system-headers             We do not care about warnings in system headers.\n# -Wno-templates                  The library uses templates.\n\nset(GCC_CXXFLAGS\n    -pedantic\n    -Werror\n    --all-warnings\n    --extra-warnings\n    -W\n    -WNSObject-attribute\n    -Wno-abi-tag\n    -Waddress\n    -Waddress-of-packed-member\n    -Wno-aggregate-return\n    -Waggressive-loop-optimizations\n    -Waligned-new=all\n    -Wall\n    -Walloc-size\n    -Walloc-zero\n    -Walloca\n    -Wanalyzer-allocation-size\n    -Wanalyzer-deref-before-check\n    -Wanalyzer-double-fclose\n    -Wanalyzer-double-free\n    -Wanalyzer-exposure-through-output-file\n    -Wanalyzer-exposure-through-uninit-copy\n    -Wanalyzer-fd-access-mode-mismatch\n    -Wanalyzer-fd-double-close\n    -Wanalyzer-fd-leak\n    -Wanalyzer-fd-phase-mismatch\n    -Wanalyzer-fd-type-mismatch\n    -Wanalyzer-fd-use-after-close\n    -Wanalyzer-fd-use-without-check\n    -Wanalyzer-file-leak\n    -Wanalyzer-free-of-non-heap\n    -Wanalyzer-imprecise-fp-arithmetic\n    -Wanalyzer-infinite-loop\n    -Wanalyzer-infinite-recursion\n    -Wanalyzer-jump-through-null\n    -Wanalyzer-malloc-leak\n    -Wanalyzer-mismatching-deallocation\n    -Wanalyzer-null-argument\n    -Wanalyzer-null-dereference\n    -Wanalyzer-out-of-bounds\n    -Wanalyzer-overlapping-buffers\n    -Wanalyzer-possible-null-argument\n    -Wanalyzer-possible-null-dereference\n    -Wanalyzer-putenv-of-auto-var\n    -Wanalyzer-shift-count-negative\n    -Wanalyzer-shift-count-overflow\n    -Wanalyzer-stale-setjmp-buffer\n    -Wanalyzer-symbol-too-complex\n    -Wanalyzer-tainted-allocation-size\n    -Wanalyzer-tainted-array-index\n    -Wanalyzer-tainted-assertion\n    -Wanalyzer-tainted-divisor\n    -Wanalyzer-tainted-offset\n    -Wanalyzer-tainted-size\n    -Wanalyzer-too-complex\n    -Wanalyzer-undefined-behavior-strtok\n    -Wanalyzer-unsafe-call-within-signal-handler\n    -Wanalyzer-use-after-free\n    -Wanalyzer-use-of-pointer-in-stale-stack-frame\n    -Wanalyzer-use-of-uninitialized-value\n    -Wanalyzer-va-arg-type-mismatch\n    -Wanalyzer-va-list-exhausted\n    -Wanalyzer-va-list-leak\n    -Wanalyzer-va-list-use-after-va-end\n    -Wanalyzer-write-to-const\n    -Wanalyzer-write-to-string-literal\n    -Warith-conversion\n    -Warray-bounds=2\n    -Warray-compare\n    -Warray-parameter=2\n    -Wattribute-alias=2\n    -Wattribute-warning\n    -Wattributes\n    -Wbool-compare\n    -Wbool-operation\n    -Wbuiltin-declaration-mismatch\n    -Wbuiltin-macro-redefined\n    -Wc++0x-compat\n    -Wc++11-compat\n    -Wc++11-extensions\n    -Wc++14-compat\n    -Wc++14-extensions\n    -Wc++17-compat\n    -Wc++17-extensions\n    -Wc++1z-compat\n    -Wc++20-compat\n    -Wc++20-extensions\n    -Wc++23-extensions\n    -Wc++26-extensions\n    -Wc++2a-compat\n    -Wcalloc-transposed-args\n    -Wcannot-profile\n    -Wcast-align\n    -Wcast-align=strict\n    -Wcast-function-type\n    -Wcast-qual\n    -Wcast-user-defined\n    -Wcatch-value=3\n    -Wchanges-meaning\n    -Wchar-subscripts\n    -Wclass-conversion\n    -Wclass-memaccess\n    -Wclobbered\n    -Wcomma-subscript\n    -Wcomment\n    -Wcomments\n    -Wcomplain-wrong-lang\n    -Wconditionally-supported\n    -Wconversion\n    -Wconversion-null\n    -Wcoverage-invalid-line-number\n    -Wcoverage-mismatch\n    -Wcoverage-too-many-conditions\n    -Wcpp\n    -Wctad-maybe-unsupported\n    -Wctor-dtor-privacy\n    -Wdangling-else\n    -Wdangling-pointer=2\n    -Wdangling-reference\n    -Wdate-time\n    -Wdelete-incomplete\n    -Wdelete-non-virtual-dtor\n    -Wdeprecated\n    -Wdeprecated-copy\n    -Wdeprecated-copy-dtor\n    -Wdeprecated-declarations\n    -Wdeprecated-enum-enum-conversion\n    -Wdeprecated-enum-float-conversion\n    -Wdisabled-optimization\n    -Wdiv-by-zero\n    -Wdouble-promotion\n    -Wduplicated-branches\n    -Wduplicated-cond\n    -Weffc++\n    -Welaborated-enum-base\n    -Wempty-body\n    -Wendif-labels\n    -Wenum-compare\n    -Wenum-conversion\n    -Wexceptions\n    -Wexpansion-to-defined\n    -Wextra\n    -Wextra-semi\n    -Wflex-array-member-not-at-end\n    -Wfloat-conversion\n    -Wfloat-equal\n    -Wformat -Wformat-contains-nul\n    -Wformat -Wformat-extra-args\n    -Wformat -Wformat-nonliteral\n    -Wformat -Wformat-security\n    -Wformat -Wformat-y2k\n    -Wformat -Wformat-zero-length\n    -Wformat-diag\n    -Wformat-overflow=2\n    -Wformat-signedness\n    -Wformat-truncation=2\n    -Wformat=2\n    -Wframe-address\n    -Wfree-nonheap-object\n    -Wglobal-module\n    -Whardened\n    -Whsa\n    -Wif-not-aligned\n    -Wignored-attributes\n    -Wignored-qualifiers\n    -Wimplicit-fallthrough=5\n    -Winaccessible-base\n    -Winfinite-recursion\n    -Winherited-variadic-ctor\n    -Winit-list-lifetime\n    -Winit-self\n    -Winline\n    -Wint-in-bool-context\n    -Wint-to-pointer-cast\n    -Winterference-size\n    -Winvalid-constexpr\n    -Winvalid-imported-macros\n    -Winvalid-memory-model\n    -Winvalid-offsetof\n    -Winvalid-pch\n    -Winvalid-utf8\n    -Wliteral-suffix\n    -Wlogical-not-parentheses\n    -Wlogical-op\n    -Wno-long-long\n    -Wlto-type-mismatch\n    -Wmain\n    -Wmaybe-uninitialized\n    -Wmemset-elt-size\n    -Wmemset-transposed-args\n    -Wmisleading-indentation\n    -Wmismatched-dealloc\n    -Wmismatched-new-delete\n    -Wmismatched-tags\n    -Wmissing-attributes\n    -Wmissing-braces\n    -Wmissing-declarations\n    -Wmissing-field-initializers\n    -Wmissing-include-dirs\n    -Wmissing-profile\n    -Wmissing-requires\n    -Wmissing-template-keyword\n    -Wmultichar\n    -Wmultiple-inheritance\n    -Wmultistatement-macros\n    -Wno-namespaces\n    -Wnarrowing\n    -Wnoexcept\n    -Wnoexcept-type\n    -Wnon-template-friend\n    -Wnon-virtual-dtor\n    -Wnonnull\n    -Wnonnull-compare\n    -Wnormalized=nfkc\n    -Wno-nrvo\n    -Wnull-dereference\n    -Wodr\n    -Wold-style-cast\n    -Wopenacc-parallelism\n    -Wopenmp\n    -Wopenmp-simd\n    -Woverflow\n    -Woverlength-strings\n    -Woverloaded-virtual=2\n    -Wpacked\n    -Wpacked-bitfield-compat\n    -Wpacked-not-aligned\n    -Wno-padded\n    -Wparentheses\n    -Wpedantic\n    -Wpessimizing-move\n    -Wplacement-new=2\n    -Wpmf-conversions\n    -Wpointer-arith\n    -Wpointer-compare\n    -Wpragmas\n    -Wprio-ctor-dtor\n    -Wpsabi\n    -Wrange-loop-construct\n    -Wredundant-decls\n    -Wredundant-move\n    -Wredundant-tags\n    -Wregister\n    -Wreorder\n    -Wrestrict\n    -Wreturn-local-addr\n    -Wreturn-type\n    -Wscalar-storage-order\n    -Wself-move\n    -Wsequence-point\n    -Wshadow=compatible-local\n    -Wshadow=global\n    -Wshadow=local\n    -Wshift-count-negative\n    -Wshift-count-overflow\n    -Wshift-negative-value\n    -Wshift-overflow=2\n    -Wsign-compare\n    -Wsign-conversion\n    -Wsign-promo\n    -Wsized-deallocation\n    -Wsizeof-array-argument\n    -Wsizeof-array-div\n    -Wsizeof-pointer-div\n    -Wsizeof-pointer-memaccess\n    -Wstack-protector\n    -Wstrict-aliasing=3\n    -Wstrict-null-sentinel\n    -Wstrict-overflow\n    -Wstring-compare\n    -Wstringop-overflow=4\n    -Wstringop-overread\n    -Wstringop-truncation\n    -Wsubobject-linkage\n    -Wsuggest-attribute=cold\n    -Wsuggest-attribute=const\n    -Wsuggest-attribute=format\n    -Wsuggest-attribute=malloc\n    -Wsuggest-attribute=noreturn\n    -Wsuggest-attribute=pure\n    -Wsuggest-attribute=returns_nonnull\n    -Wsuggest-final-methods\n    -Wsuggest-final-types\n    -Wsuggest-override\n    -Wswitch\n    -Wswitch-bool\n    -Wswitch-default\n    -Wswitch-enum\n    -Wswitch-outside-range\n    -Wswitch-unreachable\n    -Wsync-nand\n    -Wsynth\n    -Wno-system-headers\n    -Wtautological-compare\n    -Wno-templates\n    -Wterminate\n    -Wtrampolines\n    -Wtrigraphs\n    -Wtrivial-auto-var-init\n    -Wtsan\n    -Wtype-limits\n    -Wundef\n    -Wunicode\n    -Wuninitialized\n    -Wunknown-pragmas\n    -Wunreachable-code\n    -Wunsafe-loop-optimizations\n    -Wunused\n    -Wunused-but-set-parameter\n    -Wunused-but-set-variable\n    -Wunused-const-variable=2\n    -Wunused-function\n    -Wunused-label\n    -Wunused-local-typedefs\n    -Wunused-macros\n    -Wunused-parameter\n    -Wunused-result\n    -Wunused-value\n    -Wunused-variable\n    -Wuse-after-free=3\n    -Wuseless-cast\n    -Wvarargs\n    -Wvariadic-macros\n    -Wvector-operation-performance\n    -Wvexing-parse\n    -Wvirtual-inheritance\n    -Wvirtual-move-assign\n    -Wvla\n    -Wvla-parameter\n    -Wvolatile\n    -Wvolatile-register-var\n    -Wwrite-strings\n    -Wxor-used-as-pow\n    -Wzero-as-null-pointer-constant\n    -Wzero-length-bounds\n)\n
    "},{"location":"community/quality_assurance/#c-standard-library-compliance","title":"C++ standard library compliance","text":"

    Requirement: No prerequisites

    The library has no prerequisites other than the Standard Template Library (STL).

    • The library compiled and tested with both libc++ and libstdc++ to detect subtle differences or incompatibilities.
    • The code checked with Include What You Use (IWYU) that all required standard headers are included.
    • On Windows, the library is compiled with <Windows.h> being included to detect and avoid common bugs.
    • The library is compiled with exceptions disabled to support alternative means of error handling.
    "},{"location":"community/quality_assurance/#stable-public-api","title":"Stable public API","text":"

    Requirement: Stable public API

    Any change to the library does not break the public API.

    • All public API functions are tested with a variety of arguments.
    • The library is compiled and tested with different template arguments for number, string, array, and object types.
    • All lines of the code base are covered by unit tests.
    • Every exception of the library is thrown in the test suite and the error messages and exception ids are checked.

    Requirement: Complete documentation

    The public API is extensively documented.

    • Every public API function has a dedicated page in the API reference documentation with a self-contained code example.
    • All examples in the documentation are tested and changes in their output is treated as an error.
    "},{"location":"community/quality_assurance/#robust-input-processing","title":"Robust input processing","text":"

    Requirement: Standards compliance

    The library is compliant to JSON as defined in RFC 8259.

    • The lexer is tested with all valid Unicode code points and all prefixes of all invalid Unicode code points.
    • The parser is tested against extensive correctness suites for JSON compliance.
    • In addition, the library is continuously fuzz-tested at OSS-Fuzz where the library is checked against billions of inputs.
    "},{"location":"community/quality_assurance/#static-analysis","title":"Static analysis","text":"

    Requirement: State-of-the-art code analysis

    The code is checked with state-of-the-art static code analysis tools.

    • The code is checked with the latest Clang-Tidy.

      Clang-Tidy configuration (.clang-tidy)
      # TODO: The first three checks are only removed to get the CI going. They have to be addressed at some point.\n\nChecks: '*,\n\n         -portability-template-virtual-member-function,\n         -bugprone-use-after-move,\n         -hicpp-invalid-access-moved,\n\n         -altera-id-dependent-backward-branch,\n         -altera-struct-pack-align,\n         -altera-unroll-loops,\n         -android-cloexec-fopen,\n         -boost-use-ranges,\n         -bugprone-easily-swappable-parameters,\n         -cert-err58-cpp,\n         -clang-analyzer-webkit.NoUncountedMemberChecker,\n         -concurrency-mt-unsafe,\n         -cppcoreguidelines-avoid-const-or-ref-data-members,\n         -cppcoreguidelines-avoid-do-while,\n         -cppcoreguidelines-avoid-goto,\n         -cppcoreguidelines-avoid-magic-numbers,\n         -cppcoreguidelines-avoid-non-const-global-variables,\n         -cppcoreguidelines-macro-usage,\n         -cppcoreguidelines-pro-bounds-array-to-pointer-decay,\n         -cppcoreguidelines-pro-bounds-constant-array-index,\n         -cppcoreguidelines-pro-bounds-pointer-arithmetic,\n         -cppcoreguidelines-pro-type-reinterpret-cast,\n         -cppcoreguidelines-pro-type-union-access,\n         -cppcoreguidelines-rvalue-reference-param-not-moved,\n         -cppcoreguidelines-virtual-class-destructor,\n         -fuchsia-default-arguments-calls,\n         -fuchsia-default-arguments-declarations,\n         -fuchsia-overloaded-operator,\n         -google-explicit-constructor,\n         -google-readability-function-size,\n         -google-runtime-int,\n         -google-runtime-references,\n         -hicpp-avoid-goto,\n         -hicpp-explicit-conversions,\n         -hicpp-function-size,\n         -hicpp-no-array-decay,\n         -hicpp-no-assembler,\n         -hicpp-signed-bitwise,\n         -hicpp-uppercase-literal-suffix,\n         -llvm-header-guard,\n         -llvm-include-order,\n         -llvmlibc-*,\n         -misc-use-anonymous-namespace,\n         -misc-confusable-identifiers,\n         -misc-include-cleaner,\n         -misc-no-recursion,\n         -misc-non-private-member-variables-in-classes,\n         -modernize-concat-nested-namespaces,\n         -modernize-type-traits,\n         -modernize-use-constraints,\n         -modernize-use-designated-initializers,\n         -modernize-use-nodiscard,\n         -modernize-use-ranges,\n         -modernize-use-std-numbers,\n         -modernize-use-trailing-return-type,\n         -performance-enum-size,\n         -readability-function-cognitive-complexity,\n         -readability-function-size,\n         -readability-identifier-length,\n         -readability-magic-numbers,\n         -readability-redundant-access-specifiers,\n         -readability-simplify-boolean-expr,\n         -readability-uppercase-literal-suffix'\n\nCheckOptions:\n  - key: hicpp-special-member-functions.AllowSoleDefaultDtor\n    value: 1\n\nWarningsAsErrors: '*'\n\n#HeaderFilterRegex: '.*nlohmann.*'\nHeaderFilterRegex: '.*hpp$'\n
    • The code is checked with the latest Cppcheck with all warnings enabled.

    • The code is checked with the latest Clang Static Analyzer with 89 enabled rules.
    • The code is checked with Infer.
    • The code is checked with Codacy.
    "},{"location":"community/quality_assurance/#dynamic-analysis","title":"Dynamic analysis","text":"

    Requirement: Correctness

    The library is checked for memory correctness and absence of undefined behavior.

    • The test suite is executed with enabled runtime assertions to check invariants and preconditions of functions to detect undefined behavior.
    • The test suite is executed with Valgrind (Memcheck) to detect memory leaks.
    • The test suite is executed with Sanitizers (address sanitizer, undefined behavior sanitizer, integer overflow detection, nullability violations).
    "},{"location":"community/quality_assurance/#style-check","title":"Style check","text":"

    Requirement: Common code style

    A common code style is used throughout all code files of the library.

    • The code is formatted with Artistic Style (astyle) against a style configuration that is also enforced in the CI.

      Astyle configuration (tools/astyle/.astylerc)
      # Configuration for Artistic Style\n# see https://astyle.sourceforge.net/astyle.html\n\n#######################\n# Brace Style Options #\n#######################\n\n# use Allman style for braces\n--style=allman\n\n###############\n# Tab Options #\n###############\n\n# indent using 4 spaces\n--indent=spaces=4\n\n#######################\n# Indentation Options #\n#######################\n\n# indent access modifiers one half indent\n--indent-modifiers\n\n# indent switch cases to the switch block\n--indent-switches\n\n# indent preprocessor blocks\n--indent-preproc-block\n\n# indent preprocessor defines\n--indent-preproc-define\n\n# indent C++ comments\n--indent-col1-comments\n\n###################\n# Padding Options #\n###################\n\n# insert space padding around operators\n--pad-oper\n\n# insert space between if/for/while... and the following parentheses\n--pad-header\n\n# attach the pointer to the variable type (left)\n--align-pointer=type\n\n# attach the reference to the variable type (left)\n--align-reference=type\n\n######################\n# Formatting Options #\n######################\n\n# add braces to unbraced one line conditional statements\n--add-braces\n\n# convert tabs to spaces\n--convert-tabs\n\n# closes whitespace between the ending angle brackets of template definitions\n--close-templates\n\n#################\n# Other Options #\n#################\n\n# do not create backup files\n--suffix=none\n\n# preserve the original file date\n--preserve-date\n\n# display only the files that have been formatted\n--formatted\n\n# for the linux (LF) line end style\n--lineend=linux\n
    • The code style is checked with cpplint with 61 enabled rules.

    "},{"location":"community/quality_assurance/#simple-integration","title":"Simple integration","text":"

    Requirement: Single header

    The library can be used by adding a single header to a C++ project.

    • An amalgamation script is used to check if the source code is exposed as self-contained single-header file.
    • The test suite is checked against the amalgamated source file as well as the individual source file.

    Requirement: CMake as primary development tool

    All library functions are exposed and usable by CMake.

    • All library options are exposed as CMake options and tested.
    • The library is tested against relevant CMake versions:
    • CMake 3.5 (the earliest supported)
    • CMake 3.31.6 (the latest 3.x release)
    • CMake 4.0.0 (a very recent release)
    "},{"location":"community/security_policy/","title":"Security Policy","text":""},{"location":"community/security_policy/#reporting-a-vulnerability","title":"Reporting a Vulnerability","text":"

    We value the security of our users and appreciate your efforts to responsibly disclose vulnerabilities. If you have identified a security vulnerability in this repository, please use the GitHub Security Advisory \"Report a Vulnerability\" tab.

    Until it is published, this draft security advisory will only be visible to the maintainers of this project. Other users and teams may be added once the advisory is created.

    We will send a response indicating the next steps in handling your report. After the initial reply to your report, we will keep you informed of the progress towards a fix and full announcement and may ask for additional information or guidance.

    For vulnerabilities in third-party dependencies or modules, please report them directly to the respective maintainers.

    "},{"location":"community/security_policy/#additional-resources","title":"Additional Resources","text":"
    • Explore security-related topics and contribute to tools and projects through GitHub Security Lab.
    • Learn more about responsible disclosure and reporting vulnerabilities in GitHub at About coordinated disclosure of security vulnerabilities.

    We sincerely thank you for contributing to the security and integrity of this project!

    "},{"location":"features/arbitrary_types/","title":"Arbitrary Type Conversions","text":"

    Every type can be serialized in JSON, not just STL containers and scalar types. Usually, you would do something along those lines:

    namespace ns {\n    // a simple struct to model a person\n    struct person {\n        std::string name;\n        std::string address;\n        int age;\n    };\n} // namespace ns\n\nns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n// convert to JSON: copy each value into the JSON object\njson j;\nj[\"name\"] = p.name;\nj[\"address\"] = p.address;\nj[\"age\"] = p.age;\n\n// ...\n\n// convert from JSON: copy each value from the JSON object\nns::person p {\n    j[\"name\"].template get<std::string>(),\n    j[\"address\"].template get<std::string>(),\n    j[\"age\"].template get<int>()\n};\n

    It works, but that's quite a lot of boilerplate... Fortunately, there's a better way:

    // create a person\nns::person p {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n// conversion: person -> json\njson j = p;\n\nstd::cout << j << std::endl;\n// {\"address\":\"744 Evergreen Terrace\",\"age\":60,\"name\":\"Ned Flanders\"}\n\n// conversion: json -> person\nauto p2 = j.template get<ns::person>();\n\n// that's it\nassert(p == p2);\n
    "},{"location":"features/arbitrary_types/#basic-usage","title":"Basic usage","text":"

    To make this work with one of your types, you only need to provide two functions:

    using json = nlohmann::json;\n\nnamespace ns {\n    void to_json(json& j, const person& p) {\n        j = json{ {\"name\", p.name}, {\"address\", p.address}, {\"age\", p.age} };\n    }\n\n    void from_json(const json& j, person& p) {\n        j.at(\"name\").get_to(p.name);\n        j.at(\"address\").get_to(p.address);\n        j.at(\"age\").get_to(p.age);\n    }\n} // namespace ns\n

    That's all! When calling the json constructor with your type, your custom to_json method will be automatically called. Likewise, when calling template get<your_type>() or get_to(your_type&), the from_json method will be called.

    Some important things:

    • Those methods MUST be in your type's namespace (which can be the global namespace), or the library will not be able to locate them (in this example, they are in namespace ns, where person is defined).
    • Those methods MUST be available (e.g., proper headers must be included) everywhere you use these conversions. Look at #1108 for errors that may occur otherwise.
    • When using template get<your_type>(), your_type MUST be DefaultConstructible. (There is a way to bypass this requirement described later.)
    • In function from_json, use function at() to access the object values rather than operator[]. In case a key does not exist, at throws an exception that you can handle, whereas operator[] exhibits undefined behavior.
    • You do not need to add serializers or deserializers for STL types like std::vector: the library already implements these.
    "},{"location":"features/arbitrary_types/#simplify-your-life-with-macros","title":"Simplify your life with macros","text":"

    If you just want to serialize/deserialize some structs, the to_json/from_json functions can be a lot of boilerplate.

    There are six macros to make your life easier as long as you (1) want to use a JSON object as serialization and (2) want to use the member variable names as object keys in that object:

    • NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(name, member1, member2, ...) is to be defined inside the namespace of the class/struct to create code for. It will throw an exception in from_json() due to a missing value in the JSON object.
    • NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT(name, member1, member2, ...) is to be defined inside the namespace of the class/struct to create code for. It will not throw an exception in from_json() due to a missing value in the JSON object, but fills in values from object which is default-constructed by the type.
    • NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE(name, member1, member2, ...) is to be defined inside the namespace of the class/struct to create code for. It does not define a from_json() function which is needed in case the type does not have a default constructor.
    • NLOHMANN_DEFINE_TYPE_INTRUSIVE(name, member1, member2, ...) is to be defined inside the class/struct to create code for. This macro can also access private members. It will throw an exception in from_json() due to a missing value in the JSON object.
    • NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT(name, member1, member2, ...) is to be defined inside the class/struct to create code for. This macro can also access private members. It will not throw an exception in from_json() due to a missing value in the JSON object, but fills in values from object which is default-constructed by the type.
    • NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE(name, member1, member2, ...) is to be defined inside the class/struct to create code for. This macro can also access private members. It does not define a from_json() function which is needed in case the type does not have a default constructor.

    Furthermore, there exist versions to use in case of derived classes:

    Need access to private members Need only de-serialization Allow missing values when de-serializing macro NLOHMANN_DEFINE_TYPE_INTRUSIVE NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE

    For derived classes and structs, use the following macros

    Need access to private members Need only de-serialization Allow missing values when de-serializing macro NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE

    Implementation limits

    • The current macro implementations are limited to at most 64 member variables. If you want to serialize/deserialize types with more than 64 member variables, you need to define the to_json/from_json functions manually.
    Example

    The to_json/from_json functions for the person struct above can be created with:

    namespace ns {\n    NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(person, name, address, age)\n}\n

    Here is an example with private members, where NLOHMANN_DEFINE_TYPE_INTRUSIVE is needed:

    namespace ns {\n    class address {\n      private:\n        std::string street;\n        int housenumber;\n        int postcode;\n\n      public:\n        NLOHMANN_DEFINE_TYPE_INTRUSIVE(address, street, housenumber, postcode)\n    };\n}\n
    "},{"location":"features/arbitrary_types/#how-do-i-convert-third-party-types","title":"How do I convert third-party types?","text":"

    This requires a bit more advanced technique. But first, let's see how this conversion mechanism works:

    The library uses JSON Serializers to convert types to json. The default serializer for nlohmann::json is nlohmann::adl_serializer (ADL means Argument-Dependent Lookup).

    It is implemented like this (simplified):

    template <typename T>\nstruct adl_serializer {\n    static void to_json(json& j, const T& value) {\n        // calls the \"to_json\" method in T's namespace\n    }\n\n    static void from_json(const json& j, T& value) {\n        // same thing, but with the \"from_json\" method\n    }\n};\n

    This serializer works fine when you have control over the type's namespace. However, what about boost::optional or std::filesystem::path (C++17)? Hijacking the boost namespace is pretty bad, and it's illegal to add something other than template specializations to std...

    To solve this, you need to add a specialization of adl_serializer to the nlohmann namespace, here's an example:

    // partial specialization (full specialization works too)\nNLOHMANN_JSON_NAMESPACE_BEGIN\ntemplate <typename T>\nstruct adl_serializer<boost::optional<T>> {\n    static void to_json(json& j, const boost::optional<T>& opt) {\n        if (opt == boost::none) {\n            j = nullptr;\n        } else {\n            j = *opt; // this will call adl_serializer<T>::to_json which will\n                      // find the free function to_json in T's namespace!\n        }\n    }\n\n    static void from_json(const json& j, boost::optional<T>& opt) {\n        if (j.is_null()) {\n            opt = boost::none;\n        } else {\n            opt = j.template get<T>(); // same as above, but with\n                              // adl_serializer<T>::from_json\n        }\n    }\n};\nNLOHMANN_JSON_NAMESPACE_END\n

    ABI compatibility

    Use NLOHMANN_JSON_NAMESPACE_BEGIN and NLOHMANN_JSON_NAMESPACE_END instead of namespace nlohmann { } in code which may be linked with different versions of this library.

    "},{"location":"features/arbitrary_types/#how-can-i-use-get-for-non-default-constructiblenon-copyable-types","title":"How can I use get() for non-default constructible/non-copyable types?","text":"

    There is a way, if your type is MoveConstructible. You will need to specialize the adl_serializer as well, but with a special from_json overload:

    struct move_only_type {\n    move_only_type() = delete;\n    move_only_type(int ii): i(ii) {}\n    move_only_type(const move_only_type&) = delete;\n    move_only_type(move_only_type&&) = default;\n\n    int i;\n};\n\nnamespace nlohmann {\n    template <>\n    struct adl_serializer<move_only_type> {\n        // note: the return type is no longer 'void', and the method only takes\n        // one argument\n        static move_only_type from_json(const json& j) {\n            return {j.template get<int>()};\n        }\n\n        // Here's the catch! You must provide a to_json method! Otherwise, you\n        // will not be able to convert move_only_type to json, since you fully\n        // specialized adl_serializer on that type\n        static void to_json(json& j, move_only_type t) {\n            j = t.i;\n        }\n    };\n}\n
    "},{"location":"features/arbitrary_types/#can-i-write-my-own-serializer-advanced-use","title":"Can I write my own serializer? (Advanced use)","text":"

    Yes. You might want to take a look at unit-udt.cpp in the test suite, to see a few examples.

    If you write your own serializer, you'll need to do a few things:

    • use a different basic_json alias than nlohmann::json (the last template parameter of basic_json is the JSONSerializer)
    • use your basic_json alias (or a template parameter) in all your to_json/from_json methods
    • use nlohmann::to_json and nlohmann::from_json when you need ADL

    Here is an example, without simplifications, that only accepts types with a size <= 32, and uses ADL.

    // You should use void as a second template argument\n// if you don't need compile-time checks on T\ntemplate<typename T, typename SFINAE = typename std::enable_if<sizeof(T) <= 32>::type>\nstruct less_than_32_serializer {\n    template <typename BasicJsonType>\n    static void to_json(BasicJsonType& j, T value) {\n        // we want to use ADL, and call the correct to_json overload\n        using nlohmann::to_json; // this method is called by adl_serializer,\n                                 // this is where the magic happens\n        to_json(j, value);\n    }\n\n    template <typename BasicJsonType>\n    static void from_json(const BasicJsonType& j, T& value) {\n        // same thing here\n        using nlohmann::from_json;\n        from_json(j, value);\n    }\n};\n

    Be very careful when reimplementing your serializer, you can stack overflow if you don't pay attention:

    template <typename T, void>\nstruct bad_serializer\n{\n    template <typename BasicJsonType>\n    static void to_json(BasicJsonType& j, const T& value) {\n      // this calls BasicJsonType::json_serializer<T>::to_json(j, value);\n      // if BasicJsonType::json_serializer == bad_serializer ... oops!\n      j = value;\n    }\n\n    template <typename BasicJsonType>\n    static void from_json(const BasicJsonType& j, T& value) {\n      // this calls BasicJsonType::json_serializer<T>::from_json(j, value);\n      // if BasicJsonType::json_serializer == bad_serializer ... oops!\n      value = j.template template get<T>(); // oops!\n    }\n};\n
    "},{"location":"features/assertions/","title":"Runtime Assertions","text":"

    The code contains numerous debug assertions to ensure class invariants are valid or to detect undefined behavior. Whereas the former class invariants are nothing to be concerned of, the latter checks for undefined behavior are to detect bugs in client code.

    "},{"location":"features/assertions/#switch-off-runtime-assertions","title":"Switch off runtime assertions","text":"

    Runtime assertions can be switched off by defining the preprocessor macro NDEBUG (see the documentation of assert) which is the default for release builds.

    "},{"location":"features/assertions/#change-assertion-behavior","title":"Change assertion behavior","text":"

    The behavior of runtime assertions can be changes by defining macro JSON_ASSERT(x) before including the json.hpp header.

    "},{"location":"features/assertions/#function-with-runtime-assertions","title":"Function with runtime assertions","text":""},{"location":"features/assertions/#unchecked-object-access-to-a-const-value","title":"Unchecked object access to a const value","text":"

    Function operator[] implements unchecked access for objects. Whereas a missing key is added in case of non-const objects, accessing a const object with a missing key is undefined behavior (think of a dereferenced null pointer) and yields a runtime assertion.

    If you are not sure whether an element in an object exists, use checked access with the at function or call the contains function before.

    See also the documentation on element access.

    Example 1: Missing object key

    The following code will trigger an assertion at runtime:

    #include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    const json j = {{\"key\", \"value\"}};\n    auto v = j[\"missing\"];\n}\n

    Output:

    Assertion failed: (m_value.object->find(key) != m_value.object->end()), function operator[], file json.hpp, line 2144.\n
    "},{"location":"features/assertions/#constructing-from-an-uninitialized-iterator-range","title":"Constructing from an uninitialized iterator range","text":"

    Constructing a JSON value from an iterator range (see constructor) with an uninitialized iterator is undefined behavior and yields a runtime assertion.

    Example 2: Uninitialized iterator range

    The following code will trigger an assertion at runtime:

    #include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    json::iterator it1, it2;\n    json j(it1, it2);\n}\n

    Output:

    Assertion failed: (m_object != nullptr), function operator++, file iter_impl.hpp, line 368.\n
    "},{"location":"features/assertions/#operations-on-uninitialized-iterators","title":"Operations on uninitialized iterators","text":"

    Any operation on uninitialized iterators (i.e., iterators that are not associated with any JSON value) is undefined behavior and yields a runtime assertion.

    Example 3: Uninitialized iterator

    The following code will trigger an assertion at runtime:

    #include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n  json::iterator it;\n  ++it;\n}\n

    Output:

    Assertion failed: (m_object != nullptr), function operator++, file iter_impl.hpp, line 368.\n
    "},{"location":"features/assertions/#changes","title":"Changes","text":""},{"location":"features/assertions/#reading-from-a-null-file-or-char-pointer","title":"Reading from a null FILE or char pointer","text":"

    Reading from a null FILE or char pointer in C++ is undefined behavior. Until version 3.11.4, this library asserted that the pointer was not nullptr using a runtime assertion. If assertions were disabled, this would result in undefined behavior. Since version 3.11.4, this library checks for nullptr and throws a parse_error.101 to prevent the undefined behavior.

    Example 4: Reading from null pointer

    The following code will trigger an assertion at runtime:

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::FILE* f = std::fopen(\"nonexistent_file.json\", \"r\");\n    try {\n        json j = json::parse(f);\n    } catch (std::exception& e) {\n        std::cerr << e.what() << std::endl;\n    }\n}\n

    Output:

    [json.exception.parse_error.101] parse error: attempting to parse an empty input; check that your input string or stream contains the expected JSON\n
    "},{"location":"features/assertions/#see-also","title":"See also","text":"
    • JSON_ASSERT - control behavior of runtime assertions
    "},{"location":"features/binary_values/","title":"Binary Values","text":"

    The library implements several binary formats that encode JSON in an efficient way. Most of these formats support binary values; that is, values that have semantics define outside the library and only define a sequence of bytes to be stored.

    JSON itself does not have a binary value. As such, binary values are an extension that this library implements to store values received by a binary format. Binary values are never created by the JSON parser, and are only part of a serialized JSON text if they have been created manually or via a binary format.

    "},{"location":"features/binary_values/#api-for-binary-values","title":"API for binary values","text":"
    classDiagram\n\nclass binary_t [\"json::binary_t\"] {\n    +void set_subtype(std::uint64_t subtype)\n    +void clear_subtype()\n    +std::uint64_t subtype() const\n    +bool has_subtype() const\n}\n\nclass vector [\"std::vector<uint8_t>\"]\n\nvector <|-- binary_t

    By default, binary values are stored as std::vector<std::uint8_t>. This type can be changed by providing a template parameter to the basic_json type. To store binary subtypes, the storage type is extended and exposed as json::binary_t:

    auto binary = json::binary_t({0xCA, 0xFE, 0xBA, 0xBE});\nauto binary_with_subtype = json::binary_t({0xCA, 0xFE, 0xBA, 0xBE}, 42);\n

    There are several convenience functions to check and set the subtype:

    binary.has_subtype();                   // returns false\nbinary_with_subtype.has_subtype();      // returns true\n\nbinary_with_subtype.clear_subtype();\nbinary_with_subtype.has_subtype();      // returns true\n\nbinary_with_subtype.set_subtype(42);\nbinary.set_subtype(23);\n\nbinary.subtype();                       // returns 23\n

    As json::binary_t is subclassing std::vector<std::uint8_t>, all member functions are available:

    binary.size();  // returns 4\nbinary[1];      // returns 0xFE\n

    JSON values can be constructed from json::binary_t:

    json j = binary;\n

    Binary values are primitive values just like numbers or strings:

    j.is_binary();    // returns true\nj.is_primitive(); // returns true\n

    Given a binary JSON value, the binary_t can be accessed by reference as via get_binary():

    j.get_binary().has_subtype();  // returns true\nj.get_binary().size();         // returns 4\n

    For convenience, binary JSON values can be constructed via json::binary:

    auto j2 = json::binary({0xCA, 0xFE, 0xBA, 0xBE}, 23);\nauto j3 = json::binary({0xCA, 0xFE, 0xBA, 0xBE});\n\nj2 == j;                        // returns true\nj3.get_binary().has_subtype();  // returns false\nj3.get_binary().subtype();      // returns std::uint64_t(-1) as j3 has no subtype\n
    "},{"location":"features/binary_values/#serialization","title":"Serialization","text":"

    Binary values are serialized differently according to the formats.

    "},{"location":"features/binary_values/#json","title":"JSON","text":"

    JSON does not have a binary type, and this library does not introduce a new type as this would break conformance. Instead, binary values are serialized as an object with two keys: bytes holds an array of integers, and subtype is an integer or null.

    Example

    Code:

    // create a binary value of subtype 42\njson j;\nj[\"binary\"] = json::binary({0xCA, 0xFE, 0xBA, 0xBE}, 42);\n\n// serialize to standard output\nstd::cout << j.dump(2) << std::endl;\n

    Output:

    {\n  \"binary\": {\n    \"bytes\": [202, 254, 186, 190],\n    \"subtype\": 42\n  }\n}\n

    No roundtrip for binary values

    The JSON parser will not parse the objects generated by binary values back to binary values. This is by design to remain standards compliant. Serializing binary values to JSON is only implemented for debugging purposes.

    "},{"location":"features/binary_values/#bjdata","title":"BJData","text":"

    BJData neither supports binary values nor subtypes, and proposes to serialize binary values as array of uint8 values. This translation is implemented by the library.

    Example

    Code:

    // create a binary value of subtype 42 (will be ignored in BJData)\njson j;\nj[\"binary\"] = json::binary({0xCA, 0xFE, 0xBA, 0xBE}, 42);\n\n// convert to BJData\nauto v = json::to_bjdata(j);      \n

    v is a std::vector<std::uint8t> with the following 20 elements:

    0x7B                                             // '{'\n    0x69 0x06                                    // i 6 (length of the key)\n    0x62 0x69 0x6E 0x61 0x72 0x79                // \"binary\"\n    0x5B                                         // '['\n        0x55 0xCA 0x55 0xFE 0x55 0xBA 0x55 0xBE  // content (each byte prefixed with 'U')\n    0x5D                                         // ']'\n0x7D                                             // '}'\n

    The following code uses the type and size optimization for UBJSON:

    // convert to UBJSON using the size and type optimization\nauto v = json::to_bjdata(j, true, true);\n

    The resulting vector has 22 elements; the optimization is not effective for examples with few values:

    0x7B                                // '{'\n    0x23 0x69 0x01                  // '#' 'i' type of the array elements: unsigned integers\n    0x69 0x06                       // i 6 (length of the key)\n    0x62 0x69 0x6E 0x61 0x72 0x79   // \"binary\"\n    0x5B                            // '[' array\n        0x24 0x55                   // '$' 'U' type of the array elements: unsigned integers\n        0x23 0x69 0x04              // '#' i 4 number of array elements\n        0xCA 0xFE 0xBA 0xBE         // content\n

    Note that subtype (42) is not serialized and that UBJSON has no binary type, and deserializing v would yield the following value:

    {\n  \"binary\": [202, 254, 186, 190]\n}\n
    "},{"location":"features/binary_values/#bson","title":"BSON","text":"

    BSON supports binary values and subtypes. If a subtype is given, it is used and added as unsigned 8-bit integer. If no subtype is given, the generic binary subtype 0x00 is used.

    Example

    Code:

    // create a binary value of subtype 42\njson j;\nj[\"binary\"] = json::binary({0xCA, 0xFE, 0xBA, 0xBE}, 42);\n\n// convert to BSON\nauto v = json::to_bson(j);      \n

    v is a std::vector<std::uint8t> with the following 22 elements:

    0x16 0x00 0x00 0x00                         // number of bytes in the document\n    0x05                                    // binary value\n        0x62 0x69 0x6E 0x61 0x72 0x79 0x00  // key \"binary\" + null byte\n        0x04 0x00 0x00 0x00                 // number of bytes\n        0x2a                                // subtype\n        0xCA 0xFE 0xBA 0xBE                 // content\n0x00                                        // end of the document\n

    Note that the serialization preserves the subtype, and deserializing v would yield the following value:

    {\n  \"binary\": {\n    \"bytes\": [202, 254, 186, 190],\n    \"subtype\": 42\n  }\n}\n
    "},{"location":"features/binary_values/#cbor","title":"CBOR","text":"

    CBOR supports binary values, but no subtypes. Subtypes will be serialized as tags. Any binary value will be serialized as byte strings. The library will choose the smallest representation using the length of the byte array.

    Example

    Code:

    // create a binary value of subtype 42\njson j;\nj[\"binary\"] = json::binary({0xCA, 0xFE, 0xBA, 0xBE}, 42);\n\n// convert to CBOR\nauto v = json::to_cbor(j);      \n

    v is a std::vector<std::uint8t> with the following 15 elements:

    0xA1                                   // map(1)\n    0x66                               // text(6)\n        0x62 0x69 0x6E 0x61 0x72 0x79  // \"binary\"\n    0xD8 0x2A                          // tag(42)\n    0x44                               // bytes(4)\n        0xCA 0xFE 0xBA 0xBE            // content\n

    Note that the subtype is serialized as tag. However, parsing tagged values yield a parse error unless json::cbor_tag_handler_t::ignore or json::cbor_tag_handler_t::store is passed to json::from_cbor.

    {\n  \"binary\": {\n    \"bytes\": [202, 254, 186, 190],\n    \"subtype\": null\n  }\n}\n
    "},{"location":"features/binary_values/#messagepack","title":"MessagePack","text":"

    MessagePack supports binary values and subtypes. If a subtype is given, the ext family is used. The library will choose the smallest representation among fixext1, fixext2, fixext4, fixext8, ext8, ext16, and ext32. The subtype is then added as signed 8-bit integer.

    If no subtype is given, the bin family (bin8, bin16, bin32) is used.

    Example

    Code:

    // create a binary value of subtype 42\njson j;\nj[\"binary\"] = json::binary({0xCA, 0xFE, 0xBA, 0xBE}, 42);\n\n// convert to MessagePack\nauto v = json::to_msgpack(j);      \n

    v is a std::vector<std::uint8t> with the following 14 elements:

    0x81                                   // fixmap1\n    0xA6                               // fixstr6\n        0x62 0x69 0x6E 0x61 0x72 0x79  // \"binary\"\n    0xD6                               // fixext4\n        0x2A                           // subtype\n        0xCA 0xFE 0xBA 0xBE            // content\n

    Note that the serialization preserves the subtype, and deserializing v would yield the following value:

    {\n  \"binary\": {\n    \"bytes\": [202, 254, 186, 190],\n    \"subtype\": 42\n  }\n}\n
    "},{"location":"features/binary_values/#ubjson","title":"UBJSON","text":"

    UBJSON neither supports binary values nor subtypes, and proposes to serialize binary values as array of uint8 values. This translation is implemented by the library.

    Example

    Code:

    // create a binary value of subtype 42 (will be ignored in UBJSON)\njson j;\nj[\"binary\"] = json::binary({0xCA, 0xFE, 0xBA, 0xBE}, 42);\n\n// convert to UBJSON\nauto v = json::to_ubjson(j);      \n

    v is a std::vector<std::uint8t> with the following 20 elements:

    0x7B                                             // '{'\n    0x69 0x06                                    // i 6 (length of the key)\n    0x62 0x69 0x6E 0x61 0x72 0x79                // \"binary\"\n    0x5B                                         // '['\n        0x55 0xCA 0x55 0xFE 0x55 0xBA 0x55 0xBE  // content (each byte prefixed with 'U')\n    0x5D                                         // ']'\n0x7D                                             // '}'\n

    The following code uses the type and size optimization for UBJSON:

    // convert to UBJSON using the size and type optimization\nauto v = json::to_ubjson(j, true, true);\n

    The resulting vector has 23 elements; the optimization is not effective for examples with few values:

    0x7B                                // '{'\n    0x24                            // '$' type of the object elements\n    0x5B                            // '[' array\n    0x23 0x69 0x01                  // '#' i 1 number of object elements\n    0x69 0x06                       // i 6 (length of the key)\n    0x62 0x69 0x6E 0x61 0x72 0x79   // \"binary\"\n        0x24 0x55                   // '$' 'U' type of the array elements: unsigned integers\n        0x23 0x69 0x04              // '#' i 4 number of array elements\n        0xCA 0xFE 0xBA 0xBE         // content\n

    Note that subtype (42) is not serialized and that UBJSON has no binary type, and deserializing v would yield the following value:

    {\n  \"binary\": [202, 254, 186, 190]\n}\n
    "},{"location":"features/comments/","title":"Comments","text":"

    This library does not support comments by default. It does so for three reasons:

    1. Comments are not part of the JSON specification. You may argue that // or /* */ are allowed in JavaScript, but JSON is not JavaScript.
    2. This was not an oversight: Douglas Crockford wrote on this in May 2012:

      I removed comments from JSON because I saw people were using them to hold parsing directives, a practice which would have destroyed interoperability. I know that the lack of comments makes some people sad, but it shouldn't.

      Suppose you are using JSON to keep configuration files, which you would like to annotate. Go ahead and insert all the comments you like. Then pipe it through JSMin before handing it to your JSON parser.

    3. It is dangerous for interoperability if some libraries would add comment support while others don't. Please check The Harmful Consequences of the Robustness Principle on this.

    However, you can pass set parameter ignore_comments to true in the parse function to ignore // or /* */ comments. Comments will then be treated as whitespace.

    Example

    Consider the following JSON with comments.

    {\n    // update in 2006: removed Pluto\n    \"planets\": [\"Mercury\", \"Venus\", \"Earth\", \"Mars\",\n                \"Jupiter\", \"Uranus\", \"Neptune\" /*, \"Pluto\" */]\n}\n

    When calling parse without additional argument, a parse error exception is thrown. If ignore_comments is set to true, the comments are ignored during parsing:

    #include <iostream>\n#include \"json.hpp\"\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::string s = R\"(\n    {\n        // update in 2006: removed Pluto\n        \"planets\": [\"Mercury\", \"Venus\", \"Earth\", \"Mars\",\n                    \"Jupiter\", \"Uranus\", \"Neptune\" /*, \"Pluto\" */]\n    }\n    )\";\n\n    try\n    {\n        json j = json::parse(s);\n    }\n    catch (json::exception &e)\n    {\n        std::cout << e.what() << std::endl;\n    }\n\n    json j = json::parse(s,\n                         /* callback */ nullptr,\n                         /* allow exceptions */ true,\n                         /* ignore_comments */ true);\n    std::cout << j.dump(2) << '\\n';\n}\n

    Output:

    [json.exception.parse_error.101] parse error at line 3, column 9:\nsyntax error while parsing object key - invalid literal;\nlast read: '<U+000A>    {<U+000A>        /'; expected string literal\n
    {\n  \"planets\": [\n    \"Mercury\",\n    \"Venus\",\n    \"Earth\",\n    \"Mars\",\n    \"Jupiter\",\n    \"Uranus\",\n    \"Neptune\"\n  ]\n}\n
    "},{"location":"features/enum_conversion/","title":"Specializing enum conversion","text":"

    By default, enum values are serialized to JSON as integers. In some cases this could result in undesired behavior. If an enum is modified or re-ordered after data has been serialized to JSON, the later de-serialized JSON data may be undefined or a different enum value than was originally intended.

    It is possible to more precisely specify how a given enum is mapped to and from JSON as shown below:

    // example enum type declaration\nenum TaskState {\n    TS_STOPPED,\n    TS_RUNNING,\n    TS_COMPLETED,\n    TS_INVALID=-1,\n};\n\n// map TaskState values to JSON as strings\nNLOHMANN_JSON_SERIALIZE_ENUM( TaskState, {\n    {TS_INVALID, nullptr},\n    {TS_STOPPED, \"stopped\"},\n    {TS_RUNNING, \"running\"},\n    {TS_COMPLETED, \"completed\"},\n})\n

    The NLOHMANN_JSON_SERIALIZE_ENUM() macro declares a set of to_json() / from_json() functions for type TaskState while avoiding repetition and boilerplate serialization code.

    "},{"location":"features/enum_conversion/#usage","title":"Usage","text":"
    // enum to JSON as string\njson j = TS_STOPPED;\nassert(j == \"stopped\");\n\n// json string to enum\njson j3 = \"running\";\nassert(j3.template get<TaskState>() == TS_RUNNING);\n\n// undefined json value to enum (where the first map entry above is the default)\njson jPi = 3.14;\nassert(jPi.template get<TaskState>() == TS_INVALID );\n
    "},{"location":"features/enum_conversion/#notes","title":"Notes","text":"

    Just as in Arbitrary Type Conversions above,

    • NLOHMANN_JSON_SERIALIZE_ENUM() MUST be declared in your enum type's namespace (which can be the global namespace), or the library will not be able to locate it, and it will default to integer serialization.
    • It MUST be available (e.g., proper headers must be included) everywhere you use the conversions.

    Other Important points:

    • When using template get<ENUM_TYPE>(), undefined JSON values will default to the first pair specified in your map. Select this default pair carefully.
    • If an enum or JSON value is specified more than once in your map, the first matching occurrence from the top of the map will be returned when converting to or from JSON.
    • To disable the default serialization of enumerators as integers and force a compiler error instead, see JSON_DISABLE_ENUM_SERIALIZATION.
    "},{"location":"features/iterators/","title":"Iterators","text":""},{"location":"features/iterators/#overview","title":"Overview","text":"

    A basic_json value is a container and allows access via iterators. Depending on the value type, basic_json stores zero or more values.

    As for other containers, begin() returns an iterator to the first value and end() returns an iterator to the value following the last value. The latter iterator is a placeholder and cannot be dereferenced. In case of null values, empty arrays, or empty objects, begin() will return end().

    "},{"location":"features/iterators/#iteration-order-for-objects","title":"Iteration order for objects","text":"

    When iterating over objects, values are ordered with respect to the object_comparator_t type which defaults to std::less. See the types documentation for more information.

    Example
    // create JSON object {\"one\": 1, \"two\": 2, \"three\": 3}\njson j;\nj[\"one\"] = 1;\nj[\"two\"] = 2;\nj[\"three\"] = 3;\n\nfor (auto it = j.begin(); it != j.end(); ++it)\n{\n    std::cout << *it << std::endl;\n}\n

    Output:

    1\n3\n2\n

    The reason for the order is the lexicographic ordering of the object keys \"one\", \"three\", \"two\".

    "},{"location":"features/iterators/#access-object-key-during-iteration","title":"Access object key during iteration","text":"

    The JSON iterators have two member functions, key() and value() to access the object key and stored value, respectively. When calling key() on a non-object iterator, an invalid_iterator.207 exception is thrown.

    Example
    // create JSON object {\"one\": 1, \"two\": 2, \"three\": 3}\njson j;\nj[\"one\"] = 1;\nj[\"two\"] = 2;\nj[\"three\"] = 3;\n\nfor (auto it = j.begin(); it != j.end(); ++it)\n{\n    std::cout << it.key() << \" : \" << it.value() << std::endl;\n}\n

    Output:

    one : 1\nthree : 3\ntwo : 2\n
    "},{"location":"features/iterators/#range-based-for-loops","title":"Range-based for loops","text":"

    C++11 allows using range-based for loops to iterate over a container.

    for (auto it : j_object)\n{\n    // \"it\" is of type json::reference and has no key() member\n    std::cout << \"value: \" << it << '\\n';\n}\n

    For this reason, the items() function allows accessing iterator::key() and iterator::value() during range-based for loops. In these loops, a reference to the JSON values is returned, so there is no access to the underlying iterator.

    for (auto& el : j_object.items())\n{\n    std::cout << \"key: \" << el.key() << \", value:\" << el.value() << '\\n';\n}\n

    The items() function also allows using structured bindings (C++17):

    for (auto& [key, val] : j_object.items())\n{\n    std::cout << \"key: \" << key << \", value:\" << val << '\\n';\n}\n

    Note

    When iterating over an array, key() will return the index of the element as string. For primitive types (e.g., numbers), key() returns an empty string.

    Warning

    Using items() on temporary objects is dangerous. Make sure the object's lifetime exceeds the iteration. See #2040 for more information.

    "},{"location":"features/iterators/#reverse-iteration-order","title":"Reverse iteration order","text":"

    rbegin() and rend() return iterators in the reverse sequence.

    Example
    json j = {1, 2, 3, 4};\n\nfor (auto it = j.rbegin(); it != j.rend(); ++it)\n{\n    std::cout << *it << std::endl;\n}\n

    Output:

    4\n3\n2\n1\n
    "},{"location":"features/iterators/#iterating-strings-and-binary-values","title":"Iterating strings and binary values","text":"

    Note that \"value\" means a JSON value in this setting, not values stored in the underlying containers. That is, *begin() returns the complete string or binary array and is also safe the underlying string or binary array is empty.

    Example
    json j = \"Hello, world\";\nfor (auto it = j.begin(); it != j.end(); ++it)\n{\n    std::cout << *it << std::endl;\n}\n

    Output:

    \"Hello, world\"\n
    "},{"location":"features/iterators/#iterator-invalidation","title":"Iterator invalidation","text":"Operations invalidated iterators clear all"},{"location":"features/json_patch/","title":"JSON Patch and Diff","text":""},{"location":"features/json_patch/#patches","title":"Patches","text":"

    JSON Patch (RFC 6902) defines a JSON document structure for expressing a sequence of operations to apply to a JSON document. With the patch function, a JSON Patch is applied to the current JSON value by executing all operations from the patch.

    Example

    The following code shows how a JSON patch is applied to a value.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // the original document\n    json doc = R\"(\n        {\n          \"baz\": \"qux\",\n          \"foo\": \"bar\"\n        }\n    )\"_json;\n\n    // the patch\n    json patch = R\"(\n        [\n          { \"op\": \"replace\", \"path\": \"/baz\", \"value\": \"boo\" },\n          { \"op\": \"add\", \"path\": \"/hello\", \"value\": [\"world\"] },\n          { \"op\": \"remove\", \"path\": \"/foo\"}\n        ]\n    )\"_json;\n\n    // apply the patch\n    json patched_doc = doc.patch(patch);\n\n    // output original and patched document\n    std::cout << std::setw(4) << doc << \"\\n\\n\"\n              << std::setw(4) << patched_doc << std::endl;\n}\n

    Output:

    {\n    \"baz\": \"qux\",\n    \"foo\": \"bar\"\n}\n\n{\n    \"baz\": \"boo\",\n    \"hello\": [\n        \"world\"\n    ]\n}\n
    "},{"location":"features/json_patch/#diff","title":"Diff","text":"

    The library can also calculate a JSON patch (i.e., a diff) given two JSON values.

    Invariant

    For two JSON values source and target, the following code yields always true:

    source.patch(diff(source, target)) == target;\n
    Example

    The following code shows how a JSON patch is created as a diff for two JSON values.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // the source document\n    json source = R\"(\n        {\n            \"baz\": \"qux\",\n            \"foo\": \"bar\"\n        }\n    )\"_json;\n\n    // the target document\n    json target = R\"(\n        {\n            \"baz\": \"boo\",\n            \"hello\": [\n                \"world\"\n            ]\n        }\n    )\"_json;\n\n    // create the patch\n    json patch = json::diff(source, target);\n\n    // roundtrip\n    json patched_source = source.patch(patch);\n\n    // output patch and roundtrip result\n    std::cout << std::setw(4) << patch << \"\\n\\n\"\n              << std::setw(4) << patched_source << std::endl;\n}\n

    Output:

    [\n    {\n        \"op\": \"replace\",\n        \"path\": \"/baz\",\n        \"value\": \"boo\"\n    },\n    {\n        \"op\": \"remove\",\n        \"path\": \"/foo\"\n    },\n    {\n        \"op\": \"add\",\n        \"path\": \"/hello\",\n        \"value\": [\n            \"world\"\n        ]\n    }\n]\n\n{\n    \"baz\": \"boo\",\n    \"hello\": [\n        \"world\"\n    ]\n}\n
    "},{"location":"features/json_pointer/","title":"JSON Pointer","text":""},{"location":"features/json_pointer/#introduction","title":"Introduction","text":"

    The library supports JSON Pointer (RFC 6901) as alternative means to address structured values. A JSON Pointer is a string that identifies a specific value within a JSON document.

    Consider the following JSON document

    {\n    \"array\": [\"A\", \"B\", \"C\"],\n    \"nested\": {\n        \"one\": 1,\n        \"two\": 2,\n        \"three\": [true, false]\n    }\n}\n

    Then every value inside the JSON document can be identified as follows:

    JSON Pointer JSON value `` {\"array\":[\"A\",\"B\",\"C\"],\"nested\":{\"one\":1,\"two\":2,\"three\":[true,false]}} /array [\"A\",\"B\",\"C\"] /array/0 A /array/1 B /array/2 C /nested {\"one\":1,\"two\":2,\"three\":[true,false]} /nested/one 1 /nested/two 2 /nested/three [true,false] /nested/three/0 true /nested/three/1 false

    Note / does not identify the root (i.e., the whole document), but an object entry with empty key \"\". See RFC 6901 for more information.

    "},{"location":"features/json_pointer/#json-pointer-creation","title":"JSON Pointer creation","text":"

    JSON Pointers can be created from a string:

    json::json_pointer p = \"/nested/one\";\n

    Furthermore, a user-defined string literal can be used to achieve the same result:

    auto p = \"/nested/one\"_json_pointer;\n

    The escaping rules of RFC 6901 are implemented. See the constructor documentation for more information.

    "},{"location":"features/json_pointer/#value-access","title":"Value access","text":"

    JSON Pointers can be used in the at, operator[], and value functions just like object keys or array indices.

    // the JSON value from above\nauto j = json::parse(R\"({\n    \"array\": [\"A\", \"B\", \"C\"],\n    \"nested\": {\n        \"one\": 1,\n        \"two\": 2,\n        \"three\": [true, false]\n    }\n})\");\n\n// access values\nauto val = j[\"\"_json_pointer];                              // {\"array\":[\"A\",\"B\",\"C\"],...}\nauto val1 = j[\"/nested/one\"_json_pointer];                  // 1\nauto val2 = j.at(json::json_pointer(\"/nested/three/1\"));    // false\nauto val3 = j.value(json::json_pointer(\"/nested/four\"), 0); // 0\n
    "},{"location":"features/json_pointer/#flatten-unflatten","title":"Flatten / unflatten","text":"

    The library implements a function flatten to convert any JSON document into a JSON object where each key is a JSON Pointer and each value is a primitive JSON value (i.e., a string, boolean, number, or null).

    // the JSON value from above\nauto j = json::parse(R\"({\n    \"array\": [\"A\", \"B\", \"C\"],\n    \"nested\": {\n        \"one\": 1,\n        \"two\": 2,\n        \"three\": [true, false]\n    }\n})\");\n\n// create flattened value\nauto j_flat = j.flatten();\n

    The resulting value j_flat is:

    {\n  \"/array/0\": \"A\",\n  \"/array/1\": \"B\",\n  \"/array/2\": \"C\",\n  \"/nested/one\": 1,\n  \"/nested/two\": 2,\n  \"/nested/three/0\": true,\n  \"/nested/three/1\": false\n}\n

    The reverse function, unflatten recreates the original value.

    auto j_original = j_flat.unflatten();\n
    "},{"location":"features/json_pointer/#see-also","title":"See also","text":"
    • Class json_pointer
    • Function flatten
    • Function unflatten
    • JSON Patch
    "},{"location":"features/macros/","title":"Supported Macros","text":"

    Some aspects of the library can be configured by defining preprocessor macros before including the json.hpp header. See also the API documentation for macros for examples and more information.

    "},{"location":"features/macros/#json_assertx","title":"JSON_ASSERT(x)","text":"

    This macro controls which code is executed for runtime assertions of the library.

    See full documentation of JSON_ASSERT(x).

    "},{"location":"features/macros/#json_catch_userexception","title":"JSON_CATCH_USER(exception)","text":"

    This macro overrides catch calls inside the library.

    See full documentation of JSON_CATCH_USER(exception).

    "},{"location":"features/macros/#json_diagnostics","title":"JSON_DIAGNOSTICS","text":"

    This macro enables extended diagnostics for exception messages. Possible values are 1 to enable or 0 to disable (default).

    When enabled, exception messages contain a JSON Pointer to the JSON value that triggered the exception, see Extended diagnostic messages for an example. Note that enabling this macro increases the size of every JSON value by one pointer and adds some runtime overhead.

    The diagnostics messages can also be controlled with the CMake option JSON_Diagnostics (OFF by default) which sets JSON_DIAGNOSTICS accordingly.

    See full documentation of JSON_DIAGNOSTICS.

    "},{"location":"features/macros/#json_diagnostic_positions","title":"JSON_DIAGNOSTIC_POSITIONS","text":"

    When enabled, two new member functions start_pos() and end_pos() are added to basic_json values. If the value was created by calling theparse function, then these functions allow to query the byte positions of the value in the input it was parsed from. The byte positions are also used in exceptions to help locate errors.

    The diagnostics positions can also be controlled with the CMake option JSON_Diagnostic_Positions (OFF by default) which sets JSON_DIAGNOSTIC_POSITIONS accordingly.

    See full documentation of JSON_DIAGNOSTIC_POSITIONS

    "},{"location":"features/macros/#json_has_cpp_11-json_has_cpp_14-json_has_cpp_17-json_has_cpp_20","title":"JSON_HAS_CPP_11, JSON_HAS_CPP_14, JSON_HAS_CPP_17, JSON_HAS_CPP_20","text":"

    The library targets C++11, but also supports some features introduced in later C++ versions (e.g., std::string_view support for C++17). For these new features, the library implements some preprocessor checks to determine the C++ standard. By defining any of these symbols, the internal check is overridden and the provided C++ version is unconditionally assumed. This can be helpful for compilers that only implement parts of the standard and would be detected incorrectly.

    See full documentation of JSON_HAS_CPP_11, JSON_HAS_CPP_14, JSON_HAS_CPP_17, and JSON_HAS_CPP_20.

    "},{"location":"features/macros/#json_has_filesystem-json_has_experimental_filesystem","title":"JSON_HAS_FILESYSTEM, JSON_HAS_EXPERIMENTAL_FILESYSTEM","text":"

    When compiling with C++17, the library provides conversions from and to std::filesystem::path. As compiler support for filesystem is limited, the library tries to detect whether <filesystem>/std::filesystem (JSON_HAS_FILESYSTEM) or <experimental/filesystem>/std::experimental::filesystem (JSON_HAS_EXPERIMENTAL_FILESYSTEM) should be used. To override the built-in check, define JSON_HAS_FILESYSTEM or JSON_HAS_EXPERIMENTAL_FILESYSTEM to 1.

    See full documentation of JSON_HAS_FILESYSTEM and JSON_HAS_EXPERIMENTAL_FILESYSTEM.

    "},{"location":"features/macros/#json_noexception","title":"JSON_NOEXCEPTION","text":"

    Exceptions can be switched off by defining the symbol JSON_NOEXCEPTION.

    See full documentation of JSON_NOEXCEPTION.

    "},{"location":"features/macros/#json_disable_enum_serialization","title":"JSON_DISABLE_ENUM_SERIALIZATION","text":"

    When defined, default parse and serialize functions for enums are excluded and have to be provided by the user, for example, using NLOHMANN_JSON_SERIALIZE_ENUM.

    See full documentation of JSON_DISABLE_ENUM_SERIALIZATION.

    "},{"location":"features/macros/#json_no_io","title":"JSON_NO_IO","text":"

    When defined, headers <cstdio>, <ios>, <iosfwd>, <istream>, and <ostream> are not included and parse functions relying on these headers are excluded. This is relevant for environment where these I/O functions are disallowed for security reasons (e.g., Intel Software Guard Extensions (SGX)).

    See full documentation of JSON_NO_IO.

    "},{"location":"features/macros/#json_skip_library_version_check","title":"JSON_SKIP_LIBRARY_VERSION_CHECK","text":"

    When defined, the library will not create a compiler warning when a different version of the library was already included.

    See full documentation of JSON_SKIP_LIBRARY_VERSION_CHECK.

    "},{"location":"features/macros/#json_skip_unsupported_compiler_check","title":"JSON_SKIP_UNSUPPORTED_COMPILER_CHECK","text":"

    When defined, the library will not create a compile error when a known unsupported compiler is detected. This allows to use the library with compilers that do not fully support C++11 and may only work if unsupported features are not used.

    See full documentation of JSON_SKIP_UNSUPPORTED_COMPILER_CHECK.

    "},{"location":"features/macros/#json_throw_userexception","title":"JSON_THROW_USER(exception)","text":"

    This macro overrides throw calls inside the library. The argument is the exception to be thrown.

    See full documentation of JSON_THROW_USER(exception).

    "},{"location":"features/macros/#json_try_user","title":"JSON_TRY_USER","text":"

    This macro overrides try calls inside the library.

    See full documentation of JSON_TRY_USER.

    "},{"location":"features/macros/#json_use_implicit_conversions","title":"JSON_USE_IMPLICIT_CONVERSIONS","text":"

    When defined to 0, implicit conversions are switched off. By default, implicit conversions are switched on.

    See full documentation of JSON_USE_IMPLICIT_CONVERSIONS.

    "},{"location":"features/macros/#nlohmann_define_type_-nlohmann_define_derived_type_","title":"NLOHMANN_DEFINE_TYPE_*(...), NLOHMANN_DEFINE_DERIVED_TYPE_*(...)","text":"

    The library defines 12 macros to simplify the serialization/deserialization of types. See the page on arbitrary type conversion for a detailed discussion.

    "},{"location":"features/macros/#nlohmann_json_serialize_enumtype","title":"NLOHMANN_JSON_SERIALIZE_ENUM(type, ...)","text":"

    This macro simplifies the serialization/deserialization of enum types. See Specializing enum conversion for more information.

    See full documentation of NLOHMANN_JSON_SERIALIZE_ENUM.

    "},{"location":"features/macros/#nlohmann_json_version_major-nlohmann_json_version_minor-nlohmann_json_version_patch","title":"NLOHMANN_JSON_VERSION_MAJOR, NLOHMANN_JSON_VERSION_MINOR, NLOHMANN_JSON_VERSION_PATCH","text":"

    These macros are defined by the library and contain the version numbers according to Semantic Versioning 2.0.0.

    See full documentation of NLOHMANN_JSON_VERSION_MAJOR, NLOHMANN_JSON_VERSION_MINOR, and NLOHMANN_JSON_VERSION_PATCH.

    "},{"location":"features/merge_patch/","title":"JSON Merge Patch","text":"

    The library supports JSON Merge Patch (RFC 7386) as a patch format. The merge patch format is primarily intended for use with the HTTP PATCH method as a means of describing a set of modifications to a target resource's content. This function applies a merge patch to the current JSON value.

    Instead of using JSON Pointer to specify values to be manipulated, it describes the changes using a syntax that closely mimics the document being modified.

    Example

    The following code shows how a JSON Merge Patch is applied to a JSON document.

    #include <iostream>\n#include <nlohmann/json.hpp>\n#include <iomanip> // for std::setw\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // the original document\n    json document = R\"({\n                \"title\": \"Goodbye!\",\n                \"author\": {\n                    \"givenName\": \"John\",\n                    \"familyName\": \"Doe\"\n                },\n                \"tags\": [\n                    \"example\",\n                    \"sample\"\n                ],\n                \"content\": \"This will be unchanged\"\n            })\"_json;\n\n    // the patch\n    json patch = R\"({\n                \"title\": \"Hello!\",\n                \"phoneNumber\": \"+01-123-456-7890\",\n                \"author\": {\n                    \"familyName\": null\n                },\n                \"tags\": [\n                    \"example\"\n                ]\n            })\"_json;\n\n    // apply the patch\n    document.merge_patch(patch);\n\n    // output original and patched document\n    std::cout << std::setw(4) << document << std::endl;\n}\n

    Output:

    {\n    \"author\": {\n        \"givenName\": \"John\"\n    },\n    \"content\": \"This will be unchanged\",\n    \"phoneNumber\": \"+01-123-456-7890\",\n    \"tags\": [\n        \"example\"\n    ],\n    \"title\": \"Hello!\"\n}\n
    "},{"location":"features/namespace/","title":"nlohmann Namespace","text":"

    The 3.11.0 release introduced an inline namespace to allow different parts of a codebase to safely use different versions of the JSON library as long as they never exchange instances of library types.

    "},{"location":"features/namespace/#structure","title":"Structure","text":"

    The complete default namespace name is derived as follows:

    • The root namespace is always nlohmann.
    • The inline namespace starts with json_abi and is followed by serveral optional ABI tags according to the value of these ABI-affecting macros, in order:
      • JSON_DIAGNOSTICS defined non-zero appends _diag.
      • JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON defined non-zero appends _ldvcmp.
    • The inline namespace ends with the suffix _v followed by the 3 components of the version number separated by underscores. To omit the version component, see Disabling the version component below.

    For example, the namespace name for version 3.11.2 with JSON_DIAGNOSTICS defined to 1 is:

    nlohmann::json_abi_diag_v3_11_2\n
    "},{"location":"features/namespace/#purpose","title":"Purpose","text":"

    Several incompatibilities have been observed. Amongst the most common ones is linking code compiled with different definitions of JSON_DIAGNOSTICS. This is illustrated in the diagram below.

    graph\n    json[\"<strong>nlohmann_json (v3.10.5)</strong><br>JSON_DIAGNOSTICS=0\"]\n    json_diag[\"<strong>nlohmann_json (v3.10.5)</strong><br>JSON_DIAGNOSTICS=1\"]\n    library[\"<strong>some library</strong>\"]\n    app[\"<strong>application</strong>\"]\n\n    library --> json\n    app --> json_diag\n    app --> library

    In releases prior to 3.11.0, mixing any version of the JSON library with different JSON_DIAGNOSTICS settings would result in a crashing application. If some_library never passes instances of JSON library types to the application, this scenario became safe in version 3.11.0 and above due to the inline namespace yielding distinct symbol names.

    "},{"location":"features/namespace/#limitations","title":"Limitations","text":"

    Neither the compiler nor the linker will issue as much as a warning when translation units \u2013 intended to be linked together and that include different versions and/or configurations of the JSON library \u2013 exchange and use library types.

    There is an exception when forward declarations are used (i.e., when including json_fwd.hpp) in which case the linker may complain about undefined references.

    "},{"location":"features/namespace/#disabling-the-version-component","title":"Disabling the version component","text":"

    Different versions are not necessarily ABI-incompatible, but the project does not actively track changes in the ABI and recommends that all parts of a codebase exchanging library types be built with the same version. Users can, at their own risk, disable the version component of the linline namespace, allowing different versions \u2013 but not configurations \u2013 to be used in cases where the linker would otherwise output undefined reference errors.

    To do so, define NLOHMANN_JSON_NAMESPACE_NO_VERSION to 1.

    This applies to version 3.11.2 and above only, versions 3.11.0 and 3.11.1 can apply the technique described in the next section to emulate the effect of the NLOHMANN_JSON_NAMESPACE_NO_VERSION macro.

    Use at your own risk

    Disabling the namespace version component and mixing ABI-incompatible versions will result in crashes or incorrect behavior. You have been warned!

    "},{"location":"features/namespace/#disabling-the-inline-namespace-completely","title":"Disabling the inline namespace completely","text":"

    When interoperability with code using a pre-3.11.0 version of the library is required, users can, at their own risk restore the old namespace layout by redefining NLOHMANN_JSON_NAMESPACE_BEGIN, NLOHMANN_JSON_NAMESPACE_END as follows:

    #define NLOHMANN_JSON_NAMESPACE_BEGIN  namespace nlohmann {\n#define NLOHMANN_JSON_NAMESPACE_END    }\n

    Use at your own risk

    Overriding the namespace and mixing ABI-incompatible versions will result in crashes or incorrect behavior. You have been warned!

    "},{"location":"features/namespace/#version-history","title":"Version history","text":"
    • Introduced inline namespace (json_v3_11_0[_abi-tag]*) in version 3.11.0.
    • Changed structure of inline namespace in version 3.11.2.
    "},{"location":"features/object_order/","title":"Object Order","text":"

    The JSON standard defines objects as \"an unordered collection of zero or more name/value pairs\". As such, an implementation does not need to preserve any specific order of object keys.

    "},{"location":"features/object_order/#default-behavior-sort-keys","title":"Default behavior: sort keys","text":"

    The default type nlohmann::json uses a std::map to store JSON objects, and thus stores object keys sorted alphabetically.

    Example
    #include <iostream>\n#include \"json.hpp\"\n\nusing json = nlohmann::json;\n\nint main()\n{\n    json j;\n    j[\"one\"] = 1;\n    j[\"two\"] = 2;\n    j[\"three\"] = 3;\n\n    std::cout << j.dump(2) << '\\n';\n}\n

    Output:

    {\n  \"one\": 1,\n  \"three\": 3,\n  \"two\": 2\n}\n
    "},{"location":"features/object_order/#alternative-behavior-preserve-insertion-order","title":"Alternative behavior: preserve insertion order","text":"

    If you do want to preserve the insertion order, you can try the type nlohmann::ordered_json.

    Example
    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing ordered_json = nlohmann::ordered_json;\n\nint main()\n{\n    ordered_json j;\n    j[\"one\"] = 1;\n    j[\"two\"] = 2;\n    j[\"three\"] = 3;\n\n    std::cout << j.dump(2) << '\\n';\n}\n

    Output:

    {\n  \"one\": 1,\n  \"two\": 2,\n  \"three\": 3\n}\n

    Alternatively, you can use a more sophisticated ordered map like tsl::ordered_map (integration) or nlohmann::fifo_map (integration).

    "},{"location":"features/object_order/#notes-on-parsing","title":"Notes on parsing","text":"

    Note that you also need to call the right parse function when reading from a file. Assume file input.json contains the JSON object above:

    {\n  \"one\": 1,\n  \"two\": 2,\n  \"three\": 3\n}\n

    Right way

    The following code correctly calls the parse function from nlohmann::ordered_json:

    std::ifstream i(\"input.json\");\nauto j = nlohmann::ordered_json::parse(i);\nstd::cout << j.dump(2) << std::endl;\n

    The output will be:

    {\n  \"one\": 1,\n  \"two\": 2,\n  \"three\": 3\n}\n
    Wrong way

    The following code incorrectly calls the parse function from nlohmann::json which does not preserve the insertion order, but sorts object keys. Assigning the result to nlohmann::ordered_json compiles, but does not restore the order from the input file.

    std::ifstream i(\"input.json\");\nnlohmann::ordered_json j = nlohmann::json::parse(i);\nstd::cout << j.dump(2) << std::endl;\n

    The output will be:

    {\n  \"one\": 1,\n  \"three\": 3\n  \"two\": 2,\n}\n
    "},{"location":"features/binary_formats/","title":"Binary Formats","text":"

    Though JSON is a ubiquitous data format, it is not a very compact format suitable for data exchange, for instance over a network. Hence, the library supports

    • BJData (Binary JData),
    • BSON (Binary JSON),
    • CBOR (Concise Binary Object Representation),
    • MessagePack, and
    • UBJSON (Universal Binary JSON)

    to efficiently encode JSON values to byte vectors and to decode such vectors.

    "},{"location":"features/binary_formats/#comparison","title":"Comparison","text":""},{"location":"features/binary_formats/#completeness","title":"Completeness","text":"Format Serialization Deserialization BJData complete complete BSON incomplete: top-level value must be an object incomplete, but all JSON types are supported CBOR complete incomplete, but all JSON types are supported MessagePack complete complete UBJSON complete complete"},{"location":"features/binary_formats/#binary-values","title":"Binary values","text":"Format Binary values Binary subtypes BJData not supported not supported BSON supported supported CBOR supported supported MessagePack supported supported UBJSON not supported not supported

    See binary values for more information.

    "},{"location":"features/binary_formats/#sizes","title":"Sizes","text":"Format canada.json twitter.json citm_catalog.json jeopardy.json BJData 53.2 % 91.1 % 78.1 % 96.6 % BJData (size) 58.6 % 92.1 % 86.7 % 97.4 % BJData (size+tyoe) 58.6 % 92.1 % 86.5 % 97.4 % BSON 85.8 % 95.2 % 95.8 % 106.7 % CBOR 50.5 % 86.3 % 68.4 % 88.0 % MessagePack 50.5 % 86.0 % 68.5 % 87.9 % UBJSON 53.2 % 91.3 % 78.2 % 96.6 % UBJSON (size) 58.6 % 92.3 % 86.8 % 97.4 % UBJSON (size+type) 55.9 % 92.3 % 85.0 % 95.0 %

    Sizes compared to minified JSON value.

    "},{"location":"features/binary_formats/bjdata/","title":"BJData","text":"

    The BJData format was derived from and improved upon Universal Binary JSON(UBJSON) specification (Draft 12). Specifically, it introduces an optimized array container for efficient storage of N-dimensional packed arrays (ND-arrays); it also adds 5 new type markers - [u] - uint16, [m] - uint32, [M] - uint64, [h] - float16 and [B] - byte - to unambiguously map common binary numeric types; furthermore, it uses little-endian (LE) to store all numerics instead of big-endian (BE) as in UBJSON to avoid unnecessary conversions on commonly available platforms.

    Compared to other binary JSON-like formats such as MessagePack and CBOR, both BJData and UBJSON demonstrate a rare combination of being both binary and quasi-human-readable. This is because all semantic elements in BJData and UBJSON, including the data-type markers and name/string types are directly human-readable. Data stored in the BJData/UBJSON format are not only compact in size, fast to read/write, but also can be directly searched or read using simple processing.

    References

    • BJData Specification
    "},{"location":"features/binary_formats/bjdata/#serialization","title":"Serialization","text":"

    The library uses the following mapping from JSON values types to BJData types according to the BJData specification:

    JSON value type value/range BJData type marker null null null Z boolean true true T boolean false false F number_integer -9223372036854775808..-2147483649 int64 L number_integer -2147483648..-32769 int32 l number_integer -32768..-129 int16 I number_integer -128..127 int8 i number_integer 128..255 uint8 U number_integer 256..32767 int16 I number_integer 32768..65535 uint16 u number_integer 65536..2147483647 int32 l number_integer 2147483648..4294967295 uint32 m number_integer 4294967296..9223372036854775807 int64 L number_integer 9223372036854775808..18446744073709551615 uint64 M number_unsigned 0..127 int8 i number_unsigned 128..255 uint8 U number_unsigned 256..32767 int16 I number_unsigned 32768..65535 uint16 u number_unsigned 65536..2147483647 int32 l number_unsigned 2147483648..4294967295 uint32 m number_unsigned 4294967296..9223372036854775807 int64 L number_unsigned 9223372036854775808..18446744073709551615 uint64 M number_float any value float64 D string with shortest length indicator string S array see notes on optimized format/ND-array array [ object see notes on optimized format map { binary see notes on binary values array [$B

    Complete mapping

    The mapping is complete in the sense that any JSON value type can be converted to a BJData value.

    Any BJData output created by to_bjdata can be successfully parsed by from_bjdata.

    Size constraints

    The following values can not be converted to a BJData value:

    • strings with more than 18446744073709551615 bytes, i.e., 2^{64}-1 bytes (theoretical)

    Unused BJData markers

    The following markers are not used in the conversion:

    • Z: no-op values are not created.
    • C: single-byte strings are serialized with S markers.

    NaN/infinity handling

    If NaN or Infinity are stored inside a JSON number, they are serialized properly. This behavior differs from the dump() function which serializes NaN or Infinity to null.

    Endianness

    A breaking difference between BJData and UBJSON is the endianness of numerical values. In BJData, all numerical data types (integers UiuImlML and floating-point values hdD) are stored in the little-endian (LE) byte order as opposed to big-endian as used by UBJSON. Adopting LE to store numeric records avoids unnecessary byte swapping on most modern computers where LE is used as the default byte order.

    Optimized formats

    Optimized formats for containers are supported via two parameters of to_bjdata:

    • Parameter use_size adds size information to the beginning of a container and removes the closing marker.
    • Parameter use_type further checks whether all elements of a container have the same type and adds the type marker to the beginning of the container. The use_type parameter must only be used together with use_size = true.

    Note that use_size = true alone may result in larger representations - the benefit of this parameter is that the receiving side is immediately informed of the number of elements in the container.

    ND-array optimized format

    BJData extends UBJSON's optimized array size marker to support ND-arrays of uniform numerical data types (referred to as packed arrays). For example, the 2-D uint8 integer array [[1,2],[3,4],[5,6]], stored as nested optimized array in UBJSON [ [$U#i2 1 2 [$U#i2 3 4 [$U#i2 5 6 ], can be further compressed in BJData to [$U#[$i#i2 2 3 1 2 3 4 5 6 or [$U#[i2 i3] 1 2 3 4 5 6.

    To maintain type and size information, ND-arrays are converted to JSON objects following the annotated array format (defined in the JData specification (Draft 3)), when parsed using from_bjdata. For example, the above 2-D uint8 array can be parsed and accessed as

    {\n    \"_ArrayType_\": \"uint8\",\n    \"_ArraySize_\": [2,3],\n    \"_ArrayData_\": [1,2,3,4,5,6]\n}\n

    Likewise, when a JSON object in the above form is serialzed using to_bjdata, it is automatically converted into a compact BJData ND-array. The only exception is, that when the 1-dimensional vector stored in \"_ArraySize_\" contains a single integer or two integers with one being 1, a regular 1-D optimized array is generated.

    The current version of this library does not yet support automatic detection of and conversion from a nested JSON array input to a BJData ND-array.

    Restrictions in optimized data types for arrays and objects

    Due to diminished space saving, hampered readability, and increased security risks, in BJData, the allowed data types following the $ marker in an optimized array and object container are restricted to non-zero-fixed-length data types. Therefore, the valid optimized type markers can only be one of UiuImlMLhdDCB. This also means other variable ([{SH) or zero-length types (TFN) can not be used in an optimized array or object in BJData.

    Binary values

    BJData provides a dedicated B marker (defined in the BJData specification (Draft 3)) that is used in optimized arrays to designate binary data. This means that, unlike UBJSON, binary data can be both serialized and deserialized.

    To preserve compatibility with BJData Draft 2, the Draft 3 optimized binary array must be explicitly enabled using the version parameter of to_bjdata.

    In Draft2 mode (default), if the JSON data contains the binary type, the value stored as a list of integers, as suggested by the BJData documentation. In particular, this means that the serialization and the deserialization of JSON containing binary values into BJData and back will result in a different JSON object.

    Example
    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\n// function to print BJData's diagnostic format\nvoid print_byte(uint8_t byte)\n{\n    if (32 < byte and byte < 128)\n    {\n        std::cout << (char)byte;\n    }\n    else\n    {\n        std::cout << (int)byte;\n    }\n}\n\nint main()\n{\n    // create a JSON value\n    json j = R\"({\"compact\": true, \"schema\": false})\"_json;\n\n    // serialize it to BJData\n    std::vector<std::uint8_t> v = json::to_bjdata(j);\n\n    // print the vector content\n    for (auto& byte : v)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n\n    // create an array of numbers\n    json array = {1, 2, 3, 4, 5, 6, 7, 8};\n\n    // serialize it to BJData using default representation\n    std::vector<std::uint8_t> v_array = json::to_bjdata(array);\n    // serialize it to BJData using size optimization\n    std::vector<std::uint8_t> v_array_size = json::to_bjdata(array, true);\n    // serialize it to BJData using type optimization\n    std::vector<std::uint8_t> v_array_size_and_type = json::to_bjdata(array, true, true);\n\n    // print the vector contents\n    for (auto& byte : v_array)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n\n    for (auto& byte : v_array_size)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n\n    for (auto& byte : v_array_size_and_type)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n}\n

    Output:

    {i7compactTi6schemaF}\n[i1i2i3i4i5i6i7i8]\n[#i8i1i2i3i4i5i6i7i8\n[$i#i812345678\n
    "},{"location":"features/binary_formats/bjdata/#deserialization","title":"Deserialization","text":"

    The library maps BJData types to JSON value types as follows:

    BJData type JSON value type marker no-op no value, next value is read N null null Z false false F true true T float16 number_float h float32 number_float d float64 number_float D uint8 number_unsigned U int8 number_integer i uint16 number_unsigned u int16 number_integer I uint32 number_unsigned m int32 number_integer l uint64 number_unsigned M int64 number_integer L byte number_unsigned B string string S char string C array array (optimized values are supported) [ ND-array object (in JData annotated array format) [$.#[. object object (optimized values are supported) { binary binary (strongly-typed byte array) [$B

    Complete mapping

    The mapping is complete in the sense that any BJData value can be converted to a JSON value.

    Example
    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create byte vector\n    std::vector<std::uint8_t> v = {0x7B, 0x69, 0x07, 0x63, 0x6F, 0x6D, 0x70, 0x61,\n                                   0x63, 0x74, 0x54, 0x69, 0x06, 0x73, 0x63, 0x68,\n                                   0x65, 0x6D, 0x61, 0x69, 0x00, 0x7D\n                                  };\n\n    // deserialize it with BJData\n    json j = json::from_bjdata(v);\n\n    // print the deserialized JSON value\n    std::cout << std::setw(2) << j << std::endl;\n}\n

    Output:

    {\n  \"compact\": true,\n  \"schema\": 0\n}\n
    "},{"location":"features/binary_formats/bson/","title":"BSON","text":"

    BSON, short for Binary JSON, is a binary-encoded serialization of JSON-like documents. Like JSON, BSON supports the embedding of documents and arrays within other documents and arrays. BSON also contains extensions that allow representation of data types that are not part of the JSON spec. For example, BSON has a Date type and a BinData type.

    References

    • BSON Website - the main source on BSON
    • BSON Specification - the specification
    "},{"location":"features/binary_formats/bson/#serialization","title":"Serialization","text":"

    The library uses the following mapping from JSON values types to BSON types:

    JSON value type value/range BSON type marker null null null 0x0A boolean true, false boolean 0x08 number_integer -9223372036854775808..-2147483649 int64 0x12 number_integer -2147483648..2147483647 int32 0x10 number_integer 2147483648..9223372036854775807 int64 0x12 number_unsigned 0..2147483647 int32 0x10 number_unsigned 2147483648..9223372036854775807 int64 0x12 number_unsigned 9223372036854775808..18446744073709551615 uint64 0x11 number_float any value double 0x01 string any value string 0x02 array any value document 0x04 object any value document 0x03 binary any value binary 0x05

    Incomplete mapping

    The mapping is incomplete, since only JSON-objects (and things contained therein) can be serialized to BSON. Also, keys may not contain U+0000, since they are serialized a zero-terminated c-strings.

    Example
    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create a JSON value\n    json j = R\"({\"compact\": true, \"schema\": 0})\"_json;\n\n    // serialize it to BSON\n    std::vector<std::uint8_t> v = json::to_bson(j);\n\n    // print the vector content\n    for (auto& byte : v)\n    {\n        std::cout << \"0x\" << std::hex << std::setw(2) << std::setfill('0') << (int)byte << \" \";\n    }\n    std::cout << std::endl;\n}\n

    Output:

    0x1b 0x00 0x00 0x00 0x08 0x63 0x6f 0x6d 0x70 0x61 0x63 0x74 0x00 0x01 0x10 0x73 0x63 0x68 0x65 0x6d 0x61 0x00 0x00 0x00 0x00 0x00 0x00 \n
    "},{"location":"features/binary_formats/bson/#deserialization","title":"Deserialization","text":"

    The library maps BSON record types to JSON value types as follows:

    BSON type BSON marker byte JSON value type double 0x01 number_float string 0x02 string document 0x03 object array 0x04 array binary 0x05 binary undefined 0x06 unsupported ObjectId 0x07 unsupported boolean 0x08 boolean UTC Date-Time 0x09 unsupported null 0x0A null Regular Expr. 0x0B unsupported DB Pointer 0x0C unsupported JavaScript Code 0x0D unsupported Symbol 0x0E unsupported JavaScript Code 0x0F unsupported int32 0x10 number_integer uint64(Timestamp) 0x11 number_unsigned 128-bit decimal float 0x13 unsupported Max Key 0x7F unsupported Min Key 0xFF unsupported

    Incomplete mapping

    The mapping is incomplete. The unsupported mappings are indicated in the table above.

    Handling of BSON type 0x11

    BSON type 0x11 is used to represent uint64 numbers. This library treats these values purely as uint64 numbers and does not parse them into date-related formats.

    Example
    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create byte vector\n    std::vector<std::uint8_t> v = {0x1b, 0x00, 0x00, 0x00, 0x08, 0x63, 0x6f, 0x6d,\n                                   0x70, 0x61, 0x63, 0x74, 0x00, 0x01, 0x10, 0x73,\n                                   0x63, 0x68, 0x65, 0x6d, 0x61, 0x00, 0x00, 0x00,\n                                   0x00, 0x00, 0x00\n                                  };\n\n    // deserialize it with BSON\n    json j = json::from_bson(v);\n\n    // print the deserialized JSON value\n    std::cout << std::setw(2) << j << std::endl;\n}\n

    Output:

    {\n  \"compact\": true,\n  \"schema\": 0\n}\n
    "},{"location":"features/binary_formats/cbor/","title":"CBOR","text":"

    The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation.

    References

    • CBOR Website - the main source on CBOR
    • CBOR Playground - an interactive webpage to translate between JSON and CBOR
    • RFC 7049 - the CBOR specification
    "},{"location":"features/binary_formats/cbor/#serialization","title":"Serialization","text":"

    The library uses the following mapping from JSON values types to CBOR types according to the CBOR specification (RFC 7049):

    JSON value type value/range CBOR type first byte null null Null 0xF6 boolean true True 0xF5 boolean false False 0xF4 number_integer -9223372036854775808..-2147483649 Negative integer (8 bytes follow) 0x3B number_integer -2147483648..-32769 Negative integer (4 bytes follow) 0x3A number_integer -32768..-129 Negative integer (2 bytes follow) 0x39 number_integer -128..-25 Negative integer (1 byte follow) 0x38 number_integer -24..-1 Negative integer 0x20..0x37 number_integer 0..23 Integer 0x00..0x17 number_integer 24..255 Unsigned integer (1 byte follow) 0x18 number_integer 256..65535 Unsigned integer (2 bytes follow) 0x19 number_integer 65536..4294967295 Unsigned integer (4 bytes follow) 0x1A number_integer 4294967296..18446744073709551615 Unsigned integer (8 bytes follow) 0x1B number_unsigned 0..23 Integer 0x00..0x17 number_unsigned 24..255 Unsigned integer (1 byte follow) 0x18 number_unsigned 256..65535 Unsigned integer (2 bytes follow) 0x19 number_unsigned 65536..4294967295 Unsigned integer (4 bytes follow) 0x1A number_unsigned 4294967296..18446744073709551615 Unsigned integer (8 bytes follow) 0x1B number_float any value representable by a float Single-Precision Float 0xFA number_float any value NOT representable by a float Double-Precision Float 0xFB string length: 0..23 UTF-8 string 0x60..0x77 string length: 23..255 UTF-8 string (1 byte follow) 0x78 string length: 256..65535 UTF-8 string (2 bytes follow) 0x79 string length: 65536..4294967295 UTF-8 string (4 bytes follow) 0x7A string length: 4294967296..18446744073709551615 UTF-8 string (8 bytes follow) 0x7B array size: 0..23 array 0x80..0x97 array size: 23..255 array (1 byte follow) 0x98 array size: 256..65535 array (2 bytes follow) 0x99 array size: 65536..4294967295 array (4 bytes follow) 0x9A array size: 4294967296..18446744073709551615 array (8 bytes follow) 0x9B object size: 0..23 map 0xA0..0xB7 object size: 23..255 map (1 byte follow) 0xB8 object size: 256..65535 map (2 bytes follow) 0xB9 object size: 65536..4294967295 map (4 bytes follow) 0xBA object size: 4294967296..18446744073709551615 map (8 bytes follow) 0xBB binary size: 0..23 byte string 0x40..0x57 binary size: 23..255 byte string (1 byte follow) 0x58 binary size: 256..65535 byte string (2 bytes follow) 0x59 binary size: 65536..4294967295 byte string (4 bytes follow) 0x5A binary size: 4294967296..18446744073709551615 byte string (8 bytes follow) 0x5B

    Binary values with subtype are mapped to tagged values (0xD8..0xDB) depending on the subtype, followed by a byte string, see \"binary\" cells in the table above.

    Complete mapping

    The mapping is complete in the sense that any JSON value type can be converted to a CBOR value.

    NaN/infinity handling

    If NaN or Infinity are stored inside a JSON number, they are serialized properly. This behavior differs from the normal JSON serialization which serializes NaN or Infinity to null.

    Unused CBOR types

    The following CBOR types are not used in the conversion:

    • UTF-8 strings terminated by \"break\" (0x7F)
    • arrays terminated by \"break\" (0x9F)
    • maps terminated by \"break\" (0xBF)
    • byte strings terminated by \"break\" (0x5F)
    • date/time (0xC0..0xC1)
    • bignum (0xC2..0xC3)
    • decimal fraction (0xC4)
    • bigfloat (0xC5)
    • expected conversions (0xD5..0xD7)
    • simple values (0xE0..0xF3, 0xF8)
    • undefined (0xF7)
    • half-precision floats (0xF9)
    • break (0xFF)

    Tagged items

    Binary subtypes will be serialized as tagged items. See binary values for an example.

    Example
    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create a JSON value\n    json j = R\"({\"compact\": true, \"schema\": 0})\"_json;\n\n    // serialize it to CBOR\n    std::vector<std::uint8_t> v = json::to_cbor(j);\n\n    // print the vector content\n    for (auto& byte : v)\n    {\n        std::cout << \"0x\" << std::hex << std::setw(2) << std::setfill('0') << (int)byte << \" \";\n    }\n    std::cout << std::endl;\n}\n

    Output:

    0xa2 0x67 0x63 0x6f 0x6d 0x70 0x61 0x63 0x74 0xf5 0x66 0x73 0x63 0x68 0x65 0x6d 0x61 0x00 \n
    "},{"location":"features/binary_formats/cbor/#deserialization","title":"Deserialization","text":"

    The library maps CBOR types to JSON value types as follows:

    CBOR type JSON value type first byte Integer number_unsigned 0x00..0x17 Unsigned integer number_unsigned 0x18 Unsigned integer number_unsigned 0x19 Unsigned integer number_unsigned 0x1A Unsigned integer number_unsigned 0x1B Negative integer number_integer 0x20..0x37 Negative integer number_integer 0x38 Negative integer number_integer 0x39 Negative integer number_integer 0x3A Negative integer number_integer 0x3B Byte string binary 0x40..0x57 Byte string binary 0x58 Byte string binary 0x59 Byte string binary 0x5A Byte string binary 0x5B UTF-8 string string 0x60..0x77 UTF-8 string string 0x78 UTF-8 string string 0x79 UTF-8 string string 0x7A UTF-8 string string 0x7B UTF-8 string string 0x7F array array 0x80..0x97 array array 0x98 array array 0x99 array array 0x9A array array 0x9B array array 0x9F map object 0xA0..0xB7 map object 0xB8 map object 0xB9 map object 0xBA map object 0xBB map object 0xBF False false 0xF4 True true 0xF5 Null null 0xF6 Half-Precision Float number_float 0xF9 Single-Precision Float number_float 0xFA Double-Precision Float number_float 0xFB

    Incomplete mapping

    The mapping is incomplete in the sense that not all CBOR types can be converted to a JSON value. The following CBOR types are not supported and will yield parse errors:

    • date/time (0xC0..0xC1)
    • bignum (0xC2..0xC3)
    • decimal fraction (0xC4)
    • bigfloat (0xC5)
    • expected conversions (0xD5..0xD7)
    • simple values (0xE0..0xF3, 0xF8)
    • undefined (0xF7)

    Object keys

    CBOR allows map keys of any type, whereas JSON only allows strings as keys in object values. Therefore, CBOR maps with keys other than UTF-8 strings are rejected.

    Tagged items

    Tagged items will throw a parse error by default. They can be ignored by passing cbor_tag_handler_t::ignore to function from_cbor. They can be stored by passing cbor_tag_handler_t::store to function from_cbor.

    Example
    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create byte vector\n    std::vector<std::uint8_t> v = {0xa2, 0x67, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63,\n                                   0x74, 0xf5, 0x66, 0x73, 0x63, 0x68, 0x65, 0x6d,\n                                   0x61, 0x00\n                                  };\n\n    // deserialize it with CBOR\n    json j = json::from_cbor(v);\n\n    // print the deserialized JSON value\n    std::cout << std::setw(2) << j << std::endl;\n}\n

    Output:

    {\n  \"compact\": true,\n  \"schema\": 0\n}\n
    "},{"location":"features/binary_formats/messagepack/","title":"MessagePack","text":"

    MessagePack is an efficient binary serialization format. It lets you exchange data among multiple languages like JSON. But it's faster and smaller. Small integers are encoded into a single byte, and typical short strings require only one extra byte in addition to the strings themselves.

    References

    • MessagePack website
    • MessagePack specification
    "},{"location":"features/binary_formats/messagepack/#serialization","title":"Serialization","text":"

    The library uses the following mapping from JSON values types to MessagePack types according to the MessagePack specification:

    JSON value type value/range MessagePack type first byte null null nil 0xC0 boolean true true 0xC3 boolean false false 0xC2 number_integer -9223372036854775808..-2147483649 int64 0xD3 number_integer -2147483648..-32769 int32 0xD2 number_integer -32768..-129 int16 0xD1 number_integer -128..-33 int8 0xD0 number_integer -32..-1 negative fixint 0xE0..0xFF number_integer 0..127 positive fixint 0x00..0x7F number_integer 128..255 uint 8 0xCC number_integer 256..65535 uint 16 0xCD number_integer 65536..4294967295 uint 32 0xCE number_integer 4294967296..18446744073709551615 uint 64 0xCF number_unsigned 0..127 positive fixint 0x00..0x7F number_unsigned 128..255 uint 8 0xCC number_unsigned 256..65535 uint 16 0xCD number_unsigned 65536..4294967295 uint 32 0xCE number_unsigned 4294967296..18446744073709551615 uint 64 0xCF number_float any value representable by a float float 32 0xCA number_float any value NOT representable by a float float 64 0xCB string length: 0..31 fixstr 0xA0..0xBF string length: 32..255 str 8 0xD9 string length: 256..65535 str 16 0xDA string length: 65536..4294967295 str 32 0xDB array size: 0..15 fixarray 0x90..0x9F array size: 16..65535 array 16 0xDC array size: 65536..4294967295 array 32 0xDD object size: 0..15 fix map 0x80..0x8F object size: 16..65535 map 16 0xDE object size: 65536..4294967295 map 32 0xDF binary size: 0..255 bin 8 0xC4 binary size: 256..65535 bin 16 0xC5 binary size: 65536..4294967295 bin 32 0xC6

    Complete mapping

    The mapping is complete in the sense that any JSON value type can be converted to a MessagePack value.

    Any MessagePack output created by to_msgpack can be successfully parsed by from_msgpack.

    Size constraints

    The following values can not be converted to a MessagePack value:

    • strings with more than 4294967295 bytes
    • byte strings with more than 4294967295 bytes
    • arrays with more than 4294967295 elements
    • objects with more than 4294967295 elements

    NaN/infinity handling

    If NaN or Infinity are stored inside a JSON number, they are serialized properly in contrast to the dump function which serializes NaN or Infinity to null.

    Example
    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create a JSON value\n    json j = R\"({\"compact\": true, \"schema\": 0})\"_json;\n\n    // serialize it to MessagePack\n    std::vector<std::uint8_t> v = json::to_msgpack(j);\n\n    // print the vector content\n    for (auto& byte : v)\n    {\n        std::cout << \"0x\" << std::hex << std::setw(2) << std::setfill('0') << (int)byte << \" \";\n    }\n    std::cout << std::endl;\n}\n

    Output:

    0x82 0xa7 0x63 0x6f 0x6d 0x70 0x61 0x63 0x74 0xc3 0xa6 0x73 0x63 0x68 0x65 0x6d 0x61 0x00 \n
    "},{"location":"features/binary_formats/messagepack/#deserialization","title":"Deserialization","text":"

    The library maps MessagePack types to JSON value types as follows:

    MessagePack type JSON value type first byte positive fixint number_unsigned 0x00..0x7F fixmap object 0x80..0x8F fixarray array 0x90..0x9F fixstr string 0xA0..0xBF nil null 0xC0 false false 0xC2 true true 0xC3 float 32 number_float 0xCA float 64 number_float 0xCB uint 8 number_unsigned 0xCC uint 16 number_unsigned 0xCD uint 32 number_unsigned 0xCE uint 64 number_unsigned 0xCF int 8 number_integer 0xD0 int 16 number_integer 0xD1 int 32 number_integer 0xD2 int 64 number_integer 0xD3 str 8 string 0xD9 str 16 string 0xDA str 32 string 0xDB array 16 array 0xDC array 32 array 0xDD map 16 object 0xDE map 32 object 0xDF bin 8 binary 0xC4 bin 16 binary 0xC5 bin 32 binary 0xC6 ext 8 binary 0xC7 ext 16 binary 0xC8 ext 32 binary 0xC9 fixext 1 binary 0xD4 fixext 2 binary 0xD5 fixext 4 binary 0xD6 fixext 8 binary 0xD7 fixext 16 binary 0xD8 negative fixint number_integer 0xE0-0xFF

    Info

    Any MessagePack output created by to_msgpack can be successfully parsed by from_msgpack.

    Example
    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create byte vector\n    std::vector<std::uint8_t> v = {0x82, 0xa7, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63,\n                                   0x74, 0xc3, 0xa6, 0x73, 0x63, 0x68, 0x65, 0x6d,\n                                   0x61, 0x00\n                                  };\n\n    // deserialize it with MessagePack\n    json j = json::from_msgpack(v);\n\n    // print the deserialized JSON value\n    std::cout << std::setw(2) << j << std::endl;\n}\n

    Output:

    {\n  \"compact\": true,\n  \"schema\": 0\n}\n
    "},{"location":"features/binary_formats/ubjson/","title":"UBJSON","text":"

    Universal Binary JSON (UBJSON) is a binary form directly imitating JSON, but requiring fewer bytes of data. It aims to achieve the generality of JSON, combined with being much easier to process than JSON.

    References

    • UBJSON Website
    "},{"location":"features/binary_formats/ubjson/#serialization","title":"Serialization","text":"

    The library uses the following mapping from JSON values types to UBJSON types according to the UBJSON specification:

    JSON value type value/range UBJSON type marker null null null Z boolean true true T boolean false false F number_integer -9223372036854775808..-2147483649 int64 L number_integer -2147483648..-32769 int32 l number_integer -32768..-129 int16 I number_integer -128..127 int8 i number_integer 128..255 uint8 U number_integer 256..32767 int16 I number_integer 32768..2147483647 int32 l number_integer 2147483648..9223372036854775807 int64 L number_unsigned 0..127 int8 i number_unsigned 128..255 uint8 U number_unsigned 256..32767 int16 I number_unsigned 32768..2147483647 int32 l number_unsigned 2147483648..9223372036854775807 int64 L number_unsigned 2147483649..18446744073709551615 high-precision H number_float any value float64 D string with shortest length indicator string S array see notes on optimized format array [ object see notes on optimized format map {

    Complete mapping

    The mapping is complete in the sense that any JSON value type can be converted to a UBJSON value.

    Any UBJSON output created by to_ubjson can be successfully parsed by from_ubjson.

    Size constraints

    The following values can not be converted to a UBJSON value:

    • strings with more than 9223372036854775807 bytes (theoretical)

    Unused UBJSON markers

    The following markers are not used in the conversion:

    • Z: no-op values are not created.
    • C: single-byte strings are serialized with S markers.

    NaN/infinity handling

    If NaN or Infinity are stored inside a JSON number, they are serialized properly. This behavior differs from the dump() function which serializes NaN or Infinity to null.

    Optimized formats

    The optimized formats for containers are supported: Parameter use_size adds size information to the beginning of a container and removes the closing marker. Parameter use_type further checks whether all elements of a container have the same type and adds the type marker to the beginning of the container. The use_type parameter must only be used together with use_size = true.

    Note that use_size = true alone may result in larger representations - the benefit of this parameter is that the receiving side is immediately informed on the number of elements of the container.

    Binary values

    If the JSON data contains the binary type, the value stored is a list of integers, as suggested by the UBJSON documentation. In particular, this means that serialization and the deserialization of a JSON containing binary values into UBJSON and back will result in a different JSON object.

    Example
    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\n// function to print UBJSON's diagnostic format\nvoid print_byte(uint8_t byte)\n{\n    if (32 < byte and byte < 128)\n    {\n        std::cout << (char)byte;\n    }\n    else\n    {\n        std::cout << (int)byte;\n    }\n}\n\nint main()\n{\n    // create a JSON value\n    json j = R\"({\"compact\": true, \"schema\": false})\"_json;\n\n    // serialize it to UBJSON\n    std::vector<std::uint8_t> v = json::to_ubjson(j);\n\n    // print the vector content\n    for (auto& byte : v)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n\n    // create an array of numbers\n    json array = {1, 2, 3, 4, 5, 6, 7, 8};\n\n    // serialize it to UBJSON using default representation\n    std::vector<std::uint8_t> v_array = json::to_ubjson(array);\n    // serialize it to UBJSON using size optimization\n    std::vector<std::uint8_t> v_array_size = json::to_ubjson(array, true);\n    // serialize it to UBJSON using type optimization\n    std::vector<std::uint8_t> v_array_size_and_type = json::to_ubjson(array, true, true);\n\n    // print the vector contents\n    for (auto& byte : v_array)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n\n    for (auto& byte : v_array_size)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n\n    for (auto& byte : v_array_size_and_type)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n}\n

    Output:

    {i7compactTi6schemaF}\n[i1i2i3i4i5i6i7i8]\n[#i8i1i2i3i4i5i6i7i8\n[$i#i812345678\n
    "},{"location":"features/binary_formats/ubjson/#deserialization","title":"Deserialization","text":"

    The library maps UBJSON types to JSON value types as follows:

    UBJSON type JSON value type marker no-op no value, next value is read N null null Z false false F true true T float32 number_float d float64 number_float D uint8 number_unsigned U int8 number_integer i int16 number_integer I int32 number_integer l int64 number_integer L string string S char string C array array (optimized values are supported) [ object object (optimized values are supported) {

    Complete mapping

    The mapping is complete in the sense that any UBJSON value can be converted to a JSON value.

    Example
    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create byte vector\n    std::vector<std::uint8_t> v = {0x7B, 0x69, 0x07, 0x63, 0x6F, 0x6D, 0x70, 0x61,\n                                   0x63, 0x74, 0x54, 0x69, 0x06, 0x73, 0x63, 0x68,\n                                   0x65, 0x6D, 0x61, 0x69, 0x00, 0x7D\n                                  };\n\n    // deserialize it with UBJSON\n    json j = json::from_ubjson(v);\n\n    // print the deserialized JSON value\n    std::cout << std::setw(2) << j << std::endl;\n}\n

    Output:

    {\n  \"compact\": true,\n  \"schema\": 0\n}\n
    "},{"location":"features/element_access/","title":"Element Access","text":"

    There are many ways elements in a JSON value can be accessed:

    • unchecked access via operator[]
    • checked access via at
    • access with default value via value
    • iterators
    • JSON pointers
    "},{"location":"features/element_access/checked_access/","title":"Checked access: at","text":""},{"location":"features/element_access/checked_access/#overview","title":"Overview","text":"

    The at member function performs checked access; that is, it returns a reference to the desired value if it exists and throws a basic_json::out_of_range exception otherwise.

    Read access

    Consider the following JSON value:

    {\n    \"name\": \"Mary Smith\",\n    \"age\": 42,\n    \"hobbies\": [\"hiking\", \"reading\"]\n}\n

    Assume the value is parsed to a json variable j.

    expression value j {\"name\": \"Mary Smith\", \"age\": 42, \"hobbies\": [\"hiking\", \"reading\"]} j.at(\"name\") \"Mary Smith\" j.at(\"age\") 42 j.at(\"hobbies\") [\"hiking\", \"reading\"] j.at(\"hobbies\").at(0) \"hiking\" j.at(\"hobbies\").at(1) \"reading\"

    The return value is a reference, so it can be modified by the original value.

    Write access
    j.at(\"name\") = \"John Smith\";\n

    This code produces the following JSON value:

    {\n    \"name\": \"John Smith\",\n    \"age\": 42,\n    \"hobbies\": [\"hiking\", \"reading\"]\n}\n

    When accessing an invalid index (i.e., an index greater than or equal to the array size) or the passed object key is non-existing, an exception is thrown.

    Accessing via invalid index or missing key
    j.at(\"hobbies\").at(3) = \"cooking\";\n

    This code produces the following exception:

    [json.exception.out_of_range.401] array index 3 is out of range\n

    When you extended diagnostic messages are enabled by defining JSON_DIAGNOSTICS, the exception further gives information where the key or index is missing or out of range.

    [json.exception.out_of_range.401] (/hobbies) array index 3 is out of range\n
    "},{"location":"features/element_access/checked_access/#notes","title":"Notes","text":"

    Exceptions

    • at can only be used with objects (with a string argument) or with arrays (with a numeric argument). For other types, a basic_json::type_error is thrown.
    • basic_json::out_of_range exception exceptions are thrown if the provided key is not found in an object or the provided index is invalid.
    "},{"location":"features/element_access/checked_access/#summary","title":"Summary","text":"scenario non-const value const value access to existing object key reference to existing value is returned const reference to existing value is returned access to valid array index reference to existing value is returned const reference to existing value is returned access to non-existing object key basic_json::out_of_range exception is thrown basic_json::out_of_range exception is thrown access to invalid array index basic_json::out_of_range exception is thrown basic_json::out_of_range exception is thrown"},{"location":"features/element_access/default_value/","title":"Access with default value: value","text":""},{"location":"features/element_access/default_value/#overview","title":"Overview","text":"

    In many situations such as configuration files, missing values are not exceptional, but may be treated as if a default value was present. For this case, use value(key, default_value) which takes the key you want to access and a default value in case there is no value stored with that key.

    "},{"location":"features/element_access/default_value/#example","title":"Example","text":"Example

    Consider the following JSON value:

    {\n    \"logOutput\": \"result.log\",\n    \"append\": true\n}\n

    Assume the value is parsed to a json variable j.

    expression value j {\"logOutput\": \"result.log\", \"append\": true} j.value(\"logOutput\", \"logfile.log\") \"result.log\" j.value(\"append\", true) true j.value(\"append\", false) true j.value(\"logLevel\", \"verbose\") \"verbose\""},{"location":"features/element_access/default_value/#notes","title":"Notes","text":"

    Exceptions

    • value can only be used with objects. For other types, a basic_json::type_error is thrown.

    Return type

    The value function is a template, and the return type of the function is determined by the type of the provided default value unless otherwise specified. This can have unexpected effects. In the example below, we store a 64-bit unsigned integer. We get exactly that value when using operator[]. However, when we call value and provide 0 as default value, then -1 is returned. The occurs, because 0 has type int which overflows when handling the value 18446744073709551615.

    To address this issue, either provide a correctly typed default value or use the template parameter to specify the desired return type. Note that this issue occurs even when a value is stored at the provided key, and the default value is not used as the return value.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    json j = json::parse(R\"({\"uint64\": 18446744073709551615})\");\n\n    std::cout << \"operator[]:                \" << j[\"uint64\"] << '\\n'\n              << \"default value (int):       \" << j.value(\"uint64\", 0) << '\\n'\n              << \"default value (uint64_t):  \" << j.value(\"uint64\", std::uint64_t(0)) << '\\n'\n              << \"explict return value type: \" << j.value<std::uint64_t>(\"uint64\", 0) << '\\n';\n}\n

    Output:

    operator[]:                18446744073709551615\ndefault value (int):       -1\ndefault value (uint64_t):  18446744073709551615\nexplict return value type: 18446744073709551615\n
    "},{"location":"features/element_access/default_value/#see-also","title":"See also","text":"
    • value for access with default value
    • documentation on checked access
    "},{"location":"features/element_access/unchecked_access/","title":"Unchecked access: operator[]","text":""},{"location":"features/element_access/unchecked_access/#overview","title":"Overview","text":"

    Elements in a JSON object and a JSON array can be accessed via operator[] similar to a std::map and a std::vector, respectively.

    Read access

    Consider the following JSON value:

    {\n    \"name\": \"Mary Smith\",\n    \"age\": 42,\n    \"hobbies\": [\"hiking\", \"reading\"]\n}\n

    Assume the value is parsed to a json variable j.

    expression value j {\"name\": \"Mary Smith\", \"age\": 42, \"hobbies\": [\"hiking\", \"reading\"]} j[\"name\"] \"Mary Smith\" j[\"age\"] 42 j[\"hobbies\"] [\"hiking\", \"reading\"] j[\"hobbies\"][0] \"hiking\" j[\"hobbies\"][1] \"reading\"

    The return value is a reference, so it can modify the original value. In case the passed object key is non-existing, a null value is inserted which can be immediately be overwritten.

    Write access
    j[\"name\"] = \"John Smith\";\nj[\"maidenName\"] = \"Jones\";\n

    This code produces the following JSON value:

    {\n    \"name\": \"John Smith\",\n    \"maidenName\": \"Jones\",\n    \"age\": 42,\n    \"hobbies\": [\"hiking\", \"reading\"]\n}\n

    When accessing an invalid index (i.e., an index greater than or equal to the array size), the JSON array is resized such that the passed index is the new maximal index. Intermediate values are filled with null.

    Filling up arrays with null values
    j[\"hobbies\"][0] = \"running\";\nj[\"hobbies\"][3] = \"cooking\";\n

    This code produces the following JSON value:

    {\n    \"name\": \"John Smith\",\n    \"maidenName\": \"Jones\",\n    \"age\": 42,\n    \"hobbies\": [\"running\", \"reading\", null, \"cooking\"]\n}\n
    "},{"location":"features/element_access/unchecked_access/#notes","title":"Notes","text":"

    Design rationale

    The library behaves differently to std::vector and std::map:

    • std::vector::operator[] never inserts a new element.
    • std::map::operator[] is not available for const values.

    The type json wraps all JSON value types. It would be impossible to remove operator[] for const objects. At the same time, inserting elements for non-const objects is really convenient as it avoids awkward insert calls. To this end, we decided to have an inserting non-const behavior for both arrays and objects.

    Info

    The access is unchecked. In case the passed object key does not exist or the passed array index is invalid, no exception is thrown.

    Danger

    • It is undefined behavior to access a const object with a non-existing key.
    • It is undefined behavior to access a const array with an invalid index.
    • In debug mode, an assertion will fire in both cases. You can disable assertions by defining the preprocessor symbol NDEBUG or redefine the macro JSON_ASSERT(x). See the documentation on runtime assertions for more information.

    Exceptions

    operator[] can only be used with objects (with a string argument) or with arrays (with a numeric argument). For other types, a basic_json::type_error is thrown.

    "},{"location":"features/element_access/unchecked_access/#summary","title":"Summary","text":"scenario non-const value const value access to existing object key reference to existing value is returned const reference to existing value is returned access to valid array index reference to existing value is returned const reference to existing value is returned access to non-existing object key reference to newly inserted null value is returned undefined behavior; runtime assertion in debug mode access to invalid array index reference to newly inserted null value is returned; any index between previous maximal index and passed index are filled with null undefined behavior; runtime assertion in debug mode"},{"location":"features/parsing/","title":"Parsing","text":"

    Note

    This page is under construction.

    "},{"location":"features/parsing/#input","title":"Input","text":""},{"location":"features/parsing/#sax-vs-dom-parsing","title":"SAX vs. DOM parsing","text":""},{"location":"features/parsing/#exceptions","title":"Exceptions","text":"

    See parsing and exceptions.

    "},{"location":"features/parsing/json_lines/","title":"JSON Lines","text":"

    The JSON Lines format is a text format of newline-delimited JSON. In particular:

    1. The input must be UTF-8 encoded.
    2. Every line must be a valid JSON value.
    3. The line separator must be \\n. As \\r is silently ignored, \\r\\n is also supported.
    4. The final character may be \\n, but is not required to be one.

    JSON Text example

    {\"name\": \"Gilbert\", \"wins\": [[\"straight\", \"7\u2663\"], [\"one pair\", \"10\u2665\"]]}\n{\"name\": \"Alexa\", \"wins\": [[\"two pair\", \"4\u2660\"], [\"two pair\", \"9\u2660\"]]}\n{\"name\": \"May\", \"wins\": []}\n{\"name\": \"Deloise\", \"wins\": [[\"three of a kind\", \"5\u2663\"]]}\n

    JSON Lines input with more than one value is treated as invalid JSON by the parse or accept functions. To process it line by line, functions like std::getline can be used:

    Example: Parse JSON Text input line by line

    The example below demonstrates how JSON Lines can be processed.

    #include <sstream>\n#include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // JSON Lines (see https://jsonlines.org)\n    std::stringstream input;\n    input << R\"({\"name\": \"Gilbert\", \"wins\": [[\"straight\", \"7\u2663\"], [\"one pair\", \"10\u2665\"]]}\n{\"name\": \"Alexa\", \"wins\": [[\"two pair\", \"4\u2660\"], [\"two pair\", \"9\u2660\"]]}\n{\"name\": \"May\", \"wins\": []}\n{\"name\": \"Deloise\", \"wins\": [[\"three of a kind\", \"5\u2663\"]]}\n)\";\n\n    std::string line;\n    while (std::getline(input, line))\n    {\n        std::cout << json::parse(line) << std::endl;\n    }\n}\n

    Output:

    {\"name\":\"Gilbert\",\"wins\":[[\"straight\",\"7\u2663\"],[\"one pair\",\"10\u2665\"]]}\n{\"name\":\"Alexa\",\"wins\":[[\"two pair\",\"4\u2660\"],[\"two pair\",\"9\u2660\"]]}\n{\"name\":\"May\",\"wins\":[]}\n{\"name\":\"Deloise\",\"wins\":[[\"three of a kind\",\"5\u2663\"]]}\n

    Note

    Using operator>> like

    json j;\nwhile (input >> j)\n{\n    std::cout << j << std::endl;\n}\n

    with a JSON Lines input does not work, because the parser will try to parse one value after the last one.

    "},{"location":"features/parsing/parse_exceptions/","title":"Parsing and Exceptions","text":"

    When the input is not valid JSON, an exception of type parse_error is thrown. This exception contains the position in the input where the error occurred, together with a diagnostic message and the last read input token. The exceptions page contains a list of examples for parse error exceptions. In case you process untrusted input, always enclose your code with a try/catch block, like

    json j;\ntry\n{\n    j = json::parse(my_input);\n}\ncatch (json::parse_error& ex)\n{\n    std::cerr << \"parse error at byte \" << ex.byte << std::endl;\n}\n

    In case exceptions are undesired or not supported by the environment, there are different ways to proceed:

    "},{"location":"features/parsing/parse_exceptions/#switch-off-exceptions","title":"Switch off exceptions","text":"

    The parse() function accepts a bool parameter allow_exceptions which controls whether an exception is thrown when a parse error occurs (true, default) or whether a discarded value should be returned (false).

    json j = json::parse(my_input, nullptr, false);\nif (j.is_discarded())\n{\n    std::cerr << \"parse error\" << std::endl;\n}\n

    Note there is no diagnostic information available in this scenario.

    "},{"location":"features/parsing/parse_exceptions/#use-accept-function","title":"Use accept() function","text":"

    Alternatively, function accept() can be used which does not return a json value, but a bool indicating whether the input is valid JSON.

    if (!json::accept(my_input))\n{\n    std::cerr << \"parse error\" << std::endl;\n}\n

    Again, there is no diagnostic information available.

    "},{"location":"features/parsing/parse_exceptions/#user-defined-sax-interface","title":"User-defined SAX interface","text":"

    Finally, you can implement the SAX interface and decide what should happen in case of a parse error.

    This function has the following interface:

    bool parse_error(std::size_t position,\n                 const std::string& last_token,\n                 const json::exception& ex);\n

    The return value indicates whether the parsing should continue, so the function should usually return false.

    Example
    #include <iostream>\n#include \"json.hpp\"\n\nusing json = nlohmann::json;\n\nclass sax_no_exception : public nlohmann::detail::json_sax_dom_parser<json>\n{\n  public:\n    sax_no_exception(json& j)\n      : nlohmann::detail::json_sax_dom_parser<json>(j, false)\n    {}\n\n    bool parse_error(std::size_t position,\n                     const std::string& last_token,\n                     const json::exception& ex)\n    {\n        std::cerr << \"parse error at input byte \" << position << \"\\n\"\n                  << ex.what() << \"\\n\"\n                  << \"last read: \\\"\" << last_token << \"\\\"\"\n                  << std::endl;\n        return false;\n    }\n};\n\nint main()\n{\n    std::string myinput = \"[1,2,3,]\";\n\n    json result;\n    sax_no_exception sax(result);\n\n    bool parse_result = json::sax_parse(myinput, &sax);\n    if (!parse_result)\n    {\n        std::cerr << \"parsing unsuccessful!\" << std::endl;\n    }\n\n    std::cout << \"parsed value: \" << result << std::endl;\n}\n

    Output:

    parse error at input byte 8\n[json.exception.parse_error.101] parse error at line 1, column 8: syntax error while parsing value - unexpected ']'; expected '[', '{', or a literal\nlast read: \"3,]\"\nparsing unsuccessful!\nparsed value: [1,2,3]\n
    "},{"location":"features/parsing/parser_callbacks/","title":"Parser Callbacks","text":""},{"location":"features/parsing/parser_callbacks/#overview","title":"Overview","text":"

    With a parser callback function, the result of parsing a JSON text can be influenced. When passed to parse, it is called on certain events (passed as parse_event_t via parameter event) with a set recursion depth depth and context JSON value parsed. The return value of the callback function is a boolean indicating whether the element that emitted the callback shall be kept or not.

    The type of the callback function is:

    template<typename BasicJsonType>\nusing parser_callback_t =\n    std::function<bool(int depth, parse_event_t event, BasicJsonType& parsed)>;\n
    "},{"location":"features/parsing/parser_callbacks/#callback-event-types","title":"Callback event types","text":"

    We distinguish six scenarios (determined by the event type) in which the callback function can be called. The following table describes the values of the parameters depth, event, and parsed.

    parameter event description parameter depth parameter parsed parse_event_t::object_start the parser read { and started to process a JSON object depth of the parent of the JSON object a JSON value with type discarded parse_event_t::key the parser read a key of a value in an object depth of the currently parsed JSON object a JSON string containing the key parse_event_t::object_end the parser read } and finished processing a JSON object depth of the parent of the JSON object the parsed JSON object parse_event_t::array_start the parser read [ and started to process a JSON array depth of the parent of the JSON array a JSON value with type discarded parse_event_t::array_end the parser read ] and finished processing a JSON array depth of the parent of the JSON array the parsed JSON array parse_event_t::value the parser finished reading a JSON value depth of the value the parsed JSON value Example

    When parsing the following JSON text,

    {\n    \"name\": \"Berlin\",\n    \"location\": [\n        52.519444,\n        13.406667\n    ]\n}\n

    these calls are made to the callback function:

    event depth parsed object_start 0 discarded key 1 \"name\" value 1 \"Berlin\" key 1 \"location\" array_start 1 discarded value 2 52.519444 value 2 13.406667 array_end 1 [52.519444,13.406667] object_end 0 {\"location\":[52.519444,13.406667],\"name\":\"Berlin\"}"},{"location":"features/parsing/parser_callbacks/#return-value","title":"Return value","text":"

    Discarding a value (i.e., returning false) has different effects depending on the context in which the function was called:

    • Discarded values in structured types are skipped. That is, the parser will behave as if the discarded value was never read.
    • In case a value outside a structured type is skipped, it is replaced with null. This case happens if the top-level element is skipped.
    Example

    The example below demonstrates the parse() function with and without callback function.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, 38793]\n        }\n    }\n    )\";\n\n    // parse and serialize JSON\n    json j_complete = json::parse(text);\n    std::cout << std::setw(4) << j_complete << \"\\n\\n\";\n\n    // define parser callback\n    json::parser_callback_t cb = [](int depth, json::parse_event_t event, json & parsed)\n    {\n        // skip object elements with key \"Thumbnail\"\n        if (event == json::parse_event_t::key and parsed == json(\"Thumbnail\"))\n        {\n            return false;\n        }\n        else\n        {\n            return true;\n        }\n    };\n\n    // parse (with callback) and serialize JSON\n    json j_filtered = json::parse(text, cb);\n    std::cout << std::setw(4) << j_filtered << '\\n';\n}\n

    Output:

    {\n    \"Image\": {\n        \"Animated\": false,\n        \"Height\": 600,\n        \"IDs\": [\n            116,\n            943,\n            234,\n            38793\n        ],\n        \"Thumbnail\": {\n            \"Height\": 125,\n            \"Url\": \"http://www.example.com/image/481989943\",\n            \"Width\": 100\n        },\n        \"Title\": \"View from 15th Floor\",\n        \"Width\": 800\n    }\n}\n\n{\n    \"Image\": {\n        \"Animated\": false,\n        \"Height\": 600,\n        \"IDs\": [\n            116,\n            943,\n            234,\n            38793\n        ],\n        \"Title\": \"View from 15th Floor\",\n        \"Width\": 800\n    }\n}\n
    "},{"location":"features/parsing/sax_interface/","title":"SAX Interface","text":"

    The library uses a SAX-like interface with the following functions:

    classDiagram\n\nclass sax_t [\"json::sax_t\"] {\n    <<interface>>\n    +bool null()*\n\n    +bool boolean(bool val)*\n\n    +bool number_integer(number_integer_t val)*\n    +bool number_unsigned(number_unsigned_t val)*\n\n    +bool number_float(number_float_t val, const string_t& s)*\n\n    +bool string(string_t& val)*\n    +bool binary(binary_t& val)*\n\n    +bool start_object(std::size_t elements)*\n    +bool end_object()*\n    +bool start_array(std::size_t elements)*\n    +bool end_array()*\n    +bool key(string_t& val)*\n\n    +bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex)*\n}
    // called when null is parsed\nbool null();\n\n// called when a boolean is parsed; value is passed\nbool boolean(bool val);\n\n// called when a signed or unsigned integer number is parsed; value is passed\nbool number_integer(number_integer_t val);\nbool number_unsigned(number_unsigned_t val);\n\n// called when a floating-point number is parsed; value and original string is passed\nbool number_float(number_float_t val, const string_t& s);\n\n// called when a string is parsed; value is passed and can be safely moved away\nbool string(string_t& val);\n// called when a binary value is parsed; value is passed and can be safely moved away\nbool binary(binary_t& val);\n\n// called when an object or array begins or ends, resp. The number of elements is passed (or -1 if not known)\nbool start_object(std::size_t elements);\nbool end_object();\nbool start_array(std::size_t elements);\nbool end_array();\n// called when an object key is parsed; value is passed and can be safely moved away\nbool key(string_t& val);\n\n// called when a parse error occurs; byte position, the last token, and an exception is passed\nbool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex);\n

    The return value of each function determines whether parsing should proceed.

    To implement your own SAX handler, proceed as follows:

    1. Implement the SAX interface in a class. You can use class nlohmann::json_sax<json> as base class, but you can also use any class where the functions described above are implemented and public.
    2. Create an object of your SAX interface class, e.g. my_sax.
    3. Call bool json::sax_parse(input, &my_sax); where the first parameter can be any input like a string or an input stream and the second parameter is a pointer to your SAX interface.

    Note the sax_parse function only returns a bool indicating the result of the last executed SAX event. It does not return json value - it is up to you to decide what to do with the SAX events. Furthermore, no exceptions are thrown in case of a parse error - it is up to you what to do with the exception object passed to your parse_error implementation. Internally, the SAX interface is used for the DOM parser (class json_sax_dom_parser) as well as the acceptor (json_sax_acceptor), see file json_sax.hpp.

    "},{"location":"features/parsing/sax_interface/#see-also","title":"See also","text":"
    • json_sax - documentation of the SAX interface
    • sax_parse - SAX parser
    "},{"location":"features/types/","title":"Types","text":"

    This page gives an overview how JSON values are stored and how this can be configured.

    "},{"location":"features/types/#overview","title":"Overview","text":"

    By default, JSON values are stored as follows:

    JSON type C++ type object std::map<std::string, basic_json> array std::vector<basic_json> null std::nullptr_t string std::string boolean bool number std::int64_t, std::uint64_t, and double

    Note there are three different types for numbers - when parsing JSON text, the best fitting type is chosen.

    "},{"location":"features/types/#storage","title":"Storage","text":"
    classDiagram\n\nclass value_t {\n    <<enumeration>>\n    null\n    object\n    array\n    string\n    boolean\n    number_integer\n    number_unsigned\n    number_float\n    binary\n    discarded\n}\n\nclass json_value {\n    <<union>>\n    object_t* object\n    array_t* array\n    string_t* string\n    binary_t* binary\n    boolean_t boolean\n    number_integer_t number_integer\n    number_unsigned_t number_unsigned\n    number_float_t number_float\n}\n\nclass basic_json {\n    -value_t m_type\n    -json_value m_value\n    +typedef object_t\n    +typedef array_t\n    +typedef binary_t\n    +typedef boolean_t\n    +typedef number_integer_t\n    +typedef number_unsigned_t\n    +typedef number_float_t\n}\n\nbasic_json .. json_value\nbasic_json .. value_t
    "},{"location":"features/types/#template-arguments","title":"Template arguments","text":"

    The data types to store a JSON value are derived from the template arguments passed to class basic_json:

    template<\n    template<typename U, typename V, typename... Args> class ObjectType = std::map,\n    template<typename U, typename... Args> class ArrayType = std::vector,\n    class StringType = std::string,\n    class BooleanType = bool,\n    class NumberIntegerType = std::int64_t,\n    class NumberUnsignedType = std::uint64_t,\n    class NumberFloatType = double,\n    template<typename U> class AllocatorType = std::allocator,\n    template<typename T, typename SFINAE = void> class JSONSerializer = adl_serializer,\n    class BinaryType = std::vector<std::uint8_t>\n>\nclass basic_json;\n

    Type json is an alias for basic_json<> and uses the default types.

    From the template arguments, the following types are derived:

    using object_comparator_t = std::less<>;\nusing object_t = ObjectType<StringType, basic_json, object_comparator_t,\n                   AllocatorType<std::pair<const StringType, basic_json>>>;\n\nusing array_t = ArrayType<basic_json, AllocatorType<basic_json>>;\n\nusing string_t = StringType;\n\nusing boolean_t = BooleanType;\n\nusing number_integer_t = NumberIntegerType;\nusing number_unsigned_t = NumberUnsignedType;\nusing number_float_t = NumberFloatType;\n\nusing binary_t = nlohmann::byte_container_with_subtype<BinaryType>;\n
    "},{"location":"features/types/#objects","title":"Objects","text":"

    RFC 8259 describes JSON objects as follows:

    An object is an unordered collection of zero or more name/value pairs, where a name is a string and a value is a string, number, boolean, null, object, or array.

    "},{"location":"features/types/#default-type","title":"Default type","text":"

    With the default values for ObjectType (std::map), StringType (std::string), and AllocatorType (std::allocator), the default value for object_t is:

    std::map<\n  std::string, // key_type\n  basic_json, // value_type\n  std::less<>, // key_compare\n  std::allocator<std::pair<const std::string, basic_json>> // allocator_type\n>\n
    "},{"location":"features/types/#behavior","title":"Behavior","text":"

    The choice of object_t influences the behavior of the JSON class. With the default type, objects have the following behavior:

    • When all names are unique, objects will be interoperable in the sense that all software implementations receiving that object will agree on the name-value mappings.
    • When the names within an object are not unique, it is unspecified which one of the values for a given key will be chosen. For instance, {\"key\": 2, \"key\": 1} could be equal to either {\"key\": 1} or {\"key\": 2}.
    • Internally, name/value pairs are stored in lexicographical order of the names. Objects will also be serialized (see dump) in this order. For instance, both {\"b\": 1, \"a\": 2} and {\"a\": 2, \"b\": 1} will be stored and serialized as {\"a\": 2, \"b\": 1}.
    • When comparing objects, the order of the name/value pairs is irrelevant. This makes objects interoperable in the sense that they will not be affected by these differences. For instance, {\"b\": 1, \"a\": 2} and {\"a\": 2, \"b\": 1} will be treated as equal.
    "},{"location":"features/types/#key-order","title":"Key order","text":"

    The order name/value pairs are added to the object is not preserved by the library. Therefore, iterating an object may return name/value pairs in a different order than they were originally stored. In fact, keys will be traversed in alphabetical order as std::map with std::less is used by default. Please note this behavior conforms to RFC 8259, because any order implements the specified \"unordered\" nature of JSON objects.

    "},{"location":"features/types/#limits","title":"Limits","text":"

    RFC 8259 specifies:

    An implementation may set limits on the maximum depth of nesting.

    In this class, the object's limit of nesting is not explicitly constrained. However, a maximum depth of nesting may be introduced by the compiler or runtime environment. A theoretical limit can be queried by calling the max_size function of a JSON object.

    "},{"location":"features/types/#storage_1","title":"Storage","text":"

    Objects are stored as pointers in a basic_json type. That is, for any access to object values, a pointer of type object_t* must be dereferenced.

    "},{"location":"features/types/#arrays","title":"Arrays","text":"

    RFC 8259 describes JSON arrays as follows:

    An array is an ordered sequence of zero or more values.

    "},{"location":"features/types/#default-type_1","title":"Default type","text":"

    With the default values for ArrayType (std::vector) and AllocatorType (std::allocator), the default value for array_t is:

    std::vector<\n  basic_json, // value_type\n  std::allocator<basic_json> // allocator_type\n>\n
    "},{"location":"features/types/#limits_1","title":"Limits","text":"

    RFC 8259 specifies:

    An implementation may set limits on the maximum depth of nesting.

    In this class, the array's limit of nesting is not explicitly constrained. However, a maximum depth of nesting may be introduced by the compiler or runtime environment. A theoretical limit can be queried by calling the max_size function of a JSON array.

    "},{"location":"features/types/#storage_2","title":"Storage","text":"

    Arrays are stored as pointers in a basic_json type. That is, for any access to array values, a pointer of type array_t* must be dereferenced.

    "},{"location":"features/types/#strings","title":"Strings","text":"

    RFC 8259 describes JSON strings as follows:

    A string is a sequence of zero or more Unicode characters.

    Unicode values are split by the JSON class into byte-sized characters during deserialization.

    "},{"location":"features/types/#default-type_2","title":"Default type","text":"

    With the default values for StringType (std::string), the default value for string_t is std::string.

    "},{"location":"features/types/#encoding","title":"Encoding","text":"

    Strings are stored in UTF-8 encoding. Therefore, functions like std::string::size() or std::string::length() return the number of bytes in the string rather than the number of characters or glyphs.

    "},{"location":"features/types/#string-comparison","title":"String comparison","text":"

    RFC 8259 states:

    Software implementations are typically required to test names of object members for equality. Implementations that transform the textual representation into sequences of Unicode code units and then perform the comparison numerically, code unit by code unit, are interoperable in the sense that implementations will agree in all cases on equality or inequality of two strings. For example, implementations that compare strings with escaped characters unconverted may incorrectly find that \"a\\\\b\" and \"a\\u005Cb\" are not equal.

    This implementation is interoperable as it does compare strings code unit by code unit.

    "},{"location":"features/types/#storage_3","title":"Storage","text":"

    String values are stored as pointers in a basic_json type. That is, for any access to string values, a pointer of type string_t* must be dereferenced.

    "},{"location":"features/types/#booleans","title":"Booleans","text":"

    RFC 8259 implicitly describes a boolean as a type which differentiates the two literals true and false.

    "},{"location":"features/types/#default-type_3","title":"Default type","text":"

    With the default values for BooleanType (bool), the default value for boolean_t is bool.

    "},{"location":"features/types/#storage_4","title":"Storage","text":"

    Boolean values are stored directly inside a basic_json type.

    "},{"location":"features/types/#numbers","title":"Numbers","text":"

    See the number handling article for a detailed discussion on how numbers are handled by this library.

    RFC 8259 describes numbers as follows:

    The representation of numbers is similar to that used in most programming languages. A number is represented in base 10 using decimal digits. It contains an integer component that may be prefixed with an optional minus sign, which may be followed by a fraction part and/or an exponent part. Leading zeros are not allowed. (...) Numeric values that cannot be represented in the grammar below (such as Infinity and NaN) are not permitted.

    This description includes both integer and floating-point numbers. However, C++ allows more precise storage if it is known whether the number is a signed integer, an unsigned integer or a floating-point number. Therefore, three different types, number_integer_t, number_unsigned_t, and number_float_t are used.

    "},{"location":"features/types/#default-types","title":"Default types","text":"

    With the default values for NumberIntegerType (std::int64_t), the default value for number_integer_t is std::int64_t. With the default values for NumberUnsignedType (std::uint64_t), the default value for number_unsigned_t is std::uint64_t. With the default values for NumberFloatType (double), the default value for number_float_t is double.

    "},{"location":"features/types/#default-behavior","title":"Default behavior","text":"
    • The restrictions about leading zeros is not enforced in C++. Instead, leading zeros in integer literals lead to an interpretation as octal number. Internally, the value will be stored as decimal number. For instance, the C++ integer literal 010 will be serialized to 8. During deserialization, leading zeros yield an error.
    • Not-a-number (NaN) values will be serialized to null.
    "},{"location":"features/types/#limits_2","title":"Limits","text":"

    RFC 8259 specifies:

    An implementation may set limits on the range and precision of numbers.

    When the default type is used, the maximal integer number that can be stored is 9223372036854775807 (INT64_MAX) and the minimal integer number that can be stored is -9223372036854775808 (INT64_MIN). Integer numbers that are out of range will yield over/underflow when used in a constructor. During deserialization, too large or small integer numbers will be automatically be stored as number_unsigned_t or number_float_t.

    When the default type is used, the maximal unsigned integer number that can be stored is 18446744073709551615 (UINT64_MAX) and the minimal integer number that can be stored is 0. Integer numbers that are out of range will yield over/underflow when used in a constructor. During deserialization, too large or small integer numbers will be automatically be stored as number_integer_t or number_float_t.

    RFC 8259 further states:

    Note that when such software is used, numbers that are integers and are in the range [-2^{53}+1, 2^{53}-1] are interoperable in the sense that implementations will agree exactly on their numeric values.

    As this range is a subrange of the exactly supported range [INT64_MIN, INT64_MAX], this class's integer type is interoperable.

    RFC 8259 states:

    This specification allows implementations to set limits on the range and precision of numbers accepted. Since software that implements IEEE 754-2008 binary64 (double precision) numbers is generally available and widely used, good interoperability can be achieved by implementations that expect no more precision or range than these provide, in the sense that implementations will approximate JSON numbers within the expected precision.

    This implementation does exactly follow this approach, as it uses double precision floating-point numbers. Note values smaller than -1.79769313486232e+308 and values greater than 1.79769313486232e+308 will be stored as NaN internally and be serialized to null.

    "},{"location":"features/types/#storage_5","title":"Storage","text":"

    Integer number values, unsigned integer number values, and floating-point number values are stored directly inside a basic_json type.

    "},{"location":"features/types/number_handling/","title":"Number Handling","text":"

    This document describes how the library is handling numbers.

    "},{"location":"features/types/number_handling/#background","title":"Background","text":"

    This section briefly summarizes how the JSON specification describes how numbers should be handled.

    "},{"location":"features/types/number_handling/#json-number-syntax","title":"JSON number syntax","text":"

    JSON defines the syntax of numbers as follows:

    RFC 8259, Section 6

    The representation of numbers is similar to that used in most programming languages. A number is represented in base 10 using decimal digits. It contains an integer component that may be prefixed with an optional minus sign, which may be followed by a fraction part and/or an exponent part. Leading zeros are not allowed.

    A fraction part is a decimal point followed by one or more digits.

    An exponent part begins with the letter E in uppercase or lowercase, which may be followed by a plus or minus sign. The E and optional sign are followed by one or more digits.

    The following railroad diagram from json.org visualizes the number syntax:

    "},{"location":"features/types/number_handling/#number-interoperability","title":"Number interoperability","text":"

    On number interoperability, the following remarks are made:

    RFC 8259, Section 6

    This specification allows implementations to set limits on the range and precision of numbers accepted. Since software that implements IEEE 754 binary64 (double precision) numbers [IEEE754] is generally available and widely used, good interoperability can be achieved by implementations that expect no more precision or range than these provide, in the sense that implementations will approximate JSON numbers within the expected precision. A JSON number such as 1E400 or 3.141592653589793238462643383279 may indicate potential interoperability problems, since it suggests that the software that created it expects receiving software to have greater capabilities for numeric magnitude and precision than is widely available.

    Note that when such software is used, numbers that are integers and are in the range [-2^{53}+1, 2^{53}-1] are interoperable in the sense that implementations will agree exactly on their numeric values.

    "},{"location":"features/types/number_handling/#library-implementation","title":"Library implementation","text":"

    This section describes how the above number specification is implemented by this library.

    "},{"location":"features/types/number_handling/#number-storage","title":"Number storage","text":"

    In the default json type, numbers are stored as std::uint64_t, std::int64_t, and double, respectively. Thereby, std::uint64_t and std::int64_t are used only if they can store the number without loss of precision. If this is impossible (e.g., if the number is too large), the number is stored as double.

    Notes

    • Numbers with a decimal digit or scientific notation are always stored as double.
    • The number types can be changed, see Template number types.
    • As of version 3.9.1, the conversion is realized by std::strtoull, std::strtoll, and std::strtod, respectively.

    Examples

    • Integer -12345678912345789123456789 is smaller than INT64_MIN and will be stored as floating-point number -1.2345678912345788e+25.
    • Integer 1E3 will be stored as floating-point number 1000.0.
    "},{"location":"features/types/number_handling/#number-limits","title":"Number limits","text":"
    • Any 64-bit signed or unsigned integer can be stored without loss of precision.
    • Numbers exceeding the limits of double (i.e., numbers that after conversion via std::strtod are not satisfying std::isfinite such as 1E400) will throw exception json.exception.out_of_range.406 during parsing.
    • Floating-point numbers are rounded to the next number representable as double. For instance 3.141592653589793238462643383279 is stored as 0x400921fb54442d18. This is the same behavior as the code double x = 3.141592653589793238462643383279;.

    Interoperability

    • The library interoperable with respect to the specification, because its supported range [-2^{63}, 2^{64}-1] is larger than the described range [-2^{53}+1, 2^{53}-1].
    • All integers outside the range [-2^{63}, 2^{64}-1], as well as floating-point numbers are stored as double. This also concurs with the specification above.
    "},{"location":"features/types/number_handling/#zeros","title":"Zeros","text":"

    The JSON number grammar allows for different ways to express zero, and this library will store zeros differently:

    Literal Stored value and type Serialization 0 std::uint64_t(0) 0 -0 std::int64_t(0) 0 0.0 double(0.0) 0.0 -0.0 double(-0.0) -0.0 0E0 double(0.0) 0.0 -0E0 double(-0.0) -0.0

    That is, -0 is stored as a signed integer, but the serialization does not reproduce the -.

    "},{"location":"features/types/number_handling/#number-serialization","title":"Number serialization","text":"
    • Integer numbers are serialized as is; that is, no scientific notation is used.
    • Floating-point numbers are serialized as specified by the %g printf modifier with std::numeric_limits<double>::max_digits10 significant digits. The rationale is to use the shortest representation while still allow round-tripping.

    Notes regarding precision of floating-point numbers

    As described above, floating-point numbers are rounded to the nearest double and serialized with the shortest representation to allow round-tripping. This can yield confusing examples:

    • The serialization can have fewer decimal places than the input: 2555.5599999999999 will be serialized as 2555.56. The reverse can also be true.
    • The serialization can be in scientific notation even if the input is not: 0.0000972439793401814 will be serialized as 9.72439793401814e-05. The reverse can also be true: 12345E-5 will be serialized as 0.12345.
    • Conversions from float to double can also introduce rounding errors:
      float f = 0.3;\njson j = f;\nstd::cout << j << '\\n';\n
      yields 0.30000001192092896.

    All examples here can be reproduced by passing the original double value to

    std::printf(\"%.*g\\n\", std::numeric_limits<double>::max_digits10, double_value);\n
    "},{"location":"features/types/number_handling/#nan-handling","title":"NaN handling","text":"

    NaN (not-a-number) cannot be expressed with the number syntax described above and are in fact explicitly excluded:

    RFC 8259, Section 6

    Numeric values that cannot be represented in the grammar below (such as Infinity and NaN) are not permitted.

    That is, there is no way to parse a NaN value. However, NaN values can be stored in a JSON value by assignment.

    This library serializes NaN values as null. This corresponds to the behavior of JavaScript's JSON.stringify function.

    Example

    The following example shows how a NaN value is stored in a json value.

    int main()\n{\n    double val = std::numeric_limits<double>::quiet_NaN();\n    std::cout << \"val=\" << val << std::endl;\n    json j = val;\n    std::cout << \"j=\" << j.dump() << std::endl;\n    val = j;\n    std::cout << \"val=\" << val << std::endl;\n}\n

    output:

    val=nan\nj=null\nval=nan\n
    "},{"location":"features/types/number_handling/#number-comparison","title":"Number comparison","text":"

    Floating-point inside JSON values numbers are compared with json::number_float_t::operator== which is double::operator== by default.

    Alternative comparison functions

    To compare floating-point while respecting an epsilon, an alternative comparison function could be used, for instance

    template<typename T, typename = typename std::enable_if<std::is_floating_point<T>::value, T>::type>\ninline bool is_same(T a, T b, T epsilon = std::numeric_limits<T>::epsilon()) noexcept\n{\n    return std::abs(a - b) <= epsilon;\n}\n
    Or you can self-define an operator equal function like this:

    bool my_equal(const_reference lhs, const_reference rhs)\n{\n    const auto lhs_type lhs.type();\n    const auto rhs_type rhs.type();\n    if (lhs_type == rhs_type)\n    {\n        switch(lhs_type)\n        {\n            // self_defined case\n            case value_t::number_float:\n                return std::abs(lhs - rhs) <= std::numeric_limits<float>::epsilon();\n\n            // other cases remain the same with the original\n            ...\n        }\n    }\n    ...\n}\n

    (see #703 for more information.)

    Note

    NaN values never compare equal to themselves or to other NaN values. See #514.

    "},{"location":"features/types/number_handling/#number-conversion","title":"Number conversion","text":"

    Just like the C++ language itself, the get family of functions allows conversions between unsigned and signed integers, and between integers and floating-point values to integers. This behavior may be surprising.

    Unconditional number conversions

    double d = 42.3;                                   // non-integer double value 42.3\njson jd = d;                                       // stores double value 42.3\nstd::int64_t i = jd.template get<std::int64_t>();  // now i==42; no warning or error is produced\n

    Note the last line with throw a json.exception.type_error.302 exception if jd is not a numerical type, for instance a string.

    The rationale is twofold:

    1. JSON does not define a number type or precision (see above).
    2. C++ also allows to silently convert between number types.

    Conditional number conversion

    The code above can be solved by explicitly checking the nature of the value with members such as is_number_integer() or is_number_unsigned():

    // check if jd is really integer-valued\nif (jd.is_number_integer())\n{\n    // if so, do the conversion and use i\n    std::int64_t i = jd.template get<std::int64_t>();\n    // ...\n}\nelse\n{\n    // otherwise, take appropriate action\n    // ...\n}\n

    Note this approach also has the advantage that it can react on non-numerical JSON value types such as strings.

    (Example taken from #777.)

    "},{"location":"features/types/number_handling/#determine-number-types","title":"Determine number types","text":"

    As the example in Number conversion shows, there are different functions to determine the type of the stored number:

    • is_number() returns true for any number type
    • is_number_integer() returns true for signed and unsigned integers
    • is_number_unsigned() returns true for unsigned integers only
    • is_number_float() returns true for floating-point numbers
    • type_name() returns \"number\" for any number type
    • type() returns a different enumerator of value_t for all number types
    function unsigned integer signed integer floating-point string is_number() true true true false is_number_integer() true true false false is_number_unsigned() true false false false is_number_float() false false true false type_name() \"number\" \"number\" \"number\" \"string\" type() number_unsigned number_integer number_float string"},{"location":"features/types/number_handling/#template-number-types","title":"Template number types","text":"

    The number types can be changed with template parameters.

    position number type default type possible values 5 signed integers std::int64_t std::int32_t, std::int16_t, etc. 6 unsigned integers std::uint64_t std::uint32_t, std::uint16_t, etc. 7 floating-point double float, long double

    Constraints on number types

    • The type for signed integers must be convertible from long long. The type for floating-point numbers is used in case of overflow.
    • The type for unsigned integers must be convertible from unsigned long long. The type for floating-point numbers is used in case of overflow.
    • The types for signed and unsigned integers must be distinct, see #2573.
    • Only double, float, and long double are supported for floating-point numbers.

    Example

    A basic_json type that uses long double as floating-point type.

    using json_ld = nlohmann::basic_json<std::map, std::vector, std::string, bool,\n                                     std::int64_t, std::uint64_t, long double>;\n

    Note values should then be parsed with json_ld::parse rather than json::parse as the latter would parse floating-point values to double before then converting them to long double.

    "},{"location":"home/architecture/","title":"Architecture","text":"

    Info

    This page is still under construction. Its goal is to provide a high-level overview of the library's architecture. This should help new contributors to get an idea of the used concepts and where to make changes.

    "},{"location":"home/architecture/#overview","title":"Overview","text":"

    The main structure is class nlohmann::basic_json.

    • public API
    • container interface
    • iterators
    "},{"location":"home/architecture/#template-specializations","title":"Template specializations","text":"
    • describe template parameters of basic_json
    • json
    • ordered_json via ordered_map
    "},{"location":"home/architecture/#value-storage","title":"Value storage","text":"

    Values are stored as a tagged union of value_t and json_value.

    /// the type of the current element\nvalue_t m_type = value_t::null;\n\n/// the value of the current element\njson_value m_value = {};\n

    with

    enum class value_t : std::uint8_t\n{\n    null,             ///< null value\n    object,           ///< object (unordered set of name/value pairs)\n    array,            ///< array (ordered collection of values)\n    string,           ///< string value\n    boolean,          ///< boolean value\n    number_integer,   ///< number value (signed integer)\n    number_unsigned,  ///< number value (unsigned integer)\n    number_float,     ///< number value (floating-point)\n    binary,           ///< binary array (ordered collection of bytes)\n    discarded         ///< discarded by the parser callback function\n};\n\nunion json_value {\n  /// object (stored with pointer to save storage)\n  object_t *object;\n  /// array (stored with pointer to save storage)\n  array_t *array;\n  /// string (stored with pointer to save storage)\n  string_t *string;\n  /// binary (stored with pointer to save storage)\n  binary_t *binary;\n  /// boolean\n  boolean_t boolean;\n  /// number (integer)\n  number_integer_t number_integer;\n  /// number (unsigned integer)\n  number_unsigned_t number_unsigned;\n  /// number (floating-point)\n  number_float_t number_float;\n};\n
    "},{"location":"home/architecture/#parsing-inputs-deserialization","title":"Parsing inputs (deserialization)","text":"

    Input is read via input adapters that abstract a source with a common interface:

    /// read a single character\nstd::char_traits<char>::int_type get_character() noexcept;\n\n/// read multiple characters to a destination buffer and\n/// returns the number of characters successfully read\ntemplate<class T>\nstd::size_t get_elements(T* dest, std::size_t count = 1);\n

    List examples of input adapters.

    "},{"location":"home/architecture/#sax-interface","title":"SAX Interface","text":"

    TODO

    "},{"location":"home/architecture/#writing-outputs-serialization","title":"Writing outputs (serialization)","text":"

    Output is written via output adapters:

    template<typename T>\nvoid write_character(CharType c);\n\ntemplate<typename CharType>\nvoid write_characters(const CharType* s, std::size_t length);\n

    List examples of output adapters.

    "},{"location":"home/architecture/#value-conversion","title":"Value conversion","text":"
    template<class T>\nvoid to_json(basic_json& j, const T& t);\n\ntemplate<class T>\nvoid from_json(const basic_json& j, T& t);\n
    "},{"location":"home/architecture/#additional-features","title":"Additional features","text":"
    • JSON Pointers
    • Binary formats
    • Custom base class
    • Conversion macros
    "},{"location":"home/architecture/#details-namespace","title":"Details namespace","text":"
    • C++ feature backports
    "},{"location":"home/customers/","title":"Customers","text":"

    The library is used in multiple projects, applications, operating systems, etc. The list below is not exhaustive, but the result of an internet search. If you know further customers of the library, please let me know.

    "},{"location":"home/customers/#space-exploration","title":"Space Exploration","text":"
    • Peregrine Lunar Lander Flight 01 - The library was utilized for payload management in the Peregrine Moon Lander, developed by Astrobotic Technology and launched as part of NASA's Commercial Lunar Payload Services (CLPS) program. After six days in orbit, the spacecraft was intentionally redirected into Earth's atmosphere, where it burned up over the Pacific Ocean on January 18, 2024.
    "},{"location":"home/customers/#automotive","title":"Automotive","text":"
    • Alexa Auto SDK, a software development kit enabling the integration of Alexa into automotive systems
    • Apollo, a framework for building autonomous driving systems
    • Automotive Grade Linux (AGL): a collaborative open-source platform for automotive software development
    • Genesis Motor (infotainment), a luxury automotive brand
    • Hyundai (infotainment), a global automotive brand
    • Kia (infotainment), a global automotive brand
    • Mercedes-Benz Operating System (MB.OS), a core component of the vehicle software ecosystem from Mercedes-Benz
    • Rivian (infotainment), an electric vehicle manufacturer
    • Suzuki (infotainment), a global automotive and motorcycle manufacturer
    "},{"location":"home/customers/#gaming-and-entertainment","title":"Gaming and Entertainment","text":"
    • Assassin's Creed: Mirage: a stealth-action game set in the Middle East, focusing on the journey of a young assassin with classic parkour and stealth mechanics
    • Chasm: The Rift: a first-person shooter blending horror and adventure, where players navigate dark realms and battle monsters
    • College Football 25: a college football simulation game featuring gameplay that mimics real-life college teams and competitions
    • Concepts: a digital sketching app designed for creative professionals, offering flexible drawing tools for illustration, design, and brainstorming
    • Depthkit: a tool for creating and capturing volumetric video, enabling immersive 3D experiences and interactive content
    • immersivetech: a technology company focused on immersive experiences, providing tools and solutions for virtual and augmented reality applications
    • LOOT, a tool for optimizing the load order of game plugins, commonly used in The Elder Scrolls and Fallout series
    • Madden NFL 25: a sports simulation game capturing the excitement of American football with realistic gameplay and team management features
    • Marne, an unofficial private server platform for hosting custom Battlefield 1 game experiences
    • Minecraft, a popular sandbox video game
    • NHL 22: a hockey simulation game offering realistic gameplay, team management, and various modes to enhance the hockey experience
    • Pixelpart: a 2D animation and video compositing software that allows users to create animated graphics and visual effects with a focus on simplicity and ease of use
    • Red Dead Redemption II: an open-world action-adventure game following an outlaw's story in the late 1800s, emphasizing deep storytelling and immersive gameplay
    • Tactics Ogre: Reborn, a tactical role-playing game featuring strategic battles and deep storytelling elements
    • Throne and Liberty, an MMORPG that offers an expansive fantasy world with dynamic gameplay and immersive storytelling
    • Unity Vivox, a communication service that enables voice and text chat functionality in multiplayer games developed with Unity
    • Zool: Redimensioned: a modern reimagining of the classic platformer featuring fast-paced gameplay and vibrant environments
    "},{"location":"home/customers/#consumer-electronics","title":"Consumer Electronics","text":"
    • Audinate: a provider of networked audio solutions specializing in Dante technology, which facilitates high-quality digital audio transport over IP networks
    • Cisco Webex Desk Camera, a video camera designed for professional-quality video conferencing and remote collaboration
    • Philips Hue Personal Wireless Lighting: a smart lighting system for customizable and wireless home illumination
    • Ray-Ban Meta Smart glasses, a pair of smart glasses designed for capturing photos and videos with integrated connectivity and social features
    • Siemens SINEMA Remote Connect, a remote connectivity solution for monitoring and managing industrial networks and devices securely
    • Sony PlayStation 4, a gaming console developed by Sony that offers a wide range of games and multimedia entertainment features
    • Sony Virtual Webcam Driver for Remote Camera, a software driver that enables the use of Sony cameras as virtual webcams for video conferencing and streaming
    "},{"location":"home/customers/#operating-systems","title":"Operating Systems","text":"
    • Apple iOS and macOS, a family of operating systems developed by Apple, including iOS for mobile devices and macOS for desktop computers
    • Google Fuchsia, an open-source operating system developed by Google, designed to be secure, updatable, and adaptable across various devices
    • SerenityOS, an open-source operating system that aims to provide a simple and beautiful user experience with a focus on simplicity and elegance
    • Yocto: a Linux-based build system for creating custom operating systems and software distributions, tailored for embedded devices and IoT applications
    "},{"location":"home/customers/#development-tools-and-ides","title":"Development Tools and IDEs","text":"
    • Accentize SpectralBalance, an adaptive speech analysis tool designed to enhance audio quality by optimizing frequency balance in recordings
    • Arm Compiler for Linux, a software development toolchain for compiling and optimizing applications on Arm-based Linux systems
    • BBEdit, a professional text and code editor for macOS
    • CoderPad, a collaborative coding platform that enables real-time code interviews and assessments for developers; the library is included in every CoderPad instance and can be accessed with a simple #include \"json.hpp\"
    • Compiler Explorer, a web-based tool that allows users to write, compile, and visualize the assembly output of code in various programming languages; the library is readily available and accessible with the directive #include <nlohmann/json.hpp>.
    • GitHub CodeQL, a code analysis tool used for identifying security vulnerabilities and bugs in software through semantic queries
    • Hex-Rays: a reverse engineering toolset for analyzing and decompiling binaries, primarily used for security research and vulnerability analysis
    • ImHex, a hex editor designed for reverse engineering, providing advanced features for data analysis and manipulation
    • Intel GPA Framework, a suite of cross-platform tools for capturing, analyzing, and optimizing graphics applications across different APIs
    • Meta Yoga, a layout engine that facilitates flexible and efficient user interface design across multiple platforms
    • MKVToolNix, a set of tools for creating, editing, and inspecting MKV (Matroska) multimedia container files
    • NVIDIA Nsight Compute, a performance analysis tool for CUDA applications that provides detailed insights into GPU performance metrics
    • Notepad++, a free source code editor that supports various programming languages
    • OpenRGB, an open source RGB lighting control that doesn't depend on manufacturer software
    • OpenTelemetry C++: a library for collecting and exporting observability data in C++, enabling developers to implement distributed tracing and metrics in their application
    • Qt Creator, an IDE for developing applications using the Qt application framework
    • Scanbot SDK: a software development kit (SDK) that provides tools for integrating advanced document scanning and barcode scanning capabilities into applications
    "},{"location":"home/customers/#machine-learning-and-ai","title":"Machine Learning and AI","text":"
    • Apple Core ML Tools, a set of tools for converting and configuring machine learning models for deployment in Apple's Core ML framework
    • Avular Mobile Robotics: a platform for developing and deploying mobile robotics solutions
    • Google gemma.cpp, a lightweight C++ inference engine designed for running AI models from the Gemma family
    • llama.cpp, a C++ library designed for efficient inference of large language models (LLMs), enabling streamlined integration into applications
    • MLX, an array framework for machine learning on Apple silicon
    • Mozilla llamafile, a tool designed for distributing and executing large language models (LLMs) efficiently using a single file format
    • NVIDIA ACE, a suite of real-time AI solutions designed for the development of interactive avatars and digital human applications, enabling scalable and sophisticated user interactions
    • Peer: a platform offering personalized AI assistants for interactive learning and creative collaboration
    • stable-diffusion.cpp: a C++ implementation of the Stable Diffusion image generation model
    • TanvasTouch: a software development kit (SDK) that enables developers to create tactile experiences on touchscreens, allowing users to feel textures and physical sensations in a digital environment
    • TensorFlow, a machine learning framework that facilitates the development and training of models, supporting data serialization and efficient data exchange between components
    "},{"location":"home/customers/#scientific-research-and-analysis","title":"Scientific Research and Analysis","text":"
    • BLACK, a bounded linear temporal logic (LTL) satisfiability checker
    • CERN Atlas Athena, a software framework used in the ATLAS experiment at the Large Hadron Collider (LHC) for performance monitoring
    • KAMERA: a platform for synchronized data collection and real-time deep learning to map marine species like polar bears and seals, aiding Arctic ecosystem research
    • KiCad: a free and open-source software suite for electronic design automation
    • MeVisLab: a software framework for medical image processing and visualization.
    • OpenPMD API: a versatile programming interface for accessing and managing scientific data, designed to facilitate the efficient storage, retrieval, and sharing of simulation data across various applications and platforms
    • ParaView: an open-source tool for large-scale data visualization and analysis across various scientific domains
    • QGIS: a free and open-source geographic information system (GIS) application that allows users to create, edit, visualize, and analyze geospatial data across a variety of formats
    • VTK: a software library for 3D computer graphics, image processing, and visualization
    • VolView: a lightweight application for interactive visualization and analysis of 3D medical imaging data.
    "},{"location":"home/customers/#business-and-productivity-software","title":"Business and Productivity Software","text":"
    • ArcGIS PRO, a desktop geographic information system (GIS) application developed by Esri for mapping and spatial analysis
    • Autodesk Desktop, a software platform developed by Autodesk for creating and managing desktop applications and services
    • Check Point: a cybersecurity company specializing in threat prevention and network security solutions, offering a range of products designed to protect enterprises from cyber threats and ensure data integrity
    • Microsoft Office for Mac, a suite of productivity applications developed by Microsoft for macOS, including tools for word processing, spreadsheets, and presentations
    • Microsoft Teams, a team collaboration application offering workspace chat and video conferencing, file storage, and integration of proprietary and third-party applications and services
    • Nexthink Infinity: a digital employee experience management platform for monitoring and improving IT performance
    • Sophos Connect Client: a secure VPN client from Sophos that allows remote users to connect to their corporate network, ensuring secure access to resources and data
    • Stonebranch: a cloud-based cybersecurity solution that integrates backup, disaster recovery, and cybersecurity features to protect data and ensure business continuity for organizations
    • Tablecruncher: a data analysis tool that allows users to import, analyze, and visualize spreadsheet data, offering interactive features for better insights and decision-making
    • magicplan, a mobile application for creating floor plans and interior designs using augmented reality
    "},{"location":"home/customers/#databases-and-big-data","title":"Databases and Big Data","text":"
    • ADIOS2: a data management framework designed for high-performance input and output operations
    • Cribl Stream: a real-time data processing platform that enables organizations to collect, route, and transform observability data, enhancing visibility and insights into their systems
    • DB Browser for SQLite, a visual open-source tool for creating, designing, and editing SQLite database files
    • MySQL Connector/C++, a C++ library for connecting and interacting with MySQL databases
    • MySQL NDB Cluster, a distributed database system that provides high availability and scalability for MySQL databases
    • PrestoDB, a distributed SQL query engine designed for large-scale data analytics, originally developed by Facebook
    • ROOT Data Analysis Framework, an open-source data analysis framework widely used in high-energy physics and other fields for data processing and visualization
    "},{"location":"home/customers/#simulation-and-modeling","title":"Simulation and Modeling","text":"
    • Arcturus HoloSuite, a software toolset for capturing, editing, and streaming volumetric video, featuring advanced compression technologies for high-quality 3D content creation
    • azul, a fast and efficient 3D city model viewer designed for visualizing urban environments and spatial data
    • Blender, a free and open-source 3D creation suite for modeling, animation, rendering, and more
    • cpplot, a library for creating interactive graphs and charts in C++, which can be viewed in web browsers
    • NVIDIA Omniverse, a platform for 3D content creation and collaboration that enables real-time simulations and interactive experiences across various industries
    • Pixar Renderman, a photorealistic 3D rendering software developed by Pixar, widely used in the film industry for creating high-quality visual effects and animations
    • ROS - Robot Operating System, a set of software libraries and tools that assist in developing robot applications
    • UBS, a multinational financial services and banking company
    • GAMS: a high-performance mathematical modeling system for optimization and decision support
    • M-Star: a computational fluid dynamics software for simulating and analyzing fluid flow
    • MapleSim CAD Toolbox: a software extension for MapleSim that integrates CAD models, allowing users to import, manipulate, and analyze 3D CAD data within the MapleSim environment for enhanced modeling and simulation
    • Kitware SMTK: a software toolkit for managing simulation models and workflows in scientific and engineering applications
    "},{"location":"home/customers/#enterprise-and-cloud-applications","title":"Enterprise and Cloud Applications","text":"
    • Acronis Cyber Protect Cloud: an all-in-one data protection solution that combines backup, disaster recovery, and cybersecurity to safeguard business data from threats like ransomware
    • Baereos: a backup solution that provides data protection and recovery options for various environments, including physical and virtual systems
    • Bitdefender Home Scanner, a tool from Bitdefender that scans devices for malware and security threats, providing a safeguard against potential online dangers
    • Citrix Provisioning: a solution that streamlines the delivery of virtual desktops and applications by allowing administrators to manage and provision resources efficiently across multiple environments
    • Citrix Virtual Apps and Desktops, a solution from Citrix that delivers virtual apps and desktops
    • Cyberarc: a security solution that specializes in privileged access management, enabling organizations to control and monitor access to critical systems and data, thereby enhancing overall cybersecurity posture
    • Elster: a digital platform developed by German tax authorities for secure and efficient electronic tax filing and management using secunet protect4use
    • Egnyte Desktop: a secure cloud storage solution designed for businesses, enabling file sharing, collaboration, and data management across teams while ensuring compliance and data protection
    • Ethereum Solidity, a high-level, object-oriented programming language designed for implementing smart contracts on the Ethereum platform
    • Inciga: a monitoring tool for IT infrastructure, designed to provide insights into system performance and availability through customizable dashboards and alerts
    • Intel Accelerator Management Daemon for VMware ESXi: a management tool designed for monitoring and controlling Intel hardware accelerators within VMware ESXi environments, optimizing performance and resource allocation
    • Juniper Identity Management Service
    • Microsoft Azure IoT SDK, a collection of tools and libraries to help developers connect, build, and deploy Internet of Things (IoT) solutions on the Azure cloud platform
    • Microsoft WinGet, a command-line utility included in the Windows Package Manager
    • Pointr: a platform for indoor positioning and navigation solutions, offering tools and SDKs for developers to create location-based applications
    • secunet protect4use: a secure, passwordless multi-factor authentication solution that transforms smartphones into digital keyrings, ensuring high security for online services and digital identities
    "},{"location":"home/design_goals/","title":"Design goals","text":"

    There are myriads of JSON libraries out there, and each may even have its reason to exist. Our class had these design goals:

    • Intuitive syntax. In languages such as Python, JSON feels like a first class data type. We used all the operator magic of modern C++ to achieve the same feeling in your code.

    • Trivial integration. Our whole code consists of a single header file json.hpp. That's it. No library, no subproject, no dependencies, no complex build system. The class is written in vanilla C++11. All in all, everything should require no adjustment of your compiler flags or project settings.

    • Serious testing. Our class is heavily unit-tested and covers 100% of the code, including all exceptional behavior. Furthermore, we checked with Valgrind and the Clang Sanitizers that there are no memory leaks. Google OSS-Fuzz additionally runs fuzz tests against all parsers 24/7, effectively executing billions of tests so far. To maintain high quality, the project is following the Core Infrastructure Initiative (CII) best practices.

    Other aspects were not so important to us:

    • Memory efficiency. Each JSON object has an overhead of one pointer (the maximal size of a union) and one enumeration element (1 byte). The default generalization uses the following C++ data types: std::string for strings, int64_t, uint64_t or double for numbers, std::map for objects, std::vector for arrays, and bool for Booleans. However, you can template the generalized class basic_json to your needs.

    • Speed. There are certainly faster JSON libraries out there. However, if your goal is to speed up your development by adding JSON support with a single header, then this library is the way to go. If you know how to use a std::vector or std::map, you are already set.

    See the contribution guidelines for more information.

    "},{"location":"home/exceptions/","title":"Exceptions","text":""},{"location":"home/exceptions/#overview","title":"Overview","text":""},{"location":"home/exceptions/#base-type","title":"Base type","text":"

    All exceptions inherit from class json::exception (which in turn inherits from std::exception). It is used as the base class for all exceptions thrown by the basic_json class. This class can hence be used as \"wildcard\" to catch exceptions.

    classDiagram\n  direction LR\n    class `std::exception` {\n        <<interface>>\n    }\n\n    class `json::exception` {\n        +const int id\n        +const char* what() const\n    }\n\n    class `json::parse_error` {\n        +const std::size_t byte\n    }\n\n    class `json::invalid_iterator`\n    class `json::type_error`\n    class `json::out_of_range`\n    class `json::other_error`\n\n    `std::exception` <|-- `json::exception`\n    `json::exception` <|-- `json::parse_error`\n    `json::exception` <|-- `json::invalid_iterator`\n    `json::exception` <|-- `json::type_error`\n    `json::exception` <|-- `json::out_of_range`\n    `json::exception` <|-- `json::other_error`
    "},{"location":"home/exceptions/#switch-off-exceptions","title":"Switch off exceptions","text":"

    Exceptions are used widely within the library. They can, however, be switched off with either using the compiler flag -fno-exceptions or by defining the symbol JSON_NOEXCEPTION. In this case, exceptions are replaced by abort() calls. You can further control this behavior by defining JSON_THROW_USER (overriding throw), JSON_TRY_USER (overriding try), and JSON_CATCH_USER (overriding catch).

    Note that JSON_THROW_USER should leave the current scope (e.g., by throwing or aborting), as continuing after it may yield undefined behavior.

    Example

    The code below switches off exceptions and creates a log entry with a detailed error message in case of errors.

    #include <iostream>\n\n#define JSON_TRY_USER if(true)\n#define JSON_CATCH_USER(exception) if(false)\n#define JSON_THROW_USER(exception)                           \\\n    {std::clog << \"Error in \" << __FILE__ << \":\" << __LINE__ \\\n               << \" (function \" << __FUNCTION__ << \") - \"    \\\n               << (exception).what() << std::endl;           \\\n     std::abort();}\n\n#include <nlohmann/json.hpp>\n

    Note the explanatory what() string of exceptions is not available for MSVC if exceptions are disabled, see #2824.

    See documentation of JSON_TRY_USER, JSON_CATCH_USER and JSON_THROW_USER for more information.

    "},{"location":"home/exceptions/#extended-diagnostic-messages","title":"Extended diagnostic messages","text":"

    Exceptions in the library are thrown in the local context of the JSON value they are detected. This makes detailed diagnostics messages, and hence debugging, difficult.

    Example
    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    json j;\n    j[\"address\"][\"street\"] = \"Fake Street\";\n    j[\"address\"][\"housenumber\"] = \"12\";\n\n    try\n    {\n        int housenumber = j[\"address\"][\"housenumber\"];\n    }\n    catch (const json::exception& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    [json.exception.type_error.302] type must be number, but is string\n

    This exception can be hard to debug if storing the value \"12\" and accessing it is further apart.

    To create better diagnostics messages, each JSON value needs a pointer to its parent value such that a global context (i.e., a path from the root value to the value that lead to the exception) can be created. That global context is provided as JSON Pointer.

    As this global context comes at the price of storing one additional pointer per JSON value and runtime overhead to maintain the parent relation, extended diagnostics are disabled by default. They can, however, be enabled by defining the preprocessor symbol JSON_DIAGNOSTICS to 1 before including json.hpp.

    Example
    #include <iostream>\n\n# define JSON_DIAGNOSTICS 1\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    json j;\n    j[\"address\"][\"street\"] = \"Fake Street\";\n    j[\"address\"][\"housenumber\"] = \"12\";\n\n    try\n    {\n        int housenumber = j[\"address\"][\"housenumber\"];\n    }\n    catch (const json::exception& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    [json.exception.type_error.302] (/address/housenumber) type must be number, but is string\n

    Now the exception message contains a JSON Pointer /address/housenumber that indicates which value has the wrong type.

    See documentation of JSON_DIAGNOSTICS for more information.

    "},{"location":"home/exceptions/#parse-errors","title":"Parse errors","text":"

    This exception is thrown by the library when a parse error occurs. Parse errors can occur during the deserialization of JSON text, CBOR, MessagePack, as well as when using JSON Patch.

    Exceptions have ids 1xx.

    Byte index

    Member byte holds the byte index of the last read character in the input file.

    For an input with n bytes, 1 is the index of the first character and n+1 is the index of the terminating null byte or the end of file. This also holds true when reading a byte vector (CBOR or MessagePack).

    Example

    The following code shows how a parse_error exception can be caught.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    try\n    {\n        // parsing input with a syntax error\n        json::parse(\"[1,2,3,]\");\n    }\n    catch (const json::parse_error& e)\n    {\n        // output exception information\n        std::cout << \"message: \" << e.what() << '\\n'\n                  << \"exception id: \" << e.id << '\\n'\n                  << \"byte position of error: \" << e.byte << std::endl;\n    }\n}\n

    Output:

    message: [json.exception.parse_error.101] parse error at line 1, column 8: syntax error while parsing value - unexpected ']'; expected '[', '{', or a literal\nexception id: 101\nbyte position of error: 8\n
    "},{"location":"home/exceptions/#jsonexceptionparse_error101","title":"json.exception.parse_error.101","text":"

    This error indicates a syntax error while deserializing a JSON text. The error message describes that an unexpected token (character) was encountered, and the member byte indicates the error position.

    Example message

    Input ended prematurely:

    [json.exception.parse_error.101] parse error at 2: unexpected end of input; expected string literal\n

    No input:

    [json.exception.parse_error.101] parse error at line 1, column 1: attempting to parse an empty input; check that your input string or stream contains the expected JSON\n

    Control character was not escaped:

    [json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+0009 (HT) must be escaped to \\u0009 or \\\\; last read: '\"<U+0009>'\"\n

    String was not closed:

    [json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: missing closing quote; last read: '\"'\n

    Invalid number format:

    [json.exception.parse_error.101] parse error at line 1, column 3: syntax error while parsing value - invalid number; expected '+', '-', or digit after exponent; last read: '1E'\n

    \\u was not be followed by four hex digits:

    [json.exception.parse_error.101] parse error at line 1, column 6: syntax error while parsing value - invalid string: '\\u' must be followed by 4 hex digits; last read: '\"\\u01\"'\n

    Invalid UTF-8 surrogate pair:

    [json.exception.parse_error.101] parse error at line 1, column 13: syntax error while parsing value - invalid string: surrogate U+DC00..U+DFFF must follow U+D800..U+DBFF; last read: '\"\\uD7FF\\uDC00'\"\n

    Invalid UTF-8 byte:

    [json.exception.parse_error.101] parse error at line 3, column 24: syntax error while parsing value - invalid string: ill-formed UTF-8 byte; last read: '\"vous \\352t'\n

    Tip

    • Make sure the input is correctly read. Try to write the input to standard output to check if, for instance, the input file was successfully opened.
    • Paste the input to a JSON validator like http://jsonlint.com or a tool like jq.
    "},{"location":"home/exceptions/#jsonexceptionparse_error102","title":"json.exception.parse_error.102","text":"

    JSON uses the \\uxxxx format to describe Unicode characters. Code points above 0xFFFF are split into two \\uxxxx entries (\"surrogate pairs\"). This error indicates that the surrogate pair is incomplete or contains an invalid code point.

    Example message

    parse error at 14: missing or wrong low surrogate\n

    Note

    This exception is not used any more. Instead json.exception.parse_error.101 with a more detailed description is used.

    "},{"location":"home/exceptions/#jsonexceptionparse_error103","title":"json.exception.parse_error.103","text":"

    Unicode supports code points up to 0x10FFFF. Code points above 0x10FFFF are invalid.

    Example message

    parse error: code points above 0x10FFFF are invalid\n

    Note

    This exception is not used any more. Instead json.exception.parse_error.101 with a more detailed description is used.

    "},{"location":"home/exceptions/#jsonexceptionparse_error104","title":"json.exception.parse_error.104","text":"

    RFC 6902 requires a JSON Patch document to be a JSON document that represents an array of objects.

    Example message

    [json.exception.parse_error.104] parse error: JSON patch must be an array of objects\n
    "},{"location":"home/exceptions/#jsonexceptionparse_error105","title":"json.exception.parse_error.105","text":"

    An operation of a JSON Patch document must contain exactly one \"op\" member, whose value indicates the operation to perform. Its value must be one of \"add\", \"remove\", \"replace\", \"move\", \"copy\", or \"test\"; other values are errors.

    Example message

    [json.exception.parse_error.105] parse error: operation 'add' must have member 'value'\n
    [json.exception.parse_error.105] parse error: operation 'copy' must have string member 'from'\n
    [json.exception.parse_error.105] parse error: operation value 'foo' is invalid\n

    "},{"location":"home/exceptions/#jsonexceptionparse_error106","title":"json.exception.parse_error.106","text":"

    An array index in a JSON Pointer (RFC 6901) may be 0 or any number without a leading 0.

    Example message

    [json.exception.parse_error.106] parse error: array index '01' must not begin with '0'\n
    "},{"location":"home/exceptions/#jsonexceptionparse_error107","title":"json.exception.parse_error.107","text":"

    A JSON Pointer must be a Unicode string containing a sequence of zero or more reference tokens, each prefixed by a / character.

    Example message

    [json.exception.parse_error.107] parse error at byte 1: JSON pointer must be empty or begin with '/' - was: 'foo'\n
    "},{"location":"home/exceptions/#jsonexceptionparse_error108","title":"json.exception.parse_error.108","text":"

    In a JSON Pointer, only ~0 and ~1 are valid escape sequences.

    Example message

    [json.exception.parse_error.108] parse error: escape character '~' must be followed with '0' or '1'\n
    "},{"location":"home/exceptions/#jsonexceptionparse_error109","title":"json.exception.parse_error.109","text":"

    A JSON Pointer array index must be a number.

    Example messages

    [json.exception.parse_error.109] parse error: array index 'one' is not a number\n
    [json.exception.parse_error.109] parse error: array index '+1' is not a number\n

    "},{"location":"home/exceptions/#jsonexceptionparse_error110","title":"json.exception.parse_error.110","text":"

    When parsing CBOR or MessagePack, the byte vector ends before the complete value has been read.

    Example message

    [json.exception.parse_error.110] parse error at byte 5: syntax error while parsing CBOR string: unexpected end of input\n
    [json.exception.parse_error.110] parse error at byte 2: syntax error while parsing UBJSON value: expected end of input; last byte: 0x5A\n

    "},{"location":"home/exceptions/#jsonexceptionparse_error112","title":"json.exception.parse_error.112","text":"

    An unexpected byte was read in a binary format or length information is invalid (BSON).

    Example messages

    [json.exception.parse_error.112] parse error at byte 1: syntax error while parsing CBOR value: invalid byte: 0x1C\n
    [json.exception.parse_error.112] parse error at byte 1: syntax error while parsing MessagePack value: invalid byte: 0xC1\n
    [json.exception.parse_error.112] parse error at byte 4: syntax error while parsing BJData size: expected '#' after type information; last byte: 0x02\n
    [json.exception.parse_error.112] parse error at byte 4: syntax error while parsing UBJSON size: expected '#' after type information; last byte: 0x02\n
    [json.exception.parse_error.112] parse error at byte 10: syntax error while parsing BSON string: string length must be at least 1, is -2147483648\n
    [json.exception.parse_error.112] parse error at byte 15: syntax error while parsing BSON binary: byte array length cannot be negative, is -1\n

    "},{"location":"home/exceptions/#jsonexceptionparse_error113","title":"json.exception.parse_error.113","text":"

    While parsing a map key, a value that is not a string has been read.

    Example messages

    [json.exception.parse_error.113] parse error at byte 2: syntax error while parsing CBOR string: expected length specification (0x60-0x7B) or indefinite string type (0x7F); last byte: 0xFF\n
    [json.exception.parse_error.113] parse error at byte 2: syntax error while parsing MessagePack string: expected length specification (0xA0-0xBF, 0xD9-0xDB); last byte: 0xFF\n
    [json.exception.parse_error.113] parse error at byte 2: syntax error while parsing UBJSON char: byte after 'C' must be in range 0x00..0x7F; last byte: 0x82\n

    "},{"location":"home/exceptions/#jsonexceptionparse_error114","title":"json.exception.parse_error.114","text":"

    The parsing of the corresponding BSON record type is not implemented (yet).

    Example message

    [json.exception.parse_error.114] parse error at byte 5: Unsupported BSON record type 0xFF\n
    "},{"location":"home/exceptions/#jsonexceptionparse_error115","title":"json.exception.parse_error.115","text":"

    A UBJSON high-precision number could not be parsed.

    Example message

    [json.exception.parse_error.115] parse error at byte 5: syntax error while parsing UBJSON high-precision number: invalid number text: 1A\n
    "},{"location":"home/exceptions/#iterator-errors","title":"Iterator errors","text":"

    This exception is thrown if iterators passed to a library function do not match the expected semantics.

    Exceptions have ids 2xx.

    Example

    The following code shows how an invalid_iterator exception can be caught.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    try\n    {\n        // calling iterator::key() on non-object iterator\n        json j = \"string\";\n        json::iterator it = j.begin();\n        auto k = it.key();\n    }\n    catch (const json::invalid_iterator& e)\n    {\n        // output exception information\n        std::cout << \"message: \" << e.what() << '\\n'\n                  << \"exception id: \" << e.id << std::endl;\n    }\n}\n

    Output:

    message: [json.exception.invalid_iterator.207] cannot use key() for non-object iterators\nexception id: 207\n
    "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator201","title":"json.exception.invalid_iterator.201","text":"

    The iterators passed to constructor basic_json(InputIT first, InputIT last) are not compatible, meaning they do not belong to the same container. Therefore, the range (first, last) is invalid.

    Example message

    [json.exception.invalid_iterator.201] iterators are not compatible\n
    "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator202","title":"json.exception.invalid_iterator.202","text":"

    In the erase or insert function, the passed iterator pos does not belong to the JSON value for which the function was called. It hence does not define a valid position for the deletion/insertion.

    Example messages

    [json.exception.invalid_iterator.202] iterator does not fit current value\n
    [json.exception.invalid_iterator.202] iterators first and last must point to objects\n

    "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator203","title":"json.exception.invalid_iterator.203","text":"

    Either iterator passed to function erase(IteratorType first, IteratorType last) does not belong to the JSON value from which values shall be erased. It hence does not define a valid range to delete values from.

    Example message

    [json.exception.invalid_iterator.203] iterators do not fit current value\n
    "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator204","title":"json.exception.invalid_iterator.204","text":"

    When an iterator range for a primitive type (number, boolean, or string) is passed to a constructor or an erase function, this range has to be exactly (begin(), end()), because this is the only way the single stored value is expressed. All other ranges are invalid.

    Example message

    [json.exception.invalid_iterator.204] iterators out of range\n
    "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator205","title":"json.exception.invalid_iterator.205","text":"

    When an iterator for a primitive type (number, boolean, or string) is passed to an erase function, the iterator has to be the begin() iterator, because it is the only way to address the stored value. All other iterators are invalid.

    Example message

    [json.exception.invalid_iterator.205] iterator out of range\n
    "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator206","title":"json.exception.invalid_iterator.206","text":"

    The iterators passed to constructor basic_json(InputIT first, InputIT last) belong to a JSON null value and hence to not define a valid range.

    Example message

    [json.exception.invalid_iterator.206] cannot construct with iterators from null\n
    "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator207","title":"json.exception.invalid_iterator.207","text":"

    The key() member function can only be used on iterators belonging to a JSON object, because other types do not have a concept of a key.

    Example message

    [json.exception.invalid_iterator.207] cannot use key() for non-object iterators\n
    "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator208","title":"json.exception.invalid_iterator.208","text":"

    The operator[] to specify a concrete offset cannot be used on iterators belonging to a JSON object, because JSON objects are unordered.

    Example message

    [json.exception.invalid_iterator.208] cannot use operator[] for object iterators\n
    "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator209","title":"json.exception.invalid_iterator.209","text":"

    The offset operators (+, -, +=, -=) cannot be used on iterators belonging to a JSON object, because JSON objects are unordered.

    Example message

    [json.exception.invalid_iterator.209] cannot use offsets with object iterators\n
    "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator210","title":"json.exception.invalid_iterator.210","text":"

    The iterator range passed to the insert function are not compatible, meaning they do not belong to the same container. Therefore, the range (first, last) is invalid.

    Example message

    [json.exception.invalid_iterator.210] iterators do not fit\n
    "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator211","title":"json.exception.invalid_iterator.211","text":"

    The iterator range passed to the insert function must not be a subrange of the container to insert to.

    Example message

    [json.exception.invalid_iterator.211] passed iterators may not belong to container\n
    "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator212","title":"json.exception.invalid_iterator.212","text":"

    When two iterators are compared, they must belong to the same container.

    Example message

    [json.exception.invalid_iterator.212] cannot compare iterators of different containers\n
    "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator213","title":"json.exception.invalid_iterator.213","text":"

    The order of object iterators cannot be compared, because JSON objects are unordered.

    Example message

    [json.exception.invalid_iterator.213] cannot compare order of object iterators\n
    "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator214","title":"json.exception.invalid_iterator.214","text":"

    Cannot get value for iterator: Either the iterator belongs to a null value or it is an iterator to a primitive type (number, boolean, or string), but the iterator is different to begin().

    Example message

    [json.exception.invalid_iterator.214] cannot get value\n
    "},{"location":"home/exceptions/#type-errors","title":"Type errors","text":"

    This exception is thrown in case of a type error; that is, a library function is executed on a JSON value whose type does not match the expected semantics.

    Exceptions have ids 3xx.

    Example

    The following code shows how a type_error exception can be caught.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    try\n    {\n        // calling push_back() on a string value\n        json j = \"string\";\n        j.push_back(\"another string\");\n    }\n    catch (const json::type_error& e)\n    {\n        // output exception information\n        std::cout << \"message: \" << e.what() << '\\n'\n                  << \"exception id: \" << e.id << std::endl;\n    }\n}\n

    Output:

    message: [json.exception.type_error.308] cannot use push_back() with string\nexception id: 308\n
    "},{"location":"home/exceptions/#jsonexceptiontype_error301","title":"json.exception.type_error.301","text":"

    To create an object from an initializer list, the initializer list must consist only of a list of pairs whose first element is a string. When this constraint is violated, an array is created instead.

    Example message

    [json.exception.type_error.301] cannot create object from initializer list\n
    "},{"location":"home/exceptions/#jsonexceptiontype_error302","title":"json.exception.type_error.302","text":"

    During implicit or explicit value conversion, the JSON type must be compatible to the target type. For instance, a JSON string can only be converted into string types, but not into numbers or boolean types.

    Example messages

    [json.exception.type_error.302] type must be object, but is null\n
    [json.exception.type_error.302] type must be string, but is object\n

    "},{"location":"home/exceptions/#jsonexceptiontype_error303","title":"json.exception.type_error.303","text":"

    To retrieve a reference to a value stored in a basic_json object with get_ref, the type of the reference must match the value type. For instance, for a JSON array, the ReferenceType must be array_t &.

    Example messages

    [json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is object\n
    [json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is number\"\n

    "},{"location":"home/exceptions/#jsonexceptiontype_error304","title":"json.exception.type_error.304","text":"

    The at() member functions can only be executed for certain JSON types.

    Example messages

    [json.exception.type_error.304] cannot use at() with string\n
    [json.exception.type_error.304] cannot use at() with number\n

    "},{"location":"home/exceptions/#jsonexceptiontype_error305","title":"json.exception.type_error.305","text":"

    The operator[] member functions can only be executed for certain JSON types.

    Example messages

    [json.exception.type_error.305] cannot use operator[] with a string argument with array\n
    [json.exception.type_error.305] cannot use operator[] with a numeric argument with object\n

    "},{"location":"home/exceptions/#jsonexceptiontype_error306","title":"json.exception.type_error.306","text":"

    The value() member functions can only be executed for certain JSON types.

    Example message

    [json.exception.type_error.306] cannot use value() with number\n
    "},{"location":"home/exceptions/#jsonexceptiontype_error307","title":"json.exception.type_error.307","text":"

    The erase() member functions can only be executed for certain JSON types.

    Example message

    [json.exception.type_error.307] cannot use erase() with string\n
    "},{"location":"home/exceptions/#jsonexceptiontype_error308","title":"json.exception.type_error.308","text":"

    The push_back() and operator+= member functions can only be executed for certain JSON types.

    Example message

    [json.exception.type_error.308] cannot use push_back() with string\n
    "},{"location":"home/exceptions/#jsonexceptiontype_error309","title":"json.exception.type_error.309","text":"

    The insert() member functions can only be executed for certain JSON types.

    Example messages

    [json.exception.type_error.309] cannot use insert() with array\n
    [json.exception.type_error.309] cannot use insert() with number\n

    "},{"location":"home/exceptions/#jsonexceptiontype_error310","title":"json.exception.type_error.310","text":"

    The swap() member functions can only be executed for certain JSON types.

    Example message

    [json.exception.type_error.310] cannot use swap() with number\n
    "},{"location":"home/exceptions/#jsonexceptiontype_error311","title":"json.exception.type_error.311","text":"

    The emplace() and emplace_back() member functions can only be executed for certain JSON types.

    Example messages

    [json.exception.type_error.311] cannot use emplace() with number\n
    [json.exception.type_error.311] cannot use emplace_back() with number\n

    "},{"location":"home/exceptions/#jsonexceptiontype_error312","title":"json.exception.type_error.312","text":"

    The update() member functions can only be executed for certain JSON types.

    Example message

    [json.exception.type_error.312] cannot use update() with array\n
    "},{"location":"home/exceptions/#jsonexceptiontype_error313","title":"json.exception.type_error.313","text":"

    The unflatten function converts an object whose keys are JSON Pointers back into an arbitrary nested JSON value. The JSON Pointers must not overlap, because then the resulting value would not be well-defined.

    Example message

    [json.exception.type_error.313] invalid value to unflatten\n
    "},{"location":"home/exceptions/#jsonexceptiontype_error314","title":"json.exception.type_error.314","text":"

    The unflatten function only works for an object whose keys are JSON Pointers.

    Example message

    Calling unflatten() on an array [1,2,3]:

    [json.exception.type_error.314] only objects can be unflattened\n
    "},{"location":"home/exceptions/#jsonexceptiontype_error315","title":"json.exception.type_error.315","text":"

    The unflatten() function only works for an object whose keys are JSON Pointers and whose values are primitive.

    Example message

    Calling unflatten() on an object {\"/1\", [1,2,3]}:

    [json.exception.type_error.315] values in object must be primitive\n
    "},{"location":"home/exceptions/#jsonexceptiontype_error316","title":"json.exception.type_error.316","text":"

    The dump() function only works with UTF-8 encoded strings; that is, if you assign a std::string to a JSON value, make sure it is UTF-8 encoded.

    Example message

    Calling dump() on a JSON value containing an ISO 8859-1 encoded string:

    [json.exception.type_error.316] invalid UTF-8 byte at index 15: 0x6F\n

    Tip

    • Store the source file with UTF-8 encoding.
    • Pass an error handler as last parameter to the dump() function to avoid this exception:
      • json::error_handler_t::replace will replace invalid bytes sequences with U+FFFD
      • json::error_handler_t::ignore will silently ignore invalid byte sequences
    "},{"location":"home/exceptions/#jsonexceptiontype_error317","title":"json.exception.type_error.317","text":"

    The dynamic type of the object cannot be represented in the requested serialization format (e.g. a raw true or null JSON object cannot be serialized to BSON)

    Example messages

    Serializing null to BSON:

    [json.exception.type_error.317] to serialize to BSON, top-level type must be object, but is null\n
    Serializing [1,2,3] to BSON:
    [json.exception.type_error.317] to serialize to BSON, top-level type must be object, but is array\n

    Tip

    Encapsulate the JSON value in an object. That is, instead of serializing true, serialize {\"value\": true}

    "},{"location":"home/exceptions/#out-of-range","title":"Out of range","text":"

    This exception is thrown in case a library function is called on an input parameter that exceeds the expected range, for instance in case of array indices or nonexisting object keys.

    Exceptions have ids 4xx.

    Example

    The following code shows how an out_of_range exception can be caught.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    try\n    {\n        // calling at() for an invalid index\n        json j = {1, 2, 3, 4};\n        j.at(4) = 10;\n    }\n    catch (const json::out_of_range& e)\n    {\n        // output exception information\n        std::cout << \"message: \" << e.what() << '\\n'\n                  << \"exception id: \" << e.id << std::endl;\n    }\n}\n

    Output:

    message: [json.exception.out_of_range.401] array index 4 is out of range\nexception id: 401\n
    "},{"location":"home/exceptions/#jsonexceptionout_of_range401","title":"json.exception.out_of_range.401","text":"

    The provided array index i is larger than size-1.

    Example message

    array index 3 is out of range\n
    "},{"location":"home/exceptions/#jsonexceptionout_of_range402","title":"json.exception.out_of_range.402","text":"

    The special array index - in a JSON Pointer never describes a valid element of the array, but the index past the end. That is, it can only be used to add elements at this position, but not to read it.

    Example message

    array index '-' (3) is out of range\n
    "},{"location":"home/exceptions/#jsonexceptionout_of_range403","title":"json.exception.out_of_range.403","text":"

    The provided key was not found in the JSON object.

    Example message

    key 'foo' not found\n
    "},{"location":"home/exceptions/#jsonexceptionout_of_range404","title":"json.exception.out_of_range.404","text":"

    A reference token in a JSON Pointer could not be resolved.

    Example message

    unresolved reference token 'foo'\n
    "},{"location":"home/exceptions/#jsonexceptionout_of_range405","title":"json.exception.out_of_range.405","text":"

    The JSON Patch operations 'remove' and 'add' can not be applied to the root element of the JSON value.

    Example message

    JSON pointer has no parent\n
    "},{"location":"home/exceptions/#jsonexceptionout_of_range406","title":"json.exception.out_of_range.406","text":"

    A parsed number could not be stored as without changing it to NaN or INF.

    Example message

    number overflow parsing '10E1000'\n
    "},{"location":"home/exceptions/#jsonexceptionout_of_range407","title":"json.exception.out_of_range.407","text":"

    This exception previously indicated that the UBJSON and BSON binary formats did not support integer numbers greater than 9223372036854775807 due to limitations in the implemented mapping. However, these limitations have since been resolved, and this exception no longer occurs.

    Exception cannot occur any more

    • Since version 3.9.0, integer numbers beyond int64 are serialized as high-precision UBJSON numbers.
    • Since version 3.12.0, integer numbers beyond int64 are serialized as uint64 BSON numbers.
    "},{"location":"home/exceptions/#jsonexceptionout_of_range408","title":"json.exception.out_of_range.408","text":"

    The size (following #) of an UBJSON array or object exceeds the maximal capacity.

    Example message

    excessive array size: 8658170730974374167\n
    "},{"location":"home/exceptions/#jsonexceptionout_of_range409","title":"json.exception.out_of_range.409","text":"

    Key identifiers to be serialized to BSON cannot contain code point U+0000, since the key is stored as zero-terminated c-string.

    Example message

    BSON key cannot contain code point U+0000 (at byte 2)\n
    "},{"location":"home/exceptions/#further-exceptions","title":"Further exceptions","text":"

    This exception is thrown in case of errors that cannot be classified with the other exception types.

    Exceptions have ids 5xx.

    Example

    The following code shows how an other_error exception can be caught.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    try\n    {\n        // executing a failing JSON Patch operation\n        json value = R\"({\n            \"best_biscuit\": {\n                \"name\": \"Oreo\"\n            }\n        })\"_json;\n        json patch = R\"([{\n            \"op\": \"test\",\n            \"path\": \"/best_biscuit/name\",\n            \"value\": \"Choco Leibniz\"\n        }])\"_json;\n        value.patch(patch);\n    }\n    catch (const json::other_error& e)\n    {\n        // output exception information\n        std::cout << \"message: \" << e.what() << '\\n'\n                  << \"exception id: \" << e.id << std::endl;\n    }\n}\n

    Output:

    message: [json.exception.other_error.501] unsuccessful: {\"op\":\"test\",\"path\":\"/best_biscuit/name\",\"value\":\"Choco Leibniz\"}\nexception id: 501\n
    "},{"location":"home/exceptions/#jsonexceptionother_error501","title":"json.exception.other_error.501","text":"

    A JSON Patch operation 'test' failed. The unsuccessful operation is also printed.

    Example message

    Executing {\"op\":\"test\", \"path\":\"/baz\", \"value\":\"bar\"} on {\"baz\": \"qux\"}:

    [json.exception.other_error.501] unsuccessful: {\"op\":\"test\",\"path\":\"/baz\",\"value\":\"bar\"}\n
    "},{"location":"home/faq/","title":"Frequently Asked Questions (FAQ)","text":""},{"location":"home/faq/#known-bugs","title":"Known bugs","text":""},{"location":"home/faq/#brace-initialization-yields-arrays","title":"Brace initialization yields arrays","text":"

    Question

    Why does

    json j{true};\n

    and

    json j(true);\n

    yield different results ([true] vs. true)?

    This is a known issue, and -- even worse -- the behavior differs between GCC and Clang. The \"culprit\" for this is the library's constructor overloads for initializer lists to allow syntax like

    json array = {1, 2, 3, 4};\n

    for arrays and

    json object = {{\"one\", 1}, {\"two\", 2}}; \n

    for objects.

    Tip

    To avoid any confusion and ensure portable code, do not use brace initialization with the types basic_json, json, or ordered_json unless you want to create an object or array as shown in the examples above.

    "},{"location":"home/faq/#limitations","title":"Limitations","text":""},{"location":"home/faq/#relaxed-parsing","title":"Relaxed parsing","text":"

    Question

    Can you add an option to ignore trailing commas?

    This library does not support any feature which would jeopardize interoperability.

    "},{"location":"home/faq/#parse-errors-reading-non-ascii-characters","title":"Parse errors reading non-ASCII characters","text":"

    Questions

    • Why is the parser complaining about a Chinese character?
    • Does the library support Unicode?
    • I get an exception [json.exception.parse_error.101] parse error at line 1, column 53: syntax error while parsing value - invalid string: ill-formed UTF-8 byte; last read: '\"Test\u00e9$')\"

    The library supports Unicode input as follows:

    • Only UTF-8 encoded input is supported which is the default encoding for JSON according to RFC 8259.
    • std::u16string and std::u32string can be parsed, assuming UTF-16 and UTF-32 encoding, respectively. These encodings are not supported when reading from files or other input containers.
    • Other encodings such as Latin-1 or ISO 8859-1 are not supported and will yield parse or serialization errors.
    • Unicode noncharacters will not be replaced by the library.
    • Invalid surrogates (e.g., incomplete pairs such as \\uDEAD) will yield parse errors.
    • The strings stored in the library are UTF-8 encoded. When using the default string type (std::string), note that its length/size functions return the number of stored bytes rather than the number of characters or glyphs.
    • When you store strings with different encodings in the library, calling dump() may throw an exception unless json::error_handler_t::replace or json::error_handler_t::ignore are used as error handlers.

    In most cases, the parser is right to complain, because the input is not UTF-8 encoded. This is especially true for Microsoft Windows where Latin-1 or ISO 8859-1 is often the standard encoding.

    "},{"location":"home/faq/#wide-string-handling","title":"Wide string handling","text":"

    Question

    Why are wide strings (e.g., std::wstring) dumped as arrays of numbers?

    As described above, the library assumes UTF-8 as encoding. To store a wide string, you need to change the encoding.

    Example

    #include <codecvt> // codecvt_utf8\n#include <locale>  // wstring_convert\n\n// encoding function\nstd::string to_utf8(std::wstring& wide_string)\n{\n    static std::wstring_convert<std::codecvt_utf8<wchar_t>> utf8_conv;\n    return utf8_conv.to_bytes(wide_string);\n}\n\njson j;\nstd::wstring ws = L\"\u8ecaB1234 \u3053\u3093\u306b\u3061\u306f\";\n\nj[\"original\"] = ws;\nj[\"encoded\"] = to_utf8(ws);\n\nstd::cout << j << std::endl;\n

    The result is:

    {\n  \"encoded\": \"\u8ecaB1234 \u3053\u3093\u306b\u3061\u306f\",\n  \"original\": [36554, 66, 49, 50, 51, 52, 32, 12371, 12435, 12395, 12385, 12399]\n}\n
    "},{"location":"home/faq/#exceptions","title":"Exceptions","text":""},{"location":"home/faq/#parsing-without-exceptions","title":"Parsing without exceptions","text":"

    Question

    Is it possible to indicate a parse error without throwing an exception?

    Yes, see Parsing and exceptions.

    "},{"location":"home/faq/#key-name-in-exceptions","title":"Key name in exceptions","text":"

    Question

    Can I get the key of the object item that caused an exception?

    Yes, you can. Please define the symbol JSON_DIAGNOSTICS to get extended diagnostics messages.

    "},{"location":"home/faq/#serialization-issues","title":"Serialization issues","text":""},{"location":"home/faq/#number-precision","title":"Number precision","text":"

    Question

    • It seems that precision is lost when serializing a double.
    • Can I change the precision for floating-point serialization?

    The library uses std::numeric_limits<number_float_t>::digits10 (15 for IEEE doubles) digits for serialization. This value is sufficient to guarantee roundtripping. If one uses more than this number of digits of precision, then string -> value -> string is not guaranteed to round-trip.

    cppreference.com

    The value of std::numeric_limits<T>::digits10 is the number of base-10 digits that can be represented by the type T without change, that is, any number with this many significant decimal digits can be converted to a value of type T and back to decimal form, without change due to rounding or overflow.

    Tip

    The website https://float.exposed gives a good insight into the internal storage of floating-point numbers.

    See this section on the library's number handling for more information.

    "},{"location":"home/faq/#compilation-issues","title":"Compilation issues","text":""},{"location":"home/faq/#android-sdk","title":"Android SDK","text":"

    Question

    Why does the code not compile with Android SDK?

    Android defaults to using very old compilers and C++ libraries. To fix this, add the following to your Application.mk. This will switch to the LLVM C++ library, the Clang compiler, and enable C++11 and other features disabled by default.

    APP_STL := c++_shared\nNDK_TOOLCHAIN_VERSION := clang3.6\nAPP_CPPFLAGS += -frtti -fexceptions\n

    The code compiles successfully with Android NDK, Revision 9 - 11 (and possibly later) and CrystaX's Android NDK version 10.

    "},{"location":"home/faq/#missing-stl-function","title":"Missing STL function","text":"

    Questions

    • Why do I get a compilation error 'to_string' is not a member of 'std' (or similarly, for strtod or strtof)?
    • Why does the code not compile with MinGW or Android SDK?

    This is not an issue with the code, but rather with the compiler itself. On Android, see above to build with a newer environment. For MinGW, please refer to this site and this discussion for information on how to fix this bug. For Android NDK using APP_STL := gnustl_static, please refer to this discussion.

    "},{"location":"home/license/","title":"License","text":"

    The class is licensed under the MIT License:

    Copyright \u00a9 2013-2025 Niels Lohmann

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \u201cSoftware\u201d), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED \u201cAS IS\u201d, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    The class contains the UTF-8 Decoder from Bjoern Hoehrmann which is licensed under the MIT License (see above). Copyright \u00a9 2008-2009 Bj\u00f6rn Hoehrmann bjoern@hoehrmann.de

    The class contains a slightly modified version of the Grisu2 algorithm from Florian Loitsch which is licensed under the MIT License (see above). Copyright \u00a9 2009 Florian Loitsch

    The class contains a copy of Hedley from Evan Nemerson which is licensed as CC0-1.0.

    "},{"location":"home/releases/","title":"Releases","text":""},{"location":"home/releases/#v373","title":"v3.7.3","text":"

    Files

    • include.zip (274 KB)
    • include.zip.asc (1 KB)
    • json.hpp (791 KB)
    • json.hpp.asc (1 KB)

    Release date: 2019-11-17 SHA-256: 3b5d2b8f8282b80557091514d8ab97e27f9574336c804ee666fda673a9b59926 (json.hpp), 87b5884741427220d3a33df1363ae0e8b898099fbc59f1c451113f6732891014 (include.zip)

    "},{"location":"home/releases/#summary","title":"Summary","text":"

    This release fixes a bug introduced in release 3.7.2 which could yield quadratic complexity in destructor calls. All changes are backward-compatible.

    "},{"location":"home/releases/#bug-fixes","title":"Bug Fixes","text":"
    • Removed reserve() calls from the destructor which could lead to quadratic complexity. #1837 #1838
    "},{"location":"home/releases/#deprecated-functions","title":"Deprecated functions","text":"

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    • Function iterator_wrapper are deprecated. Please use the member function items() instead.
    • Functions friend std::istream& operator<<(basic_json&, std::istream&) and friend std::ostream& operator>>(const basic_json&, std::ostream&) are deprecated. Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.
    "},{"location":"home/releases/#v372","title":"v3.7.2","text":"

    Files

    • include.zip (274 KB)
    • include.zip.asc (1 KB)
    • json.hpp (791 KB)
    • json.hpp.asc (1 KB)

    Release date: 2019-11-10 SHA-256: 0a65fcbbe1b334d3f45c9498e5ee28c3f3b2428aea98557da4a3ff12f0f14ad6 (json.hpp), 67f69c9a93b7fa0612dc1b6273119d2c560317333581845f358aaa68bff8f087 (include.zip)

    "},{"location":"home/releases/#summary_1","title":"Summary","text":"

    Project bad_json_parsers tested how JSON parser libraries react on deeply nested inputs. It turns out that this library segfaulted at a certain nesting depth. This bug was fixed with this release. Now the parsing is only bounded by the available memory. All changes are backward-compatible.

    "},{"location":"home/releases/#bug-fixes_1","title":"Bug Fixes","text":"
    • Fixed a bug that lead to stack overflow for deeply nested JSON values (objects, array) by changing the implementation of the destructor from a recursive to an iterative approach. #832, #1419, #1835
    "},{"location":"home/releases/#further-changes","title":"Further Changes","text":"
    • Added WhiteStone Bolt. #1830
    "},{"location":"home/releases/#deprecated-functions_1","title":"Deprecated functions","text":"

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    • Function iterator_wrapper are deprecated. Please use the member function items() instead.
    • Functions friend std::istream& operator<<(basic_json&, std::istream&) and friend std::ostream& operator>>(const basic_json&, std::ostream&) are deprecated. Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.
    "},{"location":"home/releases/#v371","title":"v3.7.1","text":"

    Files

    • include.zip (273 KB)
    • include.zip.asc (1 KB)
    • json.hpp (789 KB)
    • json.hpp.asc (1 KB)

    Release date: 2019-11-06 SHA-256: b5ba7228f3c22a882d379e93d08eab4349458ee16fbf45291347994eac7dc7ce (json.hpp), 77b9f54b34e7989e6f402afb516f7ff2830df551c3a36973085e2c7a6b1045fe (include.zip)

    "},{"location":"home/releases/#summary_2","title":"Summary","text":"

    This release fixes several small bugs in the library. All changes are backward-compatible.

    "},{"location":"home/releases/#bug-fixes_2","title":"Bug Fixes","text":"
    • Fixed a segmentation fault when serializing std::int64_t minimum value. #1708 #1722
    • Fixed the contains() function for JSON Pointers. #1727 #1741
    • Fixed too lax SFINAE guard for conversion from std::pair and std::tuple to json. #1805 #1806 #1825 #1826
    • Fixed some regressions detected by UBSAN. Updated CI to use Clang-Tidy 7.1.0. #1716 #1728
    • Fixed integer truncation in iteration_proxy. #1797
    • Updated Hedley to v11 to fix a E2512 error in MSVC. #1799
    • Fixed a compile error in enum deserialization of non non-default-constructible types. #1647 #1821
    • Fixed the conversion from json to std::valarray.
    "},{"location":"home/releases/#improvements","title":"Improvements","text":"
    • The items() function can now be used with a custom string type. #1765
    • Made json_pointer::back const. #1764 #1769
    • Meson is part of the release archive. #1672 #1694
    • Improved documentation on the Meson and Spack package manager. #1694 #1720
    "},{"location":"home/releases/#further-changes_1","title":"Further Changes","text":"
    • Added GitHub Workflow with ubuntu-latest/GCC 7.4.0 as CI step.
    • Added GCC 9 to Travis CI to compile with C++20 support. #1724
    • Added MSVC 2019 to the AppVeyor CI. #1780
    • Added badge to fuzzing status.
    • Fixed some cppcheck warnings. #1760
    • Fixed several typos in the documentation. #1720 #1767 #1803
    • Added documentation on the JSON_THROW_USER, JSON_TRY_USER, and JSON_CATCH_USER macros to control user-defined exception handling.
    • Used GitHub's CODEOWNERS and SECURITY feature.
    • Removed GLOB from CMake files. #1779
    • Updated to Doctest 2.3.5.
    "},{"location":"home/releases/#deprecated-functions_2","title":"Deprecated functions","text":"

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    • Function iterator_wrapper are deprecated. Please use the member function items() instead.
    • Functions friend std::istream& operator<<(basic_json&, std::istream&) and friend std::ostream& operator>>(const basic_json&, std::ostream&) are deprecated. Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.
    "},{"location":"home/releases/#v370","title":"v3.7.0","text":"

    Files

    • include.zip (143 KB)
    • include.zip.asc (1 KB)
    • json.hpp (782 KB)
    • json.hpp.asc (1 KB)

    Release date: 2019-07-28 SHA-256: a503214947952b69f0062f572cb74c17582a495767446347ce2e452963fc2ca4 (json.hpp), 541c34438fd54182e9cdc68dd20c898d766713ad6d901fb2c6e28ff1f1e7c10d (include.zip)

    "},{"location":"home/releases/#summary_3","title":"Summary","text":"

    This release introduces a few convenience functions and performs a lot of house keeping (bug fixes and small improvements). All changes are backward-compatible.

    "},{"location":"home/releases/#new-features","title":"New Features","text":"
    • Add overload of the contains function to check if a JSON pointer is valid without throwing exceptions, just like its counterpart for object keys. #1600
    • Add a function to_string to allow for generic conversion to strings. #916 #1585
    • Add return value for the emplace_back function, returning a reference to the added element just like C++17 is introducing this for std::vector. #1609
    • Add info how to use the library with the pacman package manager on MSYS2. #1670
    "},{"location":"home/releases/#bug-fixes_3","title":"Bug Fixes","text":"
    • Fix an issue where typedefs with certain names yielded a compilation error. #1642 #1643
    • Fix a conversion to std::string_view in the unit tests. #1634 #1639
    • Fix MSVC Debug build. #1536 #1570 #1608
    • Fix get_to method to clear existing content before writing. #1511 #1555
    • Fix a -Wc++17-extensions warning. nodiscard attributes are now only used with Clang when -std=c++17 is used. #1535 #1551
    "},{"location":"home/releases/#improvements_1","title":"Improvements","text":"
    • Switch from Catch to doctest for the unit tests which speeds up compilation and runtime of the 112,112,308 tests.
    • Add an explicit section to the README about the frequently addressed topics character encoding, comments in JSON, and the order of object keys.
    "},{"location":"home/releases/#further-changes_2","title":"Further Changes","text":"
    • Use GNUInstallDirs to set library install directories. #1673
    • Fix links in the README. #1620 #1621 #1622 #1623 #1625
    • Mention json type on the documentation start page. #1616
    • Complete documentation of value() function with respect to type_error.302 exception. #1601
    • Fix links in the documentation. #1598
    • Add regression tests for MSVC. #1543 #1570
    • Use CircleCI for continuous integration.
    • Use Doozer for continuous integration on Linux (CentOS, Raspbian, Fedora)
    • Add tests to check each CMake flag (JSON_BuildTests, JSON_Install, JSON_MultipleHeaders, JSON_Sanitizer, JSON_Valgrind, JSON_NoExceptions, JSON_Coverage).
    • Use Hedley to avoid re-inventing several compiler-agnostic feature macros like JSON_DEPRECATED, JSON_NODISCARD, JSON_LIKELY, JSON_UNLIKELY, JSON_HAS_CPP_14, or JSON_HAS_CPP_17. Functions taking or returning pointers are annotated accordingly when a pointer will not be null.
    • Build and run tests on AppVeyor in DEBUG and RELEASE mode.
    "},{"location":"home/releases/#deprecated-functions_3","title":"Deprecated functions","text":"

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    • Function iterator_wrapper are deprecated. Please use the member function items() instead.
    • Functions friend std::istream& operator<<(basic_json&, std::istream&) and friend std::ostream& operator>>(const basic_json&, std::ostream&) are deprecated. Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.
    "},{"location":"home/releases/#v361","title":"v3.6.1","text":"

    Files

    • include.zip (136 KB)
    • include.zip.asc (1 KB)
    • json.hpp (711 KB)
    • json.hpp.asc (1 KB)

    Release date: 2019-03-20 SHA-256: d2eeb25d2e95bffeb08ebb7704cdffd2e8fca7113eba9a0b38d60a5c391ea09a (json.hpp), 69cc88207ce91347ea530b227ff0776db82dcb8de6704e1a3d74f4841bc651cf (include.zip)

    "},{"location":"home/releases/#summary_4","title":"Summary","text":"

    This release fixes a regression and a bug introduced by the earlier 3.6.0 release. All changes are backward-compatible.

    "},{"location":"home/releases/#bug-fixes_4","title":"Bug Fixes","text":"
    • Fixed regression of #590 which could lead to compilation errors with GCC 7 and GCC 8. #1530
    • Fixed a compilation error when <Windows.h> was included. #1531
    "},{"location":"home/releases/#further-changes_3","title":"Further Changes","text":"
    • Fixed a warning for missing field initializers. #1527
    "},{"location":"home/releases/#deprecated-functions_4","title":"Deprecated functions","text":"

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    • Function iterator_wrapper are deprecated. Please use the member function items() instead.
    • Functions friend std::istream& operator<<(basic_json&, std::istream&) and friend std::ostream& operator>>(const basic_json&, std::ostream&) are deprecated. Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.
    "},{"location":"home/releases/#v360","title":"v3.6.0","text":"

    Files

    • include.zip (136 KB)
    • include.zip.asc (1 KB)
    • json.hpp (711 KB)
    • json.hpp.asc (1 KB)

    Release date: 2019-03-20 SHA-256: ce9839370f28094c71107c405affb3b08c4a098154988014cbb0800b1c44a831 (json.hpp), 237c5e66e7f8186a02804ce9dbd5f69ce89fe7424ef84adf6142e973bd9532f4 (include.zip)

    \u2139\ufe0f This release introduced a regression. Please update to version 3.6.1!

    "},{"location":"home/releases/#summary_5","title":"Summary","text":"

    This release adds some convenience functions for JSON Pointers, introduces a contains function to check if a key is present in an object, and improves the performance of integer serialization. Furthermore, a lot of small bug fixes and improvements have been made. All changes are backward-compatible.

    "},{"location":"home/releases/#new-features_1","title":"New Features","text":"
    • Overworked the public interface for JSON Pointers. The creation of JSON Pointers is simplified with operator/ and operator/=. JSON Pointers can be inspected with empty, back, and parent_pointer, and manipulated with push_back and pop_back. #1434
    • Added a boolean method contains to check whether an element exists in a JSON object with a given key. Returns false when called on non-object types. #1471 #1474
    "},{"location":"home/releases/#bug-fixes_5","title":"Bug Fixes","text":"
    • Fixed a compilation issues with libc 2.12. #1483 #1514
    • Fixed endian conversion on PPC64. #1489
    • Fixed library to compile with GCC 9. #1472 #1492
    • Fixed a compilation issue with GCC 7 on CentOS. #1496
    • Fixed an integer overflow. #1447
    • Fixed buffer flushing in serializer. #1445 #1446
    "},{"location":"home/releases/#improvements_2","title":"Improvements","text":"
    • The performance of dumping integers has been greatly improved. #1411
    • Added CMake parameter JSON_Install to control whether the library should be installed (default: on). #1330
    • Fixed a lot of compiler and linter warnings. #1400 #1435 #1502
    • Reduced required CMake version from 3.8 to 3.1. #1409 #1428 #1441 #1498
    • Added nodiscard attribute to meta(), array(), object(), from_cbor, from_msgpack, from_ubjson, from_bson, and parse. #1433
    "},{"location":"home/releases/#further-changes_4","title":"Further Changes","text":"
    • Added missing headers. #1500
    • Fixed typos and broken links in README. #1417 #1423 #1425 #1451 #1455 #1491
    • Fixed documentation of parse function. #1473
    • Suppressed warning that cannot be fixed inside the library. #1401 #1468
    • Imroved package manager suppert:
      • Updated Buckaroo instructions. #1495
      • Improved Meson support. #1463
      • Added Conda package manager documentation. #1430
      • Added NuGet package manager documentation. #1132
    • Continuous Integration
      • Removed unstable or deprecated Travis builders (Xcode 6.4 - 8.2) and added Xcode 10.1 builder.
      • Added Clang 7 to Travis CI.
      • Fixed AppVeyor x64 builds. #1374 #1414
    • Updated thirdparty libraries:
      • Catch 1.12.0 -> 1.12.2
      • Google Benchmark 1.3.0 -> 1.4.1
      • Doxygen 1.8.15 -> 1.8.16
    "},{"location":"home/releases/#deprecated-functions_5","title":"Deprecated functions","text":"

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    • Function iterator_wrapper are deprecated. Please use the member function items() instead.
    • Functions friend std::istream& operator<<(basic_json&, std::istream&) and friend std::ostream& operator>>(const basic_json&, std::ostream&) are deprecated. Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.
    "},{"location":"home/releases/#v350","title":"v3.5.0","text":"

    Files

    • include.zip (133 KB)
    • include.zip.asc (1 KB)
    • json.hpp (693 KB)
    • json.hpp.asc (1 KB)

    Release date: 2018-12-22 SHA-256: 8a6dbf3bf01156f438d0ca7e78c2971bca50eec4ca6f0cf59adf3464c43bb9d5 (json.hpp), 3564da9c5b0cf2e032f97c69baedf10ddbc98030c337d0327a215ea72259ea21 (include.zip)

    "},{"location":"home/releases/#summary_6","title":"Summary","text":"

    This release introduces the support for structured bindings and reading from FILE*. Besides, a few bugs have been fixed. All changes are backward-compatible.

    "},{"location":"home/releases/#new-features_2","title":"New Features","text":"
    • Structured bindings are now supported for JSON objects and arrays via the items() member function, so finally this code is possible:

      for (auto& [key, val] : j.items()) {\n    std::cout << key << ':' << val << '\\n';\n}\n
      #1388 #1391

    • Added support for reading from FILE* to support situations in which streams are nit available or would require too much RAM. #1370 #1392

    "},{"location":"home/releases/#bug-fixes_6","title":"Bug Fixes","text":"
    • The eofbit was not set for input streams when the end of a stream was reached while parsing. #1340 #1343
    • Fixed a bug in the SAX parser for BSON arrays.
    "},{"location":"home/releases/#improvements_3","title":"Improvements","text":"
    • Added support for Clang 5.0.1 (PS4 version). #1341 #1342
    "},{"location":"home/releases/#further-changes_5","title":"Further Changes","text":"
    • Added a warning for implicit conversions to the documentation: It is not recommended to use implicit conversions when reading from a JSON value. Details about this recommendation can be found here. #1363
    • Fixed typos in the documentation. #1329 #1380 #1382
    • Fixed a C4800 warning. #1364
    • Fixed a -Wshadow warning #1346
    • Wrapped std::snprintf calls to avoid error in MSVC. #1337
    • Added code to allow installation via Meson. #1345
    "},{"location":"home/releases/#deprecated-functions_6","title":"Deprecated functions","text":"

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    • Function iterator_wrapper are deprecated. Please use the member function items() instead.
    • Functions friend std::istream& operator<<(basic_json&, std::istream&) and friend std::ostream& operator>>(const basic_json&, std::ostream&) are deprecated. Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.
    "},{"location":"home/releases/#v340","title":"v3.4.0","text":"

    Files

    • include.zip (132 KB)
    • include.zip.asc (1 KB)
    • json.hpp (689 KB)
    • json.hpp.asc (1 KB)

    Release date: 2018-10-30 SHA-256: 63da6d1f22b2a7bb9e4ff7d6b255cf691a161ff49532dcc45d398a53e295835f (json.hpp), bfec46fc0cee01c509cf064d2254517e7fa80d1e7647fea37cf81d97c5682bdc (include.zip)

    "},{"location":"home/releases/#summary_7","title":"Summary","text":"

    This release introduces three new features:

    • BSON (Binary JSON) is next to CBOR, MessagePack, and UBJSON the fourth binary (de)serialization format supported by the library.
    • Adjustable error handlers for invalid Unicode allows to specify the behavior when invalid byte sequences are serialized.
    • Simplified enum/JSON mapping with a macro in case the default mapping to integers is not desired.

    Furthermore, some effort has been invested in improving the parse error messages. Besides, a few bugs have been fixed. All changes are backward-compatible.

    "},{"location":"home/releases/#new-features_3","title":"New Features","text":"
    • The library can read and write a subset of BSON (Binary JSON). All data types known from JSON are supported, whereas other types more tied to MongoDB such as timestamps, object ids, or binary data are currently not implemented. See the README for examples. #1244 #1320
    • The behavior when the library encounters an invalid Unicode sequence during serialization can now be controlled by defining one of three Unicode error handlers: (1) throw an exception (default behavior), (2) replace invalid sequences by the Unicode replacement character (U+FFFD), or (3) ignore/filter invalid sequences. See the documentation of the dump function for examples. #1198 #1314
    • To easily specify a user-defined enum/JSON mapping, a macro NLOHMANN_JSON_SERIALIZE_ENUM has been introduced. See the README section for more information. #1208 #1323
    "},{"location":"home/releases/#bug-fixes_7","title":"Bug Fixes","text":"
    • fixed truncation #1286 #1315
    • fixed an issue with std::pair #1299 #1301
    • fixed an issue with std::variant #1292 #1294
    • fixed a bug in the JSON Pointer parser
    "},{"location":"home/releases/#improvements_4","title":"Improvements","text":"
    • The diagnosis messages for parse errors have been improved: error messages now indicated line/column positions where possible (in addition to a byte count) and also the context in which the error occurred (e.g., \"while parsing a JSON string\"). Example: error parse error at 2: syntax error - invalid string: control character must be escaped; last read: '<U+0009>' is now reported as parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+0009 (HT) must be escaped to \\u0009 or \\t; last read: '<U+0009>'. #1280 #1288 #1303
    "},{"location":"home/releases/#further-changes_6","title":"Further Changes","text":"
    • improved Meson documentation #1305
    • fixed some more linter warnings #1280
    • fixed Clang detection for third-party Google Benchmark library #1277
    "},{"location":"home/releases/#deprecated-functions_7","title":"Deprecated functions","text":"

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    • Function iterator_wrapper are deprecated. Please use the member function items() instead.
    • Functions friend std::istream& operator<<(basic_json&, std::istream&) and friend std::ostream& operator>>(const basic_json&, std::ostream&) are deprecated. Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.
    "},{"location":"home/releases/#v330","title":"v3.3.0","text":"

    Files

    • include.zip (123 KB)
    • include.zip.asc (1 KB)
    • json.hpp (635 KB)
    • json.hpp.asc (1 KB)

    Release date: 2018-10-05 SHA-256: f1327bb60c58757a3dd2b0c9c45d49503d571337681d950ec621f8374bcc14d4 (json.hpp), 9588d63557333aaa485e92221ec38014a85a6134e7486fe3441e0541a5a89576 (include.zip)

    "},{"location":"home/releases/#summary_8","title":"Summary","text":"

    This release adds support for GCC 4.8. Furthermore, it adds a function get_to to write a JSON value to a passed reference. Another topic of this release was the CMake support which has been overworked and documented.

    Besides, a lot of bugs have been fixed and slight improvements have been made. All changes are backward-compatible.

    "},{"location":"home/releases/#new-features_4","title":"New Features","text":"
    • The library can now also built with GCC 4.8. Though this compiler does not fully support C++11, it can successfully compile and run the test suite. Note that bug 57824 in GCC 4.8 still forbids to use multiline raw strings in arguments to macros. #1257
    • Added new function get_to to write a JSON value to a passed reference. The destination type is automatically derived which allows more succinct code compared to the get function. #1227 #1231
    "},{"location":"home/releases/#bug-fixes_8","title":"Bug Fixes","text":"
    • Fixed a bug in the CMake file that made target_link_libraries to not properly include nlohmann_json. #1243 #1245 #1260
    • Fixed a warning in MSVC 2017 complaining about a constexpr if. #1204 #1268 #1272
    • Fixed a bug that prevented compilation with ICPC. #755 #1222
    • Improved the SFINAE correctness to fix a bug in the conversion operator. #1237 #1238
    • Fixed a -Wctor-dtor-privacy warning. #1224
    • Fixed a warning on a lambda in unevaluated context. #1225 #1230
    • Fixed a bug introduced in version 3.2.0 where defining JSON_CATCH_USER led to duplicate macro definition of JSON_INTERNAL_CATCH. #1213 #1214
    • Fixed a bug that prevented compilation with Clang 3.4.2 in RHEL 7. #1179 #1249
    "},{"location":"home/releases/#improvements_5","title":"Improvements","text":"
    • Added documentation on CMake integration of the library. #1270
    • Changed the CMake file to use find_package(nlohmann_json) without installing the library. #1202
    • Improved error messages in case operator[] is used with the wrong combination (json.exception.type_error.305) of JSON container type and argument type. Example: \"cannot use operator[] with a string argument\". #1220 #1221
    • Added a license and version information to the Meson build file. #1252
    • Removed static assertions to indicated missing to_json or from_json functions as such assertions do not play well with SFINAE. These assertions also led to problems with GMock. #960 #1212 #1228
    • The test suite now does not wait forever if run in a wrong directory and input files are not found. #1262
    • The test suite does not show deprecation warnings for deprecated functions which frequently led to confusion. #1271
    "},{"location":"home/releases/#further-changes_7","title":"Further Changes","text":"
    • GCC 4.8 and Xcode 10 were added to the continuous integration suite at Travis.
    • Added lgtm checks to pull requests.
    • Added tests for CMake integration. #1260
    "},{"location":"home/releases/#deprecated-functions_8","title":"Deprecated functions","text":"

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    • Function iterator_wrapper are deprecated. Please use the member function items() instead.
    • Functions friend std::istream& operator<<(basic_json&, std::istream&) and friend std::ostream& operator>>(const basic_json&, std::ostream&) are deprecated. Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.
    "},{"location":"home/releases/#v320","title":"v3.2.0","text":"

    Files

    • include.zip (124 KB)
    • include.zip.asc (1 KB)
    • json.hpp (636 KB)
    • json.hpp.asc (1 KB)

    Release date: 2018-08-20 SHA-256: ce6b5610a051ec6795fa11c33854abebb086f0fd67c311f5921c3c07f9531b44 (json.hpp), 35ee642558b90e2f9bc758995c4788c4b4d4dec54eef95fb8f38cb4d49c8fc7c (include.zip)

    "},{"location":"home/releases/#summary_9","title":"Summary","text":"

    This release introduces a SAX interface to the library. While this may be a very special feature used by only few people, it allowed to unify all functions that consumed input and created some kind of JSON value. Internally, now all existing functions like parse, accept, from_cbor, from_msgpack, and from_ubjson use the SAX interface with different event processors. This allowed to separate the input processing from the value generation. Furthermore, throwing an exception in case of a parse error is now optional and up to the event processor. Finally, the JSON parser is now non-recursive (meaning it does not use the call stack, but std::vector<bool> to track the hierarchy of structured values) which allows to process nested input more efficiently.

    Furthermore, the library finally is able to parse from wide string types. This is the first step toward opening the library from UTF-8 to UTF-16 and UTF-32.

    This release further fixes several bugs in the library. All changes are backward-compatible.

    "},{"location":"home/releases/#new-features_5","title":"New Features","text":"
    • added a parser with a SAX interface (#971, #1153)
    • support to parse from wide string types std::wstring, std::u16string, and std::u32string; the input will be converted to UTF-8 (#1031)
    • added support for std::string_view when using C++17 (#1028)
    • allow to roundtrip std::map and std::unordered_map from JSON if key type is not convertible to string; in these cases, values are serialized to arrays of pairs (#1079, #1089, #1133, #1138)
    "},{"location":"home/releases/#bug-fixes_9","title":"Bug Fixes","text":"
    • allow to create nullptr_t from JSON allowing to properly roundtrip null values (#1169)
    • allow compare user-defined string types (#1130)
    • better support for algorithms using iterators from items() (#1045, #1134)
    • added parameter to avoid compilation error with MSVC 2015 debug builds (#1114)
    • re-added accidentally skipped unit tests (#1176)
    • fixed MSVC issue with std::swap (#1168)
    "},{"location":"home/releases/#improvements_6","title":"Improvements","text":"
    • key() function for iterators returns a const reference rather than a string copy (#1098)
    • binary formats CBOR, MessagePack, and UBJSON now supports float as type for floating-point numbers (#1021)
    "},{"location":"home/releases/#further-changes_8","title":"Further Changes","text":"
    • changed issue templates
    • improved continuous integration: added builders for Xcode 9.3 and 9.4, added builders for GCC 8 and Clang 6, added builder for MinGW, added builders for MSVC targeting x86
    • required CMake version is now at least 3.8 (#1040)
    • overworked CMake file wrt. packaging (#1048)
    • added package managers: Spack (#1041) and CocoaPods (#1148)
    • fixed Meson include directory (#1142)
    • preprocessor macro JSON_SKIP_UNSUPPORTED_COMPILER_CHECK can skip the rejection of unsupported compilers - use at your own risk! (#1128)
    • preprocessor macro JSON_INTERNAL_CATCH/JSON_INTERNAL_CATCH_USER allows to control the behavior of exception handling inside the library (#1187)
    • added note on char to JSON conversion
    • added note how to send security-related issue via encrypted email
    • removed dependency to std::stringstream (#1117)
    • added SPDX-License-Identifier
    • added updated JSON Parsing Test Suite, described in Parsing JSON is a Minefield \ud83d\udca3
    • updated to Catch 1.12.0
    "},{"location":"home/releases/#deprecated-functions_9","title":"Deprecated functions","text":"

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    • Function iterator_wrapper are deprecated. Please use the member function items() instead.
    • Functions friend std::istream& operator<<(basic_json&, std::istream&) and friend std::ostream& operator>>(const basic_json&, std::ostream&) are deprecated. Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.
    "},{"location":"home/releases/#v312","title":"v3.1.2","text":"

    Files

    • include.zip (115 KB)
    • include.zip.asc (1 KB)
    • json.hpp (582 KB)
    • json.hpp.asc (1 KB)

    Release date: 2018-03-14 SHA-256: fbdfec4b4cf63b3b565d09f87e6c3c183bdd45c5be1864d3fcb338f6f02c1733 (json.hpp), 495362ee1b9d03d9526ba9ccf1b4a9c37691abe3a642ddbced13e5778c16660c (include.zip)

    "},{"location":"home/releases/#summary_10","title":"Summary","text":"

    This release fixes several bugs in the library. All changes are backward-compatible.

    "},{"location":"home/releases/#bug-fixes_10","title":"Bug Fixes","text":"
    • Fixed a memory leak occurring in the parser callback (#1001).
    • Different specializations of basic_json (e.g., using different template arguments for strings or objects) can now be used in assignments (#972, #977, #986).
    • Fixed a logical error in an iterator range check (#992).
    "},{"location":"home/releases/#improvements_7","title":"Improvements","text":"
    • The parser and the serialization now support user-defined string types (#1006, #1009).
    "},{"location":"home/releases/#further-changes_9","title":"Further Changes","text":"
    • Clang Analyzer is now used as additional static analyzer; see make clang_analyze.
    • Overworked README by adding links to the documentation (#981).
    "},{"location":"home/releases/#deprecated-functions_10","title":"Deprecated functions","text":"

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    • Function iterator_wrapper are deprecated. Please use the member function items() instead.
    • Functions friend std::istream& operator<<(basic_json&, std::istream&) and friend std::ostream& operator>>(const basic_json&, std::ostream&) are deprecated. Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.
    "},{"location":"home/releases/#v311","title":"v3.1.1","text":"

    Files

    • include.zip (114 KB)
    • include.zip.asc (1 KB)
    • json.hpp (577 KB)
    • json.hpp.asc (1 KB)

    Release date: 2018-02-13 SHA-256: e14ce5e33d6a2daf748026bd4947f3d9686ca4cfd53d10c3da46a0a9aceb7f2e (json.hpp), fde771d4b9e4f222965c00758a2bdd627d04fb7b59e09b7f3d1965abdc848505 (include.zip)

    "},{"location":"home/releases/#summary_11","title":"Summary","text":"

    This release fixes several bugs in the library. All changes are backward-compatible.

    "},{"location":"home/releases/#bug-fixes_11","title":"Bug Fixes","text":"
    • Fixed parsing of CBOR strings with indefinite length (#961). Earlier versions of this library misinterpreted the CBOR standard and rejected input with the 0x7F start byte.
    • Fixed user-defined conversion to vector type (#924, #969). A wrong SFINAE check rejected code though a user-defined conversion was provided.
    • Fixed documentation of the parser behavior for objects with duplicate keys (#963). The exact behavior is not specified by RFC 8259 and the library now also provides no guarantee which object key is stored.
    • Added check to detect memory overflow when parsing UBJSON containers (#962). The optimized UBJSON format allowed for specifying an array with billions of null elements with a few bytes and the library did not check whether this size exceeded max_size().
    "},{"location":"home/releases/#further-changes_10","title":"Further Changes","text":"
    • Code coverage is now calculated for the individual header files, allowing to find uncovered lines more quickly than by browsing through the single header version (#953, #957).
    • A Makefile target run_benchmarks was added to quickly build and run the benchmark suite.
    • The documentation was harmonized with respect to the header inclusion (#955). Now all examples and the README use #include <nlohmann/json.hpp> to allow for selecting single_include or include or whatever installation folder as include directory.
    • Added note on how to use the library with the cget package manager (#954).
    "},{"location":"home/releases/#deprecated-functions_11","title":"Deprecated functions","text":"

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    • Function iterator_wrapper are deprecated. Please use the member function items() instead.
    • Functions friend std::istream& operator<<(basic_json&, std::istream&) and friend std::ostream& operator>>(const basic_json&, std::ostream&) are deprecated. Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.
    "},{"location":"home/releases/#v310","title":"v3.1.0","text":"

    Files

    • include.zip (114 KB)
    • include.zip.asc (1 KB)
    • json.hpp (577 KB)
    • json.hpp.asc (1 KB)

    Release date: 2018-02-01 SHA-256: d40f614d10a6e4e4e80dca9463da905285f20e93116c36d97d4dc1aa63d10ba4 (json.hpp), 2b7234fca394d1e27b7e017117ed80b7518fafbb4f4c13a7c069624f6f924673 (include.zip)

    "},{"location":"home/releases/#summary_12","title":"Summary","text":"

    This release adds support for the UBJSON format and JSON Merge Patch. It also contains some minor changes and bug fixes. All changes are backward-compatible.

    "},{"location":"home/releases/#new-features_6","title":"New features","text":"
    • The library now supports UBJSON (Universal Binary JSON Specification) as binary format to read and write JSON values space-efficiently. See the documentation overview for a comparison of the different formats CBOR, MessagePack, and UBJSON.
    • JSON Merge Patch (RFC 7386) offers an intuitive means to describe patches between JSON values (#876, #877). See the documentation of merge_patch for more information.
    "},{"location":"home/releases/#improvements_8","title":"Improvements","text":"
    • The library now uses the Grisu2 algorithm for printing floating-point numbers (based on the reference implementation by Florian Loitsch) which produces a short representation which is guaranteed to round-trip (#360, #935, #936).
    • The UTF-8 handling was further simplified by using the decoder of Bj\u00f6rn Hoehrmann in more scenarios.
    "},{"location":"home/releases/#reorganization","title":"Reorganization","text":"
    • Though the library is released as a single header, its development got more and more complicated. With this release, the header is split into several files and the single-header file json.hpp can be generated from these development sources. In the repository, folder include contains the development sources and single_include contains the single json.hpp header (#700, #906, #907, #910, #911, #915, #920, #924, #925, #928, #944).
    • The split further allowed for a forward declaration header include/nlohmann/json_fwd.hpp to speed up compilation times (#314).
    "},{"location":"home/releases/#further-changes_11","title":"Further changes","text":"
    • Google Benchmark is now used for micro benchmarks (see benchmarks folder, #921).
    • The serialization (JSON and binary formats) now properly work with the libraries string template parameter, allowing for optimized string implementations to be used in constraint environments such as embedded software (#941, #950).
    • The exceptional behavior can now be overridden by defining macros JSON_THROW_USER, JSON_TRY_USER, and JSON_CATCH_USER, defining the behavior of throw, try and catch, respectively. This allows to switch off C++'s exception mechanism yet still execute user-defined code in case an error condition occurs (#938).
    • To facilitate the interplay with flex and Bison, the library does not use the variable name yytext any more as it could clash with macro definitions (#933).
    • The library now defines NLOHMANN_JSON_VERSION_MAJOR, NLOHMANN_JSON_VERSION_MINOR, and NLOHMANN_JSON_VERSION_PATCH to allow for conditional compilation based on the included library version (#943, #948).
    • A compilation error with ICC has been fixed (#947).
    • Typos and links in the documentation have been fixed (#900, #930).
    • A compiler error related to incomplete types has been fixed (#919).
    • The tests form the UTF-8 decoder stress test have been added to the test suite.
    "},{"location":"home/releases/#deprecated-functions_12","title":"Deprecated functions","text":"
    • Function iterator_wrapper has been deprecated (#874). Since its introduction, the name was up for discussion, as it was too technical. We now introduced the member function items() with the same semantics. iterator_wrapper will be removed in the next major version (i.e., 4.0.0).

    Furthermore, the following functions are deprecated since version 3.0.0 and will be removed in the next major version (i.e., 4.0.0):

    • friend std::istream& operator<<(basic_json&, std::istream&)
    • friend std::ostream& operator>>(const basic_json&, std::ostream&)

    Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.

    "},{"location":"home/releases/#v301","title":"v3.0.1","text":"

    Files

    • json.hpp (502 KB)
    • json.hpp.asc (1 KB)

    Release date: 2017-12-29 SHA-256: c9b3591f1bb94e723a0cd7be861733a3a555b234ef132be1e9027a0364118c4c

    "},{"location":"home/releases/#summary_13","title":"Summary","text":"

    This release fixes small issues in the implementation of JSON Pointer and JSON Patch. All changes are backward-compatible.

    "},{"location":"home/releases/#changes","title":"Changes","text":"
    • The \"copy\" operation of JSON Patch (RFC 6902) requests that it is an error if the target path points into a non-existing array or object (see #894 for a detailed description). This release fixes the implementation to detect such invalid target paths and throw an exception.
    • An array index in a JSON Pointer (RFC 6901) must be an integer. This release fixes the implementation to throw an exception in case invalid array indices such as 10e2 are used.
    • Added the JSON Patch tests from Byron Ruth and Mike McCabe.
    • Fixed the documentation of the at(ptr) function with JSON Pointers to list all possible exceptions (see #888).
    • Updated the container overview documentation (see #883).
    • The CMake files now respect the BUILD_TESTING option (see #846, #885)
    • Fixed some compiler warnings (see #858, #882).
    "},{"location":"home/releases/#deprecated-functions_13","title":"Deprecated functions","text":"

    To unify the interfaces and to improve similarity with the STL, the following functions are deprecated since version 3.0.0 and will be removed in the next major version (i.e., 4.0.0):

    • friend std::istream& operator<<(basic_json&, std::istream&)
    • friend std::ostream& operator>>(const basic_json&, std::ostream&)

    Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.

    "},{"location":"home/releases/#v300","title":"v3.0.0","text":"

    Files

    • json.hpp (501 KB)
    • json.hpp.asc (1 KB)

    Release date: 2017-12-17 SHA-256: 076d4a0cb890a3c3d389c68421a11c3d77c64bd788e85d50f1b77ed252f2a462

    "},{"location":"home/releases/#summary_14","title":"Summary","text":"

    After almost a year, here is finally a new release of JSON for Modern C++, and it is a major one! As we adhere to semantic versioning, this means the release includes some breaking changes, so please read the next section carefully before you update. But don't worry, we also added a few new features and put a lot of effort into fixing a lot of bugs and straighten out a few inconsistencies.

    "},{"location":"home/releases/#breaking-changes","title":"Breaking changes","text":"

    This section describes changes that change the public API of the library and may require changes in code using a previous version of the library. In section \"Moving from 2.x.x to 3.0.0\" at the end of the release notes, we describe in detail how existing code needs to be changed.

    • The library now uses user-defined exceptions instead of re-using those defined in <stdexcept> (#244). This not only allows to add more information to the exceptions (every exception now has an identifier, and parse errors contain the position of the error), but also to easily catch all library exceptions with a single catch(json::exception).
    • When strings with a different encoding as UTF-8 were stored in JSON values, their serialization could not be parsed by the library itself, as only UTF-8 is supported. To enforce this library limitation and improve consistency, non-UTF-8 encoded strings now yield a json::type_error exception during serialization (#838). The check for valid UTF-8 is realized with code from Bj\u00f6rn Hoehrmann.
    • NaN and infinity values can now be stored inside the JSON value without throwing an exception. They are, however, still serialized as null (#388).
    • The library's iterator tag was changed from RandomAccessIterator to BidirectionalIterator (#593). Supporting RandomAccessIterator was incorrect as it assumed an ordering of values in a JSON objects which are unordered by definition.
    • The library does not include the standard headers <iostream>, <ctype>, and <stdexcept> any more. You may need to add these headers to code relying on them.
    • Removed constructor explicit basic_json(std::istream& i, const parser_callback_t cb = nullptr) which was deprecated in version 2.0.0 (#480).
    "},{"location":"home/releases/#deprecated-functions_14","title":"Deprecated functions","text":"

    To unify the interfaces and to improve similarity with the STL, the following functions are now deprecated and will be removed in the next major version (i.e., 4.0.0):

    • friend std::istream& operator<<(basic_json&, std::istream&)
    • friend std::ostream& operator>>(const basic_json&, std::ostream&)

    Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.

    "},{"location":"home/releases/#new-features_7","title":"New features","text":"

    With all this breaking and deprecation out of the way, let's talk about features!

    • We improved the diagnostic information for syntax errors (#301). Now, an exception json::parse_error is thrown which contains a detailed message on the error, but also a member byte to indicate the byte offset in the input where the error occurred.
    • We added a non-throwing syntax check (#458): The new accept function returns a Boolean indicating whether the input is proper JSON. We also added a Boolean parameter allow_exceptions to the existing parse functions to return a discarded value in case a syntax error occurs instead of throwing an exception.
    • An update function was added to merge two JSON objects (#428). In case you are wondering: the name was inspired by Python.
    • The insert function now also supports an iterator range to add elements to an object.
    • The binary exchange formats CBOR and MessagePack can now be parsed from input streams and written to output streams (#477).
    • Input streams are now only read until the end of a JSON value instead of the end of the input (#367).
    • The serialization function dump now has two optional parameters ensure_ascii to escape all non-ASCII characters with \\uxxxx and an indent_char parameter to choose whether to indent with spaces or tabs (#654).
    • Added built-in type support for C arrays (#502), std::pair and std::tuple (#563, #614), enum and enum class (#545), std::vector<bool> (#494). Fixed support for std::valarray (#702), std::array (#553), and std::map<std::string, std::string> (#600, #607).
    "},{"location":"home/releases/#further-changes_12","title":"Further changes","text":"

    Furthermore, there have been a lot of changes under the hood:

    • Replaced the re2c generated scanner by a self-coded version which allows for a better modularization of the parser and better diagnostics. To test the new scanner, we added millions (8,860,608 to be exact) of unit tests to check all valid and invalid byte sequences of the Unicode standard.
    • Google's OSS-Fuzz is still constantly fuzz-testing the library and found several issues that were fixed in this release (#497, #504, #514, #516, #518, #519, #575).
    • We now also ignore UTF-8 byte order marks when parsing from an iterator range (#602).
    • Values can be now moved from initializer lists (#663).
    • Updated to Catch 1.9.7. Unfortunately, Catch2 currently has some performance issues.
    • The non-exceptional paths of the library are now annotated with __builtin_expect to optimize branch prediction as long as no error occurs.
    • MSVC now produces a stack trace in MSVC if a from_json or to_json function was not found for a user-defined type. We also added a debug visualizer nlohmann_json.natvis for better debugging in MSVC (#844).
    • Overworked the documentation and added even more examples.
    • The build workflow now relies on CMake and CTest. Special flags can be chosen with CMake, including coverage (JSON_Coverage), compilation without exceptions (JSON_NoExceptions), LLVM sanitizers (JSON_Sanitizer), or execution with Valgrind (JSON_Valgrind).
    • Added support for package managers Meson (#576), Conan (#566), Hunter (#671, #829), and vcpkg (#753).
    • Added CI builders: Xcode 8.3, 9.0, 9.1, and 9.2; GCC 7.2; Clang 3.8, 3.9, 4.0, and 5.0; Visual Studio 2017. The library is further built with C++17 settings on the latest Clang, GCC, and MSVC version to quickly detect new issues.
    "},{"location":"home/releases/#moving-from-2xx-to-300","title":"Moving from 2.x.x to 3.0.0","text":""},{"location":"home/releases/#user-defined-exceptions","title":"User-defined Exceptions","text":"

    There are five different exceptions inheriting from json::exception:

    • json::parse_error for syntax errors (including the binary formats),
    • json::invalid_iterator for errors related to iterators,
    • json::type_error for errors where functions were called with the wrong JSON type,
    • json::out_of_range for range errors, and
    • json::other_error for miscellaneous errors.

    To support these exception, the try/catch blocks of your code need to be adjusted:

    new exception previous exception parse_error.101 invalid_argument parse_error.102 invalid_argument parse_error.103 invalid_argument parse_error.104 invalid_argument parse_error.105 invalid_argument parse_error.106 domain_error parse_error.107 domain_error parse_error.108 domain_error parse_error.109 invalid_argument parse_error.110 out_of_range parse_error.111 invalid_argument parse_error.112 invalid_argument invalid_iterator.201 domain_error invalid_iterator.202 domain_error invalid_iterator.203 domain_error invalid_iterator.204 out_of_range invalid_iterator.205 out_of_range invalid_iterator.206 domain_error invalid_iterator.207 domain_error invalid_iterator.208 domain_error invalid_iterator.209 domain_error invalid_iterator.210 domain_error invalid_iterator.211 domain_error invalid_iterator.212 domain_error invalid_iterator.213 domain_error invalid_iterator.214 out_of_range type_error.301 domain_error type_error.302 domain_error type_error.303 domain_error type_error.304 domain_error type_error.305 domain_error type_error.306 domain_error type_error.307 domain_error type_error.308 domain_error type_error.309 domain_error type_error.310 domain_error type_error.311 domain_error type_error.313 domain_error type_error.314 domain_error type_error.315 domain_error out_of_range.401 out_of_range out_of_range.402 out_of_range out_of_range.403 out_of_range out_of_range.404 out_of_range out_of_range.405 domain_error other_error.501 domain_error"},{"location":"home/releases/#handling-of-nan-and-inf","title":"Handling of NaN and INF","text":"
    • If an overflow occurs during parsing a number from a JSON text, an exception json::out_of_range is thrown so that the overflow is detected early and roundtripping is guaranteed.

    • NaN and INF floating-point values can be stored in a JSON value and are not replaced by null. That is, the basic_json class behaves like double in this regard (no exception occurs). However, NaN and INF are serialized to null.

    "},{"location":"home/releases/#removal-of-deprecated-functions","title":"Removal of deprecated functions","text":"

    Function explicit basic_json(std::istream& i, const parser_callback_t cb = nullptr) should be replaced by the parse function: Let ss be a stream and cb be a parse callback function.

    Old code:

    json j(ss, cb);\n

    New code:

    json j = json::parse(ss, cb);\n

    If no callback function is used, also the following code works:

    json j;\nj << ss;\n

    or

    json j;\nss >> j;\n
    "},{"location":"home/releases/#v211","title":"v2.1.1","text":"

    Files

    • json.hpp (437 KB)
    • json.hpp.asc (1 KB)

    Release date: 2017-02-25 SHA-256: faa2321beb1aa7416d035e7417fcfa59692ac3d8c202728f9bcc302e2d558f57

    "},{"location":"home/releases/#summary_15","title":"Summary","text":"

    This release fixes a locale-related bug in the parser. To do so, the whole number handling (lexer, parser, and also the serialization) have been overworked. Furthermore, a lot of small changes added up that were added to this release. All changes are backward-compatible.

    "},{"location":"home/releases/#changes_1","title":"Changes","text":"
    • Locales that have a different character than . as decimal separator (e.g., the Norwegian locale nb_NO.UTF-8) led to truncated number parsing or parse errors. The library now has been fixed to work with any locale. Note that . is still the only valid decimal separator for JSON input.
    • Numbers like 1.0 were correctly parsed as floating-point number, but serialized as integer (1). Now, floating-point numbers correctly round trip.
    • Parsing incorrect JSON numbers with leading 0 (0123) could yield a buffer overflow. This is fixed now by detecting such errors directly by the lexer.
    • Constructing a JSON value from a pointer was incorrectly interpreted as a Boolean; such code will now yield a compiler error.
    • Comparing a JSON number with 0 led to a comparison with null. This is fixed now.
    • All throw calls are now wrapped in macros.
    • Starting during the preparation of this release (since 8 February 2017), commits and released files are cryptographically signed with this GPG key. Previous releases have also been signed.
    • The parser for MessagePack and CBOR now supports an optional start index parameter to define a byte offset for the parser.
    • Some more warnings have been fixed. With Clang, the code compiles without warnings with -Weverything (well, it needs -Wno-documentation-unknown-command and -Wno-deprecated-declarations, but you get the point).
    • The code can be compiled easier with many Android NDKs by avoiding macros like UINT8_MAX which previously required defining a preprocessor macro for compilation.
    • The unit tests now compile two times faster.
    • Cotire is used to speed up the build.
    • Fixed a lot of typos in the documentation.
    • Added a section to the README file that lists all used third-party code/tools.
    • Added a note on constructing a string value vs. parsing.
    • The test suite now contains 11202597 unit tests.
    • Improved the Doxygen documentation by shortening the template parameters of class basic_json.
    • Removed Doozer.
    • Added Codacity.
    • Upgraded Catch to version 1.7.2.
    "},{"location":"home/releases/#v210","title":"v2.1.0","text":"

    Files

    • json.hpp (426 KB)
    • json.hpp.asc (1 KB)
    • Release date: 2017-01-28
    • SHA-256: a571dee92515b685784fd527e38405cf3f5e13e96edbfe3f03d6df2e363a767b
    "},{"location":"home/releases/#summary_16","title":"Summary","text":"

    This release introduces a means to convert from/to user-defined types. The release is backwards compatible.

    "},{"location":"home/releases/#changes_2","title":"Changes","text":"
    • The library now offers an elegant way to convert from and to arbitrary value types. All you need to do is to implement two functions: to_json and from_json. Then, a conversion is as simple as putting a = between variables. See the README for more information and examples.
    • Exceptions can now be switched off. This can be done by defining the preprocessor symbol JSON_NOEXCEPTION or by passing -fno-exceptions to your compiler. In case the code would usually thrown an exception, abort() is now called.
    • Information on the library can be queried with the new (static) function meta() which returns a JSON object with information on the version, compiler, and platform. See the documentation for an example.
    • A bug in the CBOR parser was fixed which led to a buffer overflow.
    • The function type_name() is now public. It allows to query the type of a JSON value as string.
    • Added the Big List of Naughty Strings as test case.
    • Updated to Catch v1.6.0.
    • Some typos in the documentation have been fixed.
    "},{"location":"home/releases/#v2010","title":"v2.0.10","text":"

    Files

    • json.hpp (409 KB)
    • json.hpp.asc (1 KB)
    • Release date: 2017-01-02
    • SHA-256: ec27d4e74e9ce0f78066389a70724afd07f10761009322dc020656704ad5296d
    "},{"location":"home/releases/#summary_17","title":"Summary","text":"

    This release fixes several security-relevant bugs in the MessagePack and CBOR parsers. The fixes are backwards compatible.

    "},{"location":"home/releases/#changes_3","title":"Changes","text":"
    • Fixed a lot of bugs in the CBOR and MesssagePack parsers. These bugs occurred if invalid input was parsed and then could lead in buffer overflows. These bugs were found with Google's OSS-Fuzz, see #405, #407, #408, #409, #411, and #412 for more information.
    • We now also use the Doozer continuous integration platform.
    • The complete test suite is now also run with Clang's address sanitizer and undefined-behavior sanitizer.
    • Overworked fuzz testing; CBOR and MessagePack implementations are now fuzz-tested. Furthermore, all fuzz tests now include a round trip which ensures created output can again be properly parsed and yields the same JSON value.
    • Clarified documentation of find() function to always return end() when called on non-object value types.
    • Moved thirdparty test code to test/thirdparty directory.
    "},{"location":"home/releases/#v209","title":"v2.0.9","text":"

    Files

    • json.hpp (406 KB)
    • json.hpp.asc (1 KB)
    • Release date: 2016-12-16
    • SHA-256: fbf3396f13e187d6c214c297bddc742d918ea9b55e10bfb3d9f458b9bfdc22e5
    "},{"location":"home/releases/#summary_18","title":"Summary","text":"

    This release implements with CBOR and MessagePack two binary serialization/deserialization formats. It further contains some small fixes and improvements. The fixes are backwards compatible.

    "},{"location":"home/releases/#changes_4","title":"Changes","text":"
    • The library can now read and write the binary formats CBOR (Concise Binary Object Representation) and MessagePack. Both formats are aimed to produce a very compact representation of JSON which can be parsed very efficiently. See the README file for more information and examples.
    • simplified the iteration implementation allowing to remove dozens of lines of code
    • fixed an integer overflow error detected by Google's OSS-Fuzz
    • suppressed documentation warnings inside the library to facilitate compilation with -Wdocumentation
    • fixed an overflow detection error in the number parser
    • updated contribution guidelines to a list of frequentely asked features that will most likely be never added to the library
    • added a table of contents to the README file to add some structure
    • mentioned the many examples and the documentation in the README file
    • split unit tests into individual independent binaries to speed up compilation and testing
    • the test suite now contains 11201886 tests
    "},{"location":"home/releases/#v208","title":"v2.0.8","text":"

    Files

    • json.hpp (360 KB)
    • json.hpp.asc (1 KB)
    • Release date: 2016-12-02
    • SHA-256: b70db0ad34f8e0e61dc3f0cbab88099336c9674c193d8a3439d93d6aca2d7120
    "},{"location":"home/releases/#summary_19","title":"Summary","text":"

    This release combines a lot of small fixes and improvements. The fixes are backwards compatible.

    "},{"location":"home/releases/#changes_5","title":"Changes","text":"
    • fixed a bug that froze the parser if a passed file was not found (now, std::invalid_argument is thrown)
    • fixed a bug that lead to an error of a file at EOF was parsed again (now, std::invalid_argument is thrown)
    • the well known functions emplace and emplace_back have been added to JSON values and work as expected
    • improved the performance of the serialization (dump function)
    • improved the performance of the deserialization (parser)
    • some continuous integration images at Travis were added and retired; see here for the current continuous integration setup
    • the Coverity scan works again
    • the benchmarking code has been improved to produce more stable results
    • the README file has been extended and includes more frequently asked examples
    • the test suite now contains 8905518 tests
    • updated Catch to version 1.5.8
    "},{"location":"home/releases/#v207","title":"v2.0.7","text":"

    Files

    • json.hpp (355 KB)
    • json.hpp.asc (1 KB)
    • Release date: 2016-11-02
    • SHA-256: 5545c323670f8165bae90b9dc6078825e86ec310d96cc4e5b47233ea43715bbf
    "},{"location":"home/releases/#summary_20","title":"Summary","text":"

    This release fixes a few bugs in the JSON parser found in the Parsing JSON is a Minefield \ud83d\udca3 article. The fixes are backwards compatible.

    "},{"location":"home/releases/#changes_6","title":"Changes","text":"
    • The article Parsing JSON is a Minefield \ud83d\udca3 discusses a lot of pitfalls of the JSON specification. When investigating the published test cases, a few bugs in the library were found and fixed:
    • Files with less than 5 bytes can now be parsed without error.
    • The library now properly rejects any file encoding other than UTF-8. Furthermore, incorrect surrogate pairs are properly detected and rejected.
    • The library now accepts all but one \"yes\" test (y_string_utf16.json): UTF-16 is not supported.
    • The library rejects all but one \"no\" test (n_number_then_00.json): Null bytes are treated as end of file instead of an error. This allows to parse input from null-terminated strings.
    • The string length passed to a user-defined string literal is now exploited to choose a more efficient constructor.
    • A few grammar mistakes in the README file have been fixed.
    "},{"location":"home/releases/#v206","title":"v2.0.6","text":"

    Files

    • json.hpp (349 KB)
    • json.hpp.asc (1 KB)
    • Release date: 2016-10-15
    • SHA256: 459cc93d5e2f503e50c6d5876eb86bfea7daf405f5a567c5a2c9abc2383756ae
    "},{"location":"home/releases/#summary_21","title":"Summary","text":"

    This release fixes the semantics of operator[] for JSON Pointers (see below). This fix is backwards compatible.

    "},{"location":"home/releases/#changes_7","title":"Changes","text":"
    • operator[] for JSON Pointers now behaves like the other versions of operator[] and transforms null values into objects or arrays if required. This allows to created nested structures like j[\"/foo/bar/2\"] = 17 (yielding {\"foo\": \"bar\": [null, null, 17]}) without problems.
    • overworked a helper SFINAE function
    • fixed some documentation issues
    • fixed the CMake files to allow to run the test suite outside the main project directory
    • restored test coverage to 100%.
    "},{"location":"home/releases/#v205","title":"v2.0.5","text":"

    Files

    • json.hpp (347 KB)
    • json.hpp.asc (1 KB)
    • Release date: 2016-09-14
    • SHA-256: 8b7565263a44e2b7d3b89808bc73d2d639037ff0c1f379e3d56dbd77e00b98d9
    "},{"location":"home/releases/#summary_22","title":"Summary","text":"

    This release fixes a regression bug in the stream parser (function parse() and the <</>> operators). This fix is backwards compatible.

    "},{"location":"home/releases/#changes_8","title":"Changes","text":"
    • Bug fix: The end of a file stream was not detected properly which led to parse errors. This bug should have been fixed with 2.0.4, but there was still a flaw in the code.
    "},{"location":"home/releases/#v204","title":"v2.0.4","text":"

    Files

    • json.hpp (347 KB)
    • json.hpp.asc (1 KB)
    • Release date: 2016-09-11
    • SHA-256: 632ceec4c25c4e2153f71470d3a2b992c8355f6d8b4d627d05dd16095cd3aeda
    "},{"location":"home/releases/#summary_23","title":"Summary","text":"

    This release fixes a bug in the stream parser (function parse() and the <</>> operators). This fix is backwards compatible.

    "},{"location":"home/releases/#changes_9","title":"Changes","text":"
    • Bug fix: The end of a file stream was not detected properly which led to parse errors.
    • Fixed a compiler warning about an unused variable.
    "},{"location":"home/releases/#v203","title":"v2.0.3","text":"

    Files

    • json.hpp (347 KB)
    • json.hpp.asc (1 KB)
    • Release date: 2016-08-31
    • SHA-256: 535b73efe5546fde9e763c14aeadfc7b58183c0b3cd43c29741025aba6cf6bd3
    "},{"location":"home/releases/#summary_24","title":"Summary","text":"

    This release combines a lot of small fixes and improvements. The release is backwards compatible.

    "},{"location":"home/releases/#changes_10","title":"Changes","text":"
    • The parser/deserialization functions have been generalized to process any contiguous sequence of 1-byte elements (e.g., char, unsigned char, uint8_t). This includes all kind of string representations (string literals, char arrays, std::string, const char*), contiguous containers (C-style arrays, std::vector, std::array, std::valarray, std::initializer_list). User-defined containers providing random-access iterator access via std::begin and std::end can be used as well. See the documentation (1, 2, 3, 4) for more information. Note that contiguous storage cannot be checked at compile time; if any of the parse functions are called with a noncompliant container, the behavior is undefined and will most likely yield segmentation violation. The preconditions are enforced by an assertion unless the library is compiled with preprocessor symbol NDEBUG.
    • As a general remark on assertions: The library uses assertions to preclude undefined behavior. A prominent example for this is the operator[] for const JSON objects. The behavior of this const version of the operator is undefined if the given key does not exist in the JSON object, because unlike the non-const version, it cannot add a null value at the given key. Assertions can be switched of by defining the preprocessor symbol NDEBUG. See the documentation of assert for more information.
    • In the course of cleaning up the parser/deserialization functions, the constructor basic_json(std::istream&, const parser_callback_t) has been deprecated and will be deleted with the next major release 3.0.0 to unify the interface of the library. Deserialization will be done by stream operators or by calling one of the parse functions. That is, calls like json j(i); for an input stream i need to be replaced by json j = json::parse(i);. Compilers will produce a deprecation warning if client code uses this function.
    • Minor improvements:
    • Improved the performance of the serialization by avoiding the re-creation of a locale object.
    • Fixed two MSVC warnings. Compiling the test suite with /Wall now only warns about non-inlined functions (C4710) and the deprecation of the constructor from input-stream (C4996).
    • Some project internals:
    • The project has qualified for the Core Infrastructure Initiative Best Practices Badge. While most requirements where already satisfied, some led to a more explicit documentation of quality-ensuring procedures. For instance, static analysis is now executed with every commit on the build server. Furthermore, the contribution guidelines document how to communicate security issues privately.
    • The test suite has been overworked and split into several files to allow for faster compilation and analysis. The execute the test suite, simply execute make check.
    • The continuous integration with Travis was extended with Clang versions 3.6.0 to 3.8.1 and now includes 18 different compiler/OS combinations.
    • An 11-day run of American fuzzy lop checked 962 million inputs on the parser and found no issue.
    "},{"location":"home/releases/#v202","title":"v2.0.2","text":"

    Files

    • json.hpp (338 KB)
    • json.hpp.asc (1 KB)
    • Release date: 2016-07-31
    • SHA-256: 8e97b7965b4594b00998d6704465412360e1a0ed927badb51ded8b82291a8f3d
    "},{"location":"home/releases/#summary_25","title":"Summary","text":"

    This release combines a lot of small fixes and improvements. The release is backwards compatible.

    "},{"location":"home/releases/#changes_11","title":"Changes","text":"
    • The parser has been overworked, and a lot of small issues have been fixed:
    • Improved parser performance by avoiding recursion and using move semantics for the return value.
    • Unescaped control characters \\x10-\\x1f are not accepted any more.
    • Fixed a bug in the parser when reading from an input stream.
    • Improved test case coverage for UTF-8 parsing: now, all valid Unicode code points are tested both escaped and unescaped.
    • The precision of output streams is now preserved by the parser.
    • Started to check the code correctness by proving termination of important loops. Furthermore, individual assertions have been replaced by a more systematic function which checks the class invariants. Note that assertions should be switched off in production by defining the preprocessor macro NDEBUG, see the documentation of assert.
    • A lot of code cleanup: removed unused headers, fixed some compiler warnings, and fixed a build error for Windows-based Clang builds.
    • Added some compile-time checks:
    • Unsupported compilers are rejected during compilation with an #error command.
    • Static assertion prohibits code with incompatible pointer types used in get_ptr().
    • Improved the documentation, and adjusted the documentation script to choose the correct version of sed.
    • Replaced a lot of \"raw loops\" by STL functions like std::all_of, std::for_each, or std::accumulate. This facilitates reasoning about termination of loops and sometimes allowed to simplify functions to a single return statement.
    • Implemented a value() function for JSON pointers (similar to at function).
    • The Homebrew formula (see Integration) is now tested for all Xcode builds (6.1 - 8.x) with Travis.
    • Avoided output to std::cout in the test cases.
    "},{"location":"home/releases/#v201","title":"v2.0.1","text":"

    Files

    • json.hpp (321 KB)
    • json.hpp.asc (1 KB)
    • Release date: 2016-06-28
    • SHA-256: ef550fcd7df572555bf068e9ec4e9d3b9e4cdd441cecb0dcea9ea7fd313f72dd
    "},{"location":"home/releases/#summary_26","title":"Summary","text":"

    This release fixes a performance regression in the JSON serialization (function dump()). This fix is backwards compatible.

    "},{"location":"home/releases/#changes_12","title":"Changes","text":"
    • The locale of the output stream (or the internal string stream if a JSON value is serialized to a string) is now adjusted once for the whole serialization instead of for each floating-point number.
    • The locale of an output stream is now correctly reset to the previous value by the JSON library.
    "},{"location":"home/releases/#v200","title":"v2.0.0","text":"

    Files

    • json.hpp (321 KB)
    • json.hpp.asc (1 KB)
    • Release date: 2016-06-24
    • SHA-256: ac9e1fb25c2ac9ca5fc501fcd2fe3281fe04f07018a1b48820e7b1b11491bb6c
    "},{"location":"home/releases/#summary_27","title":"Summary","text":"

    This release adds several features such as JSON Pointers, JSON Patch, or support for 64 bit unsigned integers. Furthermore, several (subtle) bugs have been fixed.

    As noexcept and constexpr specifier have been added to several functions, the public API has effectively been changed in a (potential) non-backwards compatible manner. As we adhere to Semantic Versioning, this calls for a new major version, so say hello to 2\ufe0f\u20e3.0\ufe0f\u20e3.0\ufe0f\u20e3.

    "},{"location":"home/releases/#changes_13","title":"Changes","text":"
    • \ud83d\udd1f A JSON value now uses uint64_t (default value for template parameter NumberUnsignedType) as data type for unsigned integer values. This type is used automatically when an unsigned number is parsed. Furthermore, constructors, conversion operators and an is_number_unsigned() test have been added.
    • \ud83d\udc49 JSON Pointer (RFC 6901) support: A JSON Pointer is a string (similar to an XPath expression) to address a value inside a structured JSON value. JSON Pointers can be used in at() and operator[] functions. Furthermore, JSON values can be \u201cflattened\u201d to key/value pairs using flatten() where each key is a JSON Pointer. The original value can be restored by \u201cunflattening\u201d the flattened value using unflatten().
    • \ud83c\udfe5 JSON Patch (RFC 6902) support. A JSON Patch is a JSON value that describes the required edit operations (add, change, remove, \u2026) to transform a JSON value into another one. A JSON Patch can be created with function diff(const basic_json&) and applied with patch(const basic_json&). Note the created patches use a rather primitive algorithm so far and leave room for improvement.
    • \ud83c\uddea\ud83c\uddfa The code is now locale-independent: Floating-point numbers are always serialized with a period (.) as decimal separator and ignores different settings from the locale.
    • \ud83c\udf7a Homebrew support: Install the library with brew tap nlohmann/json && brew install nlohmann_json.
    • Added constructor to create a JSON value by parsing a std::istream (e.g., std::stringstream or std::ifstream).
    • Added noexcept specifier to basic_json(boolean_t), basic_json(const number_integer_t), basic_json(const int), basic_json(const number_float_t), iterator functions (begin(), end(), etc.)
    • When parsing numbers, the sign of 0.0 (vs. -0.0) is preserved.
    • Improved MSVC 2015, Android, and MinGW support. See README for more information.
    • Improved test coverage (added 2,225,386 tests).
    • Removed some misuses of std::move.
    • Fixed several compiler warnings.
    • Improved error messages from JSON parser.
    • Updated to re2c to version 0.16 to use a minimal DFAs for the lexer.
    • Updated test suite to use Catch version 1.5.6.
    • Made type getters (is_number, etc.) and const value access constexpr.
    • Functions push_back and operator+= now work with key/value pairs passed as initializer list, e.g. j_object += {\"key\", 1}.
    • Overworked CMakeLists.txt to make it easier to integrate the library into other projects.
    "},{"location":"home/releases/#notes","title":"Notes","text":"
    • Parser error messages are still very vague and contain no information on the error location.
    • The implemented diff function is rather primitive and does not create minimal diffs.
    • The name of function iteration_wrapper may change in the future and the function will be deprecated in the next release.
    • Roundtripping (i.e., parsing a JSON value from a string, serializing it, and comparing the strings) of floating-point numbers is not 100% accurate. Note that RFC 8259 defines no format to internally represent numbers and states not requirement for roundtripping. Nevertheless, benchmarks like Native JSON Benchmark treat roundtripping deviations as conformance errors.
    "},{"location":"home/releases/#v110","title":"v1.1.0","text":"

    Files

    • json.hpp (257 KB)
    • json.hpp.asc (1 KB)
    • Release date: 2016-01-24
    • SHA-256: c0cf0e3017798ca6bb18e757ebc570d21a3bdac877845e2b9e9573d183ed2f05
    "},{"location":"home/releases/#summary_28","title":"Summary","text":"

    This release fixes several small bugs and adds functionality in a backwards-compatible manner. Compared to the last version (1.0.0), the following changes have been made:

    "},{"location":"home/releases/#changes_14","title":"Changes","text":"
    • Fixed: Floating-point numbers are now serialized and deserialized properly such that rountripping works in more cases. [#185, #186, #190, #191, #194]
    • Added: The code now contains assertions to detect undefined behavior during development. As the standard function assert is used, the assertions can be switched off by defining the preprocessor symbol NDEBUG during compilation. [#168]
    • Added: It is now possible to get a reference to the stored values via the newly added function get_ref(). [#128, #184]
    • Fixed: Access to object values via keys (operator[]) now works with all kind of string representations. [#171, #189]
    • Fixed: The code now compiles again with Microsoft Visual Studio 2015. [#144, #167, #188]
    • Fixed: All required headers are now included.
    • Fixed: Typos and other small issues. [#162, #166, #175, #177, #179, #180]
    "},{"location":"home/releases/#notes_1","title":"Notes","text":"

    There are still known open issues (#178, #187) which will be fixed in version 2.0.0. However, these fixes will require a small API change and will not be entirely backwards-compatible.

    "},{"location":"home/releases/#v100","title":"v1.0.0","text":"

    Files

    • json.hpp (243 KB)
    • json.hpp.asc (1 KB)
    • Release date: 2015-12-28
    • SHA-256: 767dc2fab1819d7b9e19b6e456d61e38d21ef7182606ecf01516e3f5230446de
    "},{"location":"home/releases/#summary_29","title":"Summary","text":"

    This is the first official release. Compared to the prerelease version 1.0.0-rc1, only a few minor improvements have been made:

    "},{"location":"home/releases/#changes_15","title":"Changes","text":"
    • Changed: A UTF-8 byte order mark is silently ignored.
    • Changed: sprintf is no longer used.
    • Changed: iterator_wrapper also works for const objects; note: the name may change!
    • Changed: Error messages during deserialization have been improved.
    • Added: The parse function now also works with type std::istream&&.
    • Added: Function value(key, default_value) returns either a copy of an object's element at the specified key or a given default value if no element with the key exists.
    • Added: Public functions are tagged with the version they were introduced. This shall allow for better versioning in the future.
    • Added: All public functions and types are documented (see http://nlohmann.github.io/json/doxygen/) including executable examples.
    • Added: Allocation of all types (in particular arrays, strings, and objects) is now exception-safe.
    • Added: They descriptions of thrown exceptions have been overworked and are part of the tests suite and documentation.
    "},{"location":"home/sponsors/","title":"Sponsors","text":"

    You can sponsor this library at GitHub Sponsors.

    "},{"location":"home/sponsors/#priority-sponsor","title":"Priority Sponsor","text":"
    • Martti Laine
    • Paul Harrington
    "},{"location":"home/sponsors/#named-sponsors","title":"Named Sponsors","text":"
    • Michael Hartmann
    • Stefan Hagen
    • Steve Sperandeo
    • Robert Jefe Lindst\u00e4dt
    • Steve Wagner
    • Lion Yang

    Thanks everyone!

    "},{"location":"integration/","title":"Header only","text":"

    json.hpp is the single required file in single_include/nlohmann or released here. You need to add

    #include <nlohmann/json.hpp>\n\n// for convenience\nusing json = nlohmann::json;\n

    to the files you want to process JSON and set the necessary switches to enable C++11 (e.g., -std=c++11 for GCC and Clang).

    You can further use file single_include/nlohmann/json_fwd.hpp for forward declarations.

    "},{"location":"integration/cmake/","title":"CMake","text":""},{"location":"integration/cmake/#integration","title":"Integration","text":"

    You can use the nlohmann_json::nlohmann_json interface target in CMake. This target populates the appropriate usage requirements for INTERFACE_INCLUDE_DIRECTORIES to point to the appropriate include directories and INTERFACE_COMPILE_FEATURES for the necessary C++11 flags.

    "},{"location":"integration/cmake/#external","title":"External","text":"

    To use this library from a CMake project, you can locate it directly with find_package() and use the namespaced imported target from the generated package configuration:

    Example

    CMakeLists.txt
    cmake_minimum_required(VERSION 3.5)\nproject(ExampleProject LANGUAGES CXX)\n\nfind_package(nlohmann_json 3.11.3 REQUIRED)\n\nadd_executable(example example.cpp)\ntarget_link_libraries(example PRIVATE nlohmann_json::nlohmann_json)\n

    The package configuration file, nlohmann_jsonConfig.cmake, can be used either from an install tree or directly out of the build tree.

    "},{"location":"integration/cmake/#embedded","title":"Embedded","text":"

    To embed the library directly into an existing CMake project, place the entire source tree in a subdirectory and call add_subdirectory() in your CMakeLists.txt file.

    Example

    CMakeLists.txt
    cmake_minimum_required(VERSION 3.5)\nproject(ExampleProject LANGUAGES CXX)\n\n# If you only include this third party in PRIVATE source files, you do not need to install it\n# when your main project gets installed.\nset(JSON_Install OFF CACHE INTERNAL \"\")\n\nadd_subdirectory(nlohmann_json)\n\nadd_executable(example example.cpp)\ntarget_link_libraries(example PRIVATE nlohmann_json::nlohmann_json)\n

    Note

    Do not use include(nlohmann_json/CMakeLists.txt), since that carries with it unintended consequences that will break the build. It is generally discouraged (although not necessarily well documented as such) to use include(...) for pulling in other CMake projects anyways.

    "},{"location":"integration/cmake/#supporting-both","title":"Supporting Both","text":"

    To allow your project to support either an externally supplied or an embedded JSON library, you can use a pattern akin to the following.

    Example

    CMakeLists.txt
    project(ExampleProject LANGUAGES CXX)\n\noption(EXAMPLE_USE_EXTERNAL_JSON \"Use an external JSON library\" OFF)\n\nadd_subdirectory(thirdparty)\n\nadd_executable(example example.cpp)\n\n# Note that the namespaced target will always be available regardless of the import method\ntarget_link_libraries(example PRIVATE nlohmann_json::nlohmann_json)\n
    thirdparty/CMakeLists.txt
    if(EXAMPLE_USE_EXTERNAL_JSON)\n    find_package(nlohmann_json 3.11.3 REQUIRED)\nelse()\n    set(JSON_BuildTests OFF CACHE INTERNAL \"\")\n    add_subdirectory(nlohmann_json)\nendif()\n

    thirdparty/nlohmann_json is then a complete copy of this source tree.

    "},{"location":"integration/cmake/#fetchcontent","title":"FetchContent","text":"

    Since CMake v3.11, FetchContent can be used to automatically download a release as a dependency at configure type.

    Example

    CMakeLists.txt
    cmake_minimum_required(VERSION 3.11)\nproject(ExampleProject LANGUAGES CXX)\n\ninclude(FetchContent)\n\nFetchContent_Declare(json URL https://github.com/nlohmann/json/releases/download/v3.11.3/json.tar.xz)\nFetchContent_MakeAvailable(json)\n\nadd_executable(example example.cpp)\ntarget_link_libraries(example PRIVATE nlohmann_json::nlohmann_json)\n

    Note

    It is recommended to use the URL approach described above which is supported as of version 3.10.0. It is also possible to pass the Git repository like

    FetchContent_Declare(json\n    GIT_REPOSITORY https://github.com/nlohmann/json\n    GIT_TAG v3.11.3\n)\n

    However, the repository https://github.com/nlohmann/json download size is quite large.

    "},{"location":"integration/cmake/#cmake-options","title":"CMake Options","text":""},{"location":"integration/cmake/#json_buildtests","title":"JSON_BuildTests","text":"

    Build the unit tests when BUILD_TESTING is enabled. This option is ON by default if the library's CMake project is the top project. That is, when integrating the library as described above, the test suite is not built unless explicitly switched on with this option.

    "},{"location":"integration/cmake/#json_ci","title":"JSON_CI","text":"

    Enable CI build targets. The exact targets are used during the several CI steps and are subject to change without notice. This option is OFF by default.

    "},{"location":"integration/cmake/#json_diagnostics","title":"JSON_Diagnostics","text":"

    Enable extended diagnostic messages by defining macro JSON_DIAGNOSTICS. This option is OFF by default.

    "},{"location":"integration/cmake/#json_diagnostic_positions","title":"JSON_Diagnostic_Positions","text":"

    Enable position diagnostics by defining macro JSON_DIAGNOSTIC_POSITIONS. This option is OFF by default.

    "},{"location":"integration/cmake/#json_disableenumserialization","title":"JSON_DisableEnumSerialization","text":"

    Disable default enum serialization by defining the macro JSON_DISABLE_ENUM_SERIALIZATION. This option is OFF by default.

    "},{"location":"integration/cmake/#json_fasttests","title":"JSON_FastTests","text":"

    Skip expensive/slow test suites. This option is OFF by default. Depends on JSON_BuildTests.

    "},{"location":"integration/cmake/#json_globaludls","title":"JSON_GlobalUDLs","text":"

    Place user-defined string literals in the global namespace by defining the macro JSON_USE_GLOBAL_UDLS. This option is OFF by default.

    "},{"location":"integration/cmake/#json_implicitconversions","title":"JSON_ImplicitConversions","text":"

    Enable implicit conversions by defining macro JSON_USE_IMPLICIT_CONVERSIONS. This option is ON by default.

    "},{"location":"integration/cmake/#json_install","title":"JSON_Install","text":"

    Install CMake targets during install step. This option is ON by default if the library's CMake project is the top project.

    "},{"location":"integration/cmake/#json_legacydiscardedvaluecomparison","title":"JSON_LegacyDiscardedValueComparison","text":"

    Enable the (incorrect) legacy comparison behavior of discarded JSON values by defining macro JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON. This option is OFF by default.

    "},{"location":"integration/cmake/#json_multipleheaders","title":"JSON_MultipleHeaders","text":"

    Use non-amalgamated version of the library. This option is OFF by default.

    "},{"location":"integration/cmake/#json_systeminclude","title":"JSON_SystemInclude","text":"

    Treat the library headers like system headers (i.e., adding SYSTEM to the target_include_directories call) to checks for this library by tools like Clang-Tidy. This option is OFF by default.

    "},{"location":"integration/cmake/#json_valgrind","title":"JSON_Valgrind","text":"

    Execute test suite with Valgrind. This option is OFF by default. Depends on JSON_BuildTests.

    "},{"location":"integration/migration_guide/","title":"Migration Guide","text":"

    This page collects some guidelines on how to future-proof your code for future versions of this library.

    "},{"location":"integration/migration_guide/#replace-deprecated-functions","title":"Replace deprecated functions","text":"

    The following functions have been deprecated and will be removed in the next major version (i.e., 4.0.0). All deprecations are annotated with HEDLEY_DEPRECATED_FOR to report which function to use instead.

    "},{"location":"integration/migration_guide/#parsing","title":"Parsing","text":"
    • Function friend std::istream& operator<<(basic_json&, std::istream&) is deprecated since 3.0.0. Please use friend std::istream& operator>>(std::istream&, basic_json&) instead.

      DeprecatedFuture-proof
      nlohmann::json j;\nstd::stringstream ss(\"[1,2,3]\");\nj << ss;\n
      nlohmann::json j;\nstd::stringstream ss(\"[1,2,3]\");\nss >> j;\n
    • Passing iterator pairs or pointer/length pairs to parsing functions (parse, accept, sax_parse, from_cbor, from_msgpack, from_ubjson, and from_bson via initializer lists is deprecated since 3.8.0. Instead, pass two iterators; for instance, call from_cbor(ptr, ptr+len) instead of from_cbor({ptr, len}).

      DeprecatedFuture-proof
      const char* s = \"[1,2,3]\";\nbool ok = nlohmann::json::accept({s, s + std::strlen(s)});\n
      const char* s = \"[1,2,3]\";\nbool ok = nlohmann::json::accept(s, s + std::strlen(s));\n
    "},{"location":"integration/migration_guide/#json-pointers","title":"JSON Pointers","text":"
    • Comparing JSON Pointers with strings via operator== and operator!= is deprecated since 3.11.2. To compare a json_pointer p with a string s, convert s to a json_pointer first and use json_pointer::operator== or json_pointer::operator!=.

      DeprecatedFuture-proof
      nlohmann::json::json_pointer lhs(\"/foo/bar/1\");\nassert(lhs == \"/foo/bar/1\");\n
      nlohmann::json::json_pointer lhs(\"/foo/bar/1\");\nassert(lhs == nlohmann::json::json_pointer(\"/foo/bar/1\"));\n
    • The implicit conversion from JSON Pointers to string (json_pointer::operator string_t) is deprecated since 3.11.0. Use json_pointer::to_string instead.

      DeprecatedFuture-proof
      nlohmann::json::json_pointer ptr(\"/foo/bar/1\");\nstd::string s = ptr;\n
      nlohmann::json::json_pointer ptr(\"/foo/bar/1\");\nstd::string s = ptr.to_string();\n
    • Passing a basic_json specialization as template parameter RefStringType to json_pointer is deprecated since 3.11.0. The string type can now be directly provided.

      DeprecatedFuture-proof
      using my_json = nlohmann::basic_json<std::map, std::vector, my_string_type>;\nnlohmann::json_pointer<my_json> ptr(\"/foo/bar/1\");\n
      nlohmann::json_pointer<my_string_type> ptr(\"/foo/bar/1\");\n

      Thereby, nlohmann::my_json::json_pointer is an alias for nlohmann::json_pointer<my_string_type> and is always an alias to the json_pointer with the appropriate string type for all specializations of basic_json.

    "},{"location":"integration/migration_guide/#miscellaneous-functions","title":"Miscellaneous functions","text":"
    • The function iterator_wrapper is deprecated since 3.1.0. Please use the member function items instead.

      DeprecatedFuture-proof
      for (auto &x : nlohmann::json::iterator_wrapper(j))\n{\n    std::cout << x.key() << \":\" << x.value() << std::endl;\n}\n
      for (auto &x : j.items())\n{\n    std::cout << x.key() << \":\" << x.value() << std::endl;\n}\n
    • Function friend std::ostream& operator>>(const basic_json&, std::ostream&) is deprecated since 3.0.0. Please use friend operator<<(std::ostream&, const basic_json&) instead.

      DeprecatedFuture-proof
      j >> std::cout;\n
      std::cout << j;\n
    • The legacy comparison behavior for discarded values is deprecated since 3.11.0. It is already disabled by default and can still be enabled by defining JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON to 1.

      DeprecatedFuture-proof
      #define JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON 1\n#include <nlohmann/json.hpp>\n
      #include <nlohmann/json.hpp>\n
    "},{"location":"integration/migration_guide/#replace-implicit-conversions","title":"Replace implicit conversions","text":"

    Implicit conversions via operator ValueType will be switched off by default in the next major release of the library.

    You can prepare existing code by already defining JSON_USE_IMPLICIT_CONVERSIONS to 0 and replace any implicit conversions with calls to get, get_to, get_ref, or get_ptr.

    DeprecatedFuture-proofFuture-proof (alternative)
    nlohmann::json j = \"Hello, world!\";\nstd::string s = j;\n
    nlohmann::json j = \"Hello, world!\";\nauto s = j.template get<std::string>();\n
    nlohmann::json j = \"Hello, world!\";\nstd::string s;\nj.get_to(s);\n

    You can prepare existing code by already defining JSON_USE_IMPLICIT_CONVERSIONS to 0 and replace any implicit conversions with calls to get.

    "},{"location":"integration/migration_guide/#import-namespace-literals-for-udls","title":"Import namespace literals for UDLs","text":"

    The user-defined string literals operator\"\"_json and operator\"\"_json_pointer will be removed from the global namespace in the next major release of the library.

    DeprecatedFuture-proof
    nlohmann::json j = \"[1,2,3]\"_json;\n
    using namespace nlohmann::literals;\nnlohmann::json j = \"[1,2,3]\"_json;\n

    To prepare existing code, define JSON_USE_GLOBAL_UDLS to 0 and bring the string literals into scope where needed.

    "},{"location":"integration/migration_guide/#do-not-hard-code-the-complete-library-namespace","title":"Do not hard-code the complete library namespace","text":"

    The nlohmann namespace contains a sub-namespace to avoid problems when different versions or configurations of the library are used in the same project. Always use nlohmann as namespace or, when the exact version and configuration is relevant, use macro NLOHMANN_JSON_NAMESPACE to denote the namespace.

    DangerousFuture-proofFuture-proof (alternative)
    void to_json(nlohmann::json_abi_v3_11_2::json& j, const person& p)\n{\n    j[\"age\"] = p.age;\n}\n
    void to_json(nlohmann::json& j, const person& p)\n{\n    j[\"age\"] = p.age;\n}\n
    void to_json(NLOHMANN_JSON_NAMESPACE::json& j, const person& p)\n{\n    j[\"age\"] = p.age;\n}\n
    "},{"location":"integration/migration_guide/#do-not-use-the-details-namespace","title":"Do not use the details namespace","text":"

    The details namespace is not part of the public API of the library and can change in any version without announcement. Do not rely on any function or type in the details namespace.

    "},{"location":"integration/package_managers/","title":"Package Managers","text":"

    Homebrew nlohmann-json Meson nlohmann_json Bazel nlohmann_json Conan nlohmann_json Spack nlohmann-json Hunter nlohmann_json vcpkg nlohmann-json cget nlohmann/json Swift Package Manager nlohmann/json NuGet nlohmann.json Conda nlohmann_json MacPorts nlohmann-json CPM.cmake gh:nlohmann/json xmake nlohmann_json

    "},{"location":"integration/package_managers/#running-example","title":"Running example","text":"

    Throughout this page, we will describe how to compile the example file example.cpp below.

    #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n

    When executed, this program should create output similar to

    {\n    \"compiler\": {\n        \"c++\": \"201103\",\n        \"family\": \"gcc\",\n        \"version\": \"12.3.0\"\n    },\n    \"copyright\": \"(C) 2013-2022 Niels Lohmann\",\n    \"name\": \"JSON for Modern C++\",\n    \"platform\": \"apple\",\n    \"url\": \"https://github.com/nlohmann/json\",\n    \"version\": {\n        \"major\": 3,\n        \"minor\": 11,\n        \"patch\": 3,\n        \"string\": \"3.11.3\"\n    }\n}\n
    "},{"location":"integration/package_managers/#homebrew","title":"Homebrew","text":"

    Summary

    formula: nlohmann-json

    • Availalbe versions: current version and development version (with --HEAD parameter)
    • The formula is updated with every release.
    • Maintainer: Niels Lohmann
    • File issues at the Homebrew issue tracker
    • Homebrew website

    If you are using Homebrew, you can install the library with

    brew install nlohmann-json\n

    The header can be used directly in your code or via CMake.

    Example: Raw compilation
    1. Create the following file:

      example.cpp
      #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
    2. Install the package:

      brew install nlohmann-json\n
    3. Compile the code and pass the Homebrew prefix to the include path such that the library can be found:

      c++ example.cpp -I$(brew --prefix nlohmann-json)/include -std=c++11 -o example\n
    Example: CMake
    1. Create the following files:

      example.cpp
      #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
      CMakeLists.txt
      cmake_minimum_required(VERSION 3.15)\nproject(json_example)\n\nfind_package(nlohmann_json CONFIG REQUIRED)\n\nadd_executable(json_example example.cpp)\ntarget_link_libraries(json_example PRIVATE nlohmann_json::nlohmann_json)\n
    2. Install the package:

      brew install nlohmann-json\n
    3. Compile the code and pass the Homebrew prefix to CMake to find installed packages via find_package:

      CMAKE_PREFIX_PATH=$(brew --prefix) cmake -S . -B build\ncmake --build build\n
    "},{"location":"integration/package_managers/#meson","title":"Meson","text":"

    Summary

    wrap: nlohmann_json

    • Availalbe versions: current version and select older versions (see WrapDB)
    • The package is update automatically from file meson.build.
    • File issues at the library issue tracker
    • Meson website

    If you are using the Meson Build System, add this source tree as a meson subproject. You may also use the include.zip published in this project's Releases to reduce the size of the vendored source tree. Alternatively, you can get a wrap file by downloading it from Meson WrapDB, or use

    meson wrap install nlohmann_json\n

    Please see the Meson project for any issues regarding the packaging.

    The provided meson.build can also be used as an alternative to CMake for installing nlohmann_json system-wide in which case a pkg-config file is installed. To use it, have your build system require the nlohmann_json pkg-config dependency. In Meson, it is preferred to use the dependency() object with a subproject fallback, rather than using the subproject directly.

    Example: Wrap
    1. Create the following files:

      meson.build
      project('json_example', 'cpp',\n  version: '1.0',\n  default_options: ['cpp_std=c++11']\n)\n\ndependency_json = dependency('nlohmann_json', required: true)\n\nexecutable('json_example',\n  sources: ['example.cpp'],\n  dependencies: [dependency_json],\n  install: true\n)\n
      example.cpp
      #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
    2. Use the Meson WrapDB to fetch the nlohmann/json wrap:

      mkdir subprojects\nmeson wrap install nlohmann_json\n
    3. Build:

      meson setup build\nmeson compile -C build\n
    "},{"location":"integration/package_managers/#bazel","title":"Bazel","text":"

    Summary

    use bazel_dep, git_override, or local_path_override

    • Any version, that is available via Bazel Central Registry
    • File issues at the library issue tracker
    • Bazel website

    This repository provides a Bazel MODULE.bazel and a corresponding BUILD.bazel file. Therefore, this repository can be referenced within a MODULE.bazel by rules such as archive_override, git_override, or local_path_override. To use the library you need to depend on the target @nlohmann_json//:json (i.e., via deps attribute).

    Example
    1. Create the following files:

      BUILD
      cc_binary(\n    name = \"main\",\n    srcs = [\"example.cpp\"],\n    deps = [\"@nlohmann_json//:json\"],\n)\n
      WORKSPACE
      bazel_dep(name = \"nlohmann_json\", version = \"3.11.3.bcr.1\")\n
      example.cpp
      #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
    2. Build and run:

      bazel build //:main\nbazel run //:main\n
    "},{"location":"integration/package_managers/#conan","title":"Conan","text":"

    Summary

    recipe: nlohmann_json

    • Availalbe versions: current version and older versions (see Conan Center)
    • The package is update automatically via this recipe.
    • File issues at the Conan Center issue tracker
    • Conan website

    If you are using Conan to manage your dependencies, merely add nlohmann_json/x.y.z to your conanfile's requires, where x.y.z is the release version you want to use.

    Example
    1. Create the following files:

      Conanfile.txt
      [requires]\nnlohmann_json/3.11.3\n\n[generators]\nCMakeToolchain\nCMakeDeps\n
      CMakeLists.txt
      cmake_minimum_required(VERSION 3.15)\nproject(json_example)\n\nfind_package(nlohmann_json REQUIRED)\n\nadd_executable(json_example example.cpp)\ntarget_link_libraries(json_example PRIVATE nlohmann_json::nlohmann_json)\n
      example.cpp
      #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
    2. Call Conan:

      conan install . --output-folder=build --build=missing\n
    3. Build:

      cmake -S . -B build -DCMAKE_TOOLCHAIN_FILE=\"conan_toolchain.cmake\" -DCMAKE_BUILD_TYPE=Release\ncmake --build build\n
    "},{"location":"integration/package_managers/#spack","title":"Spack","text":"

    Summary

    package: nlohmann-json

    • Availalbe versions: current version and older versions (see Spack package)
    • The package is updated with every release.
    • Maintainer: Axel Huebl
    • File issues at the Spack issue tracker
    • Spack website

    If you are using Spack to manage your dependencies, you can use the nlohmann-json package via

    spack install nlohmann-json\n

    Please see the Spack project for any issues regarding the packaging.

    Example
    1. Create the following files:

      CMakeLists.txt
      cmake_minimum_required(VERSION 3.15)\nproject(json_example)\n\nfind_package(nlohmann_json REQUIRED)\n\nadd_executable(json_example example.cpp)\ntarget_link_libraries(json_example PRIVATE nlohmann_json::nlohmann_json)\n
      example.cpp
      #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
    2. Install the library:

      spack install nlohmann-json\n
    3. Load the environment for your Spack-installed packages:

      spack load nlohmann-json\n
    4. Build the project with CMake:

      cmake -S . -B build -DCMAKE_PREFIX_PATH=$(spack location -i nlohmann-json)\ncmake --build build\n
    "},{"location":"integration/package_managers/#hunter","title":"Hunter","text":"

    Summary

    package: nlohmann_json

    • Availalbe versions: current version and older versions (see Hunter package)
    • The package is updated with every release.
    • File issues at the Hunter issue tracker
    • Hunter website

    If you are using Hunter on your project for external dependencies, then you can use the nlohmann_json package via

    hunter_add_package(nlohmann_json)\n

    Please see the Hunter project for any issues regarding the packaging.

    Example
    1. Create the following files:

      CMakeLists.txt
      cmake_minimum_required(VERSION 3.15)\n\ninclude(\"cmake/HunterGate.cmake\")\nHunterGate(\n    URL \"https://github.com/cpp-pm/hunter/archive/v0.23.297.tar.gz\"\n    SHA1 \"3319fe6a3b08090df7df98dee75134d68e2ef5a3\"\n)\n\nproject(json_example)\n\nhunter_add_package(nlohmann_json)\nfind_package(nlohmann_json CONFIG REQUIRED)\n\nadd_executable(json_example example.cpp)\ntarget_link_libraries(json_example PRIVATE nlohmann_json::nlohmann_json)\n
      example.cpp
      #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
    2. Download required files

      mkdir cmake\nwget https://raw.githubusercontent.com/cpp-pm/gate/master/cmake/HunterGate.cmake -O cmake/HunterGate.cmake\n
    3. Build the project with CMake:

      cmake -S . -B build\ncmake --build build\n
    "},{"location":"integration/package_managers/#vcpkg","title":"vcpkg","text":"

    Summary

    package: nlohmann-json

    • Availalbe versions: current version
    • The package is updated with every release.
    • File issues at the vcpkg issue tracker
    • vcpkg website

    If you are using vcpkg on your project for external dependencies, then you can install the nlohmann-json package with

    vcpkg install nlohmann-json\n

    and follow the then displayed descriptions. Please see the vcpkg project for any issues regarding the packaging.

    Example
    1. Create the following files:

      CMakeLists.txt
      cmake_minimum_required(VERSION 3.15)\nproject(json_example)\n\nfind_package(nlohmann_json CONFIG REQUIRED)\n\nadd_executable(json_example example.cpp)\ntarget_link_libraries(json_example PRIVATE nlohmann_json::nlohmann_json)\n
      example.cpp
      #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
    2. Install package:

      vcpkg install nlohmann-json\n
    3. Build:

      cmake -S . -B build -DCMAKE_TOOLCHAIN_FILE=$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake\ncmake --build build\n
    "},{"location":"integration/package_managers/#cget","title":"cget","text":"

    Summary

    package: nlohmann/json

    • Availalbe versions: current version and older versions
    • The package is updated with every release.
    • File issues at the cget issue tracker
    • cget website

    If you are using cget, you can install the latest master version with

    cget install nlohmann/json\n

    A specific version can be installed with cget install nlohmann/json@v3.11.3. Also, the multiple header version can be installed by adding the -DJSON_MultipleHeaders=ON flag (i.e., cget install nlohmann/json -DJSON_MultipleHeaders=ON).

    Example
    1. Create the following files:

      CMakeLists.txt
      cmake_minimum_required(VERSION 3.15)\nproject(json_example)\n\nfind_package(nlohmann_json CONFIG REQUIRED)\n\nadd_executable(json_example example.cpp)\ntarget_link_libraries(json_example PRIVATE nlohmann_json::nlohmann_json)\n
      example.cpp
      #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
    2. Initialize cget

      cget init\n
    3. Install the library

      cget install nlohmann/json\n
    4. Build

      cmake -S . -B build -DCMAKE_TOOLCHAIN_FILE=cget/cget/cget.cmake\ncmake --build build\n
    "},{"location":"integration/package_managers/#swift-package-manager","title":"Swift Package Manager","text":"

    Summary

    package: nlohmann/json

    • Availalbe versions: current version and older versions
    • The package is updated with every release.
    • File issues at the library issue tracker
    • Xcode documentation
    "},{"location":"integration/package_managers/#nuget","title":"NuGet","text":"

    Summary

    package: nlohmann.json

    • Availalbe versions: current and previous versions
    • The package is updated with every release.
    • Maintainer: Hani Kaabi
    • File issues at the maintainer's issue tracker
    • NuGet website

    If you are using NuGet, you can use the package nlohmann.json with

    dotnet add package nlohmann.json\n
    Example

    Probably the easiest way to use NuGet packages is through Visual Studio graphical interface. Just right-click on a project (any C++ project would do) in \u201cSolution Explorer\u201d and select \u201cManage NuGet Packages\u2026\u201d

    Now you can click on \u201cBrowse\u201d tab and find the package you like to install.

    Most of the packages in NuGet gallery are .NET packages and would not be useful in a C++ project. Microsoft recommends adding \u201cnative\u201d and \u201cnativepackage\u201d tags to C++ NuGet packages to distinguish them, but even adding \u201cnative\u201d to search query would still show many .NET-only packages in the list.

    Nevertheless, after finding the package you want, click on \u201cInstall\u201d button and accept confirmation dialogs. After the package is successfully added to the projects, you should be able to build and execute the project without the need for making any more changes to build settings.

    Note

    A few notes:

    • NuGet packages are installed per project and not system-wide. The header and binaries for the package are only available to the project it is added to, and not other projects (obviously unless we add the package to those projects as well)
    • One of the many great things about your elegant work is that it is a header-only library, which makes deployment very straightforward. In case of libraries which need binary deployment (.lib, .dll and .pdb for debug info) the different binaries for each supported compiler version must be added to the NuGet package. Some library creators cram binary versions for all supported Visual C++ compiler versions in the same package, so a single package will support all compilers. Some others create a different package for each compiler version (and you usually see things like \u201cv140\u201d or \u201cvc141\u201d in package name to clarify which VC++ compiler this package supports).
    • Packages can have dependency to other packages, and in this case, NuGet will install all dependencies as well as the requested package recursively.

    What happens behind the scenes

    After you add a NuGet package, three changes occur in the project source directory. Of course, we could make these changes manually instead of using GUI:

    1. A packages.config file will be created (or updated to include the package name if one such file already exists). This file contains a list of the packages required by this project (name and minimum version) and must be added to the project source code repository, so if you move the source code to a new machine, MSBuild/NuGet knows which packages it has to restore (which it does automatically before each build).

      <?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"nlohmann.json\" version=\"3.5.0\" targetFramework=\"native\" />\n</packages>\n
    2. A packages folder which contains actual files in the packages (these are header and binary files required for a successful build, plus a few metadata files). In case of this library for example, it contains json.hpp:

      Note

      This directory should not be added to the project source code repository, as it will be restored before each build by MSBuild/NuGet. If you go ahead and delete this folder, then build the project again, it will magically re-appear!

    3. Project MSBuild makefile (which for Visual C++ projects has a .vcxproj extension) will be updated to include settings from the package.

      The important bit for us here is line 170, which tells MSBuild to import settings from packages\\nlohmann.json.3.5.0\\build\\native\\nlohmann.json.targets file. This is a file the package creator created and added to the package (you can see it is one of the two files I created in this repository, the other just contains package attributes like name and version number). What does it contain?

      For our header-only repository, the only setting we need is to add our include directory to the list of AdditionalIncludeDirectories:

      <?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n    <ItemDefinitionGroup>\n        <ClCompile>\n            <AdditionalIncludeDirectories>$(MSBuildThisFileDirectory)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n        </ClCompile>\n    </ItemDefinitionGroup>\n</Project>\n

      For libraries with binary files, we will need to add .lib files to linker inputs and add settings to copy .dll and other redistributable files to output directory, if needed.

      There are other changes to the makefile as well:

      • Lines 165-167 add the packages.config as one of project files (so it is shown in Solution Explorer tree view). It is added as None (no build action) and removing it wouldn\u2019t affect build.

      • Lines 172-177 check to ensure the required packages are present. This will display a build error if package directory is empty (for example when NuGet cannot restore packages because Internet connection is down). Again, if you omit this section, the only change in build would be a more cryptic error message if build fails.

      Note

      Changes to .vcxproj makefile should also be added to project source code repository.

    As you can see, the mechanism NuGet uses to modify project settings is through MSBuild makefiles, so using NuGet with other build systems and compilers (like CMake) as a dependency manager is either impossible or more problematic than useful.

    Please refer to this extensive description for more information.

    "},{"location":"integration/package_managers/#conda","title":"Conda","text":"

    Summary

    package: nlohmann_json

    • Availalbe versions: current and previous versions
    • The package is updated with every release.
    • File issues at the feedstock's issue tracker
    • Conda documentation

    If you are using conda, you can use the package nlohmann_json from conda-forge executing

    conda install -c conda-forge nlohmann_json\n
    Example
    1. Create the following file:

      example.cpp
      #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
    2. Create and activate an anvironment \"json`:

      conda create -n json\nconda activate json\n
    3. Install the package:

      conda install -c conda-forge nlohmann_json\n
    4. Build the code:

      g++ -std=c++11 -I$(conda info --base)/envs/json/include example.cpp -o example\n
    "},{"location":"integration/package_managers/#msys2","title":"MSYS2","text":"

    If you are using MSYS2, you can use the mingw-w64-nlohmann-json package, type pacman -S mingw-w64-i686-nlohmann-json or pacman -S mingw-w64-x86_64-nlohmann-json for installation. Please file issues here if you experience problems with the packages.

    The package is updated automatically.

    "},{"location":"integration/package_managers/#macports","title":"MacPorts","text":"

    Summary

    port: nlohmann-json

    • Availalbe versions: current version
    • The port is updated with every release.
    • File issues at the MacPorts issue tracker
    • MacPorts website

    If you are using MacPorts, execute

    sudo port install nlohmann-json\n

    to install the nlohmann-json package.

    Example: Raw compilation
    1. Create the following file:

      example.cpp
      #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
    2. Install the package:

      sudo port install nlohmann-json\n
    3. Compile the code and pass the Homebrew prefix to the include path such that the library can be found:

      c++ example.cpp -I/opt/local/include -std=c++11 -o example\n
    Example: CMake
    1. Create the following files:

      example.cpp
      #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
      CMakeLists.txt
      cmake_minimum_required(VERSION 3.15)\nproject(json_example)\n\nfind_package(nlohmann_json CONFIG REQUIRED)\n\nadd_executable(json_example example.cpp)\ntarget_link_libraries(json_example PRIVATE nlohmann_json::nlohmann_json)\n
    2. Install the package:

      sudo port install nlohmann-json\n
    3. Compile the code:

      cmake -S . -B build\ncmake --build build\n
    "},{"location":"integration/package_managers/#build2","title":"build2","text":"

    If you are using build2, you can use the nlohmann-json package from the public repository http://cppget.org or directly from the package's sources repository. In your project's manifest file, add depends: nlohmann-json (probably with some version constraints). If you are not familiar with using dependencies in build2, please read this introduction. Please file issues here if you experience problems with the packages.

    The package is updated automatically.

    bdep new -t exe -l c++\n
    "},{"location":"integration/package_managers/#cpmcmake","title":"CPM.cmake","text":"

    Summary

    package: gh:nlohmann/json

    • Availalbe versions: current and previous versions
    • The package is updated with every release.
    • File issues at the CPM.cmake issue tracker
    • CPM.cmake website

    If you are using CPM.cmake, add the CPM.cmake script and the following snippet to your CMake project:

    CPMAddPackage(\"gh:nlohmann/json@3.11.3\")\n
    Example
    1. Create the following files:

      example.cpp
      #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
      CMakeLists.txt
      cmake_minimum_required(VERSION 3.15)\nproject(json_example)\n\ninclude(${CMAKE_SOURCE_DIR}/cmake/CPM.cmake)\n\nCPMAddPackage(\"gh:nlohmann/json@3.11.3\")\n\nadd_executable(json_example example.cpp)\ntarget_link_libraries(json_example PRIVATE nlohmann_json::nlohmann_json)\n
    2. Download CPM.cmake

      mkdir -p cmake\nwget -O cmake/CPM.cmake https://github.com/cpm-cmake/CPM.cmake/releases/latest/download/get_cpm.cmake\n
    3. Build

      cmake -S . -B build\ncmake --build build\n
    "},{"location":"integration/package_managers/#xmake","title":"xmake","text":"

    Summary

    package: nlohmann_json

    • Availalbe versions: current and previous versions
    • The package is updated with every release.
    • File issues at the xmake issue tracker
    • xmake website
    Example
    1. Create the following files:

      example.cpp
      #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
      xmake.lua
      add_requires(\"nlohmann_json\")\n\nadd_rules(\"mode.debug\", \"mode.release\")\ntarget(\"xm\")\n    set_kind(\"binary\")\n    add_files(\"example.cpp\")\n    add_packages(\"nlohmann_json\")\n    set_languages(\"cxx11\")\n
    2. Build

      xmake\n
    3. Run

      xmake run\n
    "},{"location":"integration/package_managers/#other-package-managers","title":"Other package managers","text":"

    The library is also contained in many other package repositories:

    Package version overview

    "},{"location":"integration/package_managers/#buckaroo","title":"Buckaroo","text":"

    If you are using Buckaroo, you can install this library's module with buckaroo add github.com/buckaroo-pm/nlohmann-json. There is a demo repo here.

    Warning

    The module is outdated as the respective repository has not been updated in years.

    "},{"location":"integration/package_managers/#cocoapods","title":"CocoaPods","text":"

    If you are using CocoaPods, you can use the library by adding pod \"nlohmann_json\", '~>3.1.2' to your podfile (see an example). Please file issues here.

    Warning

    The module is outdated as the respective pod has not been updated in years.

    "},{"location":"integration/pkg-config/","title":"Pkg-config","text":"

    If you are using bare Makefiles, you can use pkg-config to generate the include flags that point to where the library is installed:

    pkg-config nlohmann_json --cflags\n

    Users of the Meson build system will also be able to use a system-wide library, which will be found by pkg-config:

    json = dependency('nlohmann_json', required: true)\n
    "}]} \ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml index 93e5c636a..29bc82e55 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -2,942 +2,942 @@ https://json.nlohmann.me/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/json/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/operator_gtgt/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/operator_literal_json/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/operator_literal_json_pointer/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/operator_ltlt/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/ordered_json/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/ordered_map/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/adl_serializer/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/adl_serializer/from_json/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/adl_serializer/to_json/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/accept/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/array/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/array_t/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/at/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/back/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/basic_json/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/begin/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/binary/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/binary_t/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/boolean_t/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/cbegin/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/cbor_tag_handler_t/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/cend/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/clear/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/contains/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/count/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/crbegin/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/crend/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/default_object_comparator_t/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/diff/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/dump/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/emplace/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/emplace_back/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/empty/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/end/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/end_pos/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/erase/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/error_handler_t/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/exception/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/find/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/flatten/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/from_bjdata/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/from_bson/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/from_cbor/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/from_msgpack/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/from_ubjson/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/front/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/get/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/get_allocator/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/get_binary/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/get_ptr/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/get_ref/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/get_to/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/input_format_t/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/insert/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/invalid_iterator/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/is_array/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/is_binary/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/is_boolean/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/is_discarded/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/is_null/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/is_number/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/is_number_float/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/is_number_integer/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/is_number_unsigned/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/is_object/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/is_primitive/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/is_string/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/is_structured/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/items/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/json_base_class_t/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/json_serializer/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/max_size/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/merge_patch/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/meta/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/number_float_t/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/number_integer_t/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/number_unsigned_t/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/object/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/object_comparator_t/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/object_t/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/operator%2B%3D/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/operator%3D/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/operator%5B%5D/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/operator_ValueType/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/operator_eq/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/operator_ge/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/operator_gt/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/operator_le/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/operator_lt/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/operator_ne/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/operator_spaceship/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/operator_value_t/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/other_error/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/out_of_range/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/parse/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/parse_error/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/parse_event_t/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/parser_callback_t/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/patch/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/patch_inplace/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/push_back/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/rbegin/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/rend/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/sax_parse/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/size/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/start_pos/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/std_hash/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/std_swap/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/string_t/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/swap/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/to_bjdata/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/to_bson/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/to_cbor/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/to_msgpack/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/to_string/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/to_ubjson/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/type/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/type_error/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/type_name/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/unflatten/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/update/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/value/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/value_t/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/basic_json/~basic_json/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/byte_container_with_subtype/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/byte_container_with_subtype/byte_container_with_subtype/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/byte_container_with_subtype/clear_subtype/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/byte_container_with_subtype/has_subtype/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/byte_container_with_subtype/set_subtype/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/byte_container_with_subtype/subtype/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/json_pointer/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/json_pointer/back/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/json_pointer/empty/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/json_pointer/json_pointer/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/json_pointer/operator_eq/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/json_pointer/operator_ne/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/json_pointer/operator_slash/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/json_pointer/operator_slasheq/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/json_pointer/operator_string_t/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/json_pointer/parent_pointer/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/json_pointer/pop_back/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/json_pointer/push_back/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/json_pointer/string_t/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/json_pointer/to_string/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/json_sax/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/json_sax/binary/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/json_sax/boolean/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/json_sax/end_array/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/json_sax/end_object/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/json_sax/key/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/json_sax/null/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/json_sax/number_float/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/json_sax/number_integer/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/json_sax/number_unsigned/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/json_sax/parse_error/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/json_sax/start_array/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/json_sax/start_object/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/json_sax/string/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/macros/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/macros/json_assert/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/macros/json_diagnostic_positions/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/macros/json_diagnostics/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/macros/json_disable_enum_serialization/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/macros/json_has_cpp_11/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/macros/json_has_filesystem/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/macros/json_has_ranges/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/macros/json_has_static_rtti/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/macros/json_has_three_way_comparison/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/macros/json_no_io/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/macros/json_noexception/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/macros/json_skip_library_version_check/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/macros/json_skip_unsupported_compiler_check/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/macros/json_throw_user/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/macros/json_use_global_udls/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/macros/json_use_implicit_conversions/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/macros/json_use_legacy_discarded_value_comparison/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/macros/nlohmann_define_derived_type/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/macros/nlohmann_define_type_intrusive/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/macros/nlohmann_define_type_non_intrusive/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/macros/nlohmann_json_namespace/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/macros/nlohmann_json_namespace_begin/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/macros/nlohmann_json_namespace_no_version/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/macros/nlohmann_json_serialize_enum/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/api/macros/nlohmann_json_version_major/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/community/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/community/code_of_conduct/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/community/contribution_guidelines/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/community/governance/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/community/quality_assurance/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/community/security_policy/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/features/arbitrary_types/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/features/assertions/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/features/binary_values/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/features/comments/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/features/enum_conversion/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/features/iterators/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/features/json_patch/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/features/json_pointer/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/features/macros/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/features/merge_patch/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/features/namespace/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/features/object_order/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/features/binary_formats/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/features/binary_formats/bjdata/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/features/binary_formats/bson/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/features/binary_formats/cbor/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/features/binary_formats/messagepack/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/features/binary_formats/ubjson/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/features/element_access/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/features/element_access/checked_access/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/features/element_access/default_value/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/features/element_access/unchecked_access/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/features/parsing/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/features/parsing/json_lines/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/features/parsing/parse_exceptions/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/features/parsing/parser_callbacks/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/features/parsing/sax_interface/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/features/types/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/features/types/number_handling/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/home/architecture/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/home/customers/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/home/design_goals/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/home/exceptions/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/home/faq/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/home/license/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/home/releases/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/home/sponsors/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/integration/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/integration/cmake/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/integration/migration_guide/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/integration/package_managers/ - 2025-03-29 + 2025-04-01 https://json.nlohmann.me/integration/pkg-config/ - 2025-03-29 + 2025-04-01 \ No newline at end of file diff --git a/sitemap.xml.gz b/sitemap.xml.gz index 73fe1babb930985d5e4446197f2f5c4636879ef3..1432a5a88201f6433d74a3031871ae3ddafdc8dc 100644 GIT binary patch delta 1675 zcmV;626Xwp4ZaNrABzYGfGq2g2Ob65X#=!@kt!~KdYaAI0|nO3emuXvygEN4t6Z<` z`0@O=FTY;=bpGk~&CL=FQ#?z*Z29B)6r=yJ**rczUb2ofOV5`sj2l){dc&Lb!_C#@ z&*!&q&eB)D!0x;9bz_{m%~#=cnLBp&(i%6-(%Q?JHaDC6vE@^egLUyUTC(*Z)^a((CeJWl85L$moI?;}}ueCUsJfMj-G1m_c}_ZF&o1iKcpA zgq{NRkSNS}2ithkUS{Y7>Xu^8x7LT2z0+z5dNEI@QP zeQo^`#o)p$Bhpbw5i|v;{)05S7iDD&`dn%j;PiGPKpTdPuuJkm8G6l1hMsyTg=zWl2R-Yk9|%gpF=#uY5f&Af038yM zW?=rMRHmf&BviUQBR!jf0;`-j0-5EL;Di7qpfHl~GO7s)fy{&)&tu3@c{+_XK=M3` zAyLqiSW`<#D-4ogt?_&N?(^FperbTC35fTf-@b2vL;NnyLSMF?8epNX4M2>4Ewseg z!1F3h3oT(c-9k#5F<&yv#C~UHXqYM#S#l*1} zljI3Yz>m@+335IcX^^q^A051ZdMG16t5p&JwsI%|!0Uz*1A1*EA)pJFA~fNV)zKbv zVX$%rHp61!WtEFhHWAnaC5{HmBPYc_aT@`*k;J;|CxvW}I!=O@4q+I+L-PNiEPJ;a zc;^M$j-m3cClDZd)y zJ;81sP+xzf4XbN^$$%+oe@OwVX5VArR;Bj{yOkfPJ=h^&Edpd3oTUoYm)us-a_5o( z8{v)tdM!umIBJy_A9db;yw6SGU@2I3CfS8#rS`@A5^%7=F;vb{DeuMgH5g*hhIq@7 zW-v%8sA4cgvYq+i2{CFgNt^BRQtvd+mkMUC4*%tw%Tu zHBt4@_Zz6>dM)0&5UDQ%M(4w0&}3;0yGOBbb;tA=BFT%vGj()BzpEnE1frr z*mVG*kqnJeZ4djU*E(Oc*?In0^fYKo=_TlgyvL~ig2gLDWi>rTUSZ+-J6FHQWK++! z!nL#Ba;8$r-V}^L6lwkgQkrL1v(N(9e(P&-o?9S#o^)q5cjz29Ku~>y z!>b^SF@Y~IDsOgp4I@1wEJv!m?cp_=>N^h(bEKg>Ka2cdcbFR>C^CMhJZb!*)azLd*_+BG1@s%n<^1k#@M`rR!=!OL5dJW`dNB`b-%wKFO;)` V{tuH#d0~pTe*v&>4prQF008<;8xa5i delta 1675 zcmV;626Xwp4ZaNrABzYG066E72Ob4F4gxfVkt!~KewxkM0|nO3emZ}5d3An9R=Hl= z@zeQlUw^&$>HPEUo0}yVrg)Zq+486JDMtVEX7l*?c*#1_EInVkFm6~)=?!nz4>wnr zAJ1>!oTaaPf!%lI>&7^Bo3Fy@GI#9kr8RDvrL~tcZEiOC$H%`dInJ)Xy}r8saB=ni z;`(EM`jz#w-Q_p?>;Eey>2>+AvZV7AWOPA{af~Q!lR7C#Baruh%pkneHob+hL{q&l zLQjEuNEfWq`7y1lEPErEf|f@AQN6cch!4Tdh}M6B5gh`eldKh3SSm$60`)_XTd=%9 z-ak;gljB%Ux&!?37*)15kaLJx-lwZ=@nP zfWUf6i6R2M1n4uF#D#Z2n@mA6as-Bu>`w!(0X^kFQ6s(eK_f@vU}TJhy#1Uj>F#=e z86_G58nhLJ>@|ZCW*$9sUMLhxcZco`q|Z7MR$NGv{vtbxSPXP3Av5?0ZiGMs79cvD zzP5geVsK%W5$PzT2$}*^|3Mnvi?Xr>eJ(W%aC$otpbbMt*d_U(483M0Lr*=F!Y;;u z0p^ZE0|;U;4!QPm0Lg3KV;gO{_^(yFAZ=s0rBC>+Yb$Jh~K4I=DG*|b!VMxwi!>U^$zZfRx+hkM z2eMFCr(gu3q%pZ_1d9R<&x(ACOTaZee&GpRz=N)swMqiORt_Zqc->H9K(B2i1a#q2geE+)I@)6{ z3|7v-W>_q|ta9$}V$4T(gAq>M0Nd6y`W$#vl zT*>Kekcug`NChDR9zAg)4M-83=p%OdoB*`a5xBLWzsIoD1O}V>@%s;dNE+!JP*8sY z<7LQ6=LQ}f@4P_UF;u?w1fqpufeN#CWoq&XB@3xIKd3{B&G+(ozbc~W{{#S1{j?{z zC)mvc>g$iRVRh{<889X7FDXFP?0XE{s`MUVxAFtE2Rj6;MSx6$vs9t_lG`d;?p!ip zBiu1SujObRN3HVWqt2Uu_qhoiECtKXB)gET)V`Qs0uDAfhRRtg<-K_K4h%79L%iik zGZ>^4R52JL+0Oj%gcvoLBu;@yJj(4_Qmz>~Uab?_LG@9`ksMR-z4pTBF62Y>)+3yS zny7l{`yEtry%z6Xh}4$>qx0c0XtFeh-J@8zx?_3_k>tf_TqlixSbD=?5^gwZNQOqKwuk-FYn?CJ>^y%gdK$E)^b+(#-eXjM!QvI7vYMVEuds0aovS}$vZ-fV z;o4bmIa8@*Zwf{riZuTLDb2I1S!jW4zxA~^&n*x=Pr9?bs~Y4dYd9}fS6#0=Xe!rJ z-gJ;Ajee;b)gLo|B#WZECA(l^Ty#$+861YNj4q7>D{WPSa*+SFq=zDIbG*L<7zLAB zLdNhexfC@A=0GwZQNSA+IvtBMoaY^eAe5X-WjAWCzMiLDJSGT09u8z9M7tzZ4t^{G z;rYlX$o=ou{wi;|d7)l?1$wVvJ==Ovh8#t)mq$3Wd+~LDXMg!$GC+g3J9Lg4AgI2< z;Z+dEn7|hpl{Y)QhLIi-mLpZ(_V5}_^_>TYInq#`pGE$!JIoCbl$;>-?EpQW!C$*7 z{xzP(;+rThWY=9k{Z6{L7quh2?7V|uL`@)Y5oa&?awoix?8Ar_!05As`WNuw26u0F6r zng}IR^%iEIy0vZyU&`e|?HZ6{RW-|d0%^~B{ce}W1ySVCAVmlw{Vct}y5HZA7s}Z| V|A$GWyfDSvzW{@@y64<^005bJ8qoj%